2019-01-04 13:51:05 +01:00
|
|
|
#!/bin/sh
|
2019-01-07 14:47:05 +01:00
|
|
|
#
|
|
|
|
# Remove old incremtal inc of all jails
|
|
|
|
# Usage: rm
|
|
|
|
#
|
2019-01-04 13:51:05 +01:00
|
|
|
|
2020-04-02 13:44:13 +02:00
|
|
|
# shellcheck source=./includes
|
2020-04-02 00:31:57 +02:00
|
|
|
LIBDIR="$(dirname $0)" && . "${LIBDIR}/includes"
|
2019-01-04 13:51:05 +01:00
|
|
|
|
2020-04-01 09:13:57 +02:00
|
|
|
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}
|
|
|
|
}
|
|
|
|
|
2020-04-01 18:39:56 +02:00
|
|
|
delete_inc_btrfs() {
|
|
|
|
jail_name=$1
|
|
|
|
inc_name=$2
|
|
|
|
|
|
|
|
inc_path=$(inc_path "${jail_name}" "${inc_name}")
|
|
|
|
|
|
|
|
start=$(current_time)
|
|
|
|
|
|
|
|
if dry_run; then
|
|
|
|
echo "[dry-run] delete btrfs subvolume ${inc_path}"
|
2020-04-01 09:13:57 +02:00
|
|
|
else
|
2020-04-01 18:39:56 +02:00
|
|
|
/bin/btrfs subvolume delete "${inc_path}" | debug
|
2020-04-01 09:13:57 +02:00
|
|
|
fi
|
2020-04-01 18:39:56 +02:00
|
|
|
|
|
|
|
end=$(current_time)
|
2020-04-02 01:07:12 +02:00
|
|
|
notice "${jail_name}: ${inc_name} inc deleted [${start}/${end}]"
|
2020-04-01 09:13:57 +02:00
|
|
|
}
|
2020-04-01 18:39:56 +02:00
|
|
|
delete_inc_ext() {
|
|
|
|
jail_name=$1
|
|
|
|
inc_name=$2
|
2020-04-01 09:13:57 +02:00
|
|
|
|
2020-04-01 18:39:56 +02:00
|
|
|
inc_path=$(inc_path "${jail_name}" "${inc_name}")
|
2020-04-01 09:13:57 +02:00
|
|
|
|
2020-04-01 18:39:56 +02:00
|
|
|
lock_file="${LOCKDIR}/rm-${jail_name}.lock"
|
|
|
|
if [ -f "${lock_file}" ]; then
|
2020-04-02 01:07:12 +02:00
|
|
|
warning "${jail_name}: skipping ${inc_name}, it is already being deleted."
|
2020-04-01 09:13:57 +02:00
|
|
|
else
|
2020-04-01 18:39:56 +02:00
|
|
|
(
|
|
|
|
mkdir --parents "${LOCKDIR}" && touch "${lock_file}" || error "Failed to acquire lock file '${lock_file}'"
|
|
|
|
empty=$(mktemp -d --suffix ".${$}" bkctld.XXXXX)
|
|
|
|
# shellcheck disable=SC2064
|
|
|
|
trap "rm -f ${lock_file}; rmdir ${empty}" 0
|
|
|
|
|
|
|
|
if dry_run; then
|
|
|
|
echo "[dry-run] delete ${inc_path} with rsync from ${empty}"
|
|
|
|
else
|
|
|
|
rsync --archive --delete "${empty}/" "${inc_path}/"
|
|
|
|
fi
|
|
|
|
rmdir "${inc_path}/"
|
|
|
|
|
|
|
|
end=$(current_time)
|
2020-04-02 01:07:12 +02:00
|
|
|
notice "${jail_name}: ${inc_name} inc deleted [${start}/${end}]"
|
2020-04-01 18:39:56 +02:00
|
|
|
)
|
2020-04-01 09:13:57 +02:00
|
|
|
fi
|
2020-04-01 18:39:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
for jail_name in $(jails_list); do
|
|
|
|
incs_policy_file=$(jail_incs_policy_file ${jail_name})
|
2020-04-01 09:13:57 +02:00
|
|
|
|
2020-04-01 18:39:56 +02:00
|
|
|
# If not incs policy if found, we don't remove incs
|
2020-04-01 09:13:57 +02:00
|
|
|
if [ -n "${incs_policy_file}" ]; then
|
|
|
|
incs_policy_keep_file="$(mktemp)"
|
2020-04-01 18:39:56 +02:00
|
|
|
# shellcheck disable=SC2064
|
|
|
|
trap "rm ${incs_policy_keep_file}" 0
|
2020-04-01 09:13:57 +02:00
|
|
|
|
|
|
|
# loop for each line in jail configuration
|
2020-04-01 18:39:56 +02:00
|
|
|
for incs_policy_line in $(cat ${incs_policy_file} | grep "^\+"); do
|
2020-04-01 09:13:57 +02:00
|
|
|
# inc date in ISO format
|
|
|
|
incs_policy_date=$(relative_date ${incs_policy_line})
|
|
|
|
echo ${incs_policy_date} >> "${incs_policy_keep_file}"
|
|
|
|
done
|
2020-04-01 18:39:56 +02:00
|
|
|
# shellcheck disable=SC2046
|
|
|
|
incs_to_delete=$(echo $(incs_list "${jail_name}") | grep -v -f "${incs_policy_keep_file}")
|
2020-04-01 09:13:57 +02:00
|
|
|
|
2020-04-01 18:39:56 +02:00
|
|
|
for inc_name in ${incs_to_delete}; do
|
|
|
|
inc_path=$(inc_path "${jail_name}" "${inc_name}")
|
|
|
|
if is_btrfs "${inc_path}"; then
|
|
|
|
delete_inc_btrfs "${jail_name}" "${inc_name}"
|
|
|
|
else
|
|
|
|
delete_inc_ext "${jail_name}" "${inc_name}"
|
|
|
|
fi
|
2019-01-04 13:51:05 +01:00
|
|
|
done
|
|
|
|
fi
|
|
|
|
done
|