summary refs log tree commit diff
path: root/gnu/installer/newt
diff options
context:
space:
mode:
authorJanneke Nieuwenhuizen <janneke@gnu.org>2024-10-20 15:13:16 +0200
committerJan (janneke) Nieuwenhuizen <janneke@gnu.org>2024-11-11 07:28:35 +0100
commit687a2ccabc6f57fcd25110f587df90ed0cab2f05 (patch)
treea71dbeb96fc115b3abf796ba254842d98c0271e6 /gnu/installer/newt
parent9aeb8e3dee32254a19a68971f26e214c7b717e5b (diff)
downloadguix-687a2ccabc6f57fcd25110f587df90ed0cab2f05.tar.gz
installer: Add "Kernel" page to select the Hurd.
This adds a "Kernel" page to the installer with the option to (cross-) install
the Hurd, if applicable (only available on x86 machines for now).

* gnu/installer/newt.scm (kernel-page): New procedure.
(newt-installer)[kernel-page]: New field.
* gnu/installer/kernel.scm,
gnu/installer/newt/kernel.scm: New files.
* gnu/local.mk (INSTALLER_MODULES): Add them.
* gnu/installer.scm (installer-steps): Use them to select kernel if
applicable.
* gnu/installer/newt/partition.scm (run-label-page): Default to "msdos" when
instaling the Hurd.
(run-fs-type-page): Add ext2 for the hurd.
(run-partitioning-page-partition): Remove `entire-encrypted' option when
installing the Hurd.
* gnu/installer/services.scm (system-services->configuration): Cater for the
Hurd with %base-services/hurd, and with %base-packages/hurd that must always
be set.
(%system-services): Change to procedure.  When installing the the Hurd, do not
recommend `ntp-service-type' and USE `openssh-sans-x' package for
`openssh-service-type'.
(system-service-none): New variable.
* gnu/installer/newt/services.scm (run-network-management-page): Include it
when installing the Hurd.
(run-desktop-environments-cbt-page): When installing the Hurd, recommend to
not select any desktop enviroment.  Update users.
* gnu/installer/parted.scm (efi-installation?): Return #f when installing for
the Hurd.
(create-ext2-file-system): New procedure.
(user-fs-type-name, user-fs-type->mount-type, partition-filesystem-user-type,
format-user-partitions): Support `ext2'.
(<user-partition> partition->user-partition): Use `ext2' when installing the
Hurd.
(auto-partition!): Likewise.  No swap partition when installing the Hurd.
* gnu/installer/final.scm (install-system): Cater for cross installation of
the Hurd.
(bootloader-configuration): Use `grub-minimal-bootloader' when installing the
Hurd.
(user-partition-missing-modules): Cater for empty user-partitions.
(initrd-configuration, user-partitions->configuration): Cater for the Hurd.
* gnu/installer/steps.scm (format-configuration,
configuration->file): Cater for the Hurd.
* gnu/system/hurd.scm (%desktop-services/hurd): New variable.
* gnu/installer/tests.scm (choose-kernel): New procedure.
* gnu/tests/install.scm (gui-test-program): Use it.

