From 30f25b033c7fbcdcc7050b1655fc832252255c7e Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 24 Sep 2013 22:40:33 +0200 Subject: 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. --- gnu/system/vm.scm | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'gnu/system') 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) -- cgit v1.3 From 9fcc355529838f86f963dbdd7e47c0308df95a29 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 24 Sep 2013 23:15:09 +0200 Subject: gnu: vm: Add a service for the Guix daemon. * gnu/system/dmd.scm (guix-service): New procedure. * gnu/system/vm.scm (system-qemu-image): Use it. --- gnu/system/dmd.scm | 14 ++++++++++++++ gnu/system/vm.scm | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'gnu/system') diff --git a/gnu/system/dmd.scm b/gnu/system/dmd.scm index 1e8767e357..a502c42e03 100644 --- a/gnu/system/dmd.scm +++ b/gnu/system/dmd.scm @@ -23,6 +23,8 @@ #:use-module (guix records) #:use-module ((gnu packages system) #:select (mingetty inetutils)) + #:use-module ((gnu packages package-management) + #:select (guix)) #:use-module (ice-9 match) #:use-module (srfi srfi-1) #:export (service? @@ -36,6 +38,7 @@ syslog-service mingetty-service + guix-service dmd-configuration-file)) ;;; Commentary: @@ -104,6 +107,17 @@ (inputs `(("inetutils" ,inetutils) ("syslog.conf" ,syslog.conf)))))) +(define* (guix-service store #:key (guix guix)) + "Return a service that runs the build daemon from GUIX." + (let* ((drv (package-derivation store guix)) + (daemon (string-append (derivation->output-path drv) + "/bin/guix-daemon"))) + (service + (provision '(guix-daemon)) + (start `(make-forkexec-constructor ,daemon)) + (inputs `(("guix" ,guix)))))) + + (define (dmd-configuration-file store services) "Return the dmd configuration file for SERVICES." (define config diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index a864ab3de3..64d778b602 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -382,7 +382,8 @@ It can be used to provide additional files, such as /etc files." (list (mingetty-service store "tty1") (mingetty-service store "tty2") (mingetty-service store "tty3") - (syslog-service store))) + (syslog-service store) + (guix-service store #:guix guix-0.4))) (parameterize ((%guile-for-build (package-derivation store guile-final))) (let* ((bash-drv (package-derivation store bash)) -- cgit v1.3 From 37c58656ebb499d32275829aacfa2a99e22d654a Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 25 Sep 2013 17:27:02 +0200 Subject: gnu: vm: Support derivation objects as inputs. * gnu/system/vm.scm (expression->derivation-in-linux-vm)[input-alist]: Add case for derivation? objects. Same for #:inputs values. (qemu-image)[input->name+derivation]: Likewise. --- gnu/system/vm.scm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'gnu/system') diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 64d778b602..88f12ea33a 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -92,6 +92,10 @@ made available under the /xchg CIFS share." `(,input . ,(package-output store package "out" system))) ((input (? package? package) sub-drv) `(,input . ,(package-output store package sub-drv system))) + ((input (? derivation? drv)) + `(,input . ,(derivation->output-path drv))) + ((input (? derivation? drv) sub-drv) + `(,input . ,(derivation->output-path drv sub-drv))) ((input (and (? string?) (? store-path?) file)) `(,input . ,file))) inputs)) @@ -178,7 +182,8 @@ made available under the /xchg CIFS share." `(,name ,(->drv package) ,@sub-drv)) ((name (? string? file)) - `(,name ,file))) + `(,name ,file)) + (tuple tuple)) inputs)) #:env-vars env-vars #:modules (delete-duplicates @@ -216,6 +221,10 @@ It can be used to provide additional files, such as /etc files." `(,name . ,(derivation->output-path (package-derivation store package system) sub-drv))) + ((name (? derivation? drv)) + `(,name . ,(derivation->output-path drv))) + ((name (? derivation? drv) sub-drv) + `(,name . ,(derivation->output-path drv sub-drv))) ((input (and (? string?) (? store-path?) file)) `(,input . ,file)))) -- cgit v1.3 From 0b86a82dc7e649e4ae551edefba445690a315b83 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 25 Sep 2013 17:30:29 +0200 Subject: gnu: vm: Make a union of the visible packages; add /etc/profile. * gnu/system/vm.scm (qemu-image): Add Guix as an input when INITIALIZE-STORE?. (union): New procedure. (system-qemu-image): Use it. Build /etc/profile. Pass PROFILE among #:inputs-to-copy instead of listing all the individual profiles. Remove explicit 'build-derivations' call. --- gnu/system/vm.scm | 71 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 7 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 88f12ea33a..95155548d0 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -23,6 +23,8 @@ #:use-module (guix packages) #:use-module ((gnu packages base) #:select (%final-inputs guile-final + gcc-final + glibc-final coreutils)) #:use-module (gnu packages guile) #:use-module (gnu packages bash) @@ -366,6 +368,9 @@ It can be used to provide additional files, such as /etc files." ,@(if populate `(("populate" ,populate)) '()) + ,@(if initialize-store? + `(("guix" ,guix-0.4)) + '()) ,@inputs-to-copy) #:make-disk-image? #t @@ -379,6 +384,38 @@ It can be used to provide additional files, such as /etc files." ;;; Stand-alone VM image. ;;; +(define* (union store inputs + #:key (guile (%guile-for-build)) (system (%current-system)) + (name "union")) + "Return a derivation that builds the union of INPUTS. INPUTS is a list of +input tuples." + (define builder + `(begin + (use-modules (guix build union)) + + (setvbuf (current-output-port) _IOLBF) + (setvbuf (current-error-port) _IOLBF) + + (let ((output (assoc-ref %outputs "out")) + (inputs (map cdr %build-inputs))) + (format #t "building union `~a' with ~a packages...~%" + output (length inputs)) + (union-build output inputs)))) + + (build-expression->derivation store name system builder + (map (match-lambda + ((name (? package? p)) + `(,name ,(package-derivation store p + system))) + ((name (? package? p) output) + `(,name ,(package-derivation store p + system) + ,output)) + (x x)) + inputs) + #:modules '((guix build union)) + #:guile-for-build guile)) + (define (system-qemu-image store) "Return the derivation of a QEMU image of the GNU system." (define %pam-services @@ -410,6 +447,29 @@ It can be used to provide additional files, such as /etc files." "root:x:0:\n")) (pam.d-drv (pam-services->directory store %pam-services)) (pam.d (derivation->output-path pam.d-drv)) + + (packages `(("coreutils" ,coreutils) + ("bash" ,bash) + ("guile" ,guile-2.0) + ("dmd" ,dmd) + ("gcc" ,gcc-final) + ("libc" ,glibc-final) + ("guix" ,guix-0.4))) + + ;; TODO: Replace with a real profile with a manifest. + ;; TODO: Generate bashrc from packages' search-paths. + (profile-drv (union store packages + #:name "default-profile")) + (profile (derivation->output-path profile-drv)) + (bashrc (add-text-to-store store "bashrc" + (string-append " +export PATH=$HOME/.guix-profile/bin:" profile "/bin:" profile "/sbin +export CPATH=$HOME/.guix-profile/include:" profile "/include +export LIBRARY_PATH=$HOME/.guix-profile/lib:" profile "/lib +alias ls='ls -p --color' +alias ll='ls -l' +"))) + (populate (add-text-to-store store "populate-qemu-image" (object->string @@ -422,6 +482,7 @@ It can be used to provide additional files, such as /etc files." (symlink "/dev/null" "etc/login.defs") (symlink ,pam.d "etc/pam.d") + (symlink ,bashrc "etc/profile") (mkdir-p "var/run"))) (list passwd))) (out (derivation->output-path @@ -438,7 +499,6 @@ It can be used to provide additional files, such as /etc files." ,(string-append "--load=" boot))) (initrd gnu-system-initrd)))) (grub.cfg (grub-configuration-file store entries))) - (build-derivations store (list pam.d-drv)) (qemu-image store #:grub-configuration grub.cfg #:populate populate @@ -447,12 +507,8 @@ It can be used to provide additional files, such as /etc files." #:inputs-to-copy `(("boot" ,boot) ("linux" ,linux-libre) ("initrd" ,gnu-system-initrd) - ("coreutils" ,coreutils) - ("bash" ,bash) - ("guile" ,guile-2.0) - ("mingetty" ,mingetty) - ("dmd" ,dmd) - ("guix" ,guix-0.4) + ("pam.d" ,pam.d-drv) + ("profile" ,profile-drv) ;; Configuration. ("dmd.conf" ,dmd-conf) @@ -460,6 +516,7 @@ It can be used to provide additional files, such as /etc files." ("etc-passwd" ,passwd) ("etc-shadow" ,shadow) ("etc-group" ,group) + ("etc-bashrc" ,bashrc) ,@(append-map service-inputs %dmd-services)))))) -- cgit v1.3 From 65d195e140e18715f7f7fb4c5d219040ce773482 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 25 Sep 2013 17:33:02 +0200 Subject: gnu: vm: Change GRUB label. * gnu/system/vm.scm (system-qemu-image): Change GRUB label. --- gnu/system/vm.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'gnu/system') diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 95155548d0..11c76c67f3 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -493,7 +493,10 @@ alias ll='ls -l' "--config" ,dmd-conf)) (list out))) (entries (list (menu-entry - (label "Boot-to-Guile! (GNU System technology preview)") + (label (string-append + "GNU System with Linux-Libre " + (package-version linux-libre) + " (technology preview)")) (linux linux-libre) (linux-arguments `("--root=/dev/vda1" ,(string-append "--load=" boot))) -- cgit v1.3 From 25eb16bf3b471525fbf18889f1654ab04db959ec Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 25 Sep 2013 17:33:27 +0200 Subject: gnu: vm: Add more ttys. * gnu/system/vm.scm (system-qemu-image): Add more ttys. --- gnu/system/vm.scm | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gnu/system') diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 11c76c67f3..d8c2b95d75 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -428,6 +428,9 @@ input tuples." (list (mingetty-service store "tty1") (mingetty-service store "tty2") (mingetty-service store "tty3") + (mingetty-service store "tty4") + (mingetty-service store "tty5") + (mingetty-service store "tty6") (syslog-service store) (guix-service store #:guix guix-0.4))) -- cgit v1.3 From d5d0f286a27506bc4545d4531d606ba9ac4f1944 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 25 Sep 2013 18:01:44 +0200 Subject: gnu: vm: Change #:populate to a list of directives. * gnu/system/vm.scm (qemu-image): Change 'populate' parameter to be a list of directives. (system-qemu-image): Adjust accordingly. --- gnu/system/vm.scm | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index d8c2b95d75..a0669ae865 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -211,9 +211,10 @@ INPUTS-TO-COPY is a list of inputs (as for packages) whose closure is copied 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. -It can be used to provide additional files, such as /etc files." +POPULATE is a list of directives stating directories or symlinks to be created +in the disk image partition. It is evaluated once the image has been +populated with INPUTS-TO-COPY. It can be used to provide additional files, +such as /etc files." (define input->name+derivation (match-lambda ((name (? package? package)) @@ -326,6 +327,22 @@ It can be used to provide additional files, such as /etc files." graph-files))) '(#f))) + ;; Evaluate the POPULATE directives. + ,@(let loop ((directives populate) + (statements '())) + (match directives + (() + (reverse statements)) + ((('directory name) rest ...) + (loop rest + (cons `(mkdir-p ,(string-append "/fs" name)) + statements))) + (((new '-> old) rest ...) + (loop rest + (cons `(symlink ,old + ,(string-append "/fs" new)) + statements))))) + (and=> (assoc-ref %build-inputs "populate") (lambda (populate) (chdir "/fs") @@ -365,9 +382,6 @@ It can be used to provide additional files, such as /etc files." ("gawk" ,(car (assoc-ref %final-inputs "gawk"))) ("util-linux" ,util-linux) - ,@(if populate - `(("populate" ,populate)) - '()) ,@(if initialize-store? `(("guix" ,guix-0.4)) '()) @@ -473,21 +487,14 @@ alias ls='ls -p --color' alias ll='ls -l' "))) - (populate - (add-text-to-store store "populate-qemu-image" - (object->string - `(begin - (mkdir-p "etc") - (mkdir-p "var/log") ; for dmd - (symlink ,shadow "etc/shadow") - (symlink ,passwd "etc/passwd") - (symlink ,group "etc/group") - (symlink "/dev/null" - "etc/login.defs") - (symlink ,pam.d "etc/pam.d") - (symlink ,bashrc "etc/profile") - (mkdir-p "var/run"))) - (list passwd))) + (populate `((directory "/etc") + (directory "/var/log") + (directory "/var/run") + ("/etc/shadow" -> ,shadow) + ("/etc/passwd" -> ,passwd) + ("/etc/login.defs" -> "/dev/null") + ("/etc/pam.d" -> ,pam.d) + ("/etc/profile" -> ,bashrc))) (out (derivation->output-path (package-derivation store mingetty))) (boot (add-text-to-store store "boot" -- cgit v1.3 From 43a2779876c5ae170f3c6edc7f3d605997c4ec05 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 25 Sep 2013 21:47:10 +0200 Subject: gnu: vm: Add /etc/issue and a motd. * gnu/system/vm.scm (system-qemu-image): Build a 'motd' and an 'issue' file. Pass 'unix-pam-service' that motd. Have /etc/issue point to the 'issue' file. --- gnu/system/linux.scm | 13 ++++++++++--- gnu/system/vm.scm | 27 ++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/linux.scm b/gnu/system/linux.scm index b2daa13e06..6aebe159ba 100644 --- a/gnu/system/linux.scm +++ b/gnu/system/linux.scm @@ -125,9 +125,10 @@ (let ((unix (pam-entry (control "required") (module "pam_unix.so")))) - (lambda* (name #:key allow-empty-passwords?) + (lambda* (name #:key allow-empty-passwords? motd) "Return a standard Unix-style PAM service for NAME. When -ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords." +ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords. When MOTD is true, it +should be the name of a file used as the message-of-the-day." ;; See . (let ((name* name)) (pam-service @@ -140,6 +141,12 @@ ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords." (arguments '("nullok"))) unix))) (password (list unix)) - (session (list unix))))))) + (session (if motd + (list unix + (pam-entry + (control "optional") + (module "pam_motd.so") + (arguments (list (string-append "motd=" motd))))) + (list unix)))))))) ;;; linux.scm ends here diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index a0669ae865..e79a4257de 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -432,10 +432,18 @@ input tuples." (define (system-qemu-image store) "Return the derivation of a QEMU image of the GNU system." + (define motd + (add-text-to-store store "motd" " +Happy birthday, GNU! http://www.gnu.org/gnu30 + +")) + (define %pam-services ;; Services known to PAM. (list %pam-other-services - (unix-pam-service "login" #:allow-empty-passwords? #t))) + (unix-pam-service "login" + #:allow-empty-passwords? #t + #:motd motd))) (define %dmd-services ;; Services run by dmd. @@ -487,6 +495,16 @@ alias ls='ls -p --color' alias ll='ls -l' "))) + (issue (add-text-to-store store "issue" " +This is an alpha preview of the GNU system. Welcome. + +This image features the GNU Guix package manager, which was used to +build it (http://www.gnu.org/software/guix/). The init system is +GNU dmd (http://www.gnu.org/software/dmd/). + +You can log in as 'root' with no password. +")) + (populate `((directory "/etc") (directory "/var/log") (directory "/var/run") @@ -494,7 +512,8 @@ alias ll='ls -l' ("/etc/passwd" -> ,passwd) ("/etc/login.defs" -> "/dev/null") ("/etc/pam.d" -> ,pam.d) - ("/etc/profile" -> ,bashrc))) + ("/etc/profile" -> ,bashrc) + ("/etc/issue" -> ,issue))) (out (derivation->output-path (package-derivation store mingetty))) (boot (add-text-to-store store "boot" @@ -525,11 +544,13 @@ alias ll='ls -l' ;; Configuration. ("dmd.conf" ,dmd-conf) - ("etc-pam.d" ,pam.d) + ("etc-pam.d" ,pam.d-drv) ("etc-passwd" ,passwd) ("etc-shadow" ,shadow) ("etc-group" ,group) ("etc-bashrc" ,bashrc) + ("etc-issue" ,issue) + ("etc-motd" ,motd) ,@(append-map service-inputs %dmd-services)))))) -- cgit v1.3 From ba47851fac503f005d2bc496161638c46cc29ffc Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 25 Sep 2013 21:49:22 +0200 Subject: gnu: vm: Add 'host-name' service. * gnu/system/dmd.scm (host-name-service): New procedure. (mingetty-service): Require the 'host-name' service. * gnu/system/vm.scm (system-qemu-image): Add the 'host-name' service. Set PS1 in /etc/bashrc to something sensible. --- gnu/system/dmd.scm | 14 ++++++++++++++ gnu/system/vm.scm | 4 +++- 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'gnu/system') diff --git a/gnu/system/dmd.scm b/gnu/system/dmd.scm index a502c42e03..5bdf7b7a05 100644 --- a/gnu/system/dmd.scm +++ b/gnu/system/dmd.scm @@ -36,6 +36,7 @@ service-stop service-inputs + host-name-service syslog-service mingetty-service guix-service @@ -61,6 +62,14 @@ (inputs service-inputs ; list of inputs (default '()))) +(define (host-name-service store name) + "Return a service that sets the host name to NAME." + (service + (provision '(host-name)) + (start `(lambda _ + (sethostname ,name))) + (respawn? #f))) + (define (mingetty-service store tty) "Return a service to run mingetty on TTY." (let* ((mingetty-drv (package-derivation store mingetty)) @@ -68,6 +77,11 @@ "/sbin/mingetty"))) (service (provision (list (symbol-append 'term- (string->symbol tty)))) + + ;; Since the login prompt shows the host name, wait for the 'host-name' + ;; service to be done. + (requirement '(host-name)) + (start `(make-forkexec-constructor ,mingetty-bin "--noclear" ,tty)) (inputs `(("mingetty" ,mingetty)))))) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index e79a4257de..0cab3ced17 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -447,7 +447,8 @@ Happy birthday, GNU! http://www.gnu.org/gnu30 (define %dmd-services ;; Services run by dmd. - (list (mingetty-service store "tty1") + (list (host-name-service store "gnu") + (mingetty-service store "tty1") (mingetty-service store "tty2") (mingetty-service store "tty3") (mingetty-service store "tty4") @@ -488,6 +489,7 @@ Happy birthday, GNU! http://www.gnu.org/gnu30 (profile (derivation->output-path profile-drv)) (bashrc (add-text-to-store store "bashrc" (string-append " +export PS1='\\u@\\h\\$ ' export PATH=$HOME/.guix-profile/bin:" profile "/bin:" profile "/sbin export CPATH=$HOME/.guix-profile/include:" profile "/include export LIBRARY_PATH=$HOME/.guix-profile/lib:" profile "/lib -- cgit v1.3 From 27cab84c6d598d5bb53bf136d78e7a2b0e8e0269 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 25 Sep 2013 23:05:33 +0200 Subject: gnu: vm: Register the profile as a GC root. * gnu/system/vm.scm (system-qemu-image): Register PROFILE as a GC root. --- gnu/system/vm.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'gnu/system') diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 0cab3ced17..dd97e5ee0d 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -515,7 +515,9 @@ You can log in as 'root' with no password. ("/etc/login.defs" -> "/dev/null") ("/etc/pam.d" -> ,pam.d) ("/etc/profile" -> ,bashrc) - ("/etc/issue" -> ,issue))) + ("/etc/issue" -> ,issue) + (directory "/var/nix/gcroots") + ("/var/nix/gcroots/default-profile" -> ,profile))) (out (derivation->output-path (package-derivation store mingetty))) (boot (add-text-to-store store "boot" -- cgit v1.3 From f83e943fe7b7a4db93a6c603b9fdde57a35e918d Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 25 Sep 2013 23:26:08 +0200 Subject: gnu: vm: Add 'networking' service. * gnu/system/vm.scm (system-qemu-image): Use 'static-networking-service'. Add /etc/resolv.conf. Add Inetutils to the profile. * gnu/system/dmd.scm (static-networking-service): New procedure. --- gnu/system/dmd.scm | 18 ++++++++++++++++++ gnu/system/vm.scm | 13 ++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) (limited to 'gnu/system') diff --git a/gnu/system/dmd.scm b/gnu/system/dmd.scm index 5bdf7b7a05..7fc4650c25 100644 --- a/gnu/system/dmd.scm +++ b/gnu/system/dmd.scm @@ -40,6 +40,8 @@ syslog-service mingetty-service guix-service + static-networking-service + dmd-configuration-file)) ;;; Commentary: @@ -131,6 +133,22 @@ (start `(make-forkexec-constructor ,daemon)) (inputs `(("guix" ,guix)))))) +(define* (static-networking-service store interface ip + #:key (inetutils inetutils)) + "Return a service that starts INTERFACE with address IP." + + ;; TODO: Eventually we should do this using Guile's networking procedures, + ;; like 'configure-qemu-networking' does, but the patch that does this is + ;; not yet in stock Guile. + (let ((ifconfig (string-append (package-output store inetutils) + "/bin/ifconfig"))) + (service + (provision '(networking)) + (start `(make-forkexec-constructor ,ifconfig ,interface ,ip "up")) + (stop `(make-forkexec-constructor ,ifconfig ,interface "down")) + (respawn? #f) + (inputs `(("inetutils" ,inetutils)))))) + (define (dmd-configuration-file store services) "Return the dmd configuration file for SERVICES." diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index dd97e5ee0d..b873386606 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -455,7 +455,15 @@ Happy birthday, GNU! http://www.gnu.org/gnu30 (mingetty-service store "tty5") (mingetty-service store "tty6") (syslog-service store) - (guix-service store #:guix guix-0.4))) + (guix-service store #:guix guix-0.4) + + ;; QEMU networking settings. + (static-networking-service store "eth0" "10.0.2.10"))) + + (define resolv.conf + ;; Name resolution for default QEMU settings. + (add-text-to-store store "resolv.conf" + "nameserver 10.0.2.3\n")) (parameterize ((%guile-for-build (package-derivation store guile-final))) (let* ((bash-drv (package-derivation store bash)) @@ -480,6 +488,7 @@ Happy birthday, GNU! http://www.gnu.org/gnu30 ("dmd" ,dmd) ("gcc" ,gcc-final) ("libc" ,glibc-final) + ("inetutils" ,inetutils) ("guix" ,guix-0.4))) ;; TODO: Replace with a real profile with a manifest. @@ -514,6 +523,7 @@ You can log in as 'root' with no password. ("/etc/passwd" -> ,passwd) ("/etc/login.defs" -> "/dev/null") ("/etc/pam.d" -> ,pam.d) + ("/etc/resolv.conf" -> ,resolv.conf) ("/etc/profile" -> ,bashrc) ("/etc/issue" -> ,issue) (directory "/var/nix/gcroots") @@ -552,6 +562,7 @@ You can log in as 'root' with no password. ("etc-passwd" ,passwd) ("etc-shadow" ,shadow) ("etc-group" ,group) + ("etc-resolv.conf" ,resolv.conf) ("etc-bashrc" ,bashrc) ("etc-issue" ,issue) ("etc-motd" ,motd) -- cgit v1.3 From 349746dfcd9a07e3b5908d459d0800fd5d44c3b9 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 26 Sep 2013 00:07:42 +0200 Subject: gnu: vm: Add nscd service. * gnu/system/dmd.scm (nscd-service): New procedure. * gnu/system/vm.scm (system-qemu-image): Use it. Make /var/run/nscd. --- gnu/system/dmd.scm | 21 +++++++++++++++++++++ gnu/system/vm.scm | 5 +++-- 2 files changed, 24 insertions(+), 2 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/dmd.scm b/gnu/system/dmd.scm index 7fc4650c25..b248d9f0c5 100644 --- a/gnu/system/dmd.scm +++ b/gnu/system/dmd.scm @@ -21,6 +21,8 @@ #:use-module (guix packages) #:use-module (guix derivations) #:use-module (guix records) + #:use-module ((gnu packages base) + #:select (glibc-final)) #:use-module ((gnu packages system) #:select (mingetty inetutils)) #:use-module ((gnu packages package-management) @@ -39,6 +41,7 @@ host-name-service syslog-service mingetty-service + nscd-service guix-service static-networking-service @@ -87,6 +90,24 @@ (start `(make-forkexec-constructor ,mingetty-bin "--noclear" ,tty)) (inputs `(("mingetty" ,mingetty)))))) +(define* (nscd-service store + #:key (glibc glibc-final)) + "Return a service that runs libc's name service cache daemon (nscd)." + (let ((nscd (string-append (package-output store glibc) "/sbin/nscd"))) + (service + (provision '(nscd)) + (start `(make-forkexec-constructor ,nscd "-f" "/dev/null")) + + ;; XXX: Local copy of 'make-kill-destructor' because the one upstream + ;; uses the broken 'opt-lambda' macro. + (stop `(lambda* (#:optional (signal SIGTERM)) + (lambda (pid . args) + (kill pid signal) + #f))) + + (respawn? #f) + (inputs `(("glibc" ,glibc)))))) + (define (syslog-service store) "Return a service that runs 'syslogd' with reasonable default settings." diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index b873386606..0ed805510a 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -456,6 +456,7 @@ Happy birthday, GNU! http://www.gnu.org/gnu30 (mingetty-service store "tty6") (syslog-service store) (guix-service store #:guix guix-0.4) + (nscd-service store) ;; QEMU networking settings. (static-networking-service store "eth0" "10.0.2.10"))) @@ -517,8 +518,8 @@ You can log in as 'root' with no password. ")) (populate `((directory "/etc") - (directory "/var/log") - (directory "/var/run") + (directory "/var/log") ; for dmd + (directory "/var/run/nscd") ("/etc/shadow" -> ,shadow) ("/etc/passwd" -> ,passwd) ("/etc/login.defs" -> "/dev/null") -- cgit v1.3