From f767fc35effeb07c91b8f535cef616ec672a464e Mon Sep 17 00:00:00 2001 From: Dennis ten Hoove Date: Sun, 8 Sep 2024 01:08:19 +0200 Subject: [PATCH] [arkdep] Implement configurables Distributors of Arkdep can utilize this to more easily set default settings for the script --- arkdep | 122 ++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 86 insertions(+), 36 deletions(-) diff --git a/arkdep b/arkdep index 13c448b..a568fdb 100755 --- a/arkdep +++ b/arkdep @@ -7,6 +7,28 @@ set -o pipefail +## Distributor configurables +# +# These are the default settings utilized as both a fallbacks in case a +# setting is not configured and as the default settings a new system will +# be initialized with. +declare -r dist_enable_overlay=1 +declare -r dist_repo_url='https://arkanelinux.org/arkdep' +declare -r dist_repo_default_image='arkanelinux' +declare -r dist_deploy_keep=3 +declare -r dist_clean_cache_on_remove=1 +declare -r dist_always_healthcheck=1 +declare -r dist_gpg_signature_check=1 +declare -r dist_minimum_available_boot_storage=153600 +declare -r dist_minimum_available_root_storage=12582912 +declare -r dist_update_cpu_microcode=1 +declare -r dist_backup_user_accounts=1 +declare -r dist_migrate_files="'var/usrlocal' 'var/opt' 'var/srv' 'var/lib/AccountsService' 'var/lib/bluetooth' 'var/lib/NetworkManager' 'var/lib/arkane' 'var/lib/power-profiles-daemon' 'var/db' 'etc/localtime' 'etc/locale.gen' 'etc/locale.conf' 'etc/NetworkManager/system-connections' 'etc/ssh'" +declare -r dist_load_extensions=0 +declare -r dist_remove_tar_after_deployment=1 +declare -r dist_update_diff_style='list' +declare -r dist_interactive_mode=1 + ## Check if program is locked, if yes do not run if [[ -f /tmp/arkdep.lock ]]; then printf '\e[1;31m<#>\e[0m\e[1m /tmp/arkdep.lock exists, another instance of the program might be running\e[0m\n' @@ -52,23 +74,54 @@ if [[ ! $1 == 'init' ]]; then fi # Set default variables if config variables are undefined - [[ -z ${enable_overlay+x} ]] && enable_overlay=1 && printf '\e[1;33m\e[0m\e[1m enable_overlay not defined in config, using default\e[0m\n' - [[ -z ${repo_url+x} ]] && repo_url='https://repo.arkanelinux.org/arkdep' && printf '\e[1;33m\e[0m\e[1m repo_url not defined in config, using default\e[0m\n' - [[ -z ${repo_default_image+x} ]] && repo_default_image='arkanelinux' && printf '\e[1;33m\e[0m\e[1m repo_default_image not defined in config, using default\e[0m\n' - [[ -z ${deploy_keep+x} ]] && deploy_keep=3 && printf '\e[1;33m\e[0m\e[1m deploy_keep not defined in config, using default\e[0m\n' - [[ -z ${clean_cache_on_remove+x} ]] && clean_cache_on_remove=1 && printf '\e[1;33m\e[0m\e[1m clean_cache_on_remove not defined in config, using default\e[0m\n' - [[ -z ${always_healthcheck+x} ]] && always_healthcheck=1 && printf '\e[1;33m\e[0m\e[1m always_healthcheck not defined in config, using default\e[0m\n' - [[ -z ${gpg_signature_check+x} ]] && gpg_signature_check=1 && printf '\e[1;33m\e[0m\e[1m gpg_signature_check not defined in config, using default\e[0m\n' - [[ -z ${minimum_available_boot_storage+x} ]] && minimum_available_boot_storage=153600 && printf '\e[1;33m\e[0m\e[1m minimum_available_boot_storage not defined in config, using default\e[0m\n' - [[ -z ${minimum_available_root_storage+x} ]] && minimum_available_root_storage=12582912 && printf '\e[1;33m\e[0m\e[1m minimum_available_root_storage not defined in config, using default\e[0m\n' - [[ -z ${update_cpu_microcode+x} ]] && update_cpu_microcode=1 && printf '\e[1;33m\e[0m\e[1m update_cpu_microcode not defined in config, using default\e[0m\n' - [[ -z ${backup_user_accounts+x} ]] && backup_user_accounts=1 && printf '\e[1;33m\e[0m\e[1m backup_user_accounts not defined in config, using default\e[0m\n' - [[ -z ${latest_image_always_default+x} ]] && latest_image_always_default=0 && printf '\e[1;33m\e[0m\e[1m latest_image_always_default not defined in config, using default\e[0m\n' - [[ -z ${migrate_files+x} ]] && migrate_files=('var/usrlocal' 'var/opt' 'var/srv' 'var/lib/AccountsService' 'var/lib/bluetooth' 'var/lib/NetworkManager' 'var/lib/arkane' 'var/lib/power-profiles-daemon' 'var/db' 'etc/localtime' 'etc/locale.gen' 'etc/locale.conf' 'etc/NetworkManager/system-connections' 'etc/ssh') && printf '\e[1;33m\e[0m\e[1m migrate_files not defined in config, using default\e[0m\n' - [[ -z ${load_extensions+x} ]] && load_extensions=0 && printf '\e[1;33m\e[0m\e[1m load_extensions not defined in config, using default\e[0m\n' - [[ -z ${remove_tar_after_deployment+x} ]] && remove_tar_after_deployment=1 && printf '\e[1;33m\e[0m\e[1m remove_tar_after_deployment not defined in config, using default\e[0m\n' - [[ -z ${update_diff_style+x} ]] && update_diff_style='list' && printf '\e[1;33m\e[0m\e[1m update_diff_style not defined in config, using default\e[0m\n' - [[ -z ${interactive_mode+x} ]] && interactive_mode=1 && printf '\e[1;33m\e[0m\e[1m interactive_mode not defined in config, using default\e[0m\n' + [[ -z ${enable_overlay+x} ]] && + enable_overlay=$dist_enable_overlay && + printf '\e[1;33m\e[0m\e[1m enable_overlay not defined in config, using default\e[0m\n' + [[ -z ${repo_url+x} ]] && + repo_url=$dist_repo_url && + printf '\e[1;33m\e[0m\e[1m repo_url not defined in config, using default\e[0m\n' + [[ -z ${repo_default_image+x} ]] && + repo_default_image=$dist_repo_default_image && + printf '\e[1;33m\e[0m\e[1m repo_default_image not defined in config, using default\e[0m\n' + [[ -z ${deploy_keep+x} ]] && + deploy_keep=$dist_deploy_keep && + printf '\e[1;33m\e[0m\e[1m deploy_keep not defined in config, using default\e[0m\n' + [[ -z ${clean_cache_on_remove+x} ]] && + clean_cache_on_remove=$dist_clean_cache_on_remove && + printf '\e[1;33m\e[0m\e[1m clean_cache_on_remove not defined in config, using default\e[0m\n' + [[ -z ${always_healthcheck+x} ]] && + always_healthcheck=$dist_always_healthcheck && + printf '\e[1;33m\e[0m\e[1m always_healthcheck not defined in config, using default\e[0m\n' + [[ -z ${gpg_signature_check+x} ]] && + gpg_signature_check=$dist_gpg_signature_check && + printf '\e[1;33m\e[0m\e[1m gpg_signature_check not defined in config, using default\e[0m\n' + [[ -z ${minimum_available_boot_storage+x} ]] && + minimum_available_boot_storage=$dist_minimum_available_boot_storage && + printf '\e[1;33m\e[0m\e[1m minimum_available_boot_storage not defined in config, using default\e[0m\n' + [[ -z ${minimum_available_root_storage+x} ]] && + minimum_available_root_storage=$dist_minimum_available_root_storage && + printf '\e[1;33m\e[0m\e[1m minimum_available_root_storage not defined in config, using default\e[0m\n' + [[ -z ${update_cpu_microcode+x} ]] && + update_cpu_microcode=$dist_update_cpu_microcode && + printf '\e[1;33m\e[0m\e[1m update_cpu_microcode not defined in config, using default\e[0m\n' + [[ -z ${backup_user_accounts+x} ]] && + backup_user_accounts=$dist_backup_user_accounts && + printf '\e[1;33m\e[0m\e[1m backup_user_accounts not defined in config, using default\e[0m\n' + [[ -z ${migrate_files+x} ]] && + migrate_files=($(printf "$dist_migrate_files")) && + printf '\e[1;33m\e[0m\e[1m migrate_files not defined in config, using default\e[0m\n' + [[ -z ${load_extensions+x} ]] && + load_extensions=$dist_load_extensions && + printf '\e[1;33m\e[0m\e[1m load_extensions not defined in config, using default\e[0m\n' + [[ -z ${remove_tar_after_deployment+x} ]] && + remove_tar_after_deployment=$dist_remove_tar_after_deployment && + printf '\e[1;33m\e[0m\e[1m remove_tar_after_deployment not defined in config, using default\e[0m\n' + [[ -z ${update_diff_style+x} ]] && + update_diff_style=$dist_update_diff_style && + printf '\e[1;33m\e[0m\e[1m update_diff_style not defined in config, using default\e[0m\n' + [[ -z ${interactive_mode+x} ]] && + interactive_mode=$dist_interactive_mode && + printf '\e[1;33m\e[0m\e[1m interactive_mode not defined in config, using default\e[0m\n' fi ## Common functions @@ -331,56 +384,53 @@ init () { printf '\e[1;34m-->\e[0m\e[1m Adding default config file\e[0m\n' cat <<- END > $arkdep_dir/config # Write /arkdep/overlay overlay to new deployments - enable_overlay=1 + enable_overlay=$dist_enable_overlay # URL to image repository, do not add trailing slash - repo_url='https://repo.arkanelinux.org/arkdep' + repo_url='$dist_repo_url' # Default image pulled from repo if nothing defined - repo_default_image='arkanelinux' + repo_default_image='$dist_repo_default_image' # Keep the latest N deployments, remove anything older - deploy_keep=3 + deploy_keep=$dist_deploy_keep # Remove images from the cache when their deployments are removed - clean_cache_on_remove=1 + clean_cache_on_remove=$dist_clean_cache_on_remove # Check for untracked deployments and other issues on run - always_healthcheck=1 + always_healthcheck=$dist_always_healthcheck # Perform a GPG signature check on remote sources # 1 = enabled but optional, 2 = required - gpg_signature_check=1 + gpg_signature_check=$dist_gpg_signature_check # Minimum amount of storage which needs to be available on /boot in Kib - minimum_available_boot_storage=153600 + minimum_available_boot_storage=$dist_minimum_available_boot_storage # Minimum amount of storage which needs to be available on / in Kib - minimum_available_root_storage=12582912 + minimum_available_root_storage=$dist_minimum_available_root_storage # Update CPU firmware if newer version available - update_cpu_microcode=1 + update_cpu_microcode=$dist_update_cpu_microcode # Automatically make a copy of passwd, shadow and group files if they differ from overlay - backup_user_accounts=1 - - # Ensure latest image as defined in the external database is always the default systemd-boot boot entry - latest_image_always_default=0 + backup_user_accounts=$dist_backup_user_accounts # List of files and folders to be recursively copied over from root tree to new root filesystem - migrate_files=('var/usrlocal' 'var/opt' 'var/srv' 'var/lib/AccountsService' 'var/lib/bluetooth' 'var/lib/NetworkManager' 'var/lib/arkane' 'var/lib/power-profiles-daemon' 'var/db' 'etc/localtime' 'etc/locale.gen' 'etc/locale.conf' 'etc/NetworkManager/system-connections' 'etc/ssh') + migrate_files=($(printf "$dist_migrate_files")) # Load script extensions from /arkdep/extensions - load_extensions=0 + load_extensions=$dist_load_extensions # Remove tarball from cache once deployment is finished - remove_tar_after_deployment=1 + remove_tar_after_deployment=$dist_remove_tar_after_deployment # Update diff styling, available styles: 'list' - update_diff_style='list' + update_diff_style='$dist_update_diff_style' # Before making changes to the system show diff and ask for confirmation - interactive_mode=1 + interactive_mode=$dist_interactive_mode END # Add default bootloader config file