Created
December 10, 2020 21:55
-
-
Save lrvick/0eb94df2af34cde46e6f7f3ee4187dd9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/initrd/bin/gui-init b/initrd/bin/gui-init | |
index 1369ed1..f576a8e 100755 | |
--- a/initrd/bin/gui-init | |
+++ b/initrd/bin/gui-init | |
@@ -13,21 +13,26 @@ first_pass=true | |
mount_boot() | |
{ | |
- | |
+ | |
# Mount local disk if it is not already mounted | |
while ! grep -q /boot /proc/mounts ; do | |
+ | |
# try to mount if CONFIG_BOOT_DEV exists | |
if [ -e "$CONFIG_BOOT_DEV" ]; then | |
- mount -o ro $CONFIG_BOOT_DEV /boot | |
+ mount -o ro $CONFIG_BOOT_DEV /boot | |
[[ $? -eq 0 ]] && continue | |
fi | |
- # CONFIG_BOOT_DEV doesn't exist or couldn't be mounted, so give user options | |
+ # try to mount usb to /media and /boot if it exists | |
+ mount-usb \ | |
+ && mount -o bind,ro /media /boot \ | |
+ && continue | |
+ | |
+ # no boot device available, so give user options | |
whiptail $BG_COLOR_ERROR --clear --title "ERROR: No Bootable OS Found!" \ | |
- --menu " No bootable OS was found on the default boot device $CONFIG_BOOT_DEV. | |
+ --menu " No bootable OS was found at $CONFIG_BOOT_DEV or on USB. | |
How would you like to proceed?" 30 90 4 \ | |
'b' ' Select a new boot device' \ | |
- 'u' ' Boot from USB' \ | |
'm' ' Continue to the main menu' \ | |
'x' ' Exit to recovery shell' \ | |
2>/tmp/whiptail || recovery "GUI menu failed" | |
@@ -41,9 +46,6 @@ mount_boot() | |
. /tmp/config | |
fi | |
;; | |
- u ) | |
- exec /bin/usb-init | |
- ;; | |
m ) | |
break | |
;; | |
@@ -55,6 +57,11 @@ mount_boot() | |
} | |
verify_global_hashes() | |
{ | |
+ | |
+ # If default boot device is not mounted, then there are no hashes to verify | |
+ # User is likely usb booting. | |
+ df $CONFIG_BOOT_DEV >/dev/null 2>&1 || return 0 | |
+ | |
# Check the hashes of all the files, ignoring signatures for now | |
check_config /boot force | |
TMP_HASH_FILE="/tmp/kexec/kexec_hashes.txt" | |
@@ -458,6 +465,7 @@ while true; do | |
if [ "$totp_confirm" = "y" -o -n "$totp_confirm" ]; then | |
# Try to boot the default | |
mount_boot | |
+ | |
verify_global_hashes | |
if [ $? -ne 0 ]; then | |
continue | |
@@ -467,6 +475,7 @@ while true; do | |
kexec-select-boot -b /boot -c "grub.cfg" -g \ | |
|| recovery "Failed default boot" | |
else | |
+ usb-init | |
if (whiptail --title 'No Default Boot Option Configured' \ | |
--yesno "There is no default boot option configured yet.\nWould you like to load a menu of boot options?\nOtherwise you will return to the main menu." 16 90) then | |
kexec-select-boot -m -b /boot -c "grub.cfg" -g | |
diff --git a/initrd/bin/mount-usb b/initrd/bin/mount-usb | |
index a79dd66..8a8734c 100755 | |
--- a/initrd/bin/mount-usb | |
+++ b/initrd/bin/mount-usb | |
@@ -4,19 +4,6 @@ | |
enable_usb | |
-if ! lsmod | grep -q usb_storage; then | |
- count=$(ls /dev/sd* 2>/dev/null | wc -l) | |
- timeout=0 | |
- echo "Scanning for USB storage devices..." | |
- insmod /lib/modules/usb-storage.ko >/dev/null 2>&1 \ | |
- || die "usb_storage: module load failed" | |
- while [[ $count == $(ls /dev/sd* 2>/dev/null | wc -l) ]]; do | |
- [[ $timeout -ge 4 ]] && break | |
- sleep 1 | |
- timeout=$(($timeout+1)) | |
- done | |
-fi | |
- | |
if [ ! -d /media ]; then | |
mkdir /media | |
fi | |
diff --git a/initrd/bin/usb-scan b/initrd/bin/usb-scan | |
index d9f26b0..b64f150 100755 | |
--- a/initrd/bin/usb-scan | |
+++ b/initrd/bin/usb-scan | |
@@ -5,12 +5,6 @@ set -e -o pipefail | |
. /etc/gui_functions | |
. /tmp/config | |
-# Unmount any previous boot device | |
-if grep -q /boot /proc/mounts ; then | |
- umount /boot \ | |
- || die "Unable to unmount /boot" | |
-fi | |
- | |
# Mount the USB boot device | |
mount_usb || die "Unable to mount /media" | |
@@ -29,12 +23,16 @@ get_menu_option() { | |
MENU_OPTIONS="$MENU_OPTIONS $n ${option}" | |
done < /tmp/iso_menu.txt | |
- whiptail --clear --title "Select your ISO boot option" \ | |
- --menu "Choose the ISO boot option [1-$n, s for standard boot, a to abort]:" 20 120 8 \ | |
- -- $MENU_OPTIONS \ | |
- 2>/tmp/whiptail || die "Aborting boot attempt" | |
+ if [ "$n" -eq "1" ]; then | |
+ option_index=1 | |
+ else | |
+ whiptail --clear --title "Select your ISO boot option" \ | |
+ --menu "Choose the ISO boot option [1-$n, s for standard boot, a to abort]:" 20 120 8 \ | |
+ -- $MENU_OPTIONS \ | |
+ 2>/tmp/whiptail || die "Aborting boot attempt" | |
- option_index=$(cat /tmp/whiptail) | |
+ option_index=$(cat /tmp/whiptail) | |
+ fi | |
else | |
echo "+++ Select your ISO boot option:" | |
n=0 | |
diff --git a/initrd/etc/functions b/initrd/etc/functions | |
index dc0fbed..a083e17 100755 | |
--- a/initrd/etc/functions | |
+++ b/initrd/etc/functions | |
@@ -122,6 +122,18 @@ enable_usb() | |
|| die "xhci_pci: module load failed" | |
sleep 2 | |
fi | |
+ if ! lsmod | grep -q usb_storage; then | |
+ count=$(ls /dev/sd* 2>/dev/null | wc -l) | |
+ timeout=0 | |
+ echo "Scanning for USB storage devices..." | |
+ insmod /lib/modules/usb-storage.ko >/dev/null 2>&1 \ | |
+ || die "usb_storage: module load failed" | |
+ while [[ $count == $(ls /dev/sd* 2>/dev/null | wc -l) ]]; do | |
+ [[ $timeout -ge 4 ]] && break | |
+ sleep 1 | |
+ timeout=$(($timeout+1)) | |
+ done | |
+ fi | |
} | |
confirm_gpg_card() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment