diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-05-14 23:15:51 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-05-14 23:15:51 +0200 |
commit | 1eeccc2f31c0b0f8c600cb181f19fda1d90551a6 (patch) | |
tree | 4b5da3209bb8d84ea815fb0d64b975c92fae5541 | |
parent | 4106c589885bceab3faee9d446f348784018891c (diff) | |
download | guix-1eeccc2f31c0b0f8c600cb181f19fda1d90551a6.tar guix-1eeccc2f31c0b0f8c600cb181f19fda1d90551a6.tar.gz |
vm: Keep acceptable file systems from the original OS.
* gnu/system/vm.scm (virtualized-operating-system): Instead of
completely overriding 'file-systems', use 'remove' to filter out some
of those declared in OS.
(system-qemu-image): Likewise.
-rw-r--r-- | gnu/system/vm.scm | 49 |
1 files changed, 35 insertions, 14 deletions
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index c6c23213ca..f42feb394c 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -292,12 +292,23 @@ basic contents of the root file system of OS." (disk-image-size (* 900 (expt 2 20)))) "Return the derivation of a freestanding QEMU image of DISK-IMAGE-SIZE bytes of the GNU system as described by OS." + (define file-systems-to-keep + ;; Keep only file systems other than root and not normally bound to real + ;; devices. + (remove (lambda (fs) + (let ((target (file-system-mount-point fs)) + (source (file-system-device fs))) + (or (string=? target "/") + (string-prefix? "/dev/" source)))) + (operating-system-file-systems os))) + (let ((os (operating-system (inherit os) - ;; The mounted file systems are under our control. - (file-systems (list (file-system + ;; Force our own root file system. + (file-systems (cons (file-system (mount-point "/") (device "/dev/sda1") - (type file-system-type))))))) + (type file-system-type)) + file-systems-to-keep))))) (mlet* %store-monad ((os-drv (operating-system-derivation os)) (os-dir -> (derivation->output-path os-drv)) @@ -315,17 +326,27 @@ of the GNU system as described by OS." environment with the store shared with the host." (operating-system (inherit os) (initrd (cut qemu-initrd <> #:volatile-root? #t)) - (file-systems (list (file-system - (mount-point "/") - (device "/dev/vda1") - (type "ext4")) - (file-system - (mount-point (%store-prefix)) - (device "store") - (type "9p") - (needed-for-boot? #t) - (options "trans=virtio") - (check? #f)))))) + (file-systems (cons* (file-system + (mount-point "/") + (device "/dev/vda1") + (type "ext4")) + (file-system + (mount-point (%store-prefix)) + (device "store") + (type "9p") + (needed-for-boot? #t) + (options "trans=virtio") + (check? #f)) + + ;; Remove file systems that conflict with those + ;; above, or that are normally bound to real devices. + (remove (lambda (fs) + (let ((target (file-system-mount-point fs)) + (source (file-system-device fs))) + (or (string=? target (%store-prefix)) + (string=? target "/") + (string-prefix? "/dev/" source)))) + (operating-system-file-systems os)))))) (define* (system-qemu-image/shared-store os |