diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-05-04 00:30:39 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-05-04 00:30:39 +0200 |
commit | 3c05b4bc2528ea64b259477bf58dbcc6a7739f78 (patch) | |
tree | 61c374472fd7926f09734b41d216a6a08b405122 /gnu | |
parent | ad896f23a5fac38294e7515587c0c5bda02e9a59 (diff) | |
download | guix-3c05b4bc2528ea64b259477bf58dbcc6a7739f78.tar guix-3c05b4bc2528ea64b259477bf58dbcc6a7739f78.tar.gz |
linux-initrd: Check the root and other early file systems.
* gnu/system.scm (operating-system-derivation)[boot-file-systems]: Keep "/".
* gnu/system/linux-initrd.scm (file-system->spec): Keep the 'check?'
flag.
(qemu-initrd)[helper-packages]: New variable. Pass it as #:to-copy.
<gexp>: Add 'set-path-environment-variable' call. Remove #:unionfs
argument for 'boot-system'.
* gnu/system/vm.scm (%linux-vm-file-systems): Add 'check?' field/
(virtualized-operating-system): Likewise for the "9p" file system.
* guix/build/linux-initrd.scm (mount-root-file-system): Change #:unionfs
default. Call 'check-file-system' before mounting ROOT, when
VOLATILE-ROOT? is false.
(check-file-system): New procedure.
(mount-file-system): Honor 'check?' element in list; add
'check-file-system' call.
(boot-system): Remove #:root-fs-type and #:unionfs parameters.
[root-mount-point?, root-fs-type]: New variables.
Call 'mount-file-system' on all MOUNTS but "/".
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/system.scm | 6 | ||||
-rw-r--r-- | gnu/system/linux-initrd.scm | 27 | ||||
-rw-r--r-- | gnu/system/vm.scm | 9 |
3 files changed, 30 insertions, 12 deletions
diff --git a/gnu/system.scm b/gnu/system.scm index 7624b10ae4..65d1ca3418 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -349,8 +349,10 @@ we're running in the final root." "Return a derivation that builds OS." (define boot-file-systems (filter (match-lambda - (($ <file-system> device mount-point type _ _ boot?) - (and boot? (not (string=? mount-point "/"))))) + (($ <file-system> device "/") + #t) + (($ <file-system> device mount-point type flags options boot?) + boot?)) (operating-system-file-systems os))) (mlet* %store-monad diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm index 8b4ab9c4eb..749dfa313f 100644 --- a/gnu/system/linux-initrd.scm +++ b/gnu/system/linux-initrd.scm @@ -198,8 +198,8 @@ a list of Guile module names to be embedded in the initrd." "Return a list corresponding to file-system FS that can be passed to the initrd code." (match fs - (($ <file-system> device mount-point type flags options) - (list device mount-point type flags options)))) + (($ <file-system> device mount-point type flags options _ check?) + (list device mount-point type flags options check?)))) (define* (qemu-initrd file-systems #:key @@ -243,24 +243,37 @@ exception and backtrace!)." '("fuse.ko") '()))) + (define helper-packages + ;; Packages to be copied on the initrd. + `(,@(if (find (lambda (fs) + (string-prefix? "ext" (file-system-type fs))) + file-systems) + (list e2fsck/static) + '()) + ,@(if volatile-root? + (list unionfs-fuse/static) + '()))) + (expression->initrd #~(begin (use-modules (guix build linux-initrd) + (guix build utils) (srfi srfi-26)) + (with-output-to-port (%make-void-port "w") + (lambda () + (set-path-environment-variable "PATH" '("bin" "sbin") + '#$helper-packages))) + (boot-system #:mounts '#$(map file-system->spec file-systems) #:linux-modules '#$linux-modules #:qemu-guest-networking? #t #:guile-modules-in-chroot? '#$guile-modules-in-chroot? - #:unionfs (and=> #$(and volatile-root? unionfs-fuse/static) - (cut string-append <> "/bin/unionfs")) #:volatile-root? '#$volatile-root?)) #:name "qemu-initrd" #:modules '((guix build utils) (guix build linux-initrd)) - #:to-copy (if volatile-root? - (list unionfs-fuse/static) - '()) + #:to-copy helper-packages #:linux linux-libre #:linux-modules linux-modules)) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 786e564031..b20831f44d 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -90,13 +90,15 @@ input tuple. The output file name is when building for SYSTEM." (device "store") (type "9p") (needed-for-boot? #t) - (options "trans=virtio")) + (options "trans=virtio") + (check? #f)) (file-system (mount-point "/xchg") (device "xchg") (type "9p") (needed-for-boot? #t) - (options "trans=virtio")))) + (options "trans=virtio") + (check? #f)))) (define* (expression->derivation-in-linux-vm name exp #:key @@ -333,7 +335,8 @@ environment with the store shared with the host." (device "store") (type "9p") (needed-for-boot? #t) - (options "trans=virtio")))))) + (options "trans=virtio") + (check? #f)))))) (define* (system-qemu-image/shared-store os |