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