summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archiso/hooks/archiso71
1 files changed, 41 insertions, 30 deletions
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