diff --git a/archiso/hooks/archiso b/archiso/hooks/archiso index 2b55a00..1ef6e95 100644 --- a/archiso/hooks/archiso +++ b/archiso/hooks/archiso @@ -76,6 +76,44 @@ _mnt_sfs() { fi } +# args: device, mountpoint, flags +_mnt_dev() { + local dev="${1}" + local mnt="${2}" + local flg="${3}" + + local fstype fserror + + msg ":: Mounting '${dev}' to '${mnt}'" + + while ! poll_device "${dev}" 30; do + echo "ERROR: '${dev}' device did not show up after 30 seconds..." + echo " Falling back to interactive prompt" + echo " You can try to fix the problem manually, log out when you are finished" + launch_interactive_shell + done + + fstype=$(blkid -o value -s TYPE -p "${dev}" 2> /dev/null) + if [[ -n "${fstype}" ]]; then + if mount ${flg} -t "${fstype}" "${dev}" "${mnt}"; then + msg ":: Device '${dev}' mounted successfully." + fserror=0 + else + echo "ERROR; Failed to mount '${dev}' (FS is ${fstype})" + fserror=1 + fi + else + echo "ERROR: '${dev}' found, but the filesystem type is unknown." + fserror=1 + fi + + if [[ ${fserror} -eq 1 ]]; then + echo " Falling back to interactive prompt" + echo " You can try to fix the problem manually, log out when you are finished" + launch_interactive_shell + fi +} + _verify_checksum() { local _status cd "/bootmnt/${archisobasedir}" @@ -85,7 +123,6 @@ _verify_checksum() { return ${_status} } - run_hook() { modprobe loop @@ -109,38 +146,12 @@ run_hook() { # args: /path/to/newroot archiso_mount_handler() { local newroot="${1}" - local fstype fserror _init_loop_dev - msg ":: Waiting for boot device..." - while ! poll_device "${archisodevice}" 30; do - echo "ERROR: boot device didn't show up after 30 seconds..." - echo " Falling back to interactive prompt" - echo " You can try to fix the problem manually, log out when you are finished" - launch_interactive_shell - done - - fstype=$(blkid -o value -s TYPE -p "${archisodevice}" 2> /dev/null) - if [[ -n "${fstype}" ]]; then - if mount -r -t "${fstype}" "${archisodevice}" /bootmnt; then - if [[ -f "${aitab}" ]]; then - msg ":: Mounted archiso volume successfully." - fserror=0 - else - echo "ERROR: Mounting was successful, but the '${aitab}' file does not exist." - fserror=1 - fi - else - echo "ERROR; Failed to mount '${archisodevice}' (FS is ${fstype})" - fserror=1 - fi - else - echo "ERROR: '${archisodevice}' found, but the filesystem type is unknown." - fserror=1 - fi - - if [[ ${fserror} -eq 1 ]]; then + _mnt_dev "${archisodevice}" "/bootmnt" "-r" + if [[ ! -f "${aitab}" ]]; then + echo "ERROR: '${aitab}' file does not exist." echo " Falling back to interactive prompt" echo " You can try to fix the problem manually, log out when you are finished" launch_interactive_shell