bkctld-rm: add support for the "new" canonical path for incs policy
This commit is contained in:
parent
a5c0745d09
commit
018392e8e3
|
@ -7,39 +7,68 @@
|
||||||
# shellcheck source=config
|
# shellcheck source=config
|
||||||
LIBDIR="$(dirname $0)" && . "${LIBDIR}/config"
|
LIBDIR="$(dirname $0)" && . "${LIBDIR}/config"
|
||||||
|
|
||||||
|
relative_date() {
|
||||||
|
format=$(echo $1 | cut -d'.' -f1)
|
||||||
|
time_jump=$(echo $1 | cut -d'.' -f2)
|
||||||
|
|
||||||
|
reference_date=$(date "${format}")
|
||||||
|
past_date=$(date --date "${reference_date} ${time_jump}" +"%Y-%m-%d")
|
||||||
|
|
||||||
|
echo ${past_date}
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_inc() {
|
||||||
|
jail=$1
|
||||||
|
inc=$2
|
||||||
|
|
||||||
|
start=$(date +"%H:%M:%S")
|
||||||
|
inc_inode=$(stat --format=%i "${INCDIR}/${jail}/${inc}")
|
||||||
|
if [ "${inc_inode}" -eq 256 ]; then
|
||||||
|
/bin/btrfs subvolume delete "${INCDIR}/${jail}/${inc}" | debug
|
||||||
|
end=$(date +"%H:%M:%S")
|
||||||
|
notice "${jail} : deleted ${inc} inc [${start}/${end}]"
|
||||||
|
else
|
||||||
|
lock="/run/lock/bkctld/rm-${jail}.lock"
|
||||||
|
if [ -f "${lock}" ]; then
|
||||||
|
warning "${jail} : trying to run already running rm"
|
||||||
|
else
|
||||||
|
(
|
||||||
|
empty="/tmp/bkctld-${$}-$(date +%N)"
|
||||||
|
mkdir -p /run/lock/bkctld && touch "${lock}" && mkdir -p "${empty}"
|
||||||
|
trap "rm -f ${lock} && rmdir ${empty}" 0
|
||||||
|
rsync -a --delete "${empty}/" "${INCDIR}/${jail}/${inc}/"
|
||||||
|
rmdir "${INCDIR}/${jail}/${inc}/"
|
||||||
|
end=$(date +"%H:%M:%S")
|
||||||
|
notice "${jail} : deleted ${inc} inc [${start}/${end}]"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
for jail in $("${LIBDIR}/bkctld-list"); do
|
for jail in $("${LIBDIR}/bkctld-list"); do
|
||||||
incs=$(ls "${INCDIR}/${jail}")
|
incs=$(ls "${INCDIR}/${jail}")
|
||||||
if [ -f "${CONFDIR}/${jail}" ]; then
|
|
||||||
keepfile="$(mktemp)"
|
if [ -f "${CONFDIR}/${jail}.d/incs_policy" ]; then
|
||||||
while read j; do
|
incs_policy_file="${CONFDIR}/${jail}.d/incs_policy"
|
||||||
date=$( echo "${j}" | cut -d. -f1 )
|
elif [ -f "${CONFDIR}/${jail}" ]; then
|
||||||
before=$( echo "${j}" | cut -d. -f2 )
|
incs_policy_file="${CONFDIR}/${jail}"
|
||||||
date -d "$(date "${date}") ${before}" "+%Y-%m-%d"
|
else
|
||||||
done < "${CONFDIR}/${jail}" > "${keepfile}"
|
incs_policy_file=""
|
||||||
for j in $(echo "${incs}" | grep -v -f "${keepfile}"); do
|
fi
|
||||||
start=$(date +"%H:%M:%S")
|
|
||||||
inc_inode=$(stat --format=%i "${INCDIR}/${jail}/${j}")
|
if [ -n "${incs_policy_file}" ]; then
|
||||||
if [ "${inc_inode}" -eq 256 ]; then
|
incs_policy_keep_file="$(mktemp)"
|
||||||
/bin/btrfs subvolume delete "${INCDIR}/${jail}/${j}" | debug
|
|
||||||
end=$(date +"%H:%M:%S")
|
# loop for each line in jail configuration
|
||||||
notice "${jail} : deleted ${j} inc [${start}/${end}]"
|
for incs_policy_line in $(cat ${incs_policy_file}); do
|
||||||
else
|
# inc date in ISO format
|
||||||
lock="/run/lock/bkctld/rm-${jail}.lock"
|
incs_policy_date=$(relative_date ${incs_policy_line})
|
||||||
if [ -f "${lock}" ]; then
|
echo ${incs_policy_date} >> "${incs_policy_keep_file}"
|
||||||
warning "${jail} : trying to run already running rm"
|
|
||||||
else
|
|
||||||
(
|
|
||||||
empty="/tmp/bkctld-${$}-$(date +%N)"
|
|
||||||
mkdir -p /run/lock/bkctld && touch "${lock}" && mkdir -p "${empty}"
|
|
||||||
trap "rm -f ${lock} && rmdir ${empty}" 0
|
|
||||||
rsync -a --delete "${empty}/" "${INCDIR}/${jail}/${j}/"
|
|
||||||
rmdir "${INCDIR}/${jail}/${j}/"
|
|
||||||
end=$(date +"%H:%M:%S")
|
|
||||||
notice "${jail} : deleted ${j} inc [${start}/${end}]"
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
rm "${keepfile}"
|
|
||||||
|
for inc in $(echo "${incs}" | grep -v -f "${incs_policy_keep_file}"); do
|
||||||
|
remove_inc "${jail}" "${inc}"
|
||||||
|
done
|
||||||
|
rm "${incs_policy_keep_file}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in a new issue