comparison sbin/ftjail @ 342:89877869a665

Create all temporary files within a unique temporary directory
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 03 Dec 2022 21:27:50 +0100
parents a204a7415d4a
children c5b1647cedb5
comparison
equal deleted inserted replaced
341:a204a7415d4a 342:89877869a665
971 local _res _jailname _dir_mounts _dir_fn_fstab _dir_basename _dir_fn_tldir 971 local _res _jailname _dir_mounts _dir_fn_fstab _dir_basename _dir_fn_tldir
972 local _root_dataset _root_mountpoint _root_type _root_options 972 local _root_dataset _root_mountpoint _root_type _root_options
973 local _clone_extra_props _canmount_prop 973 local _clone_extra_props _canmount_prop
974 local _line _opt 974 local _line _opt
975 local _root_readonly _root_origin 975 local _root_readonly _root_origin
976 local _u_tmpdir
976 977
977 _opt_keep="no" 978 _opt_keep="no"
978 _opt_old_origin="" 979 _opt_old_origin=""
979 while getopts "ko:" _opt ; do 980 while getopts "ko:" _opt ; do
980 case ${_opt} in 981 case ${_opt} in
1051 # 1052 #
1052 # XXX FIXME: should we check that _root_options equals "ro" or 1053 # XXX FIXME: should we check that _root_options equals "ro" or
1053 # start with "ro," 1054 # start with "ro,"
1054 # _root_origin="$(zfs list -H -o origin "${_root_dataset}")" 1055 # _root_origin="$(zfs list -H -o origin "${_root_dataset}")"
1055 1056
1056 _dir_fn_fstab="$(env TMPDIR=/var/tmp mktemp -t ftjail_${_dir_basename}.fstab)" 1057 _u_tmpdir="$(env TMPDIR=/var/tmp mktemp -d -t ftjail_${_dir_basename})"
1058 [ -z "${_u_tmpdir}" ] && { echo "ERROR: cannot create unique temp dir" 1>&2; return 1; }
1059 _dir_fn_fstab="${_u_tmpdir}/fstab"
1057 echo -n "${_dir_mounts}" >>"${_dir_fn_fstab}" 1060 echo -n "${_dir_mounts}" >>"${_dir_fn_fstab}"
1058 1061 _dir_fn_tldir="${_u_tmpdir}/tldirs"
1059 _dir_fn_tldir="$(env TMPDIR=/var/tmp mktemp -t ftjail_${_dir_basename}.tldir)"
1060 find "${_directory}" -depth 1 -type d 2>/dev/null | sort >>"${_dir_fn_tldir}" 1062 find "${_directory}" -depth 1 -type d 2>/dev/null | sort >>"${_dir_fn_tldir}"
1061 1063
1062 # Unmount in reverse order: unmount can do it for us 1064 # Unmount in reverse order: unmount can do it for us
1063 echo "Unmounting all datasets mounted at \`${_directory}'" 1065 echo "Unmounting all datasets mounted at \`${_directory}'"
1064 umount -a -F "${_dir_fn_fstab}" -v 1066 umount -a -F "${_dir_fn_fstab}" -v
1142 etcupdate -D "${_directory}" -t "${_etcupdate_tarball}" 1144 etcupdate -D "${_directory}" -t "${_etcupdate_tarball}"
1143 fi 1145 fi
1144 1146
1145 if [ "${_opt_keep}" != "yes" ]; then 1147 if [ "${_opt_keep}" != "yes" ]; then
1146 echo "Cleaning up...""" 1148 echo "Cleaning up..."""
1147 [ -n "${_dir_fn_tldir}" } && [ -f "${_dir_fn_tldir}" ] && rm -f "${_dir_fn_tldir}" 1149 [ -n "${_u_tmpdir}" ] && [ -d "${_u_tmpdir}" ] && rm -rvf "${_u_tmpdir}"
1148 [ -n "${_dir_fn_fstab}" ] && [ -f "${_dir_fn_fstab}" ] && rm -f "${_dir_fn_fstab}"
1149 fi 1150 fi
1150 echo "Done." 1151 echo "Done."
1151 } 1152 }
1152 1153
1153 1154