summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2023-09-01 01:33:17 +0100
committerLeah Rowe <leah@libreboot.org>2023-09-01 01:36:34 +0100
commit12b33eb8c18b37546599feec908b9acd829f0029 (patch)
treee2d20388335eb646f1b1057597943bf609b1d8aa
parent225e2609fa758a366238afcb57ab6581496e0399 (diff)
lbmk script: always clean up /tmp files
export TMPDIR to scripts, and handle it in a way that we know lbmk set it delete it at the end of the parent process, but not child processes; when the lbmk script calls itself, child processes will not delete the tmp directory. some scripts in lbmk weren't cleaning up the tmpfiles they made, and they still don't, but this mitigates that. now in follow-up commits, i can start cleaning up those scripts too. not handled by this patch: if the user cancels lbmk (ctrl+c), the tmp directory will still be there. this too will be handled, in subsequent patches Signed-off-by: Leah Rowe <leah@libreboot.org>
-rwxr-xr-xlbmk72
1 files changed, 57 insertions, 15 deletions
diff --git a/lbmk b/lbmk
index 66cc3b7c..175cf394 100755
--- a/lbmk
+++ b/lbmk
@@ -26,6 +26,26 @@ set -u -e
. "include/err.sh"
+tmpdir=""
+tmpdir_was_set="y"
+set | grep TMPDIR 1>/dev/null 2>/dev/null || tmpdir_was_set="n"
+if [ "${tmpdir_was_set}" = "y" ]; then
+ tmpdir="${TMPDIR##*/}"
+ tmpdir="${TMPDIR%_*}"
+ if [ "${tmpdir}" = "lbmk" ]; then
+ tmpdir=""
+ tmpdir_was_set="n"
+ fi
+fi
+if [ "${tmpdir_was_set}" = "n" ]; then
+ export TMPDIR="/tmp"
+ tmpdir="$(mktemp -d -t lbmk_XXXXXXXX)"
+ export TMPDIR="${tmpdir}"
+else
+ export TMPDIR="${TMPDIR}"
+fi
+tmpdir="${TMPDIR}"
+
projectname="$(cat projectname)"
buildpath=""
mode=""
@@ -34,10 +54,10 @@ option=""
main()
{
id -u 1>/dev/null 2>/dev/null || \
- err "cannot ascertain user id"
+ fail "cannot ascertain user id"
- [ "${0##*/}" = "lbmk" ] && err "Don't run this script directly."
- [ $# -lt 1 ] && err "Too few arguments. Try: ${0} help"
+ [ "${0##*/}" = "lbmk" ] && fail "Don't run this script directly."
+ [ $# -lt 1 ] && fail "Too few arguments. Try: ${0} help"
mode="${1}"
if [ "${mode}" = "dependencies" ]; then
@@ -46,13 +66,13 @@ main()
printf "Look at files under resources/dependencies/\n" \
1>&2
printf "Example: ./build dependencies debian\n" 1>&2
- err "target not specified"
+ fail "target not specified"
fi
- install_dependencies $@ || err "Could not install dependencies"
- exit 0
+ install_dependencies $@ || fail "Could not install dependencies"
+ lbmk_exit 0
fi
if [ "$(id -u)" = "0" ]; then
- err "running this command as root is not permitted"
+ fail "running this command as root is not permitted"
fi
buildpath="./script/${0##*/}"
@@ -62,13 +82,13 @@ main()
exit 0
[ $# -lt 2 ] && usage ${0} && exit 1
- ./checkgit || err "Please read: https://libreboot.org/docs/build/"
+ ./checkgit || fail "Please read: https://libreboot.org/docs/build/"
option="${2}"
shift 2
./script/misc/versioncheck || \
- err "Cannot check lbmk version"
+ fail "Cannot check lbmk version"
case "${option}" in
list)
@@ -77,31 +97,33 @@ main()
for option in $(./build command options "${buildpath}/${mode}")
do
"${buildpath}/${mode}/${option}" $@ || \
- err "script fail: ${buildpath}/${mode}/${option} $@"
+ fail "script fail: ${buildpath}/${mode}/${option} $@"
done
;;
*)
if [ ! -d "${buildpath}/${mode}" ]; then
usage $0
- err "Invalid mode '${mode}'. Run: ${0} help"
+ fail "Invalid mode '${mode}'. Run: ${0} help"
elif [ ! -f "${buildpath}/${mode}/${option}" ]; then
usage $0
printf "Invalid option for '%s'." ${mode}
- err "Run: ${0} ${mode} list'."
+ fail "Run: ${0} ${mode} list'."
fi
- "${buildpath}/${mode}/${option}" $@ || err "lbmk error"
+ "${buildpath}/${mode}/${option}" $@ || fail "lbmk error"
esac
+
+ lbmk_exit 0
}
install_dependencies()
{
- [ -f "resources/dependencies/${2}" ] || err "Unsupported target"
+ [ -f "resources/dependencies/${2}" ] || fail "Unsupported target"
aur_notice=""
. "resources/dependencies/${2}"
${pkg_add} ${pkglist} || \
- err "install_dependencies: Error installing dependencies"
+ fail "install_dependencies: Error installing dependencies"
[ "${aur_notice}" = "" ] || \
printf "You must install AUR packages: %s\n" "${aur_notice}" 1>&2
}
@@ -124,4 +146,24 @@ usage()
EOF
}
+lbmk_exit()
+{
+ tmp_cleanup || err "could not remove tmpdir on lbmk exit: ${tmpdir}"
+ exit $1
+}
+
+fail()
+{
+ tmp_cleanup || printf "WARNING: could not remove tmpdir: %s\n" \
+ "${tmpdir}" 1>&2
+ err "${1}"
+}
+
+tmp_cleanup()
+{
+ if [ "${tmpdir_was_set}" = "n" ]; then
+ rm -Rf "${tmpdir}" || return 1
+ fi
+}
+
main $@