summaryrefslogtreecommitdiffstats
path: root/tools/builder_common.sh
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:30 -0300
commitbe1eff2b4ba57c8f97128dacefb5271549c16d51 (patch)
tree6b49d23d19ba0526b58c078e8084bae450e81716 /tools/builder_common.sh
parentefa9174ac25bdda8b8d943ff25c8a065cc787f5e (diff)
downloadpfsense-be1eff2b4ba57c8f97128dacefb5271549c16d51.zip
pfsense-be1eff2b4ba57c8f97128dacefb5271549c16d51.tar.gz
Implement _umount() for cases where filesystem umount doesn't work
Diffstat (limited to 'tools/builder_common.sh')
-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 0c23090..81a4242 100644
--- a/tools/builder_common.sh
+++ b/tools/builder_common.sh
@@ -46,6 +46,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
@@ -501,7 +529,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}
@@ -513,7 +541,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
@@ -537,14 +565,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
@@ -565,11 +593,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
@@ -673,14 +701,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
@@ -1425,8 +1453,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