[arkdep] Replace EFI vars with timestamped entries

This commit is contained in:
Dennis ten Hoove 2024-09-02 18:40:15 +02:00
parent 09db65fbb2
commit 715c70ea5d
No known key found for this signature in database
GPG key ID: 2BA91DC2563B83D1

46
arkdep
View file

@ -24,9 +24,6 @@ else
declare -r arkdep_boot="$(readlink -m $ARKDEP_ROOT/boot)" declare -r arkdep_boot="$(readlink -m $ARKDEP_ROOT/boot)"
fi fi
# if ARKDEP_BOOT is set also set ARKDEP_NO_BOOTCTL
[[ -n $ARKDEP_BOOT ]] && declare -r ARKDEP_NO_BOOTCTL=1
# If ARKDEP_ROOT is defined we imply confirm # If ARKDEP_ROOT is defined we imply confirm
[[ -n $ARKDEP_ROOT ]] && declare -r ARKDEP_CONFIRM=1 [[ -n $ARKDEP_ROOT ]] && declare -r ARKDEP_CONFIRM=1
@ -102,7 +99,7 @@ cleanup_and_quit () {
rm -rfv $arkdep_dir/deployments/${data[0]} \ rm -rfv $arkdep_dir/deployments/${data[0]} \
$arkdep_boot/arkdep/${data[0]} $arkdep_boot/arkdep/${data[0]}
rm -v $arkdep_dir/cache/${data[0]}-*.img \ rm -v $arkdep_dir/cache/${data[0]}-*.img \
$arkdep_boot/loader/entries/${data[0]}.conf $arkdep_boot/loader/entries/*${data[0]}*.conf
fi fi
unlock_and_quit 1 unlock_and_quit 1
@ -212,9 +209,9 @@ cleanup () {
fi fi
# Remove bootloader entry # Remove bootloader entry
[[ -f $arkdep_boot/loader/entries/$target.conf ]] && [[ -f $arkdep_boot/loader/entries/*$target*.conf ]] &&
printf "Removing $arkdep_boot/loader/entries/$target.conf\n" && printf "Removing $target bootloader entry\n" &&
rm -rf $arkdep_boot/loader/entries/$target.conf rm -rf $arkdep_boot/loader/entries/*$target*.conf
[[ -f $arkdep_boot/arkdep/$target ]] && [[ -f $arkdep_boot/arkdep/$target ]] &&
printf "Removing $arkdep_boot/arkdep/$target\n" && printf "Removing $arkdep_boot/arkdep/$target\n" &&
rm -rf $arkdep_boot/arkdep/$target rm -rf $arkdep_boot/arkdep/$target
@ -260,12 +257,7 @@ if [[ ! $1 =~ ^(get-available|diff|healthcheck)$ ]]; then
fi fi
# Check if all dependencies are installed, quit if not # Check if all dependencies are installed, quit if not
for prog in btrfs wget dracut bootctl curl gpgv; do for prog in btrfs wget dracut curl gpgv; do
# If ARKDEP_NO_BOOTCTL defined do not enforce bootctl requirement
if [[ $prog == 'bootctl' ]] && [[ $ARKDEP_NO_BOOTCTL -eq 1 ]]; then
break
fi
if ! command -v $prog > /dev/null; then if ! command -v $prog > /dev/null; then
printf "\e[1;31m<#>\e[0m\e[1m Failed to locate $prog, ensure it is installed\e[0m\n" printf "\e[1;31m<#>\e[0m\e[1m Failed to locate $prog, ensure it is installed\e[0m\n"
# Do not immediately exit to log all missing programs # Do not immediately exit to log all missing programs
@ -300,14 +292,6 @@ fi
# Initialize the system for arkdep # Initialize the system for arkdep
init () { init () {
# Ensure systemd-boot is installed before continuing, for it is the only thing we support
# Do not run if ARKDEP_NO_BOOTCTL defined
if [[ ! $ARKDEP_NO_BOOTCTL -eq 1 ]]; then
bootctl -q is-installed || cleanup_and_quit 'systemd-boot seems to not be installed'
else
printf '\e[1;33m<!>\e[0m\e[1m Not running bootctl is-installed because overwritten with ARKDEP_NO_BOOTCTL\e[0m\n'
fi
printf '\e[1;34m-->\e[0m\e[1m Initializing arkdep\e[0m\n' printf '\e[1;34m-->\e[0m\e[1m Initializing arkdep\e[0m\n'
[[ -d $arkdep_dir ]] && cleanup_and_quit "$arkdep_dir already exists" [[ -d $arkdep_dir ]] && cleanup_and_quit "$arkdep_dir already exists"
@ -519,7 +503,7 @@ remove_deployment () {
fi fi
# Remove bootloader entry # Remove bootloader entry
rm -rfv $arkdep_boot/loader/entries/$target.conf rm -rfv $arkdep_boot/loader/entries/*$target*.conf
rm -rfv $arkdep_boot/arkdep/$target rm -rfv $arkdep_boot/arkdep/$target
# Ensure the deployment and all sub-volumes are writable # Ensure the deployment and all sub-volumes are writable
@ -841,13 +825,6 @@ deploy () {
# Lets ensure the requested image is not already deployed # Lets ensure the requested image is not already deployed
if [[ -e $arkdep_dir/deployments/${data[0]} ]]; then if [[ -e $arkdep_dir/deployments/${data[0]} ]]; then
# Lets ensure the latest deployment is active, even if it is already deployed
if [[ latest_image_always_default -eq 1 ]] && [[ ! $ARKDEP_NO_BOOTCTL -eq 1 ]]; then
# Allow it to error, it is no big deal if it does
bootctl set-default ${data[0]}.conf || printf '\e[1;33m<!>\e[0m\e[1m Failed to set default bootloader entry, this might be a firmware bug\e[0m\n'
fi
printf "\e[1;33m<!>\e[0m\e[1m ${data[0]} is already deployed, canceling deployment\e[0m\n" printf "\e[1;33m<!>\e[0m\e[1m ${data[0]} is already deployed, canceling deployment\e[0m\n"
unlock_and_quit 0 unlock_and_quit 0
fi fi
@ -1143,19 +1120,10 @@ deploy () {
# Write bootloader entry # Write bootloader entry
for line in "${systemd_boot_template[@]}"; do for line in "${systemd_boot_template[@]}"; do
echo ${line/\%target\%/${data[0]}} >> $arkdep_boot/loader/entries/${data[0]}.conf || echo ${line/\%target\%/${data[0]}} >> $arkdep_boot/loader/entries/$(date +%Y%m%d-%H%M%S)-${data[0]}+3.conf ||
cleanup_and_quit 'Failed to write systemd-boot entry' cleanup_and_quit 'Failed to write systemd-boot entry'
done done
# Set new deployment as default bootloader entry
printf '\e[1;34m-->\e[0m\e[1m Setting new bootloader entry as default\e[0m\n'
# Do not set default boot entry if ARKDEP_NO_BOOTCTL is set
if [[ ! $ARKDEP_NO_BOOTCTL -eq 1 ]]; then
bootctl set-default ${data[0]}.conf || printf '\e[1;33m<!>\e[0m\e[1m Failed to set default bootloader entry, this might be a firmware bug\e[0m\n'
else
printf '\e[1;33m<!>\e[0m\e[1m Not running bootctl set-default because overwritten with ARKDEP_NO_BOOTCTL\e[0m\n'
fi
# Check if there is an update script available # Check if there is an update script available
if tar -xf $arkdep_dir/cache/${data[0]}.tar.${data[1]} -C $arkdep_dir/cache/ ./${data[0]}-update.sh 2> /dev/null && [[ ! -n $ARKDEP_ROOT ]]; then if tar -xf $arkdep_dir/cache/${data[0]}.tar.${data[1]} -C $arkdep_dir/cache/ ./${data[0]}-update.sh 2> /dev/null && [[ ! -n $ARKDEP_ROOT ]]; then
printf '\e[1;34m-->\e[0m\e[1m Running update script\e[0m\n' printf '\e[1;34m-->\e[0m\e[1m Running update script\e[0m\n'