summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2016-09-22 18:36:30 -0300
committerRenato Botelho <renato@netgate.com>2016-09-22 18:36:39 -0300
commit89e9960e34737c027d7fb0516d7183dc0a37f391 (patch)
tree2821d19f5e55d15bda84e0b844fb35bd788c6dc0 /tools
parente0d81869f063d01d045ee960f355d321e6e925ef (diff)
downloadpfsense-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.sh48
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
}
OpenPOWER on IntegriCloud