aboutsummaryrefslogtreecommitdiff
path: root/gnu/system.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-09-09 23:27:00 +0200
committerLudovic Courtès <ludo@gnu.org>2016-09-09 23:54:43 +0200
commit44d5f54e31039d78f156bd9562dca293124eaa76 (patch)
tree2650e88b54721a2e50d3bd27019fac41bbdd8c78 /gnu/system.scm
parenta9e5e92f940381e3a4ee828c6d8ff22a73067e17 (diff)
downloadguix-44d5f54e31039d78f156bd9562dca293124eaa76.tar
guix-44d5f54e31039d78f156bd9562dca293124eaa76.tar.gz
system: grub: Allow arbitrary kernel file names in 'menu-entry'.
Fixes <http://bugs.gnu.org/20067>. Reported by Tomáš Čech <sleep_walker@suse.cz>. * gnu/system.scm (system-linux-image-file-name) (operating-system-kernel-file): New procedures. (operating-system-grub.cfg): Use 'operating-system-kernel-file' for the 'kernel' field of 'menu-entry'. (operating-system-parameters-file): Likewise for the 'kernel' entry. (read-boot-parameters): Adjust 'kernel' field so that it contains the absolute file name of the image. * gnu/system/grub.scm (grub-configuration-file)[linux-image-name]: Remove. [entry->gexp]: Assume LINUX is the absolute file name of the kernel image. * doc/guix.texi (GRUB Configuration): Add an example, and adjust 'kernel' field documentation accordingly.
Diffstat (limited to 'gnu/system.scm')
-rw-r--r--gnu/system.scm30
1 files changed, 26 insertions, 4 deletions
diff --git a/gnu/system.scm b/gnu/system.scm
index 080201011c..18b2806fe9 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -69,6 +69,7 @@
operating-system-host-name
operating-system-hosts-file
operating-system-kernel
+ operating-system-kernel-file
operating-system-kernel-arguments
operating-system-initrd
operating-system-users
@@ -246,6 +247,19 @@ from the initrd."
"Return the list of swap services for OS."
(map swap-service (operating-system-swap-devices os)))
+(define* (system-linux-image-file-name #:optional (system (%current-system)))
+ "Return the basename of the kernel image file for SYSTEM."
+ ;; FIXME: Evaluate the conditional based on the actual current system.
+ (if (string-prefix? "mips" (%current-system))
+ "vmlinuz"
+ "bzImage"))
+
+(define (operating-system-kernel-file os)
+ "Return an object representing the absolute file name of the kernel image of
+OS."
+ (file-append (operating-system-kernel os)
+ "/" (system-linux-image-file-name os)))
+
(define* (operating-system-directory-base-entries os #:key container?)
"Return the basic entries of the 'system' directory of OS for use as the
value of the SYSTEM-SERVICE-TYPE service."
@@ -710,12 +724,13 @@ listed in OS. The C library expects to find it under
((system (operating-system-derivation os))
(root-fs -> (operating-system-root-file-system os))
(store-fs -> (operating-system-store-file-system os))
- (kernel -> (operating-system-kernel os))
+ (label -> (kernel->grub-label (operating-system-kernel os)))
+ (kernel -> (operating-system-kernel-file os))
(root-device -> (if (eq? 'uuid (file-system-title root-fs))
(uuid->string (file-system-device root-fs))
(file-system-device root-fs)))
(entries -> (list (menu-entry
- (label (kernel->grub-label kernel))
+ (label label)
(linux kernel)
(linux-arguments
(cons* (string-append "--root=" root-device)
@@ -739,7 +754,7 @@ this file is the reconstruction of GRUB menu entries for old configurations."
#~(boot-parameters (version 0)
(label #$label)
(root-device #$(file-system-device root))
- (kernel #$(operating-system-kernel os))
+ (kernel #$(operating-system-kernel-file os))
(kernel-arguments
#$(operating-system-kernel-arguments os))
(initrd #$initrd))
@@ -768,7 +783,14 @@ this file is the reconstruction of GRUB menu entries for old configurations."
(boot-parameters
(label label)
(root-device root)
- (kernel linux)
+
+ ;; In the past, we would store the directory name of the kernel instead
+ ;; of the absolute file name of its image. Detect that and correct it.
+ (kernel (if (string=? linux (direct-store-path linux))
+ (string-append linux "/"
+ (system-linux-image-file-name))
+ linux))
+
(kernel-arguments
(match (assq 'kernel-arguments rest)
((_ args) args)