[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#73927] [PATCH v3 03/17] bootloader: grub: Remove hardcoded partitio
From: |
Janneke Nieuwenhuizen |
Subject: |
[bug#73927] [PATCH v3 03/17] bootloader: grub: Remove hardcoded partition number for the Hurd. |
Date: |
Fri, 25 Oct 2024 11:39:55 +0200 |
This supports using another than the default DISK0 PART1 and using LABEL or
UUID as root file-system specifier. It still defaults to DISK0 PART1 if
the file-system cannot be found, i.e., lives only at the build side: A
virtual machine/childhurd build.
* gnu/bootloader/grub.scm (%device-spec-regexp): New variable.
(string->device-spec, device-spec->hurd-device): Use it in new procedures.
(device->hurd-device): New procedure.
(make-grub-configuration): Use them to remove hardcoded partition
number (root-index 1).
Change-Id: I49fa93dacc09883dfb4d695402c5eac2e0e17286
---
gnu/bootloader/grub.scm | 42 +++++++++++++++++++++++++++++++++++------
1 file changed, 36 insertions(+), 6 deletions(-)
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index 2723eda5f4..c929af691b 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -3,7 +3,7 @@
;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2019, 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2019, 2020, 2023, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2020 Stefan <stefan-guix@vodafonemail.de>
@@ -34,6 +34,7 @@ (define-module (gnu bootloader grub)
#:use-module (guix gexp)
#:use-module (gnu artwork)
#:use-module (gnu bootloader)
+ #:use-module (gnu build file-systems)
#:use-module (gnu system uuid)
#:use-module (gnu system file-systems)
#:use-module (gnu system keyboard)
@@ -45,6 +46,7 @@ (define-module (gnu bootloader grub)
#:use-module (ice-9 regex)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-2)
+ #:use-module (srfi srfi-26)
#:export (grub-theme
grub-theme?
grub-theme-image
@@ -355,6 +357,34 @@ (define (grub-root-search device file)
((or #f (? string?))
#~(format #f "search --file --set ~a" #$file)))))
+(define %device-spec-regexp "/dev/[hsvw]d([abcd])([0-9]*)")
+(define (string->device-spec str)
+ "Return device spec STR as /dev/XdYZ, also catering for uuid or label."
+ (cond ((string-match %device-spec-regexp str)
+ str)
+ ((string->uuid str)
+ =>
+ find-partition-by-uuid)
+ (else
+ (find-partition-by-label str))))
+
+(define* (device-spec->hurd-device device-spec #:key (disk "w"))
+ "Return DEVICE-SPEC as a Hurd device spec:
+ part:PART-NUMBER:device:DISKdDISK-INDEX
+Default to part:1:device:DISKd0 if partition cannot be found."
+ (let* ((m (and=> device-spec (cute string-match %device-spec-regexp <>)))
+ (disk-char (and m (and=> (match:substring m 1) (compose car
string->list))))
+ (disk-index (or (and disk-char (- (char->integer disk-char)
(char->integer #\a)))
+ 0))
+ (partition-number (or (and m (and=> (match:substring m 2)
string->number))
+ 1)))
+ (format #f "part:~a:device:~ad~a" partition-number disk disk-index)))
+
+(define* (device->hurd-device device #:key (disk "w"))
+ "Return DEVICE as a Hurd device spec:
part:PART-NUMBER:device:DISKdDISK-INDEX."
+ (let ((device-spec (canonicalize-device-spec device)))
+ (device-spec->hurd-device device-spec #:disk disk)))
+
(define* (make-grub-configuration grub config entries
#:key
(locale #f)
@@ -413,16 +443,16 @@ (define (menu-entry->gexp entry)
;; IDE driver ("hdX") and those understood by rumpdisk ("wdX"
;; in the "noide" case).
(disk (if (member "noide" arguments) "w" "h"))
- (modules (menu-entry-multiboot-modules entry))
- (root-index 1)) ; XXX EFI will need root-index 2
+ (device-string (file-system-device->string device))
+ (device-spec (and=> device-string string->device-spec))
+ (modules (menu-entry-multiboot-modules entry)))
#~(format port "
menuentry ~s {
- multiboot ~a root=part:~a:device:~ad0~a~a
+ multiboot ~a root=~a~a~a
}~%"
#$label
#$kernel
- #$root-index
- #$disk
+ #$(device-spec->hurd-device device-spec #:disk disk)
(string-join (list #$@arguments) " " 'prefix)
(string-join (map string-join '#$modules)
"\n module " 'prefix))))
--
2.46.0
- [bug#73927] [PATCH 14/16] installer: Add "Kernel" page to select the Hurd., (continued)
[bug#73927] [PATCH v3 00/17] Installer support for (cross) installing the Hurd., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 05/17] system: hurd: Add swap-services to hurd-default-essential-services., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 04/17] system: hurd: Remove qemu networking from %base-services/hurd., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 07/17] hurd-boot: Support second boot., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 03/17] bootloader: grub: Remove hardcoded partition number for the Hurd.,
Janneke Nieuwenhuizen <=
- [bug#73927] [PATCH v3 02/17] guix system: When installing the Hurd, create essential devices., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 01/17] gnu: guile-fibers: Fix cross-build for the Hurd., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 08/17] maint: Add installer dependencies to the manifest., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 11/17] installer: Use "partitioning-page" consistently., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 14/17] installer: Add dry-run?, Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 13/17] installer: Use `%' for parameter %run-command-in-installer., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 16/17] installer: Add static-networking template., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 15/17] installer: Add "Kernel" page to select the Hurd., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 17/17] installer: Support dry-run from Guile via store., Janneke Nieuwenhuizen, 2024/10/25
- [bug#73927] [PATCH v3 06/17] gnu: hurd: Support second boot., Janneke Nieuwenhuizen, 2024/10/25