Add cleanup feature

This commit is contained in:
Dennis ten Hoove 2024-03-08 22:12:03 +01:00
parent ce89b848f4
commit 1641ee607a

54
arkdep
View file

@ -15,6 +15,7 @@ if [[ ! -n $1 ]]; then
deploy Deploy a new or update an existing deployment deploy Deploy a new or update an existing deployment
init Initialize arkdep on a new system init Initialize arkdep on a new system
teardown Remove all arkdep-deploy related files and folders teardown Remove all arkdep-deploy related files and folders
cleanup Remove any hanging images and unfished downloads
healthcheck Check for and report any config issues or untracked deployments healthcheck Check for and report any config issues or untracked deployments
get-available List available packages in repo get-available List available packages in repo
remove Remove a specified deployment remove Remove a specified deployment
@ -120,9 +121,9 @@ cleanup_and_quit () {
## Healthcheck ## Healthcheck
# #
# Check for and report on any issues such as untracked deployments or hanging files in cache # Set common variables for healthcheck and cleanup,
healthcheck () { # only set all these vars if they will actually be used
if [[ always_healthcheck -eq 1 ]] || [[ $1 =~ ^(healthcheck|cleanup) ]]; then
# Gather tracked deployments # Gather tracked deployments
declare -r tracker=($(cat $arkdep_dir/tracker)) declare -r tracker=($(cat $arkdep_dir/tracker))
declare -r deployed=($(ls $arkdep_dir/deployments/)) declare -r deployed=($(ls $arkdep_dir/deployments/))
@ -147,6 +148,10 @@ healthcheck () {
# Clean whitespaces # Clean whitespaces
untracked=$(echo $untracked | xargs) untracked=$(echo $untracked | xargs)
fi
# Check for and report on any issues such as untracked deployments or hanging files in cache
healthcheck () {
if [[ -n $untracked ]]; then if [[ -n $untracked ]]; then
printf '\e[1;33m<!>\e[0m\e[1m The following deployments were found but are untracked\n\e[0m' printf '\e[1;33m<!>\e[0m\e[1m The following deployments were found but are untracked\n\e[0m'
@ -172,6 +177,48 @@ healthcheck () {
} }
cleanup () {
echo UN: ${untracked[@]}
echo A: ${hanging_cache[@]}
if [[ -n $untracked ]]; then
printf '\e[1;34m-->\e[0m\e[1m Cleaning up untracked deployments\e[0m\n'
for target in ${untracked[@]}; do
if [[ $target == 'recovery' ]]; then
printf '\e[1;33m<!>\e[0m\e[1m Detected untracked recovery entry, ignoring\n\e[0m'
break
fi
# Ensure deployment is not currently active
if grep -q "$arkdep_dir/deployments/$target/rootfs" /proc/cmdline; then
printf '\e[1;33m<!>\e[0m\e[1m Target is currently active deployment\n\e[0m'
break
fi
# Remove bootloader entry
rm -rfv $arkdep_boot/loader/entries/$target.conf
rm -rfv $arkdep_boot/arkdep/$target
# Ensure the deployment and all sub-volumes are writable
for volume in $(btrfs subvolume list / | grep -oE '[^ ]+$' | grep $target); do
btrfs property set -f -ts $(readlink -m $ARKDEP_ROOT/$volume) ro false || printf "failed to make subvol $volume writable\n"
done
# Remove the deployment
rm -rfv $arkdep_dir/deployments/$target
done
fi
if [[ -n $hanging_cache ]]; then
printf '\e[1;34m-->\e[0m\e[1m Cleaning up hanging cache\e[0m\n'
for target in ${hanging_cache[@]}; do
rm -v $arkdep_dir/cache/$target
done
fi
}
# Always healthcheck on run if requested in config, unless the user explicitely called it # Always healthcheck on run if requested in config, unless the user explicitely called it
[[ $always_healthcheck -eq 1 ]] && [[ ! $1 == 'healthcheck' ]] && healthcheck [[ $always_healthcheck -eq 1 ]] && [[ ! $1 == 'healthcheck' ]] && healthcheck
@ -801,6 +848,7 @@ deploy () {
[[ $1 == 'deploy' ]] && deploy $2 $3 [[ $1 == 'deploy' ]] && deploy $2 $3
[[ $1 == 'remove' ]] && remove_deployment $2 $3 [[ $1 == 'remove' ]] && remove_deployment $2 $3
[[ $1 == 'healthcheck' ]] && healthcheck $1 [[ $1 == 'healthcheck' ]] && healthcheck $1
[[ $1 == 'cleanup' ]] && cleanup
# No valid params were provided # No valid params were provided
exit 3 exit 3