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