Implement tracker

This commit is contained in:
Dennis ten Hoove 2023-08-25 00:15:23 +02:00
parent b39b8254d5
commit 9c9db576f3

View file

@ -88,6 +88,9 @@ init () {
$(readlink -m $arkanium_dir/shared) || $(readlink -m $arkanium_dir/shared) ||
cleanup_and_quit "Failed to create /arkanium and related directories" cleanup_and_quit "Failed to create /arkanium and related directories"
# Create empty database files
touch $(readlink -m $arkanium_dir/tracker)
# Add home shared subvolume and make writable # Add home shared subvolume and make writable
btrfs subvolume create $(readlink -m $arkanium_dir/shared/home) || cleanup_and_quit "Failed to create home subvolume" btrfs subvolume create $(readlink -m $arkanium_dir/shared/home) || cleanup_and_quit "Failed to create home subvolume"
btrfs property set -f -ts $(readlink -m $arkanium_dir/shared/home) ro false btrfs property set -f -ts $(readlink -m $arkanium_dir/shared/home) ro false
@ -106,6 +109,9 @@ init () {
# Default image pulled from repo if nothing defined # Default image pulled from repo if nothing defined
repo_default_image='arkanelinux' repo_default_image='arkanelinux'
# Keep the latest n+1 deployments, remove anything older
deploy_keep=2
END END
# Add default bootloader config file # Add default bootloader config file
@ -209,7 +215,7 @@ deploy () {
# Check if requested version is already downloaded # Check if requested version is already downloaded
if [[ -e $(readlink -m $arkanium_dir/cache/${data[0]}.tar.${data[1]}) ]]; then if [[ -e $arkanium_dir/cache/${data[0]}.tar.${data[1]} ]]; then
printf "\e[1;34m-->\e[0m\e[1m ${data[0]} already in cache, skipping download\e[0m\n" printf "\e[1;34m-->\e[0m\e[1m ${data[0]} already in cache, skipping download\e[0m\n"
@ -233,7 +239,7 @@ deploy () {
# Extract the root image if not yet extracted # Extract the root image if not yet extracted
printf "\e[1;34m-->\e[0m\e[1m Writing root\e[0m\n" printf "\e[1;34m-->\e[0m\e[1m Writing root\e[0m\n"
if [[ ! -e $(readlink -m $arkanium_dir/cache/${data[0]}-rootfs.img) ]]; then if [[ ! -e $arkanium_dir/cache/${data[0]}-rootfs.img ]]; then
tar -xf $(readlink -m $arkanium_dir/cache/${data[0]}.tar.${data[1]}) -C $(readlink -m $arkanium_dir/cache/) "./${data[0]}-rootfs.img" || tar -xf $(readlink -m $arkanium_dir/cache/${data[0]}.tar.${data[1]}) -C $(readlink -m $arkanium_dir/cache/) "./${data[0]}-rootfs.img" ||
cleanup_and_quit 'Failed to extract root' cleanup_and_quit 'Failed to extract root'
fi fi
@ -247,7 +253,7 @@ deploy () {
# Extract the etc image if not yet extracted # Extract the etc image if not yet extracted
printf "\e[1;34m-->\e[0m\e[1m Writing etc\e[0m\n" printf "\e[1;34m-->\e[0m\e[1m Writing etc\e[0m\n"
if [[ ! -e $(readlink -m $arkanium_dir/cache/${data[0]}-etc.img) ]]; then if [[ ! -e $arkanium_dir/cache/${data[0]}-etc.img ]]; then
tar -xf $(readlink -m $arkanium_dir/cache/${data[0]}.tar.${data[1]}) -C $(readlink -m $arkanium_dir/cache/) "./${data[0]}-etc.img" || tar -xf $(readlink -m $arkanium_dir/cache/${data[0]}.tar.${data[1]}) -C $(readlink -m $arkanium_dir/cache/) "./${data[0]}-etc.img" ||
cleanup_and_quit 'failed to extract etc' cleanup_and_quit 'failed to extract etc'
fi fi
@ -268,22 +274,24 @@ deploy () {
btrfs property set -f -ts $(readlink -m $arkanium_dir/deployments/${data[0]}/rootfs/etc) ro false || btrfs property set -f -ts $(readlink -m $arkanium_dir/deployments/${data[0]}/rootfs/etc) ro false ||
cleanup_and_quit 'Failed to unlock root to write etc' cleanup_and_quit 'Failed to unlock root to write etc'
# Cleanup etc image
rm $(readlink -m $arkanium_dir/cache/${data[0]}-etc.img)
# Overlay customizations to etc # Overlay customizations to etc
# TODO: overlay here if enabled in config file # TODO: overlay here if enabled in config file
# Cleanup etc image
rm $(readlink -m $arkanium_dir/cache/${data[0]}-etc.img)
# Extract the var image if not yet extracted # Extract the var image if not yet extracted
printf "\e[1;34m-->\e[0m\e[1m Writing var\e[0m\n" printf "\e[1;34m-->\e[0m\e[1m Writing var\e[0m\n"
if [[ ! -e $(readlink -m $arkanium_dir/cache/${data[0]}-var.img) ]]; then if [[ ! -e $arkanium_dir/cache/${data[0]}-var.img ]]; then
tar -xf $(readlink -m $arkanium_dir/cache/${data[0]}.tar.${data[1]}) -C $(readlink -m $arkanium_dir/cache/) "./${data[0]}-var.img" || tar -xf $(readlink -m $arkanium_dir/cache/${data[0]}.tar.${data[1]}) -C $(readlink -m $arkanium_dir/cache/) "./${data[0]}-var.img" ||
cleanup_and_quit 'failed to extract var' cleanup_and_quit 'failed to extract var'
fi fi
# Write the var image # Write the var image
btrfs receive -f $(readlink -m $arkanium_dir/cache/${data[0]}-var.img) $(readlink -m $arkanium_dir/shared/) || if [[ ! -e $arkanium_dir/shared/var ]]; then
cleanup_and_quit 'Failed to receive var' btrfs receive -f $(readlink -m $arkanium_dir/cache/${data[0]}-var.img) $(readlink -m $arkanium_dir/shared/) ||
cleanup_and_quit 'Failed to receive var'
fi
# Make var writable # Make var writable
btrfs property set -f -ts $(readlink -m $arkanium_dir/shared/var) ro false || btrfs property set -f -ts $(readlink -m $arkanium_dir/shared/var) ro false ||
@ -292,6 +300,19 @@ deploy () {
# Cleanup var image # Cleanup var image
rm $(readlink -m $arkanium_dir/cache/${data[0]}-var.img) rm $(readlink -m $arkanium_dir/cache/${data[0]}-var.img)
# Add to database
printf "\e[1;34m-->\e[0m\e[1m Updating database\e[0m\n"
printf "${data[0]}\n$(cat $(readlink -m $arkanium_dir/tracker | head -$deploy_keep))" > $arkanium_dir/tracker
# Remove entries outside of keep
declare -r remove_deployments="$(cat $arkanium_dir/tracker | head -$deploy_keep | grep -rvf - $(readlink -m $arkanium_dir/tracker))"
# Remove old deployments
for deployment in $remove_deployments; do
btrfs property set -f -ts $(readlink -m $arkanium_dir/deployments/$deployment) ro false
rm -rf $(readlink -m $arkanium_dir/deployments/$deployment)
grep -rv $deployment $(readline -m $arkanium_dir/tracker) > $arkanium_dir/tracker
done
} }
[[ $1 == 'init' ]] && init [[ $1 == 'init' ]] && init