installer: Report known-unsupported PCI devices.
* gnu/installer/hardware.scm: New file. * gnu/local.mk (INSTALLER_MODULES): Add it. * po/guix/POTFILES.in: Add it. * gnu/installer.scm (installer-steps): Pass #:pci-database to the 'welcome' step procedure. * gnu/installer/newt.scm (welcome-page): Add #:pci-database and pass it to 'run-welcome-page'. * gnu/installer/newt/welcome.scm (check-hardware-support): Add #:pci-database. Enumerate unsupported PCI devices and run an error page when unsupported devices are found. (run-welcome-page): Add #:pci-database and pass it to 'check-hardware-support' and to the recursive call. * gnu/installer/record.scm (<installer>)[welcome-page]: Adjust comment. * doc/guix.texi (Hardware Considerations): Mention it.
parent
6b39c3afcc
commit
514fedbf39
|
@ -2234,6 +2234,9 @@ Linux-libre driver. Free firmware exists for both and is available
|
||||||
out-of-the-box on Guix System, as part of @code{%base-firmware}
|
out-of-the-box on Guix System, as part of @code{%base-firmware}
|
||||||
(@pxref{operating-system Reference, @code{firmware}}).
|
(@pxref{operating-system Reference, @code{firmware}}).
|
||||||
|
|
||||||
|
The installer warns you early on if it detects devices that are known
|
||||||
|
@emph{not} to work due to the lack of free firmware or free drivers.
|
||||||
|
|
||||||
@cindex RYF, Respects Your Freedom
|
@cindex RYF, Respects Your Freedom
|
||||||
The @uref{https://www.fsf.org/, Free Software Foundation} runs
|
The @uref{https://www.fsf.org/, Free Software Foundation} runs
|
||||||
@uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
|
@uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
#:use-module (gnu packages nano)
|
#:use-module (gnu packages nano)
|
||||||
#:use-module (gnu packages ncurses)
|
#:use-module (gnu packages ncurses)
|
||||||
#:use-module (gnu packages package-management)
|
#:use-module (gnu packages package-management)
|
||||||
|
#:use-module (gnu packages pciutils)
|
||||||
#:use-module (gnu packages tls)
|
#:use-module (gnu packages tls)
|
||||||
#:use-module (gnu packages xorg)
|
#:use-module (gnu packages xorg)
|
||||||
#:use-module (gnu system locale)
|
#:use-module (gnu system locale)
|
||||||
|
@ -226,7 +227,9 @@ selected keymap."
|
||||||
(id 'welcome)
|
(id 'welcome)
|
||||||
(compute (lambda _
|
(compute (lambda _
|
||||||
((installer-welcome-page current-installer)
|
((installer-welcome-page current-installer)
|
||||||
#$(local-file "installer/aux-files/logo.txt")))))
|
#$(local-file "installer/aux-files/logo.txt")
|
||||||
|
#:pci-database
|
||||||
|
#$(file-append pciutils "/share/hwdata/pci.ids.gz")))))
|
||||||
|
|
||||||
;; Ask the user to select a timezone under glibc format.
|
;; Ask the user to select a timezone under glibc format.
|
||||||
(installer-step
|
(installer-step
|
||||||
|
@ -358,6 +361,7 @@ selected keymap."
|
||||||
(with-extensions (list guile-gcrypt guile-newt
|
(with-extensions (list guile-gcrypt guile-newt
|
||||||
guile-parted guile-bytestructures
|
guile-parted guile-bytestructures
|
||||||
guile-json-3 guile-git guile-webutils
|
guile-json-3 guile-git guile-webutils
|
||||||
|
guile-zlib ;for (gnu build linux-modules)
|
||||||
(current-guix) gnutls)
|
(current-guix) gnutls)
|
||||||
(with-imported-modules `(,@(source-module-closure
|
(with-imported-modules `(,@(source-module-closure
|
||||||
`(,@modules
|
`(,@modules
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
|
;;; Copyright © 2022 Ludovic Courtès <ludo@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
|
||||||
|
;;;
|
||||||
|
;;; 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 hardware)
|
||||||
|
#:use-module (gnu build linux-modules)
|
||||||
|
#:use-module (guix i18n)
|
||||||
|
#:use-module (srfi srfi-1)
|
||||||
|
#:use-module (srfi srfi-71)
|
||||||
|
#:export (unsupported-pci-device?
|
||||||
|
pci-device-description))
|
||||||
|
|
||||||
|
(define %unsupported-linux-modules
|
||||||
|
;; List of Linux modules that are useless without non-free firmware.
|
||||||
|
;;
|
||||||
|
;; Currently only drivers for PCI devices are listed. USB devices such as
|
||||||
|
;; "btintel" would require support to list USB devices and read the USB
|
||||||
|
;; device ID database. Punt for now as this is usually less critical.
|
||||||
|
;;
|
||||||
|
;; This list is currently manually maintained based on information on
|
||||||
|
;; non-free firmware available from
|
||||||
|
;; <https://packages.debian.org/search?keywords=firmware&searchon=names&suite=stable§ion=all>.
|
||||||
|
'(;; WiFi.
|
||||||
|
"brcmfmac"
|
||||||
|
"ipw2100"
|
||||||
|
"ipw2200"
|
||||||
|
"iwlwifi"
|
||||||
|
"mwl8k"
|
||||||
|
"rtl8188ee"
|
||||||
|
"rtl818x_pci"
|
||||||
|
"rtl8192ce"
|
||||||
|
"rtl8192de"
|
||||||
|
"rtl8192ee"
|
||||||
|
|
||||||
|
;; Ethernet.
|
||||||
|
"bnx2"
|
||||||
|
"bnx2x"
|
||||||
|
"liquidio"
|
||||||
|
|
||||||
|
;; Graphics.
|
||||||
|
"amdgpu"
|
||||||
|
"radeon"
|
||||||
|
|
||||||
|
;; Multimedia.
|
||||||
|
"ivtv"))
|
||||||
|
|
||||||
|
(define unsupported-pci-device?
|
||||||
|
;; Arrange to load the module alias database only once.
|
||||||
|
(let ((aliases (delay (known-module-aliases))))
|
||||||
|
(lambda (device)
|
||||||
|
"Return true if DEVICE is known to not be supported by free software."
|
||||||
|
(any (lambda (module)
|
||||||
|
(member module %unsupported-linux-modules))
|
||||||
|
(matching-modules (pci-device-module-alias device)
|
||||||
|
(force aliases))))))
|
||||||
|
|
||||||
|
(define (pci-device-description pci-database)
|
||||||
|
"Return a procedure that, given a PCI device, returns a string describing
|
||||||
|
it."
|
||||||
|
(define (with-fallback lookup)
|
||||||
|
(lambda (vendor-id id)
|
||||||
|
(let ((vendor name (lookup vendor-id id)))
|
||||||
|
(values (or vendor (number->string vendor-id 16))
|
||||||
|
(or name (number->string id 16))))))
|
||||||
|
|
||||||
|
(define pci-lookup
|
||||||
|
(with-fallback (load-pci-device-database pci-database)))
|
||||||
|
|
||||||
|
(lambda (device)
|
||||||
|
(let ((vendor name (pci-lookup (pci-device-vendor device)
|
||||||
|
(pci-device-id device))))
|
||||||
|
(if (network-pci-device? device)
|
||||||
|
;; TRANSLATORS: The two placeholders are the manufacturer
|
||||||
|
;; and name of a PCI device.
|
||||||
|
(format #f (G_ "~a ~a (networking device)")
|
||||||
|
vendor name)
|
||||||
|
(string-append vendor " " name)))))
|
|
@ -172,8 +172,8 @@ report it by email to ~a.") uploaded-name %guix-bug-report-address)
|
||||||
(define (timezone-page zonetab)
|
(define (timezone-page zonetab)
|
||||||
(run-timezone-page zonetab))
|
(run-timezone-page zonetab))
|
||||||
|
|
||||||
(define (welcome-page logo)
|
(define* (welcome-page logo #:key pci-database)
|
||||||
(run-welcome-page logo))
|
(run-welcome-page logo #:pci-database pci-database))
|
||||||
|
|
||||||
(define (menu-page steps)
|
(define (menu-page steps)
|
||||||
(run-menu-page steps))
|
(run-menu-page steps))
|
||||||
|
|
|
@ -19,8 +19,10 @@
|
||||||
|
|
||||||
(define-module (gnu installer newt welcome)
|
(define-module (gnu installer newt welcome)
|
||||||
#:use-module ((gnu build linux-modules)
|
#:use-module ((gnu build linux-modules)
|
||||||
#:select (modules-loaded))
|
#:select (modules-loaded
|
||||||
|
pci-devices))
|
||||||
#:use-module (gnu installer dump)
|
#:use-module (gnu installer dump)
|
||||||
|
#:use-module (gnu installer hardware)
|
||||||
#:use-module (gnu installer steps)
|
#:use-module (gnu installer steps)
|
||||||
#:use-module (gnu installer utils)
|
#:use-module (gnu installer utils)
|
||||||
#:use-module (gnu installer newt page)
|
#:use-module (gnu installer newt page)
|
||||||
|
@ -30,6 +32,8 @@
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-34)
|
#:use-module (srfi srfi-34)
|
||||||
#:use-module (srfi srfi-35)
|
#:use-module (srfi srfi-35)
|
||||||
|
#:use-module (srfi srfi-71)
|
||||||
|
#:use-module (ice-9 format)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 receive)
|
#:use-module (ice-9 receive)
|
||||||
#:use-module (newt)
|
#:use-module (newt)
|
||||||
|
@ -121,7 +125,7 @@ we want this page to occupy all the screen space available."
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(destroy-form-and-pop form))))))
|
(destroy-form-and-pop form))))))
|
||||||
|
|
||||||
(define (check-hardware-support)
|
(define (check-hardware-support pci-database)
|
||||||
"Warn about unsupported devices."
|
"Warn about unsupported devices."
|
||||||
(when (member "uvesafb" (modules-loaded))
|
(when (member "uvesafb" (modules-loaded))
|
||||||
(run-error-page (G_ "\
|
(run-error-page (G_ "\
|
||||||
|
@ -129,9 +133,28 @@ This may be a false alarm, but possibly your graphics hardware does not
|
||||||
work well with only free software. Expect trouble. If after installation,
|
work well with only free software. Expect trouble. If after installation,
|
||||||
the system does not boot, perhaps you will need to add nomodeset to the
|
the system does not boot, perhaps you will need to add nomodeset to the
|
||||||
kernel arguments and need to configure the uvesafb kernel module.")
|
kernel arguments and need to configure the uvesafb kernel module.")
|
||||||
(G_ "Pre-install warning"))))
|
(G_ "Pre-install warning")))
|
||||||
|
|
||||||
(define (run-welcome-page logo)
|
(let ((devices (pci-devices)))
|
||||||
|
(match (filter unsupported-pci-device? devices)
|
||||||
|
(() ;no unsupported device
|
||||||
|
#t)
|
||||||
|
(unsupported
|
||||||
|
(run-error-page (format #f (G_ "\
|
||||||
|
Devices not supported by free software were found on your computer:
|
||||||
|
|
||||||
|
~{ - ~a~%~}
|
||||||
|
Unfortunately, it means those devices will not be usable.
|
||||||
|
|
||||||
|
To address it, we recommend choosing hardware that respects your freedom as a \
|
||||||
|
user--hardware for which free drivers and firmware exist. See \"Hardware \
|
||||||
|
Considerations\" in the manual for more information.")
|
||||||
|
(map (pci-device-description pci-database)
|
||||||
|
unsupported))
|
||||||
|
(G_ "Hardware support warning")
|
||||||
|
#:width 76)))))
|
||||||
|
|
||||||
|
(define* (run-welcome-page logo #:key pci-database)
|
||||||
"Run a welcome page with the given textual LOGO displayed at the center of
|
"Run a welcome page with the given textual LOGO displayed at the center of
|
||||||
the page. Ask the user to choose between manual installation, graphical
|
the page. Ask the user to choose between manual installation, graphical
|
||||||
installation and reboot."
|
installation and reboot."
|
||||||
|
@ -161,15 +184,16 @@ Documentation is accessible at any time by pressing Ctrl-Alt-F2.")
|
||||||
#:listbox-items
|
#:listbox-items
|
||||||
`((,(G_ "Graphical install using a terminal based interface")
|
`((,(G_ "Graphical install using a terminal based interface")
|
||||||
.
|
.
|
||||||
,check-hardware-support)
|
,(lambda ()
|
||||||
|
(check-hardware-support pci-database)))
|
||||||
(,(G_ "Install using the shell based process")
|
(,(G_ "Install using the shell based process")
|
||||||
.
|
.
|
||||||
,(lambda ()
|
,(lambda ()
|
||||||
(check-hardware-support)
|
(check-hardware-support pci-database)
|
||||||
;; Switch to TTY3, where a root shell is available for shell based
|
;; Switch to TTY3, where a root shell is available for shell based
|
||||||
;; install. The other root TTY's would have been ok too.
|
;; install. The other root TTY's would have been ok too.
|
||||||
(system* "chvt" "3")
|
(system* "chvt" "3")
|
||||||
(run-welcome-page logo)))
|
(run-welcome-page logo #:pci-database pci-database)))
|
||||||
(,(G_ "Reboot")
|
(,(G_ "Reboot")
|
||||||
.
|
.
|
||||||
,(lambda ()
|
,(lambda ()
|
||||||
|
|
|
@ -89,7 +89,7 @@
|
||||||
(partition-page installer-partition-page)
|
(partition-page installer-partition-page)
|
||||||
;; procedure void -> void
|
;; procedure void -> void
|
||||||
(services-page installer-services-page)
|
(services-page installer-services-page)
|
||||||
;; procedure (logo) -> void
|
;; procedure (logo #:pci-database) -> void
|
||||||
(welcome-page installer-welcome-page)
|
(welcome-page installer-welcome-page)
|
||||||
;; procedure (menu-proc) -> void
|
;; procedure (menu-proc) -> void
|
||||||
(parameters-menu installer-parameters-menu)
|
(parameters-menu installer-parameters-menu)
|
||||||
|
|
|
@ -787,6 +787,7 @@ INSTALLER_MODULES = \
|
||||||
%D%/installer/connman.scm \
|
%D%/installer/connman.scm \
|
||||||
%D%/installer/dump.scm \
|
%D%/installer/dump.scm \
|
||||||
%D%/installer/final.scm \
|
%D%/installer/final.scm \
|
||||||
|
%D%/installer/hardware.scm \
|
||||||
%D%/installer/hostname.scm \
|
%D%/installer/hostname.scm \
|
||||||
%D%/installer/keymap.scm \
|
%D%/installer/keymap.scm \
|
||||||
%D%/installer/locale.scm \
|
%D%/installer/locale.scm \
|
||||||
|
|
|
@ -30,6 +30,7 @@ guix/import/pypi.scm
|
||||||
guix/import/texlive.scm
|
guix/import/texlive.scm
|
||||||
gnu/installer.scm
|
gnu/installer.scm
|
||||||
gnu/installer/connman.scm
|
gnu/installer/connman.scm
|
||||||
|
gnu/installer/hardware.scm
|
||||||
gnu/installer/hostname.scm
|
gnu/installer/hostname.scm
|
||||||
gnu/installer/keymap.scm
|
gnu/installer/keymap.scm
|
||||||
gnu/installer/locale.scm
|
gnu/installer/locale.scm
|
||||||
|
|
Reference in New Issue