xref: /freebsd/usr.sbin/bsdinstall/scripts/firmware (revision 1b0b13915aaea80007e4ff86f2bb4f622e10d780)
1bbe2a1daSBjoern A. Zeeb#!/bin/sh
2bbe2a1daSBjoern A. Zeeb#-
3bbe2a1daSBjoern A. Zeeb# SPDX-License-Identifier: BSD-2-Clause
4bbe2a1daSBjoern A. Zeeb#
5bbe2a1daSBjoern A. Zeeb# Copyright (c) 2024 The FreeBSD Foundation
6bbe2a1daSBjoern A. Zeeb#
7bbe2a1daSBjoern A. Zeeb# This software was developed by Björn Zeeb
8bbe2a1daSBjoern A. Zeeb# under sponsorship from the FreeBSD Foundation.
9bbe2a1daSBjoern A. Zeeb#
10bbe2a1daSBjoern A. Zeeb
11bbe2a1daSBjoern A. ZeebBSDCFG_SHARE="/usr/share/bsdconfig"
12bbe2a1daSBjoern A. Zeeb. $BSDCFG_SHARE/common.subr || exit 1
13bbe2a1daSBjoern A. Zeeb
14bbe2a1daSBjoern A. Zeebf_dprintf "%s: loading includes..." "$0"
15bbe2a1daSBjoern A. Zeebf_include $BSDCFG_SHARE/dialog.subr
16bbe2a1daSBjoern A. Zeebf_include $BSDCFG_SHARE/mustberoot.subr
17bbe2a1daSBjoern A. Zeebf_include $BSDCFG_SHARE/packages/packages.subr
18bbe2a1daSBjoern A. Zeeb
19bbe2a1daSBjoern A. Zeebmsg_freebsd_firmware_installation="$OSNAME Firmware Installation"
20bbe2a1daSBjoern A. Zeebmsg_freebsd_installer="$OSNAME Installer"
21bbe2a1daSBjoern A. Zeebmsg_firmware_menu_text="This menu allows you to install firmware packages for your system"
22bbe2a1daSBjoern A. Zeebhline_arrows_space_tab_enter="Use arrows, SPACE, TAB or ENTER"
23bbe2a1daSBjoern A. Zeebhline_ok="Press OK to continue"
24bbe2a1daSBjoern A. Zeeb
25bbe2a1daSBjoern A. Zeebdialog_menu_main()
26bbe2a1daSBjoern A. Zeeb{
27bbe2a1daSBjoern A. Zeeb	local title="$DIALOG_TITLE"
28bbe2a1daSBjoern A. Zeeb	local btitle="$DIALOG_BACKTITLE"
29bbe2a1daSBjoern A. Zeeb	local prompt="$msg_firmware_menu_text"
30bbe2a1daSBjoern A. Zeeb	local hline
31bbe2a1daSBjoern A. Zeeb	local check_list=	# Empty; filled below
32bbe2a1daSBjoern A. Zeeb	local fwlist _fw
33bbe2a1daSBjoern A. Zeeb
34bbe2a1daSBjoern A. Zeeb	fwlist=`chroot $BSDINSTALL_CHROOT fwget -q -n`
35bbe2a1daSBjoern A. Zeeb	case "${fwlist}" in
36bbe2a1daSBjoern A. Zeeb	"")	# No firmware to install
37bbe2a1daSBjoern A. Zeeb		# Print a dialog with OK and a 3 line timeout bar.
38bbe2a1daSBjoern A. Zeeb		local height width rows msg
39bbe2a1daSBjoern A. Zeeb
40bbe2a1daSBjoern A. Zeeb		msg="No firmware to install, continuing..."
41bbe2a1daSBjoern A. Zeeb		hline="$hline_ok"
42bbe2a1daSBjoern A. Zeeb
43bbe2a1daSBjoern A. Zeeb		eval f_dialog_checklist_size height width rows \
44bbe2a1daSBjoern A. Zeeb			\"\$title\"  \
45bbe2a1daSBjoern A. Zeeb			\"\$btitle\" \
46bbe2a1daSBjoern A. Zeeb			\"\$msg\" \
47bbe2a1daSBjoern A. Zeeb			\"-\"  \
48bbe2a1daSBjoern A. Zeeb			\"n\"  \
49bbe2a1daSBjoern A. Zeeb			\"-\" \
50bbe2a1daSBjoern A. Zeeb			\"\$hline\"
51bbe2a1daSBjoern A. Zeeb
52bbe2a1daSBjoern A. Zeeb		${DIALOG} --title "${title}" --backtitle "${btitle}" \
53bbe2a1daSBjoern A. Zeeb		    --hline "${hline}" \
54bbe2a1daSBjoern A. Zeeb		    --nocancel --pause "${msg}" $height $width 5
55bbe2a1daSBjoern A. Zeeb		f_dialog_menutag_store -s ""
56bbe2a1daSBjoern A. Zeeb		return $DIALOG_OK
57bbe2a1daSBjoern A. Zeeb		;;
58bbe2a1daSBjoern A. Zeeb	*)
59bbe2a1daSBjoern A. Zeeb		local desc status height width rows selected retval
60bbe2a1daSBjoern A. Zeeb		hline="$hline_arrows_space_tab_enter"
61bbe2a1daSBjoern A. Zeeb
62bbe2a1daSBjoern A. Zeeb		for _fw in ${fwlist}; do
63bbe2a1daSBjoern A. Zeeb			desc="${_fw}"
64bbe2a1daSBjoern A. Zeeb			f_shell_escape "$desc" desc
65bbe2a1daSBjoern A. Zeeb			# install each firmware package by default.
66bbe2a1daSBjoern A. Zeeb			check_list="$check_list
67bbe2a1daSBjoern A. Zeeb				'$_fw' '$desc' 'on'
68bbe2a1daSBjoern A. Zeeb			"
69bbe2a1daSBjoern A. Zeeb		done
70bbe2a1daSBjoern A. Zeeb
71bbe2a1daSBjoern A. Zeeb		eval f_dialog_checklist_size height width rows \
72bbe2a1daSBjoern A. Zeeb			\"\$title\"  \
73bbe2a1daSBjoern A. Zeeb			\"\$btitle\" \
74bbe2a1daSBjoern A. Zeeb			\"\$prompt\" \
75bbe2a1daSBjoern A. Zeeb			\"\$hline\"  \
76bbe2a1daSBjoern A. Zeeb			$check_list
77bbe2a1daSBjoern A. Zeeb
78bbe2a1daSBjoern A. Zeeb		selected=$( eval $DIALOG		\
79bbe2a1daSBjoern A. Zeeb			--title \"\$title\"		\
80bbe2a1daSBjoern A. Zeeb			--backtitle \"\$btitle\"	\
81bbe2a1daSBjoern A. Zeeb			--separate-output		\
82bbe2a1daSBjoern A. Zeeb			--hline \"\$hline\"		\
83bbe2a1daSBjoern A. Zeeb			--ok-label \"\$msg_ok\"		\
84bbe2a1daSBjoern A. Zeeb			--cancel-label \"\$msg_cancel\"	\
85bbe2a1daSBjoern A. Zeeb			--checklist \"\$prompt\"	\
86bbe2a1daSBjoern A. Zeeb			$height $width $rows		\
87bbe2a1daSBjoern A. Zeeb			$check_list			\
88bbe2a1daSBjoern A. Zeeb			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
89bbe2a1daSBjoern A. Zeeb		)
90bbe2a1daSBjoern A. Zeeb		retval=$?
91bbe2a1daSBjoern A. Zeeb		f_dialog_menutag_store -s "$selected"
92bbe2a1daSBjoern A. Zeeb		return $retval
93bbe2a1daSBjoern A. Zeeb		;;
94bbe2a1daSBjoern A. Zeeb	esac
95bbe2a1daSBjoern A. Zeeb}
96bbe2a1daSBjoern A. Zeeb
97bbe2a1daSBjoern A. Zeeb# Initialize
98bbe2a1daSBjoern A. Zeebf_dialog_title "$msg_freebsd_firmware_installation"
99bbe2a1daSBjoern A. Zeebf_dialog_backtitle "$msg_freebsd_installer"
100bbe2a1daSBjoern A. Zeeb
101bbe2a1daSBjoern A. Zeeb# Gather the firmware files and present them to the user
102bbe2a1daSBjoern A. Zeebdialog_menu_main || f_die
103bbe2a1daSBjoern A. Zeebf_dialog_menutag_fetch selected
104bbe2a1daSBjoern A. Zeeb
105bbe2a1daSBjoern A. Zeeb# Nothing to install?
106bbe2a1daSBjoern A. Zeebif [ "${selected}" == "" ]; then
107bbe2a1daSBjoern A. Zeeb	exit 0
108bbe2a1daSBjoern A. Zeebfi
109bbe2a1daSBjoern A. Zeeb
110bbe2a1daSBjoern A. Zeebf_mustberoot_init
111bbe2a1daSBjoern A. Zeeb
112bbe2a1daSBjoern A. Zeeb# pkg(8) needs name servers (unless we could use a local repo in the future).
113bbe2a1daSBjoern A. Zeebf_quietly cp -f $BSDINSTALL_TMPETC/resolv.conf $BSDINSTALL_CHROOT/etc/
114bbe2a1daSBjoern A. Zeeb
115bbe2a1daSBjoern A. Zeeb${DIALOG} --title "$DIALOG_TITLE" --backtitle "$DIALOG_BACKTITLE" \
116bbe2a1daSBjoern A. Zeeb	--infobox "Installing firmware. This may take a moment." 0 0
117bbe2a1daSBjoern A. Zeeb
118*1b0b1391SEd Mastepkg_install_fail=
119bbe2a1daSBjoern A. Zeeb# Install each of the selected firmware packages
120bbe2a1daSBjoern A. Zeebfor fw in ${selected}; do
121bbe2a1daSBjoern A. Zeeb	# We install one at a time in case one is not avail.
122bbe2a1daSBjoern A. Zeeb	# pkg-install.8 needs an option to skip unavail.
123bbe2a1daSBjoern A. Zeeb	ASSUME_ALWAYS_YES=YES chroot $BSDINSTALL_CHROOT pkg install -qy ${fw}
124*1b0b1391SEd Maste	if [ $? -ne 0 ]; then
125*1b0b1391SEd Maste		pkg_install_fail="$pkg_install_fail $fw"
126*1b0b1391SEd Maste	fi
127bbe2a1daSBjoern A. Zeebdone
128*1b0b1391SEd Masteif [ -n "$pkg_install_fail" ]; then
129*1b0b1391SEd Maste	# Error(s) were likely spammed to the console; give the user a moment
130*1b0b1391SEd Maste	# to read them.
131*1b0b1391SEd Maste	sleep 5
132*1b0b1391SEd Maste	bsddialog --backtitle "$OSNAME Installer" --title "Error" \
133*1b0b1391SEd Maste	    --msgbox "Error fetching firmware file(s)$pkg_install_fail" 0 0
134*1b0b1391SEd Maste		exit 1
135*1b0b1391SEd Mastefi
136bbe2a1daSBjoern A. Zeeb
137bbe2a1daSBjoern A. Zeeb# end
138