Package: guix-patches;
Reported by: Janneke Nieuwenhuizen <janneke <at> gnu.org>
Date: Mon, 21 Oct 2024 08:15:02 UTC
Severity: normal
Tags: patch
Done: <janneke <at> gnu.org>
Bug is archived. No further changes may be made.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Janneke Nieuwenhuizen <janneke <at> gnu.org> To: guix-patches <at> gnu.org Cc: othacehe <at> gnu.org, ludo <at> gnu.org, dev <at> jpoiret.xyz Subject: [PATCH 00/16] Installer support for (cross) installing the Hurd. Date: Mon, 21 Oct 2024 10:13:54 +0200
Hi! This patch set adds initial support for installing and running the Hurd on real iron. Writing a draft blog post on all the Hurd work that we've done last year and describing the clumsy way to install a Hurd system inspired me to have another look at the installer. I've dusted off some old patches to fix booting a Hurd installation more than once, then there's some preliminary (installer) work and then it adds a "Kernel" selection page where you can optionally select "Hurd" next to the default "Linux Libre". If you select "Hurd", some defaults are changed such as using an ext2 file system, some options are disabled such as creating an encrypted partition or a swap partition, and some menus have a warning about availability of packages. Finally a fully functional "config.scm" is created for installing the Hurd. It is using the regular GNU/Linux installer for now and the Hurd system is being cross installed. It might be nice to have a Hurd based installer image some time, maybe when we have better networking support (rumpnet? ;). I've updated the `hurd-team' branch with this patch set. To build the installer, do something like --8<---------------cut here---------------start------------->8--- ./pre-inst-env guix system image -t iso9660 gnu/system/install.scm or ./pre-inst-env guix system image -t iso9660 --system=i686-linux gnu/system/install.scm --8<---------------cut here---------------end--------------->8--- (note that the 32bit version using linux-libre-6.10.13 panics for me, I've had success with linux-libre-5.15 (see <https://git.savannah.gnu.org/cgit/guix.git/commit/?id=80f8ef0a01f2cf39deebfecc344e5f04d87d4bd4>). The last, but not unimportant feature, are patches to run the installer in dry-run mode and especially to run it directly from Guile, i.e., without building the (current-guix) guix derivation for the `hurd-team' branch and whatnot. To run the installer (semi-) directly, do something like: --8<---------------cut here---------------start------------->8--- /pre-inst-env guile -c '((@ (gnu installer) run-installer) #:dry-run? #t)' or sudo -E ./pre-inst-env guile -c '((@ (gnu installer) run-installer))' --8<---------------cut here---------------end--------------->8--- BE VERY CAREFUL WHEN NOT USING #:DRY-RUN #T! It feels a bit clumsy because it still builds a lightweight installer script in the store. We could avoid going via the store and factor-out the gexp'ed installer steps list from the `installer-steps' procedure. This is problematic because it then needs (newt), (parted), and (webutils) modules to build the installer OS. We could just add guile-newt, guile-parted, guile-webutils to the guix package's dependencies but I figured, also from how the installer was written, that we really don't want this. I also tried using #:autoload (see <https://git.savannah.gnu.org/cgit/guix.git/commit/?id=841b0f00afcc57442e348cdec7ca4fcae8372afb>), but #:autoload seems to fail on record predicates like `disk?' --8<---------------cut here---------------start------------->8--- Wrong type to apply (#<syntax-transformer disk?>). --8<---------------cut here---------------end--------------->8--- and also tried adding an extra indirection (see <https://git.savannah.gnu.org/cgit/guix.git/commit/?id=29a65fa3d251fe1cffea6db5231a0eb7c339987b>) in the hope to avoid having to use #:autoload for (parted), but as yet to no avail. Greetings, Janneke Janneke Nieuwenhuizen (16): system: hurd: Remove qemu networking from %base-services/hurd. gnu: hurd: Support system init in /libexec/runsystem. hurd-boot: Support system init: Create essential device nodes. system: hurd: Add swap-services to hurd-default-essential-services. gnu: hurd: Support second boot. hurd-boot: Support second boot. maint: Add installer dependencies to the manifest. installer: Remove unused (newt) imports. installer: Align comments. installer: Use "partitioning-page" consistently. installer: Fix file-name typos. installer: Use `%' for parameter %run-command-in-installer. installer: Add dry-run? installer: Add "Kernel" page to select the Hurd. installer: Add static-networking template. DRAFT installer: Support dry-run from Guile via store. gnu/build/hurd-boot.scm | 35 ++-- gnu/installer.scm | 206 ++++++++++++++++++------ gnu/installer/final.scm | 10 +- gnu/installer/kernel.scm | 34 ++++ gnu/installer/newt.scm | 24 ++- gnu/installer/newt/ethernet.scm | 1 - gnu/installer/newt/final.scm | 20 ++- gnu/installer/newt/kernel.scm | 45 ++++++ gnu/installer/newt/keymap.scm | 6 +- gnu/installer/newt/locale.scm | 7 +- gnu/installer/newt/page.scm | 7 +- gnu/installer/newt/parameters.scm | 1 - gnu/installer/newt/partition.scm | 10 +- gnu/installer/newt/services.scm | 32 ++-- gnu/installer/parted.scm | 114 ++++++++----- gnu/installer/record.scm | 8 +- gnu/installer/services.scm | 68 ++++++-- gnu/installer/steps.scm | 30 ++-- gnu/installer/utils.scm | 17 +- gnu/local.mk | 3 + gnu/packages/hurd.scm | 8 +- gnu/packages/patches/hurd-startup.patch | 82 ++++++++++ gnu/services/base.scm | 20 ++- gnu/services/virtualization.scm | 4 +- gnu/system.scm | 13 +- gnu/system/examples/bare-hurd.tmpl | 10 +- gnu/system/hurd.scm | 26 +-- gnu/system/images/hurd.scm | 2 +- manifest.scm | 7 +- 29 files changed, 661 insertions(+), 189 deletions(-) create mode 100644 gnu/installer/kernel.scm create mode 100644 gnu/installer/newt/kernel.scm create mode 100644 gnu/packages/patches/hurd-startup.patch base-commit: aaa12db63270c487e3be1963b0fdfe93fdb2544d -- 2.46.0
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.