From patchwork Tue Sep 24 18:29:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31387 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 2A7C127BBEA; Tue, 24 Sep 2024 21:19:17 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id E002C27BBE2 for ; Tue, 24 Sep 2024 21:19:16 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stBzd-0003za-4q; Tue, 24 Sep 2024 16:18:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stBzb-0003r0-CR for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:39 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stBzb-0002jX-3G for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=4BoUb2E95tvWmRYrq/5RRVRalvTzpiwAJ73aohpGM3E=; b=v5yaRzak1qdk+DL7/S/hVVG4TIXINvE+ZbP28WOfW7Gf1oiPN425KwAMEoBx+Oin/6tonhM89GQhSEs3r+ZPdeSrKZycaz4VIZzcjdpkkhIvlQjuHveF2Ej2zYA2N4oWEO5ZBpFH7wLXrk7tUMXvi0RMtAy8UUTtLCcganfSWVMod2u2vBlvwlSoxIIWcxcKW908SvBivbtldhV0J8uEGnSREuZ9uYgFlEbOwT5OAObd2vkOWvwYEEHR478kFERLFjqluqvRI2oiH32zgDuxGnY0UPEjlpcyIPT7QiZqRY0Giqgc6hO+D5Pgy+5P8P6DUmRbKyI6Bzup1s2a8EQm1g==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stBzz-0004lo-88; Tue, 24 Sep 2024 16:19:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 01/12] gnu: bootloader: Remove obsolete bootloader fields. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: lilah@lunabee.space, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:19:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Lilah Tascheter X-Debbugs-Original-Xcc: Lilah Tascheter Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720912018201 (code B ref 72457); Tue, 24 Sep 2024 20:19:03 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:18:40 +0000 Received: from localhost ([127.0.0.1]:38410 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzb-0004jN-0Q for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:40 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:39007 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzV-0004iX-83 for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202610; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=u9x23o0BYoOpZvd9THm6yRtlB//4V4PvVv1NTqFO3Y8=; b=rVTm3twZUl6px6nJKkIFIrel/lgR5CpwhN4Q0x7Z5pwZu06otfCF/Cbv7zkeJ9Hj4iSEjh KPTCFZUwNorC65BZ4Iex8zmRgp6ywtP8Iabfji6LXnp3uW/U1cKQRUJPtIWTUqFOVv2Iwz hFZ6ifMFzTcyE1wwG2OTm3uwZz1//VQAQfu2kDJI8ZPyf1bzehOf/3ai76VuL1RDvIOPmR K5LFymxopmPF5RIrSi26ipz4GTb3CybmZ8dJmpy51qcVSCVtS9YeSWiUtFn3241f+6w1mp NuP8YnEibbhY5nTFapOFX1E9XE2W/B2k6pgoZZcUnhdyqduhiQr9lo5ESDMMnQ== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id 5ea1c82a (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:10 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:08 +0200 Message-ID: X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter * gnu/bootloader.scm (bootloader)[package, disk-image-installer, configuration-file, configuration-file-generator]: Remove fields. Change-Id: I3654d160f7306bb45a78b82ea6b249ff4281f739 --- gnu/bootloader.scm | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm index b1ed187aa2..522dd2fa7d 100644 --- a/gnu/bootloader.scm +++ b/gnu/bootloader.scm @@ -69,12 +69,8 @@ (define-module (gnu bootloader) bootloader bootloader? bootloader-name - bootloader-package bootloader-default-targets bootloader-installer - bootloader-disk-image-installer - bootloader-configuration-file - bootloader-configuration-file-generator bootloader-target bootloader-target? @@ -290,16 +286,10 @@ (define (sexp->menu-entry sexp) ;; has to be described by this record. (define-record-type* - bootloader make-bootloader - bootloader? - (name bootloader-name) - (package bootloader-package) + bootloader make-bootloader bootloader? + (name bootloader-name) (default-targets bootloader-default-targets (default '())) - (installer bootloader-installer) - (disk-image-installer bootloader-disk-image-installer - (default #f)) - (configuration-file bootloader-configuration-file) - (configuration-file-generator bootloader-configuration-file-generator)) + (installer bootloader-installer)) ;;; From patchwork Tue Sep 24 18:29:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31390 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 9ED6827BBE9; Tue, 24 Sep 2024 21:19:48 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id D797A27BBE2 for ; Tue, 24 Sep 2024 21:19:45 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stBzg-0004Fd-Ev; Tue, 24 Sep 2024 16:18:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stBze-00049v-Rr for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:42 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stBze-0002kG-H1; Tue, 24 Sep 2024 16:18:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=g/+zBuPo+Fwx8VjZV5tfZP/83D9KA5AceXggY3ah/fg=; b=ZVMY/7oy/9ziKVi/Hg+giN2d0nX6Kvxy3IFmUA/rehLa7ME7R4LXZqhoUaV8OBjdVfW0dfMz2Kdo4k0CelYrTUJDO/M6LZE93d0hD2AuVH40x1Wwkr4v7SGZr20kMVlX61NNROX60d4b4C3vql1/y24atByA5OYH9tv7YCV9dCY57tnO/1+9B7zctqNLfhS82eNkuvCPx0SBY6MJZFhcB+ve3pAflbBwBgr7KDQhn37fN7a2PLm7EsuzTzZH8onCFSM4molNyhK9fk0gFY0BRPDX07phwVjxNXIg12y0BJEUi47NDzRRAiYyhefafRGYx8ffKJMFf4HcRpIvV+X29g==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stC00-0004m9-Ew; Tue, 24 Sep 2024 16:19:04 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 02/12] gnu: bootloader: grub: Rewrite entirely. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: efraim@flashner.co.il, pelzflorian@pelzflorian.de, lilah@lunabee.space, ludo@gnu.org, maxim.cournoyer@gmail.com, vagrant@debian.org, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:19:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Efraim Flashner , Florian Pelz , Lilah Tascheter , Ludovic =?utf-8?q?Court=C3=A8s?= , Maxim Cournoyer , Vagrant Cascadian X-Debbugs-Original-Xcc: Efraim Flashner , Florian Pelz , Lilah Tascheter , Ludovic =?utf-8?q?Court=C3=A8s?= , Maxim Cournoyer , Vagrant Cascadian Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720913018279 (code B ref 72457); Tue, 24 Sep 2024 20:19:04 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:18:50 +0000 Received: from localhost ([127.0.0.1]:38423 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzi-0004kU-Vo for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:50 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:39007 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzW-0004iX-Hb for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202611; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DFFMgT0yXO1crwfGIXS5XHeryk7Xgggj8mvdJZHc7Bs=; b=sKe+VjBqG1czizOpux4eib3YDfNFS1IepDO4v0QAVMEGK7mmQDVIyXGyiaYtTB2nBOMNCj lqEtowo09tNrJltgK+T6UTGqqN63p1MS03/v3Y6xZd8QwYJ1sIwppmNqGFvOMHA1w3sAV7 WhwJ8OpJqMYlIPf839M3QcQZjkpv/UrZRyoQbivixk3jsJM0ksu9KgQeKA8Xj1bQkPbT84 Ins74vNdvpk/FBg2DnzLNHvmHV7XTnjZ20KYs8jEPrPmr3oXsnFjKWAYvZTYYDP86nLVjP QSs+KcRZkC8UXDzDNGFEr4PzLYZE0UOGWWuFyWspVOzU8Km0VvshabzIAx64hA== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id 510f9f03 (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:11 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:09 +0200 Message-ID: <6db91ca2342d184c376c664843a5cbf838f46312.1727201267.git.herman@rimm.ee> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter * gnu/bootloader.scm (bootloader-configuration)[terminal-outputs, terminal-inputs]: Don't assume grub. [%bootloader-configuration-targets]: Rename to the below. (bootloader-configuration-targets): Delete procedure. * gnu/bootloader/grub.scm (normalize-file, bootloader-theme, image->png, grub-background-image, grub-locale-directory, eye-candy, keyboard-layout-file, grub-setup-io, grub-root-search, make-grub-configuration, grub-configuration-file, grub-efi-configuration-file, install-grub, install-grub-disk-image, install-grub-efi, install-grub-efi-removable, install-grub-efi32, make-grub-efi-netboot-installer, make-grub-efi-netboot-bootloader): Remove procedures. (grub-cfg, grub-mkrescue-bootloader): Remove variables. (grub-efi-removable-bootloader, grub-efi32-bootloader, grub-efi-netboot-bootloader, grub-efi-netboot-removable-bootloader): Deprecate variables. (grub-configuration): Remove macro. (sanitize, search/target, search/menu-entry, when-list, grub-theme-png, core.cfg->core.img, core.cfg, core.img, menu-entry->gexp, make-grub.cfg, grub.cfg, grub.dir, install-grub.dir, install-grub-bios, install-grub-efi, deprecated-installer): Add procedures. (%grub-default-targets, %netboot-targets): Add variables. (keyboard-layout-file): Return computed file. * gnu/packages/bootloaders.scm (make-grub-efi-netboot): Delete procedure. * doc/guix.texi (system Configuration)[Bootloader Configuration]: Update terminal-outputs and terminal-inputs to not be GRUB-specific. Change-Id: I3654d160f7306bb45a78b82ea6b249ff4281f739 --- doc/guix.texi | 23 +- gnu/bootloader.scm | 14 +- gnu/bootloader/grub.scm | 1332 ++++++++++++++-------------------- gnu/packages/bootloaders.scm | 86 --- 4 files changed, 550 insertions(+), 905 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 477d017202..a70b89957a 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -42592,19 +42592,20 @@ Bootloader Configuration is provided, some bootloaders might use a default theme, that's true for GRUB. -@item @code{terminal-outputs} (default: @code{'(gfxterm)}) +@item @code{terminal-outputs} (default: @var{#f}) The output terminals used for the bootloader boot menu, as a list of -symbols. GRUB accepts the values: @code{console}, @code{serial}, -@code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text}, -@code{mda_text}, @code{morse}, and @code{pkmodem}. This field -corresponds to the GRUB variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple -configuration,,, grub,GNU GRUB manual}). - -@item @code{terminal-inputs} (default: @code{'()}) +symbols. When @var{#f}, the default is used. For GRUB this is @code{gfxterm}. +GRUB accepts the values: @code{console}, @code{serial}, @code{serial_@{0-3@}}, +@code{gfxterm}, @code{vga_text}, @code{mda_text}, @code{morse}, and +@code{pkmodem}. This field corresponds to the GRUB variable +@code{GRUB_TERMINAL_OUTPUT} +(@pxref{Simple configuration,,, grub,GNU GRUB manual}). + +@item @code{terminal-inputs} (default: @code{#f}) The input terminals used for the bootloader boot menu, as a list of -symbols. For GRUB, the default is the native platform terminal as -determined at run-time. GRUB accepts the values: @code{console}, -@code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and +symbols, or @code{#f} to use the default. For GRUB, this is the native +platform terminal as determined at run-time. GRUB accepts the values: +@code{console}, @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and @code{usb_keyboard}. This field corresponds to the GRUB variable @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB manual}). diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm index 522dd2fa7d..0a06c736c6 100644 --- a/gnu/bootloader.scm +++ b/gnu/bootloader.scm @@ -495,7 +495,7 @@ (define-record-type* bootloader-configuration? (bootloader bootloader-configuration-bootloader) ; - (targets %bootloader-configuration-targets + (targets bootloader-configuration-targets (default #f)) ;list of strings (menu-entries bootloader-configuration-menu-entries (default '())) ;list of @@ -512,9 +512,9 @@ (define-record-type* (theme bootloader-configuration-theme (default #f)) ;bootloader-specific theme (terminal-outputs bootloader-configuration-terminal-outputs - (default '(gfxterm))) ;list of symbols + (default #f)) ;list of symbols | #f (default outs) (terminal-inputs bootloader-configuration-terminal-inputs - (default '())) ;list of symbols + (default #f)) ;list of symbols | #f (default ins) (serial-unit bootloader-configuration-serial-unit (default #f)) ;integer | #f (serial-speed bootloader-configuration-serial-speed @@ -524,14 +524,6 @@ (define-record-type* (extra-initrd bootloader-configuration-extra-initrd (default #f))) ;string | #f - -(define (bootloader-configuration-targets config) - (or (%bootloader-configuration-targets config) - ;; XXX: At least the GRUB installer (see (gnu bootloader grub)) has this - ;; peculiar behavior of installing fonts and GRUB modules when DEVICE is #f, - ;; hence the default value of '(#f) rather than '(). - (list #f))) - ;;; ;;; Bootloader installation paths. diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm index 2723eda5f4..6e71f30f0d 100644 --- a/gnu/bootloader/grub.scm +++ b/gnu/bootloader/grub.scm @@ -10,6 +10,8 @@ ;;; Copyright © 2022 Karl Hallsby ;;; Copyright © 2022 Denis 'GNUtoo' Carikli ;;; Copyright © 2024 Tomas Volf <~@wolfsden.cz> +;;; Copyright © 2024 Lilah Tascheter +;;; Copyright © 2024 Herman Rimm ;;; ;;; This file is part of GNU Guix. ;;; @@ -27,24 +29,26 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu bootloader grub) - #:use-module (guix build union) - #:use-module (guix records) - #:use-module (guix store) - #:use-module (guix utils) - #:use-module (guix gexp) #: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 system locale) #:use-module (gnu packages bootloaders) #:autoload (gnu packages gtk) (guile-cairo guile-rsvg) #:autoload (gnu packages xorg) (xkeyboard-config) + #:use-module (gnu system boot) + #:use-module (gnu system file-systems) + #:use-module (gnu system keyboard) + #:use-module (gnu system locale) + #:use-module (gnu system uuid) + #:use-module (guix deprecation) + #:use-module (guix diagnostics) + #:use-module (guix gexp) + #:use-module (guix i18n) + #:use-module (guix records) + #:use-module (guix utils) #:use-module (ice-9 match) - #:use-module (ice-9 regex) #:use-module (srfi srfi-1) - #:use-module (srfi srfi-2) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-35) #:export (grub-theme grub-theme? grub-theme-image @@ -53,54 +57,93 @@ (define-module (gnu bootloader grub) grub-theme-color-highlight grub-theme-gfxmode - install-grub-efi-removable - make-grub-efi-netboot-installer - + grub.dir ; for (gnu build image) iso9660 images grub-bootloader + grub-minimal-bootloader grub-efi-bootloader + ;; deprecated grub-efi-removable-bootloader grub-efi32-bootloader grub-efi-netboot-bootloader - grub-efi-netboot-removable-bootloader - grub-mkrescue-bootloader - grub-minimal-bootloader - - grub-configuration)) + grub-efi-netboot-removable-bootloader)) -;;; Commentary: + ;;; -;;; Configuration of GNU GRUB. +;;; General utils. ;;; -;;; Code: - -(define* (normalize-file file mount-point store-directory-prefix) - "Strip MOUNT-POINT and prepend STORE-DIRECTORY-PREFIX, if any, to FILE, a -G-expression or other lowerable object denoting a file name." - - (define (strip-mount-point mount-point file) - (if mount-point - (if (string=? mount-point "/") - file - #~(let ((file #$file)) - (if (string-prefix? #$mount-point file) - (substring #$file #$(string-length mount-point)) - file))) - file)) - - (define (prepend-store-directory-prefix store-directory-prefix file) - (if store-directory-prefix - #~(string-append #$store-directory-prefix #$file) - file)) - - (prepend-store-directory-prefix store-directory-prefix - (strip-mount-point mount-point file))) +(define (sanitize str) + "In-G-exp procedure to sanitize a value for use in a GRUB script." + #~(let ((glycerin (lambda (l r) + (if (pair? l) (append l r) (cons l r)))) + ;; In lieu of escaped-string from (guix read-print). + (isopropyl (lambda (c) + (case c ((#\\ #\$ #\") '(#\\ ,c)) (else c))))) + (use-modules (srfi srfi-1)) + (list->string (fold-right glycerin '() + (map isopropyl (string->list #$str)))))) + +(define* (search/target type targets var #:optional (port #f)) + "Returns a gexp of a GRUB search command for target TYPE, storing the +result in VAR. Optionally outputs to the gexp PORT instead of returning +a string." + (define (form name val) + #~(format #$port "search.~a \"~a\" ~a~%" #$name #$val #$var)) + (with-targets targets + ((type => (path :devpath) (device :device) (fs :fs) + (label :label) (uuid :uuid)) + (cond ((member fs '("tftp" "nfs")) #~(format #$port "set ~a=tftp~%" #$var)) + (uuid (form "fs_uuid" (uuid->string uuid))) + (label (form "fs_label" label)) + (else (form "file" (sanitize path))))))) + +(define* (search/menu-entry device file var #:optional (port #f)) + "Return the GRUB 'search' command to look for DEVICE, which contains +FILE, a gexp. The result is a gexp that can be inserted in the +grub.cfg-generation code to set the variable VAR. This procedure is +able to handle DEVICEs unmounted at evaltime." + (match device + ;; Preferably refer to DEVICE by its UUID or label. This is more + ;; efficient and less ambiguous, see . + ((? uuid? idfk) ; calling idfk uuid here errors for some reason + #~(format #$port "search.fs_uuid ~a ~a~%" #$(uuid->string device) #$var)) + ((? file-system-label? label) + #~(format #$port "search.fs_label \"~a\" ~a~%" + #$(sanitize (file-system-label->string label)) #$var)) + ((? (lambda (device) + (and (string? device) (string-contains device ":/"))) nfs-uri) + ;; If the device is an NFS share, then we assume that the expected + ;; file on that device (e.g. the GRUB background image or the kernel) + ;; has to be loaded over the network. Otherwise we would need an + ;; additional device information for some local disk to look for that + ;; file, which we do not have. + ;; + ;; TFTP is preferred to HTTP because it is used more widely and + ;; specified in standards more widely--especially BOOTP/DHCPv4 + ;; defines a TFTP server for DHCP option 66, but not HTTP. + ;; + ;; Note: DHCPv6 specifies option 59 to contain a boot-file-url, + ;; which can contain a HTTP or TFTP URL. + ;; + ;; Note: It is assumed that the file paths are of a similar + ;; setup on both the TFTP server and the NFS server (it is + ;; not possible to search for files on TFTP). + ;; + ;; TODO: Allow HTTP. + #~(format #$port "set ~a=tftp~%" #$var)) + ((or #f (? string?)) + #~(format #$port "search.file \"~a\" ~a~%" #$(sanitize file) #$var)))) + +(define (when-list . xs) (filter identity xs)) + +;;; +;;; Theming. +;;; (define-record-type* ;; Default theme contributed by Felipe López. - grub-theme make-grub-theme - grub-theme? + grub-theme make-grub-theme grub-theme? (image grub-theme-image (default (file-append %artwork-repository "/grub/GuixSD-fully-black-4-3.svg"))) @@ -113,800 +156,495 @@ (define-record-type* (gfxmode grub-theme-gfxmode (default '("auto")))) ;list of string +(define (grub-theme-png theme) + "Return the GRUB background image defined in THEME. If the suffix of +the image file is \".svg\", then it is converted into a PNG file with +the resolution provided in CONFIG. Returns #f if no file is provided." + (match-record theme (image resolution) + (match resolution + (((? number? width) . (? number? height)) + (computed-file "grub-image.png" + (with-imported-modules '((gnu build svg) (guix build utils)) + (with-extensions (list guile-rsvg guile-cairo) + #~(begin (use-modules (gnu build svg) (guix build utils)) + (if (png-file? #$image) (copy-file #$image #$output) + (svg->png #$image #$output + #:width #$width + #:height #$height))))))) + (_ image)))) + + +;;; +;;; Core config. +;;; GRUB architecture works by having a bootstage load up a core.img, +;;; which then sets the root and prefix variables, allowing grub to load +;;; its main config and modules, and then enter normal mode. On i386-pc +;;; systems a boot.img is flashed which loads the core.img from the MBR +;;; gap, but on efi systems the core.img is just a PE executable, able +;;; to be booted directly. We set up a minimal core.img capable of +;;; finding the user-configured 'install target to load its config from +;;; there. +;;; + +(define (core.cfg targets store-crypto-devices) + "Returns a filelike object for a core configuration file good enough to +decrypt STORE-CRYPTO-DEVICES and boot to normal." + (define (crypto-device->cryptomount dev) + (and (uuid? dev) ; ignore non-uuids - warning given by os + #~(format port "cryptomount -u ~a~%" + ;; cryptomount only accepts UUID without the hyphen. + #$(string-delete #\- (uuid->string dev))))) + + (and=> + (with-targets targets + (('install => (path :devpath)) + #~(call-with-output-file #$output + (lambda (port) + #$@(filter ->bool + (map crypto-device->cryptomount store-crypto-devices)) + #$(search/target 'install targets "root" #~port) + (format port "set \"prefix=($root)~a\"~%" #$(sanitize path)))))) + (cut computed-file "core.cfg" <>))) + +;; XXX: Would a FORMAT symbol instead of string be better? +(define (core.cfg->core.img grub format bootloader-config + store-crypto-devices cfg fs) + "Return a G-exp for a GRUB core image configured with CFG, built for +FORMAT and the file system FS." + (let* ((tftp? (or (string=? fs "tftp") (string=? fs "nfs"))) + (bios? (string-prefix? format "pc")) + (efi? (string=? format "efi")) + (32? (bootloader-configuration-32bit? bootloader-config)) + (grub-format + (cond ((string-prefix? "pc" format) "i386") + ((target-x86-32?) "i386") + ((target-x86-64?) (if 32? "i386" "x86_64")) + ((target-arm32?) "arm") + ((target-aarch64?) (if 32? "arm" "arm64")) + ((target-powerpc?) "powerpc") + ((target-riscv64?) "riscv64") + (else (raise (formatted-message + (G_ "unrecognized target arch '~a'!") + (or (%current-target-system) + (%current-system))))))) + (format (string-append grub-format "-" format + (if (and bios? tftp?) "-pxe" "")))) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils) (ice-9 textual-ports) + (srfi srfi-1)) + (apply invoke #$(file-append grub "/bin/grub-mkimage") + "--output" #$output + "--config" #$cfg + "--prefix" "none" ; we override this in cfg + ;; bios pxe uses pxeboot instead of diskboot - diff format + "--format" #$format + "--compression" "auto" + ;; modules + "minicmd" + (append + ;; disk drivers + '#$(if bios? '("biosdisk") '()) + ;; partmaps + ;; TODO: detect which to use. + '#$(if tftp? '() '("part_msdos" "part_gpt")) + ;; file systems + '#$(cond ((member fs '("ext2" "ext3" "ext4")) '("ext2")) + ((member fs '("vfat" "fat32")) '("fat")) + ((and tftp? efi?) '("efinet")) + ((and tftp? bios?) '("pxe")) + (else (list fs))) + ;; store crypto devs + '#$(if (any uuid? store-crypto-devices) + '("luks" "luks2" "cryptomount") '()) + ;; search module that cfg uses + (call-with-input-file #$cfg + (lambda (port) + (let* ((str (get-string-all port)) + (use (lambda (s) (string-contains str s)))) + (cond ((use "search.fs_uuid") '("search_fs_uuid")) + ((use "search.fs_label") '("search_label")) + ((use "search.file") '("search_fs_file")) + (else '()))))))))))) + +;; XXX: Do we need LVM support here? +(define* (core.img grub format #:key bootloader-config store-crypto-devices + #:allow-other-keys) + "The core image for GRUB, built for FORMAT." + (let* ((targets (bootloader-configuration-targets bootloader-config)) + (cfg (core.cfg targets store-crypto-devices))) + (and=> + (and cfg + (with-targets targets + (('install => (fs :fs)) + (core.cfg->core.img grub format bootloader-config + store-crypto-devices cfg fs)))) + (cut computed-file "core.img" <> + #:options '(#:local-build? #t #:substitutable? #f))))) + ;;; -;;; Background image & themes. +;;; Main config. +;;; This is what does the heavy lifting after core.img finds it. ;;; -(define (bootloader-theme config) - "Return user defined theme in CONFIG if defined or a default theme -otherwise." - (or (bootloader-configuration-theme config) (grub-theme))) - -(define* (image->png image #:key width height) - "Build a PNG of HEIGHT x WIDTH from IMAGE if its file suffix is \".svg\". -Otherwise the picture in IMAGE is just copied." - (computed-file "grub-image.png" - (with-imported-modules '((gnu build svg)) - (with-extensions (list guile-rsvg guile-cairo) - #~(if (string-suffix? ".svg" #+image) - (begin - (use-modules (gnu build svg)) - (svg->png #+image #$output - #:width #$width - #:height #$height)) - (copy-file #+image #$output)))))) - -(define* (grub-background-image config) - "Return the GRUB background image defined in CONFIG or #f if none was found. -If the suffix of the image file is \".svg\", then it is converted into a PNG -file with the resolution provided in CONFIG." - (let* ((theme (bootloader-theme config)) - (image (grub-theme-image theme))) - (and image - (match (grub-theme-resolution theme) - (((? number? width) . (? number? height)) - (image->png image #:width width #:height height)) - (_ #f))))) - -(define (grub-locale-directory grub) - "Generate a directory with the locales from GRUB." - (define builder - #~(begin - (use-modules (ice-9 ftw)) - (let ((locale (string-append #$grub "/share/locale")) - (out #$output)) - (mkdir out) - (chdir out) - (for-each (lambda (lang) - (let ((file (string-append locale "/" lang - "/LC_MESSAGES/grub.mo")) - (dest (string-append lang ".mo"))) - (when (file-exists? file) - (copy-file file dest)))) - (scandir locale))))) - (computed-file "grub-locales" builder)) - -(define* (eye-candy config store-device store-mount-point - #:key store-directory-prefix port) - "Return a gexp that writes to PORT (a port-valued gexp) the 'grub.cfg' part -concerned with graphics mode, background images, colors, and all that. -STORE-DEVICE designates the device holding the store, and STORE-MOUNT-POINT is -its mount point; these are used to determine where the background image and -fonts must be searched for. STORE-DIRECTORY-PREFIX is a directory prefix to -prepend to any store file name." - (define (setup-gfxterm config) - (if (memq 'gfxterm (bootloader-configuration-terminal-outputs config)) - #~(format #f " +;; TODO: use define-configuration. +(define (menu-entry->gexp entry extra-initrd port) + (match-menu-entry + entry + (label device linux linux-arguments initrd multiboot-kernel + multiboot-arguments multiboot-modules chain-loader) + (let ((normalize-file + (compose sanitize (cut normalize-file entry <>)))) + #~(begin + (format #$port "menuentry ~s {~% " #$label) + #$(search/menu-entry + device (or linux multiboot-kernel chain-loader) "boot" port) + #$@(cond + (linux + (list #~(format + #$port " linux \"($boot)~a\" ~a~%" + #$(normalize-file linux) + ;; GRUB passes rest of the line _verbatim_. + (string-join (list #$@linux-arguments))) + #~(format #$port " initrd ~a \"($boot)~a\"~%" + (if #$extra-initrd + (string-append "($boot)\"" + (normalize-file + #$extra-initrd) + "\"") + "") + #$(normalize-file initrd)))) + ;; Previously, this provided a (wrong) root= argument. + ;; Just don't bother anymore; better less info than + ;; wrong info. + (multiboot-kernel + (cons + #~(format #$port " multiboot \"($boot)~a\" ~a~%" + #$(normalize-file multiboot-kernel) + (string-join (list #$@multiboot-arguments))) + (map (lambda (mod) + #~(format port " module \"($boot)~a\"~%" + #$(normalize-file mod))) + multiboot-modules))) + (chain-loader + (list #~(format #$port " chainloader \"~a\"~%" + #$(normalize-file chain-loader))))) + (format #$port "}~%"))))) + +;; TODO: use define-configuration. +(define (make-grub.cfg bootloader-config locale install menu-entries + old-entries terms->str outputs inputs theme) + (define (colors->str c) + (format #f "~a/~a" (assoc-ref c 'fg) (assoc-ref c 'bg))) + + (match-bootloader-configuration + bootloader-config + ;; XXX: Separate these fields into another record? + (default-entry timeout serial-unit serial-speed) + #~(call-with-output-file #$output + (lambda (port) + ;; preamble + (format port "\ +# This file was generated from your Guix configuration. Any changes +# will be lost upon reconfiguration~%") + #$@(when-list + ;; menu settings + (and default-entry + #~(format port "set default=~a~%" #$default-entry)) + (and timeout + #~(format port "set timeout=~a~%" #$timeout)) + ;; gfxterm setup + (and (memq 'gfxterm outputs) + #~(format + port "\ if loadfont unicode; then set gfxmode=~a insmod all_video insmod gfxterm fi~%" - #$(string-join - (grub-theme-gfxmode (bootloader-theme config)) - ";")) - "")) - - (define (theme-colors type) - (let* ((theme (bootloader-theme config)) - (colors (type theme))) - (string-append (symbol->string (assoc-ref colors 'fg)) "/" - (symbol->string (assoc-ref colors 'bg))))) - - (define image - (normalize-file (grub-background-image config) - store-mount-point - store-directory-prefix)) - - (and image - #~(format #$port " -# Set 'root' to the partition that contains /gnu/store. -~a - -~a -~a - + #$(string-join (grub-theme-gfxmode theme) ";"))) + ;; io + (and (or serial-unit serial-speed) + #~(format + port "serial --unit=~a --speed=~a~%" + ;; Documented defaults are unit 0 at 9600 baud. + #$(number->string (or serial-unit 0)) + #$(number->string (or serial-speed 9600)))) + (and (pair? outputs) + #~(format port "terminal_output ~a~%" + #$(terms->str outputs))) + (and (pair? inputs) + #~(format port "terminal_input ~a~%" + #$(terms->str inputs))) + ;; locale + (and locale + #~(format port "\ +set \"locale_dir=($root)~a/locales\" +set lang=~a~%" + #$(sanitize install) + #$(locale-definition-source + (locale-name->definition locale)))) + ;; keyboard layout + (and (bootloader-configuration-keyboard-layout + bootloader-config) + #~(format port "\ +insmod keylayouts +keymap \"($root)~a/keymap~%\"" + #$(sanitize install))) + ;; theme + (match-record theme + (image color-normal color-highlight) + (and image + #~(format port "\ insmod png -if background_image ~a; then +if background_image \"($root)~a/image.png\"; then set color_normal=~a set color_highlight=~a else set menu_color_normal=cyan/blue set menu_color_highlight=white/blue -fi~%" - #$(grub-root-search store-device image) - #$(setup-gfxterm config) - #$(grub-setup-io config) - - #$image - #$(theme-colors grub-theme-color-normal) - #$(theme-colors grub-theme-color-highlight)))) - - -;;; -;;; Configuration file. -;;; - -(define* (keyboard-layout-file layout - #:key - (grub grub)) - "Process the X keyboard layout description LAYOUT, a record, -and return a file in the format for GRUB keymaps. LAYOUT must be present in -the 'share/X11/xkb/symbols/' directory of 'xkeyboard-config'." - (define builder +fi~%" #$(sanitize install) + #$(colors->str color-normal) + #$(colors->str color-highlight))))) + ;; menu entries + #$@menu-entries + #$@(if (pair? old-entries) + (append (list #~(format + port "submenu ~s {~%" + "GNU system, old configurations...")) + old-entries + (list #~(format port "}~%"))) + '()) + (format port "\ +if [ \"${grub_platform}\" == efi ]; then + menuentry \"Firmware setup\" { + fwsetup + } +fi~%"))))) + +(define* (grub.cfg #:key bootloader-config + current-boot-alternative + old-boot-alternatives + locale + store-directory-prefix + #:allow-other-keys) + "Returns a valid GRUB config given installer inputs. Keymap and theme +image are taken from BOOTLOADER-CONFIG, LOCALE is provided explicitly." + (match-bootloader-configuration + bootloader-config + ;; Can't match keyboard-layout here, because it's bound to its struct. + (menu-entries targets extra-initrd theme terminal-outputs + terminal-inputs) + (define (entries->gexp entries) + (map (cut menu-entry->gexp <> extra-initrd #~port) + entries)) + + (let* ((current-entry (boot-alternative->menu-entry + current-boot-alternative)) + (entries (entries->gexp (cons current-entry menu-entries))) + (old-entries (entries->gexp (map boot-alternative->menu-entry + old-boot-alternatives))) + (terms->str (compose string-join (cut map symbol->string <>))) + ;; Use the values provided, or the defaults otherwise. + (outputs (or terminal-outputs '(gfxterm))) + (inputs (or terminal-inputs '())) + (theme (or theme (grub-theme)))) + (and=> + (with-targets targets + (('install => (install :devpath)) + (make-grub.cfg bootloader-config locale install entries + old-entries terms->str outputs inputs theme))) + (cut computed-file "grub.cfg" <> + ;; Since this file is rather unique, there's no point in + ;; trying to substitute it. + #:options '(#:local-build? #t #:substitutable? #f)))))) + +(define (keyboard-layout-file layout grub) + "Process the X keyboard layout description LAYOUT, a +record, and return a file in the format for GRUB keymaps. LAYOUT must be +present in the 'share/X11/xkb/symbols/' directory of 'xkeyboard-config'." + (computed-file + (string-append "grub-keymap." + (string-map (match-lambda (#\, #\-) (chr chr)) + (keyboard-layout-name layout))) (with-imported-modules '((guix build utils)) #~(begin (use-modules (guix build utils)) - ;; 'grub-kbdcomp' passes all its arguments but '-o' to 'ckbcomp' ;; (from the 'console-setup' package). (invoke #+(file-append grub "/bin/grub-mklayout") "-i" #+(keyboard-layout->console-keymap layout) - "-o" #$output)))) - - (computed-file (string-append "grub-keymap." - (string-map (match-lambda - (#\, #\-) - (chr chr)) - (keyboard-layout-name layout))) - builder)) - -(define (grub-setup-io config) - "Return GRUB commands to configure the input / output interfaces. The result -is a string that can be inserted in grub.cfg." - (let* ((symbols->string (lambda (list) - (string-join (map symbol->string list) " "))) - (outputs (bootloader-configuration-terminal-outputs config)) - (inputs (bootloader-configuration-terminal-inputs config)) - (unit (bootloader-configuration-serial-unit config)) - (speed (bootloader-configuration-serial-speed config)) - - ;; Respectively, GRUB_TERMINAL_OUTPUT and GRUB_TERMINAL_INPUT, - ;; as documented in GRUB manual section "Simple Configuration - ;; Handling". - (valid-outputs '(console serial serial_0 serial_1 serial_2 serial_3 - gfxterm vga_text mda_text morse spkmodem)) - (valid-inputs '(console serial serial_0 serial_1 serial_2 serial_3 - at_keyboard usb_keyboard)) - - (io (string-append - ;; UNIT and SPEED are arguments to the same GRUB command - ;; ("serial"), so we process them together. - (if (or unit speed) - (string-append - "serial" - (if unit - ;; COM ports 1 through 4 - (if (and (exact-integer? unit) (<= unit 3) (>= unit 0)) - (string-append " --unit=" (number->string unit)) - #f) - "") - (if speed - (if (exact-integer? speed) - (string-append " --speed=" (number->string speed)) - #f) - "") - "\n") - "") - (if (null? inputs) - "" - (string-append - "terminal_input " - (symbols->string - (map - (lambda (input) - (if (memq input valid-inputs) input #f)) inputs)) - "\n")) - "terminal_output " - (symbols->string - (map - (lambda (output) - (if (memq output valid-outputs) output #f)) outputs))))) - (format #f "~a" io))) - -(define (grub-root-search device file) - "Return the GRUB 'search' command to look for DEVICE, which contains FILE, -a gexp. The result is a gexp that can be inserted in the grub.cfg-generation -code." - ;; Usually FILE is a file name gexp like "/gnu/store/…-linux/vmlinuz", but - ;; it can also be something like "(hd0,msdos1)/vmlinuz" in the case of - ;; custom menu entries. In the latter case, don't emit a 'search' command. - (if (and (string? file) (not (string-prefix? "/" file))) - "" - (match device - ;; Preferably refer to DEVICE by its UUID or label. This is more - ;; efficient and less ambiguous, see . - ((? uuid? uuid) - (format #f "search --fs-uuid --set ~a" - (uuid->string device))) - ((? file-system-label? label) - (format #f "search --label --set ~a" - (file-system-label->string label))) - ((? (lambda (device) - (and (string? device) (string-contains device ":/"))) nfs-uri) - ;; If the device is an NFS share, then we assume that the expected - ;; file on that device (e.g. the GRUB background image or the kernel) - ;; has to be loaded over the network. Otherwise we would need an - ;; additional device information for some local disk to look for that - ;; file, which we do not have. - ;; - ;; We explicitly set "root=(tftp)" here even though if grub.cfg - ;; had been loaded via TFTP, Grub would have set "root=(tftp)" - ;; automatically anyway. The reason is if you have a system that - ;; used to be on NFS but now is local, root would be set to local - ;; disk. If you then selected an older system generation that is - ;; supposed to boot from network in the Grub boot menu, Grub still - ;; wouldn't load those files from network otherwise. - ;; - ;; TFTP is preferred to HTTP because it is used more widely and - ;; specified in standards more widely--especially BOOTP/DHCPv4 - ;; defines a TFTP server for DHCP option 66, but not HTTP. - ;; - ;; Note: DHCPv6 specifies option 59 to contain a boot-file-url, - ;; which can contain a HTTP or TFTP URL. - ;; - ;; Note: It is assumed that the file paths are of a similar - ;; setup on both the TFTP server and the NFS server (it is - ;; not possible to search for files on TFTP). - ;; - ;; TODO: Allow HTTP. - "set root=(tftp)") - ((or #f (? string?)) - #~(format #f "search --file --set ~a" #$file))))) - -(define* (make-grub-configuration grub config entries - #:key - (locale #f) - (system (%current-system)) - (old-entries '()) - (store-crypto-devices '()) - store-directory-prefix) - "Return the GRUB configuration file corresponding to CONFIG, a - object, and where the store is available at -STORE-FS, a object. OLD-ENTRIES is taken to be a list of menu -entries corresponding to old generations of the system. -STORE-CRYPTO-DEVICES contain the UUIDs of the encrypted units that must -be unlocked to access the store contents. -STORE-DIRECTORY-PREFIX may be used to specify a store prefix, as is required -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 ((label (menu-entry-label entry)) - (linux (menu-entry-linux entry)) - (device (menu-entry-device entry)) - (device-mount-point (menu-entry-device-mount-point entry)) - (multiboot-kernel (menu-entry-multiboot-kernel entry)) - (chain-loader (menu-entry-chain-loader entry))) - (cond - (linux - (let ((arguments (menu-entry-linux-arguments entry)) - (linux (normalize-file linux - device-mount-point - store-directory-prefix)) - (initrd (normalize-file (menu-entry-initrd entry) - device-mount-point - store-directory-prefix)) - (extra-initrd (bootloader-configuration-extra-initrd config))) - ;; 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 STORE-DIRECTORY-PREFIX 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 ~a -}~%" - #$label - #$(grub-root-search device linux) - #$linux (string-join (list #$@arguments)) - (or #$extra-initrd "") - #$initrd))) - (multiboot-kernel - (let* ((kernel (menu-entry-multiboot-kernel entry)) - (arguments (menu-entry-multiboot-arguments entry)) - ;; Choose between device names as understood by Mach's built-in - ;; 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 - #~(format port " -menuentry ~s { - multiboot ~a root=part:~a:device:~ad0~a~a -}~%" - #$label - #$kernel - #$root-index - #$disk - (string-join (list #$@arguments) " " 'prefix) - (string-join (map string-join '#$modules) - "\n module " 'prefix)))) - (chain-loader - #~(format port " -menuentry ~s { - ~a - chainloader ~a -}~%" - #$label - #$(grub-root-search device chain-loader) - #$chain-loader))))) - - (define (crypto-devices) - (define (crypto-device->cryptomount dev) - (if (uuid? dev) - #~(format port "cryptomount -u ~a~%" - ;; cryptomount only accepts UUID without the hypen. - #$(string-delete #\- (uuid->string dev))) - ;; Other type of devices aren't implemented. - #~())) - (let ((devices (map crypto-device->cryptomount store-crypto-devices)) - (modules #~(format port "insmod luks~%insmod luks2~%"))) - (if (null? devices) - devices - (cons modules devices)))) - - (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 - #:port #~port))) - - (define locale-config - (let* ((entry (first all-entries)) - (device (menu-entry-device entry)) - (mount-point (menu-entry-device-mount-point entry))) - #~(let ((locale #$(and locale - (locale-definition-source - (locale-name->definition locale)))) - (locales #$(and locale - (normalize-file (grub-locale-directory grub) - mount-point - store-directory-prefix)))) - (when locale - (format port "\ -# Localization configuration. -~asearch --file --set ~a/en@quot.mo -set locale_dir=~a -set lang=~a~%" - ;; Skip the search if there is an image, as it has already - ;; been performed by eye-candy and traversing the store is - ;; an expensive operation. - #$(if (grub-theme-image (bootloader-theme config)) - "# " - "") - locales - locales - locale))))) - - (define keyboard-layout-config - (let* ((layout (bootloader-configuration-keyboard-layout config)) - (keymap* (and layout - (keyboard-layout-file layout #:grub grub))) - (entry (first all-entries)) - (device (menu-entry-device entry)) - (mount-point (menu-entry-device-mount-point entry)) - (keymap (and keymap* - (normalize-file keymap* mount-point - store-directory-prefix)))) - #~(when #$keymap - (format port "\ -insmod keylayouts -keymap ~a~%" #$keymap)))) - - (define builder - #~(call-with-output-file #$output - (lambda (port) - (format port - "# This file was generated from your Guix configuration. Any changes -# will be lost upon reconfiguration. -") - #$@(crypto-devices) - #$(sugar) - #$locale-config - #$keyboard-layout-config - (format port " -set default=~a -set timeout=~a~%" - #$(bootloader-configuration-default-entry config) - #$(bootloader-configuration-timeout config)) - #$@(map menu-entry->gexp all-entries) - - #$@(if (pair? old-entries) - #~((format port " -submenu \"GNU system, old configurations...\" {~%") - #$@(map menu-entry->gexp old-entries) - (format port "}~%")) - #~()) - (format port " -if [ \"${grub_platform}\" == efi ]; then - menuentry \"Firmware setup\" { - fwsetup - } -fi~%")))) - - ;; Since this file is rather unique, there's no point in trying to - ;; substitute it. - (computed-file "grub.cfg" builder - #:options '(#:local-build? #t - #:substitutable? #f))) - -(define (grub-configuration-file config . args) - (let* ((bootloader (bootloader-configuration-bootloader config)) - (grub (bootloader-package bootloader))) - (apply make-grub-configuration grub config args))) - -(define (grub-efi-configuration-file . args) - (apply make-grub-configuration grub-efi args)) - -(define grub-cfg "/boot/grub/grub.cfg") + "-o" #$output))))) + +(define* (grub.dir grub #:key bootloader-config locale + #:allow-other-keys . args) + "Everything that should go in GRUB's prefix. Includes fonts, modules, +locales, keymap, theme image, and grub.cfg." + (let* ((theme (or (bootloader-configuration-theme bootloader-config) + (grub-theme))) + (keyboard-layout (bootloader-configuration-keyboard-layout + bootloader-config)) + (lang (and=> locale (compose locale-definition-source + locale-name->definition))) + (lc-mesg (and lang (file-append grub "/share/locale" lang + "/LC_MESSAGES/grub.mo")))) + (computed-file "grub.dir" + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (mkdir-p #$output) + (chdir #$output) + ;; grub files + (copy-recursively #$(file-append grub "/lib/grub/") #$output + #:copy-file symlink) + (mkdir "fonts") + (symlink #$(file-append grub "/share/grub/unicode.pf2") + "fonts/unicode.pf2") + ;; config file + (symlink #$(apply grub.cfg args) "grub.cfg") + ;; locales + ;; XXX: Warn if missing? + (when (and=> #$lc-mesg file-exists?) + (mkdir "locales") + (symlink #$lc-mesg + (string-append "locales/" #$lang ".mo"))) + ;; keymap + #$@(when-list + (and keyboard-layout + #~(symlink #$(keyboard-layout-file keyboard-layout + grub) + "keymap")) + ;; image + (and (grub-theme-image theme) + #~(copy-file #$(grub-theme-png theme) + "image.png"))))) + #:options '(#:local-build? #t #:substitutable? #f)))) - ;;; -;;; Install procedures. +;;; Installers. ;;; -(define install-grub - #~(lambda (bootloader device mount-point) - (let ((grub (string-append bootloader "/sbin/grub-install")) - (install-dir (string-append mount-point "/boot"))) - ;; Install GRUB on DEVICE which is mounted at MOUNT-POINT. If DEVICE - ;; is #f, then we populate the disk-image rooted at MOUNT-POINT. - (if device - (begin - ;; Tell 'grub-install' that there might be a LUKS-encrypted - ;; /boot or root partition. - (setenv "GRUB_ENABLE_CRYPTODISK" "y") - - ;; Hide potentially confusing messages from the user, such as - ;; "Installing for i386-pc platform." - (invoke/quiet grub "--no-floppy" "--target=i386-pc" - "--boot-directory" install-dir - device)) - ;; When creating a disk-image, only install a font and GRUB modules. - (let* ((fonts (string-append install-dir "/grub/fonts"))) - (mkdir-p fonts) - (copy-file (string-append bootloader "/share/grub/unicode.pf2") - (string-append fonts "/unicode.pf2")) - (copy-recursively (string-append bootloader "/lib/") - install-dir)))))) - -(define install-grub-disk-image - #~(lambda (bootloader root-index image) - ;; Install GRUB on the given IMAGE. The root partition index is - ;; ROOT-INDEX. - (let ((grub-mkimage - (string-append bootloader "/bin/grub-mkimage")) - (modules '("biosdisk" "part_msdos" "fat" "ext2")) - (grub-bios-setup - (string-append bootloader "/sbin/grub-bios-setup")) - (root-device (format #f "hd0,msdos~a" root-index)) - (boot-img (string-append bootloader "/lib/grub/i386-pc/boot.img")) - (device-map "device.map")) - - ;; Create a minimal, standalone GRUB image that will be written - ;; directly in the MBR-GAP (space between the end of the MBR and the - ;; first partition). - (apply invoke grub-mkimage - "-O" "i386-pc" - "-o" "core.img" - "-p" (format #f "(~a)/boot/grub" root-device) - modules) - - ;; Create a device mapping file. - (call-with-output-file device-map - (lambda (port) - (format port "(hd0) ~a~%" image))) - - ;; Copy the default boot.img, that will be written on the MBR sector - ;; by GRUB-BIOS-SETUP. - (copy-file boot-img "boot.img") - - ;; Install both the "boot.img" and the "core.img" files on the given - ;; IMAGE. On boot, the MBR sector will execute the minimal GRUB - ;; written in the MBR-GAP. GRUB configuration and missing modules will - ;; be read from ROOT-DEVICE. - (invoke grub-bios-setup - "-m" device-map - "-r" root-device - "-d" "." - image)))) - -(define install-grub-efi - #~(lambda (bootloader efi-dir mount-point) - ;; There is nothing useful to do when called in the context of a disk - ;; image generation. - (when efi-dir - ;; Install GRUB onto the EFI partition mounted at EFI-DIR, for the - ;; system whose root is mounted at MOUNT-POINT. - (let ((grub-install (string-append bootloader "/sbin/grub-install")) - (install-dir (string-append mount-point "/boot")) - ;; When installing Guix, it's common to mount EFI-DIR below - ;; MOUNT-POINT rather than /boot/efi on the live image. - (target-esp (if (file-exists? (string-append mount-point efi-dir)) - (string-append mount-point efi-dir) - efi-dir))) - ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or - ;; root partition. - (setenv "GRUB_ENABLE_CRYPTODISK" "y") - (invoke/quiet grub-install "--boot-directory" install-dir - "--bootloader-id=Guix" - "--efi-directory" target-esp))))) - -(define install-grub-efi-removable - #~(lambda (bootloader efi-dir mount-point) - ;; NOTE: mount-point is /mnt in guix system init /etc/config.scm /mnt/point - ;; NOTE: efi-dir comes from target list of booloader configuration - ;; There is nothing useful to do when called in the context of a disk - ;; image generation. - (when efi-dir - ;; Install GRUB onto the EFI partition mounted at EFI-DIR, for the - ;; system whose root is mounted at MOUNT-POINT. - (let ((grub-install (string-append bootloader "/sbin/grub-install")) - (install-dir (string-append mount-point "/boot")) - ;; When installing Guix, it's common to mount EFI-DIR below - ;; MOUNT-POINT rather than /boot/efi on the live image. - (target-esp (if (file-exists? (string-append mount-point efi-dir)) - (string-append mount-point efi-dir) - efi-dir))) - ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or - ;; root partition. - (setenv "GRUB_ENABLE_CRYPTODISK" "y") - (invoke/quiet grub-install "--boot-directory" install-dir - "--removable" - ;; "--no-nvram" - "--bootloader-id=Guix" - "--efi-directory" target-esp))))) - -(define install-grub-efi32 - #~(lambda (bootloader efi-dir mount-point) - ;; There is nothing useful to do when called in the context of a disk - ;; image generation. - (when efi-dir - ;; Install GRUB onto the EFI partition mounted at EFI-DIR, for the - ;; system whose root is mounted at MOUNT-POINT. - (let ((grub-install (string-append bootloader "/sbin/grub-install")) - (install-dir (string-append mount-point "/boot")) - ;; When installing Guix, it's common to mount EFI-DIR below - ;; MOUNT-POINT rather than /boot/efi on the live image. - (target-esp (if (file-exists? (string-append mount-point efi-dir)) - (string-append mount-point efi-dir) - efi-dir))) - ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or - ;; root partition. - (setenv "GRUB_ENABLE_CRYPTODISK" "y") - (invoke/quiet grub-install "--boot-directory" install-dir - "--bootloader-id=Guix" - (cond ((target-x86?) "--target=i386-efi") - ((target-arm?) "--target=arm-efi")) - "--efi-directory" target-esp))))) - -(define* (make-grub-efi-netboot-installer grub-efi grub-cfg subdir) - "Make a bootloader-installer for a grub-efi-netboot bootloader, which expects -its files in SUBDIR and its configuration file in GRUB-CFG. - -As a grub-efi-netboot package is already pre-installed by 'grub-mknetdir', the -installer basically copies all files from the bootloader-package (or profile) -into the bootloader-target directory. - -Additionally for network booting over TFTP, two relative symlinks to the store -and to the GRUB-CFG file are necessary. Due to this a TFTP root directory must -not be located on a FAT file-system. - -If the bootloader-target does not support symlinks, then it is assumed to be a -kind of EFI System Partition (ESP). In this case an intermediate configuration -file is created with the help of GRUB-EFI to load the GRUB-CFG. - -The installer is usable for any efi-bootloader-chain, which prepares the -bootloader-profile in a way ready for copying. - -The installer does not manipulate the system's 'UEFI Boot Manager'. - -The returned installer accepts the BOOTLOADER, TARGET and MOUNT-POINT -arguments. Its job is to copy the BOOTLOADER, which must be a pre-installed -grub-efi-netboot package with a SUBDIR like efi/boot or efi/Guix, below the -directory TARGET for the system whose root is mounted at MOUNT-POINT. - -MOUNT-POINT is the last argument in 'guix system init /etc/config.scm mnt/point' -or '/' for other 'guix system' commands. - -Where TARGET comes from the targets argument given to the -bootloader-configuration in: - -(operating-system - (bootloader (bootloader-configuration - (targets '(\"/boot/efi\")) - …)) - …) - -TARGET is required to be an absolute directory name, usually mounted via NFS, -and finally needs to be provided by a TFTP server as -the TFTP root directory. - -Usually the installer will be used to prepare network booting over TFTP. Then -GRUB will load tftp://server/SUBDIR/grub.cfg and this file will instruct it to -load more files from the store like tftp://server/gnu/store/…-linux…/Image. - -To make this possible two symlinks are created. The first symlink points -relatively form MOUNT-POINT/TARGET/SUBDIR/grub.cfg to -MOUNT-POINT/boot/grub/grub.cfg, and the second symlink points relatively from -MOUNT-POINT/TARGET/%store-prefix to MOUNT-POINT/%store-prefix. - -It is important to note that these symlinks need to be relative, as the absolute -paths on the TFTP server side are unknown. - -It is also important to note that both symlinks will point outside the TFTP root -directory and that the TARGET/%store-prefix symlink makes the whole store -accessible via TFTP. Possibly the TFTP server must be configured to allow -accesses outside its TFTP root directory. This all may need to be considered -for security aspects. It is advised to disable any TFTP write access! - -The installer can also be used to prepare booting from local storage, if the -underlying file-system, like FAT on an EFI System Partition (ESP), does not -support symlinks. In this case the MOUNT-POINT/TARGET/SUBDIR/grub.cfg will be -created with the help of GRUB-EFI to load the /boot/grub/grub.cfg file. A -symlink to the store is not needed in this case." - (with-imported-modules '((guix build union)) - #~(lambda (bootloader target mount-point) - ;; In context of a disk image creation TARGET will be #f and an - ;; installer is expected to do necessary installations on MOUNT-POINT, - ;; which will become the root file system. If TARGET is #f, this - ;; installer has nothing to do, as it only cares about the EFI System - ;; Partition (ESP). - (when target - (use-modules ((guix build union) #:select (symlink-relative)) - (ice-9 popen) - (ice-9 rdelim)) - (let* ((mount-point/target (string-append mount-point target "/")) - ;; When installing Guix, it is common to mount TARGET below - ;; MOUNT-POINT rather than the root directory. - (bootloader-target (if (file-exists? mount-point/target) - mount-point/target - target)) - (store (string-append mount-point (%store-prefix))) - (store-link (string-append bootloader-target (%store-prefix))) - (grub-cfg (string-append mount-point #$grub-cfg)) - (grub-cfg-link (string-append bootloader-target - #$subdir "/" - (basename grub-cfg)))) - ;; Copy the bootloader into the bootloader-target directory. - ;; Should we beforehand recursively delete any existing file? - (copy-recursively bootloader bootloader-target - #:follow-symlinks? #t - #:log (%make-void-port "w")) - ;; For TFTP we need to install additional relative symlinks. - ;; If we install on an EFI System Partition (ESP) or some other FAT - ;; file-system, then symlinks cannot be created and are not needed. - ;; Therefore we ignore exceptions when trying. - ;; Prepare the symlink to the grub.cfg. - (mkdir-p (dirname grub-cfg-link)) - (false-if-exception (delete-file grub-cfg-link)) - (if (unspecified? - (false-if-exception (symlink-relative grub-cfg grub-cfg-link))) - ;; Symlinks are supported. - (begin - ;; Prepare the symlink to the store. - (mkdir-p (dirname store-link)) - (false-if-exception (delete-file store-link)) - (symlink-relative store store-link)) - ;; Creating symlinks does not seem to be supported. Probably - ;; an ESP is used. Add a script to search and load the actual - ;; grub.cfg. - (let* ((probe #$(file-append grub-efi "/sbin/grub-probe")) - (port (open-pipe* OPEN_READ probe "--target=fs_uuid" - grub-cfg)) - (search-root - (match (read-line port) - ((? eof-object?) - ;; There is no UUID available. As a fallback search - ;; everywhere for the grub.cfg. - (string-append "search --file --set " #$grub-cfg)) - (fs-uuid - ;; The UUID to load the grub.cfg from is known. - (string-append "search --fs-uuid --set " fs-uuid)))) - (load-grub-cfg (string-append "configfile " #$grub-cfg))) - (close-pipe port) - (with-output-to-file grub-cfg-link - (lambda () - (display (string-join (list search-root - load-grub-cfg) - "\n"))))))))))) +(define* (install-grub.dir grub #:key bootloader-config + #:allow-other-keys . args) + (with-targets (bootloader-configuration-targets bootloader-config) + (('install => (path :path)) + #~(copy-recursively #$(apply grub.dir grub args) #$path + #:log (%make-void-port "w") + #:follow-symlinks? #t + #:copy-file atomic-copy)))) + +(define (install-grub-bios grub) + "Returns an installer for the bios-bootable grub package GRUB." + (lambda* (#:key bootloader-config #:allow-other-keys . args) + (gbegin (apply install-grub.dir grub args) + (with-targets (bootloader-configuration-targets bootloader-config) + (('disk => (device :device)) + #~(invoke #$(file-append grub "/sbin/grub-bios-setup") "-v" "-v" + "--directory" "/" ; can't be blank + "--device-map" "" ; no dev map - need to specify + "--boot-image" + #$(file-append grub "/lib/grub/i386-pc/boot.img") + "--core-image" #$(apply core.img grub "pc" args) + "--root-device" #$(string-append "hostdisk/" device) + #$device)))))) + +(define* (install-grub-efi #:key bootloader-config + #:allow-other-keys . args) + "Installs GRUB into the system's UEFI bootloader, taking into account +user-specified requirements for a 32-bit or fallback bootloader." + (let* ((32? (bootloader-configuration-32bit? bootloader-config)) + (grub (if 32? grub-efi32 grub-efi)) + (core (apply core.img grub "efi" args)) + (copy #~(lambda (dest) (copy-file #$core dest)))) + (gbegin (apply install-grub.dir grub args) + (install-efi bootloader-config + #~`((,#$copy "grub.efi" . "GNU GRUB")))))) - ;;; -;;; Bootloader definitions. +;;; Bootloaders. ;;; -;;; For all these grub-bootloader variables the path to /boot/grub/grub.cfg -;;; is fixed. Inheriting and overwriting the field 'configuration-file' will -;;; break 'guix system delete-generations', 'guix system switch-generation', -;;; and 'guix system roll-back'. + +(define %grub-default-targets + (list (bootloader-target + (type 'install) + (offset 'root) + (path "boot")))) (define grub-bootloader (bootloader - (name 'grub) - (package grub) - (installer install-grub) - (disk-image-installer install-grub-disk-image) - (configuration-file grub-cfg) - (configuration-file-generator grub-configuration-file))) + (name 'grub) + (default-targets %grub-default-targets) + (installer (install-grub-bios grub)))) (define grub-minimal-bootloader (bootloader - (inherit grub-bootloader) - (package grub-minimal))) + (name 'grub) + (default-targets %grub-default-targets) + (installer (install-grub-bios grub-minimal)))) (define grub-efi-bootloader (bootloader - (name 'grub-efi) - (package grub-efi) - (installer install-grub-efi) - (disk-image-installer #f) - (configuration-file grub-cfg) - (configuration-file-generator grub-configuration-file))) - -(define grub-efi-removable-bootloader - (bootloader - (inherit grub-efi-bootloader) - (name 'grub-efi-removable-bootloader) - (installer install-grub-efi-removable))) + (name 'grub-efi) + (default-targets (list (bootloader-target + (type 'vendir) + (offset 'esp) + (path "EFI/Guix")) + (bootloader-target + (type 'install) + (offset 'esp) + (path "grub")))) + (installer install-grub-efi))) + + +;;; +;;; Deprecated! Use the bootloader-config flags instead. Or, in the +;;; case of netboot, set your 'install (or parent thereof) target fs to +;;; be "tftp" or "nfs". +;;; -(define grub-efi32-bootloader +(define (deprecated-installer installer removable? 32?) + "INSTALLER with overrides for its bootloader-config argument." + (lambda args + (apply installer (substitute-keyword-arguments args + ((#:bootloader-config conf) + (bootloader-configuration + (inherit conf) + (efi-removable? removable?) + (32bit? 32?))))))) + +(define-deprecated grub-efi-removable-bootloader grub-efi-bootloader (bootloader - (inherit grub-efi-bootloader) - (installer install-grub-efi32) - (name 'grub-efi32) - (package grub-efi32))) + (inherit grub-efi-bootloader) + (installer (deprecated-installer install-grub-efi #t #f)))) -(define (make-grub-efi-netboot-bootloader name subdir) +(define-deprecated grub-efi32-bootloader grub-efi-bootloader (bootloader - (name name) - (package (make-grub-efi-netboot (symbol->string name) subdir)) - (installer (make-grub-efi-netboot-installer grub-efi grub-cfg subdir)) - (disk-image-installer #f) - (configuration-file grub-cfg) - (configuration-file-generator grub-efi-configuration-file))) - -(define grub-efi-netboot-bootloader - (make-grub-efi-netboot-bootloader 'grub-efi-netboot-bootloader - "efi/Guix")) - -(define grub-efi-netboot-removable-bootloader - (make-grub-efi-netboot-bootloader 'grub-efi-netboot-removable-bootloader - "efi/boot")) - -(define grub-mkrescue-bootloader + (inherit grub-efi-bootloader) + (installer (deprecated-installer install-grub-efi #f #t)))) + +(define %netboot-targets + (list (bootloader-target + (type 'install) + (offset 'root) + (path "boot") + (file-system "tftp")) + (bootloader-target + (type 'vendir) + (offset 'esp) + (path "EFI/Guix")))) + +(define-deprecated grub-efi-netboot-bootloader + grub-efi-bootloader (bootloader - (inherit grub-efi-bootloader) - (package grub-hybrid))) + (inherit grub-efi-bootloader) + (default-targets %netboot-targets))) - -;;; -;;; Compatibility macros. -;;; - -(define-syntax grub-configuration - (syntax-rules (grub) - ((_ (grub package) fields ...) - (if (eq? package grub) - (bootloader-configuration - (bootloader grub-bootloader) - fields ...) - (bootloader-configuration - (bootloader grub-efi-bootloader) - fields ...))) - ((_ fields ...) - (bootloader-configuration - (bootloader grub-bootloader) - fields ...)))) - -;;; grub.scm ends here +(define-deprecated grub-efi-netboot-removable-bootloader + grub-efi-bootloader + (bootloader + (inherit grub-efi-bootloader) + (default-targets %netboot-targets) + (installer (deprecated-installer install-grub-efi #t #f)))) diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 2a12a38f1a..00b502aaee 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -498,92 +498,6 @@ (define-public grub-hybrid basename)))) (scandir input-dir))))))))))) -(define-public (make-grub-efi-netboot name subdir) - "Make a grub-efi-netboot package named NAME, which will be able to boot over -network via TFTP by accessing its files in the SUBDIR of a TFTP root directory. -This package is also able to boot from local storage devices. - -A bootloader-installer basically needs to copy the package content into the -bootloader-target directory, which will usually be the TFTP root, as -'grub-mknetdir' will be invoked already during the package creation. - -Alternatively the bootloader-target directory can be a mounted EFI System -Partition (ESP), or a similar partition with a FAT file system, for booting -from local storage devices. - -The name of the GRUB EFI binary will conform to the UEFI specification for -removable media. Depending on the system it will be e.g. bootx64.efi or -bootaa64.efi below SUBDIR. - -The SUBDIR argument needs to be set to \"efi/boot\" to create a package which -conforms to the UEFI specification for removable media. - -The SUBDIR argument defaults to \"efi/Guix\", as it is also the case for -'grub-efi-bootloader'." - (package - (name name) - (version (package-version grub-efi)) - ;; Source is not needed, but it cannot be omitted. - (source #f) - (build-system trivial-build-system) - (arguments - (let* ((system (string-split (nix-system->gnu-triplet - (or (%current-target-system) - (%current-system))) - #\-)) - (arch (first system)) - (boot-efi - (match system - ;; These are the supportend systems and the names defined by - ;; the UEFI standard for removable media. - (("i686" _ ...) "/bootia32.efi") - (("x86_64" _ ...) "/bootx64.efi") - (("arm" _ ...) "/bootarm.efi") - (("aarch64" _ ...) "/bootaa64.efi") - (("riscv" _ ...) "/bootriscv32.efi") - (("riscv64" _ ...) "/bootriscv64.efi") - ;; Other systems are not supported, although defined. - ;; (("riscv128" _ ...) "/bootriscv128.efi") - ;; (("ia64" _ ...) "/bootia64.efi") - ((_ ...) #f))) - (core-efi (string-append - ;; This is the arch dependent file name of GRUB, e.g. - ;; i368-efi/core.efi or arm64-efi/core.efi. - (match arch - ("i686" "i386") - ("aarch64" "arm64") - ("riscv" "riscv32") - (_ arch)) - "-efi/core.efi"))) - (list - #:modules '((guix build utils)) - #:builder - #~(begin - (use-modules (guix build utils)) - (let* ((bootloader #$(this-package-input "grub-efi")) - (net-dir #$output) - (sub-dir (string-append net-dir "/" #$subdir "/")) - (boot-efi (string-append sub-dir #$boot-efi)) - (core-efi (string-append sub-dir #$core-efi))) - ;; Install GRUB, which refers to the grub.cfg, with support for - ;; encrypted partitions, - (setenv "GRUB_ENABLE_CRYPTODISK" "y") - (invoke/quiet (string-append bootloader "/bin/grub-mknetdir") - (string-append "--net-directory=" net-dir) - (string-append "--subdir=" #$subdir) - ;; These modules must be pre-loaded to allow booting - ;; from an ESP or a similar partition with a FAT - ;; file system. - (string-append "--modules=part_msdos part_gpt fat")) - ;; Move GRUB's core.efi to the removable media name. - (false-if-exception (delete-file boot-efi)) - (rename-file core-efi boot-efi)))))) - (inputs (list grub-efi)) - (synopsis (package-synopsis grub-efi)) - (description (package-description grub-efi)) - (home-page (package-home-page grub-efi)) - (license (package-license grub-efi)))) - (define-public syslinux (let ((commit "bb41e935cc83c6242de24d2271e067d76af3585c")) (package From patchwork Tue Sep 24 18:29:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31386 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 3E09B27BBE2; Tue, 24 Sep 2024 21:19:07 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id F2BC427BBEA for ; Tue, 24 Sep 2024 21:19:04 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stBze-00044w-09; Tue, 24 Sep 2024 16:18:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stBzc-0003ux-6c for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:40 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stBzb-0002jh-Rp; Tue, 24 Sep 2024 16:18:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=8JVGTyMHkCcDxY1sVHR5yXSshats0LqEQaw8BCW5pPM=; b=T9lhkqBAdu7OLreMpNJ/trF+BXsjRzybaBs80fh9Z4jFrVHSf3GQAq9LZ8Wx2AAI5VloSElBSWsP5XfN35ute+U9l7QRWE3HuYHQFurDpJle2l8wrJF4BXWp9EDXVYj5UYVFujYoqAcD4zac4k90VvijOQSB+Y8QuAoUgK499lc4BY7Ps/0npnKPzf10fVEGTQGt98bR+96FxVtbiqYq7YhQcYmZytRmDmwZTNBi+ImFxJQWCNIRpasBrWsQSJ+t0X7yyvZsAF01uO2pyjaUv3/PDBLLTVJHzcg/1aP+RsjHjUzSCX4oq5Db3hVjc8j+WVK7ue3bWrdK8u9Aj4B+xQ==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stBzz-0004ly-Nd; Tue, 24 Sep 2024 16:19:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 03/12] gnu: bootloader: Update bootloader-configuration targets field. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: dev@jpoiret.xyz, lilah@lunabee.space, ludo@gnu.org, othacehe@gnu.org, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:19:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Josselin Poiret , Lilah Tascheter , Ludovic =?utf-8?q?Court=C3=A8s?= , Mathieu Othacehe X-Debbugs-Original-Xcc: Josselin Poiret , Lilah Tascheter , Ludovic =?utf-8?q?Court=C3=A8s?= , Mathieu Othacehe Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720912718261 (code B ref 72457); Tue, 24 Sep 2024 20:19:03 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:18:47 +0000 Received: from localhost ([127.0.0.1]:38419 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzg-0004k5-Er for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:46 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:59577 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzY-0004ik-QC for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202612; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8JVGTyMHkCcDxY1sVHR5yXSshats0LqEQaw8BCW5pPM=; b=IwJwJY/O6TkxPZCsJgFRSVD/7kBuw9VLvJWC88eDTW4uOGwjOEPPdkLOEgNTJK6DMsa10J B6LAMTDd2tTJ/O5KYNIXZoiBaHRyAZGI/6Fk6HFFUFXgZWrGqxdM/q1pJInpjMCjlOct8I SXTpjXZgLOPqNUn6c12w8o38s35soQLAhYvHo6ngbTZIAn+zz62icwG+yolb0HykMv7+mT Ivr/oMcaD2jy6yLVvvGCAmNR0jhESD/9F5+dX3BLeHarZmkXw3k8BenemWF777mgt83XJ3 fbDZCuZfBcgpCZRQeAHevgLx+uFwysFfOourTSyj4mQjkPVwoJ1C0c7lqNNnbg== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id 6b0905e2 (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:12 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:10 +0200 Message-ID: <34a15fa43b2850ebb5f05dc6538b3cda9e75bfd5.1727201267.git.herman@rimm.ee> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter * gnu/bootloader.scm (warn-update-targets): New procedure. (bootloader-configuration)[targets]: Use warn-update-targets sanitizer. * gnu/installer/parted.scm (bootloader-configuration): Use new target field format. * gnu/system/images/hurd.scm (hurd-barebones-os)[bootloader], gnu/system/images/novena.scm (novena-barebones-os)[bootloader], gnu/system/images/orangepi-r1-plus-lts-rk3328.scm (orangepi-r1-plus-lts-rk3328-barebones-os)[bootloader], gnu/system/images/pine64.scm (pine64-barebones-os)[bootloader], gnu/system/images/pinebook-pro.scm (pinebook-pro-barebones-os)[bootloader], gnu/system/images/rock64.scm (rock64-barebones-os)[bootloader], gnu/system/images/unmatched.scm (unmatched-barebones-os)[bootloader], gnu/system/images/visionfive2.scm (visionfive2-barebones-os)[bootloader]: Use new target format. * gnu/system/install.scm (installation-os)[bootloader]: Use new format. (embedded-installation-os): Use new format and adjust description. (beaglebone-black-installation-os, a20-olinuxino-lime-installation-os, a20-olinuxino-lime2-emmc-installation-os, a20-olinuxino-micro-installation-os, bananapi-m2-ultra-installation-os, firefly-rk3399-installation-os, mx6cuboxi-installation-os, novena-installation-os, nintendo-nes-classic-edition-installation-os, orangepi-r1-plus-lts-rk3328-installation-os, pine64-plus-installation-os, pinebook-installation-os, rock64-installation-os, rockpro64-installation-os, rk3399-puma-installation-os, wandboard-installation-os): Don't guess block device. Change-Id: I3654d160f7306bb45a78b82ea6b249ff4281f739 --- gnu/bootloader.scm | 46 +++++++++- gnu/installer/parted.scm | 12 ++- gnu/system/images/hurd.scm | 4 +- gnu/system/images/novena.scm | 3 +- .../images/orangepi-r1-plus-lts-rk3328.scm | 3 +- gnu/system/images/pine64.scm | 3 +- gnu/system/images/pinebook-pro.scm | 3 +- gnu/system/images/rock64.scm | 3 +- gnu/system/images/unmatched.scm | 3 +- gnu/system/images/visionfive2.scm | 3 +- gnu/system/install.scm | 85 ++++++------------- 11 files changed, 88 insertions(+), 80 deletions(-) diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm index 0a06c736c6..14066e11f9 100644 --- a/gnu/bootloader.scm +++ b/gnu/bootloader.scm @@ -43,6 +43,7 @@ (define-module (gnu bootloader) #:use-module (guix utils) #:use-module (ice-9 match) #:use-module (ice-9 receive) + #:use-module (ice-9 regex) #:use-module (rnrs bytevectors) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) @@ -486,9 +487,49 @@ (define-syntax with-targets ;;; Bootloader configuration record. ;;; -;; The record contains bootloader independant +;; The record contains bootloader independent ;; configuration used to fill bootloader configuration file. +;; Based on report-duplicate-field-specifier from (guix records). +(define (report-duplicate-type-field targets) + "Report the first target with duplicate type among TARGETS." + (let loop ((targets targets) + (seen '())) + (match targets + ((target rest ...) + (let ((type (bootloader-target-type target))) + (when (memq type seen) + (error loc (G_ "target with duplicate type~%") duplicate)) + (loop rest (cons type seen)))) + (() #t)))) + +(define-with-syntax-properties (warn-update-targets (value properties)) + (let ((targets (wrap-element value)) + (loc (source-properties->location properties))) + (define string->target + (match-lambda + ((? bootloader-target? target) target) + ((? string? s) (if (string-prefix? "/dev" s) + (if (string-match ".+p[0-9]+$" s) + (bootloader-target + (type 'part) + (device s)) + (bootloader-target + (type 'disk) + (device s))) + (bootloader-target + (type 'esp) + (offset 'root) + (path s)))) + (x (error loc (G_ "invalid target '~a'~%") x)))) + + ;; XXX: Should this be an error? + (when (any string? targets) + (warning loc (G_ "the 'targets' field should now contain \ + records, inferring a best guess, this might break!~%"))) + (let* ((targets (map string->target targets))) + (report-duplicate-type-field targets) + targets))) (define-record-type* bootloader-configuration make-bootloader-configuration @@ -496,7 +537,8 @@ (define-record-type* (bootloader bootloader-configuration-bootloader) ; (targets bootloader-configuration-targets - (default #f)) ;list of strings + (default '()) ;list of strings + (sanitize warn-update-targets)) (menu-entries bootloader-configuration-menu-entries (default '())) ;list of (default-entry bootloader-configuration-default-entry diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm index dbdec1bba8..da19a57878 100644 --- a/gnu/installer/parted.scm +++ b/gnu/installer/parted.scm @@ -1460,15 +1460,19 @@ (define (root-user-partition? partition) (define (bootloader-configuration user-partitions) "Return the bootloader configuration field for USER-PARTITIONS." - (let* ((root-partition (find root-user-partition? - user-partitions)) + (let* ((root-partition (find root-user-partition? user-partitions)) (root-partition-disk (user-partition-disk-file-name root-partition))) `((bootloader-configuration ,@(if (efi-installation?) `((bootloader grub-efi-bootloader) - (targets (list ,(default-esp-mount-point)))) + (targets (list (bootloader-target + (type 'esp) + (path ,(default-esp-mount-point)))))) `((bootloader grub-bootloader) - (targets (list ,root-partition-disk)))) + (targets (list (bootloader-target + (type 'disk) + ;; TODO: Provide a uuid or label. + (device ,root-partition-disk)))))) ;; XXX: Assume we defined the 'keyboard-layout' field of ;; right above. diff --git a/gnu/system/images/hurd.scm b/gnu/system/images/hurd.scm index 9b618f7dc6..8fb00a6903 100644 --- a/gnu/system/images/hurd.scm +++ b/gnu/system/images/hurd.scm @@ -41,9 +41,7 @@ (define-module (gnu system images hurd) (define hurd-barebones-os (operating-system (inherit %hurd-default-operating-system) - (bootloader (bootloader-configuration - (bootloader grub-minimal-bootloader) - (targets '("/dev/sdX")))) + (bootloader (bootloader-configuration (bootloader grub-minimal-bootloader))) (file-systems (cons (file-system (device (file-system-label "my-root")) (mount-point "/") diff --git a/gnu/system/images/novena.scm b/gnu/system/images/novena.scm index 810e2bed5f..a7a1f499dd 100644 --- a/gnu/system/images/novena.scm +++ b/gnu/system/images/novena.scm @@ -39,8 +39,7 @@ (define novena-barebones-os (timezone "Europe/Paris") (locale "en_US.utf8") (bootloader (bootloader-configuration - (bootloader u-boot-novena-bootloader) - (targets '("/dev/vda")))) + (bootloader u-boot-novena-bootloader))) (initrd-modules '()) (kernel linux-libre-arm-generic) (kernel-arguments '("console=ttymxc1,115200")) diff --git a/gnu/system/images/orangepi-r1-plus-lts-rk3328.scm b/gnu/system/images/orangepi-r1-plus-lts-rk3328.scm index 6ec644f113..a3dae24377 100644 --- a/gnu/system/images/orangepi-r1-plus-lts-rk3328.scm +++ b/gnu/system/images/orangepi-r1-plus-lts-rk3328.scm @@ -39,8 +39,7 @@ (define orangepi-r1-plus-lts-rk3328-barebones-os (timezone "Europe/Amsterdam") (locale "en_US.utf8") (bootloader (bootloader-configuration - (bootloader u-boot-orangepi-r1-plus-lts-rk3328-bootloader) - (targets '("/dev/mmcblk0")))) + (bootloader u-boot-orangepi-r1-plus-lts-rk3328-bootloader))) (initrd-modules '()) (kernel linux-libre-arm64-generic) (file-systems (cons (file-system diff --git a/gnu/system/images/pine64.scm b/gnu/system/images/pine64.scm index 457ff4345f..b166838ddd 100644 --- a/gnu/system/images/pine64.scm +++ b/gnu/system/images/pine64.scm @@ -41,8 +41,7 @@ (define pine64-barebones-os (timezone "Europe/Paris") (locale "en_US.utf8") (bootloader (bootloader-configuration - (bootloader u-boot-pine64-lts-bootloader) - (targets '("/dev/vda")))) + (bootloader u-boot-pine64-lts-bootloader))) (initrd-modules '()) (kernel linux-libre-arm64-generic) (file-systems (cons (file-system diff --git a/gnu/system/images/pinebook-pro.scm b/gnu/system/images/pinebook-pro.scm index 3a0f3abf1f..b26adfb7b9 100644 --- a/gnu/system/images/pinebook-pro.scm +++ b/gnu/system/images/pinebook-pro.scm @@ -38,8 +38,7 @@ (define pinebook-pro-barebones-os (timezone "Europe/Paris") (locale "en_US.utf8") (bootloader (bootloader-configuration - (bootloader u-boot-pinebook-pro-rk3399-bootloader) - (targets '("/dev/vda")))) + (bootloader u-boot-pinebook-pro-rk3399-bootloader))) (initrd-modules '()) (kernel linux-libre-arm64-generic) (file-systems (cons (file-system diff --git a/gnu/system/images/rock64.scm b/gnu/system/images/rock64.scm index b3dcfc6193..0b243662d6 100644 --- a/gnu/system/images/rock64.scm +++ b/gnu/system/images/rock64.scm @@ -39,8 +39,7 @@ (define rock64-barebones-os (timezone "Europe/Oslo") (locale "en_US.utf8") (bootloader (bootloader-configuration - (bootloader u-boot-rock64-rk3328-bootloader) - (targets '("/dev/sda")))) + (bootloader u-boot-rock64-rk3328-bootloader))) (initrd-modules '()) (kernel linux-libre-arm64-generic) (file-systems (cons (file-system diff --git a/gnu/system/images/unmatched.scm b/gnu/system/images/unmatched.scm index d40a32f184..7eb147bbab 100644 --- a/gnu/system/images/unmatched.scm +++ b/gnu/system/images/unmatched.scm @@ -39,8 +39,7 @@ (define unmatched-barebones-os (timezone "Asia/Jerusalem") (locale "en_US.utf8") (bootloader (bootloader-configuration - (bootloader u-boot-sifive-unmatched-bootloader) - (targets '("/dev/vda")))) + (bootloader u-boot-sifive-unmatched-bootloader))) (initrd-modules '()) (kernel linux-libre-riscv64-generic) (file-systems (cons (file-system diff --git a/gnu/system/images/visionfive2.scm b/gnu/system/images/visionfive2.scm index 26f70afbc1..a1c0733692 100644 --- a/gnu/system/images/visionfive2.scm +++ b/gnu/system/images/visionfive2.scm @@ -62,8 +62,7 @@ (define visionfive2-barebones-os (timezone "Etc/UTC") (locale "en_US.utf8") (bootloader (bootloader-configuration - (bootloader u-boot-starfive-visionfive2-bootloader) - (targets '("/dev/mmcblk0")))) + (bootloader u-boot-starfive-visionfive2-bootloader))) (file-systems (cons (file-system (device (file-system-label "Guix_image")) (mount-point "/") diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 78a3cdaaec..2d0c9875fb 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -7,7 +7,8 @@ ;;; Copyright © 2020 Florian Pelz ;;; Copyright © 2020 Efraim Flashner ;;; Copyright © 2022 Josselin Poiret -;;; Copyright © 2023 Herman Rimm +;;; Copyright © 2023-2024 Herman Rimm +;;; Copyright © 2024 Lilah Tascheter ;;; ;;; This file is part of GNU Guix. ;;; @@ -503,9 +504,7 @@ (define installation-os (timezone "Europe/Paris") (locale "en_US.utf8") (name-service-switch %mdns-host-lookup-nss) - (bootloader (bootloader-configuration - (bootloader grub-bootloader) - (targets '("/dev/sda")))) + (bootloader (bootloader-configuration (bootloader grub-bootloader))) (label (string-append "GNU Guix installation " (or (getenv "GUIX_DISPLAYED_VERSION") (package-version guix)))) @@ -569,17 +568,19 @@ (define* (os-with-u-boot os board #:key (bootloader-target "/dev/mmcblk0") (package (make-u-boot-package board triplet)))) (targets (list bootloader-target)))))) -(define* (embedded-installation-os bootloader bootloader-target tty - #:key (extra-modules '())) - "Return an installation os for embedded systems. -The initrd gets the extra modules EXTRA-MODULES. -A getty is provided on TTY. -The bootloader BOOTLOADER is installed to BOOTLOADER-TARGET." +(define* (embedded-installation-os bootloader #:optional + (tty "ttyS0") + (extra-modules '()) + (bootloader-targets '())) + "Return an installation OS for embedded systems. The BOOTLOADER is +installed to its default targets, or BOOTLOADER-TARGETS if provided. A +getty is provided on ttyS0, or on TTY if provided. The initrd gets the +EXTRA-MODULES." (operating-system (inherit installation-os) (bootloader (bootloader-configuration - (bootloader bootloader) - (targets (list bootloader-target)))) + (bootloader bootloader) + (targets bootloader-targets))) (kernel linux-libre) (kernel-arguments (cons (string-append "console=" tty) @@ -587,88 +588,58 @@ (define* (embedded-installation-os bootloader bootloader-target tty (initrd-modules (append extra-modules %base-initrd-modules)))) (define beaglebone-black-installation-os - (embedded-installation-os u-boot-beaglebone-black-bootloader - "/dev/sda" - "ttyO0" - #:extra-modules - ;; This module is required to mount the sd card. - '("omap_hsmmc"))) + (embedded-installation-os + ;; The omap_hsmmc module is required to mount the microSD card. + u-boot-beaglebone-black-bootloader "ttyO0" '("omap_hsmmc"))) (define a20-olinuxino-lime-installation-os - (embedded-installation-os u-boot-a20-olinuxino-lime-bootloader - "/dev/mmcblk0" ; SD card storage - "ttyS0")) + (embedded-installation-os u-boot-a20-olinuxino-lime-bootloader)) (define a20-olinuxino-lime2-emmc-installation-os - (embedded-installation-os u-boot-a20-olinuxino-lime2-bootloader - "/dev/mmcblk1" ; eMMC storage - "ttyS0")) + (embedded-installation-os u-boot-a20-olinuxino-lime2-bootloader)) (define a20-olinuxino-micro-installation-os - (embedded-installation-os u-boot-a20-olinuxino-micro-bootloader - "/dev/mmcblk0" ; SD card storage - "ttyS0")) + (embedded-installation-os u-boot-a20-olinuxino-micro-bootloader)) (define bananapi-m2-ultra-installation-os - (embedded-installation-os u-boot-bananapi-m2-ultra-bootloader - "/dev/mmcblk1" ; eMMC storage - "ttyS0")) + (embedded-installation-os u-boot-bananapi-m2-ultra-bootloader)) (define firefly-rk3399-installation-os (embedded-installation-os u-boot-firefly-rk3399-bootloader - "/dev/mmcblk0" ; SD card/eMMC (SD priority) storage "ttyS2")) ; UART2 connected on the Pi2 bus (define mx6cuboxi-installation-os - (embedded-installation-os u-boot-mx6cuboxi-bootloader - "/dev/mmcblk0" ; SD card storage - "ttymxc0")) + (embedded-installation-os u-boot-mx6cuboxi-bootloader "ttymxc0")) (define novena-installation-os - (embedded-installation-os u-boot-novena-bootloader - "/dev/mmcblk1" ; SD card storage - "ttymxc1")) + (embedded-installation-os u-boot-novena-bootloader "ttymxc1")) (define nintendo-nes-classic-edition-installation-os - (embedded-installation-os u-boot-nintendo-nes-classic-edition-bootloader - "/dev/mmcblk0" ; SD card (solder it yourself) - "ttyS0")) + (embedded-installation-os u-boot-nintendo-nes-classic-edition-bootloader)) (define orangepi-r1-plus-lts-rk3328-installation-os - (embedded-installation-os u-boot-orangepi-r1-plus-lts-rk3328-bootloader - "/dev/mmcblk0" ; SD card storage - "ttyS0")) + (embedded-installation-os u-boot-orangepi-r1-plus-lts-rk3328-bootloader)) (define pine64-plus-installation-os - (embedded-installation-os u-boot-pine64-plus-bootloader - "/dev/mmcblk0" ; SD card storage - "ttyS0")) + (embedded-installation-os u-boot-pine64-plus-bootloader)) (define pinebook-installation-os - (embedded-installation-os u-boot-pinebook-bootloader - "/dev/mmcblk0" ; SD card storage - "ttyS0")) + (embedded-installation-os u-boot-pinebook-bootloader)) (define rock64-installation-os (embedded-installation-os u-boot-rock64-rk3328-bootloader - "/dev/mmcblk0" ; SD card/eMMC (SD priority) storage "ttyS2")) ; UART2 connected on the Pi2 bus (define rockpro64-installation-os (embedded-installation-os u-boot-rockpro64-rk3399-bootloader - "/dev/mmcblk0" ; SD card/eMMC (SD priority) storage "ttyS2")) ; UART2 connected on the Pi2 bus (define rk3399-puma-installation-os - (embedded-installation-os u-boot-puma-rk3399-bootloader - "/dev/mmcblk0" ; SD card storage - "ttyS0")) + (embedded-installation-os u-boot-puma-rk3399-bootloader)) (define wandboard-installation-os - (embedded-installation-os u-boot-wandboard-bootloader - "/dev/mmcblk0" ; SD card storage - "ttymxc0")) + (embedded-installation-os u-boot-wandboard-bootloader "ttymxc0")) ;; Return the default os here so 'guix system' can consume it directly. installation-os From patchwork Tue Sep 24 18:29:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31392 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 457DE27BBE9; Tue, 24 Sep 2024 21:20:03 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id E092F27BBE2 for ; Tue, 24 Sep 2024 21:19:59 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stBzi-0004NY-7f; Tue, 24 Sep 2024 16:18:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stBzg-0004H6-HD for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:44 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stBzg-0002kh-5l; Tue, 24 Sep 2024 16:18:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=kImCWD0CmeSjKEmy03mDMkaCYN9j3/NOihjXkhFNH10=; b=Jt8Cfmd2NbQj59LFydSh+qtBz0nzzL8qi7tjsb57gHlajdUV7uNnJYLY39ICushbuplB1A9LqfufpQsaJ68DgcEPqBW6B5CsxSATabuTuFfs79xcpqi7ZazgWbp2VJjHa22cANZRygCqxJRY5obZ2/NGF86uhfGMo93UJoffQE8iq4J/e8T+nLXbo5p2RK9jGHfKNtxuG2IFsrXO6Pb0qYIfy7LnQFvT7VXo/C4hLmYrkeo1pGMyzVfunb3LzxACZJMChhGsiJBcOGzOdXlw0sPmnul0RP70OYHHLO1Vkp39gwU5swgqbfoL5x5Dey/MsuDz+jTESmVQOuS8rb8wAg==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stC02-0004mg-E0; Tue, 24 Sep 2024 16:19:06 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 04/12] gnu: Core bootloader changes. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: guix@cbaines.net, dev@jpoiret.xyz, ludo@gnu.org, othacehe@gnu.org, zimon.toutoune@gmail.com, me@tobias.gr, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:19:06 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Christopher Baines , Josselin Poiret , Ludovic =?utf-8?q?Court=C3=A8s?= , Mathieu Othacehe , Simon Tournier , Tobias Geerinckx-Rice X-Debbugs-Original-Xcc: Christopher Baines , Josselin Poiret , Ludovic =?utf-8?q?Court=C3=A8s?= , Mathieu Othacehe , Simon Tournier , Tobias Geerinckx-Rice Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720913418305 (code B ref 72457); Tue, 24 Sep 2024 20:19:06 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:18:54 +0000 Received: from localhost ([127.0.0.1]:38429 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzo-0004l1-18 for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:54 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:59577 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBza-0004ik-R4 for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202613; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sYejFH5h3P5/PMtT6ZMAnGp2REw2DoONjW4us1r8K8w=; b=DHHyPaozo5uCB0D0nTOeq79o347jmc3crIy95I0JNFn0dO9HiNmY/vRYqO/5juJYRBL/+J zawr6idHjBxRYHc3f0EujqnMHH16hTh2ufH6mwA/TVqlSsIPga3JX1oltyXkJti1nEi0Ps WZmx4mhEliyRv8daUlB9Q6O3uyi2lcz4O072SJHsmGuhs9EoJlBgzGtFdXCtBmBFVDlDIV QcPFuXLW4gEGovDJwc9+4G7w1oVZq6wnNQRvh5dNBvpQ8icPEu9S/hyGvkF8XlAfMy1KqG ftR7oMWpkkui2Lz5CDsGW8K86DTtuxa/9+qysUn+6EfNXUYBd5uv8zjtYiH79A== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id 12086d5d (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:13 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:11 +0200 Message-ID: X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter Sorry this is a massive commit. It's kinda impossible to split it without either completely breaking basic functionality or making a buggy shim layer that's written just to be immediately removed. But anyway, this is the real body of the bootloader subsystem update. One of my favorite new things possible with this is easy generation of disk images using arbitrary bootloaders, including ones that require one or more data/install partitions, such as p-boot or depthcharge! * gnu/build/image.scm (initialize-root-partition): Don't install bootloader here. (make-iso9660-image): Pull in grub.dir instead of a bootcfg. * gnu/build/install.scm (install-boot-config): Delete procedure. * gnu/machine/ssh.scm (deploy-managed-host, roll-back-managed-host): Use new bootloader system. (operating-system)[bootloader]: Use wrap-element sanitizer and support multiple bootloaders. (operating-system-bootcfg): Rename to... (operating-system-bootmeta): ...this. Rewrite to return relevant information instead of calling the config procedure directly. (operating-system-boot-parameters): Support multiple bootloaders. * gnu/system/boot.scm (read-boot-parameters): Support multiple bootloaders. * gnu/system/image.scm (root-partition-index): Delete procedure. (system-disk-image, system-iso9960-image): Support new bootloader system. (system-disk-image)[targets]: New subprocedure. * guix/scripts/system.scm (install, install-bootloader-from-provenance, perform-action): Support multiple bootloaders and work with new bootloader system instead of bootcfgs. (display-system-generation): Support multiple bootloaders. * guix/scripts/system/reconfigure.scm (install-bootloader-program): Rewrite to simply insert each bootloader's installer in the gexp directly, instead of copying bootcfgs. (install-bootloader): Work with new bootloader system. Just in case, add install-bootloader.scm to the gc roots too. Change-Id: I3654d160f7306bb45a78b82ea6b249ff4281f739 --- gnu/build/image.scm | 18 +--- gnu/build/install.scm | 16 +-- gnu/machine/ssh.scm | 66 +++++------- gnu/system.scm | 42 +++----- gnu/system/boot.scm | 3 +- gnu/system/image.scm | 140 +++++++++++++----------- guix/scripts/system.scm | 93 +++++++--------- guix/scripts/system/reconfigure.scm | 158 +++++++++++++--------------- 8 files changed, 241 insertions(+), 295 deletions(-) diff --git a/gnu/build/image.scm b/gnu/build/image.scm index 1b2d4da814..0b4dbc87ac 100644 --- a/gnu/build/image.scm +++ b/gnu/build/image.scm @@ -190,10 +190,6 @@ (define-deprecated/alias initialize-efi32-partition initialize-efi-partition) (define* (initialize-root-partition root #:key - bootcfg - bootcfg-location - bootloader-package - bootloader-installer (copy-closures? #t) (deduplicate? #t) references-graphs @@ -240,18 +236,10 @@ (define* (initialize-root-partition root (unless copy-closures? (delete-file root-store) - (rename-file tmp-store root-store))) - - ;; There's no point installing a bootloader if we do not populate the store. - (when copy-closures? - (when bootloader-installer - (display "installing bootloader...\n") - (bootloader-installer bootloader-package #f root)) - (when bootcfg - (install-boot-config bootcfg bootcfg-location root)))) + (rename-file tmp-store root-store)))) (define* (make-iso9660-image xorriso grub-mkrescue-environment - grub bootcfg system-directory root target + grub grub.dir system-directory root target #:key (volume-id "Guix_image") (volume-uuid #f) register-closures? (references-graphs '()) (compression? #t)) @@ -310,7 +298,7 @@ (define* (make-iso9660-image xorriso grub-mkrescue-environment (apply invoke grub-mkrescue (string-append "--xorriso=" grub-mkrescue-sed.sh) "-o" target - (string-append "boot/grub/grub.cfg=" bootcfg) + (string-append "boot/grub=" grub.dir) root "--" ;; Set all timestamps to 1. diff --git a/gnu/build/install.scm b/gnu/build/install.scm index 0aa227b4d8..6b5435f13c 100644 --- a/gnu/build/install.scm +++ b/gnu/build/install.scm @@ -25,8 +25,7 @@ (define-module (gnu build install) #:use-module (guix build store-copy) #:use-module (srfi srfi-26) #:use-module (ice-9 match) - #:export (install-boot-config - evaluate-populate-directive + #:export (evaluate-populate-directive populate-root-file-system install-database-and-gc-roots populate-single-profile-directory @@ -42,19 +41,6 @@ (define-module (gnu build install) ;;; ;;; Code: -(define (install-boot-config bootcfg bootcfg-location mount-point) - "Atomically copy BOOTCFG into BOOTCFG-LOCATION on the MOUNT-POINT. Note -that the caller must make sure that BOOTCFG is registered as a GC root so -that the fonts, background images, etc. referred to by BOOTCFG are not GC'd." - (let* ((target (string-append mount-point bootcfg-location)) - (pivot (string-append target ".new"))) - (mkdir-p (dirname target)) - - ;; Copy BOOTCFG instead of just symlinking it, because symlinks won't - ;; work when /boot is on a separate partition. Do that atomically. - (copy-file bootcfg pivot) - (rename-file pivot target))) - (define* (evaluate-populate-directive directive target #:key (default-gid 0) diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm index 3a0c5f45c6..c38b63fded 100644 --- a/gnu/machine/ssh.scm +++ b/gnu/machine/ssh.scm @@ -510,18 +510,15 @@ (define (deploy-managed-host machine) (machine-ssh-session machine) (machine-become-command machine))) - (mlet %store-monad ((_ (check-deployment-sanity machine)) - (boot-alternatives (machine->boot-alternatives machine))) + (mlet %store-monad ((_ (check-deployment-sanity machine))) ;; Make sure code that check %CURRENT-SYSTEM, such as ;; %BASE-INITRD-MODULES, gets to see the right value. (parameterize ((%current-system system) (%current-target-system #f)) (let* ((os (machine-operating-system machine)) (eval (cut machine-remote-eval machine <>)) - (menu-entries (map boot-alternative->menu-entry - boot-alternatives)) - (bootloader-configuration (operating-system-bootloader os)) - (bootcfg (operating-system-bootcfg os menu-entries))) + (bootloader-config (operating-system-bootloader os)) + (bootmeta (operating-system-bootmeta os))) (define-syntax-rule (eval/error-handling condition handler ...) ;; Return a wrapper around EVAL such that HANDLER is evaluated if an ;; exception is raised. @@ -553,13 +550,15 @@ (define (deploy-managed-host machine) (inferior-exception-arguments c))) os) - (install-bootloader (eval/error-handling c - (raise (formatted-message - (G_ "\ + (mlet %store-monad + ((boot-alternatives (machine->boot-alternatives machine))) + (apply install-bootloader + (eval/error-handling c + (raise (formatted-message + (G_ "\ failed to install bootloader on '~a':~%~{~s ~}~%") - host - (inferior-exception-arguments c)))) - bootloader-configuration bootcfg))))))))) + host (inferior-exception-arguments c)))) + bootloader-config boot-alternatives bootmeta)))))))))) ;;; @@ -590,32 +589,23 @@ (define (roll-back-managed-host machine) (define roll-back-failure (condition (&message (message (G_ "could not roll-back machine"))))) - (mlet* %store-monad - ((boot-alternatives (machine->boot-alternatives machine)) - (_ -> (when (< (length boot-alternatives) 2) - (raise roll-back-failure))) - (chosen-alternative (second boot-alternatives)) - (parameters (boot-alternative-parameters chosen-alternative)) - (entries -> (list (boot-parameters->menu-entry parameters))) - (locale -> (boot-parameters-locale parameters)) - (crypto-dev -> (boot-parameters-store-crypto-devices parameters)) - (store-dir -> (boot-parameters-store-directory-prefix parameters)) - (old-entries -> (map boot-parameters->menu-entry - (drop boot-alternatives 2))) - (bootloader -> (operating-system-bootloader - (machine-operating-system machine))) - (bootcfg (lower-object - ((bootloader-configuration-file-generator - (bootloader-configuration-bootloader - bootloader)) - bootloader entries - #:locale locale - #:store-crypto-devices crypto-dev - #:store-directory-prefix store-dir - #:old-entries old-entries))) - (remote-result (machine-remote-eval machine remote-exp))) - (when (eqv? 'error remote-result) - (raise roll-back-failure)))) + (mlet %store-monad + ((boot-alternatives (machine->boot-alternatives machine))) + (match boot-alternatives + ((first chosen rest ...) + (mlet %store-monad + ((remote-result (machine-remote-eval machine remote-exp))) + (when (eqv? 'error remote-result) (raise roll-back-failure))) + (let ((os (machine-operating-system machine)) + (crypto-dev (boot-parameters-store-crypto-devices chosen)) + (prefix (boot-parameters-store-directory-prefix chosen))) + (install-bootloader (cute machine-remote-eval machine <>) + (operating-system-bootloader os) + (cons* chosen first rest) + #:locale (boot-parameters-locale chosen) + #:store-crypto-devices crypto-dev + #:store-directory-prefix prefix))) + (_ (raise roll-back-failure))))) ;;; diff --git a/gnu/system.scm b/gnu/system.scm index a3eee5aa24..85e02a9965 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -142,10 +142,11 @@ (define-module (gnu system) operating-system-derivation operating-system-profile - operating-system-bootcfg + operating-system-bootmeta operating-system-etc-directory operating-system-locale-directory operating-system-boot-script + operating-system-boot-parameters operating-system-uuid operating-system-with-gc-roots @@ -196,7 +197,9 @@ (define-record-type* operating-system (default %default-kernel-arguments)) ; list of gexps/strings (hurd operating-system-hurd (default #f)) ; package - (bootloader operating-system-bootloader) ; + (bootloader operating-system-bootloader ; + (default '()) + (sanitize wrap-element)) (label operating-system-label ; string (thunked) (default (operating-system-default-label this-operating-system))) @@ -1195,30 +1198,17 @@ (define (operating-system-store-file-system os) "Return the file system that contains the store of OS." (store-file-system (operating-system-file-systems os))) -(define* (operating-system-bootcfg os #:optional (old-entries '())) - "Return the bootloader configuration file for OS. Use OLD-ENTRIES, -a list of , to populate the \"old entries\" menu." +(define (operating-system-bootmeta os) + "Return operating system information to be passed to the bootloader +installers." (let* ((file-systems (operating-system-file-systems os)) + (store-root (btrfs-store-subvolume-file-name file-systems)) (root-fs (operating-system-root-file-system os)) - (root-device (file-system-device root-fs)) (locale (operating-system-locale os)) - (crypto-devices (operating-system-bootloader-crypto-devices os)) - (params (operating-system-boot-parameters - os root-device - #:system-kernel-arguments? #t)) - (entry (boot-parameters->menu-entry params)) - (bootloader-conf (operating-system-bootloader os))) - - (define generate-config-file - (bootloader-configuration-file-generator - (bootloader-configuration-bootloader bootloader-conf))) - - (generate-config-file bootloader-conf (list entry) - #:old-entries old-entries - #:locale locale - #:store-crypto-devices crypto-devices - #:store-directory-prefix - (btrfs-store-subvolume-file-name file-systems)))) + (crypto-devices (operating-system-bootloader-crypto-devices os))) + (list #:store-crypto-devices crypto-devices + #:store-directory-prefix store-root + #:locale locale))) (define (operating-system-multiboot-modules os) (if (operating-system-hurd os) (hurd-multiboot-modules os) '())) @@ -1282,9 +1272,9 @@ (define* (operating-system-boot-parameters os root-device (file-systems (operating-system-file-systems os)) (crypto-devices (operating-system-bootloader-crypto-devices os)) (locale (operating-system-locale os)) - (bootloader (bootloader-configuration-bootloader - (operating-system-bootloader os))) - (bootloader-name (bootloader-name bootloader)) + (bootloader (map bootloader-configuration-bootloader + (operating-system-bootloader os))) + (bootloader-name (map bootloader-name bootloader)) (label (operating-system-label os)) (multiboot-modules (operating-system-multiboot-modules os))) (boot-parameters diff --git a/gnu/system/boot.scm b/gnu/system/boot.scm index 98fcd2b3a0..2db5c258f0 100644 --- a/gnu/system/boot.scm +++ b/gnu/system/boot.scm @@ -166,7 +166,8 @@ (define (read-boot-parameters port) (bootloader-name (match (assq 'bootloader-name rest) - ((_ args) args) + ((_ (args ...)) args) + ((_ args) (list args)) (#f 'grub))) ; for compatibility reasons. ;; In the past, we would store the directory name of linux instead of diff --git a/gnu/system/image.scm b/gnu/system/image.scm index 8ac91800ad..b58de1db14 100644 --- a/gnu/system/image.scm +++ b/gnu/system/image.scm @@ -44,6 +44,7 @@ (define-module (gnu system image) #:use-module (gnu services base) #:use-module (gnu system) #:use-module (gnu system accounts) + #:use-module (gnu system boot) #:use-module (gnu system file-systems) #:use-module (gnu system linux-container) #:use-module (gnu system uuid) @@ -344,10 +345,6 @@ (define (find-root-partition image) (raise (formatted-message (G_ "image lacks a partition with the 'boot' flag"))))) -(define (root-partition-index image) - "Return the index of the root partition of the given IMAGE." - (1+ (srfi-1:list-index root-partition? (image-partitions image)))) - ;; ;; Disk image. @@ -356,8 +353,8 @@ (define (root-partition-index image) (define* (system-disk-image image #:key (name "disk-image") - bootcfg - bootloader + bootloader-config + bootmeta register-closures? (inputs '())) "Return as a file-like object, the disk-image described by IMAGE. Said @@ -374,6 +371,28 @@ (define* (system-disk-image image (define genimage-name "image") + (define (targets current) + ;; provides list of target overrides for a given CURRENT partition, which + ;; may be #f for the full-disk targets. + + ;; XXX: how we pass paths is v much a hack + (cons (bootloader-target + (type 'disk) + (device (and (not current) (string-append "images/" genimage-name))) + (expected? (->bool current))) + (map (lambda (partition) + (let ((current? (and current (eq? (partition-target partition) + (partition-target current))))) + (bootloader-target + (type (partition-target partition)) + (expected? (not current?)) + (path (and current? "tmp-root")) + (offset #f) + (file-system (partition-file-system partition)) + (label (partition-label partition)) + (uuid (partition-uuid partition))))) + (filter partition-target (image-partitions image))))) + (define (image->genimage-cfg image) ;; Return as a file-like object, the genimage configuration file ;; describing the given IMAGE. @@ -454,7 +473,8 @@ (define* (system-disk-image image (list dosfstools fakeroot mtools)) (else '()))) - (image-root "tmp-root")) + (image-root (string-append (getcwd) "/tmp-root")) + (copy-closures? (not #$(image-shared-store? image)))) (sql-schema #$schema) (set-path-environment-variable "PATH" '("bin" "sbin") inputs) @@ -470,18 +490,13 @@ (define* (system-disk-image image (initializer image-root #:references-graphs '#$graph #:deduplicate? #f - #:copy-closures? (not - #$(image-shared-store? image)) - #:system-directory #$os - #:grub-efi #+grub-efi - #:grub-efi32 #+grub-efi32 - #:bootloader-package - #+(bootloader-package bootloader) - #:bootloader-installer - #+(bootloader-installer bootloader) - #:bootcfg #$bootcfg - #:bootcfg-location - #$(bootloader-configuration-file bootloader)) + #:copy-closures? copy-closures? + #:system-directory #$os) + ;; no point installing a bootloader if we don't populate store + (when copy-closures? + ;; root-offset isn't necessary - we override 'root + #$(bootloader-configurations->gexp bootloader-config bootmeta + #:overrides (targets partition))) (make-partition-image #$(partition->gexp partition) #$output image-root))))) @@ -528,14 +543,6 @@ (define* (system-disk-image image (image-partition-table-type image))) (else ""))) - (when (and (memq (bootloader-name bootloader) - '(grub-efi grub-efi32 grub-efi-removable-bootloader)) - (not - (gpt-image? image))) - (raise - (formatted-message - (G_ "EFI bootloader required with GPT partitioning")))) - (let* ((format (image-format image)) (image-type (format->image-type format)) (image-type-options (genimage-type-options image-type image)) @@ -546,13 +553,15 @@ (define* (system-disk-image image (let ((format (@ (ice-9 format) format))) (call-with-output-file #$output (lambda (port) - (format port - "\ + (format port "\ image ~a { ~/~a {~a} ~{~a~^~%~} -}~%" #$genimage-name #$image-type #$image-type-options - (list #$@partitions-config)))))))) +}~%" + #$genimage-name + #$image-type + #$image-type-options + (list #$@partitions-config)))))))) (computed-file "genimage.cfg" builder))) (let* ((image-name (image-name image)) @@ -564,17 +573,13 @@ (define* (system-disk-image image (builder (with-imported-modules* (let ((inputs '#+(list genimage coreutils findutils qemu-minimal)) - (bootloader-installer - #+(bootloader-disk-image-installer bootloader)) (out-image (string-append "images/" #$genimage-name))) (set-path-environment-variable "PATH" '("bin" "sbin") inputs) (genimage #$(image->genimage-cfg image)) - ;; Install the bootloader directly on the disk-image. - (when bootloader-installer - (bootloader-installer - #+(bootloader-package bootloader) - #$(root-partition-index image) - out-image)) + ;; Don't install bootloader unless installing store. + (unless #$(image-shared-store? image) + #$(bootloader-configurations->gexp bootloader-config bootmeta + #:overrides (targets #f))) (convert-disk-image out-image '#$format #$output))))) (computed-file name builder #:local-build? #f ;too I/O-intensive @@ -594,8 +599,8 @@ (define (has-guix-service-type? os) (define* (system-iso9660-image image #:key (name "image.iso") - bootcfg - bootloader + bootloader-config + bootmeta register-closures? (inputs '()) (grub-mkrescue-environment '())) @@ -615,7 +620,6 @@ (define* (system-iso9660-image image (uuid-bytevector (partition-uuid partition))))) (let* ((os (image-operating-system image)) - (bootloader (bootloader-package bootloader)) (compression? (image-compression? image)) (substitutable? (image-substitutable? image)) (schema (local-file (search-path %load-path @@ -623,6 +627,14 @@ (define* (system-iso9660-image image (graph (match inputs (((names . _) ...) names))) + (config (bootloader-configuration + (bootloader grub-bootloader) + (targets (list (bootloader-target + (type 'root) + (path "tmp-root")) + (bootloader-target + (type 'install) + (path "boot/grub")))))) (builder (with-imported-modules* (let* ((inputs '#$(list parted e2fsprogs dosfstools xorriso @@ -643,10 +655,12 @@ (define* (system-iso9660-image image #:references-graphs '#$graph #:deduplicate? #f #:system-directory #$os) + (make-iso9660-image #$xorriso '#$grub-mkrescue-environment - #$bootloader - #$bootcfg + #$grub-hybrid + #$(apply grub.dir grub-hybrid + #:bootloader-config config bootmeta) #$os image-root #$output @@ -948,11 +962,7 @@ (define (operating-system-for-image image) file-systems #:volatile-root? volatile-root? rest))) - (bootloader (if (eq? format 'iso9660) - (bootloader-configuration - (inherit - (operating-system-bootloader base-os)) - (bootloader grub-mkrescue-bootloader)) + (bootloader (if (eq? format 'iso9660) '() (operating-system-bootloader base-os))) (file-systems (cons (file-system (mount-point "/") @@ -1001,17 +1011,28 @@ (define* (system-image image) (image* (image-with-os* image os)) (image-format (image-format image)) (register-closures? (has-guix-service-type? os)) - (bootcfg (operating-system-bootcfg os)) - (bootloader (bootloader-configuration-bootloader - (operating-system-bootloader os)))) + ;; Force removable: images don't have efivarfs. + (bootloader-config (map (lambda (c) (bootloader-configuration + (inherit c) + (efi-removable? #t))) + (operating-system-bootloader os))) + (alt (boot-alternative + (generation 1) + (system-path "/var/guix/profiles/system-1-link") + (epoch 0) + (parameters (operating-system-boot-parameters os + (partition-uuid (find-root-partition image*)) + #:system-kernel-arguments? #t)))) + (bootmeta (cons* #:current-boot-alternative alt + #:old-boot-alternatives '() + (operating-system-bootmeta os)))) (cond ((memq image-format '(disk-image compressed-qcow2)) (system-disk-image image* - #:bootcfg bootcfg - #:bootloader bootloader + #:bootloader-config bootloader-config + #:bootmeta bootmeta #:register-closures? register-closures? - #:inputs `(("system" ,os) - ("bootcfg" ,bootcfg)))) + #:inputs `(("system" ,os)))) ((memq image-format '(docker)) (system-docker-image image*)) ((memq image-format '(tarball)) @@ -1021,11 +1042,10 @@ (define* (system-image image) ((memq image-format '(iso9660)) (system-iso9660-image image* - #:bootcfg bootcfg - #:bootloader bootloader + #:bootloader-config bootloader-config + #:bootmeta bootmeta #:register-closures? register-closures? - #:inputs `(("system" ,os) - ("bootcfg" ,bootcfg)) + #:inputs `(("system" ,os)) ;; Make sure to use a mode that does no imply ;; HFS+ tree creation that may fail with: ;; diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 6b6bb46975..306c7ce6de 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -211,7 +211,7 @@ (define* (copy-closure item target (define* (install os-drv target #:key (log-port (current-output-port)) - install-bootloader? bootloader bootcfg) + install-bootloader? bootloaders bootmeta) "Copy the closure of BOOTCFG, which includes the output of OS-DRV, to directory TARGET. TARGET must be an absolute directory name since that's what 'register-path' expects. @@ -249,24 +249,25 @@ (define* (install os-drv target (chmod target #o755) (let ((os-dir (derivation->output-path os-drv)) (format (lift format %store-monad)) - (populate (lift2 populate-root-file-system %store-monad))) - - (mlet %store-monad ((bootcfg (lower-object bootcfg))) - (mbegin %store-monad - ;; Copy the closure of BOOTCFG, which includes OS-DIR, - ;; eventual background image and so on. - (maybe-copy (derivation->output-path bootcfg)) - - ;; Create a bunch of additional files. - (format log-port "populating '~a'...~%" target) - (populate os-dir target) - - (mwhen install-bootloader? - (install-bootloader local-eval bootloader bootcfg - #:target target) - (return - (info (G_ "bootloader successfully installed on~{ ~a~}~%") - (bootloader-configuration-targets bootloader)))))))) + (populate (lift2 populate-root-file-system %store-monad)) + (profile (string-append target "/var/guix/profiles/system"))) + (mbegin %store-monad + ;; Create a bunch of system files. + (format log-port "populating '~a'...~%" target) + (populate os-dir target) + ;; Copy the bootloader's closure, which includes OS-DIR, + ;; eventual background image and so on. + (mlet* %store-monad + ((alt -> (generation->boot-alternative profile 1)) + (inst (apply install-bootloader local-eval bootloaders + (list alt) #:dry-run? (not install-bootloader?) + #:root-offset target bootmeta))) + (maybe-copy (derivation->output-path inst))) + (mwhen install-bootloader? + (return + (info (G_ "bootloader successfully installed on~{ ~a~}~%") + (flat-map bootloader-configuration-targets + bootloaders))))))) ;;; @@ -388,18 +389,12 @@ (define (install-bootloader-from-os store number os) for system profile generation NUMBER, with store STORE." (let* ((os (read-operating-system os)) (bootloader-config (operating-system-bootloader os)) + (new (generation->boot-alternative %system-profile number)) (numbers (generation-numbers %system-profile)) (numbers (delv number (reverse numbers))) - (old (profile->boot-alternatives %system-profile numbers)) - (bootcfg (operating-system-bootcfg os old))) - (run-with-store store - (mlet* %store-monad ((bootcfg (lower-object bootcfg)) - (drvs -> (list bootcfg))) - (mbegin %store-monad - (built-derivations drvs) - ;; Only install bootloader configuration file. - (install-bootloader local-eval bootloader-config bootcfg - #:run-installer? #f)))))) + (old (profile->boot-alternatives %system-profile numbers))) + (apply install-bootloader local-eval (operating-system-bootloader os) + (cons new old) (operating-system-bootmeta os)))) (define (install-bootloader-from-provenance store number) "Re-install an old bootloader using provenance data for system profile @@ -494,7 +489,8 @@ (define* (display-system-generation number (format #t (G_ " canonical file name: ~a~%") (readlink* generation)) ;; TRANSLATORS: Please preserve the two-space indentation. (format #t (G_ " label: ~a~%") label) - (format #t (G_ " bootloader: ~a~%") bootloader-name) + (format #t (G_ " bootloader: ~a~%") + (string-join (map symbol->string bootloader-name))) ;; TRANSLATORS: The '~[', '~;', and '~]' sequences in this string must ;; be preserved. They denote conditionals, such that the result will @@ -780,17 +776,11 @@ (define* (perform-action action image (define os (image-operating-system image)) - (define bootloader + (define bootloaders (operating-system-bootloader os)) - (define bootcfg - (and (memq action '(init reconfigure)) - (operating-system-bootcfg - os - (if (eq? action 'init) - '() - (map boot-alternative->menu-entry - (profile->boot-alternatives)))))) + (define bootmeta + (operating-system-bootmeta os)) (when (eq? action 'reconfigure) (maybe-suggest-running-guix-pull) @@ -821,10 +811,7 @@ (define* (perform-action action image ;; For 'init' and 'reconfigure', always build BOOTCFG, even if ;; --no-bootloader is passed, because we then use it as a GC root. ;; See . - (drvs (mapm/accumulate-builds lower-object - (if (memq action '(init reconfigure)) - (list sys bootcfg) - (list sys)))) + (drvs (mapm/accumulate-builds lower-object (list sys))) (% (if derivations-only? (return (for-each (compose println derivation-file-name) drvs)) @@ -842,12 +829,16 @@ (define* (perform-action action image (format #t (G_ "activating system...~%")) (mbegin %store-monad (switch-to-system local-eval os) + (apply install-bootloader local-eval bootloaders + (profile->boot-alternatives) + #:dry-run? (not install-bootloader?) + (if target (cons* #:root-offset target bootmeta) bootmeta)) (mwhen install-bootloader? - (install-bootloader local-eval bootloader bootcfg - #:target (or target "/")) (return (info (G_ "bootloader successfully installed on '~a'~%") - (bootloader-configuration-targets bootloader)))) + (map bootloader-target-path + (flat-map bootloader-configuration-targets + bootloaders))))) (with-shepherd-error-handling (upgrade-shepherd-services local-eval os) (return (format #t (G_ "\ @@ -861,8 +852,8 @@ (define* (perform-action action image target) (install sys (canonicalize-path target) #:install-bootloader? install-bootloader? - #:bootloader bootloader - #:bootcfg bootcfg)) + #:bootloaders bootloaders + #:bootmeta bootmeta)) (else ;; All we had to do was to build SYS and maybe register an ;; indirect GC root. @@ -1258,11 +1249,7 @@ (define (process-action action args opts) (G_ "image lacks an operating-system"))))) (target-file (match args ((first second) second) - (_ #f))) - (bootloader-targets - (and bootloader? - (bootloader-configuration-targets - (operating-system-bootloader os))))) + (_ #f)))) (define (graph-backend) (lookup-backend (assoc-ref opts 'graph-backend))) diff --git a/guix/scripts/system/reconfigure.scm b/guix/scripts/system/reconfigure.scm index 604ba08fee..9b92198076 100644 --- a/guix/scripts/system/reconfigure.scm +++ b/guix/scripts/system/reconfigure.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2019 Christopher Baines ;;; Copyright © 2019 Jakob L. Kreuze ;;; Copyright © 2022 Arun Isaac +;;; Copyright © 2024 Lilah Tascheter ;;; ;;; This file is part of GNU Guix. ;;; @@ -209,101 +210,84 @@ (define* (upgrade-shepherd-services eval os) ;;; Bootloader configuration. ;;; -(define (install-bootloader-program installer disk-installer - bootloader-package bootcfg - bootcfg-file devices target) +(define (install-bootloader-program configs offset chosen-alt old-alts locale + store-crypto-devices store-directory-prefix) "Return an executable store item that, upon being evaluated, will install BOOTCFG to BOOTCFG-FILE, a target file name, on DEVICES, a list of file system devices, at TARGET, a mount point, and subsequently run INSTALLER from BOOTLOADER-PACKAGE." (program-file - "install-bootloader.scm" - (with-extensions (list guile-gcrypt) - (with-imported-modules `(,@(source-module-closure - '((gnu build bootloader) - (gnu build install) - (guix store) - (guix utils)) - #:select? not-config?) - ((guix config) => ,(make-config.scm))) - #~(begin - (use-modules (gnu build bootloader) - (gnu build install) - (guix build utils) - (guix store) - (guix utils) - (ice-9 binary-ports) - (ice-9 match) - (srfi srfi-34) - (srfi srfi-35)) - - (let* ((gc-root (string-append #$target %gc-roots-directory "/bootcfg")) - (new-gc-root (string-append gc-root ".new"))) - ;; #$bootcfg has dependencies. - ;; The bootloader magically loads the configuration from - ;; (string-append #$target #$bootcfg-file) (for example - ;; "/boot/grub/grub.cfg"). - ;; If we didn't do something special, the garbage collector - ;; would remove the dependencies of #$bootcfg. - ;; Register #$bootcfg as a GC root. - ;; Preserve the previous activation's garbage collector root - ;; until the bootloader installer has run, so that a failure in - ;; the bootloader's installer script doesn't leave the user with - ;; a broken installation. - (switch-symlinks new-gc-root #$bootcfg) - (install-boot-config #$bootcfg #$bootcfg-file #$target) - (when (or #$installer #$disk-installer) - (catch #t - (lambda () - ;; The bootloader might not support installation on a - ;; mounted directory using the BOOTLOADER-INSTALLER - ;; procedure. In that case, fallback to installing the - ;; bootloader directly on DEVICES using the - ;; BOOTLOADER-DISK-IMAGE-INSTALLER procedure. - (if #$installer - (for-each (lambda (device) - (#$installer #$bootloader-package device - #$target)) - '#$devices) - (for-each (lambda (device) - (#$disk-installer #$bootloader-package - 0 device)) - '#$devices))) - (lambda args - (delete-file new-gc-root) - (match args - (('%exception exception) ;Guile 3 SRFI-34 or similar - (raise-exception exception)) - ((key . args) - (apply throw key args)))))) - ;; We are sure that the installation of the bootloader - ;; succeeded, so we can replace the old GC root by the new - ;; GC root now. - (rename-file new-gc-root gc-root))))))) + "install-bootloader.scm" + ;; three sources of boot entries: bootloader-configuration-menu-entries, + ;; current-boot-alternative, and old-boot-alternatives. + (let ((args (list #:current-boot-alternative chosen-alt + #:old-boot-alternatives old-alts + #:locale locale + #:store-directory-prefix store-directory-prefix + #:store-crypto-devices store-crypto-devices))) + (with-extensions (list guile-gcrypt) + (with-imported-modules + `(,@(source-module-closure '((gnu build bootloader) + (gnu build install) + (guix store) + (guix utils)) + #:select? not-config?) + ((guix config) => ,(make-config.scm))) + #~(begin + (use-modules (gnu build bootloader) + (gnu build install) + (guix build utils) + (guix store) + (guix utils) + (ice-9 binary-ports) + (ice-9 match) + (srfi srfi-34) + (srfi srfi-35)) + ;; bootloader-installer is passed an additional #:target argument + ;; denoting the specific target currently being installed to. + ;; bootloaders should determine when to fully reinstall themselves. + #$(bootloader-configurations->gexp configs args + #:root-offset offset))))))) -(define* (install-bootloader eval configuration bootcfg +(define* (install-bootloader eval configs alts #:key - (run-installer? #t) - (target "/")) + store-crypto-devices store-directory-prefix + (root-offset "/") dry-run? locale) "Using EVAL, a monadic procedure taking a single G-Expression as an argument, -configure the bootloader on TARGET such that OS will be booted by default and -additional configurations specified by MENU-ENTRIES can be selected." - (let* ((bootloader (bootloader-configuration-bootloader configuration)) - (installer (and run-installer? - (bootloader-installer bootloader))) - (disk-installer (and run-installer? - (bootloader-disk-image-installer bootloader))) - (package (bootloader-package bootloader)) - (devices (bootloader-configuration-targets configuration)) - (bootcfg-file (bootloader-configuration-file bootloader))) - (eval #~(parameterize ((current-warning-port (%make-void-port "w"))) - (primitive-load #$(install-bootloader-program installer - disk-installer - package - bootcfg - bootcfg-file - devices - target)))))) +configure the bootloader with bootloader-configuration CONFIG such that +ALTS may be selected, with the first element being the default. If QUICK? only +the bootloader config is reinstalled. Returns the config installer drv." + (mlet* %store-monad + ((program (lower-object + (install-bootloader-program configs root-offset + (car alts) (cdr alts) locale + store-crypto-devices store-directory-prefix)))) + (mbegin %store-monad + (eval + (with-imported-modules `(,@(source-module-closure '((guix build utils) + (guix store)) + #:select? not-config?) + ((guix config) => ,(make-config.scm))) + #~(begin + (use-modules (guix build utils) (guix store)) + (parameterize ((current-warning-port (%make-void-port "w"))) + (let* ((gc-root (string-append + #$root-offset %gc-roots-directory "/bootcfg")) + (new-gc-root (string-append gc-root ".new"))) + ;; since the installers are gexps directly included, we add + ;; the installer runner as a gc root. this should make sure + ;; no bootloader files get gc'd. only remove the old one on + ;; success. + ;; XXX: is this still necessary? + (switch-symlinks new-gc-root #$program) + (dynamic-wind (const #t) + (lambda () + (unless #$dry-run? (primitive-load #$program)) + (rename-file new-gc-root gc-root)) + (lambda () ; delete new root if failed + (when (file-exists? new-gc-root) + (delete-file new-gc-root))))))))) + (return program)))) ;;; From patchwork Tue Sep 24 18:29:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31389 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 05E4B27BBEA; Tue, 24 Sep 2024 21:19:33 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 5D3DA27BBE2 for ; Tue, 24 Sep 2024 21:19:32 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stBze-000471-9n; Tue, 24 Sep 2024 16:18:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stBzc-0003zN-Qj for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:40 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stBzc-0002jw-Gz for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=QteUtgaSNOJNx+iQfdWcFfOTpE489gZml7BFAYdwl1Y=; b=OiNYr+hVNz/cK+4TUpHjf2N7dIVsM6TiPIJHNAkfxCn6Hwz1cwBabvrF/1Ylh1130zWT093ciIAS4yOo9qFDL3yM5m+R+TH1peJFYbgD2HuOQXsZ6wi7/giXqwC3BIUItyZmSROsFMKVgV87h5O0gtoSWf5W6MTp1mgPDJ0wOEB9V764uEMAUETjcrk7klRsNWgn0R9lEFsF4cfNeneEHlW0fKj6KXzXhX0I3/UIuOvcsgsoEDyhqibAXdn8YxLNo/GaGZIMhUcM1CbfcUoHCv9/m69RX+LJBhJnNnMsYT0+0IVu7seqe6iPDZOJ5kVQasI/vQAS+Y03qrNjN+hVNQ==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stC01-0004mH-7Q for guix-patches@gnu.org; Tue, 24 Sep 2024 16:19:05 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 05/12] gnu: system: image: Reduce subprocedure indentation. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:19:05 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720913118287 (code B ref 72457); Tue, 24 Sep 2024 20:19:05 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:18:51 +0000 Received: from localhost ([127.0.0.1]:38425 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzm-0004km-PC for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:51 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:39007 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBza-0004iX-U8 for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202614; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QteUtgaSNOJNx+iQfdWcFfOTpE489gZml7BFAYdwl1Y=; b=kqjqF31uQB/Kq9IxRdskOBCTOkJ7zMkQVz5EFVYVcwuxMZxIFxlTSI3+FijuQxlUj1SIBL 4ZA+bhtgbgE6EPUmJGZegjIWDozQi5Vwdjk+sSTUHiX4/qPnWZYDN1W6b/SlY2Hnlt2JPD TGNZyVwC8K2xuxZuwqvZyNstVVKb8C7XfGMPvBjW7+rJ3qCR5Z/CEVM2qZ8pkSjC0P1dzi 8K9xSkqWaDqGDWtL0Wk59FNMAKNyrgpYuvssevLlImhQkHU6x7ISaFRJziWk925ygY16CT dazYZexyCLpPHX1vS6pvSCilN7KsqGNkQic0FSrg8HmVewqCL+MmEg4TRr1HuA== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id aba01f88 (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO) for <72457@debbugs.gnu.org>; Tue, 24 Sep 2024 18:30:14 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:12 +0200 Message-ID: X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches * gnu/system/image.scm (system-disk-image): Reduce indentation. Change-Id: I9cf59d3a61d0c6e7e90009e62661f74f774f090a --- gnu/system/image.scm | 115 ++++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 56 deletions(-) diff --git a/gnu/system/image.scm b/gnu/system/image.scm index b58de1db14..6201b36334 100644 --- a/gnu/system/image.scm +++ b/gnu/system/image.scm @@ -448,63 +448,66 @@ (define* (system-disk-image image (format #f (G_ "unsupported partition type: ~a") file-system))))))))) + (define (image-builder partition) + "A directory, filled by calling the PARTITION initializer +procedure, is first created within the store. Then, an image of this +directory is created using tools such as 'mke2fs' or 'mkdosfs', +depending on the partition file-system type." + (let ((os (image-operating-system image)) + (schema (local-file (search-path %load-path + "guix/store/schema.sql"))) + (graph (match inputs + (((names . _) ...) + names))) + (type (partition-file-system partition))) + (with-imported-modules* + (let ((initializer (or #$(partition-initializer partition) + initialize-root-partition)) + (inputs '#+(cond + ((string-prefix? "ext" type) + (list e2fsprogs fakeroot)) + ((or (string=? type "vfat") + (string-prefix? "fat" type)) + (list dosfstools fakeroot mtools)) + (else + '()))) + (image-root (string-append (getcwd) "/tmp-root")) + (copy-closures? (not #$(image-shared-store? image)))) + (sql-schema #$schema) + + (set-path-environment-variable "PATH" '("bin" "sbin") inputs) + + ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be + ;; decoded. + (setenv "GUIX_LOCPATH" + #+(file-append (libc-utf8-locales-for-target + (%current-system)) + "/lib/locale")) + (setlocale LC_ALL "en_US.utf8") + + (initializer image-root + #:references-graphs '#$graph + #:deduplicate? #f + #:copy-closures? copy-closures? + #:system-directory #$os) + ;; There's no point installing a bootloader if we do not + ;; populate the store. + (when copy-closures? + ;; Root-offset isn't necessary: we override 'root. + #$(bootloader-configurations->gexp + bootloader-config bootmeta + #:overrides (targets partition))) + (make-partition-image #$(partition->gexp partition) + #$output + image-root))))) + (define (partition-image partition) - ;; Return as a file-like object, an image of the given PARTITION. A - ;; directory, filled by calling the PARTITION initializer procedure, is - ;; first created within the store. Then, an image of this directory is - ;; created using tools such as 'mke2fs' or 'mkdosfs', depending on the - ;; partition file-system type. - (let* ((os (image-operating-system image)) - (schema (local-file (search-path %load-path - "guix/store/schema.sql"))) - (graph (match inputs - (((names . _) ...) - names))) - (type (partition-file-system partition)) - (image-builder - (with-imported-modules* - (let ((initializer (or #$(partition-initializer partition) - initialize-root-partition)) - (inputs '#+(cond - ((string-prefix? "ext" type) - (list e2fsprogs fakeroot)) - ((or (string=? type "vfat") - (string-prefix? "fat" type)) - (list dosfstools fakeroot mtools)) - (else - '()))) - (image-root (string-append (getcwd) "/tmp-root")) - (copy-closures? (not #$(image-shared-store? image)))) - (sql-schema #$schema) - - (set-path-environment-variable "PATH" '("bin" "sbin") inputs) - - ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be - ;; decoded. - (setenv "GUIX_LOCPATH" - #+(file-append (libc-utf8-locales-for-target - (%current-system)) - "/lib/locale")) - (setlocale LC_ALL "en_US.utf8") - - (initializer image-root - #:references-graphs '#$graph - #:deduplicate? #f - #:copy-closures? copy-closures? - #:system-directory #$os) - ;; no point installing a bootloader if we don't populate store - (when copy-closures? - ;; root-offset isn't necessary - we override 'root - #$(bootloader-configurations->gexp bootloader-config bootmeta - #:overrides (targets partition))) - (make-partition-image #$(partition->gexp partition) - #$output - image-root))))) - (computed-file "partition.img" image-builder - ;; Allow offloading so that this I/O-intensive process - ;; doesn't run on the build farm's head node. - #:local-build? #f - #:options `(#:references-graphs ,inputs)))) + "Return as a file-like object, an image of the given PARTITION." + (computed-file "partition.img" (image-builder partition) + ;; Allow offloading so that this I/O-intensive process + ;; doesn't run on the build farm's head node. + #:local-build? #f + #:options `(#:references-graphs ,inputs))) (define (gpt-image? image) (eq? 'gpt (image-partition-table-type image))) From patchwork Tue Sep 24 18:29:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31394 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id CC1A327BBE9; Tue, 24 Sep 2024 21:20:18 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 25AF227BBE2 for ; Tue, 24 Sep 2024 21:20:17 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stBzi-0004Me-07; Tue, 24 Sep 2024 16:18:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stBzf-0004E0-RF for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:44 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stBzf-0002kQ-69; Tue, 24 Sep 2024 16:18:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=ql7LpEx/yiBU8LYaIddxZeVJMa97eztAI5cl1rBQzYs=; b=oe23a461Gizf1+yJpPyev8jAoiizGyfc99qgRogBAFZfdgsupBdb/o0gr8qApqSkEr9bljtkVckZ8tMwdp0J9qFgkdOWiBXU0mOb4QnHdLSbB8n8M3sf9FmXqPLcsEUvzbkBLuCC/Z1kW79r2H1KnKETimzpaJqc0DKtsZ9vjO1mPJvX1O3efXjnJFLOVwtv9HMOnh9IYTLooZr+JXkJpqMnpmjrVBAZ0e2xIZOkbBfvinqN/YukLBTamhRkc1ggpd8vdKm0nBe+6eLiKQzJSyrlx2KZxcKDi1K7vpgZzTQkwFe8Y2GoA039WV6z18DYdwSUuK166Rw+4j7jArV0vA==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stC03-0004mo-2p; Tue, 24 Sep 2024 16:19:07 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 06/12] gnu: bootloader: depthcharge: Rewrite completely. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: pelzflorian@pelzflorian.de, lilah@lunabee.space, ludo@gnu.org, maxim.cournoyer@gmail.com, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:19:07 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Florian Pelz , Lilah Tascheter , Ludovic =?utf-8?q?Court=C3=A8s?= , Maxim Cournoyer X-Debbugs-Original-Xcc: Florian Pelz , Lilah Tascheter , Ludovic =?utf-8?q?Court=C3=A8s?= , Maxim Cournoyer Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720913418312 (code B ref 72457); Tue, 24 Sep 2024 20:19:07 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:18:54 +0000 Received: from localhost ([127.0.0.1]:38431 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzq-0004lC-4F for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:54 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:48191 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzd-0004j7-Q6 for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202614; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ql7LpEx/yiBU8LYaIddxZeVJMa97eztAI5cl1rBQzYs=; b=QVU5yzeh9xbMMcpp/rnTixKQzzl1WiXRkWMJI+2FADoNr5jDYaLu4sJFAkQ/BucQAtkH1p nfN69mRA8qSsx2pFNAvYOHoZub3hGBjdQ3GotklrV0L6zEThJ/0+muflK2+eOagugEB4tP dVKHIrW4vQ7ui4LzpaQPZXnAjFp5pSoQxesciX/WQJdM4e/T5vxlcTq8pEejU0lEaW88CZ 3lJI7GDrni9uslJItCEi/zendj6No9JKTvI2qeMMvpiiWcU3dkw1XwBHmpKZyBxMG5WWPB EofUHyHO2Y+fQKpi/LyYljX9v99KMzuHqTv+SUaGYQ1d/KEhkxjkz1WFGdorNg== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id ec73d189 (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:14 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:13 +0200 Message-ID: <2e3abe65f5bc59efc50675ebb87f438a7a081325.1727201267.git.herman@rimm.ee> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter * gnu/bootloader/depthcharge (install-depthcharge): Add procedure. (signed-kernel, depthcharge-configuration-file): Remove procedures. (depthcharge-veyron-speedy-bootloader): Update depthcharge-bootloader. (depthcharge-bootloader): Deprecate variable. * doc/guix.texi (Bootloader Configuration): Document bootloader. Change-Id: I3654d160f7306bb45a78b82ea6b249ff4281f739 --- doc/guix.texi | 6 ++ gnu/bootloader/depthcharge.scm | 154 ++++++++++++++++----------------- 2 files changed, 81 insertions(+), 79 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index a70b89957a..4168310135 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -42448,6 +42448,12 @@ Bootloader Configuration of bootloaders for a wide range of ARM and AArch64 systems, using the @uref{https://www.denx.de/wiki/U-Boot/, U-Boot bootloader}. +@itemize +@vindex depthcharge-veyron-speedy-bootloader +@item @code{depthcharge-veyron-speedy-bootloader} +For the Asus C201. Requires a @code{'part} target, denoting the partition to +install the kernel blob as a @code{device}, @code{label}, or @code{uuid}. + @vindex grub-bootloader @code{grub-bootloader} allows you to boot in particular Intel-based machines in ``legacy'' BIOS mode. diff --git a/gnu/bootloader/depthcharge.scm b/gnu/bootloader/depthcharge.scm index 0a50374bd9..b727874a40 100644 --- a/gnu/bootloader/depthcharge.scm +++ b/gnu/bootloader/depthcharge.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2019 Timothy Sample +;;; Copyright © 2024 Lilah Tascheter ;;; ;;; This file is part of GNU Guix. ;;; @@ -17,92 +18,87 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu bootloader depthcharge) - #:use-module (gnu bootloader extlinux) #:use-module (gnu bootloader) #:use-module (gnu packages bootloaders) + #:use-module (gnu system boot) #:use-module (guix gexp) + #:use-module (guix deprecation) + #:use-module (guix diagnostics) + #:use-module (guix i18n) + #:use-module (guix records) #:use-module (guix utils) - #:use-module (ice-9 match) - #:export (depthcharge-bootloader)) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-35) + #:export (depthcharge-veyron-speedy-bootloader + depthcharge-bootloader)) -(define (signed-kernel kernel kernel-arguments initrd) - (define builder - (with-imported-modules '((guix build utils)) - #~(begin - (use-modules (guix build utils) - (ice-9 binary-ports) - (rnrs bytevectors)) - (set-path-environment-variable "PATH" '("bin") (list #$dtc)) +(define* (install-depthcharge arch dtb + #:key bootloader-config current-boot-alternative + #:allow-other-keys) + (when (not (null? (bootloader-configuration-menu-entries bootloader-config))) + (raise (formatted-message + (G_ "extra menu-entries are not supported for depthcharge!")))) + (with-targets (bootloader-configuration-targets bootloader-config) + ;; use 'part instead of 'disk, cause we write an image directly into a + ;; partition instead of the extra-partition disk space + (('part => (disk :device)) + (match-menu-entry + (boot-alternative->menu-entry current-boot-alternative) + (linux linux-arguments initrd) + #~(begin + (use-modules (ice-9 binary-ports) (rnrs bytevectors)) + (set-path-environment-variable "PATH" '("bin") (list #$dtc)) - ;; TODO: These files have to be writable, so we copy them. - ;; This can probably be fixed by using a ".its" file, just - ;; be careful not to break initrd loading. - (copy-file #$kernel "zImage") - (chmod "zImage" #o755) - (copy-file (string-append (dirname #$kernel) "/lib/dtbs/" - "rk3288-veyron-speedy.dtb") - "rk3288-veyron-speedy.dtb") - (chmod "rk3288-veyron-speedy.dtb" #o644) - (copy-file #$initrd "initrd") - (chmod "initrd" #o644) + ;; TODO: These files have to be writable, so we copy them. + ;; This can probably be fixed by using a ".its" file, just + ;; be careful not to break initrd loading. + (copy-file #$linux "zImage") + (chmod "zImage" #o755) + (copy-file (string-append (dirname #$linux) "/lib/dtbs/" #$dtb) + "dtb") + (chmod "dtb" #o644) + (copy-file #$initrd "initrd") + (chmod "initrd" #o644) - (invoke (string-append #$u-boot-tools "/bin/mkimage") - "-D" "-I dts -O dtb -p 2048" - "-f" "auto" - "-A" "arm" - "-O" "linux" - "-T" "kernel" - "-C" "None" - "-d" "zImage" - "-a" "0" - "-b" "rk3288-veyron-speedy.dtb" - "-i" "initrd" - "image.itb") - (call-with-output-file "bootloader.bin" - (lambda (port) - (put-bytevector port (make-bytevector 512 0)))) - (with-output-to-file "kernel-arguments" - (lambda () - (display (string-join (list #$@kernel-arguments))))) - (invoke (string-append #$vboot-utils "/bin/vbutil_kernel") - "--pack" #$output - "--version" "1" - "--vmlinuz" "image.itb" - "--arch" "arm" - "--keyblock" (string-append #$vboot-utils - "/share/vboot-utils/devkeys/" - "kernel.keyblock") - "--signprivate" (string-append #$vboot-utils - "/share/vboot-utils/devkeys/" - "kernel_data_key.vbprivk") - "--config" "kernel-arguments" - "--bootloader" "bootloader.bin")))) - (computed-file "vmlinux.kpart" builder)) + (invoke #+(file-append u-boot-tools "/bin/mkimage") + "-D" "-I dts -O dtb -p 2048" + "-f" "auto" ; format + "-A" #$arch ; architecture + "-O" "linux" ; os + "-T" "kernel" ; image type + "-C" "None" ; compression + "-d" "zImage" ; image data + "-a" "0" ; load address (hex) + "-b" "dtb" ; dtb for device + "-i" "initrd" ; initrd + "image.itb") + (call-with-output-file "bootloader.bin" + (lambda (port) + (put-bytevector port (make-bytevector 512 0)))) + (call-with-output-file "kernel-arguments" + (lambda (port) + (display (string-join (list #$@linux-arguments)) port))) + (invoke #+(file-append vboot-utils "/bin/vbutil_kernel") + "--version" "1" + "--vmlinuz" "image.itb" + "--arch" #$arch + "--keyblock" + #$(file-append vboot-utils + "/share/vboot-utils/devkeys/kernel.keyblock") + "--signprivate" + #$(file-append vboot-utils + "/share/vboot-utils/devkeys/kernel_data_key.vbprivk") + "--config" "kernel-arguments" + "--pack" "vmlinux.kpart") + (write-file-on-device "vmlinux.kpart" + (stat:size (stat "vmlinux.kpart")) + #$disk 0)))))) -(define* (depthcharge-configuration-file config entries - #:key - (system (%current-system)) - (old-entries '()) - #:allow-other-keys) - (match entries - ((entry) - (let ((kernel (menu-entry-linux entry)) - (kernel-arguments (menu-entry-linux-arguments entry)) - (initrd (menu-entry-initrd entry))) - ;; XXX: Make this a symlink. - (signed-kernel kernel kernel-arguments initrd))) - (_ (error "Too many bootloader menu entries!")))) - -(define install-depthcharge - #~(lambda (bootloader device mount-point) - (let ((kpart (string-append mount-point - "/boot/depthcharge/vmlinux.kpart"))) - (write-file-on-device kpart (stat:size (stat kpart)) device 0)))) - -(define depthcharge-bootloader +(define depthcharge-veyron-speedy-bootloader (bootloader (name 'depthcharge) - (package #f) - (installer install-depthcharge) - (configuration-file "/boot/depthcharge/vmlinux.kpart") - (configuration-file-generator depthcharge-configuration-file))) + (installer (cute install-depthcharge "arm" "rk3288-veyron-speedy.dtb" + <...>)))) + +(define-deprecated/alias depthcharge-bootloader + depthcharge-veyron-speedy-bootloader) From patchwork Tue Sep 24 18:29:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31388 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id BD08027BBE9; Tue, 24 Sep 2024 21:19:18 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 2F15027BBE2 for ; Tue, 24 Sep 2024 21:19:18 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stBze-0004AI-Vf; Tue, 24 Sep 2024 16:18:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stBzd-00043O-H1 for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:41 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stBzd-0002k3-5D for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=1hm/xcF+Q2gVrnFqf50qcimdK8Frpa9KuUL0q26pgnA=; b=o9VHFv215/tC9XjX/gDsXeU5X/GTZ22bQis7NXyg+wQNfaUK5tyV12vHER+2dVnhO2St9cmkQbLum+yMAWON/Wrf1rQgzlcX+0jg/HJnb02mix+iEeQSwtTovQssjl3xWZMOe5RJYbeo7gW86fZPCBYCM+3CrtumuhUGU1iGVDNTwNnOSXoZV7Tyk1se2RdmTCApkK7o03ABMNbSc3w25zhW47Jfm6EtoH7FyshPAbIWMtvDg2VuZqfjRGn5b5LHfsOyzIZglcD3BkGrtA/wwP0VXYIiVYj2rxxnd8wIT50wt4ZcvHqLiDutKH62x7FKxbEvP6+eyTstvIzavurthA==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stC01-0004mW-TN; Tue, 24 Sep 2024 16:19:05 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 07/12] gnu: bootloader: extlinux: Rewrite completely. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: lilah@lunabee.space, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:19:05 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Lilah Tascheter X-Debbugs-Original-Xcc: Lilah Tascheter Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720913218294 (code B ref 72457); Tue, 24 Sep 2024 20:19:05 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:18:52 +0000 Received: from localhost ([127.0.0.1]:38427 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzn-0004ku-Bh for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:51 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:39007 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzc-0004iX-6d for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202615; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=R3CdBCZGFb2Ww409WdRHIFYp5Y3EjOJkHKH9fBEK9iY=; b=O0iyEOT8CJMvhL7KR6aw4ARsb5t/87X+vHQ8JYRrgc0JUe4WDGab52rGOH2DRuU9dKNkYc AbDO+6H+NTpjn3lrIi3Z3Niu9zvrc1BHkULZzFio93K9qf5CjPmUn6g1q+0DowMxXNDKdb IuXgqwvsDZNjbnPMyeOegznDM7SuTcUEkuvgWnfoLfkVp2cZwyWHUKGaCTNcHfTnQpeZfn 9iT4616Oe0r8DCDiPWq1Hfri8RScfAgONk/5Sf99X7zdGUAkk8g1QS/Lyrd9rmaFYCYHk3 XXrznIOOXF0pXd0a6RyMYTGtHxP/r4zrTdxm7A9D+Mbtl0sOXKpiSmPMijByZg== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id c7df6406 (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:14 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:14 +0200 Message-ID: <642e6621c5881c511e7d4263a9fdb9f0183f253e.1727201267.git.herman@rimm.ee> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter * gnu/bootloader/extlinux.scm (install-extlinux-config): Add procedure. (extlinux-configuration-file): Delete procedure. (install-extlinux): Use install-extlinux-config. (install-extlinux-mbr, install-extlinux-gpt): Delete variables. (extlinux-bootloader): Update to new bootloader record. (extlinux-gpt-bootloader): Update extlinux-bootloader-gpt to this. (extlinux-bootloader-gpt): Deprecate variable. * gnu/tests/install.scm (%minimal-extlinux-os)[bootloader]: Use proper extlinux variable. Change-Id: I3654d160f7306bb45a78b82ea6b249ff4281f739 --- gnu/bootloader/extlinux.scm | 153 ++++++++++++++++++------------------ gnu/tests/install.scm | 2 +- 2 files changed, 76 insertions(+), 79 deletions(-) diff --git a/gnu/bootloader/extlinux.scm b/gnu/bootloader/extlinux.scm index d9b6d8bf8a..d2bf3f2cca 100644 --- a/gnu/bootloader/extlinux.scm +++ b/gnu/bootloader/extlinux.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2017 David Craven ;;; Copyright © 2017 Mathieu Othacehe ;;; Copyright © 2022 Reza Alizadeh Majd +;;; Copyright © 2024 Lilah Tascheter ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,112 +22,108 @@ (define-module (gnu bootloader extlinux) #:use-module (gnu bootloader) #:use-module (gnu packages bootloaders) + #:use-module (gnu system boot) #:use-module (guix gexp) + #:use-module (guix deprecation) + #:use-module (guix records) #:use-module (guix utils) - #:export (extlinux-bootloader + #:export (install-extlinux-config ; for u-boot + extlinux-bootloader + extlinux-gpt-bootloader extlinux-bootloader-gpt)) -(define* (extlinux-configuration-file config entries - #:key - (system (%current-system)) - (old-entries '()) - #:allow-other-keys) - "Return the U-Boot configuration file corresponding to CONFIG, a - object, and where the store is available at STORE-FS, a - object. OLD-ENTRIES is taken to be a list of menu entries -corresponding to old generations of the system." - - (define all-entries - (append entries (bootloader-configuration-menu-entries config))) - - (define with-fdtdir? - (bootloader-configuration-device-tree-support? config)) + +;;; +;;; Config procedures. +;;; - (define (menu-entry->gexp entry) - (let ((label (menu-entry-label entry)) - (kernel (menu-entry-linux entry)) - (kernel-arguments (menu-entry-linux-arguments entry)) - (initrd (menu-entry-initrd entry))) - #~(format port "LABEL ~a +(define* (install-extlinux-config #:key bootloader-config + current-boot-alternative + old-boot-alternatives + #:allow-other-keys) + "Installer for the extlinux configuration file, meant to be shared by +all bootloaders that use the format to specify boot options." + (match-bootloader-configuration + bootloader-config + (targets menu-entries device-tree-support? timeout) + (define (menu-entry->gexp entry) + (match-menu-entry entry (label linux linux-arguments initrd) + (let* ((linux (normalize-file entry linux)) + (fdt #~(string-append "FDTDIR " (dirname #$linux) "/lib/dtbs"))) + #~(format port "LABEL ~a MENU LABEL ~a KERNEL ~a ~a INITRD ~a APPEND ~a ~%" - #$label #$label - #$kernel - (if #$with-fdtdir? - (string-append "FDTDIR " (dirname #$kernel) "/lib/dtbs") - "") - #$initrd - (string-join (list #$@kernel-arguments))))) - - (define builder - #~(call-with-output-file #$output - (lambda (port) - (let ((timeout #$(bootloader-configuration-timeout config))) - (format port "# This file was generated from your Guix configuration. Any changes + #$label #$label #$linux + #$(if device-tree-support? fdt "") + #$(normalize-file entry initrd) + (string-join (list #$@linux-arguments)))))) + + (let ((entries (cons (boot-alternative->menu-entry + current-boot-alternative) + (append menu-entries + (map boot-alternative->menu-entry + old-boot-alternatives))))) + (with-targets targets + (('extlinux => (path :path)) + #~(begin + (mkdir-p #$path) + (call-with-output-file #$(string-append path + "/extlinux.conf") + (lambda (port) + (format port "\ +# This file was generated from your Guix configuration. Any changes # will be lost upon reconfiguration. UI menu.c32 MENU TITLE GNU Guix Boot Options PROMPT ~a -TIMEOUT ~a~%" - (if (> timeout 0) 1 0) - ;; timeout is expressed in 1/10s of seconds. - (* 10 timeout)) - #$@(map menu-entry->gexp all-entries) - - #$@(if (pair? old-entries) - #~((format port "~%") - #$@(map menu-entry->gexp old-entries) - (format port "~%")) - #~()))))) - - (computed-file "extlinux.conf" builder - #:options '(#:local-build? #t - #:substitutable? #f))) - +TIMEOUT ~a~%" ; Timeout is expressed in tenths of a second. + #$(if (> timeout 0) 1 0) #$(* 10 timeout)) + #$@(map menu-entry->gexp entries))))))))) - ;;; -;;; Install procedures. +;;; Install procedure. ;;; (define (install-extlinux mbr) - #~(lambda (bootloader device mount-point) - (let ((extlinux (string-append bootloader "/sbin/extlinux")) - (install-dir (string-append mount-point "/boot/extlinux")) - (syslinux-dir (string-append bootloader "/share/syslinux"))) - (for-each (lambda (file) - (install-file file install-dir)) - (find-files syslinux-dir "\\.c32$")) - (invoke/quiet extlinux "--install" install-dir) - (write-file-on-device (string-append syslinux-dir "/" #$mbr) - 440 device 0)))) - -(define install-extlinux-mbr - (install-extlinux "mbr.bin")) + (lambda* (#:key bootloader-config #:allow-other-keys . args) + (with-targets (bootloader-configuration-targets bootloader-config) + (('extlinux => (path :path)) + #~(begin + #$(apply install-extlinux-config args) + (copy-recursively #$(file-append syslinux "/share/syslinux") #$path) + (invoke/quiet #+(file-append syslinux "/sbin/extlinux") + "--install" #$path))) + (('disk => (disk :device)) + #~(write-file-on-device #$(file-append syslinux "/share/syslinux/" mbr) + 440 #$disk 0))))) -(define install-extlinux-gpt - (install-extlinux "gptmbr.bin")) - ;;; ;;; Bootloader definitions. ;;; (define extlinux-bootloader (bootloader - (name 'extlinux) - (package syslinux) - (installer install-extlinux-mbr) - (configuration-file "/boot/extlinux/extlinux.conf") - (configuration-file-generator extlinux-configuration-file))) - -(define extlinux-bootloader-gpt + (name 'extlinux) + (default-targets (list (bootloader-target + (type 'install) + (offset 'root) + (path "boot")) + (bootloader-target + (type 'extlinux) + (offset 'install) + (path "extlinux")))) + (installer (install-extlinux "mbr.bin")))) + +(define extlinux-gpt-bootloader (bootloader - (inherit extlinux-bootloader) - (installer install-extlinux-gpt))) + (inherit extlinux-bootloader) + (installer (install-extlinux "gptmbr.bin")))) + +(define-deprecated/alias extlinux-bootloader-gpt extlinux-gpt-bootloader) diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm index 36dbd9111f..57b2a77414 100644 --- a/gnu/tests/install.scm +++ b/gnu/tests/install.scm @@ -140,7 +140,7 @@ (define-os-with-source (%minimal-extlinux-os (locale "en_US.UTF-8") (bootloader (bootloader-configuration - (bootloader extlinux-bootloader-gpt) + (bootloader extlinux-gpt-bootloader) (targets (list "/dev/vdb")))) (kernel-arguments '("console=ttyS0")) (file-systems (cons (file-system From patchwork Tue Sep 24 18:29:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31393 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 4BE9D27BBEA; Tue, 24 Sep 2024 21:20:12 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id CC33D27BBE2 for ; Tue, 24 Sep 2024 21:20:10 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stBzi-0004OU-Gv; Tue, 24 Sep 2024 16:18:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stBzg-0004FO-56 for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:44 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stBzf-0002kb-RY; Tue, 24 Sep 2024 16:18:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=b0etzW5Px+0oesNxSdrltTNbL7Vmuq/ChAl9Q3hGIko=; b=Js6McPv60Lx+pyMkwwhvkXr+cC8vt7lhxTEzcjpETZGsr9nZS8PnPv2mFEMcsKXRZy+3f/i5Myop86ciziGeeCIw90ClcHVlD4a1gr7R/ogelIaLNt/3o5naJaqk9hB4ghzW0Gc0aXe/+N1zz8WB8Sl5joWLCuRKwxMI5tCnSS/DC6JjeQm4TO2QRYsVbMNzJFpXJKTI+JCnkXoLNdO9jqPYkF9k4duGh5Kpww2+fI9z6APEBShhPVjvlvfmXyEVhVc0DYE1Cb2VX2P5SzdPPtZtQHRF/UvOpX0ExeQXKRxfhsAegywclTxjYGY3KnEBu8ikfS6BhFu74h4d+2OFfg==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stC04-0004nI-HH; Tue, 24 Sep 2024 16:19:08 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 08/12] gnu: bootloader: u-boot: Rewrite completely. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: pelzflorian@pelzflorian.de, lilah@lunabee.space, ludo@gnu.org, maxim.cournoyer@gmail.com, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:19:08 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Florian Pelz , Lilah Tascheter , Ludovic =?utf-8?q?Court=C3=A8s?= , Maxim Cournoyer X-Debbugs-Original-Xcc: Florian Pelz , Lilah Tascheter , Ludovic =?utf-8?q?Court=C3=A8s?= , Maxim Cournoyer Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720914718413 (code B ref 72457); Tue, 24 Sep 2024 20:19:08 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:19:07 +0000 Received: from localhost ([127.0.0.1]:38443 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stC01-0004mL-9g for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:19:07 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:39007 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzd-0004iX-Uw for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202615; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6rUhTQ2O6uXS+XaOEAC/PQ/WgLhKAEVFAZJ5EQIqi4E=; b=nMwa7FBVRulylfb4VBFDGmVADfWDBnEhkvXmtDtzkRnfYeG/Pd/gxSkb8IWqGUEFzLwHoz +4ES3sO3ojh02d1CRpuIaR8rdlivlJ6ea3Q+Xv87z4EBGSDkNoMZQo4IjJrUSy7jmzZ5bu IxXXGIdsfSpnWXwOgWOuU07aZ3qA3dUFTML1DDZcZCE0ojfhRuwCPkmQbzolA+7WSzFHms KMXcaVWzxDdiz0KAfTUnFJzaDKCDH1f7xqFnKVDHRNBpyBLEUv/DW200rJKpq7eoSDau35 wskkDk36BBkwifRkGdME9ISLz9oxW5CxD0q2L8aR6R0jT4VJ22nfB/MHanhJ5w== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id 6214b8dc (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:15 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:15 +0200 Message-ID: <3626dc2a7da509eddac416ae644a45e7af202adb.1727201267.git.herman@rimm.ee> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter * gnu/bootloader/u-boot.scm (u-boot-bootloader): Delete variable. (make-install-u-boot): Add procedure. (define-u-bootloader): Add macro. (u-boot-*-bootloader): Use define-u-bootloader. (install-*u-boot): Remove variables. * gnu/system/install.scm (os-with-u-boot): Remove procedure. * doc/guix.texi (System Installation)[Building the Installation Image]: Use beaglebone as the example. Change-Id: I3654d160f7306bb45a78b82ea6b249ff4281f739 --- doc/guix.texi | 8 +- gnu/bootloader/u-boot.scm | 466 +++++++++++++------------------------- gnu/system/install.scm | 16 +- 3 files changed, 168 insertions(+), 322 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 4168310135..a3338b098a 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -2666,11 +2666,13 @@ Building the Installation Image includes the bootloader, specifically: @example -guix system image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")' +guix system image --system=armhf-linux -e '(@ (gnu system install) beaglebone-black-installation-os)' @end example -@code{A20-OLinuXino-Lime2} is the name of the board. If you specify an invalid -board, a list of possible boards will be printed. +@code{beaglebone-black} is the name of the board. Similar +@code{installation-os} variables exist for most other supported boards. +Otherwise, you can use @code{embedded-installation-os}, passing it a u-boot +bootloader and the desired console tty. @c ********************************************************************* diff --git a/gnu/bootloader/u-boot.scm b/gnu/bootloader/u-boot.scm index 7fd7288854..2d351c9dc2 100644 --- a/gnu/bootloader/u-boot.scm +++ b/gnu/bootloader/u-boot.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2023 Efraim Flashner ;;; Copyright © 2023-2024 Herman Rimm ;;; Copyright © 2024 Zheng Junjie <873216071@qq.com> +;;; Copyright © 2024 Lilah Tascheter ;;; ;;; This file is part of GNU Guix. ;;; @@ -24,12 +25,11 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu bootloader u-boot) - #:use-module (gnu bootloader extlinux) #:use-module (gnu bootloader) + #:use-module (gnu bootloader extlinux) #:use-module (gnu packages bootloaders) #:use-module (guix gexp) - #:export (u-boot-bootloader - u-boot-a20-olinuxino-lime-bootloader + #:export (u-boot-a20-olinuxino-lime-bootloader u-boot-a20-olinuxino-lime2-bootloader u-boot-a20-olinuxino-micro-bootloader u-boot-bananapi-m2-ultra-bootloader @@ -55,321 +55,179 @@ (define-module (gnu bootloader u-boot) u-boot-ts7970-q-2g-1000mhz-c-bootloader u-boot-wandboard-bootloader)) -(define install-u-boot - #~(lambda (bootloader root-index image) - (if bootloader - (error "Failed to install U-Boot")))) +(define (make-install-u-boot firmware installers) + (lambda* (#:key bootloader-config #:allow-other-keys . args) + (with-targets (bootloader-configuration-targets bootloader-config) + ('extlinux (apply install-extlinux-config args)) + (('install => (path :path)) #~(let ((path #$path)) #$firmware)) + (('disk => (disk :device)) #~(let ((disk #$disk)) #f #$@installers))))) + +(define-syntax-rule (define-u-bootloader def-name package firmware + (file size doffset) ...) + "Defines a U-Boot installer DEF-NAME, using u-boot PACKAGE. Installs +each given FILE of SIZE (or #f to autodetect) to the targeted disk at +OFFSET. FIRMWARE is ran on the U-Boot firmware directory to install +supporting files, with the directory path as the local variable 'path'." + (define def-name + (bootloader + (name 'u-boot) + (default-targets (list (bootloader-target + (type 'install) + (offset 'root) + (path "boot")) + (bootloader-target + (type 'extlinux) + (offset 'install) + (path "extlinux")))) + (installer + (make-install-u-boot + firmware + (list #~(let ((fw #$(file-append package "/libexec/" file))) + (write-file-on-device fw + #$(or size #~(stat:size (stat fw))) + disk #$doffset)) ...)))))) + + +;;; +;;; Bootloader definitions. +;;; -(define install-beaglebone-black-u-boot +(define-u-bootloader u-boot-beaglebone-black-bootloader + u-boot-am335x-boneblack #f ;; http://wiki.beyondlogic.org/index.php?title=BeagleBoneBlack_Upgrading_uBoot ;; This first stage bootloader called MLO (U-Boot SPL) is expected at ;; 0x20000 by BBB ROM code. The second stage bootloader will be loaded by ;; the MLO and is expected at 0x60000. Write both first stage ("MLO") and - ;; second stage ("u-boot.img") images, read in BOOTLOADER directory, to the - ;; specified DEVICE. - #~(lambda (bootloader root-index image) - (let ((mlo (string-append bootloader "/libexec/MLO")) - (u-boot (string-append bootloader "/libexec/u-boot.img"))) - (write-file-on-device mlo (* 256 512) - image (* 256 512)) - (write-file-on-device u-boot (* 1024 512) - image (* 768 512))))) - -(define install-allwinner-u-boot - #~(lambda (bootloader root-index image) - (let ((u-boot (string-append bootloader - "/libexec/u-boot-sunxi-with-spl.bin"))) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 8 1024))))) - -(define install-allwinner64-u-boot - #~(lambda (bootloader root-index image) - (let ((spl (string-append bootloader "/libexec/u-boot-sunxi-with-spl.bin")) - (u-boot (string-append bootloader "/libexec/u-boot-sunxi-with-spl.fit.itb"))) - (write-file-on-device spl (stat:size (stat spl)) - image (* 8 1024)) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 40 1024))))) - -(define install-imx-u-boot - #~(lambda (bootloader root-index image) - (let ((spl (string-append bootloader "/libexec/SPL")) - (u-boot (string-append bootloader "/libexec/u-boot.img"))) - (write-file-on-device spl (stat:size (stat spl)) - image (* 1 1024)) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 69 1024))))) - -(define install-nanopi-r4s-rk3399-u-boot - #~(lambda (bootloader root-index image) - (let ((spl (string-append bootloader "/libexec/idbloader.img")) - (u-boot (string-append bootloader "/libexec/u-boot.itb"))) - (write-file-on-device spl (stat:size (stat spl)) - image (* 64 512)) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 16384 512))))) - -(define install-orangepi-r1-plus-lts-rk3328-u-boot - #~(lambda (bootloader root-index image) - (let ((idb (string-append bootloader "/libexec/idbloader.img")) - (u-boot (string-append bootloader "/libexec/u-boot.itb"))) - (write-file-on-device idb (stat:size (stat idb)) - image (* 64 512)) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 16384 512))))) - -(define install-puma-rk3399-u-boot - #~(lambda (bootloader root-index image) - (let ((spl (string-append bootloader "/libexec/idbloader.img")) - (u-boot (string-append bootloader "/libexec/u-boot.itb"))) - (write-file-on-device spl (stat:size (stat spl)) - image (* 64 512)) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 512 512))))) - -(define install-firefly-rk3399-u-boot - #~(lambda (bootloader root-index image) - (let ((idb (string-append bootloader "/libexec/idbloader.img")) - (u-boot (string-append bootloader "/libexec/u-boot.itb"))) - (write-file-on-device idb (stat:size (stat idb)) - image (* 64 512)) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 16384 512))))) - -(define install-rock64-rk3328-u-boot - #~(lambda (bootloader root-index image) - (let ((idb (string-append bootloader "/libexec/idbloader.img")) - (u-boot (string-append bootloader "/libexec/u-boot.itb"))) - (write-file-on-device idb (stat:size (stat idb)) - image (* 64 512)) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 16384 512))))) - -(define install-rockpro64-rk3399-u-boot - #~(lambda (bootloader root-index image) - (let ((idb (string-append bootloader "/libexec/idbloader.img")) - (u-boot (string-append bootloader "/libexec/u-boot.itb"))) - (write-file-on-device idb (stat:size (stat idb)) - image (* 64 512)) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 16384 512))))) - -(define install-pinebook-pro-rk3399-u-boot install-rockpro64-rk3399-u-boot) - -(define install-u-boot-ts7970-q-2g-1000mhz-c-u-boot - #~(lambda (bootloader device mount-point) - (let ((u-boot.imx (string-append bootloader "/libexec/u-boot.imx")) - (install-dir (string-append mount-point "/boot"))) - (install-file u-boot.imx install-dir)))) - -(define install-sifive-unmatched-u-boot - #~(lambda (bootloader root-index image) - (let ((spl (string-append bootloader "/libexec/spl/u-boot-spl.bin")) - (u-boot (string-append bootloader "/libexec/u-boot.itb"))) - (write-file-on-device spl (stat:size (stat spl)) - image (* 34 512)) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 2082 512))))) - -(define install-starfive-visionfive2-u-boot - #~(lambda (bootloader root-index image) - (let ((spl (string-append - bootloader "/libexec/spl/u-boot-spl.bin.normal.out")) - (u-boot (string-append bootloader "/libexec/u-boot.itb"))) - (write-file-on-device spl (stat:size (stat spl)) - image (* 34 512)) - (write-file-on-device u-boot (stat:size (stat u-boot)) - image (* 2082 512))))) - -(define install-starfive-visionfive2-uEnv.txt - #~(lambda (bootloader device mount-point) - (mkdir-p (string-append mount-point "/boot")) - (call-with-output-file (string-append mount-point "/boot/uEnv.txt") + ;; second stage ("u-boot.img") images to the target. + ("MLO" (* 256 512) (* 256 512)) + ("u-boot.img" (* 1024 512) (* 768 512))) + +(define-u-bootloader u-boot-sifive-unmatched-bootloader + u-boot-sifive-unmatched #f + ("spl/u-boot-spl.bin" #f (* 34 512)) + ("u-boot.itb" #f (* 2082 512))) + +(define-u-bootloader u-boot-starfive-visionfive2-bootloader + u-boot-starfive-visionfive2 + #~(begin (mkdir-p path) + (call-with-output-file (string-append path "/uEnv.txt") (lambda (port) (format port - ;; if board SPI use vender's u-boot, will find - ;; ""starfive/starfive_visionfive2.dtb"", We cannot guarantee - ;; that users will update this u-boot, so set it. - "fdtfile=starfive/jh7110-starfive-visionfive-2-v1.3b.dtb~%"))))) + ;; if board SPI use vender's u-boot, will find + ;; ""starfive/starfive_visionfive2.dtb"", We cannot guarantee + ;; that users will update this u-boot, so set it. + "fdtfile=starfive/jh7110-starfive-visionfive-2-v1.3b.dtb~%")))) + ("spl/u-boot-spl.bin.normal.out" #f (* 34 512)) + ("u-boot.itb" #f (* 2082 512))) + + +;;; +;;; Allwinner bootloader definitions. +;;; +(define-syntax-rule (define-u-bootloader-allwinner def-name package) + (define-u-bootloader def-name package #f + ("u-boot-sunxi-with-spl.bin" #f (* 8 1024)))) + -(define install-qemu-riscv64-u-boot - #~(lambda (bootloader device mount-point) - (let ((u-boot.bin (string-append bootloader "/libexec/u-boot.bin")) - (install-dir (string-append mount-point "/boot"))) - (install-file u-boot.bin install-dir)))) +(define-u-bootloader-allwinner u-boot-nintendo-nes-classic-edition-bootloader + u-boot-nintendo-nes-classic-edition) + +(define-u-bootloader-allwinner u-boot-a20-olinuxino-lime-bootloader + u-boot-a20-olinuxino-lime) + +(define-u-bootloader-allwinner u-boot-a20-olinuxino-lime2-bootloader + u-boot-a20-olinuxino-lime2) + +(define-u-bootloader-allwinner u-boot-a20-olinuxino-micro-bootloader + u-boot-a20-olinuxino-micro) + +(define-u-bootloader-allwinner u-boot-bananapi-m2-ultra-bootloader + u-boot-bananapi-m2-ultra) + +(define-u-bootloader-allwinner u-boot-cubietruck-bootloader u-boot-cubietruck) + +(define-u-bootloader-allwinner u-boot-pine64-lts-bootloader u-boot-pine64-lts) + +(define-u-bootloader-allwinner u-boot-orangepi-zero2w-bootloader + u-boot-orangepi-zero2w) +;;; +;;; Allwinner64 bootloader definitions. +;;; +(define-syntax-rule (define-u-bootloader-allwinner64 def-name package) + (define-u-bootloader def-name package #f + ("u-boot-sunxi-with-spl.bin" #f (* 8 1024)) + ("u-boot-sunxi-with-spl.fit.itb" #f (* 40 1024)))) +(define-u-bootloader-allwinner64 u-boot-pine64-plus-bootloader + u-boot-pine64-plus) + +(define-u-bootloader-allwinner64 u-boot-pinebook-bootloader u-boot-pinebook) + + ;;; -;;; Bootloader definitions. +;;; IMX bootloader definitions. ;;; +(define-syntax-rule (define-u-bootloader-imx def-name package) + (define-u-bootloader def-name package #f + ("SPL" #f (* 8 1024)) + ("u-boot.img" #f (* 40 1024)))) -(define u-boot-bootloader - (bootloader - (inherit extlinux-bootloader) - (name 'u-boot) - (package #f) - (installer #f) - (disk-image-installer install-u-boot))) - -(define u-boot-beaglebone-black-bootloader - (bootloader - (inherit u-boot-bootloader) - (package u-boot-am335x-boneblack) - (disk-image-installer install-beaglebone-black-u-boot))) - -(define u-boot-allwinner-bootloader - (bootloader - (inherit u-boot-bootloader) - (disk-image-installer install-allwinner-u-boot))) - -(define u-boot-allwinner64-bootloader - (bootloader - (inherit u-boot-bootloader) - (disk-image-installer install-allwinner64-u-boot))) - -(define u-boot-imx-bootloader - (bootloader - (inherit u-boot-bootloader) - (disk-image-installer install-imx-u-boot))) - -(define u-boot-nintendo-nes-classic-edition-bootloader - (bootloader - (inherit u-boot-allwinner-bootloader) - (package u-boot-nintendo-nes-classic-edition))) - -(define u-boot-a20-olinuxino-lime-bootloader - (bootloader - (inherit u-boot-allwinner-bootloader) - (package u-boot-a20-olinuxino-lime))) - -(define u-boot-a20-olinuxino-lime2-bootloader - (bootloader - (inherit u-boot-allwinner-bootloader) - (package u-boot-a20-olinuxino-lime2))) - -(define u-boot-a20-olinuxino-micro-bootloader - (bootloader - (inherit u-boot-allwinner-bootloader) - (package u-boot-a20-olinuxino-micro))) - -(define u-boot-bananapi-m2-ultra-bootloader - (bootloader - (inherit u-boot-allwinner-bootloader) - (package u-boot-bananapi-m2-ultra))) - -(define u-boot-cubietruck-bootloader - (bootloader - (inherit u-boot-allwinner-bootloader) - (package u-boot-cubietruck))) - -(define u-boot-firefly-rk3399-bootloader - ;; SD and eMMC use the same format - (bootloader - (inherit u-boot-bootloader) - (package u-boot-firefly-rk3399) - (disk-image-installer install-firefly-rk3399-u-boot))) - -(define u-boot-mx6cuboxi-bootloader - (bootloader - (inherit u-boot-imx-bootloader) - (package u-boot-mx6cuboxi))) - -(define u-boot-wandboard-bootloader - (bootloader - (inherit u-boot-imx-bootloader) - (package u-boot-wandboard))) - -(define u-boot-novena-bootloader - (bootloader - (inherit u-boot-imx-bootloader) - (package u-boot-novena))) - -(define u-boot-nanopi-r4s-rk3399-bootloader - (bootloader - (inherit u-boot-bootloader) - (package u-boot-nanopi-r4s-rk3399) - (disk-image-installer install-nanopi-r4s-rk3399-u-boot))) - -(define u-boot-orangepi-r1-plus-lts-rk3328-bootloader - (bootloader - (inherit u-boot-bootloader) - (package u-boot-orangepi-r1-plus-lts-rk3328) - (disk-image-installer install-orangepi-r1-plus-lts-rk3328-u-boot))) - -(define u-boot-orangepi-zero2w-bootloader - (bootloader - (inherit u-boot-allwinner-bootloader) - (package u-boot-orangepi-zero2w))) - -(define u-boot-pine64-plus-bootloader - (bootloader - (inherit u-boot-allwinner64-bootloader) - (package u-boot-pine64-plus))) - -(define u-boot-pine64-lts-bootloader - (bootloader - (inherit u-boot-allwinner-bootloader) - (package u-boot-pine64-lts))) - -(define u-boot-pinebook-bootloader - (bootloader - (inherit u-boot-allwinner64-bootloader) - (package u-boot-pinebook))) - -(define u-boot-puma-rk3399-bootloader - (bootloader - (inherit u-boot-bootloader) - (package u-boot-puma-rk3399) - (disk-image-installer install-puma-rk3399-u-boot))) - -(define u-boot-rock64-rk3328-bootloader - ;; SD and eMMC use the same format - (bootloader - (inherit u-boot-bootloader) - (package u-boot-rock64-rk3328) - (disk-image-installer install-rock64-rk3328-u-boot))) -(define u-boot-rockpro64-rk3399-bootloader - ;; SD and eMMC use the same format - (bootloader - (inherit u-boot-bootloader) - (package u-boot-rockpro64-rk3399) - (disk-image-installer install-rockpro64-rk3399-u-boot))) +(define-u-bootloader-imx u-boot-mx6cuboxi-bootloader u-boot-mx6cuboxi) + +(define-u-bootloader-imx u-boot-wandboard-bootloader u-boot-wandboard) + +(define-u-bootloader-imx u-boot-novena-bootloader u-boot-novena) -(define u-boot-pinebook-pro-rk3399-bootloader + +;;; +;;; Rockchip bootloader definitions. +;;; +(define-syntax-rule (define-u-bootloader-rockchip def-name package) ;; SD and eMMC use the same format - (bootloader - (inherit u-boot-bootloader) - (package u-boot-pinebook-pro-rk3399) - (disk-image-installer install-pinebook-pro-rk3399-u-boot))) - -(define u-boot-ts7970-q-2g-1000mhz-c-bootloader - ;; This bootloader doesn't really need to be installed, as it is read from - ;; an SPI memory chip, not the SD card. It is copied to /boot/u-boot.imx - ;; for convenience and should be manually flashed at the U-Boot prompt. - (bootloader - (inherit u-boot-bootloader) - (package u-boot-ts7970-q-2g-1000mhz-c) - (installer install-u-boot-ts7970-q-2g-1000mhz-c-u-boot) - (disk-image-installer #f))) - -(define u-boot-sifive-unmatched-bootloader - (bootloader - (inherit u-boot-bootloader) - (package u-boot-sifive-unmatched) - (disk-image-installer install-sifive-unmatched-u-boot))) - -(define u-boot-starfive-visionfive2-bootloader - (bootloader - (inherit u-boot-bootloader) - (package u-boot-starfive-visionfive2) - (installer install-starfive-visionfive2-uEnv.txt) - (disk-image-installer install-starfive-visionfive2-u-boot))) - -(define u-boot-qemu-riscv64-bootloader - (bootloader - (inherit u-boot-bootloader) - (package u-boot-qemu-riscv64) - (installer install-qemu-riscv64-u-boot) - (disk-image-installer #f))) + (define-u-bootloader def-name package #f + ("idbloader.img" #f (* 64 512)) + ("u-boot.itb" #f (* 16384 512)))) + +(define-u-bootloader-rockchip u-boot-firefly-rk3399-bootloader + u-boot-firefly-rk3399) + +(define-u-bootloader-rockchip u-boot-nanopi-r4s-rk3399-bootloader + u-boot-nanopi-r4s-rk3399) + +(define-u-bootloader-rockchip u-boot-orangepi-r1-plus-lts-rk3328-bootloader + u-boot-orangepi-r1-plus-lts-rk3328) + +(define-u-bootloader-rockchip u-boot-rock64-rk3328-bootloader + u-boot-rock64-rk3328) + +(define-u-bootloader-rockchip u-boot-rockpro64-rk3399-bootloader + u-boot-rockpro64-rk3399) + +(define-u-bootloader-rockchip u-boot-pinebook-pro-rk3399-bootloader + u-boot-pinebook-pro-rk3399) + +(define-u-bootloader u-boot-puma-rk3399-bootloader u-boot-puma-rk3399 #f + ("idbloader.img" #f (* 64 512)) + ("u-boot.itb" #f (* 512 512))) + + +;;; +;;; Copy-only bootloader definitions. +;;; + +;; These bootloaders don't really need to be installed, as they are read from +;; an SPI memory chip or directly from the FS, not the disk. +(define-syntax-rule (define-u-bootloader-copy def-name package file) + (define-u-bootloader def-name package + #~(install-file #$(file-append package "/libexec/" file) path))) + +;; user should manually install this to SPI flash +;; TODO: write directly to SPI flash? unless wear issues are a problem. +(define-u-bootloader-copy u-boot-ts7970-q-2g-1000mhz-c-bootloader + u-boot-ts7970-q-2g-1000mhz-c "u-boot.imx") + +(define-u-bootloader-copy u-boot-qemu-riscv64-bootloader + u-boot-qemu-riscv64 "u-boot.bin") diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 2d0c9875fb..82f2c451dd 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -78,8 +78,7 @@ (define-module (gnu system install) rock64-installation-os rockpro64-installation-os rk3399-puma-installation-os - wandboard-installation-os - os-with-u-boot)) + wandboard-installation-os)) ;;; Commentary: ;;; @@ -555,19 +554,6 @@ (define installation-os %installer-disk-utilities %base-packages)))) -(define* (os-with-u-boot os board #:key (bootloader-target "/dev/mmcblk0") - (triplet "arm-linux-gnueabihf")) - "Given OS, amend it with the u-boot bootloader for BOARD, -installed to BOOTLOADER-TARGET (a drive), compiled for TRIPLET. - -If you want a serial console, make sure to specify one in your -operating-system's kernel-arguments (\"console=ttyS0\" or similar)." - (operating-system (inherit os) - (bootloader (bootloader-configuration - (bootloader (bootloader (inherit u-boot-bootloader) - (package (make-u-boot-package board triplet)))) - (targets (list bootloader-target)))))) - (define* (embedded-installation-os bootloader #:optional (tty "ttyS0") (extra-modules '()) From patchwork Tue Sep 24 18:29:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31391 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 377FE27BBEC; Tue, 24 Sep 2024 21:20:01 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id E93ED27BBE9 for ; Tue, 24 Sep 2024 21:19:59 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stC0k-0005zv-6l; Tue, 24 Sep 2024 16:19:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stC0Z-0005pE-91 for guix-patches@gnu.org; Tue, 24 Sep 2024 16:19:39 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stC0X-0002vc-AR for guix-patches@gnu.org; Tue, 24 Sep 2024 16:19:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=AeaMXSs2EmrOHXViYuxLFpiHKRRi+sjA9ruRZfVehbI=; b=pbfQrjO9k1LPKF/hVeBsLh2BZdt4rYhWyJSduD0gjDnFGqfw1k1A0254fErUOVnK+FWq7juMKoxswPDyn8BiJI6bVgHddSelWqv+jL41ET5tC/4RO8Q2ZsCXEs/dT5Z/yWEdUXy0hICpHSs3e/QOz9YWlqRckh+h3W6oGcGrlZZ/qzZ3LPOATJNNgTaK4ep4L1mqTpGT2NMz1MA98ceUJHy3LQH/cVp8QDeNeLrFiBbEZAJgEVgsztIhgL6JpRwqLNG1r3Qchfm0ixhOezRJjFvjD0ONYBsSJ5R4FkiF2bF0oCssq2AFNXG3i85W9kbAcepMJ8m1aV6gW6hJrbSTvQ==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stC0v-0004pT-Q1; Tue, 24 Sep 2024 16:20:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 09/12] gnu: bootloader: Add Raspberry Pi bootloader. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: efraim@flashner.co.il, lilah@lunabee.space, vagrant@debian.org, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:20:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Efraim Flashner , Lilah Tascheter , Vagrant Cascadian X-Debbugs-Original-Xcc: Efraim Flashner , Lilah Tascheter , Vagrant Cascadian Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720914918449 (code B ref 72457); Tue, 24 Sep 2024 20:20:01 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:19:09 +0000 Received: from localhost ([127.0.0.1]:38453 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stC03-0004mw-9x for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:19:08 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:48191 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzf-0004j7-L2 for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202616; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3a3IY6fqYD3pEhUSVl+DZ0ymqt5W8hqxGfUYDT95ckM=; b=P0XUCBbT0foQXmStFpD1E/ugvw18fhC8y0FV30SG85LbILRRGihppZ6Y8TUB7WawKmwtiU FEk3VaAWDwgWUjDwdnjWEPOaiFB6jDCZOKYmDQBpLF8stRbgJZiah7ANyBCzKkKRO/eNT6 2M5Kj5sf5TDTSyhCjWlLmxaVBjRnyx6LycIuyDs9GPtNgfJK9RyimdULX86Khafs+2ITkJ 4zTXf5CFuORFnqfJEWLPaA5DaJ38I5YRvVddQQHqHa05iaEEfM5OL28lS0lEWMZM4YRvpW +1Zme/+zog4EA1t0xIkmQiB6SgoVK01Q2Exa7S+V7upEFU/gcDF+CgM6zfMnkg== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id ff9bb520 (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:16 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:16 +0200 Message-ID: <04305a30e6f90c549268499d2ba487d67bc0e9d7.1727201267.git.herman@rimm.ee> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter Less adding and more making it an actual bootloader rather than some weirdly specified packages. The GRUB EFI bootloader can be recreated by combining a Raspberry Pi bootloader with grub-efi. * gnu/bootloader.scm (efi-bootloader-profile, efi-bootloader-chain): Delete procedures. * gnu/bootloader/u-boot.scm (rpi-config, install-rpi, make-u-boot-rpi-bootloader): New procedures. (u-boot-rpi-2-bootloader, u-boot-rpi-3-bootloader, u-boot-rpi-4-bootloader, u-boot-rpi-bootloader): New variables. * gnu/packages/bootloaders.scm (make-u-boot-bin-package): Delete procedure. (%u-boot-rpi-efi-description, %u-boot-rpi-efi-description-32-bit, u-boot-rpi-2-efi, u-boot-rpi-3-32b-efi, u-boot-rpi-4-32b-efi, u-boot-rpi-arm64-efi, u-boot-rpi-2-bin, u-boot-rpi-3_32b-bin, u-boot-rpi-4_32b-bin, u-boot-rpi-arm64-bin, u-boot-rpi-2-efi-bin, u-boot-rpi-3-32b-efi-bin, u-boot-rpi-4-32b-efi-bin, u-boot-rpi-arm64-efi-bin): Delete variables. * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): Delete procedure. * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl (bootloader), gnu/system/examples/raspberry-pi-64.tmpl (bootloader): Use new target system. Change-Id: I5139a0b00ec89189e8e7c84e06a7a3b7240259cd --- gnu/bootloader.scm | 124 +----------------- gnu/bootloader/u-boot.scm | 70 ++++++++++ gnu/packages/bootloaders.scm | 94 +------------ gnu/packages/raspberry-pi.scm | 18 --- .../examples/raspberry-pi-64-nfs-root.tmpl | 23 ++-- gnu/system/examples/raspberry-pi-64.tmpl | 18 +-- 6 files changed, 102 insertions(+), 245 deletions(-) diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm index 14066e11f9..5e4578add0 100644 --- a/gnu/bootloader.scm +++ b/gnu/bootloader.scm @@ -118,8 +118,7 @@ (define-module (gnu bootloader) %efi-supported-systems efi-arch - install-efi - efi-bootloader-chain)) + install-efi)) ;;; @@ -733,124 +732,3 @@ (define (install-efi bootloader-config plan) (('vendir => (vendir :path) (loader :devpath) (disk :device)) #~(install-efi #+(file-append (lazy-efibootmgr) "/sbin/efibootmgr") #$vendir #$loader #$disk #$plan)))))) - -(define (efi-bootloader-profile packages files hooks) - "Creates a profile from the lists of PACKAGES and FILES from the store. -This profile is meant to be used by the bootloader-installer. - -FILES is a list of file or directory names from the store, which will be -symlinked into the profile. If a directory name ends with '/', then the -directory content instead of the directory itself will be symlinked into the -profile. - -FILES may contain file like objects produced by procedures like plain-file, -local-file, etc., or package contents produced with file-append. - -HOOKS lists additional hook functions to modify the profile." - (define* (efi-bootloader-profile-hook manifest #:optional system) - (define build - (with-imported-modules '((guix build utils)) - #~(begin - (use-modules ((guix build utils) - #:select (mkdir-p strip-store-file-name)) - ((ice-9 ftw) - #:select (scandir)) - ((srfi srfi-1) - #:select (append-map every remove)) - ((srfi srfi-26) - #:select (cut))) - (define (symlink-to file directory transform) - "Creates a symlink to FILE named (TRANSFORM FILE) in DIRECTORY." - (symlink file (string-append directory "/" (transform file)))) - (define (directory-content directory) - "Creates a list of absolute path names inside DIRECTORY." - (map (lambda (name) - (string-append directory name)) - (or (scandir directory (lambda (name) - (not (member name '("." ".."))))) - '()))) - (define name-ends-with-/? (cut string-suffix? "/" <>)) - (define (name-is-store-entry? name) - "Return #t if NAME is a direct store entry and nothing inside." - (not (string-index (strip-store-file-name name) #\/))) - (let* ((files '#$files) - (directories (filter name-ends-with-/? files)) - (names-from-directories - (append-map (lambda (directory) - (directory-content directory)) - directories)) - (names (append names-from-directories - (remove name-ends-with-/? files)))) - (mkdir-p #$output) - (if (every file-exists? names) - (begin - (for-each (lambda (name) - (symlink-to name #$output - (if (name-is-store-entry? name) - strip-store-file-name - basename))) - names) - #t) - #f))))) - - (gexp->derivation "efi-bootloader-profile" - build - #:system system - #:local-build? #t - #:substitutable? #f - #:properties - `((type . profile-hook) - (hook . efi-bootloader-profile-hook)))) - - (profile (content (packages->manifest packages)) - (name "efi-bootloader-profile") - (hooks (cons efi-bootloader-profile-hook hooks)) - (locales? #f) - (allow-collisions? #f) - (relative-symlinks? #f))) - -(define* (efi-bootloader-chain final-bootloader - #:key - (packages '()) - (files '()) - (hooks '()) - installer - disk-image-installer) - "Define a chain of bootloaders with the FINAL-BOOTLOADER, optional PACKAGES, -and optional directories and files from the store given in the list of FILES. - -The package of the FINAL-BOOTLOADER and all PACKAGES and FILES will be placed -in an efi-bootloader-profile, which will be passed to the INSTALLER. - -FILES may contain file-like objects produced by procedures like plain-file, -local-file, etc., or package contents produced with file-append. - -If a directory name in FILES ends with '/', then the directory content instead -of the directory itself will be symlinked into the efi-bootloader-profile. - -The procedures in the HOOKS list can be used to further modify the bootloader -profile. It is possible to pass a single function instead of a list. - -If the INSTALLER argument is used, then this gexp procedure will be called to -install the efi-bootloader-profile. Otherwise the installer of the -FINAL-BOOTLOADER will be called. - -If the DISK-IMAGE-INSTALLER is used, then this gexp procedure will be called -to install the efi-bootloader-profile into a disk image. Otherwise the -disk-image-installer of the FINAL-BOOTLOADER will be called." - (bootloader - (inherit final-bootloader) - (name "efi-bootloader-chain") - (package - (efi-bootloader-profile (cons (bootloader-package final-bootloader) - packages) - files - (if (list? hooks) - hooks - (list hooks)))) - (installer - (or installer - (bootloader-installer final-bootloader))) - (disk-image-installer - (or disk-image-installer - (bootloader-disk-image-installer final-bootloader))))) diff --git a/gnu/bootloader/u-boot.scm b/gnu/bootloader/u-boot.scm index 2d351c9dc2..264138249b 100644 --- a/gnu/bootloader/u-boot.scm +++ b/gnu/bootloader/u-boot.scm @@ -28,7 +28,10 @@ (define-module (gnu bootloader u-boot) #:use-module (gnu bootloader) #:use-module (gnu bootloader extlinux) #:use-module (gnu packages bootloaders) + #:use-module (gnu packages raspberry-pi) + #:use-module (gnu system boot) #:use-module (guix gexp) + #:use-module (guix utils) #:export (u-boot-a20-olinuxino-lime-bootloader u-boot-a20-olinuxino-lime2-bootloader u-boot-a20-olinuxino-micro-bootloader @@ -49,6 +52,10 @@ (define-module (gnu bootloader u-boot) u-boot-puma-rk3399-bootloader u-boot-rock64-rk3328-bootloader u-boot-rockpro64-rk3399-bootloader + u-boot-rpi-2-bootloader + u-boot-rpi-3-bootloader + u-boot-rpi-4-bootloader + u-boot-rpi-bootloader u-boot-sifive-unmatched-bootloader u-boot-qemu-riscv64-bootloader u-boot-starfive-visionfive2-bootloader @@ -231,3 +238,66 @@ (define-u-bootloader-copy u-boot-ts7970-q-2g-1000mhz-c-bootloader (define-u-bootloader-copy u-boot-qemu-riscv64-bootloader u-boot-qemu-riscv64 "u-boot.bin") + + +;;; +;;; Raspberry Pi bootloader definitions. +;;; + +(define (rpi-config 64bit?) + "Raspberry Pi config.txt which includes a user-specified custom.txt." + (plain-file "config.txt" + (string-join + (list (string-append "arm_64bit=" (if 64bit? "1" "0")) + "enable_uart=1" + "kernel=u-boot.bin" + "include custom.txt") + #\newline + 'suffix))) + +(define (install-rpi u-boot-32 u-boot-64) + "Install the U-Boot from U-BOOT-64 for a 64-bit target, if available. +Otherwise install using U-BOOT-32." + (lambda* (#:key bootloader-config #:allow-other-keys . args) + (with-targets (bootloader-configuration-targets bootloader-config) + ('install (apply install-extlinux-config args)) + (('firmware => (firmware :path)) + (let* ((32? (bootloader-configuration-32bit? bootloader-config)) + (64bit? (and (not 32?) (target-64bit?) u-boot-64))) + #~(with-directory-excursion #$firmware + (atomic-copy #$(file-append (if 64bit? u-boot-64 u-boot-32) + "/libexec/u-boot.bin") + "u-boot.bin") + (atomic-copy #$(rpi-config 64bit?) "config.txt"))))))) + +(define* (make-u-boot-rpi-bootloader #:key u-boot-32 u-boot-64) + "Make a Raspberry Pi bootloader using either U-BOOT-32 or U-BOOT-64." + (bootloader (name 'u-boot) + (default-targets + (list (bootloader-target (type 'install) + (offset 'firmware) + (path "extlinux")) + (bootloader-target (type 'firmware) + (offset 'root) + (path "boot")))) + (installer (install-rpi u-boot-32 u-boot-64)))) + +;; These neither install firmware nor device-tree files for the Raspberry Pi. +;; They just assume them to be existing in 'install in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. +;; They can be used with either extlinux or as UEFI firmware, alongside +;; e.g. GRUB. +(define u-boot-rpi-2-bootloader + (make-u-boot-rpi-bootloader #:u-boot-32 u-boot-rpi-2)) + +(define u-boot-rpi-3-bootloader + (make-u-boot-rpi-bootloader #:u-boot-32 u-boot-rpi-3-32b + #:u-boot-64 u-boot-rpi-arm64)) + +(define u-boot-rpi-4-bootloader + (make-u-boot-rpi-bootloader #:u-boot-32 u-boot-rpi-4-32b + #:u-boot-64 u-boot-rpi-arm64)) + +;; Usable for any 64-bit Raspberry Pi. +(define u-boot-rpi-bootloader + (make-u-boot-rpi-bootloader #:u-boot-64 u-boot-rpi-arm64)) diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 00b502aaee..e08f471a97 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -1451,40 +1451,8 @@ (define-public u-boot-pinebook-pro-rk3399 (modify-inputs (package-inputs base) (append arm-trusted-firmware-rk3399)))))) -(define*-public (make-u-boot-bin-package u-boot-package - #:key - (u-boot-bin "u-boot.bin")) - "Return a package with a single U-BOOT-BIN file from the U-BOOT-PACKAGE. -The package name will be that of the U-BOOT package suffixed with \"-bin\"." - (package - (name (string-append (package-name u-boot-package) "-bin")) - (version (package-version u-boot-package)) - (source #f) - (build-system trivial-build-system) - (arguments - (list - #:builder - (with-imported-modules '((guix build utils)) - #~(begin - (use-modules (guix build utils)) - (mkdir #$output) - (symlink (search-input-file %build-inputs - (string-append "libexec/" #$u-boot-bin)) - (string-append #$output "/" #$u-boot-bin)))))) - (inputs (list u-boot-package)) - (home-page (package-home-page u-boot-package)) - (synopsis (package-synopsis u-boot-package)) - (description (string-append - (package-description u-boot-package) - "\n\n" - (format #f - "This package only contains the file ~a." - u-boot-bin))) - (license (package-license u-boot-package)))) - -(define-public %u-boot-rpi-efi-configs - '("CONFIG_OF_EMBED" - "CONFIG_OF_BOARD=y")) +;; get dtbs from firmware to support dtoverlays +(define-public %u-boot-rpi-configs '("CONFIG_OF_EMBED" "CONFIG_OF_BOARD=y")) (define %u-boot-rpi-description-32-bit "This is a 32-bit build of U-Boot.") @@ -1493,76 +1461,26 @@ (define %u-boot-rpi-description-64-bit "This is a common 64-bit build of U-Boot for all 64-bit capable Raspberry Pi variants.") -(define %u-boot-rpi-efi-description - "It allows network booting and uses the device-tree from the firmware, -allowing the usage of overlays. It can act as an EFI firmware for the -grub-efi-netboot-removable-bootloader.") - -(define %u-boot-rpi-efi-description-32-bit - (string-append %u-boot-rpi-efi-description " " - %u-boot-rpi-description-32-bit)) - (define-public u-boot-rpi-2 (make-u-boot-package "rpi_2" "arm-linux-gnueabihf" + #:configs %u-boot-rpi-configs #:append-description %u-boot-rpi-description-32-bit)) (define-public u-boot-rpi-3-32b (make-u-boot-package "rpi_3_32b" "arm-linux-gnueabihf" + #:configs %u-boot-rpi-configs #:append-description %u-boot-rpi-description-32-bit)) (define-public u-boot-rpi-4-32b (make-u-boot-package "rpi_4_32b" "arm-linux-gnueabihf" + #:configs %u-boot-rpi-configs #:append-description %u-boot-rpi-description-32-bit)) (define-public u-boot-rpi-arm64 (make-u-boot-package "rpi_arm64" "aarch64-linux-gnu" + #:configs %u-boot-rpi-configs #:append-description %u-boot-rpi-description-64-bit)) -(define-public u-boot-rpi-2-efi - (make-u-boot-package "rpi_2" "arm-linux-gnueabihf" - #:name-suffix "-efi" - #:configs %u-boot-rpi-efi-configs - #:append-description %u-boot-rpi-efi-description-32-bit)) - -(define-public u-boot-rpi-3-32b-efi - (make-u-boot-package "rpi_3_32b" "arm-linux-gnueabihf" - #:name-suffix "-efi" - #:configs %u-boot-rpi-efi-configs - #:append-description %u-boot-rpi-efi-description-32-bit)) - -(define-public u-boot-rpi-4-32b-efi - (make-u-boot-package "rpi_4_32b" "arm-linux-gnueabihf" - #:name-suffix "-efi" - #:configs %u-boot-rpi-efi-configs - #:append-description %u-boot-rpi-efi-description-32-bit)) - -(define-public u-boot-rpi-arm64-efi - (make-u-boot-package "rpi_arm64""aarch64-linux-gnu" - #:name-suffix "-efi" - #:configs %u-boot-rpi-efi-configs - #:append-description (string-append - %u-boot-rpi-efi-description " " - %u-boot-rpi-description-64-bit))) - -(define-public u-boot-rpi-2-bin (make-u-boot-bin-package u-boot-rpi-2)) - -(define-public u-boot-rpi-3_32b-bin (make-u-boot-bin-package u-boot-rpi-3-32b)) - -(define-public u-boot-rpi-4_32b-bin (make-u-boot-bin-package u-boot-rpi-4-32b)) - -(define-public u-boot-rpi-arm64-bin (make-u-boot-bin-package u-boot-rpi-arm64)) - -(define-public u-boot-rpi-2-efi-bin (make-u-boot-bin-package u-boot-rpi-2-efi)) - -(define-public u-boot-rpi-3-32b-efi-bin - (make-u-boot-bin-package u-boot-rpi-3-32b-efi)) - -(define-public u-boot-rpi-4-32b-efi-bin - (make-u-boot-bin-package u-boot-rpi-4-32b-efi)) - -(define-public u-boot-rpi-arm64-efi-bin - (make-u-boot-bin-package u-boot-rpi-arm64-efi)) - (define u-boot-ts-mx6 ;; There is no release; use the latest commit of the ;; 'imx_v2015.04_3.14.52_1.1.0_ga' branch. diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 216c74cb9c..88dbc2cf6b 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -19,8 +19,6 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages raspberry-pi) - #:use-module (gnu bootloader) - #:use-module (gnu bootloader grub) #:use-module (gnu packages) #:use-module (gnu packages admin) #:use-module (gnu packages algebra) @@ -329,22 +327,6 @@ (define (make-raspi-bcm28-dtbs linux) (format #f "The device-tree files for Raspberry Pi models from ~a." (package-name linux))))) -(define-public grub-efi-bootloader-chain-raspi-64 - ;; A bootloader capable to boot a Raspberry Pi over network via TFTP or from - ;; a local storage like a micro SD card. It neither installs firmware nor - ;; device-tree files for the Raspberry Pi. It just assumes them to be - ;; existing in boot/efi in the same way that some UEFI firmware with ACPI - ;; data is usually assumed to be existing on PCs. It creates firmware - ;; configuration files and a bootloader-chain with U-Boot to provide an EFI - ;; API for the final GRUB bootloader. It also serves as a blue-print to - ;; create an a custom bootloader-chain with firmware and device-tree - ;; packages or files. - (efi-bootloader-chain grub-efi-netboot-removable-bootloader - #:packages (list u-boot-rpi-arm64-efi-bin) - #:files (list %raspi-config-txt - %raspi-bcm27-dtb-txt - %raspi-u-boot-bootloader-txt))) - (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig diff --git a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl index 1baca02491..85476854f3 100644 --- a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl +++ b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl @@ -25,14 +25,21 @@ (operating-system (host-name "raspberrypi-guix") (timezone "Europe/Berlin") - (bootloader (bootloader-configuration - (bootloader grub-efi-bootloader-chain-raspi-64) - (targets (list "/boot/efi")) - (theme (grub-theme - (resolution '(1920 . 1080)) - (image (file-append - %artwork-repository - "/grub/GuixSD-fully-black-16-9.svg")))))) + (bootloader (list (bootloader-configuration + (bootloader u-boot-rpi-bootloader) + (targets (list (bootloader-target + (type 'install) + (path "/boot/efi"))))) + (bootloader-configuration + (bootloader grub-efi-bootloader) + (targets (list (bootloader-target + (type 'esp) + (path "/boot/efi")))) + (theme + (grub-theme + (resolution '(1920 . 1080)) + (image (file-append %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg"))))))) (kernel-arguments '("ip=dhcp")) (kernel (customize-linux #:linux linux-libre-arm64-generic #:extra-version "arm64-generic-netboot" diff --git a/gnu/system/examples/raspberry-pi-64.tmpl b/gnu/system/examples/raspberry-pi-64.tmpl index 414d8ac7a5..d5b90b9705 100644 --- a/gnu/system/examples/raspberry-pi-64.tmpl +++ b/gnu/system/examples/raspberry-pi-64.tmpl @@ -24,14 +24,16 @@ (operating-system (host-name "raspberrypi-guix") (timezone "Europe/Berlin") - (bootloader (bootloader-configuration - (bootloader grub-efi-bootloader-chain-raspi-64) - (targets (list "/boot/efi")) - (theme (grub-theme - (resolution '(1920 . 1080)) - (image (file-append - %artwork-repository - "/grub/GuixSD-fully-black-16-9.svg")))))) + (bootloader (list (bootloader-configuration + (bootloader u-boot-rpi-bootloader) + (targets (list (bootloader-target + (type 'install) + (path "/boot/efi")))) + (theme + (grub-theme + (resolution '(1920 . 1080)) + (image (file-append %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg"))))))) (kernel (customize-linux #:linux linux-libre-arm64-generic ;; It is possible to use a specific defconfig ;; file, for example the "bcmrpi3_defconfig" with From patchwork Tue Sep 24 18:29:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31385 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id A49EA27BBEC; Tue, 24 Sep 2024 21:19:05 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 146F627BBE2 for ; Tue, 24 Sep 2024 21:19:04 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stBzh-0004Io-1D; Tue, 24 Sep 2024 16:18:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stBzf-0004CU-Ft for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:43 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stBzf-0002kP-4L for guix-patches@gnu.org; Tue, 24 Sep 2024 16:18:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=+yWT3QAq4NZ/1EkKuxwEIMyLgBYvYwT2RRRZ3Tf9F4Y=; b=rec78/x5sQlsjsBw1NBmyZt6Sy+7aSXn2ukQBmugwAFJi86qqAP+e3CmXh/a/852QnGYMN0dVnqsQQleQ0VW11MmmffJ0F5dSkDaZ/QTuWUs8Yg6XzI4zcFC9B5hqyha+eU69w60LQ6PHIqF6HNTzGFBbp7ln1pXEkKi9cMLvhRwtPAQX88K6mqVvBZBxCFbRnfBz07XZlGFAIFBex6Ck1G9ash2Pfadkr1oLZkLM9dEoZuoHr0KfW1hhcThowvtrHMkI5mFBcOx2Qm7/C9yIV7vS+HbTDM2biKVyAb8JJWaloJqfE0OBsO4+C65eZYUVAnlnw7jIxwc4mWaOh8D6A==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stC03-0004n8-RR; Tue, 24 Sep 2024 16:19:07 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 10/12] gnu: tests: Update tests to new targets system. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: maxim.cournoyer@gmail.com, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:19:07 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Maxim Cournoyer X-Debbugs-Original-Xcc: Maxim Cournoyer Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720914518377 (code B ref 72457); Tue, 24 Sep 2024 20:19:07 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:19:05 +0000 Received: from localhost ([127.0.0.1]:38438 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzz-0004m3-Sw for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:19:05 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:59577 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzf-0004ik-59 for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202616; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+yWT3QAq4NZ/1EkKuxwEIMyLgBYvYwT2RRRZ3Tf9F4Y=; b=p8hqNfwgHb7heDorFUFysrc2BOvocZBUw8D0iB1QMZ2LiAl4+IeouVd0dmHE/jSiOmCY4s lTOOZ7DKIZrZrnnRORKADLlhnfYRicI2rGZ4uFvxk7ZPXqwGj49ALIx33pnKnz4WJqkifM CZr3FFeplapfz87mqNuq7dQgQN1+yEwEzBWYWLrdCBJVbPPRP3LN73xGlv9K9MIg5orClh jPR1ftamECh4x/DLwqaBSvR+8e26Xl+nykAcs/WMAXKosrX9hnmJl4DByH9gH0+W0jmf7+ KsWifKtRLqH957TwZPueoBP2Xi9vSm4jxMLifDfag1Re5S1HbozAfBoYzIRLFg== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id 82da6bc8 (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:16 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:17 +0200 Message-ID: <8f9afe51ef5ba27ffb7c9d66ee990e971a68f98f.1727201267.git.herman@rimm.ee> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter * gnu/services/virtualization.scm (%virtual-build-machine-operating-system): Remove bootloader. (%hurd-vm-operating-system): Remove targets. * gnu/system/hurd.scm (%hurd-default-operating-system): Remove targets. * gnu/system/images/wsl2.scm (dummy-bootloader): Delete variable. (wsl-os)[bootloader]: Don't provide field. * gnu/system/vm.scm (virtualized-operating-system): Don't provide bootloader. * gnu/tests.scm (%simple-os), gnu/tests/ganeti.scm (%ganeti-os), gnu/tests/image.scm (%simple-efi-os), gnu/tests/nfs.scm (%base-os), gnu/tests/telephony.scm (make-jami-os), gnu/tests/vnc.scm (%xvnc-os): Update bootloader targets. * gnu/tests/install.scm (%minimal-os, %minimal-extlinux-os, %minimal-os-on-vda, %separate-home-os, %separate-store-os, %raid-root-os, %encrypted-root-os, %lvm-separate-home-os, %encrypted-home-os, %encrypted-home-os-key-file, %encrypted-root-not-boot-os, %btrfs-root-os-source, %btrfs-raid-root-os-source, %btrfs-root-on-subvolume-os, %btrfs-raid10-root-os, %jfs-root-os, %f2fs-root-os, %xfs-root-os): Update bootloader targets. (%btrfs-raid10-root-os): Use multiple bootloaders. Change-Id: I3d66a839a9b2a73b8b65946950728b1e0155ca1e --- gnu/services/virtualization.scm | 11 ++--- gnu/system/hurd.scm | 4 +- gnu/system/images/wsl2.scm | 14 +----- gnu/system/vm.scm | 11 ----- gnu/tests.scm | 4 +- gnu/tests/ganeti.scm | 4 +- gnu/tests/image.scm | 4 +- gnu/tests/install.scm | 78 ++++++++++++++++++++++++--------- gnu/tests/nfs.scm | 4 +- gnu/tests/telephony.scm | 4 +- gnu/tests/vnc.scm | 4 +- tests/boot-parameters.scm | 2 +- 12 files changed, 82 insertions(+), 62 deletions(-) diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm index d87e494348..f698532a94 100644 --- a/gnu/services/virtualization.scm +++ b/gnu/services/virtualization.scm @@ -1191,17 +1191,13 @@ (define %minimal-vm-syslog-config (define %virtual-build-machine-operating-system (operating-system (host-name "build-machine") - (locale "en_US.utf8") (locale-definitions ;; Save space by providing only one locale. (list (locale-definition (name "en_US.utf8") (source "en_US") (charset "UTF-8")))) - - (bootloader (bootloader-configuration ;unused - (bootloader grub-minimal-bootloader) - (targets '("/dev/null")))) + ;; no bootloader (file-systems (cons (file-system ;unused (mount-point "/") (device "none") @@ -1624,9 +1620,8 @@ (define %hurd-vm-operating-system (host-name "childhurd") (timezone "Europe/Amsterdam") (bootloader (bootloader-configuration - (bootloader grub-minimal-bootloader) - (targets '("/dev/vda")) - (timeout 0))) + (bootloader grub-minimal-bootloader) + (timeout 0))) (packages (cons* gdb-minimal (operating-system-packages %hurd-default-operating-system))) diff --git a/gnu/system/hurd.scm b/gnu/system/hurd.scm index 6d6a20cf57..3669fd3c9a 100644 --- a/gnu/system/hurd.scm +++ b/gnu/system/hurd.scm @@ -119,9 +119,7 @@ (define %hurd-default-operating-system (kernel %hurd-default-operating-system-kernel) (kernel-arguments '()) (hurd hurd) - (bootloader (bootloader-configuration - (bootloader grub-minimal-bootloader) - (targets '("/dev/vda")))) + (bootloader (bootloader-configuration (bootloader grub-minimal-bootloader))) (initrd #f) (initrd-modules '()) (firmware '()) diff --git a/gnu/system/images/wsl2.scm b/gnu/system/images/wsl2.scm index d9aaa1a271..1501cb9a90 100644 --- a/gnu/system/images/wsl2.scm +++ b/gnu/system/images/wsl2.scm @@ -127,16 +127,6 @@ (define dummy-package (description #f) (license (fsdg-compatible "dummy")))) -(define dummy-bootloader - (bootloader - (name 'dummy-bootloader) - (package dummy-package) - (configuration-file "/dev/null") - (configuration-file-generator - (lambda (. _rest) - (plain-file "dummy-bootloader" ""))) - (installer #~(const #t)))) - (define dummy-kernel dummy-package) (define (dummy-initrd . _rest) @@ -146,9 +136,7 @@ (define-public wsl-os (operating-system (host-name "gnu") (timezone "Etc/UTC") - (bootloader - (bootloader-configuration - (bootloader dummy-bootloader))) + ;; no bootloader (kernel dummy-kernel) (initrd dummy-initrd) (initrd-modules '()) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index a2743453e7..be12ae6b6c 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -172,17 +172,6 @@ (define* (virtualized-operating-system os (operating-system (inherit os) - ;; XXX: Until we run QEMU with UEFI support (with the OVMF firmware), - ;; force the traditional i386/BIOS method. - ;; See . - (bootloader (bootloader-configuration - (inherit (operating-system-bootloader os)) - (bootloader - (if (target-riscv64? (or target system)) - u-boot-qemu-riscv64-bootloader - grub-bootloader)) - (targets '("/dev/vda")))) - (initrd (lambda (file-systems . rest) (apply (operating-system-initrd os) file-systems diff --git a/gnu/tests.scm b/gnu/tests.scm index 5ff9db82fc..f46ccf5174 100644 --- a/gnu/tests.scm +++ b/gnu/tests.scm @@ -237,7 +237,9 @@ (define %simple-os (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets '("/dev/sdX")))) + (targets (list (bootloader-target + (type 'disk) + (device"/dev/sdX")))))) (file-systems (cons (file-system (device (file-system-label "my-root")) (mount-point "/") diff --git a/gnu/tests/ganeti.scm b/gnu/tests/ganeti.scm index 29eb354044..789879b26f 100644 --- a/gnu/tests/ganeti.scm +++ b/gnu/tests/ganeti.scm @@ -40,7 +40,9 @@ (define %ganeti-os (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets '("/dev/vda")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vda")))))) (file-systems (cons (file-system (device (file-system-label "my-root")) (mount-point "/") diff --git a/gnu/tests/image.scm b/gnu/tests/image.scm index be6852cae0..8d960cf7b8 100644 --- a/gnu/tests/image.scm +++ b/gnu/tests/image.scm @@ -55,7 +55,9 @@ (define %simple-efi-os (inherit %simple-os) (bootloader (bootloader-configuration (bootloader grub-efi-bootloader) - (targets '("/boot/efi")))))) + (targets (list (bootloader-target + (type 'esp) + (path "/boot/efi")))))))) ;; An MBR disk image with a single ext4 partition. (define i1 diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm index 57b2a77414..87eb2bf7fe 100644 --- a/gnu/tests/install.scm +++ b/gnu/tests/install.scm @@ -103,7 +103,9 @@ (define-os-with-source (%minimal-os %minimal-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons (file-system (device (file-system-label "my-root")) @@ -141,7 +143,9 @@ (define-os-with-source (%minimal-extlinux-os (bootloader (bootloader-configuration (bootloader extlinux-gpt-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons (file-system (device (file-system-label "my-root")) @@ -434,7 +438,9 @@ (define-os-with-source (%minimal-os-on-vda %minimal-os-on-vda-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vda")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vda")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons (file-system (device (file-system-label "my-root")) @@ -510,7 +516,9 @@ (define-os-with-source (%separate-home-os %separate-home-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets '("/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons* (file-system (device (file-system-label "my-root")) @@ -565,7 +573,9 @@ (define-os-with-source (%separate-store-os %separate-store-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons* (file-system (device (file-system-label "root-fs")) @@ -642,7 +652,9 @@ (define-os-with-source (%raid-root-os %raid-root-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) ;; Add a kernel module for RAID-1 (aka. "mirror"). @@ -725,7 +737,9 @@ (define-os-with-source (%encrypted-root-os %encrypted-root-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets '("/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) ;; Note: Do not pass "console=ttyS0" so we can use our passphrase prompt ;; detection logic in 'enter-luks-passphrase'. @@ -858,7 +872,9 @@ (define-os-with-source (%lvm-separate-home-os %lvm-separate-home-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (mapped-devices (list (mapped-device @@ -943,7 +959,9 @@ (define-os-with-source (%encrypted-home-os %encrypted-home-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) ;; Note: Do not pass "console=ttyS0" so we can use our passphrase prompt ;; detection logic in 'enter-luks-passphrase'. @@ -1070,7 +1088,9 @@ (define-os-with-source (%encrypted-home-os-key-file (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))) (extra-initrd "/key-file.cpio"))) (kernel-arguments '("console=ttyS0")) @@ -1130,7 +1150,9 @@ (define-os-with-source (%encrypted-root-not-boot-os (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (mapped-devices (list (mapped-device (source @@ -1232,7 +1254,9 @@ (define-os-with-source (%btrfs-root-os %btrfs-root-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons (file-system (device (file-system-label "my-root")) @@ -1306,7 +1330,9 @@ (define-os-with-source (%btrfs-raid-root-os %btrfs-raid-root-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons (file-system @@ -1374,7 +1400,9 @@ (define-os-with-source (%btrfs-root-on-subvolume-os (locale "en_US.UTF-8") (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons* (file-system (device (file-system-label "btrfs-pool")) @@ -1464,9 +1492,13 @@ (define-os-with-source (%btrfs-raid10-root-os (host-name "hurd") (timezone "Europe/Paris") (locale "en_US.UTF-8") - (bootloader (bootloader-configuration - (bootloader grub-bootloader) - (targets (list "/dev/vdb" "/dev/vdc" "/dev/vdd" "/dev/vde")))) + (bootloader (map (lambda (block-device) + (bootloader-configuration + (bootloader grub-bootloader) + (targets (list (bootloader-target + (type 'disk) + (device block-device)))))) + '("/dev/vdb" "/dev/vdc" "/dev/vdd" "/dev/vde"))) (kernel-arguments '("console=ttyS0")) (file-systems (cons* (file-system (device (uuid "16ff18e2-eb41-4324-8df5-80d3b53c411b")) @@ -1575,7 +1607,9 @@ (define-os-with-source (%jfs-root-os %jfs-root-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons (file-system (device (file-system-label "my-root")) @@ -1648,7 +1682,9 @@ (define-os-with-source (%f2fs-root-os %f2fs-root-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons (file-system (device (file-system-label "my-root")) @@ -1721,7 +1757,9 @@ (define-os-with-source (%xfs-root-os %xfs-root-os-source) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/vdb")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/vdb")))))) (kernel-arguments '("console=ttyS0")) (file-systems (cons (file-system (device (file-system-label "my-root")) diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm index 0d9972e0e9..2f97126df7 100644 --- a/gnu/tests/nfs.scm +++ b/gnu/tests/nfs.scm @@ -51,7 +51,9 @@ (define %base-os (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets '("/dev/sdX")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/sdX")))))) (file-systems %base-file-systems) (users %base-user-accounts) (packages (cons* diff --git a/gnu/tests/telephony.scm b/gnu/tests/telephony.scm index f03ea963f7..ee858d9c91 100644 --- a/gnu/tests/telephony.scm +++ b/gnu/tests/telephony.scm @@ -90,7 +90,9 @@ (define* (make-jami-os #:key provisioning? partial?) (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets '("/dev/sdX")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/sdX")))))) (file-systems (cons (file-system (device (file-system-label "my-root")) (mount-point "/") diff --git a/gnu/tests/vnc.scm b/gnu/tests/vnc.scm index ab1c2749f3..cba9c565e0 100644 --- a/gnu/tests/vnc.scm +++ b/gnu/tests/vnc.scm @@ -51,7 +51,9 @@ (define %xvnc-os (locale "en_US.UTF-8") (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets '("/dev/sdX")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/sdX")))))) (file-systems (cons (file-system (device (file-system-label "my-root")) (mount-point "/") diff --git a/tests/boot-parameters.scm b/tests/boot-parameters.scm index e1dc4620c3..f3ba76e998 100644 --- a/tests/boot-parameters.scm +++ b/tests/boot-parameters.scm @@ -65,7 +65,7 @@ (define %root-path "/") (define %grub-boot-parameters (boot-parameters - (bootloader-name 'grub) + (bootloader-name '(grub)) (root-device %default-root-device) (label %default-label) (kernel %default-kernel) From patchwork Tue Sep 24 18:29:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31395 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 155B727BBEA; Tue, 24 Sep 2024 21:20:29 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 6310327BBE2 for ; Tue, 24 Sep 2024 21:20:28 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stC1C-0006Lx-Um; Tue, 24 Sep 2024 16:20:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stC0Z-0005qe-IP for guix-patches@gnu.org; Tue, 24 Sep 2024 16:19:40 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stC0X-0002vd-Fx; Tue, 24 Sep 2024 16:19:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=Jxizlh1m4PsrNo/HNbkyg0PJqjHTRVuFUAJvFuP76Ko=; b=AlkNM3U4Xvj+OcgxsYNGfc4VaRQx7Gb91Xta+7pdZ/fzPzlViDKU+rtGMuNKxfi4r+oolxjzaklTTgZ/Jd1ylWvC1xu29sZtLrUUfUPrXzYrmMcG1SnR2xN8ddzfzraW5tyt5dHaEeY688Ev38CdDXyytLQx3L24LlcLXO+bCgA/n/ycJpr5LWAKwVpOCXJ6vXTRke2kj1EGb9WI/BoKaQTfQBEY/uEVapp2izTZWdeBNlxBb5YQqy1bxI8oNg+0MwK6hSnLzuG7hPKObwzk3rGjQ2/W95CZOYFNbf5falPELV0HJlI1hVi3d/rfjWiinrHZN8OxCQfzKC7znTRy7Q==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stC0w-0004pb-8W; Tue, 24 Sep 2024 16:20:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 11/12] gnu: system: Update examples. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: pelzflorian@pelzflorian.de, ludo@gnu.org, maxim.cournoyer@gmail.com, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:20:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Florian Pelz , Ludovic =?utf-8?q?Court=C3=A8s?= , Maxim Cournoyer X-Debbugs-Original-Xcc: Florian Pelz , Ludovic =?utf-8?q?Court=C3=A8s?= , Maxim Cournoyer Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720915018468 (code B ref 72457); Tue, 24 Sep 2024 20:20:02 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:19:10 +0000 Received: from localhost ([127.0.0.1]:38469 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stC05-0004nW-0J for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:19:09 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:59577 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzg-0004ik-U5 for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202617; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Jxizlh1m4PsrNo/HNbkyg0PJqjHTRVuFUAJvFuP76Ko=; b=hWGKkWac6OlU4gkQt43hJYdL/gOFrz3R9+ovFHpzkVPISwFODaaIQYMQKtQxa9exOSQc9N WRO0Eb3KaqVl9gNZRnpUrdOGAQ9PVy/EDKGH5dNc6wOPdKXloUl8yryqczeoGNYxhz1RQh B5ve3fztPvAiJWVnXTfn7rg6WdLyyTa1BSAzhDe7N+2xFSbIapARy2SbbGhis/q9zdeUhs 6YMi4mxxnpQ1Se78m0aDWaysmk7YdKEVh2MenkYmU7tkXQyxNc888rcGEAd55KlBaRa1N1 t7AETjx2ssXY7nsUDJtNjTxtTeTV6Y+SKumY7oOpyIyI0QEtxyvKoIhkAT4fhw== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id 0553e8fe (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:17 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:18 +0200 Message-ID: X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter * gnu/system/examples/asus-c201.tmpl (bootloader): Use new depthcharge bootloader name scheme and update to new target system. * gnu/system/examples/bare-bones.tmpl (bootloader), gnu/system/examples/bare-hurd.tmpl (bootloader), gnu/system/examples/beaglebone-black.tmpl (bootloader), gnu/system/examples/desktop.tmpl (bootloader), gnu/system/examples/lightweight-desktop.tmpl (bootloader), gnu/system/examples/plasma.tmpl (bootloader): Use new target system. * gnu/system/examples/docker-image.tmpl (bootloader): Delete. * gnu/system/examples/vm-image.tmpl (bootloader): Use auto image target. Change-Id: I3675f17ae9cd94cff99328762600fb4e491bc9f2 --- gnu/system/examples/asus-c201.tmpl | 6 ++++-- gnu/system/examples/bare-bones.tmpl | 7 +++++-- gnu/system/examples/bare-hurd.tmpl | 4 +++- gnu/system/examples/beaglebone-black.tmpl | 4 +++- gnu/system/examples/desktop.tmpl | 4 +++- gnu/system/examples/docker-image.tmpl | 6 ++---- gnu/system/examples/lightweight-desktop.tmpl | 4 +++- gnu/system/examples/plasma.tmpl | 4 +++- gnu/system/examples/vm-image.tmpl | 5 ++--- 9 files changed, 28 insertions(+), 16 deletions(-) diff --git a/gnu/system/examples/asus-c201.tmpl b/gnu/system/examples/asus-c201.tmpl index 019111c167..eec185eebf 100644 --- a/gnu/system/examples/asus-c201.tmpl +++ b/gnu/system/examples/asus-c201.tmpl @@ -14,8 +14,10 @@ ;; Assuming /dev/mmcblk0p1 is the kernel partition, and ;; "my-root" is the label of the target root file system. (bootloader (bootloader-configuration - (bootloader depthcharge-bootloader) - (targets '("/dev/mmcblk0p1")))) + (bootloader depthcharge-veyron-speedy-bootloader) + (targets (list (bootloader-target + (type 'part) + (device "/dev/mmcblk0p1")))))) ;; The ASUS C201PA requires a very particular kernel to boot, ;; as well as the following arguments. diff --git a/gnu/system/examples/bare-bones.tmpl b/gnu/system/examples/bare-bones.tmpl index 7b6a4b09b0..9eed05f2e0 100644 --- a/gnu/system/examples/bare-bones.tmpl +++ b/gnu/system/examples/bare-bones.tmpl @@ -13,10 +13,13 @@ ;; Boot in "legacy" BIOS mode, assuming /dev/sdX is the ;; target hard disk, and "my-root" is the label of the target - ;; root file system. + ;; root file system. If you're just building an image, the + ;; 'targets' field may be omitted. (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets '("/dev/sdX")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/sdX")))))) ;; It's fitting to support the equally bare bones ‘-nographic’ ;; QEMU option, which also nicely sidesteps forcing QWERTY. (kernel-arguments (list "console=ttyS0,115200")) diff --git a/gnu/system/examples/bare-hurd.tmpl b/gnu/system/examples/bare-hurd.tmpl index 463c7ee798..8dd700cd9d 100644 --- a/gnu/system/examples/bare-hurd.tmpl +++ b/gnu/system/examples/bare-hurd.tmpl @@ -32,7 +32,9 @@ (inherit %hurd-default-operating-system) (bootloader (bootloader-configuration (bootloader grub-minimal-bootloader) - (targets '("/dev/sdX")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/sdX")))))) (file-systems (cons (file-system (device (file-system-label "my-root")) (mount-point "/") diff --git a/gnu/system/examples/beaglebone-black.tmpl b/gnu/system/examples/beaglebone-black.tmpl index 18bbb2723c..397fc2766e 100644 --- a/gnu/system/examples/beaglebone-black.tmpl +++ b/gnu/system/examples/beaglebone-black.tmpl @@ -15,7 +15,9 @@ ;; the label of the target root file system. (bootloader (bootloader-configuration (bootloader u-boot-beaglebone-black-bootloader) - (targets '("/dev/mmcblk1")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/mmcblk1")))))) ;; This module is required to mount the SD card. (initrd-modules (cons "omap_hsmmc" %base-initrd-modules)) diff --git a/gnu/system/examples/desktop.tmpl b/gnu/system/examples/desktop.tmpl index 2d65f22294..30dbdeea31 100644 --- a/gnu/system/examples/desktop.tmpl +++ b/gnu/system/examples/desktop.tmpl @@ -20,7 +20,9 @@ ;; Partition mounted on /boot/efi. (bootloader (bootloader-configuration (bootloader grub-efi-bootloader) - (targets '("/boot/efi")) + (targets (list (bootloader-target + (type 'esp) + (path "/boot/efi")))) (keyboard-layout keyboard-layout))) ;; Specify a mapped device for the encrypted root partition. diff --git a/gnu/system/examples/docker-image.tmpl b/gnu/system/examples/docker-image.tmpl index 7123917af4..6d3114a0bc 100644 --- a/gnu/system/examples/docker-image.tmpl +++ b/gnu/system/examples/docker-image.tmpl @@ -9,6 +9,8 @@ (timezone "Europe/Berlin") (locale "en_US.utf8") + ;; Bootloader can be left blank! + ;; This is where user accounts are specified. The "root" account is ;; implicit, and is initially created with the empty password. (users (cons (user-account @@ -34,10 +36,6 @@ ;; similar services for us. ;; This will be ignored. - (bootloader (bootloader-configuration - (bootloader grub-bootloader) - (targets '("does-not-matter")))) - ;; This will be ignored, too. (file-systems (list (file-system (device "does-not-matter") (mount-point "/") diff --git a/gnu/system/examples/lightweight-desktop.tmpl b/gnu/system/examples/lightweight-desktop.tmpl index c061284ba8..0964238cb0 100644 --- a/gnu/system/examples/lightweight-desktop.tmpl +++ b/gnu/system/examples/lightweight-desktop.tmpl @@ -17,7 +17,9 @@ ;; Partition mounted on /boot/efi. (bootloader (bootloader-configuration (bootloader grub-efi-bootloader) - (targets '("/boot/efi")))) + (targets (list (bootloader-target + (type 'esp) + (path "/boot/efi")))))) ;; Assume the target root file system is labelled "my-root", ;; and the EFI System Partition has UUID 1234-ABCD. diff --git a/gnu/system/examples/plasma.tmpl b/gnu/system/examples/plasma.tmpl index c3850ffe37..a81916ffe9 100644 --- a/gnu/system/examples/plasma.tmpl +++ b/gnu/system/examples/plasma.tmpl @@ -15,7 +15,9 @@ ;; is the label of the target root file system. (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets (list "/dev/sdX")))) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/sdX")))))) (file-systems (cons (file-system (device "my-root") diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl index 589de493b1..050c0bb971 100644 --- a/gnu/system/examples/vm-image.tmpl +++ b/gnu/system/examples/vm-image.tmpl @@ -38,11 +38,10 @@ accounts.\x1b[0m (firmware '()) - ;; Below we assume /dev/vda is the VM's hard disk. - ;; Adjust as needed. + ;; Images automatically get the 'root, 'esp, and 'disk targets configured as + ;; needed. (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets '("/dev/vda")) (terminal-outputs '(console)))) (file-systems (cons (file-system (mount-point "/") From patchwork Tue Sep 24 18:29:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Herman Rimm X-Patchwork-Id: 31396 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id BB47627BBE9; Tue, 24 Sep 2024 21:20:38 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 0980627BBE2 for ; Tue, 24 Sep 2024 21:20:36 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1stC1O-0006jR-Hj; Tue, 24 Sep 2024 16:20:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1stC0a-0005th-Ul for guix-patches@gnu.org; Tue, 24 Sep 2024 16:19:43 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1stC0Y-0002ve-Jm; Tue, 24 Sep 2024 16:19:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=Vv4nB5tUuqfHZMXV94GmNczjec1VMigASYD0ILS5AiM=; b=Hw/03SYYcihv/SinK1Wudlq2CI9L8DLFn/AuN740J4P1uzHHv5l/MyPSZ0VGplN9HzoBAK6S88Jpgrkml76a4ch9PUo01lzY1jNttLx6qTkKhOZ3gVp+AhpTRxmFSgsdtAIU0/XYPXmt2hqmLC765fBPFD5QKWbYGjY5pMqGXcFk4pFcxAeUtqYElQ071xxHvNRNF1ySWCm6yohq70DDseoEKNx7ny8DZHLFSKikzrvJHB/tvjmn4b4tIs6r8dTFaPC2UIm2acZpW/QqN7wT4J4ZwBVsz2ssc4Gvp2rP7F1rTBbCDjFjuxIcLaqiHpw+DqDazyoGUEHL7hc/d7oFyg==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1stC0w-0004pk-MH; Tue, 24 Sep 2024 16:20:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#72457] [PATCH v6 12/12] doc: Update bootloader documentation. Resent-From: Herman Rimm Original-Sender: "Debbugs-submit" Resent-CC: pelzflorian@pelzflorian.de, ludo@gnu.org, maxim.cournoyer@gmail.com, guix-patches@gnu.org Resent-Date: Tue, 24 Sep 2024 20:20:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72457 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 72457@debbugs.gnu.org Cc: Lilah Tascheter , Florian Pelz , Ludovic =?utf-8?q?Court=C3=A8s?= , Maxim Cournoyer X-Debbugs-Original-Xcc: Florian Pelz , Ludovic =?utf-8?q?Court=C3=A8s?= , Maxim Cournoyer Received: via spool by 72457-submit@debbugs.gnu.org id=B72457.172720915118476 (code B ref 72457); Tue, 24 Sep 2024 20:20:02 +0000 Received: (at 72457) by debbugs.gnu.org; 24 Sep 2024 20:19:11 +0000 Received: from localhost ([127.0.0.1]:38474 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stC05-0004np-Tk for submit@debbugs.gnu.org; Tue, 24 Sep 2024 16:19:11 -0400 Received: from 81-205-150-117.fixed.kpn.net ([81.205.150.117]:39007 helo=email.rimm.ee) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1stBzh-0004iX-1M for 72457@debbugs.gnu.org; Tue, 24 Sep 2024 16:18:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rimm.ee; s=herman; t=1727202617; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Vv4nB5tUuqfHZMXV94GmNczjec1VMigASYD0ILS5AiM=; b=U4e/4TFDp0J9Q+zFoKaVHJ7nzLF2XfB0dnsGFDcqIot+ytCtrIqkTKiV6BAeLXdsNfW7J3 RUh8rD+xF2HIJ4psqSBtJafaTKYOAp/w3xCaexe0gS9ZorfOtzb7EdlpW4WUSvIKEfjjtR AuYUctKkDOHwkLAQhLxtyc/zfOiViY5MgaZCukHFreiEegFodJNHrkUrCekWsZ6EnikssC 5wB6spZdonF4MKsKTHSzqItAKzhoUoxGX5sIcZHtcuxfWH/r9wirAuiyzjkg+0vOEMhCku y4JMqNWC8f+WfP4++xfWyY8Z0HeJH9aFL+3nfCrVJR9EQLMZS+jVbbtJ2i5ltQ== Received: by 81-205-150-117.fixed.kpn.net (OpenSMTPD) with ESMTPSA id c473f168 (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Tue, 24 Sep 2024 18:30:17 +0000 (UTC) Date: Tue, 24 Sep 2024 20:29:19 +0200 Message-ID: <4676a2ef790009e00c78f156b0490da6870ed752.1727201267.git.herman@rimm.ee> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Herman Rimm X-ACL-Warn: , Herman Rimm via Guix-patches X-Patchwork-Original-From: Herman Rimm via Guix-patches via From: Herman Rimm Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Lilah Tascheter * doc/guix.texi (Manual Installation)[Proceeding with the Installation]: Offload target reference. (System Installation)[Building the Installation Image]: Don't reference deleted variables. (System Configuration)[Using the Configuration System]: Update example. [operating-system Reference]: Can use multiple bootloaders. [Proceeding with the installation]: Refer to Bootloader Configuration. [Building the Installation Image]: Update example. [Bootloader Configuration]: Update documentation for all bootloaders, and add new ones. Document new fields efi-removable?, 32bit?, and keypair. : New record. : Remove now-unsupported GRUB specifics in linux. Move device documentation and add some for device-mount-point and device-subvol. Fix typo in multiboot-arguments. Document chain-loader for arbitrary bootloaders. [Invoking guix system]: Bootloaders are now reinstalled. Other bootloaders may be used. [Invoking guix deploy]: Update template. Change-Id: I45ac9d5ad3cb491c693e9a4b2f0b44b527478ee7 --- doc/guix.texi | 380 ++++++++++++++++++++++++++++---------------------- 1 file changed, 212 insertions(+), 168 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index a3338b098a..194fbbf69c 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -2529,12 +2529,9 @@ Proceeding with the Installation Make sure the @code{bootloader-configuration} form refers to the targets you want to install GRUB on. It should mention @code{grub-bootloader} if you are installing GRUB in the legacy way, or -@code{grub-efi-bootloader} for newer UEFI systems. For legacy systems, -the @code{targets} field contain the names of the devices, like -@code{(list "/dev/sda")}; for UEFI systems it names the paths to mounted -EFI partitions, like @code{(list "/boot/efi")}; do make sure the paths -are currently mounted and a @code{file-system} entry is specified in -your configuration. +@code{grub-efi-bootloader} for newer UEFI systems. +@xref{Bootloader Configuration} for information on how to format the +@code{targets} field. @item Be sure that your file system labels match the value of their respective @@ -17297,7 +17294,9 @@ Using the Configuration System @lisp (bootloader-configuration (bootloader grub-efi-bootloader) - (targets '("/boot/efi"))) + (targets (list (bootloader-target + (type 'esp) + (path "/boot/efi"))))) @end lisp @xref{Bootloader Configuration}, for more information on the available @@ -17603,8 +17602,10 @@ operating-system Reference List of strings or gexps representing additional arguments to pass on the command-line of the kernel---e.g., @code{("console=ttyS0")}. -@item @code{bootloader} -The system bootloader configuration object. @xref{Bootloader Configuration}. +@item @code{bootloader} (default: '()) +The system bootloader configuration object. Can either be a single +@code{bootloader-configuration} or a list of them, to install multiple or no +bootloaders. @xref{Bootloader Configuration}. @item @code{label} This is the label (a string) as it appears in the bootloader's menu entry. @@ -18799,7 +18800,9 @@ Keyboard Layout (keyboard-layout (keyboard-layout "tr")) ;for the console (bootloader (bootloader-configuration (bootloader grub-efi-bootloader) - (targets '("/boot/efi")) + (targets (list (bootloader-target + (type 'esp) + (path "/boot/efi")))) (keyboard-layout keyboard-layout))) ;for GRUB (services (cons (set-xorg-configuration (xorg-configuration ;for Xorg @@ -42437,18 +42440,8 @@ Bootloader Configuration @cindex EFI, bootloader @cindex UEFI, bootloader @cindex BIOS, bootloader -The bootloader to use, as a @code{bootloader} object. For now -@code{grub-bootloader}, @code{grub-efi-bootloader}, -@code{grub-efi-removable-bootloader}, @code{grub-efi-netboot-bootloader}, -@code{grub-efi-netboot-removable-bootloader}, @code{extlinux-bootloader} -and @code{u-boot-bootloader} are supported. - -@cindex ARM, bootloaders -@cindex AArch64, bootloaders -Available bootloaders are described in @code{(gnu bootloader @dots{})} -modules. In particular, @code{(gnu bootloader u-boot)} contains definitions -of bootloaders for a wide range of ARM and AArch64 systems, using the -@uref{https://www.denx.de/wiki/U-Boot/, U-Boot bootloader}. +The bootloader to use. Available bootloaders, in addition to what +target types they require, are as follows: @itemize @vindex depthcharge-veyron-speedy-bootloader @@ -42457,118 +42450,105 @@ Bootloader Configuration install the kernel blob as a @code{device}, @code{label}, or @code{uuid}. @vindex grub-bootloader -@code{grub-bootloader} allows you to boot in particular Intel-based machines -in ``legacy'' BIOS mode. +@item @code{grub-bootloader} +GRUB2 for BIOS systems. Requires a @code{'disk} target providing either a +@code{device}, @code{label}, or @code{uuid}. If root is mounted over NFS, it +will load its files and the Guix System over +@acronym{PXE, Preboot eXecution Environment}. + +@vindex grub-minimal-bootloader +@item @code{grub-minimal-bootloader} +As above, but using a minimal build of GRUB. @vindex grub-efi-bootloader -@code{grub-efi-bootloader} allows to boot on modern systems using the -@dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should -use if the installation image contains a @file{/sys/firmware/efi} directory -when you boot it on your system. - -@vindex grub-efi-removable-bootloader -@code{grub-efi-removable-bootloader} allows you to boot your system from -removable media by writing the GRUB file to the UEFI-specification location of -@file{/EFI/BOOT/BOOTX64.efi} of the boot directory, usually @file{/boot/efi}. -This is also useful for some UEFI firmwares that ``forget'' their configuration -from their non-volatile storage. Like @code{grub-efi-bootloader}, this can only -be used if the @file{/sys/firmware/efi} directory is available. +@item @code{grub-efi-bootloader} +GRUB2 for "modern" systems using the +@acronym{UEFI, Unified Extensible Firmware Interface}. It requires an +@code{'esp} target providing a mount point @code{path} for the EFI +System Partition. If root is mounted over NFS, a PXE client will load +the boot files and Guix System from a +@acronym{TFTP, Trivial File Transfer Protocol} server, discovered via +@acronym{DHCP, Dynamic Host Configuration Protocol}. + +@vindex extlinux-bootloader +@item @code{extlinux-bootloader} +Extlinux for "legacy" BIOS systems which use an MBR partition table. +It requires a @code{'disk} target providing either a @code{device}, +@code{label}, or @code{uuid}. + +@vindex extlinux-gpt-bootloader +@item @code{extlinux-gpt-bootloader} +This is the same as above, but for systems with a GPT partition table. -@quotation Note -This @emph{will} overwrite the GRUB file from any other operating systems that -also place their GRUB file in the UEFI-specification location; making them -unbootable. -@end quotation +@cindex ARM, bootloaders +@cindex AArch64, bootloaders +@vindex u-boot-a20-olinuxino-lime-bootloader +@vindex u-boot-a20-olinuxino-lime2-bootloader +@vindex u-boot-a20-olinuxino-micro-bootloader +@vindex u-boot-bananapi-m2-ultra-bootloader +@vindex u-boot-beaglebone-black-bootloader +@vindex u-boot-cubietruck-bootloader +@vindex u-boot-firefly-rk3399-bootloader +@vindex u-boot-mx6cuboxi-bootloader +@vindex u-boot-nanopi-r4s-bootloader +@vindex u-boot-nintendo-nes-classic-edition-bootloader +@vindex u-boot-novena-bootloader +@vindex u-boot-orangepi-r1-plus-lts-rk3328-bootloader +@vindex u-boot-orangepi-zero-2w-bootloader +@vindex u-boot-pine64-plus-bootloader +@vindex u-boot-pine64-lts-bootloader +@vindex u-boot-pinebook-bootloader +@vindex u-boot-pinebook-pro-rk3399-bootloader +@vindex u-boot-puma-rk3399-bootloader +@vindex u-boot-qemu-riscv64-bootloader +@vindex u-boot-rock64-rk3328-bootloader +@vindex u-boot-rockpro64-rk3399-bootloader +@vindex u-boot-rpi-2-bootloader +@vindex u-boot-rpi-3-bootloader +@vindex u-boot-rpi-4-bootloader +@vindex u-boot-rpi-bootloader +@vindex u-boot-sifive-unmatched-bootloader +@vindex u-boot-starfive-visionfive2-bootloader +@vindex u-boot-ts7970-q-2g-1000mhz-c-bootloader +@vindex u-boot-wandboard-bootloader +@item U-Boot +U-Boot has individual bootloaders @code{u-boot-board-bootloader} for +each of the following @code{board}s: @code{a20-olinuxino-lime}, +@code{a20-olinuxino-lime2}, @code{a20-olinuxino-micro}, +@code{bananapi-m2-ultra}, @code{beaglebone-black}, @code{cubietruck}, +@code{firefly-rk3399}, @code{mx6cuboxi}, @code{nanopi-r4s}, +@code{nintendo-nes-classic-edition}, @code{novena}, +@code{orangepi-r1-plus-lts-rk3328}, @code{orangepi-zero-2w}, +@code{pine64-plus}, @code{pine64-lts}, @code{pinebook}, +@code{pinebook-pro-rk3399}, @code{puma-rk3399}, @code{qemu-riscv64}, +@code{rock64-rk3328}, @code{rockpro64-rk3399}, @code{rpi-2}, +@code{rpi-3}, @code{rpi-4}, @code{rpi}, @code{sifive-unmatched}, +@code{ts7970-q-2g-1000mhz-c}, and @code{wandboard}. + +Each of these require a @code{'disk} target providing either a @code{device}, +@code{label}, or @code{uuid}, except the @code{ts7970-q-2g-1000mhz-c} +and @code{qemu-riscv64} boards. Here the bootloader just copies U-Boot +to @file{/boot/u-boot.imx} or @file{/boot/u-boot.bin}, respectively. +You should then manually flash it to the SPI flash at the U-Boot prompt. + +By default Guix configures U-Boot to use a generated extlinux config. +However U-Boot can be configured to run a UEFI application, if you want +to chain load another bootloader. +@end itemize -@vindex grub-efi-netboot-bootloader -@code{grub-efi-netboot-bootloader} allows you to boot your system over network -through TFTP@. In combination with an NFS root file system this allows you to -build a diskless Guix system. - -The installation of the @code{grub-efi-netboot-bootloader} generates the -content of the TFTP root directory at @code{targets} (@pxref{Bootloader -Configuration, @code{targets}}) below the sub-directory @file{efi/Guix}, to be -served by a TFTP server. You may want to mount your TFTP server directories -onto the @code{targets} to move the required files to the TFTP server -automatically during installation. - -If you plan to use an NFS root file system as well (actually if you mount the -store from an NFS share), then the TFTP server needs to serve the file -@file{/boot/grub/grub.cfg} and other files from the store (like GRUBs background -image, the kernel (@pxref{operating-system Reference, @code{kernel}}) and the -initrd (@pxref{operating-system Reference, @code{initrd}})), too. All these -files from the store will be accessed by GRUB through TFTP with their normal -store path, for example as -@file{tftp://tftp-server/gnu/store/…-initrd/initrd.cpio.gz}. - -Two symlinks are created to make this possible. For each target in the -@code{targets} field, the first symlink is -@samp{target}@file{/efi/Guix/boot/grub/grub.cfg} pointing to -@file{../../../boot/grub/grub.cfg}, where @samp{target} may be -@file{/boot}. In this case the link is not leaving the served TFTP root -directory, but otherwise it does. The second link is -@samp{target}@file{/gnu/store} and points to @file{../gnu/store}. This -link is leaving the served TFTP root directory. - -The assumption behind all this is that you have an NFS server exporting -the root file system for your Guix system, and additionally a TFTP -server exporting your @code{targets} directories—usually a single -@file{/boot}—from that same root file system for your Guix system. In -this constellation the symlinks will work. - -For other constellations you will have to program your own bootloader -installer, which then takes care to make necessary files from the store -accessible through TFTP, for example by copying them into the TFTP root -directory for your @code{targets}. - -It is important to note that symlinks pointing outside the TFTP root directory -may need to be allowed in the configuration of your TFTP server. Further the -store link exposes the whole store through TFTP@. Both points need to be -considered carefully for security aspects. It is advised to disable any TFTP -write access! - -Please note, that this bootloader will not modify the ‘UEFI Boot Manager’ of -the system. - -Beside the @code{grub-efi-netboot-bootloader}, the already mentioned TFTP and -NFS servers, you also need a properly configured DHCP server to make the booting -over netboot possible. For all this we can currently only recommend you to look -for instructions about @acronym{PXE, Preboot eXecution Environment}. - -If a local EFI System Partition (ESP) or a similar partition with a FAT -file system is mounted in @code{targets}, then symlinks cannot be -created. In this case everything will be prepared for booting from -local storage, matching the behavior of @code{grub-efi-bootloader}, with -the difference that all GRUB binaries are copied to @code{targets}, -necessary for booting over the network. - -@vindex grub-efi-netboot-removable-bootloader -@code{grub-efi-netboot-removable-bootloader} is identical to -@code{grub-efi-netboot-bootloader} with the exception that the -sub-directory @file{efi/boot} will be used instead of @file{efi/Guix} to -comply with the UEFI specification for removable media. +@item @code{targets} +This is a list of @code{bootloader-target} (see below) structures denoting +where the bootloader should install itself. Interpretation of specific target +types and target requirements depend on the specific @code{bootloader} used. @quotation Note -This @emph{will} overwrite the GRUB file from any other operating systems that -also place their GRUB file in the UEFI-specification location; making them -unbootable. +Bootloaders have a set of default targets, that can interact with user-specified +targets. For UEFI bootloaders using the @code{'esp} target, this typically +includes a @code{'vendir} target. If you configure multiple UEFI bootloaders, +you should set different @code{'vendir} target @code{path}s for each, each +@code{offset} from @code{'esp}. @end quotation -@item @code{targets} -This is a list of strings denoting the targets onto which to install the -bootloader. - -The interpretation of targets depends on the bootloader in question. -For @code{grub-bootloader}, for example, they should be device names -understood by the bootloader @command{installer} command, such as -@code{/dev/sda} or @code{(hd0)} (@pxref{Invoking grub-install,,, grub, -GNU GRUB Manual}). For @code{grub-efi-bootloader} and -@code{grub-efi-removable-bootloader} they should be mount -points of the EFI file system, usually @file{/boot/efi}. For -@code{grub-efi-netboot-bootloader}, @code{targets} should be the mount -points corresponding to TFTP root directories served by your TFTP -server. - @item @code{menu-entries} (default: @code{'()}) A possibly empty list of @code{menu-entry} objects (see below), denoting entries to appear in the bootloader menu, in addition to the current @@ -42578,6 +42558,29 @@ Bootloader Configuration The index of the default boot menu entry. Index 0 is for the entry of the current system. +@item @code{efi-removable?} (default: @var{#f}) +Used by all UEFI bootloaders to determine whether they should be installed to +the UEFI standard fallback bootloader path (on x86_64, +@file{/EFI/BOOT/BOOTX64.EFI}). This allows it to be booted from removable media +or otherwise in cases where the system has not been booted from UEFI already. + +@quotation Warning +This will override any other bootloaders installed to the same path! +@end quotation + +@item @code{32bit?} (default: @var{#f}) +Some 64-bit systems require their bootloaders to be 32-bit, including some early +UEFI systems and some Raspberry Pis. If that is the case, and the bootloader +supports it, setting this option will force the bootloader to install as if it +were on a 32-bit system. + +@item @code{keypair} (default: @var{#f}) +Designates a keypair to be used by bootloaders that support some kind of +cryptographic signature, such as UEFI Secure Boot. This must be a pair +@code{'(cert . priv)} of paths to the public key (@code{cert}) and private key +(@code{priv}). The keys these paths point to should be owned by root with 600 +permissions for security purposes. + @item @code{timeout} (default: @code{5}) The number of seconds to wait for keyboard input before booting. Set to 0 to boot immediately, and to -1 to wait indefinitely. @@ -42689,6 +42692,51 @@ Bootloader Configuration @end deftp +@vindex bootloader-target +Configuring bootloader targets uses a specialized record designed for clarity +and to abstract over the varying user-supplied paths bootloaders. Only the +@code{type} field is required; Guix will attempt to extrapolate as needed from +what information you provide, though at least one of @code{path}, @code{device}, +@code{label}, or @code{uuid} is required to do so. + +@deftp {Data Type} bootloader-target +The type of a target as used in @code{bootloader-configuration}. + +@table @asis + +@item @code{type} +What target this record is describing. Must be a symbol, for example +@code{'esp} or @code{'disk}. + +@item @code{path} (default: @var{#f}) +@code{path} denotes a string path, usually interpreted by the bootloader to +signify a mount point (such as in the case of @code{'esp}). This value is +automatically offset from the target denoted by @code{offset}, even if the path +given is absolute. This allows for bootloaders to know what device or partition +a @code{path} is actually stored on, and how to locate it. + +@item @code{offset} (default: @code{'root} when @code{path}, otherwise @var{#f}) +All @code{path} values, even if absolute, are automatically offset from another. +@code{offset} is a symbol denoting which target type the path should be offset +from. This allows for bootloaders to know what device or partition a +@code{path} is actually stored on, and how to locate it. + +@item @code{device} (default: @var{#f}) +@itemx @code{label} (default: @var{#f}) +@itemx @code{uuid} (default: @var{#f}) +These all work as a way of defining some kind of physical device or partition. +Using @code{uuid} and @code{label} to refer to a filesystem's UUID or +label is vastly preferred over using @code{device} to refer to block +devices, as they can vary per boot and may not exist at boot-time. + +@item @code{file-system} (default: @var{#f}) +A string denoting a file system type, as used in @ref{File Systems}. Unless +your filesystem isn't being detected properly, or is unmounted at bootloader +install-time, you shouldn't need to specify this. + +@end table +@end deftp + @cindex dual boot @cindex boot menu Should you want to list additional boot menu entries @i{via} the @@ -42700,6 +42748,8 @@ Bootloader Configuration @lisp (menu-entry (label "The Other Distro") + (device (file-system-label "boot")) + (device-mount-point "/boot") (linux "/boot/old/vmlinux-2.6.32") (linux-arguments '("root=/dev/sda2")) (initrd "/boot/old/initrd")) @@ -42715,6 +42765,29 @@ Bootloader Configuration @item @code{label} The label to show in the menu---e.g., @code{"GNU"}. +@item @code{device} (default: @var{#f}) +The device where any files specified below are to be found. For GRUB, +this is what @dfn{root} (@pxref{root,,, grub, GNU GRUB manual}) is set +to for this menu entry. + +This may be a file system label (a string), a file system UUID (a +bytevector, @pxref{File Systems}), or @code{#f}, in which case +the bootloader will search the device containing the file specified by +the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It +must @emph{not} be an OS device name such as @file{/dev/sda1}. + +@item @code{device-mount-point} (default: @var{#f}) +This is where @code{device} is mounted onto your file system. If provided, it +allows for you to specify full paths for provided files, which will be +automatically realized into paths local to their device. + +This is not necessary if specified files are already referring to files local to +@code{device}, including if they're on your root filesystem. + +@item @code{device-subvol} (default: @var{#f}) +This is a btrfs subvolume name, useful in case you wish to access files from a +btrfs subvolume on a device. @xref{Btrfs file system}. + @item @code{linux} (default: @code{#f}) The Linux kernel image to boot, for example: @@ -42722,17 +42795,6 @@ Bootloader Configuration (file-append linux-libre "/bzImage") @end lisp -For GRUB, it is also possible to specify a device explicitly in the -file path using GRUB's device naming convention (@pxref{Naming -convention,,, grub, GNU GRUB manual}), for example: - -@example -"(hd0,msdos1)/boot/vmlinuz" -@end example - -If the device is specified explicitly as above, then the @code{device} -field is ignored entirely. - @item @code{linux-arguments} (default: @code{'()}) The list of extra Linux kernel command-line arguments---e.g., @code{'("console=ttyS0")}. @@ -42741,16 +42803,6 @@ Bootloader Configuration A G-Expression or string denoting the file name of the initial RAM disk to use (@pxref{G-Expressions}). -@item @code{device} (default: @code{#f}) -The device where the kernel and initrd are to be found---i.e., for GRUB, -@dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}). - -This may be a file system label (a string), a file system UUID (a -bytevector, @pxref{File Systems}), or @code{#f}, in which case -the bootloader will search the device containing the file specified by -the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It -must @emph{not} be an OS device name such as @file{/dev/sda1}. - @item @code{multiboot-kernel} (default: @code{#f}) The kernel to boot in Multiboot-mode (@pxref{multiboot,,, grub, GNU GRUB manual}). When this field is set, a Multiboot menu-entry is generated. @@ -42773,7 +42825,7 @@ Bootloader Configuration To use the new and still experimental @uref{https://darnassus.sceen.net/~hurd-web/rump_kernel/, rumpdisk user-level disk driver} instead of GNU@tie{}Mach's in-kernel IDE driver, -set @code{kernel-arguments} to: +set @code{multiboot-arguments} to: @lisp '("noide") @@ -42796,10 +42848,8 @@ Bootloader Configuration @end lisp @item @code{chain-loader} (default: @code{#f}) -A string that can be accepted by @code{grub}'s @code{chainloader} -directive. This has no effect if either @code{linux} or -@code{multiboot-kernel} fields are specified. The following is an -example of chainloading a different GNU/Linux system. +Varies slightly depending on bootloader. For @code{grub}, this is anything that +the @code{chainloader} directive can accept @lisp (bootloader @@ -43007,10 +43057,6 @@ Invoking guix system supported by the bootloader being used. The next time the system boots, it will use the specified system generation. -The bootloader itself is not being reinstalled when using this -command. Thus, the installed bootloader is used with an updated -configuration file. - The target generation can be specified explicitly by its generation number. For example, the following invocation would switch to system generation 7: @@ -43031,11 +43077,10 @@ Invoking guix system @end example Currently, the effect of invoking this action is @emph{only} to switch -the system profile to an existing generation and rearrange the -bootloader menu entries. To actually start using the target system -generation, you must reboot after running this action. In the future, -it will be updated to do the same things as @command{reconfigure}, -like activating and deactivating services. +the system profile to an existing generation and reinstall the bootloader. To +actually start using the target system generation, you must reboot after +running this action. In the future, it will be updated to do the same things +as @command{reconfigure}, like activating and deactivating services. This action will fail if the specified generation does not exist. @@ -43211,11 +43256,9 @@ Invoking guix system When using the @code{qcow2} image type, the returned image is in qcow2 format, which the QEMU emulator can efficiently use. @xref{Running Guix in a VM}, for more information on how to run the image in a virtual -machine. The @code{grub-bootloader} bootloader is always used -independently of what is declared in the @code{operating-system} file -passed as argument. This is to make it easier to work with QEMU, which -uses the SeaBIOS BIOS by default, expecting a bootloader to be installed -in the Master Boot Record (MBR). +machine. Currently, QEMU as packaged in Guix does not have UEFI support, +so you should select a bootloader for BIOS systems in your +@code{operating-system} configuration. @cindex docker-image, creating docker images When using the @code{docker} image type, a Docker image is produced. @@ -43533,7 +43576,6 @@ Invoking guix deploy ;; forwarded to the host's loopback interface. (use-service-modules networking ssh) -(use-package-modules bootloaders) (define %system (operating-system @@ -43541,7 +43583,9 @@ Invoking guix deploy (timezone "Etc/UTC") (bootloader (bootloader-configuration (bootloader grub-bootloader) - (targets '("/dev/vda")) + (targets (list (bootloader-target + (type 'disk) + (device "/dev/sda")))) (terminal-outputs '(console)))) (file-systems (cons (file-system (mount-point "/")