Page MenuHomeFreeBSD

D47491.diff
No OneTemporary

D47491.diff

diff --git a/usr.sbin/bsdinstall/bsdinstall.8 b/usr.sbin/bsdinstall/bsdinstall.8
--- a/usr.sbin/bsdinstall/bsdinstall.8
+++ b/usr.sbin/bsdinstall/bsdinstall.8
@@ -1,6 +1,10 @@
.\"-
.\" Copyright (c) 2011-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org> All rights reserved.
.\" Copyright (c) 2018 Roberto Fernandez Cueto <roberfern@gmail.com>
+.\" Copyright (c) 2024 The FreeBSD Foundation
+.\"
+.\" Portions of this documentation were written by Björn Zeeb
+.\" under sponsorship from the FreeBSD Foundation.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
@@ -23,7 +27,7 @@
.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd November 18, 2023
+.Dd November 4, 2024
.Dt BSDINSTALL 8
.Os
.Sh NAME
@@ -240,6 +244,12 @@
.Ev DISTRIBUTIONS
into
.Ev BSDINSTALL_CHROOT .
+.It Cm firmware
+executes
+.Xr fwget 8
+inside the
+.Ev BSDINSTALL_CHROOT
+to install any needed and available firmware for the new system.
.It Cm rootpass
Interactively invokes
.Xr passwd 1
@@ -323,6 +333,13 @@
Path to a log file for the installation.
Default:
.Dq Pa $TMPDIR/bsdinstall_log
+.It Ev BSDINSTALL_SKIP_FIRMWARE
+If not empty, the
+.Cm auto
+target
+will not invoke the
+.Cm firmware
+target.
.It Ev BSDINSTALL_SKIP_HARDENING
If not empty, the
.Cm auto
diff --git a/usr.sbin/bsdinstall/scripts/Makefile b/usr.sbin/bsdinstall/scripts/Makefile
--- a/usr.sbin/bsdinstall/scripts/Makefile
+++ b/usr.sbin/bsdinstall/scripts/Makefile
@@ -7,6 +7,7 @@
entropy \
fetchmissingdists \
finalconfig \
+ firmware \
hardening \
hostname \
jail \
diff --git a/usr.sbin/bsdinstall/scripts/auto b/usr.sbin/bsdinstall/scripts/auto
--- a/usr.sbin/bsdinstall/scripts/auto
+++ b/usr.sbin/bsdinstall/scripts/auto
@@ -364,6 +364,7 @@
[ -z "$BSDINSTALL_SKIP_TIME" ] && bsdinstall time
[ -z "$BSDINSTALL_SKIP_SERVICES" ] && bsdinstall services
[ -z "$BSDINSTALL_SKIP_HARDENING" ] && bsdinstall hardening
+[ -z "$BSDINSTALL_SKIP_FIRMWARE" ] && bsdinstall firmware
[ -z "$BSDINSTALL_SKIP_USERS" ] && bsddialog --backtitle "$OSNAME Installer" \
--title "Add User Accounts" --yesno \
diff --git a/usr.sbin/bsdinstall/scripts/finalconfig b/usr.sbin/bsdinstall/scripts/finalconfig
--- a/usr.sbin/bsdinstall/scripts/finalconfig
+++ b/usr.sbin/bsdinstall/scripts/finalconfig
@@ -45,6 +45,7 @@
"Services" "Set daemons to run on startup" \
"System Hardening" "Set security options" \
"Time Zone" "Set system timezone" \
+ "Firmware" "Install Firmware (requires network)" \
"Handbook" "Install $OSNAME Handbook (requires network)" 2>&1 1>&5)
retval=$?
exec 5>&-
@@ -75,6 +76,9 @@
"Time Zone")
bsdinstall time
;;
+ "Firmware")
+ bsdinstall firmware
+ ;;
"Handbook")
bsdinstall docsinstall
;;
diff --git a/usr.sbin/bsdinstall/scripts/firmware b/usr.sbin/bsdinstall/scripts/firmware
new file mode 100644
--- /dev/null
+++ b/usr.sbin/bsdinstall/scripts/firmware
@@ -0,0 +1,125 @@
+#!/bin/sh
+#-
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2024 The FreeBSD Foundation
+#
+# This software was developed by Björn Zeeb
+# under sponsorship from the FreeBSD Foundation.
+#
+
+BSDCFG_SHARE="/usr/share/bsdconfig"
+. $BSDCFG_SHARE/common.subr || exit 1
+
+f_dprintf "%s: loading includes..." "$0"
+f_include $BSDCFG_SHARE/dialog.subr
+f_include $BSDCFG_SHARE/mustberoot.subr
+f_include $BSDCFG_SHARE/packages/packages.subr
+
+msg_freebsd_firmware_installation="$OSNAME Firmware Installation"
+msg_freebsd_installer="$OSNAME Installer"
+msg_firmware_menu_text="This menu allows you to install firmware packages for your system"
+hline_arrows_space_tab_enter="Use arrows, SPACE, TAB or ENTER"
+hline_ok="Press OK to continue"
+
+dialog_menu_main()
+{
+ local title="$DIALOG_TITLE"
+ local btitle="$DIALOG_BACKTITLE"
+ local prompt="$msg_firmware_menu_text"
+ local hline
+ local check_list= # Empty; filled below
+ local fwlist _fw
+
+ fwlist=`chroot $BSDINSTALL_CHROOT fwget -q -n`
+ case "${fwlist}" in
+ "") # No firmware to install
+ # Print a dialog with OK and a 3 line timeout bar.
+ local height width rows msg
+
+ msg="No firmware to install, continuing..."
+ hline="$hline_ok"
+
+ eval f_dialog_checklist_size height width rows \
+ \"\$title\" \
+ \"\$btitle\" \
+ \"\$msg\" \
+ \"-\" \
+ \"n\" \
+ \"-\" \
+ \"\$hline\"
+
+ ${DIALOG} --title "${title}" --backtitle "${btitle}" \
+ --hline "${hline}" \
+ --nocancel --pause "${msg}" $height $width 5
+ f_dialog_menutag_store -s ""
+ return $DIALOG_OK
+ ;;
+ *)
+ local desc status height width rows selected retval
+ hline="$hline_arrows_space_tab_enter"
+
+ for _fw in ${fwlist}; do
+ desc="${_fw}"
+ f_shell_escape "$desc" desc
+ # install each firmware package by default.
+ check_list="$check_list
+ '$_fw' '$desc' 'on'
+ "
+ done
+
+ eval f_dialog_checklist_size height width rows \
+ \"\$title\" \
+ \"\$btitle\" \
+ \"\$prompt\" \
+ \"\$hline\" \
+ $check_list
+
+ selected=$( eval $DIALOG \
+ --title \"\$title\" \
+ --backtitle \"\$btitle\" \
+ --separate-output \
+ --hline \"\$hline\" \
+ --ok-label \"\$msg_ok\" \
+ --cancel-label \"\$msg_cancel\" \
+ --checklist \"\$prompt\" \
+ $height $width $rows \
+ $check_list \
+ 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
+ )
+ retval=$?
+ f_dialog_menutag_store -s "$selected"
+ return $retval
+ ;;
+ esac
+}
+
+# Initialize
+f_dialog_title "$msg_freebsd_firmware_installation"
+f_dialog_backtitle "$msg_freebsd_installer"
+
+# Gather the firmware files and present them to the user
+dialog_menu_main || f_die
+f_dialog_menutag_fetch selected
+
+# Nothing to install?
+if [ "${selected}" == "" ]; then
+ exit 0
+fi
+
+f_mustberoot_init
+
+# pkg(8) needs name servers (unless we could use a local repo in the future).
+f_quietly cp -f $BSDINSTALL_TMPETC/resolv.conf $BSDINSTALL_CHROOT/etc/
+
+${DIALOG} --title "$DIALOG_TITLE" --backtitle "$DIALOG_BACKTITLE" \
+ --infobox "Installing firmware. This may take a moment." 0 0
+
+# Install each of the selected firmware packages
+for fw in ${selected}; do
+ # We install one at a time in case one is not avail.
+ # pkg-install.8 needs an option to skip unavail.
+ ASSUME_ALWAYS_YES=YES chroot $BSDINSTALL_CHROOT pkg install -qy ${fw}
+done
+
+# end

File Metadata

Mime Type
text/plain
Expires
Tue, Apr 29, 6:20 AM (6 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17837603
Default Alt Text
D47491.diff (6 KB)

Event Timeline