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}
|
||||
(@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
|
||||
The @uref{https://www.fsf.org/, Free Software Foundation} runs
|
||||
@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 ncurses)
|
||||
#:use-module (gnu packages package-management)
|
||||
#:use-module (gnu packages pciutils)
|
||||
#:use-module (gnu packages tls)
|
||||
#:use-module (gnu packages xorg)
|
||||
#:use-module (gnu system locale)
|
||||
|
@ -226,7 +227,9 @@ selected keymap."
|
|||
(id 'welcome)
|
||||
(compute (lambda _
|
||||
((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.
|
||||
(installer-step
|
||||
|
@ -358,6 +361,7 @@ selected keymap."
|
|||
(with-extensions (list guile-gcrypt guile-newt
|
||||
guile-parted guile-bytestructures
|
||||
guile-json-3 guile-git guile-webutils
|
||||
guile-zlib ;for (gnu build linux-modules)
|
||||
(current-guix) gnutls)
|
||||
(with-imported-modules `(,@(source-module-closure
|
||||
`(,@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)
|
||||
(run-timezone-page zonetab))
|
||||
|
||||
(define (welcome-page logo)
|
||||
(run-welcome-page logo))
|
||||
(define* (welcome-page logo #:key pci-database)
|
||||
(run-welcome-page logo #:pci-database pci-database))
|
||||
|
||||
(define (menu-page steps)
|
||||
(run-menu-page steps))
|
||||
|
|
|
@ -19,8 +19,10 @@
|
|||
|
||||
(define-module (gnu installer newt welcome)
|
||||
#:use-module ((gnu build linux-modules)
|
||||
#:select (modules-loaded))
|
||||
#:select (modules-loaded
|
||||
pci-devices))
|
||||
#:use-module (gnu installer dump)
|
||||
#:use-module (gnu installer hardware)
|
||||
#:use-module (gnu installer steps)
|
||||
#:use-module (gnu installer utils)
|
||||
#:use-module (gnu installer newt page)
|
||||
|
@ -30,6 +32,8 @@
|
|||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-34)
|
||||
#:use-module (srfi srfi-35)
|
||||
#:use-module (srfi srfi-71)
|
||||
#:use-module (ice-9 format)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (ice-9 receive)
|
||||
#:use-module (newt)
|
||||
|
@ -121,7 +125,7 @@ we want this page to occupy all the screen space available."
|
|||
(lambda ()
|
||||
(destroy-form-and-pop form))))))
|
||||
|
||||
(define (check-hardware-support)
|
||||
(define (check-hardware-support pci-database)
|
||||
"Warn about unsupported devices."
|
||||
(when (member "uvesafb" (modules-loaded))
|
||||
(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,
|
||||
the system does not boot, perhaps you will need to add nomodeset to the
|
||||
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
|
||||
the page. Ask the user to choose between manual installation, graphical
|
||||
installation and reboot."
|
||||
|
@ -161,15 +184,16 @@ Documentation is accessible at any time by pressing Ctrl-Alt-F2.")
|
|||
#:listbox-items
|
||||
`((,(G_ "Graphical install using a terminal based interface")
|
||||
.
|
||||
,check-hardware-support)
|
||||
,(lambda ()
|
||||
(check-hardware-support pci-database)))
|
||||
(,(G_ "Install using the shell based process")
|
||||
.
|
||||
,(lambda ()
|
||||
(check-hardware-support)
|
||||
(check-hardware-support pci-database)
|
||||
;; Switch to TTY3, where a root shell is available for shell based
|
||||
;; install. The other root TTY's would have been ok too.
|
||||
(system* "chvt" "3")
|
||||
(run-welcome-page logo)))
|
||||
(run-welcome-page logo #:pci-database pci-database)))
|
||||
(,(G_ "Reboot")
|
||||
.
|
||||
,(lambda ()
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
(partition-page installer-partition-page)
|
||||
;; procedure void -> void
|
||||
(services-page installer-services-page)
|
||||
;; procedure (logo) -> void
|
||||
;; procedure (logo #:pci-database) -> void
|
||||
(welcome-page installer-welcome-page)
|
||||
;; procedure (menu-proc) -> void
|
||||
(parameters-menu installer-parameters-menu)
|
||||
|
|
|
@ -787,6 +787,7 @@ INSTALLER_MODULES = \
|
|||
%D%/installer/connman.scm \
|
||||
%D%/installer/dump.scm \
|
||||
%D%/installer/final.scm \
|
||||
%D%/installer/hardware.scm \
|
||||
%D%/installer/hostname.scm \
|
||||
%D%/installer/keymap.scm \
|
||||
%D%/installer/locale.scm \
|
||||
|
|
|
@ -30,6 +30,7 @@ guix/import/pypi.scm
|
|||
guix/import/texlive.scm
|
||||
gnu/installer.scm
|
||||
gnu/installer/connman.scm
|
||||
gnu/installer/hardware.scm
|
||||
gnu/installer/hostname.scm
|
||||
gnu/installer/keymap.scm
|
||||
gnu/installer/locale.scm
|
||||
|
|
Reference in New Issue