diff --git a/gnu/build/image.scm b/gnu/build/image.scm index 14503b02ba..fb85bd4bb8 100644 --- a/gnu/build/image.scm +++ b/gnu/build/image.scm @@ -161,6 +161,8 @@ (define* (initialize-root-partition root references-graphs (register-closures? #t) system-directory + (make-device-nodes + make-essential-device-nodes) #:allow-other-keys) "Initialize the given ROOT directory. Use BOOTCFG and BOOTCFG-LOCATION to install the bootloader configuration. @@ -172,6 +174,9 @@ (define* (initialize-root-partition root (populate-root-file-system system-directory root) (populate-store references-graphs root) + ;; Populate /dev. + (make-device-nodes root) + (when register-closures? (for-each (lambda (closure) (register-closure root diff --git a/gnu/system/image.scm b/gnu/system/image.scm index f44886c137..15dac8af57 100644 --- a/gnu/system/image.scm +++ b/gnu/system/image.scm @@ -43,6 +43,7 @@ (define-module (gnu system image) #:use-module (gnu packages genimage) #:use-module (gnu packages guile) #:autoload (gnu packages gnupg) (guile-gcrypt) + #:use-module (gnu packages hurd) #:use-module (gnu packages linux) #:use-module (gnu packages mtools) #:use-module ((srfi srfi-1) #:prefix srfi-1:) @@ -54,6 +55,7 @@ (define-module (gnu system image) #:export (esp-partition root-partition + hurd-disk-image efi-disk-image iso9660-image @@ -91,6 +93,26 @@ (define root-partition (flags '(boot)) (initializer (gexp initialize-root-partition)))) +(define hurd-initialize-root-partition + #~(lambda* (#:rest args) + (apply initialize-root-partition + (append args + (list #:make-device-nodes + make-hurd-device-nodes))))) + +(define hurd-disk-image + (image + (format 'disk-image) + (partitions + (list (partition + (size 'guess) + (offset root-offset) + (label root-label) + (file-system "ext2") + (file-system-options '("-o" "hurd" "-O" "ext_attr")) + (flags '(boot)) + (initializer hurd-initialize-root-partition)))))) + (define efi-disk-image (image (format 'disk-image) @@ -145,12 +167,14 @@ (define-syntax-rule (with-imported-modules* gexp* ...) (with-imported-modules `(,@(source-module-closure '((gnu build vm) (gnu build image) + (gnu build linux-boot) (guix store database)) #:select? not-config?) ((guix config) => ,(make-config.scm))) #~(begin (use-modules (gnu build vm) (gnu build image) + (gnu build linux-boot) (guix store database) (guix build utils)) gexp* ...)))) @@ -525,10 +549,16 @@ (define (find-image file-system-type) "Find and return an image that could match the given FILE-SYSTEM-TYPE. This is useful to adapt to interfaces written before the addition of the record." - (mbegin %store-monad - (return - (match file-system-type - ("iso9660" iso9660-image) - (_ efi-disk-image))))) + (mlet %store-monad ((target (current-target-system))) + (mbegin %store-monad + (return + (match file-system-type + ("iso9660" iso9660-image) + (_ (cond + ((and target + (hurd-triplet? target)) + hurd-disk-image) + (else + efi-disk-image)))))))) ;;; image.scm ends here