Change-Id: Ifafb27b8a2f933944c77223a27ec151757237e36
Diffstat (limited to 'gnu/installer/newt')
-rw-r--r--gnu/installer/newt/kernel.scm45
-rw-r--r--gnu/installer/newt/partition.scm10
-rw-r--r--gnu/installer/newt/services.scm31
3 files changed, 73 insertions, 13 deletions
diff --git a/gnu/installer/newt/kernel.scm b/gnu/installer/newt/kernel.scm
new file mode 100644
index 0000000000..3117247312
--- /dev/null
+++ b/gnu/installer/newt/kernel.scm
@@ -0,0 +1,45 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu installer newt kernel)
+  #:use-module (gnu installer newt page)
+  #:use-module (guix i18n)
+  #:use-module (guix utils)
+  #:export (run-kernel-page))
+
+(define (run-kernel-page)
+  (let* ((kernels `(,@(if (target-x86?) '("Hurd") '())
+                    "Linux Libre"))
+         (result
+          (run-listbox-selection-page
+           #:title (G_ "Kernel")
+           #:info-text
+           (G_ "Please select a kernel.  When in doubt, choose \"Linux Libre\".
+The Hurd is offered as a technology preview and development aid; many packages \
+are not yet available in Guix, such as a desktop environment or even a windowing \
+system (X, Wayland).")
+           #:listbox-items kernels
+           #:listbox-item->text identity
+           #:listbox-default-item "Linux Libre"
+           #:button-text (G_ "Back")
+           #:button-callback-procedure
+           (lambda _
+             (abort-to-prompt 'installer-step 'abort)))))
+    (when (equal? result "Hurd")
+      (%current-target-system "i586-pc-gnu"))
+    result))
diff --git a/gnu/installer/newt/partition.scm b/gnu/installer/newt/partition.scm
index 48dd306080..3a7e679577 100644
--- a/gnu/installer/newt/partition.scm
+++ b/gnu/installer/newt/partition.scm
@@ -26,6 +26,7 @@
   #:use-module (gnu installer newt page)
   #:use-module (gnu installer newt utils)
   #:use-module (guix i18n)
+  #:use-module (guix utils)
   #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1)
@@ -115,6 +116,7 @@ all data on disk will be lost, are you sure you want to proceed?") item)
 Be careful, all data on the disk will be lost.")
        #:title (G_ "Partition table")
        #:listbox-items '("msdos" "gpt")
+       #:listbox-default-item (if (target-hurd?) "msdos" "gpt")
        #:listbox-item->text identity
        #:listbox-callback-procedure
        (run-label-confirmation-page button-callback)
@@ -147,6 +149,8 @@ Be careful, all data on the disk will be lost.")
    #:title (G_ "File-system type")
    #:listbox-items '(btrfs ext4 jfs xfs
                            swap
+                           ;; This is for the Hurd
+                           ext2
                            ;; These lack basic Unix features.  Their only use
                            ;; on GNU is for interoperation, e.g., with UEFI.
                            fat32 fat16 ntfs)
@@ -767,7 +771,11 @@ by pressing the Exit button.~%~%")))
   (define (run-page devices)
     (let* ((items
             `((entire . ,(G_ "Guided - using the entire disk"))
-              (entire-encrypted . ,(G_ "Guided - using the entire disk with encryption"))
+              ,@(if (target-hurd?)
+                    '()
+                    `((entire-encrypted
+                       .
+                       ,(G_ "Guided - using the entire disk with encryption"))))
               (manual . ,(G_ "Manual"))))
            (result (run-listbox-selection-page
                     #:info-text (G_ "Please select a partitioning method.")
diff --git a/gnu/installer/newt/services.scm b/gnu/installer/newt/services.scm
index d1035b6524..848683e8c7 100644
--- a/gnu/installer/newt/services.scm
+++ b/gnu/installer/newt/services.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;;;
@@ -26,6 +26,7 @@
   #:use-module (gnu installer newt page)
   #:use-module (gnu installer newt utils)
   #:use-module (guix i18n)
+  #:use-module (guix utils)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
   #:export (run-services-page))
@@ -33,11 +34,13 @@
 (define (run-desktop-environments-cbt-page)
   "Run a page allowing the user to choose between various desktop
 environments."
-  (let ((items (filter desktop-system-service? %system-services)))
+  (let ((items (filter desktop-system-service? (%system-services))))
     (run-checkbox-tree-page
-     #:info-text (G_ "Please select the desktop environment(s) you wish to \
+     #:info-text (if (target-hurd?)
+                     (G_ "Currently, none of these is available for the Hurd.")
+                     (G_ "Please select the desktop environment(s) you wish to \
 install.  If you select multiple desktop environments here, you will be able \
-to choose from them later when you log in.")
+to choose from them later when you log in."))
      #:title (G_ "Desktop environment")
      #:items items
      #:selection (map system-service-recommended? items)
@@ -51,7 +54,7 @@ to choose from them later when you log in.")
   "Run a page allowing the user to select networking services."
   (let ((items (filter (lambda (service)
                          (eq? 'networking (system-service-type service)))
-                       %system-services)))
+                       (%system-services))))
     (run-checkbox-tree-page
      #:info-text (G_ "You can now select networking services to run on your \
 system.")
@@ -69,7 +72,7 @@ system.")
   (let ((items (filter (lambda (service)
                          (eq? 'document
                               (system-service-type service)))
-                       %system-services)))
+                       (%system-services))))
     (run-checkbox-tree-page
      #:info-text (G_ "You can now select the CUPS printing service to run on your \
 system.")
@@ -88,7 +91,7 @@ systems."
   (let ((items (filter (lambda (service)
                          (eq? 'administration
                               (system-service-type service)))
-                       %system-services)))
+                       (%system-services))))
     (run-checkbox-tree-page
       #:title (G_ "Console services")
       #:info-text (G_ "Select miscellaneous services to run on your \
@@ -103,7 +106,11 @@ non-graphical system.")
 
 (define (run-network-management-page)
   "Run a page to select among several network management methods."
-  (let ((title (G_ "Network management")))
+  (let ((title (G_ "Network management"))
+        (items (filter (lambda (service)
+                         (eq? 'network-management
+                              (system-service-type service)))
+                       (%system-services))))
     (run-listbox-selection-page
      #:title title
      #:info-text (G_ "Choose the method to manage network connections.
@@ -112,10 +119,10 @@ We recommend NetworkManager or Connman for a WiFi-capable laptop; the DHCP \
 client may be enough for a server.")
      #:info-textbox-width 70
      #:listbox-height 7
-     #:listbox-items (filter (lambda (service)
-                               (eq? 'network-management
-                                    (system-service-type service)))
-                             %system-services)
+     #:listbox-items `(,@items
+                       ,@(if (target-hurd?)
+                             (list system-service-none)
+                             '()))
      #:listbox-item->text (compose G_ system-service-name)
      #:sort-listbox-items? #f
      #:button-text (G_ "Exit")