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