diff --git a/initrd/bin/flash-gui.sh b/initrd/bin/flash-gui.sh index ff58c901..524f36b1 100755 --- a/initrd/bin/flash-gui.sh +++ b/initrd/bin/flash-gui.sh @@ -16,6 +16,16 @@ fi # A brand can override the extension used for update packages if desired UPDATE_PKG_EXT="${CONFIG_BRAND_UPDATE_PKG_EXT:-zip}" +# Most boards use a .rom file as a "plain" update, contents of the BIOS flash +UPDATE_PLAIN_EXT=rom +# talos-2 uses a .tgz file for its "plain" update, contains other parts as well +# as its own integrity check. This isn't integrated with the "update package" +# workflow (as-is, a .tgz could be inside that package in theory) but more work +# would be needed to properly integrate it. +if [ "${CONFIG_BOARD%_*}" = talos-2 ]; then + UPDATE_PLAIN_EXT=tgz +fi + # Check that a glob matches exactly one thing. If so, echoes the single value. # Otherwise, fails. As always, do not quote the glob. # @@ -50,10 +60,10 @@ while true; do ;; f | c) if (whiptail $BG_COLOR_WARNING --title 'Flash the BIOS with a new ROM' \ - --yesno "You will need to insert a USB drive containing your BIOS image (*.$UPDATE_PKG_EXT, *.rom, or *.tgz).\n\nAfter you select this file, this program will reflash your BIOS.\n\nDo you want to proceed?" 0 80); then + --yesno "You will need to insert a USB drive containing your BIOS image (*.$UPDATE_PKG_EXT or\n*.$UPDATE_PLAIN_EXT).\n\nAfter you select this file, this program will reflash your BIOS.\n\nDo you want to proceed?" 0 80); then mount_usb if grep -q /media /proc/mounts; then - find /media ! -path '*/\.*' -type f \( -name '*.rom' -o -name '*.tgz' -o -type f -name "*.$UPDATE_PKG_EXT" \) | sort >/tmp/filelist.txt + find /media ! -path '*/\.*' -type f \( -name "*.$UPDATE_PLAIN_EXT" -o -type f -name "*.$UPDATE_PKG_EXT" \) | sort >/tmp/filelist.txt file_selector "/tmp/filelist.txt" "Choose the ROM to flash" if [ "$FILE" == "" ]; then exit 1 @@ -85,7 +95,7 @@ while true; do fi # The package must contain exactly one *.rom file, flash that. - if ! PACKAGE_ROM="$(single_glob "$PKG_EXTRACT/"*.rom)"; then + if ! PACKAGE_ROM="$(single_glob "$PKG_EXTRACT/"*."$UPDATE_PLAIN_EXT")"; then whiptail --title 'BIOS Image Not Found! ' \ --msgbox "A BIOS image was not found in\n$PKG_FILE.\n\nPlease check your file (e.g. re-download).\n" 16 60 exit 1 @@ -103,7 +113,7 @@ while true; do ROM="$PKG_FILE" ROM_HASH=$(sha256sum "$ROM" | awk '{print $1}') || die "Failed to hash ROM file" if ! (whiptail $CONFIG_ERROR_BG_COLOR --title 'Flash ROM without integrity check?' \ - --yesno "You have provided a *.rom file. The integrity of the file can not be\nchecked automatically for this file type.\n\nROM: $ROM\nSHA256SUM: $ROM_HASH\n\nIf you do not know how to check the file integrity yourself,\nyou should use a *.$UPDATE_PKG_EXT file instead.\n\nIf the file is damaged, you will not be able to boot anymore.\nDo you want to proceed flashing without file integrity check?" 0 80); then + --yesno "You have provided a *.$UPDATE_PLAIN_EXT file. The integrity of the file can not be\nchecked automatically for this file type.\n\nROM: $ROM\nSHA256SUM: $ROM_HASH\n\nIf you do not know how to check the file integrity yourself,\nyou should use a *.$UPDATE_PKG_EXT file instead.\n\nIf the file is damaged, you will not be able to boot anymore.\nDo you want to proceed flashing without file integrity check?" 0 80); then exit 1 fi fi