gnu/system/install.scm includes (service uvesafb-service-type) in %installation-services on all architectures

  • Done
  • quality assurance status badge
Details
3 participants
  • Josselin Poiret
  • Pavel Shlyak
  • pelzflorian (Florian Pelz)
Owner
unassigned
Submitted by
Pavel Shlyak
Severity
normal
P
P
Pavel Shlyak wrote on 5 Jun 2022 14:20
(address . bug-guix@gnu.org)
9E6B1081-25F4-4357-ADBE-3161A2FA5960@pantherx.org
Reproducer:
guix system image -t iso9660 gnu/system/install.scm
This command fails on aarch64 host. It doesn’t if I manually remove uvesafb-service-type from the list. It is impossible(and not needed) to run uvesafb on non-x86 machines at the moment, so I think it should be included only in x86_64 (and probably 32bit x86 as well) builds.
J
J
Josselin Poiret wrote on 6 Jun 2022 15:28
87czflx6o0.fsf@jpoiret.xyz
Hi,
Pavel Shlyak <p.shlyak@pantherx.org> writes:

Toggle quote (4 lines)
> Reproducer:
> guix system image -t iso9660 gnu/system/install.scm
> This command fails on aarch64 host. It doesn’t if I manually remove uvesafb-service-type from the list. It is impossible(and not needed) to run uvesafb on non-x86 machines at the moment, so I think it should be included only in x86_64 (and probably 32bit x86 as well) builds.

