diff options
author | Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar> | 2011-10-23 21:24:17 -0300 |
---|---|---|
committer | Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar> | 2011-10-23 21:24:17 -0300 |
commit | 91e11c30f46094bcc7352f42e11799f662b6b689 (patch) | |
tree | 86b058349cced220ca938e257bfc63a5cbaf7f5b | |
parent | 18d7493530819aec50164d1c306beae40e6b9513 (diff) | |
download | archiso32-91e11c30f46094bcc7352f42e11799f662b6b689.tar.xz |
[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>
-rw-r--r-- | archiso/hooks/archiso | 71 |
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 |