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