I can definitely write a patch for that, it won't be worse that what we
have right now. I wonder how we could handle the case when there's no
KMS for a particular hardware combination (if that's possible), since
kmscon requires that. FTR, we require kmscon to be able to display
non-latin fonts such as CJK or arabic in the installer.

Now that I think about it, if we have a hard requirement on KMS, we
could just use a lightweight wayland compositor like cage to display the
installer, which would likely simplify the process since we'd have more
"usual" tools at our disposal.

Best,
--
Josselin Poiret
J
J
Josselin Poiret wrote on 6 Jun 2022 16:16
[PATCH] gnu: install: Add uvesafb service only on targets that support v86d.
20220606141634.16295-1-dev@jpoiret.xyz
* gnu/system/install.scm (%installation-services): Refactor into a
procedure, so that it can capture the system it's installing for.
Conditionally add uvesafb-service-type based on whether v86d is
supported by the target architecture.
(installation-os)[services]: Use the %installation-service procedure.
---
gnu/system/install.scm | 245 +++++++++++++++++++++--------------------
1 file changed, 128 insertions(+), 117 deletions(-)

Toggle diff (280 lines)
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index e46c1d34dd..5e4215864e 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -31,8 +31,10 @@ (define-module (gnu system install)
#:use-module (guix store)
#:use-module (guix monads)
#:use-module (guix modules)
- #:use-module ((guix packages) #:select (package-version))
+ #:use-module ((guix packages) #:select (package-version supported-package?))
+ #:use-module (guix platform)
#:use-module ((guix store) #:select (%store-prefix))
+ #:use-module (guix utils)
#:use-module (gnu installer)
#:use-module (gnu system locale)
#:use-module (gnu services avahi)
@@ -305,7 +307,10 @@ (define uvesafb-service-type
"Load the @code{uvesafb} kernel module with the right options.")
(default-value #t)))
-(define %installation-services
+(define* (%installation-services #:key (system (or (and=>
+ (%current-target-system)
+ platform-target->system)
+ (%current-system))))
;; List of services of the installation system.
(let ((motd (plain-file "motd" "
\x1b[1;37mWelcome to the installation of GNU Guix!\x1b[0m
@@ -322,120 +327,126 @@ (define (normal-tty tty)
(define bare-bones-os
(load "examples/bare-bones.tmpl"))
- (list (service virtual-terminal-service-type)
-
- (service kmscon-service-type
- (kmscon-configuration
- (virtual-terminal "tty1")
- (login-program (installer-program))))
-
- (login-service (login-configuration
- (motd motd)))
-
- ;; Documentation. The manual is in UTF-8, but
- ;; 'console-font-service' sets up Unicode support and loads a font
- ;; with all the useful glyphs like em dash and quotation marks.
- (service documentation-service-type "tty2")
-
- ;; Documentation add-on.
- %configuration-template-service
-
- ;; A bunch of 'root' ttys.
- (normal-tty "tty3")
- (normal-tty "tty4")
- (normal-tty "tty5")
- (normal-tty "tty6")
-
- ;; The usual services.
- (syslog-service)
-
- ;; Use the Avahi daemon to discover substitute servers on the local
- ;; network. It can be faster than fetching from remote servers.
- (service avahi-service-type)
-
- ;; The build daemon. Register the default substitute server key(s)
- ;; as trusted to allow the installation process to use substitutes by
- ;; default.
- (service guix-service-type
- (guix-configuration (authorize-key? #t)
- (guix (current-guix))))
-
- ;; Start udev so that useful device nodes are available.
- ;; Use device-mapper rules for cryptsetup & co; enable the CRDA for
- ;; regulations-compliant WiFi access.
- (udev-service #:rules (list lvm2 crda))
-
- ;; Add the 'cow-store' service, which users have to start manually
- ;; since it takes the installation directory as an argument.
- (cow-store-service)
-
- ;; Install Unicode support and a suitable font.
- (service console-font-service-type
- (map (match-lambda
- ("tty2"
- ;; Use a font that contains characters such as
- ;; curly quotes as found in the manual.
- '("tty2" . "LatGrkCyr-8x16"))
- (tty
- ;; Use a font that doesn't have more than 256
- ;; glyphs so that we can use colors with varying
- ;; brightness levels (see note in setfont(8)).
- `(,tty . "lat9u-16")))
- '("tty1" "tty2" "tty3" "tty4" "tty5" "tty6")))
-
- ;; To facilitate copy/paste.
- (service gpm-service-type)
-
- ;; Add an SSH server to facilitate remote installs.
- (service openssh-service-type
- (openssh-configuration
- (port-number 22)
- (permit-root-login #t)
- ;; The root account is passwordless, so make sure
- ;; a password is set before allowing logins.
- (allow-empty-passwords? #f)
- (password-authentication? #t)
-
- ;; Don't start it upfront.
- (%auto-start? #f)))
-
- ;; Since this is running on a USB stick with a overlayfs as the root
- ;; file system, use an appropriate cache configuration.
- (nscd-service (nscd-configuration
- (caches %nscd-minimal-caches)))
-
- ;; Having /bin/sh is a good idea. In particular it allows Tramp
- ;; connections to this system to work.
- (service special-files-service-type
- `(("/bin/sh" ,(file-append bash "/bin/sh"))))
-
- ;; Loopback device, needed by OpenSSH notably.
- (service static-networking-service-type
- (list %loopback-static-networking))
-
- (service wpa-supplicant-service-type)
- (dbus-service)
- (service connman-service-type
- (connman-configuration
- (disable-vpn? #t)))
-
- ;; Keep a reference to BARE-BONES-OS to make sure it can be
- ;; installed without downloading/building anything. Also keep the
- ;; things needed by 'profile-derivation' to minimize the amount of
- ;; download.
- (service gc-root-service-type
- (append
- (list bare-bones-os
- glibc-utf8-locales
- texinfo
- guile-3.0)
- %default-locale-libcs))
-
- ;; Machines without Kernel Mode Setting (those with many old and
- ;; current AMD GPUs, SiS GPUs, ...) need uvesafb to show the GUI
- ;; installer. Some may also need a kernel parameter like nomodeset
- ;; or vga=793, but we leave that for the user to specify in GRUB.
- (service uvesafb-service-type))))
+ (append
+ ;; Generic services
+ (list (service virtual-terminal-service-type)
+
+ (service kmscon-service-type
+ (kmscon-configuration
+ (virtual-terminal "tty1")
+ (login-program (installer-program))))
+
+ (login-service (login-configuration
+ (motd motd)))
+
+ ;; Documentation. The manual is in UTF-8, but
+ ;; 'console-font-service' sets up Unicode support and loads a font
+ ;; with all the useful glyphs like em dash and quotation marks.
+ (service documentation-service-type "tty2")
+
+ ;; Documentation add-on.
+ %configuration-template-service
+
+ ;; A bunch of 'root' ttys.
+ (normal-tty "tty3")
+ (normal-tty "tty4")
+ (normal-tty "tty5")
+ (normal-tty "tty6")
+
+ ;; The usual services.
+ (syslog-service)
+
+ ;; Use the Avahi daemon to discover substitute servers on the local
+ ;; network. It can be faster than fetching from remote servers.
+ (service avahi-service-type)
+
+ ;; The build daemon. Register the default substitute server key(s)
+ ;; as trusted to allow the installation process to use substitutes by
+ ;; default.
+ (service guix-service-type
+ (guix-configuration (authorize-key? #t)
+ (guix (current-guix))))
+
+ ;; Start udev so that useful device nodes are available.
+ ;; Use device-mapper rules for cryptsetup & co; enable the CRDA for
+ ;; regulations-compliant WiFi access.
+ (udev-service #:rules (list lvm2 crda))
+
+ ;; Add the 'cow-store' service, which users have to start manually
+ ;; since it takes the installation directory as an argument.
+ (cow-store-service)
+
+ ;; Install Unicode support and a suitable font.
+ (service console-font-service-type
+ (map (match-lambda
+ ("tty2"
+ ;; Use a font that contains characters such as
+ ;; curly quotes as found in the manual.
+ '("tty2" . "LatGrkCyr-8x16"))
+ (tty
+ ;; Use a font that doesn't have more than 256
+ ;; glyphs so that we can use colors with varying
+ ;; brightness levels (see note in setfont(8)).
+ `(,tty . "lat9u-16")))
+ '("tty1" "tty2" "tty3" "tty4" "tty5" "tty6")))
+
+ ;; To facilitate copy/paste.
+ (service gpm-service-type)
+
+ ;; Add an SSH server to facilitate remote installs.
+ (service openssh-service-type
+ (openssh-configuration
+ (port-number 22)
+ (permit-root-login #t)
+ ;; The root account is passwordless, so make sure
+ ;; a password is set before allowing logins.
+ (allow-empty-passwords? #f)
+ (password-authentication? #t)
+
+ ;; Don't start it upfront.
+ (%auto-start? #f)))
+
+ ;; Since this is running on a USB stick with a overlayfs as the root
+ ;; file system, use an appropriate cache configuration.
+ (nscd-service (nscd-configuration
+ (caches %nscd-minimal-caches)))
+
+ ;; Having /bin/sh is a good idea. In particular it allows Tramp
+ ;; connections to this system to work.
+ (service special-files-service-type
+ `(("/bin/sh" ,(file-append bash "/bin/sh"))))
+
+ ;; Loopback device, needed by OpenSSH notably.
+ (service static-networking-service-type
+ (list %loopback-static-networking))
+
+ (service wpa-supplicant-service-type)
+ (dbus-service)
+ (service connman-service-type
+ (connman-configuration
+ (disable-vpn? #t)))
+
+ ;; Keep a reference to BARE-BONES-OS to make sure it can be
+ ;; installed without downloading/building anything. Also keep the
+ ;; things needed by 'profile-derivation' to minimize the amount of
+ ;; download.
+ (service gc-root-service-type
+ (append
+ (list bare-bones-os
+ glibc-utf8-locales
+ texinfo
+ guile-3.0)
+ %default-locale-libcs)))
+
+ ;; Specific system services
+
+ ;; Machines without Kernel Mode Setting (those with many old and
+ ;; current AMD GPUs, SiS GPUs, ...) need uvesafb to show the GUI
+ ;; installer. Some may also need a kernel parameter like nomodeset
+ ;; or vga=793, but we leave that for the user to specify in GRUB.
+ `(,@(if (supported-package? v86d system)
+ (list (service uvesafb-service-type))
+ '())))))
(define %issue
;; Greeting.
@@ -499,7 +510,7 @@ (define installation-os
(comment "Guest of GNU"))))
(issue %issue)
- (services %installation-services)
+ (services (%installation-services))
;; We don't need setuid programs, except for 'passwd', which can be handy
;; if one is to allow remote SSH login to the machine being installed.
--
2.36.1
P
P
pelzflorian (Florian Pelz) wrote on 6 Jun 2022 18:09
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
20220606155646.4ijd4isr5gzenm5j@pelzflorian.localdomain
Thank you so much Josselin. I didn't know how to do this.
At the time building for ARM was no priority.

On Mon, Jun 06, 2022 at 04:16:34PM +0200, Josselin Poiret via Bug reports for GNU Guix wrote:
Toggle quote (4 lines)
> - (service guix-service-type
> - (guix-configuration (authorize-key? #t)
> - (guix (current-guix))))

I had to remove the (guix (current-guix)) but now `guix system image
-t iso9660 gnu/system/install.scm` builds on a rock64 aarch64 machine,
but it is still building and I could not yet test in qemu. I have not
tried the embedded-installation image.

(I also had to disable tests on guile-fibers, but it is unrelated to
the bug and may be needed only on rock64, which has other unrelated
hangups when much RAM is used.)

I don't commit much except translations, but guess I should remove the
not working %host-type shenanigans in uvesafb-service-type, add your
copyright line and push. I will do so when there are no other
comments.

Regards,
Florian
J
J
Josselin Poiret wrote on 6 Jun 2022 19:15
(name . pelzflorian (Florian Pelz))(address . pelzflorian@pelzflorian.de)
87a6apww57.fsf@jpoiret.xyz
Hello Florian,
"pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de> writes:

Toggle quote (10 lines)
> On Mon, Jun 06, 2022 at 04:16:34PM +0200, Josselin Poiret via Bug reports for GNU Guix wrote:
>> - (service guix-service-type
>> - (guix-configuration (authorize-key? #t)
>> - (guix (current-guix))))
>
> I had to remove the (guix (current-guix)) but now `guix system image
> -t iso9660 gnu/system/install.scm` builds on a rock64 aarch64 machine,
> but it is still building and I could not yet test in qemu. I have not
> tried the embedded-installation image.

Silly me, I really should move some of my WIP patches to other branches
to avoid these issues :(

Feel free to commit with the changes you mentioned, and thanks for the
tests (I only checked minimally with cross-compilation since I don't
have any aarch64 machines)!

Best,
--
Josselin Poiret
P
P
pelzflorian (Florian Pelz) wrote on 7 Jun 2022 12:50
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
20220607105009.jmjbw6ndxptsf2m7@pelzflorian.localdomain
Pushed as 0aa43117907581779cf3f343c6175d98369b7e07.

Closing, even though I didn’t manage to boot it on QEMU.

Ideally Guix System would run as seemlessly as the Ubuntu ARM cdimages
work on Macs, but I can’t test and it is a different issue.

Regards,
Florian
Closed
P
P
pelzflorian (Florian Pelz) wrote on 7 Jun 2022 13:05
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
20220607110519.xgz5n2jedekstb64@pelzflorian.localdomain
On Tue, Jun 07, 2022 at 12:50:26PM +0200, pelzflorian (Florian Pelz) wrote:
Toggle quote (3 lines)
> Ideally Guix System would run as seemlessly as the Ubuntu ARM cdimages
> work on Macs, but I can’t test and it is a different issue.

*on QEMU on Macs
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 55806@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 55806
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch