diff options
author | Renato Botelho <renato@netgate.com> | 2016-09-22 18:36:30 -0300 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2016-09-22 18:36:39 -0300 |
commit | 89e9960e34737c027d7fb0516d7183dc0a37f391 (patch) | |
tree | 2821d19f5e55d15bda84e0b844fb35bd788c6dc0 /tools | |
parent | e0d81869f063d01d045ee960f355d321e6e925ef (diff) | |
download | pfsense-89e9960e34737c027d7fb0516d7183dc0a37f391.zip pfsense-89e9960e34737c027d7fb0516d7183dc0a37f391.tar.gz |
Implement _umount() for cases where filesystem umount doesn't work
Diffstat (limited to 'tools')
-rw-r--r-- | tools/builder_common.sh | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/tools/builder_common.sh b/tools/builder_common.sh index abf7657..614e7af 100644 --- a/tools/builder_common.sh +++ b/tools/builder_common.sh @@ -78,6 +78,34 @@ git_last_commit() { echo "$CURRENT_COMMIT" > $SCRATCHDIR/build_commit_info.txt } +_umount() { + local _mnt="${1}" + + if [ -z "${_mnt}" ]; then + return + fi + + local _ntries=0 + local _force="" + while df ${_mnt} >/dev/null 2>&1; do + if [ ${_ntries} -eq 4 ]; then + echo "ERROR: Error trying to umount ${_mnt}" + print_error_pfS + fi + + if [ ${_ntries} -ne 0 ]; then + sleep 1 + fi + + if [ ${_ntries} -eq 3 ]; then + _force="-f " + fi + + umount ${_force}${_mnt} 2>&1 >>${LOGFILE:-/dev/null} + _ntries=$((_ntries+1)) + done +} + # Create core pkg repository core_pkg_create_repo() { if [ ! -d "${CORE_PKG_REAL_PATH}/All" ]; then @@ -781,7 +809,7 @@ awk ' print_error_pfS fi # Consider the unmounting as well - trap "umount /dev/ufs/${_label}0; mdconfig -d -u ${MD}; return" 1 2 15 EXIT + trap "_umount /dev/ufs/${_label}0; mdconfig -d -u ${MD}; return" 1 2 15 EXIT clone_directory_contents ${FINAL_CHROOT_DIR} ${MNT} @@ -793,7 +821,7 @@ awk ' echo "/dev/ufs/cf /cf ufs ro,sync,noatime 1 1" >> ${MNT}/etc/fstab fi - umount ${MNT} + _umount ${MNT} # Restore the original trap trap "mdconfig -d -u ${MD}; return" 1 2 15 EXIT @@ -817,14 +845,14 @@ awk ' print_error_pfS fi # Consider the unmounting as well - trap "umount /dev/ufs/${_label}1; mdconfig -d -u ${MD}; return" 1 2 15 EXIT + trap "_umount /dev/ufs/${_label}1; mdconfig -d -u ${MD}; return" 1 2 15 EXIT echo "/dev/ufs/${_label}1 / ufs ro,sync,noatime 1 1" > ${MNT}/etc/fstab if [ $NANO_CONFSIZE -gt 0 ] ; then echo "/dev/ufs/cf /cf ufs ro,sync,noatime 1 1" >> ${MNT}/etc/fstab fi - umount ${MNT} + _umount ${MNT} # Restore the trap back trap "mdconfig -d -u ${MD}; return" 1 2 15 EXIT fi @@ -845,11 +873,11 @@ awk ' print_error_pfS fi # Consider the unmounting as well - trap "umount /dev/ufs/cf; mdconfig -d -u ${MD}; return" 1 2 15 EXIT + trap "_umount /dev/ufs/cf; mdconfig -d -u ${MD}; return" 1 2 15 EXIT clone_directory_contents ${FINAL_CHROOT_DIR}/cf ${MNT} - umount ${MNT} + _umount ${MNT} # Restore the trap back trap "mdconfig -d -u ${MD}; return" 1 2 15 EXIT else @@ -965,14 +993,14 @@ create_ova_image() { echo ">>> ERROR: Error mounting temporary vmdk image. STOPPING!" | tee -a ${LOGFILE} print_error_pfS fi - trap "umount ${_mntdir}; mdconfig -d -u ${_md}; return" 1 2 15 EXIT + trap "_umount ${_mntdir}; mdconfig -d -u ${_md}; return" 1 2 15 EXIT echo "Done!" | tee -a ${LOGFILE} clone_directory_contents ${FINAL_CHROOT_DIR} ${_mntdir} sync - umount ${_mntdir} 2>&1 >>${LOGFILE} + _umount ${_mntdir} 2>&1 >>${LOGFILE} mdconfig -d -u ${_md} trap "-" 1 2 15 EXIT @@ -1761,8 +1789,8 @@ pkg_chroot() { script -aq ${BUILDER_LOGS}/install_pkg_install_ports.txt pkg -c ${_root} $@ >/dev/null 2>&1 local result=$? rm -f ${_root}/etc/resolv.conf - /sbin/umount -f ${_root}/dev - /sbin/umount -f ${_root}/var/cache/pkg + _umount -f ${_root}/dev + _umount -f ${_root}/var/cache/pkg return $result } |