#!/bin/sh # set -e -o pipefail . /etc/functions . /tmp/config mount_usb(){ # Mount the USB boot device if ! grep -q /media /proc/mounts ; then mount-usb && USB_FAILED=0 || USB_FAILED=1 if [ $USB_FAILED -ne 0 ]; then whiptail --title 'USB Drive Missing' \ --msgbox "Insert your USB drive and press Enter to continue." 16 60 mount-usb && USB_FAILED=0 || USB_FAILED=1 if [ $USB_FAILED -ne 0 ]; then whiptail $CONFIG_ERROR_BG_COLOR --title 'ERROR: Mounting /media Failed' \ --msgbox "Unable to mount USB device" 16 60 fi fi fi } file_selector() { FILE="" FILE_LIST=$1 MENU_MSG=${2:-"Choose the file"} # create file menu options if [ `cat "$FILE_LIST" | wc -l` -gt 0 ]; then option="" while [ -z "$option" ] do MENU_OPTIONS="" n=0 while read option do n=`expr $n + 1` option=$(echo $option | tr " " "_") MENU_OPTIONS="$MENU_OPTIONS $n ${option}" done < $FILE_LIST MENU_OPTIONS="$MENU_OPTIONS a Abort" whiptail --clear --title "Select your File" \ --menu "${MENU_MSG} [1-$n, a to abort]:" 20 120 8 \ -- $MENU_OPTIONS \ 2>/tmp/whiptail || die "Aborting" option_index=$(cat /tmp/whiptail) if [ "$option_index" = "a" ]; then option="a" return fi option=`head -n $option_index $FILE_LIST | tail -1` if [ "$option" == "a" ]; then return fi done if [ -n "$option" ]; then FILE=$option fi else whiptail $CONFIG_ERROR_BG_COLOR --title 'ERROR: No Files Found' \ --msgbox "No Files found matching the pattern. Aborting." 16 60 exit 1 fi } while true; do unset menu_choice whiptail --clear --title "Firmware Management Menu" \ --menu "Select the firmware function to perform\n\nRetaining settings copies existing settings to the new firmware:\n* Keeps your GPG keyring\n* Keeps changes to the default /boot device\n\nErasing settings uses the new firmware as-is:\n* Erases any existing GPG keyring\n* Restores firmware to default factory settings\n* Clears out /boot signatures\n\nIf you are just updating your firmware, you probably want to retain\nyour settings." 20 90 10 \ 'f' ' Flash the firmware with a new ROM, retain settings' \ 'c' ' Flash the firmware with a new ROM, erase settings' \ 'x' ' Exit' \ 2>/tmp/whiptail || recovery "GUI menu failed" menu_choice=$(cat /tmp/whiptail) case "$menu_choice" in "x" ) exit 0 ;; f|c ) if (whiptail --title 'Flash the BIOS with a new ROM' \ --yesno "This requires you insert a USB drive containing:\n* Your BIOS image (*.rom)\n\nAfter you select this file, this program will reflash your BIOS\n\nDo you want to proceed?" 16 90) then mount_usb if grep -q /media /proc/mounts ; then find /media ! -path '*/\.*' -type f -name '*.rom' | sort > /tmp/filelist.txt file_selector "/tmp/filelist.txt" "Choose the ROM to flash" if [ "$FILE" == "" ]; then return else ROM=$FILE fi if (whiptail --title 'Flash ROM?' \ --yesno "This will replace your old ROM with $ROM\n\nDo you want to proceed?" 16 90) then if [ "$menu_choice" == "c" ]; then /bin/flash.sh -c "$ROM" # after flash, /boot signatures are now invalid so go ahead and clear them if ls /boot/kexec* >/dev/null 2>&1 ; then ( mount -o remount,rw /boot 2>/dev/null rm /boot/kexec* 2>/dev/null mount -o remount,ro /boot 2>/dev/null ) fi else /bin/flash.sh "$ROM" fi whiptail --title 'ROM Flashed Successfully' \ --msgbox "$ROM flashed successfully.\nPress Enter to reboot" 16 60 umount /media /bin/reboot else exit fi fi fi ;; esac done exit 0