[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
09/23: bootloader: grub: Add support for multiboot.
From: |
guix-commits |
Subject: |
09/23: bootloader: grub: Add support for multiboot. |
Date: |
Thu, 4 Jun 2020 07:52:12 -0400 (EDT) |
janneke pushed a commit to branch wip-hurd-vm
in repository guix.
commit 5528587cc5af40a1372baf30f0503086930b806f
Author: Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
AuthorDate: Tue May 26 18:09:01 2020 +0200
bootloader: grub: Add support for multiboot.
* gnu/bootloader/grub.scm (grub-configuration-file): Add support for
multiboot.
---
gnu/bootloader.scm | 3 ++-
gnu/bootloader/grub.scm | 71 ++++++++++++++++++++++++++++++-------------------
2 files changed, 46 insertions(+), 28 deletions(-)
diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm
index 2eebb8e..d0bcab1 100644
--- a/gnu/bootloader.scm
+++ b/gnu/bootloader.scm
@@ -26,7 +26,8 @@
#:use-module (guix ui)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
- #:export (menu-entry
+ #:export (<menu-entry>
+ menu-entry
menu-entry?
menu-entry-label
menu-entry-device
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index 2d9a39a..3e95fec 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -25,12 +25,16 @@
#:use-module (guix records)
#:use-module ((guix utils) #:select (%current-system))
#:use-module (guix gexp)
+ #:use-module (guix utils)
#:use-module (gnu artwork)
#:use-module (gnu bootloader)
#:use-module (gnu system uuid)
#:use-module (gnu system file-systems)
#:use-module (gnu system keyboard)
+ #:use-module (gnu packages base)
#:use-module (gnu packages bootloaders)
+ #:use-module (gnu packages cross-base)
+ #:use-module (gnu packages hurd)
#:autoload (gnu packages gtk) (guile-cairo guile-rsvg)
#:autoload (gnu packages xorg) (xkeyboard-config)
#:use-module (ice-9 match)
@@ -330,36 +334,49 @@ when booting a root file system on a Btrfs subvolume."
(define all-entries
(append entries (bootloader-configuration-menu-entries config)))
(define (menu-entry->gexp entry)
- (let* ((device (menu-entry-device entry))
- (device-mount-point (menu-entry-device-mount-point entry))
- (label (menu-entry-label entry))
- (arguments (menu-entry-linux-arguments entry))
- (kernel (normalize-file (menu-entry-linux entry)
- device-mount-point
- store-directory-prefix))
- (initrd (normalize-file (menu-entry-initrd entry)
- device-mount-point
- store-directory-prefix)))
- ;; Here DEVICE is the store and DEVICE-MOUNT-POINT is its mount point.
- ;; Use the right file names for KERNEL and INITRD in case
- ;; DEVICE-MOUNT-POINT is not "/", meaning that the store is on a
- ;; separate partition.
- #~(format port "menuentry ~s {
+ (match entry
+ (($ <menu-entry> label device mount-point linux arguments initrd #f ())
+ (let ((linux (normalize-file linux mount-point
+ store-directory-prefix))
+ (initrd (normalize-file initrd mount-point
+ store-directory-prefix)))
+ ;; Here DEVICE is the store and DEVICE-MOUNT-POINT is its mount point.
+ ;; Use the right file names for LINUX and INITRD in case
+ ;; DEVICE-MOUNT-POINT is not "/", meaning that the store is on a
+ ;; separate partition.
+
+ ;; When BTRFS-SUBVOLUME-FILE-NAME is defined, prepend it the linux and
+ ;; initrd paths, to allow booting from a Btrfs subvolume.
+ #~(format port "menuentry ~s {
~a
linux ~a ~a
initrd ~a
}~%"
- #$label
- #$(grub-root-search device kernel)
- #$kernel (string-join (list #$@arguments))
- #$initrd)))
- (define sugar
- (eye-candy config
- (menu-entry-device (first all-entries))
- (menu-entry-device-mount-point (first all-entries))
- #:store-directory-prefix store-directory-prefix
- #:system system
- #:port #~port))
+ #$label
+ #$(grub-root-search device linux)
+ #$linux (string-join (list #$@arguments))
+ #$initrd)))
+ (($ <menu-entry> label device mount-point #f () #f kernel arguments
modules)
+ (let* ((target (%current-target-system)))
+ #~(format port "
+menuentry ~s {
+ multiboot ~a root=device:hd0s1~a~a
+}~%"
+ #$label
+ #$kernel (string-join (list #$@arguments) " " 'prefix)
+ (string-join (map string-join '#$modules)
+ "\n module " 'prefix))))))
+
+ (define (sugar)
+ (let* ((entry (first all-entries))
+ (device (menu-entry-device entry))
+ (mount-point (menu-entry-device-mount-point entry)))
+ (eye-candy config
+ device
+ mount-point
+ #:store-directory-prefix store-directory-prefix
+ #:system system
+ #:port #~port)))
(define keyboard-layout-config
(let* ((layout (bootloader-configuration-keyboard-layout config))
@@ -384,7 +401,7 @@ keymap ~a~%" #$keymap))))
"# This file was generated from your Guix configuration.
Any changes
# will be lost upon reconfiguration.
")
- #$sugar
+ #$(sugar)
#$keyboard-layout-config
(format port "
set default=~a
- 07/23: bootloader: Extend `<menu-entry>' for multiboot., (continued)
- 07/23: bootloader: Extend `<menu-entry>' for multiboot., guix-commits, 2020/06/04
- 14/23: gnu: hurd: Create minimal "runsystem" script to invoke "rc"., guix-commits, 2020/06/04
- 01/23: gnu: hurd: Update to upstream Hurd-reserved xattr index., guix-commits, 2020/06/04
- 06/23: system: Add 'hurd' field to <operating-system>., guix-commits, 2020/06/04
- 16/23: services: Add `hurd-console-service-type'., guix-commits, 2020/06/04
- 22/23: system: hurd: Remove 'cross-hurd-image' hack., guix-commits, 2020/06/04
- 10/23: system: Use 'hurd' package in label., guix-commits, 2020/06/04
- 04/23: image: Add Hurd support., guix-commits, 2020/06/04
- 05/23: system: hurd: Add hurd-default-essential-services., guix-commits, 2020/06/04
- 02/23: syscalls: set-thread-name, thread-name: Stub for the Hurd., guix-commits, 2020/06/04
- 09/23: bootloader: grub: Add support for multiboot.,
guix-commits <=
- 08/23: system: Add 'multiboot-modules' field to <boot-parameters>., guix-commits, 2020/06/04
- 13/23: system: Add `hurd-activation'., guix-commits, 2020/06/04
- 19/23: hurd-boot: Further cleanup of "rc"., guix-commits, 2020/06/04
- 15/23: services: hurd: Use activation-service, hurd-etc-service., guix-commits, 2020/06/04
- 17/23: services: Add `hurd-getty-service-type'., guix-commits, 2020/06/04
- 18/23: system: hurd: Populate services., guix-commits, 2020/06/04
- 20/23: hurd-boot: Use setxattr instead of MAKEDEV., guix-commits, 2020/06/04
- 21/23: gnu: services: Add %hurd-startup-service., guix-commits, 2020/06/04
- 23/23: system: bare-hurd.tmpl: Add openssh client and service., guix-commits, 2020/06/04