diff --git a/init.sh b/init.sh index 8910fe4..80b2ea9 100755 --- a/init.sh +++ b/init.sh @@ -172,6 +172,11 @@ libreportalDerivePaths() { install_scripts_dir="$script_dir/scripts/" containers_dir="$LP_CONTAINERS_DIR/" backup_dir="$LP_BACKUPS_DIR" + # Pre-update install snapshots (configs + logs zipped before the legacy + # git-update reset_git → checkout cycle). Distinct from restic's per- + # location subdirs which live at $backup_dir/. Used by + # gitPerformUpdate / gitCleanInstallBackups / use_git_backup / config_git_check. + backup_install_dir="$backup_dir/install" # Control-plane manager user (configurable; default libreportal). sudo_user_name="${LP_MANAGER_USER:-${sudo_user_name:-libreportal}}" @@ -969,7 +974,7 @@ initRootHelpers() initFolders() { isHeader "LibrePortal Folder Creation" - folders=("$docker_dir" "$containers_dir" "$ssl_dir" "$ssh_dir" "$wireguard_dir" "$logs_dir" "$configs_dir" "$backup_dir" "$restore_dir" "$migrate_dir" "$script_dir") + folders=("$docker_dir" "$containers_dir" "$ssl_dir" "$ssh_dir" "$wireguard_dir" "$logs_dir" "$configs_dir" "$backup_dir" "$backup_install_dir" "$restore_dir" "$migrate_dir" "$script_dir") for folder in "${folders[@]}"; do if [ ! -d "$folder" ]; then sudo mkdir "$folder" diff --git a/scripts/update/backup/install_git_backup.sh b/scripts/update/backup/install_git_backup.sh index a697d4b..5bfba8c 100755 --- a/scripts/update/backup/install_git_backup.sh +++ b/scripts/update/backup/install_git_backup.sh @@ -2,7 +2,14 @@ gitCleanInstallBackups() { - local result=$(runInstallOp find "$backup_install_dir" -mindepth 1 -type f ! -name '*.zip' -o -type d ! -name '*.zip' -exec rm -rf {} +) + # Remove the unzipped backup_/ snapshot dirs we just rolled up, keeping + # the .zip files themselves. `-mindepth 1 -maxdepth 1` limits to direct + # children of $backup_install_dir; `-exec rm -rf {} +` handles dirs via + # -r. The previous `-type f ! -name '*.zip' -o -type d ! -name '*.zip'` + # mis-applied the -exec to only the second clause (-o binds looser than + # the implicit -a), so it deleted every non-.zip dir under the WHOLE tree + # while matching no files at all. + local result=$(runInstallOp find "$backup_install_dir" -mindepth 1 -maxdepth 1 ! -name '*.zip' -exec rm -rf {} +) checkSuccess "Cleaning up install backup folders." local result=$(cd "$backup_install_dir" && find . -maxdepth 1 -type f -name '*.zip' | xargs ls -t | tail -n +6 | xargs -r rm) checkSuccess "Deleting old install backup and keeping the latest 5." diff --git a/scripts/update/backup/use_git_backup.sh b/scripts/update/backup/use_git_backup.sh index 93a8292..31925bf 100755 --- a/scripts/update/backup/use_git_backup.sh +++ b/scripts/update/backup/use_git_backup.sh @@ -12,7 +12,7 @@ gitUseExistingBackup() gitReset; - local result=$(copyFolders "$backup_install_dir$backup_install_dir/$backup_file_without_zip/" "$docker_dir" "$sudo_user_name") + local result=$(copyFolders "$backup_install_dir/$backup_file_without_zip/" "$docker_dir" "$sudo_user_name") checkSuccess "Copy the backed up folders back into the installation directory" gitCleanInstallBackups;