summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-09-24 22:40:33 +0200
committerLudovic Courtès <ludo@gnu.org>2013-09-24 23:40:50 +0200
commit30f25b033c7fbcdcc7050b1655fc832252255c7e (patch)
tree8fdfdf73d4cd5fdf6812a4fb78269a5ac35991f0
parent2d195e677562f34e00137561911a5b84796059f6 (diff)
downloadguix-30f25b033c7fbcdcc7050b1655fc832252255c7e.tar.gz
gnu: vm: Initialize the image's store.
* gnu/system/vm.scm (qemu-image): Add 'initialize-store?' keyword
  parameter.  Use 'guix-register' when INITIALIZE-STORE? is true.
  (system-qemu-image): Pass #:initialize-store? #t.
-rw-r--r--gnu/packages/package-management.scm11
-rw-r--r--gnu/system/vm.scm23
2 files changed, 32 insertions, 2 deletions
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 87fa008002..e19ce04716 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -103,3 +103,14 @@ A user-land free software distribution for GNU/Linux comes as part of Guix.
 
 Guix is based on the Nix package manager.")
     (license gpl3+)))
+
+(define-public guix-0.4
+  ;; XXX: Hack to allow the use of a 0.4ish tarball.  This assumes that you
+  ;; have run 'make dist' in your build tree.  Remove when 0.4 is out.
+  (package (inherit guix)
+    (version "0.4rc")
+    (source (let ((builddir (dirname
+                             (canonicalize-path
+                              (dirname (search-path %load-path
+                                                    "guix/config.scm"))))))
+              (string-append builddir "/guix-0.4.tar.gz")))))
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index df55f7c94e..a864ab3de3 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -31,6 +31,7 @@
   #:use-module (gnu packages grub)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages linux-initrd)
+  #:use-module (gnu packages package-management)
   #:use-module ((gnu packages make-bootstrap)
                 #:select (%guile-static-stripped))
   #:use-module (gnu packages system)
@@ -191,6 +192,7 @@ made available under the /xchg CIFS share."
                      (system (%current-system))
                      (disk-image-size (* 100 (expt 2 20)))
                      grub-configuration
+                     (initialize-store? #f)
                      (populate #f)
                      (inputs '())
                      (inputs-to-copy '()))
@@ -199,7 +201,8 @@ disk image, with a GRUB installation that uses GRUB-CONFIGURATION as its
 configuration file.
 
 INPUTS-TO-COPY is a list of inputs (as for packages) whose closure is copied
-into the image being built.
+into the image being built.  When INITIALIZE-STORE? is true, initialize the
+store database in the image so that Guix can be used in the image.
 
 When POPULATE is true, it must be the store file name of a Guile script to run
 in the disk image partition once it has been populated with INPUTS-TO-COPY.
@@ -298,6 +301,20 @@ It can be used to provide additional files, such as /etc files."
                       ;; Populate /dev.
                       (make-essential-device-nodes #:root "/fs")
 
+                      ;; Optionally, register the inputs in the image's store.
+                      (let* ((guix     (assoc-ref %build-inputs "guix"))
+                             (register (string-append guix
+                                                      "/sbin/guix-register")))
+                        ,@(if initialize-store?
+                              (match inputs-to-copy
+                                (((graph-files . _) ...)
+                                 (map (lambda (closure)
+                                        `(system* register "--prefix" "/fs"
+                                                  ,(string-append "/xchg/"
+                                                                  closure)))
+                                      graph-files)))
+                              '(#f)))
+
                       (and=> (assoc-ref %build-inputs "populate")
                              (lambda (populate)
                                (chdir "/fs")
@@ -415,7 +432,8 @@ It can be used to provide additional files, such as /etc files."
       (qemu-image store
                   #:grub-configuration grub.cfg
                   #:populate populate
-                  #:disk-image-size (* 400 (expt 2 20))
+                  #:disk-image-size (* 500 (expt 2 20))
+                  #:initialize-store? #t
                   #:inputs-to-copy `(("boot" ,boot)
                                      ("linux" ,linux-libre)
                                      ("initrd" ,gnu-system-initrd)
@@ -424,6 +442,7 @@ It can be used to provide additional files, such as /etc files."
                                      ("guile" ,guile-2.0)
                                      ("mingetty" ,mingetty)
                                      ("dmd" ,dmd)
+                                     ("guix" ,guix-0.4)
 
                                      ;; Configuration.
                                      ("dmd.conf" ,dmd-conf)