161 lines
4.8 KiB
Diff
161 lines
4.8 KiB
Diff
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()
|