[archiso] Add a new function _mnt_dev(), use it for mounting archisodevice.

Separate this code from main mount hook, and make it more generic.

_mnt_dev(device, mountpoint, flags) ->
    wait for device and mount, launch a shell if something goes wrong.

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
This commit is contained in:
Gerardo Exequiel Pozzi 2011-10-23 21:24:17 -03:00
parent 18d7493530
commit 91e11c30f4

View File

@ -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