From 053a620e2270987b7a95f30947f80253dc55cdc2 Mon Sep 17 00:00:00 2001 From: librelad Date: Sun, 31 May 2026 03:09:25 +0100 Subject: [PATCH] fix(reliability): split local result=$(cmd) so $? survives for checkSuccess MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 'local result=$(cmd)' resets $? to 0 (the local builtin's own exit), so the following checkSuccess always saw success regardless of cmd's real exit — the mechanism that masked the de-sudo write failures. Split declaration from assignment ('local result; result=$(cmd)') across all 235 active-code sites (84 files) so the command's exit reaches checkSuccess. No behaviour change beyond $? now being accurate (no set -e in runtime code; multi-line assignments transform safely). Co-Authored-By: Claude Opus 4.8 Signed-off-by: librelad --- containers/crowdsec/crowdsec.sh | 16 +++--- .../crowdsec/scripts/crowdsec_install_host.sh | 18 +++---- .../crowdsec/scripts/crowdsec_update.sh | 12 ++--- .../headscale/scripts/tailscale_install.sh | 2 +- .../password/bcrypt/password_export_bcrypt.sh | 8 +-- .../bcrypt/password_process_bcrypt.sh | 2 +- .../crontab/app/crontab_backup_scheduler.sh | 4 +- scripts/crontab/crontab_install.sh | 6 +-- scripts/crontab/crontab_setup.sh | 2 +- scripts/database/app/db_app_scan.sh | 6 +-- scripts/database/app/db_install_app.sh | 4 +- scripts/database/delete_db_file.sh | 2 +- scripts/database/insert/db_insert_backups.sh | 2 +- scripts/database/insert/db_insert_option.sh | 4 +- .../database/insert/db_insert_port_open.sh | 2 +- .../database/insert/db_insert_port_used.sh | 2 +- scripts/database/insert/db_insert_restore.sh | 2 +- scripts/database/install_sqlite.sh | 4 +- scripts/database/tables/db_create_tables.sh | 36 ++++++------- scripts/docker/app/compose/down_app.sh | 4 +- scripts/docker/app/compose/up_app.sh | 8 +-- scripts/docker/app/docker/remove_app.sh | 4 +- scripts/docker/app/docker/restart_app.sh | 2 +- scripts/docker/app/docker/start_all.sh | 2 +- scripts/docker/app/docker/start_app.sh | 2 +- scripts/docker/app/docker/stop_all.sh | 2 +- scripts/docker/app/docker/stop_app.sh | 2 +- scripts/docker/app/uninstall/remove_images.sh | 2 +- scripts/docker/checks/running_for_user.sh | 4 +- scripts/docker/compose/update_compose_yml.sh | 4 +- .../docker/install/rooted/rooted_docker.sh | 2 +- .../install/rooted/rooted_docker_compose.sh | 6 +-- .../install/rootless/rootless_docker.sh | 54 +++++++++---------- .../install/rootless/rootless_uninstall.sh | 2 +- .../docker/install/rootless/rootless_user.sh | 2 +- scripts/docker/network/network_prune.sh | 2 +- scripts/docker/network/network_setup.sh | 2 +- scripts/docker/service/start_docker.sh | 8 +-- scripts/docker/service/stop_docker.sh | 4 +- scripts/docker/setup_env.sh | 2 +- .../type_switcher/scan_container_socket.sh | 4 +- scripts/docker/update_docker_sudo_pass.sh | 2 +- scripts/docker/update_docker_user_pass.sh | 2 +- .../function/file/container/backup_files.sh | 2 +- .../function/file/container/restore_files.sh | 4 +- scripts/function/file/copy_file.sh | 2 +- scripts/function/file/copy_files.sh | 2 +- scripts/function/file/copy_resource.sh | 4 +- scripts/function/file/create_touch.sh | 4 +- .../function/file/empty_line/remove_line.sh | 2 +- scripts/function/file/move_file.sh | 2 +- scripts/function/file/zip_file.sh | 4 +- scripts/function/folder/copy_folder.sh | 4 +- scripts/function/folder/copy_folders.sh | 2 +- scripts/function/folder/create_folder.sh | 4 +- scripts/function/permission/before_start.sh | 4 +- scripts/function/permission/config.sh | 2 +- scripts/function/permission/ownership/file.sh | 2 +- .../permission/ownership/folder_group.sh | 4 +- .../permission/ownership/root_file.sh | 2 +- scripts/function/run/reinstall_libreportal.sh | 4 +- scripts/install/install_certificate.sh | 2 +- scripts/install/install_swapfile.sh | 10 ++-- scripts/install/install_ufw.sh | 14 ++--- scripts/install/install_ufwd.sh | 10 ++-- .../firewall/firewall_initial_setup.sh | 14 ++--- .../firewall/rules/firewall_clear_rules.sh | 4 +- scripts/network/ip/ip_remove_from_db.sh | 2 +- scripts/network/monitoring/monitoring.sh | 4 +- .../ports/core/port_get_service_ports.sh | 2 +- .../network/ports/core/port_remove_from_db.sh | 2 +- .../traefik/traefik_login_credentials.sh | 4 +- scripts/os/install/ubuntu.sh | 6 +-- scripts/update/backup/install_git_backup.sh | 4 +- scripts/update/backup/reset_git_backup.sh | 12 ++--- scripts/update/backup/use_git_backup.sh | 4 +- scripts/update/git/reset_git.sh | 2 +- scripts/update/git/untrack_files.sh | 4 +- scripts/webui/data/logs/webui_app_logs.sh | 4 +- scripts/webui/data/logs/webui_logs_folders.sh | 2 +- scripts/webui/data/tasks/webui_task_files.sh | 6 +-- scripts/webui/data/utils/webui_app_log.sh | 4 +- scripts/webui/webui_install_image.sh | 4 +- scripts/webui/webui_updater.sh | 34 ++++++------ 84 files changed, 235 insertions(+), 235 deletions(-) diff --git a/containers/crowdsec/crowdsec.sh b/containers/crowdsec/crowdsec.sh index 8051147..553dba0 100644 --- a/containers/crowdsec/crowdsec.sh +++ b/containers/crowdsec/crowdsec.sh @@ -58,18 +58,18 @@ uninstallCrowdsec() echo "" echo "---- $menu_number. Stopping CrowdSec host services." echo "" - local result=$(runSystem systemctl disable --now crowdsec-firewall-bouncer 2>&1) + local result; result=$(runSystem systemctl disable --now crowdsec-firewall-bouncer 2>&1) checkSuccess "Disabling firewall bouncer" - local result=$(runSystem systemctl disable --now crowdsec 2>&1) + local result; result=$(runSystem systemctl disable --now crowdsec 2>&1) checkSuccess "Disabling agent" ((menu_number++)) echo "" echo "---- $menu_number. Removing CrowdSec packages." echo "" - local result=$(runSystem DEBIAN_FRONTEND=noninteractive apt-get purge -y -q crowdsec crowdsec-firewall-bouncer-nftables &1) + local result; result=$(runSystem DEBIAN_FRONTEND=noninteractive apt-get purge -y -q crowdsec crowdsec-firewall-bouncer-nftables &1) checkSuccess "Purged packages" - local result=$(runSystem DEBIAN_FRONTEND=noninteractive apt-get autoremove -y -q &1) + local result; result=$(runSystem DEBIAN_FRONTEND=noninteractive apt-get autoremove -y -q &1) checkSuccess "Removed orphaned dependencies" crowdsecToggleLibrePortalLogMounts off @@ -81,9 +81,9 @@ uninstallCrowdsec() stopCrowdsec() { isNotice "Stopping CrowdSec host services..." - local result=$(runSystem systemctl stop crowdsec-firewall-bouncer 2>&1) + local result; result=$(runSystem systemctl stop crowdsec-firewall-bouncer 2>&1) checkSuccess "Stopped firewall bouncer" - local result=$(runSystem systemctl stop crowdsec 2>&1) + local result; result=$(runSystem systemctl stop crowdsec 2>&1) checkSuccess "Stopped agent" } @@ -93,8 +93,8 @@ stopCrowdsec() restartCrowdsec() { isNotice "Restarting CrowdSec host services..." - local result=$(runSystem systemctl restart crowdsec 2>&1) + local result; result=$(runSystem systemctl restart crowdsec 2>&1) checkSuccess "Restarted agent" - local result=$(runSystem systemctl restart crowdsec-firewall-bouncer 2>&1) + local result; result=$(runSystem systemctl restart crowdsec-firewall-bouncer 2>&1) checkSuccess "Restarted firewall bouncer" } diff --git a/containers/crowdsec/scripts/crowdsec_install_host.sh b/containers/crowdsec/scripts/crowdsec_install_host.sh index 7576632..795d780 100644 --- a/containers/crowdsec/scripts/crowdsec_install_host.sh +++ b/containers/crowdsec/scripts/crowdsec_install_host.sh @@ -54,7 +54,7 @@ installCrowdsecHost() # services, installs the crowdsecurity/linux + /sshd collections, then # reloads the agent. All of it lives in libreportal-crowdsec so the # manager never needs `sudo apt-get` / `sudo bash`. - local result=$(runCrowdsec install) + local result; result=$(runCrowdsec install) checkSuccess "Installing CrowdSec agent + firewall bouncer + baseline collections" ((menu_number++)) @@ -71,11 +71,11 @@ installCrowdsecHost() if runCrowdsec capi status 2>&1 | grep -qi 'You can successfully'; then isNotice "Community blocklist already registered." else - local result=$(runCrowdsec capi register 2>&1) + local result; result=$(runCrowdsec capi register 2>&1) checkSuccess "Registered with CrowdSec Central API (community blocklist)" fi else - local result=$(runCrowdsec capi unregister 2>&1) + local result; result=$(runCrowdsec capi unregister 2>&1) checkSuccess "Unregistered from CrowdSec Central API (community blocklist disabled)" fi @@ -98,12 +98,12 @@ installCrowdsecHost() elif [[ "$enrolled" == true ]]; then isNotice "Already enrolled with the SaaS console — skipping." else - local result=$(runCrowdsec console enroll "$console_token" 2>&1) + local result; result=$(runCrowdsec console enroll "$console_token" 2>&1) checkSuccess "Enrolled with app.crowdsec.net SaaS console" fi else if [[ "$enrolled" == true ]]; then - local result=$(runCrowdsec console disenroll 2>&1) + local result; result=$(runCrowdsec console disenroll 2>&1) checkSuccess "Disenrolled from app.crowdsec.net SaaS console" else isNotice "SaaS console enrollment disabled — skipping." @@ -144,12 +144,12 @@ installCrowdsecHost() local prom_addr="${prom_listen%%:*}" local prom_port="${prom_listen##*:}" if [[ "$mon_enabled" == "true" ]]; then - local result=$(runCrowdsec prometheus on "$prom_addr" "$prom_port") + local result; result=$(runCrowdsec prometheus on "$prom_addr" "$prom_port") checkSuccess "CrowdSec metrics endpoint bound to ${prom_listen}" runCrowdsec services restart checkSuccess "CrowdSec restarted" else - local result=$(runCrowdsec prometheus off) + local result; result=$(runCrowdsec prometheus off) checkSuccess "CrowdSec metrics endpoint rebound to 127.0.0.1 (monitoring off)" runCrowdsec services restart checkSuccess "CrowdSec restarted" @@ -243,7 +243,7 @@ installCrowdsecHost() echo "---- $menu_number. Re-enabling CrowdSec services." echo "" - local result=$(runCrowdsec services enable) + local result; result=$(runCrowdsec services enable) checkSuccess "Enabling CrowdSec agent + firewall bouncer" isSuccessful "CrowdSec services re-enabled." @@ -261,7 +261,7 @@ installCrowdsecHost() echo "---- $menu_number. Stopping and disabling CrowdSec services." echo "" - local result=$(runCrowdsec services disable) + local result; result=$(runCrowdsec services disable) checkSuccess "Disabling CrowdSec agent + firewall bouncer" isSuccessful "CrowdSec disabled. Package remains installed — set CFG_CROWDSEC_ENABLED=true to re-enable, or uninstall via the Tools tab." diff --git a/containers/crowdsec/scripts/crowdsec_update.sh b/containers/crowdsec/scripts/crowdsec_update.sh index ee2fd4e..d5f5df0 100644 --- a/containers/crowdsec/scripts/crowdsec_update.sh +++ b/containers/crowdsec/scripts/crowdsec_update.sh @@ -7,32 +7,32 @@ appCrowdSecUpdate() { echo "" echo "---- $menu_number. Updating apt package index." echo "" - local result=$(runSystem apt-get update) + local result; result=$(runSystem apt-get update) checkSuccess "apt-get update" ((menu_number++)) echo "" echo "---- $menu_number. Upgrading CrowdSec packages." echo "" - local result=$(runSystem apt-get install -y --only-upgrade crowdsec crowdsec-firewall-bouncer-nftables) + local result; result=$(runSystem apt-get install -y --only-upgrade crowdsec crowdsec-firewall-bouncer-nftables) checkSuccess "Upgraded crowdsec + crowdsec-firewall-bouncer-nftables" ((menu_number++)) echo "" echo "---- $menu_number. Refreshing hub collections." echo "" - local result=$(runSystem cscli hub update) + local result; result=$(runSystem cscli hub update) checkSuccess "Refreshed hub index" - local result=$(runSystem cscli hub upgrade) + local result; result=$(runSystem cscli hub upgrade) checkSuccess "Upgraded installed collections" ((menu_number++)) echo "" echo "---- $menu_number. Reloading services." echo "" - local result=$(runSystem systemctl reload crowdsec) + local result; result=$(runSystem systemctl reload crowdsec) checkSuccess "Reloaded crowdsec agent" - local result=$(runSystem systemctl restart crowdsec-firewall-bouncer) + local result; result=$(runSystem systemctl restart crowdsec-firewall-bouncer) checkSuccess "Restarted crowdsec-firewall-bouncer" isSuccessful "CrowdSec updated. Run 'crowdsec_verify_firewall' if you want to re-check nftables priorities." diff --git a/containers/headscale/scripts/tailscale_install.sh b/containers/headscale/scripts/tailscale_install.sh index 7d2c0fd..c82f085 100755 --- a/containers/headscale/scripts/tailscale_install.sh +++ b/containers/headscale/scripts/tailscale_install.sh @@ -5,7 +5,7 @@ tailscaleInstallToContainer() local app_name="$1" local type="$2" - local result=$(createFolders "loud" $docker_install_user $containers_dir$app_name/tailscale) + local result; result=$(createFolders "loud" $docker_install_user $containers_dir$app_name/tailscale) checkSuccess "Creating Tailscale folder" copyFile "loud" "${install_containers_dir}headscale/resources/tailscale.sh" "$containers_dir$app_name/tailscale/tailscale.sh" $docker_install_user | runInstallWrite -a "$logs_dir/$docker_log_file" 2>&1 diff --git a/scripts/config/password/bcrypt/password_export_bcrypt.sh b/scripts/config/password/bcrypt/password_export_bcrypt.sh index f5a669b..111c216 100755 --- a/scripts/config/password/bcrypt/password_export_bcrypt.sh +++ b/scripts/config/password/bcrypt/password_export_bcrypt.sh @@ -11,10 +11,10 @@ exportBcryptPassword() # bcrypt.txt lives under containers_dir (docker-install-owned) -> runFileOp. if [ ! -f "$log_file" ]; then - local result=$(runFileOp touch "$log_file") + local result; result=$(runFileOp touch "$log_file") checkSuccess "Created bcrypt.txt file." - local result=$(runFileOp chmod 600 "$log_file") + local result; result=$(runFileOp chmod 600 "$log_file") checkSuccess "Adjusted bcrypt.txt file permissions." fi @@ -24,11 +24,11 @@ exportBcryptPassword() if [ -n "$variable_name" ]; then # Remove old password entries for this app & variable - local result=$(runFileOp sed -i "/^$app_name $variable_name /d" "$log_file") + local result; result=$(runFileOp sed -i "/^$app_name $variable_name /d" "$log_file") checkSuccess "Removed existing entry for $app_name $variable_name from bcrypt.txt." # Log new password - local result=$(echo "$app_name $variable_name $raw_password" | runFileWrite -a "$log_file" > /dev/null) + local result; result=$(echo "$app_name $variable_name $raw_password" | runFileWrite -a "$log_file" > /dev/null) checkSuccess "Logged $app_name $variable_name in bcrypt.txt." else checkSuccess "Could not extract a variable name before $placeholder in $file." diff --git a/scripts/config/password/bcrypt/password_process_bcrypt.sh b/scripts/config/password/bcrypt/password_process_bcrypt.sh index 40a9408..aa265c1 100755 --- a/scripts/config/password/bcrypt/password_process_bcrypt.sh +++ b/scripts/config/password/bcrypt/password_process_bcrypt.sh @@ -35,7 +35,7 @@ processBcryptPassword() # Remove any single quotes from the bcrypt hash bcrypt_password=$(echo "$bcrypt_password" | tr -d "'") - local result=$(runCfgOp sed -i -E "s#$placeholder#$bcrypt_password#g" "$file") + local result; result=$(runCfgOp sed -i -E "s#$placeholder#$bcrypt_password#g" "$file") checkSuccess "Use sed to replace placeholder with bcrypt hash" # Verify replacement diff --git a/scripts/crontab/app/crontab_backup_scheduler.sh b/scripts/crontab/app/crontab_backup_scheduler.sh index 64a80cb..fcbaefd 100644 --- a/scripts/crontab/app/crontab_backup_scheduler.sh +++ b/scripts/crontab/app/crontab_backup_scheduler.sh @@ -22,8 +22,8 @@ crontabSetupBackupScheduler() # Drop any previous scheduler entry, then re-add the current one so a # changed schedule (CFG_BACKUP_CRONTAB_APP) always takes effect. - local result=$(runAsManager crontab -l 2>/dev/null | grep -v "$marker" | runAsManager crontab -) - local result=$( (runAsManager crontab -l 2>/dev/null; echo "$scheduler_entry") | runAsManager crontab - ) + local result; result=$(runAsManager crontab -l 2>/dev/null | grep -v "$marker" | runAsManager crontab -) + local result; result=$( (runAsManager crontab -l 2>/dev/null; echo "$scheduler_entry") | runAsManager crontab - ) checkSuccess "Installing the daily backup scheduler entry" local schedule_time=$(echo "$CFG_BACKUP_CRONTAB_APP" | cut -d' ' -f2) diff --git a/scripts/crontab/crontab_install.sh b/scripts/crontab/crontab_install.sh index 3ff4f2d..b5a22fc 100755 --- a/scripts/crontab/crontab_install.sh +++ b/scripts/crontab/crontab_install.sh @@ -10,11 +10,11 @@ installCrontab() ISCRON=$( (runAsManager crontab -l) 2>&1 ) if [[ "$ISCRON" == *"command not found"* ]]; then isNotice "Crontab is not installed, setting up now." - local result=$(runSystem apt update) + local result; result=$(runSystem apt update) checkSuccess "Updating apt for post installation" - local result=$(runSystem apt install cron -y) + local result; result=$(runSystem apt install cron -y) isSuccessful "Installing crontab application" - local result=$(runAsManager crontab -l) + local result; result=$(runAsManager crontab -l) isSuccessful "Enabling crontab on the system" fi diff --git a/scripts/crontab/crontab_setup.sh b/scripts/crontab/crontab_setup.sh index b873821..686b554 100755 --- a/scripts/crontab/crontab_setup.sh +++ b/scripts/crontab/crontab_setup.sh @@ -6,7 +6,7 @@ crontabSetup() local cron_output=$(runAsManager crontab -l 2>/dev/null) if [[ ! $cron_output == *"$search_line"* ]]; then - local result=$( (runAsManager crontab -l 2>/dev/null; echo "# cron is set up for $sudo_user_name") | runAsManager crontab - 2>/dev/null ) + local result; result=$( (runAsManager crontab -l 2>/dev/null; echo "# cron is set up for $sudo_user_name") | runAsManager crontab - 2>/dev/null ) checkSuccess "Setting up Crontab for $sudo_user_name user" fi diff --git a/scripts/database/app/db_app_scan.sh b/scripts/database/app/db_app_scan.sh index 58b8f78..4c2de4d 100755 --- a/scripts/database/app/db_app_scan.sh +++ b/scripts/database/app/db_app_scan.sh @@ -43,7 +43,7 @@ databaseAppScan() if (( status == 0 )); then isNotice "The folder for $folder_name has been found." # Update the database to set the status to 1 (installed) and unset the uninstall_date - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "UPDATE apps SET status = 1, uninstall_date = NULL WHERE name = '$folder_name';") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "UPDATE apps SET status = 1, uninstall_date = NULL WHERE name = '$folder_name';") checkSuccess "Updating apps database for $folder_name to installed status." ((updated_count++)) # Increment updated_count fi @@ -72,7 +72,7 @@ databaseAppScan() local folder_time=$(echo "$folder_datetime" | awk '{print $2}') # Add the new entry to the database with a default status of 1 (installed) and the extracted or current date - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO apps (name, status, install_date, install_time) VALUES ('$app_name', 1, '$folder_date', '$folder_time');") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO apps (name, status, install_date, install_time) VALUES ('$app_name', 1, '$folder_date', '$folder_time');") checkSuccess "Adding $app_name to the apps database." ((updated_count++)) # Increment updated_count fi @@ -97,7 +97,7 @@ databaseAppScan() isNotice "Folder $folder_name no longer exists. Removing from the Database." # Delete the entry from the apps table - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "DELETE FROM apps WHERE name = '$app_name';") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "DELETE FROM apps WHERE name = '$app_name';") checkSuccess "Removing $app_name from the apps database." portsRemoveFromDatabase $app_name; diff --git a/scripts/database/app/db_install_app.sh b/scripts/database/app/db_install_app.sh index 4294187..c045f6d 100755 --- a/scripts/database/app/db_install_app.sh +++ b/scripts/database/app/db_install_app.sh @@ -24,11 +24,11 @@ databaseInstallApp() if [ "$app_exists" -eq 0 ]; then isNotice "App does not exist in the database, setting up now." - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO apps (name, status, install_date, install_time) VALUES ('$app_name', '1', '$current_date', '$current_time');") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO apps (name, status, install_date, install_time) VALUES ('$app_name', '1', '$current_date', '$current_time');") checkSuccess "Adding $app_name to the apps database." else isNotice "App already exists in the database, updating now." - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "UPDATE apps SET status = '1', install_date = '$current_date', install_time = '$current_time', uninstall_date = NULL WHERE name = '$app_name';") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "UPDATE apps SET status = '1', install_date = '$current_date', install_time = '$current_time', uninstall_date = NULL WHERE name = '$app_name';") checkSuccess "Updating apps database for $app_name to installed status." fi } diff --git a/scripts/database/delete_db_file.sh b/scripts/database/delete_db_file.sh index 9244e78..8a18641 100755 --- a/scripts/database/delete_db_file.sh +++ b/scripts/database/delete_db_file.sh @@ -3,7 +3,7 @@ databaseRemoveFile() { if [[ "$tooldeletedb" == [yY] ]]; then - local result=$(runInstallOp rm $docker_dir/$db_file) + local result; result=$(runInstallOp rm $docker_dir/$db_file) checkSuccess "Removing $db_file file" fi } \ No newline at end of file diff --git a/scripts/database/insert/db_insert_backups.sh b/scripts/database/insert/db_insert_backups.sh index 59a356b..116d0f5 100755 --- a/scripts/database/insert/db_insert_backups.sh +++ b/scripts/database/insert/db_insert_backups.sh @@ -4,6 +4,6 @@ databaseBackupInsert() { local app_name="$1" local table_name=backups - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO $table_name (name, date, time) VALUES ('$app_name', '$current_date', '$current_time');") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO $table_name (name, date, time) VALUES ('$app_name', '$current_date', '$current_time');") checkSuccess "Adding $app_name to the $table_name table." } diff --git a/scripts/database/insert/db_insert_option.sh b/scripts/database/insert/db_insert_option.sh index 7064320..4d313e3 100755 --- a/scripts/database/insert/db_insert_option.sh +++ b/scripts/database/insert/db_insert_option.sh @@ -8,10 +8,10 @@ databaseOptionInsert() local option_in_db=$(runInstallOp sqlite3 "$docker_dir/$db_file" "SELECT COUNT(*) FROM $table_name WHERE option = '$option';") if [ "$option_in_db" -eq 0 ]; then - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO $table_name (option, content) VALUES ('$option', '$content');") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO $table_name (option, content) VALUES ('$option', '$content');") checkSuccess "Adding $option to the $table_name table." else - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "UPDATE $table_name SET option = '$option', content = '$content';") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "UPDATE $table_name SET option = '$option', content = '$content';") checkSuccess "$option already added to the $table_name table. Updating content to $content." fi } diff --git a/scripts/database/insert/db_insert_port_open.sh b/scripts/database/insert/db_insert_port_open.sh index 3353a1b..9ca5870 100755 --- a/scripts/database/insert/db_insert_port_open.sh +++ b/scripts/database/insert/db_insert_port_open.sh @@ -12,7 +12,7 @@ databasePortOpenInsert() # Check if already exists in the database local existing_portdata=$(runInstallOp sqlite3 "$docker_dir/$db_file" "SELECT port FROM $table_name WHERE name = '$app_name' AND port = '$port' AND type = '$type';") if [ -z "$existing_portdata" ]; then - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO $table_name (name, port, type) VALUES ('$app_name', '$port', '$type');") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO $table_name (name, port, type) VALUES ('$app_name', '$port', '$type');") checkSuccess "Adding port $port and type $type for $app_name to the $table_name table." fi fi diff --git a/scripts/database/insert/db_insert_port_used.sh b/scripts/database/insert/db_insert_port_used.sh index fd3bd67..32bd872 100755 --- a/scripts/database/insert/db_insert_port_used.sh +++ b/scripts/database/insert/db_insert_port_used.sh @@ -10,7 +10,7 @@ databasePortUsedInsert() # Check if already exists in the database local existing_portdata=$(runInstallOp sqlite3 "$docker_dir/$db_file" "SELECT port FROM $table_name WHERE name = '$app_name' AND port = '$port';") if [ -z "$existing_portdata" ]; then - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO $table_name (name, port) VALUES ('$app_name', '$port');") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO $table_name (name, port) VALUES ('$app_name', '$port');") checkSuccess "Adding port $port for $app_name to the $table_name table." fi fi diff --git a/scripts/database/insert/db_insert_restore.sh b/scripts/database/insert/db_insert_restore.sh index 8bd0a65..e362432 100755 --- a/scripts/database/insert/db_insert_restore.sh +++ b/scripts/database/insert/db_insert_restore.sh @@ -4,6 +4,6 @@ databaseRestoreInsert() { local app_name="$1" local table_name=restores - local result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO $table_name (name, date, time) VALUES ('$app_name', '$current_date', '$current_time');") + local result; result=$(runInstallOp sqlite3 "$docker_dir/$db_file" "INSERT INTO $table_name (name, date, time) VALUES ('$app_name', '$current_date', '$current_time');") checkSuccess "Adding $app_name to the $table_name table." } diff --git a/scripts/database/install_sqlite.sh b/scripts/database/install_sqlite.sh index e18ce50..c72e1df 100755 --- a/scripts/database/install_sqlite.sh +++ b/scripts/database/install_sqlite.sh @@ -10,10 +10,10 @@ installSQLiteDatabase() # Create SQLite database file if [ ! -e "$docker_dir/$db_file" ]; then - local result=$(runInstallOp touch $docker_dir/$db_file) + local result; result=$(runInstallOp touch $docker_dir/$db_file) checkSuccess "Creating SQLite $db_file file" - local result=$(runInstallOp chmod 755 $docker_dir/$db_file) + local result; result=$(runInstallOp chmod 755 $docker_dir/$db_file) checkSuccess "Changing permissions for SQLite $db_file file" fi diff --git a/scripts/database/tables/db_create_tables.sh b/scripts/database/tables/db_create_tables.sh index 27506e8..d1c6192 100755 --- a/scripts/database/tables/db_create_tables.sh +++ b/scripts/database/tables/db_create_tables.sh @@ -6,21 +6,21 @@ databaseCreateTables() setup_table_name=path if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then # Table info here - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (path TEXT);") + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (path TEXT);") checkSuccess "Creating $setup_table_name table" fi setup_table_name=sysupdate if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then # Table info here - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (date DATE, time TIME);") + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (date DATE, time TIME);") checkSuccess "Creating $setup_table_name table" fi setup_table_name=options if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then # Table info here - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (option TEXT UNIQUE, content TEXT);") + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (option TEXT UNIQUE, content TEXT);") checkSuccess "Creating $setup_table_name table" fi @@ -28,42 +28,42 @@ databaseCreateTables() if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then # Table info here # status = 1 = installed, 0 uninstalled - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (name TEXT UNIQUE, status DATE, install_date DATE, install_time TIME, uninstall_date DATE, uninstall_time TIME);") + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (name TEXT UNIQUE, status DATE, install_date DATE, install_time TIME, uninstall_date DATE, uninstall_time TIME);") checkSuccess "Creating $setup_table_name table" fi setup_table_name=backups if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then # Table info here - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, date DATE, time TIME);") + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, date DATE, time TIME);") checkSuccess "Creating $setup_table_name table" fi setup_table_name=restores if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then # Table info here - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, date DATE, time TIME);") + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, date DATE, time TIME);") checkSuccess "Creating $setup_table_name table" fi setup_table_name=migrations if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then # Table info here - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, date DATE, time TIME);") + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, date DATE, time TIME);") checkSuccess "Creating $setup_table_name table" fi setup_table_name=ssh if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then # Table info here - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, ip TEXT, date DATE, time TIME);") + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, ip TEXT, date DATE, time TIME);") checkSuccess "Creating $setup_table_name table" fi setup_table_name=ssh_keys if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then # Table info here - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (name TEXT UNIQUE, hash TEXT, date DATE, time TIME);") + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (name TEXT UNIQUE, hash TEXT, date DATE, time TIME);") checkSuccess "Creating $setup_table_name table" fi @@ -77,7 +77,7 @@ databaseCreateTables() # config_json carries kind-specific knobs (hostname, loc_idx, pubkey # fingerprint, relay token, etc.) so adding new kinds doesn't need # another schema migration. - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name ( + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL, kind TEXT NOT NULL DEFAULT 'backup-channel', @@ -87,14 +87,14 @@ databaseCreateTables() created_at TEXT DEFAULT CURRENT_TIMESTAMP );") checkSuccess "Creating $setup_table_name table" - local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_peers_name ON peers(name);") - local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_peers_kind ON peers(kind);") + local result; result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_peers_name ON peers(name);") + local result; result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_peers_kind ON peers(kind);") fi setup_table_name=network_resources if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then # Simple unified network resources table - replaces all complex network tables - local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name ( + local result; result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name ( id INTEGER PRIMARY KEY AUTOINCREMENT, app_name TEXT NOT NULL, resource_type TEXT NOT NULL, -- 'ip' or 'port' @@ -110,15 +110,15 @@ databaseCreateTables() checkSuccess "Creating unified network_resources table" # Create simple indexes for performance - local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_app ON network_resources(app_name);") + local result; result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_app ON network_resources(app_name);") checkSuccess "Creating network resources app index" - local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_type ON network_resources(resource_type);") + local result; result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_type ON network_resources(resource_type);") checkSuccess "Creating network resources type index" - local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_value ON network_resources(resource_value);") + local result; result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_value ON network_resources(resource_value);") checkSuccess "Creating network resources value index" - local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_status ON network_resources(status);") + local result; result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_status ON network_resources(status);") checkSuccess "Creating network resources status index" - local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_parent_service ON network_resources(parent_service);") + local result; result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_parent_service ON network_resources(parent_service);") checkSuccess "Creating network resources parent service index" fi else diff --git a/scripts/docker/app/compose/down_app.sh b/scripts/docker/app/compose/down_app.sh index 75f0733..a43531b 100755 --- a/scripts/docker/app/compose/down_app.sh +++ b/scripts/docker/app/compose/down_app.sh @@ -41,10 +41,10 @@ dockerComposeDown() # header is never left without output. local mode="${type:-$CFG_DOCKER_INSTALL_TYPE}" if [[ $mode == "rootless" ]]; then - local result=$(dockerCommandRunInstallUser "cd $containers_dir$app_name && docker compose $setup_compose down" >/dev/null 2>&1) + local result; result=$(dockerCommandRunInstallUser "cd $containers_dir$app_name && docker compose $setup_compose down" >/dev/null 2>&1) checkSuccess "Shutting down container for $app_name" elif [[ $mode == "rooted" ]]; then - local result=$(cd "$containers_dir$app_name" && docker compose $setup_compose down >/dev/null 2>&1) + local result; result=$(cd "$containers_dir$app_name" && docker compose $setup_compose down >/dev/null 2>&1) checkSuccess "Shutting down container for $app_name" else isNotice "Unknown Docker install type '$mode' — cannot shut down $app_name." diff --git a/scripts/docker/app/compose/up_app.sh b/scripts/docker/app/compose/up_app.sh index 33d59c1..b1f6470 100755 --- a/scripts/docker/app/compose/up_app.sh +++ b/scripts/docker/app/compose/up_app.sh @@ -115,20 +115,20 @@ dockerComposeUp() fi if [[ $CFG_DOCKER_INSTALL_TYPE == "rootless" ]]; then isNotice "Starting container for $app_name, this may take a while..." - local result=$(dockerCommandRunInstallUser "cd $containers_dir$app_name && COMPOSE_PROGRESS=plain docker compose $setup_compose up $_compose_quiet $_compose_build_flag -d") + local result; result=$(dockerCommandRunInstallUser "cd $containers_dir$app_name && COMPOSE_PROGRESS=plain docker compose $setup_compose up $_compose_quiet $_compose_build_flag -d") checkSuccess "Started container for $app_name" elif [[ $CFG_DOCKER_INSTALL_TYPE == "rooted" ]]; then isNotice "Starting container for $app_name, this may take a while..." - local result=$(cd "$containers_dir$app_name" && COMPOSE_PROGRESS=plain docker compose $setup_compose up $_compose_quiet $_compose_build_flag -d) + local result; result=$(cd "$containers_dir$app_name" && COMPOSE_PROGRESS=plain docker compose $setup_compose up $_compose_quiet $_compose_build_flag -d) checkSuccess "Started container for $app_name" fi # Used for the CLI dockertype switcher. else if [[ $type == "rootless" ]]; then - local result=$(dockerCommandRunInstallUser "cd $containers_dir$app_name && docker compose $setup_compose down") + local result; result=$(dockerCommandRunInstallUser "cd $containers_dir$app_name && docker compose $setup_compose down") checkSuccess "Shutting down container for $app_name" elif [[ $type == "rooted" ]]; then - local result=$(cd "$containers_dir$app_name" && docker compose $setup_compose down) + local result; result=$(cd "$containers_dir$app_name" && docker compose $setup_compose down) checkSuccess "Shutting down container for $app_name" fi fi diff --git a/scripts/docker/app/docker/remove_app.sh b/scripts/docker/app/docker/remove_app.sh index 5b61161..0da127b 100755 --- a/scripts/docker/app/docker/remove_app.sh +++ b/scripts/docker/app/docker/remove_app.sh @@ -11,9 +11,9 @@ dockerRemoveApp() isNotice "Stopping and removing Docker containers for '$app_name'. Please wait..." # Stop and remove containers in one go - local result=$(dockerCommandRun "docker ps -aqf name=$app_name | xargs -r docker stop" >/dev/null 2>&1) + local result; result=$(dockerCommandRun "docker ps -aqf name=$app_name | xargs -r docker stop" >/dev/null 2>&1) checkSuccess "Stopped Docker containers matching '$app_name'" - local result=$(dockerCommandRun "docker ps -aqf name=$app_name | xargs -r docker rm" >/dev/null 2>&1) + local result; result=$(dockerCommandRun "docker ps -aqf name=$app_name | xargs -r docker rm" >/dev/null 2>&1) checkSuccess "Removed Docker containers matching '$app_name'" } diff --git a/scripts/docker/app/docker/restart_app.sh b/scripts/docker/app/docker/restart_app.sh index 8e01a80..e729f9e 100755 --- a/scripts/docker/app/docker/restart_app.sh +++ b/scripts/docker/app/docker/restart_app.sh @@ -11,7 +11,7 @@ dockerRestartApp() isNotice "Restarting Docker containers for '$app_name'. Please wait..." # Restart containers in one go - local result=$(dockerCommandRun "docker ps -aqf name=$app_name | xargs -r docker restart" >/dev/null 2>&1) + local result; result=$(dockerCommandRun "docker ps -aqf name=$app_name | xargs -r docker restart" >/dev/null 2>&1) checkSuccess "Restarted Docker containers matching '$app_name'" # App-specific restart hook — host-installed apps define restart to diff --git a/scripts/docker/app/docker/start_all.sh b/scripts/docker/app/docker/start_all.sh index d6342c1..fecd893 100755 --- a/scripts/docker/app/docker/start_all.sh +++ b/scripts/docker/app/docker/start_all.sh @@ -3,6 +3,6 @@ dockerStartAllApps() { isNotice "Please wait for docker containers to start" - local result=$(dockerCommandRun "docker ps -a -q | xargs -r docker restart") + local result; result=$(dockerCommandRun "docker ps -a -q | xargs -r docker restart") checkSuccess "Starting up all docker containers" } diff --git a/scripts/docker/app/docker/start_app.sh b/scripts/docker/app/docker/start_app.sh index 2c3e83b..7d22c23 100755 --- a/scripts/docker/app/docker/start_app.sh +++ b/scripts/docker/app/docker/start_app.sh @@ -11,6 +11,6 @@ dockerStartApp() isNotice "Starting Docker containers for '$app_name'. Please wait..." # Start containers in one go - local result=$(dockerCommandRun "docker ps -aqf name=$app_name | xargs -r docker start" >/dev/null 2>&1) + local result; result=$(dockerCommandRun "docker ps -aqf name=$app_name | xargs -r docker start" >/dev/null 2>&1) checkSuccess "Started Docker containers matching '$app_name'" } diff --git a/scripts/docker/app/docker/stop_all.sh b/scripts/docker/app/docker/stop_all.sh index f97143a..6d5d7e0 100755 --- a/scripts/docker/app/docker/stop_all.sh +++ b/scripts/docker/app/docker/stop_all.sh @@ -5,6 +5,6 @@ dockerStopAllApps() isNotice "Stopping all running Docker containers. Please wait..." # Stop all running containers using a single pipeline - local result=$(dockerCommandRun "docker ps -q | xargs -r docker stop" >/dev/null 2>&1) + local result; result=$(dockerCommandRun "docker ps -q | xargs -r docker stop" >/dev/null 2>&1) checkSuccess "Stopped all running Docker containers." } diff --git a/scripts/docker/app/docker/stop_app.sh b/scripts/docker/app/docker/stop_app.sh index e6c051a..e69f4c3 100755 --- a/scripts/docker/app/docker/stop_app.sh +++ b/scripts/docker/app/docker/stop_app.sh @@ -11,7 +11,7 @@ dockerStopApp() isNotice "Stopping Docker containers for '$app_name'. Please wait..." # Stop containers in one go - local result=$(dockerCommandRun "docker ps -aq --filter name=${app_name} | xargs -r docker stop" >/dev/null 2>&1) + local result; result=$(dockerCommandRun "docker ps -aq --filter name=${app_name} | xargs -r docker stop" >/dev/null 2>&1) checkSuccess "Stopped Docker containers matching '$app_name'" # App-specific stop hook — host-installed apps define stop to stop diff --git a/scripts/docker/app/uninstall/remove_images.sh b/scripts/docker/app/uninstall/remove_images.sh index a310078..1d5e2df 100644 --- a/scripts/docker/app/uninstall/remove_images.sh +++ b/scripts/docker/app/uninstall/remove_images.sh @@ -33,7 +33,7 @@ dockerRemoveAppImages() fi while IFS= read -r image; do - local result=$(dockerCommandRun "docker rmi -f '$image'" >/dev/null 2>&1) + local result; result=$(dockerCommandRun "docker rmi -f '$image'" >/dev/null 2>&1) checkSuccess "Removed Docker image '$image'" done <<< "$all_images" } diff --git a/scripts/docker/checks/running_for_user.sh b/scripts/docker/checks/running_for_user.sh index 09d60dc..72b493f 100755 --- a/scripts/docker/checks/running_for_user.sh +++ b/scripts/docker/checks/running_for_user.sh @@ -7,10 +7,10 @@ dockerCheckIsRunningForUser() # Check if Docker is running for the specified user if [[ $type == "rootless" ]]; then local docker_command='docker ps 2>&1' - local result=$(dockerCommandRunInstallUser "$docker_command") + local result; result=$(dockerCommandRunInstallUser "$docker_command") elif [[ $type == "rooted" ]]; then local docker_command='docker ps 2>&1' - local result=$(eval "$docker_command") + local result; result=$(eval "$docker_command") else echo "Invalid user type specified." fi diff --git a/scripts/docker/compose/update_compose_yml.sh b/scripts/docker/compose/update_compose_yml.sh index 167cee0..055bbe9 100755 --- a/scripts/docker/compose/update_compose_yml.sh +++ b/scripts/docker/compose/update_compose_yml.sh @@ -37,7 +37,7 @@ dockerComposeUpdate() # Whitelist not set up yet if runFileOp grep -q "ignoreip = ips_whitelist" "$jail_local_file"; then - local result=$(runFileOp sed -i "s/ips_whitelist/$CFG_IPS_WHITELIST/" "$jail_local_file") + local result; result=$(runFileOp sed -i "s/ips_whitelist/$CFG_IPS_WHITELIST/" "$jail_local_file") checkSuccess "Update the IP whitelist for $app_name" local whitelistupdates=true fi @@ -45,7 +45,7 @@ dockerComposeUpdate() # If the IPs are set up already but need an update local current_ip_range=$(grep "ignoreip = " "$jail_local_file" | cut -d ' ' -f 2) if [ "$current_ip_range" != "$CFG_IPS_WHITELIST" ]; then - local result=$(runFileOp sed -i "s/ignoreip = ips_whitelist/ignoreip = $CFG_IPS_WHITELIST/" "$jail_local_file") + local result; result=$(runFileOp sed -i "s/ignoreip = ips_whitelist/ignoreip = $CFG_IPS_WHITELIST/" "$jail_local_file") checkSuccess "Update the IP whitelist for $app_name" local whitelistupdates=true fi diff --git a/scripts/docker/install/rooted/rooted_docker.sh b/scripts/docker/install/rooted/rooted_docker.sh index c084f3c..115bb69 100755 --- a/scripts/docker/install/rooted/rooted_docker.sh +++ b/scripts/docker/install/rooted/rooted_docker.sh @@ -8,7 +8,7 @@ installDockerRooted() if command -v docker &> /dev/null; then isSuccessful "Docker is already installed." else - local result=$(sudo curl -fsSL https://get.docker.com | sh ) + local result; result=$(sudo curl -fsSL https://get.docker.com | sh ) checkSuccess "Downloading & Installing Docker" dockerServiceStart; diff --git a/scripts/docker/install/rooted/rooted_docker_compose.sh b/scripts/docker/install/rooted/rooted_docker_compose.sh index 5bdf3f0..f7233a7 100755 --- a/scripts/docker/install/rooted/rooted_docker_compose.sh +++ b/scripts/docker/install/rooted/rooted_docker_compose.sh @@ -18,13 +18,13 @@ installDockerRootedCompose() ###################################### if [[ "$OS_TYPE" == "Ubuntu" || "$OS_TYPE" == "Debian" ]]; then - local result=$(sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)" -o /usr/local/bin/docker-compose) + local result; result=$(sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)" -o /usr/local/bin/docker-compose) checkSuccess "Download the official Docker Compose script" - local result=$(sudo chmod +x /usr/local/bin/docker-compose) + local result; result=$(sudo chmod +x /usr/local/bin/docker-compose) checkSuccess "Make the script executable" - local result=$(docker compose --version) + local result; result=$(docker compose --version) checkSuccess "Verify the installation" fi diff --git a/scripts/docker/install/rootless/rootless_docker.sh b/scripts/docker/install/rootless/rootless_docker.sh index b0337ce..3e267c7 100755 --- a/scripts/docker/install/rootless/rootless_docker.sh +++ b/scripts/docker/install/rootless/rootless_docker.sh @@ -16,10 +16,10 @@ installDockerRootless() local docker_install_user_id=$(id -u "$CFG_DOCKER_INSTALL_USER") local docker_install_bashrc="/home/$CFG_DOCKER_INSTALL_USER/.bashrc" - local result=$(runSystem apt-get install -y apt-transport-https ca-certificates curl gnupg software-properties-common uidmap dbus-user-session fuse-overlayfs passt) + local result; result=$(runSystem apt-get install -y apt-transport-https ca-certificates curl gnupg software-properties-common uidmap dbus-user-session fuse-overlayfs passt) checkSuccess "Installing necessary packages" - local result=$(runSystem systemctl disable --now docker.service docker.socket) + local result; result=$(runSystem systemctl disable --now docker.service docker.socket) checkSuccess "Disabling Docker service & Socket" ((menu_number++)) @@ -30,7 +30,7 @@ installDockerRootless() # slirp4netns update and install if ! command -v slirp4netns &> /dev/null; then isNotice "slirp4netns is not installed. Installing..." - local result=$(runSystem apt-get install -y slirp4netns) + local result; result=$(runSystem apt-get install -y slirp4netns) checkSuccess "Installing slirp4netns" else isNotice "slirp4netns is already installed" @@ -39,9 +39,9 @@ installDockerRootless() if [[ "$installed_version" != "$latest_version" ]]; then isNotice "slirp4netns version $installed_version is outdated." isNotice "Installing version $latest_version..." - local result=$(runSystem apt-get update) + local result; result=$(runSystem apt-get update) checkSuccess "Updating apt packages" - local result=$(runSystem apt-get install -y slirp4netns) + local result; result=$(runSystem apt-get install -y slirp4netns) checkSuccess "Installing slirp4netns" else isSuccessful "slirp4netns version $installed_version is up to date" @@ -56,9 +56,9 @@ installDockerRootless() if sudo grep -qs "kernel.unprivileged_userns_clone=1" $sysctl; then isNotice "kernel.unprivileged_userns_clone=1 already exists in $sysctl" else - local result=$(echo "kernel.unprivileged_userns_clone=1" | sudo tee -a $sysctl > /dev/null) + local result; result=$(echo "kernel.unprivileged_userns_clone=1" | sudo tee -a $sysctl > /dev/null) checkSuccess "Adding kernel.unprivileged_userns_clone=1 to $sysctl..." - local result=$(runSystem sysctl --system) + local result; result=$(runSystem sysctl --system) checkSuccess "Running runAsManager sysctl --system..." fi fi @@ -69,22 +69,22 @@ installDockerRootless() echo "" if ! grep -qF "# DOCKER ROOTLESS BASHRC START" "$docker_install_bashrc"; then - local result=$(echo '# DOCKER ROOTLESS BASHRC START' | sudo tee -a "$docker_install_bashrc" > /dev/null) + local result; result=$(echo '# DOCKER ROOTLESS BASHRC START' | sudo tee -a "$docker_install_bashrc" > /dev/null) checkSuccess "Adding rootless header to .bashrc" - local result=$(echo 'export XDG_RUNTIME_DIR=/run/user/${UID}' | sudo tee -a "$docker_install_bashrc" > /dev/null) + local result; result=$(echo 'export XDG_RUNTIME_DIR=/run/user/${UID}' | sudo tee -a "$docker_install_bashrc" > /dev/null) checkSuccess "Adding export path to .bashrc" - local result=$(echo 'export PATH=/usr/bin:$PATH' | sudo tee -a "$docker_install_bashrc" > /dev/null) + local result; result=$(echo 'export PATH=/usr/bin:$PATH' | sudo tee -a "$docker_install_bashrc" > /dev/null) checkSuccess "Adding export path to .bashrc" - local result=$(echo 'export DOCKER_HOST=unix:///run/user/${UID}/docker.sock' | sudo tee -a "$docker_install_bashrc" > /dev/null) + local result; result=$(echo 'export DOCKER_HOST=unix:///run/user/${UID}/docker.sock' | sudo tee -a "$docker_install_bashrc" > /dev/null) checkSuccess "Adding export DOCKER_HOST path to .bashrc" - local result=$(echo 'export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${UID}/bus"' | sudo tee -a "$docker_install_bashrc" > /dev/null) + local result; result=$(echo 'export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${UID}/bus"' | sudo tee -a "$docker_install_bashrc" > /dev/null) checkSuccess "Adding export DBUS_SESSION_BUS_ADDRESS path to .bashrc" - local result=$(echo '# DOCKER ROOTLESS BASHRC END' | sudo tee -a "$docker_install_bashrc" > /dev/null) + local result; result=$(echo '# DOCKER ROOTLESS BASHRC END' | sudo tee -a "$docker_install_bashrc" > /dev/null) checkSuccess "Adding rootless header to .bashrc" isSuccessful "Added $CFG_DOCKER_INSTALL_USER to bashrc file" @@ -97,7 +97,7 @@ installDockerRootless() echo "---- $menu_number. Setting up Rootless Docker." echo "" - local result=$(runSystem loginctl enable-linger $CFG_DOCKER_INSTALL_USER) + local result; result=$(runSystem loginctl enable-linger $CFG_DOCKER_INSTALL_USER) checkSuccess "Adding automatic start (linger)" # Rootless Install @@ -108,7 +108,7 @@ rootless_install=$(cat < '$override_conf_file' @@ -154,7 +154,7 @@ Environment='DOCKERD_ROOTLESS_ROOTLESSKIT_PORT_DRIVER=$rootless_port_driver' Environment='DOCKERD_ROOTLESS_ROOTLESSKIT_MTU=$CFG_NETWORK_MTU' EOL" - local result=$(sudo chown $CFG_DOCKER_INSTALL_USER:$CFG_DOCKER_INSTALL_USER $override_conf_file) + local result; result=$(sudo chown $CFG_DOCKER_INSTALL_USER:$CFG_DOCKER_INSTALL_USER $override_conf_file) checkSuccess "Updating ownership for override.conf" # Pasta needs explicit AppArmor permissions that the Debian-shipped @@ -173,14 +173,14 @@ EOL" # propagation doesn't matter here: apps sit behind Traefik, which carries # the real client IP via X-Forwarded-For at L7. - local result=$(dockerCommandRunInstallUser "systemctl --user daemon-reload") + local result; result=$(dockerCommandRunInstallUser "systemctl --user daemon-reload") checkSuccess "Reload the systemd user manager configuration" isNotice "Restarting docker service...this may take a moment..." - local result=$(dockerCommandRunInstallUser "systemctl --user restart docker") + local result; result=$(dockerCommandRunInstallUser "systemctl --user restart docker") checkSuccess "Reload the systemd user docker service" - local result=$(sudo cp $sysctl $sysctl.bak) + local result; result=$(sudo cp $sysctl $sysctl.bak) checkSuccess "Backing up sysctl file" ((menu_number++)) @@ -191,16 +191,16 @@ EOL" # Update sysctl file if ! grep -qsF "# DOCKER ROOTLESS SYSCTL START" "$sysctl"; then - local result=$(echo '# DOCKER ROOTLESS SYSCTL START' | sudo tee -a "$sysctl" > /dev/null) + local result; result=$(echo '# DOCKER ROOTLESS SYSCTL START' | sudo tee -a "$sysctl" > /dev/null) checkSuccess "Adding rootless header to sysctl" - local result=$(echo 'net.ipv4.ip_unprivileged_port_start=0' | sudo tee -a "$sysctl" > /dev/null) + local result; result=$(echo 'net.ipv4.ip_unprivileged_port_start=0' | sudo tee -a "$sysctl" > /dev/null) checkSuccess "Adding ip_unprivileged_port_start to sysctl" - local result=$(echo 'kernel.unprivileged_userns_clone=1' | sudo tee -a "$sysctl" > /dev/null) + local result; result=$(echo 'kernel.unprivileged_userns_clone=1' | sudo tee -a "$sysctl" > /dev/null) checkSuccess "Adding unprivileged_userns_clone to sysctl" - local result=$(echo '# DOCKER ROOTLESS SYSCTL END' | sudo tee -a "$sysctl" > /dev/null) + local result; result=$(echo '# DOCKER ROOTLESS SYSCTL END' | sudo tee -a "$sysctl" > /dev/null) checkSuccess "Adding rootless end to sysctl" isSuccessful "Updated the sysctl with Docker Rootless configuration" @@ -224,7 +224,7 @@ net.core.bpf_jit_harden=2 EOL checkSuccess "Writing kernel LPE-surface hardening to $hardening_conf" - local result=$(runSystem sysctl --system) + local result; result=$(runSystem sysctl --system) checkSuccess "Applying changes to sysctl" menu_number=0 diff --git a/scripts/docker/install/rootless/rootless_uninstall.sh b/scripts/docker/install/rootless/rootless_uninstall.sh index 0c88967..25c446c 100755 --- a/scripts/docker/install/rootless/rootless_uninstall.sh +++ b/scripts/docker/install/rootless/rootless_uninstall.sh @@ -4,6 +4,6 @@ uninstallDockerRootless() { isHeader "Uninstall Docker Rootless" - local result=$(dockerCommandRunInstallUser "dockerd-rootless-setuptool.sh uninstall") + local result; result=$(dockerCommandRunInstallUser "dockerd-rootless-setuptool.sh uninstall") checkSuccess "Uninstalling Rootless docker." } \ No newline at end of file diff --git a/scripts/docker/install/rootless/rootless_user.sh b/scripts/docker/install/rootless/rootless_user.sh index 61f0f1d..051c0ad 100755 --- a/scripts/docker/install/rootless/rootless_user.sh +++ b/scripts/docker/install/rootless/rootless_user.sh @@ -7,7 +7,7 @@ installDockerRootlessUser() isSuccessful "User $CFG_DOCKER_INSTALL_USER already exists." else # Create the rootless docker user. The login name (last arg) was - # missing, so useradd failed silently — masked by local result=$(...) + # missing, so useradd failed silently — masked by local result; result=$(...) # — and the user never existed, breaking the whole rootless setup. # -m makes its home; with SUB_UID/GID configured in login.defs, # useradd also assigns its subordinate uid/gid ranges (needed for diff --git a/scripts/docker/network/network_prune.sh b/scripts/docker/network/network_prune.sh index 8503353..7f3aacd 100755 --- a/scripts/docker/network/network_prune.sh +++ b/scripts/docker/network/network_prune.sh @@ -10,7 +10,7 @@ dockerPruneAppNetworks() for network_id in $(runFileOp docker network ls --quiet); do network_name=$(runFileOp docker network inspect --format '{{.Name}}' "$network_id") if [[ "$network_name" == *"$app_name"* ]]; then - local result=$(dockerCommandRun "docker network rm "$network_id"") + local result; result=$(dockerCommandRun "docker network rm "$network_id"") checkSuccess "Removing the unused runFileOp docker network - $network_name" networks_found=true fi diff --git a/scripts/docker/network/network_setup.sh b/scripts/docker/network/network_setup.sh index ac0d092..b57b046 100755 --- a/scripts/docker/network/network_setup.sh +++ b/scripts/docker/network/network_setup.sh @@ -21,7 +21,7 @@ installDockerNetwork() $CFG_NETWORK_NAME" # Run the network creation command - local result=$(dockerCommandRun "$network_create") + local result; result=$(dockerCommandRun "$network_create") if [[ $? -eq 0 ]]; then checkSuccess "Docker network $CFG_NETWORK_NAME created successfully" else diff --git a/scripts/docker/service/start_docker.sh b/scripts/docker/service/start_docker.sh index 25efc32..c510ee1 100755 --- a/scripts/docker/service/start_docker.sh +++ b/scripts/docker/service/start_docker.sh @@ -3,16 +3,16 @@ dockerServiceStart() { if [[ $CFG_DOCKER_INSTALL_TYPE == "rooted" ]]; then - local result=$(runSystem systemctl start docker) + local result; result=$(runSystem systemctl start docker) checkSuccess "Starting Docker Service" - local result=$(runSystem systemctl enable docker) + local result; result=$(runSystem systemctl enable docker) checkSuccess "Enabling Docker Service" - local result=$(runSystem usermod -aG docker $sudo_user_name) + local result; result=$(runSystem usermod -aG docker $sudo_user_name) checkSuccess "Adding user to 'docker' group" - local result=$(runSystem systemctl restart docker) + local result; result=$(runSystem systemctl restart docker) checkSuccess "Restarting Docker service after group addition." elif [[ $CFG_DOCKER_INSTALL_TYPE == "rootless" ]]; then installDockerRootless; diff --git a/scripts/docker/service/stop_docker.sh b/scripts/docker/service/stop_docker.sh index 22f6fc2..bc9b40f 100755 --- a/scripts/docker/service/stop_docker.sh +++ b/scripts/docker/service/stop_docker.sh @@ -8,10 +8,10 @@ dockerServiceStop() if [[ "$docker_rooted_found" == "true" ]]; then isNotice "Stopping rooted Docker service...this may take a moment..." - local result=$(runSystem systemctl stop docker) + local result; result=$(runSystem systemctl stop docker) checkSuccess "Stopping Rooted Docker Service" - local result=$(runSystem systemctl disable docker) + local result; result=$(runSystem systemctl disable docker) checkSuccess "Disabling Rooted Docker Service" fi fi diff --git a/scripts/docker/setup_env.sh b/scripts/docker/setup_env.sh index ea3d7c6..e05d5aa 100755 --- a/scripts/docker/setup_env.sh +++ b/scripts/docker/setup_env.sh @@ -2,6 +2,6 @@ dockerSetupEnvFile() { - local result=$(copyFile "loud" $containers_dir$app_name/env.example $containers_dir$app_name/.env $docker_install_user) + local result; result=$(copyFile "loud" $containers_dir$app_name/env.example $containers_dir$app_name/.env $docker_install_user) checkSuccess "Setting up .env file to path" } diff --git a/scripts/docker/type_switcher/scan_container_socket.sh b/scripts/docker/type_switcher/scan_container_socket.sh index b0365d2..c60ee69 100755 --- a/scripts/docker/type_switcher/scan_container_socket.sh +++ b/scripts/docker/type_switcher/scan_container_socket.sh @@ -16,12 +16,12 @@ dockerSwitcherScanContainersForSocket() fi isSuccessful "Found Docker socket to change in file: $file" if [[ $CFG_DOCKER_INSTALL_TYPE == "rootless" ]]; then - local result=$(runFileOp sed -i \ + local result; result=$(runFileOp sed -i \ -e "/#SOCKETHERE/s|.*| - /run/user/${docker_install_user_id}/docker.sock:/run/user/${docker_install_user_id}/docker.sock:ro #SOCKETHERE|" \ "$file") checkSuccess "Updating docker socket for $app_name" elif [[ $CFG_DOCKER_INSTALL_TYPE == "rooted" ]]; then - local result=$(runFileOp sed -i \ + local result; result=$(runFileOp sed -i \ -e "/#SOCKETHERE/s|.*| - $docker_rooted_socket:$docker_rooted_socket:ro #SOCKETHERE|" \ "$file") checkSuccess "Updating docker socket for $app_name" diff --git a/scripts/docker/update_docker_sudo_pass.sh b/scripts/docker/update_docker_sudo_pass.sh index 3a134b5..58b1b12 100755 --- a/scripts/docker/update_docker_sudo_pass.sh +++ b/scripts/docker/update_docker_sudo_pass.sh @@ -2,6 +2,6 @@ updateDockerSudoPassword() { - local result=$(echo -e "$CFG_LIBREPORTAL_USER_PASS\n$CFG_LIBREPORTAL_USER_PASS" | runSystem passwd "$sudo_user_name" > /dev/null 2>&1) + local result; result=$(echo -e "$CFG_LIBREPORTAL_USER_PASS\n$CFG_LIBREPORTAL_USER_PASS" | runSystem passwd "$sudo_user_name" > /dev/null 2>&1) checkSuccess "Updating the password for the $sudo_user_name user" } diff --git a/scripts/docker/update_docker_user_pass.sh b/scripts/docker/update_docker_user_pass.sh index f73f280..2cb6c8f 100755 --- a/scripts/docker/update_docker_user_pass.sh +++ b/scripts/docker/update_docker_user_pass.sh @@ -2,6 +2,6 @@ updateDockerInstallPassword() { - local result=$(echo -e "$CFG_DOCKER_INSTALL_PASS\n$CFG_DOCKER_INSTALL_PASS" | runSystem passwd "$CFG_DOCKER_INSTALL_USER" > /dev/null 2>&1) + local result; result=$(echo -e "$CFG_DOCKER_INSTALL_PASS\n$CFG_DOCKER_INSTALL_PASS" | runSystem passwd "$CFG_DOCKER_INSTALL_USER" > /dev/null 2>&1) checkSuccess "Updating the password for the $CFG_DOCKER_INSTALL_USER user" } diff --git a/scripts/function/file/container/backup_files.sh b/scripts/function/file/container/backup_files.sh index cd4e9d6..cc7f526 100755 --- a/scripts/function/file/container/backup_files.sh +++ b/scripts/function/file/container/backup_files.sh @@ -7,7 +7,7 @@ backupContainerFilesToTemp() temp_backup_folder="temp_$(date +%Y%m%d%H%M%S)_$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 6)" - local result=$(createFolders "loud" $docker_install_user "$temp_backup_folder") + local result; result=$(createFolders "loud" $docker_install_user "$temp_backup_folder") checkSuccess "Creating temp folder for backing up purposes." if [[ $compose_setup == "default" ]]; then diff --git a/scripts/function/file/container/restore_files.sh b/scripts/function/file/container/restore_files.sh index 501e037..32d8205 100755 --- a/scripts/function/file/container/restore_files.sh +++ b/scripts/function/file/container/restore_files.sh @@ -6,9 +6,9 @@ backupContainerFilesRestore() local source_folder="$containers_dir$app_name" if [ -d "$temp_backup_folder" ]; then - local result=$(copyFiles "loud" "$temp_backup_folder" "$source_folder" $docker_install_user) + local result; result=$(copyFiles "loud" "$temp_backup_folder" "$source_folder" $docker_install_user) checkSuccess "Copying files from temp folder to $app_name folder." - local result=$(rm -rf "$temp_backup_folder") + local result; result=$(rm -rf "$temp_backup_folder") checkSuccess "Removing temp folder as no longer needed." fi } diff --git a/scripts/function/file/copy_file.sh b/scripts/function/file/copy_file.sh index 4443836..d82ef30 100755 --- a/scripts/function/file/copy_file.sh +++ b/scripts/function/file/copy_file.sh @@ -20,7 +20,7 @@ copyFile() [[ "$save_dir" == "$containers_dir"* || "$save_dir" == "${LP_CONTAINERS_DIR:-/libreportal-containers}"/* ]] && op="runFileOp" if [ "$silent_flag" == "loud" ]; then - local result=$($op cp $flags_full "$file" "$save_dir") + local result; result=$($op cp $flags_full "$file" "$save_dir") checkSuccess "Copying $file_name to $save_dir_file" else $op cp $flags_full "$file" "$save_dir" >/dev/null 2>&1 diff --git a/scripts/function/file/copy_files.sh b/scripts/function/file/copy_files.sh index aaeea82..8852b94 100755 --- a/scripts/function/file/copy_files.sh +++ b/scripts/function/file/copy_files.sh @@ -19,7 +19,7 @@ copyFiles() for file in "${files[@]}"; do local file_name=$(basename "$file") if [ "$silent_flag" == "loud" ]; then - local result=$($op cp -f "$file" "$save_dir") + local result; result=$($op cp -f "$file" "$save_dir") checkSuccess "Copying $file_name to $save_dir" else $op cp -f "$file" "$save_dir" >/dev/null 2>&1 diff --git a/scripts/function/file/copy_resource.sh b/scripts/function/file/copy_resource.sh index 6b652c1..9650b47 100755 --- a/scripts/function/file/copy_resource.sh +++ b/scripts/function/file/copy_resource.sh @@ -18,13 +18,13 @@ copyResource() if [ -n "$save_path" ]; then local destination_dir="$destination_dir/$save_path" if [ ! -d "$destination_dir" ]; then - local result=$(createFolders "loud" $docker_install_user "$destination_dir") + local result; result=$(createFolders "loud" $docker_install_user "$destination_dir") checkSuccess "Creating $save_path folder(s) for $app_name" fi fi # Destination is always /docker/containers/ -> write as the docker # install user (runFileOp); no root, no chown. - local result=$(runFileOp cp "$app_dir/resources/$file_name" "$destination_dir/") + local result; result=$(runFileOp cp "$app_dir/resources/$file_name" "$destination_dir/") checkSuccess "Copying $file_name to $destination_dir" } diff --git a/scripts/function/file/create_touch.sh b/scripts/function/file/create_touch.sh index 62cdda0..9ee8312 100755 --- a/scripts/function/file/create_touch.sh +++ b/scripts/function/file/create_touch.sh @@ -29,8 +29,8 @@ createTouch() $op mkdir -p "$file_dir" 2>/dev/null $op touch "$clean_file" else - local result=$($op mkdir -p "$file_dir") - local result=$($op touch "$clean_file") + local result; result=$($op mkdir -p "$file_dir") + local result; result=$($op touch "$clean_file") checkSuccess "Touching $file_name" fi } diff --git a/scripts/function/file/empty_line/remove_line.sh b/scripts/function/file/empty_line/remove_line.sh index 9e6c5a8..d052d41 100755 --- a/scripts/function/file/empty_line/remove_line.sh +++ b/scripts/function/file/empty_line/remove_line.sh @@ -6,7 +6,7 @@ removeEmptyLineAtFileEnd() local last_line=$(tail -n 1 "$file_path") if [ -z "$last_line" ]; then - local result=$(sudo sed -i '$d' "$file_path") + local result; result=$(sudo sed -i '$d' "$file_path") checkSuccess "Removed the empty line at the end of $file_path" fi } \ No newline at end of file diff --git a/scripts/function/file/move_file.sh b/scripts/function/file/move_file.sh index d55ff48..af118e9 100755 --- a/scripts/function/file/move_file.sh +++ b/scripts/function/file/move_file.sh @@ -11,7 +11,7 @@ moveFile() # Move as the destination's owner — no root, no chown (see copyFile). local op="runInstallOp" [[ "$save_dir" == "$containers_dir"* || "$save_dir" == "${LP_CONTAINERS_DIR:-/libreportal-containers}"/* ]] && op="runFileOp" - local result=$($op mv "$file" "$save_dir") + local result; result=$($op mv "$file" "$save_dir") checkSuccess "Moving $file_name to $save_dir" else isNotice "Source file does not exist: $file" diff --git a/scripts/function/file/zip_file.sh b/scripts/function/file/zip_file.sh index 1ecba9a..b0edf2b 100755 --- a/scripts/function/file/zip_file.sh +++ b/scripts/function/file/zip_file.sh @@ -7,9 +7,9 @@ zipFile() local zip_directory="$3" # Run the SSH command using the existing SSH variables - local result=$(sudo zip -r -MM -e -P $passphrase $zip_file $zip_directory) + local result; result=$(sudo zip -r -MM -e -P $passphrase $zip_file $zip_directory) checkSuccess "Zipped up $(basename "$zip_file")" - local result=$(sudo chown $sudo_user_name:$sudo_user_name "$zip_file") + local result; result=$(sudo chown $sudo_user_name:$sudo_user_name "$zip_file") checkSuccess "Updating $(basename "$zip_file") with $sudo_user_name ownership" } diff --git a/scripts/function/folder/copy_folder.sh b/scripts/function/folder/copy_folder.sh index ddece96..af567d7 100755 --- a/scripts/function/folder/copy_folder.sh +++ b/scripts/function/folder/copy_folder.sh @@ -11,7 +11,7 @@ copyFolder() if [[ "$save_dir" == "$containers_dir"* || "$save_dir" == "${LP_CONTAINERS_DIR:-/libreportal-containers}"/* ]]; then if [[ "$folder" == "$containers_dir"* || "$folder" == "${LP_CONTAINERS_DIR:-/libreportal-containers}"/* ]]; then # container -> container: same owner (dockerinstall), a plain cp works. - local result=$(runFileOp cp -rf "$folder" "$save_dir") + local result; result=$(runFileOp cp -rf "$folder" "$save_dir") else # Cross-owner: a manager-owned source (e.g. the install dir) into the # container-owned destination. Under rootless a single cp can't read @@ -24,7 +24,7 @@ copyFolder() | runFileOp tar -C "$save_dir" -xf - ) fi else - local result=$(runInstallOp cp -rf "$folder" "$save_dir") + local result; result=$(runInstallOp cp -rf "$folder" "$save_dir") fi checkSuccess "Copying $folder_name to $save_dir" } diff --git a/scripts/function/folder/copy_folders.sh b/scripts/function/folder/copy_folders.sh index c29f304..1829c1b 100755 --- a/scripts/function/folder/copy_folders.sh +++ b/scripts/function/folder/copy_folders.sh @@ -17,7 +17,7 @@ copyFolders() for subdir in "${subdirs[@]}"; do local subdir_name=$(basename "$subdir") - local result=$($op cp -rf "$subdir" "$save_dir") + local result; result=$($op cp -rf "$subdir" "$save_dir") checkSuccess "Copying $subdir_name to $save_dir" done } diff --git a/scripts/function/folder/create_folder.sh b/scripts/function/folder/create_folder.sh index 746e2a2..6acd57b 100755 --- a/scripts/function/folder/create_folder.sh +++ b/scripts/function/folder/create_folder.sh @@ -16,7 +16,7 @@ createFolders() # createTouch; the $user_name hint is advisory for these paths. if [[ "$clean_dir" == "$containers_dir"* || "$clean_dir" == "${LP_CONTAINERS_DIR:-/libreportal-containers}"/* ]]; then if [ ! -d "$dir_path" ]; then - local result=$(runFileOp mkdir -p "$dir_path") + local result; result=$(runFileOp mkdir -p "$dir_path") [ "$silent_flag" == "loud" ] && checkSuccess "Creating $folder_name directory" elif [ "$silent_flag" == "loud" ]; then isNotice "$folder_name directory already exists" @@ -27,7 +27,7 @@ createFolders() # Non-container path = manager-owned control plane -> create AS the # manager (runInstallOp); no root, no chown. if [ ! -d "$dir_path" ]; then - local result=$(runInstallOp mkdir -p "$dir_path") + local result; result=$(runInstallOp mkdir -p "$dir_path") [ "$silent_flag" == "loud" ] && checkSuccess "Creating $folder_name directory" elif [ "$silent_flag" == "loud" ]; then isNotice "$folder_name directory already exists" diff --git a/scripts/function/permission/before_start.sh b/scripts/function/permission/before_start.sh index 8f06044..bf7bac9 100755 --- a/scripts/function/permission/before_start.sh +++ b/scripts/function/permission/before_start.sh @@ -23,12 +23,12 @@ fixPermissionsBeforeStart() # Traefik if [ -f "${containers_dir}traefik/etc/certs/acme.json" ]; then runOwnership app-file traefik etc/certs/acme.json - local result=$(runFileOp chmod 600 "${containers_dir}traefik/etc/certs/acme.json") + local result; result=$(runFileOp chmod 600 "${containers_dir}traefik/etc/certs/acme.json") checkSuccess "Set permissions to acme.json file for traefik" fi if [ -f "${containers_dir}traefik/etc/traefik.yml" ]; then runOwnership app-file traefik etc/traefik.yml - local result=$(runFileOp chmod 600 "${containers_dir}traefik/etc/traefik.yml") + local result; result=$(runFileOp chmod 600 "${containers_dir}traefik/etc/traefik.yml") checkSuccess "Set permissions to traefik.yml file for traefik" fi } diff --git a/scripts/function/permission/config.sh b/scripts/function/permission/config.sh index 1d65ae5..b0ea1dd 100755 --- a/scripts/function/permission/config.sh +++ b/scripts/function/permission/config.sh @@ -6,7 +6,7 @@ fixConfigPermissions() local app_name="$2" local config_file="$containers_dir$app_name/$app_name.config" - local result=$(runFileOp chmod g+rw $config_file) + local result; result=$(runFileOp chmod g+rw $config_file) if [ "$silent_flag" == "loud" ]; then isNotice "Updating config read permissions for LibrePortal" fi diff --git a/scripts/function/permission/ownership/file.sh b/scripts/function/permission/ownership/file.sh index 22e5455..55c94cf 100755 --- a/scripts/function/permission/ownership/file.sh +++ b/scripts/function/permission/ownership/file.sh @@ -8,6 +8,6 @@ updateFileOwnership() local user_name_1="$2" local user_name_2="$3" - local result=$(runSystem chown $user_name_1:$user_name_2 "$file") + local result; result=$(runSystem chown $user_name_1:$user_name_2 "$file") checkSuccess "Updating $file_name with $user_name ownership" } diff --git a/scripts/function/permission/ownership/folder_group.sh b/scripts/function/permission/ownership/folder_group.sh index ff8b2d4..8e366fb 100755 --- a/scripts/function/permission/ownership/folder_group.sh +++ b/scripts/function/permission/ownership/folder_group.sh @@ -23,7 +23,7 @@ changeUserGroupOnFolder() isError "Directory '$directory' not found." fi - local result=$(find "$directory" -user "$source_user" -exec chown "$target_user" {} +) + local result; result=$(find "$directory" -user "$source_user" -exec chown "$target_user" {} +) checkSuccess "Updating $directory user to be $target_user... This may take a while..." # Check if the source group exists @@ -38,6 +38,6 @@ changeUserGroupOnFolder() isError "Unable to determine target group for user '$target_user'." fi - local result=$(find "$directory" -group "$source_group" -exec chgrp "$target_group" {} +) + local result; result=$(find "$directory" -group "$source_group" -exec chgrp "$target_group" {} +) checkSuccess "Updating $directory group to be $target_user... This may take a while..." } diff --git a/scripts/function/permission/ownership/root_file.sh b/scripts/function/permission/ownership/root_file.sh index aa54ef7..c8803d4 100755 --- a/scripts/function/permission/ownership/root_file.sh +++ b/scripts/function/permission/ownership/root_file.sh @@ -14,7 +14,7 @@ changeRootOwnedFile() isNotice "File '$file_full' does not exist." fi else - local result=$(runSystem chown "$user_name:$user_name" "$file_full") + local result; result=$(runSystem chown "$user_name:$user_name" "$file_full") checkSuccess "Updating $file_name to be owned by $user_name" fi } diff --git a/scripts/function/run/reinstall_libreportal.sh b/scripts/function/run/reinstall_libreportal.sh index 94a1d22..e7bf678 100755 --- a/scripts/function/run/reinstall_libreportal.sh +++ b/scripts/function/run/reinstall_libreportal.sh @@ -29,9 +29,9 @@ runReinstall() gitCheckGitDetails; # Reset git - local result=$(runAsManager rm -rf $script_dir) + local result; result=$(runAsManager rm -rf $script_dir) checkSuccess "Deleting all Git files" - local result=$(createFolders "loud" $sudo_user_name "$script_dir") + local result; result=$(createFolders "loud" $sudo_user_name "$script_dir") checkSuccess "Create the directory if it doesn't exist" # Validate non-empty input diff --git a/scripts/install/install_certificate.sh b/scripts/install/install_certificate.sh index 0deb964..2027ae4 100755 --- a/scripts/install/install_certificate.sh +++ b/scripts/install/install_certificate.sh @@ -30,7 +30,7 @@ installSSLCertificate() # Function to generate SSL certificate for a given domain generateSSLCertificate() { local domain_value="$1" - local result=$(cd $ssl_dir && openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -subj "/CN=$domain_value" -keyout "$ssl_dir/$domain_value.key" -out "$ssl_dir/$domain_value.crt" > /dev/null 2>&1) + local result; result=$(cd $ssl_dir && openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -subj "/CN=$domain_value" -keyout "$ssl_dir/$domain_value.key" -out "$ssl_dir/$domain_value.crt" > /dev/null 2>&1) checkSuccess "SSL Generation for $domain_value" } diff --git a/scripts/install/install_swapfile.sh b/scripts/install/install_swapfile.sh index 177f3cb..60096fe 100755 --- a/scripts/install/install_swapfile.sh +++ b/scripts/install/install_swapfile.sh @@ -7,20 +7,20 @@ installSwapfile() isHeader "Increasing Swapfile" ISSWAP=$( (runAsManager swapoff /swapfile) 2>&1 ) if [[ "$ISSWAP" != *"No such file or directory"* ]]; then - local result=$(runAsManager swapoff /swapfile) + local result; result=$(runAsManager swapoff /swapfile) isSuccessful "Turning off /swapfile (if needed)" fi - local result=$(runAsManager fallocate -l $CFG_SWAPFILE_SIZE /swapfile) + local result; result=$(runAsManager fallocate -l $CFG_SWAPFILE_SIZE /swapfile) checkSuccess "Allocating $CFG_SWAPFILE_SIZE to the /swapfile" - local result=$(sudo chmod 0600 /swapfile) + local result; result=$(sudo chmod 0600 /swapfile) checkSuccess "Adding permissions to the /swapfile" - local result=$(runAsManager mkswap /swapfile) + local result; result=$(runAsManager mkswap /swapfile) checkSuccess "Swapping to the new /swapfile" - local result=$(runAsManager swapon /swapfile) + local result; result=$(runAsManager swapon /swapfile) checkSuccess "Enabling the new /swapfile" fi fi diff --git a/scripts/install/install_ufw.sh b/scripts/install/install_ufw.sh index b8ec9de..c455a3d 100755 --- a/scripts/install/install_ufw.sh +++ b/scripts/install/install_ufw.sh @@ -12,7 +12,7 @@ installUFW() echo "---- $menu_number. Installing using linux package installer" echo "" - local result=$(yes | runSystem apt-get install ufw ) + local result; result=$(yes | runSystem apt-get install ufw ) checkSuccess "Installing UFW package" # ((menu_number++)) @@ -27,9 +27,9 @@ installUFW() # ssh_port=${ssh_port:-22} # Default to 22 if not found # fi - # local result=$(runSystem ufw allow $ssh_port) + # local result; result=$(runSystem ufw allow $ssh_port) # checkSuccess "Enabling Port $ssh_port through the firewall" - # local result=$(runSystem ufw allow ssh) + # local result; result=$(runSystem ufw allow ssh) # checkSuccess "Enabling SSH through the firewall" # while true; do @@ -42,13 +42,13 @@ installUFW() # done # if [[ "$UFWSSH" == [nN] ]]; then - # local result=$(runSystem ufw deny $ssh_port) + # local result; result=$(runSystem ufw deny $ssh_port) # checkSuccess "Blocking Port $ssh_port through the firewall" - # local result=$(runSystem ufw deny ssh) + # local result; result=$(runSystem ufw deny ssh) # checkSuccess "Blocking SSH through the firewall" # fi - local result=$(runSystem ufw --force enable) + local result; result=$(runSystem ufw --force enable) checkSuccess "Enabling UFW Firewall" ((menu_number++)) @@ -56,7 +56,7 @@ installUFW() echo "---- $menu_number. Changing logging options" echo "" - local result=$(yes | runSystem ufw logging $CFG_UFW_LOGGING) + local result; result=$(yes | runSystem ufw logging $CFG_UFW_LOGGING) checkSuccess "Disabling UFW Firewall Logging" isSuccessful "UFW Firewall has been installed, you can use ufw status to see the status" diff --git a/scripts/install/install_ufwd.sh b/scripts/install/install_ufwd.sh index facf2be..516dced 100755 --- a/scripts/install/install_ufwd.sh +++ b/scripts/install/install_ufwd.sh @@ -14,19 +14,19 @@ installUFWDocker() local ufwpath="/usr/local/bin/ufw-docker" - local result=$(sudo wget -O $ufwpath https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker > /dev/null 2>&1) + local result; result=$(sudo wget -O $ufwpath https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker > /dev/null 2>&1) checkSuccess "Downloading UFW Docker installation files" - local result=$(sudo rm -rf $script_dir/wget-log) + local result; result=$(sudo rm -rf $script_dir/wget-log) checkSuccess "Setting permissions for install files" - local result=$(sudo chmod +x $ufwpath) + local result; result=$(sudo chmod +x $ufwpath) checkSuccess "Setting permissions for install files" - local result=$(runSystem ufw-docker install > /dev/null 2>&1) + local result; result=$(runSystem ufw-docker install > /dev/null 2>&1) checkSuccess "Installing UFW Docker" - local result=$(runSystem systemctl restart ufw) + local result; result=$(runSystem systemctl restart ufw) checkSuccess "Restarting UFW Firewall service" isSuccessful "UFW-Docker has been installed, you can use ufw-docker to see the available commands" diff --git a/scripts/network/firewall/firewall_initial_setup.sh b/scripts/network/firewall/firewall_initial_setup.sh index 7895e25..3dc51cd 100755 --- a/scripts/network/firewall/firewall_initial_setup.sh +++ b/scripts/network/firewall/firewall_initial_setup.sh @@ -15,7 +15,7 @@ firewallInitialSetup() break fi if [[ "$firewallallowport_port" =~ ^[0-9]+$ && $firewallallowport_port -ge 1 && $firewallallowport_port -le 65535 ]]; then - local result=$(runSystem ufw allow "$firewallallowport_port") + local result; result=$(runSystem ufw allow "$firewallallowport_port") checkSuccess "Opening port $firewallallowport_port in the UFW Firewall" break fi @@ -36,7 +36,7 @@ firewallInitialSetup() break fi if [[ "$firewallblockport_port" =~ ^[0-9]+$ && $firewallblockport_port -ge 1 && $firewallblockport_port -le 65535 ]]; then - local result=$(runSystem ufw deny "$firewallblockport_port") + local result; result=$(runSystem ufw deny "$firewallblockport_port") checkSuccess "Blocking port $firewallblockport_port in the UFW Firewall" break fi @@ -49,9 +49,9 @@ firewallInitialSetup() echo "" echo "---- Block port 22 (SSH) :" echo "" - local result=$(runSystem ufw deny 22) + local result; result=$(runSystem ufw deny 22) checkSuccess "Disabling Port 22 through the firewall" - local result=$(runSystem ufw deny ssh) + local result; result=$(runSystem ufw deny ssh) checkSuccess "Disabling SSH through the firewall" fi @@ -60,9 +60,9 @@ firewallInitialSetup() echo "" echo "---- Allow port 22 (SSH) :" echo "" - local result=$(runSystem ufw allow 22) + local result; result=$(runSystem ufw allow 22) checkSuccess "Allowing Port 22 through the firewall" - local result=$(runSystem ufw allow ssh) + local result; result=$(runSystem ufw allow ssh) checkSuccess "Allowing SSH through the firewall" fi @@ -75,7 +75,7 @@ firewallInitialSetup() case "$CFG_UFW_LOGGING" in on|off|low|medium|high|full) # Valid logging type - local result=$(yes | runSystem ufw logging $CFG_UFW_LOGGING) + local result; result=$(yes | runSystem ufw logging $CFG_UFW_LOGGING) checkSuccess "Updating UFW Firewall Logging to $CFG_UFW_LOGGING" ;; *) diff --git a/scripts/network/firewall/rules/firewall_clear_rules.sh b/scripts/network/firewall/rules/firewall_clear_rules.sh index d2bb5cc..ed8d6ff 100755 --- a/scripts/network/firewall/rules/firewall_clear_rules.sh +++ b/scripts/network/firewall/rules/firewall_clear_rules.sh @@ -16,7 +16,7 @@ firewallClearLibrePortalRules() # Only clear LibrePortal app rules (not system rules) if [[ -d "$containers_dir/$container" ]]; then - local result=$(runSystem ufw-docker delete "$action" "$container" "$port_spec" 2>&1) + local result; result=$(runSystem ufw-docker delete "$action" "$container" "$port_spec" 2>&1) if [[ $? -eq 0 ]]; then ((total_cleared++)) isSuccessful "Cleared: $action $container $port_spec" @@ -40,7 +40,7 @@ firewallClearLibrePortalRules() local action="${BASH_REMATCH[2]}" local port_spec="${BASH_REMATCH[3]}" - local result=$(runSystem ufw --force delete "$rule_num" 2>&1) + local result; result=$(runSystem ufw --force delete "$rule_num" 2>&1) if [[ $? -eq 0 ]]; then ((total_cleared++)) isNotice "Cleared rule #$rule_num: $action $port_spec" diff --git a/scripts/network/ip/ip_remove_from_db.sh b/scripts/network/ip/ip_remove_from_db.sh index a44430d..12131d9 100755 --- a/scripts/network/ip/ip_remove_from_db.sh +++ b/scripts/network/ip/ip_remove_from_db.sh @@ -8,7 +8,7 @@ ipRemoveFromDatabase() if [[ -z "$app_name" ]]; then isError "App name is required for IP removal" else - local result=$(sqlite3 "$docker_dir/$db_file" "DELETE FROM network_resources WHERE app_name = '$app_name' AND resource_type = 'ip';" 2>/dev/null) + local result; result=$(sqlite3 "$docker_dir/$db_file" "DELETE FROM network_resources WHERE app_name = '$app_name' AND resource_type = 'ip';" 2>/dev/null) if [[ $? -eq 0 ]]; then isSuccessful "Removed IP allocations for $app_name" else diff --git a/scripts/network/monitoring/monitoring.sh b/scripts/network/monitoring/monitoring.sh index 65127b3..c5ae46a 100644 --- a/scripts/network/monitoring/monitoring.sh +++ b/scripts/network/monitoring/monitoring.sh @@ -140,7 +140,7 @@ monitoringRefreshPrometheus() runFileOp chmod -R a+rX "$scrape_dir" 2>/dev/null if runFileOp docker ps --format '{{.Names}}' 2>/dev/null | grep -q '^prometheus-service$'; then - local result=$(runFileOp docker kill --signal=HUP prometheus-service 2>&1) + local result; result=$(runFileOp docker kill --signal=HUP prometheus-service 2>&1) checkSuccess "Reloaded Prometheus ($count monitored app(s))" else isNotice "Prometheus container not running — scrape.d updated, applied on next start ($count app(s))." @@ -208,7 +208,7 @@ EOF runFileOp chmod -R a+rX "$prov" 2>/dev/null if runFileOp docker ps --format '{{.Names}}' 2>/dev/null | grep -q '^grafana-service$'; then - local result=$(runFileOp docker restart grafana-service 2>&1) + local result; result=$(runFileOp docker restart grafana-service 2>&1) checkSuccess "Restarted Grafana ($count dashboard(s) provisioned)" else isNotice "Grafana container not running — provisioning updated, applied on next start ($count dashboard(s))." diff --git a/scripts/network/ports/core/port_get_service_ports.sh b/scripts/network/ports/core/port_get_service_ports.sh index ef68375..60bc14c 100755 --- a/scripts/network/ports/core/port_get_service_ports.sh +++ b/scripts/network/ports/core/port_get_service_ports.sh @@ -8,7 +8,7 @@ portGetServicePorts() local sql="SELECT resource_value FROM network_resources WHERE app_name='$app_name' AND resource_type='port' AND service_name='$service_name' AND status='active';" - local result=$(sqlite3 "$docker_dir/$db_file" "$sql" 2>/dev/null) + local result; result=$(sqlite3 "$docker_dir/$db_file" "$sql" 2>/dev/null) service_ports="$result" } diff --git a/scripts/network/ports/core/port_remove_from_db.sh b/scripts/network/ports/core/port_remove_from_db.sh index 6f9a807..eb46424 100755 --- a/scripts/network/ports/core/port_remove_from_db.sh +++ b/scripts/network/ports/core/port_remove_from_db.sh @@ -9,7 +9,7 @@ portsRemoveFromDatabase() isError "App name is required for port removal" else # Delete port allocations for this app - local result=$(sqlite3 "$docker_dir/$db_file" "DELETE FROM network_resources WHERE app_name = '$app_name' AND resource_type = 'port';" 2>/dev/null) + local result; result=$(sqlite3 "$docker_dir/$db_file" "DELETE FROM network_resources WHERE app_name = '$app_name' AND resource_type = 'port';" 2>/dev/null) if [[ $? -eq 0 ]]; then isSuccessful "Removed port allocations for $app_name" diff --git a/scripts/network/traefik/traefik_login_credentials.sh b/scripts/network/traefik/traefik_login_credentials.sh index 0096e22..d1800b7 100755 --- a/scripts/network/traefik/traefik_login_credentials.sh +++ b/scripts/network/traefik/traefik_login_credentials.sh @@ -16,9 +16,9 @@ traefikSetupLoginCredentials() # Setup BasicAuth credentials local login_credentials=$(htpasswd -Bbn "$CFG_TRAEFIK_USER" "$CFG_TRAEFIK_PASS") - local result=$(runFileOp sed -i '/#protection credentials/d' "$protectionauth_file") + local result; result=$(runFileOp sed -i '/#protection credentials/d' "$protectionauth_file") checkSuccess "Delete the line containing protection credentials" - local result=$(runFileOp sed -i "/users:/a\\ - '$login_credentials' #protection credentials" "$protectionauth_file") + local result; result=$(runFileOp sed -i "/users:/a\\ - '$login_credentials' #protection credentials" "$protectionauth_file") checkSuccess "Add the new line with new protection credentials" fi } \ No newline at end of file diff --git a/scripts/os/install/ubuntu.sh b/scripts/os/install/ubuntu.sh index 8a9338d..5de8c05 100755 --- a/scripts/os/install/ubuntu.sh +++ b/scripts/os/install/ubuntu.sh @@ -11,13 +11,13 @@ installDebianUbuntu() export DEBIAN_FRONTEND="noninteractive" fi - local result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt update -qq 2>&1 && DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt install sudo -yqq 2>&1 && apt-get autoclean 2>&1) + local result; result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt update -qq 2>&1 && DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt install sudo -yqq 2>&1 && apt-get autoclean 2>&1) checkSuccess "Updating System Operating system." - local result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 runSystem apt update -qq 2>&1) + local result; result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 runSystem apt update -qq 2>&1) checkSuccess "Running application update" - local result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 sudo $installed_apps -yqq 2>&1) + local result; result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 sudo $installed_apps -yqq 2>&1) checkSuccess "Installing system applications" else isNotice "System Updates already ran within the last ${CFG_UPDATER_CHECK} minutes, skipping..." diff --git a/scripts/update/backup/install_git_backup.sh b/scripts/update/backup/install_git_backup.sh index 5bfba8c..7aeb45f 100755 --- a/scripts/update/backup/install_git_backup.sh +++ b/scripts/update/backup/install_git_backup.sh @@ -9,8 +9,8 @@ gitCleanInstallBackups() # 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 {} +) + local result; 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) + local result; 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." } \ No newline at end of file diff --git a/scripts/update/backup/reset_git_backup.sh b/scripts/update/backup/reset_git_backup.sh index e47fbb8..ac6797e 100755 --- a/scripts/update/backup/reset_git_backup.sh +++ b/scripts/update/backup/reset_git_backup.sh @@ -16,23 +16,23 @@ gitPerformUpdate() update_done=false if [ ! -d "$backup_install_dir/$backupFolder" ]; then - local result=$(createFolders "loud" $sudo_user_name "$backup_install_dir/$backupFolder") + local result; result=$(createFolders "loud" $sudo_user_name "$backup_install_dir/$backupFolder") checkSuccess "Create the backup folder" fi - local result=$(cd $backup_install_dir) + local result; result=$(cd $backup_install_dir) checkSuccess "Going into the backup install folder" - local result=$(copyFolder "$configs_dir" "$backup_install_dir/$backupFolder" "$sudo_user_name") + local result; result=$(copyFolder "$configs_dir" "$backup_install_dir/$backupFolder" "$sudo_user_name") checkSuccess "Copy the configs to the backup folder" - local result=$(copyFolder "$logs_dir" "$backup_install_dir/$backupFolder" "$sudo_user_name") + local result; result=$(copyFolder "$logs_dir" "$backup_install_dir/$backupFolder" "$sudo_user_name") checkSuccess "Copy the logs to the backup folder" gitReset; - local result=$(copyFolders "$backup_install_dir/$backupFolder/" "$docker_dir" "$sudo_user_name") + local result; result=$(copyFolders "$backup_install_dir/$backupFolder/" "$docker_dir" "$sudo_user_name") checkSuccess "Copy the backed up folders back into the installation directory" - local result=$(runAsManager zip -r "$backup_install_dir/$backupFolder.zip" "$backup_install_dir/$backupFolder") + local result; result=$(runAsManager zip -r "$backup_install_dir/$backupFolder.zip" "$backup_install_dir/$backupFolder") checkSuccess "Zipping up the the backup folder for safe keeping" gitCleanInstallBackups; diff --git a/scripts/update/backup/use_git_backup.sh b/scripts/update/backup/use_git_backup.sh index 31925bf..c0056ed 100755 --- a/scripts/update/backup/use_git_backup.sh +++ b/scripts/update/backup/use_git_backup.sh @@ -7,12 +7,12 @@ gitUseExistingBackup() local backup_file_without_zip=$(basename "$backup_file" .zip) update_done=false - local result=$(runInstallOp unzip -o $backup_file -d $backup_install_dir) + local result; result=$(runInstallOp unzip -o $backup_file -d $backup_install_dir) checkSuccess "Copy the configs to the backup folder" gitReset; - local result=$(copyFolders "$backup_install_dir/$backup_file_without_zip/" "$docker_dir" "$sudo_user_name") + local result; 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; diff --git a/scripts/update/git/reset_git.sh b/scripts/update/git/reset_git.sh index e890954..3cc0ea3 100755 --- a/scripts/update/git/reset_git.sh +++ b/scripts/update/git/reset_git.sh @@ -27,7 +27,7 @@ gitReset() runInstallOp chown -R $sudo_user_name:$sudo_user_name "$script_dir" } - local result=$(runAsManager rm -rf $script_dir) + local result; result=$(runAsManager rm -rf $script_dir) checkSuccess "Deleting all Git files" cd $docker_dir diff --git a/scripts/update/git/untrack_files.sh b/scripts/update/git/untrack_files.sh index b311c5e..d7c29cb 100755 --- a/scripts/update/git/untrack_files.sh +++ b/scripts/update/git/untrack_files.sh @@ -4,8 +4,8 @@ gitUntrackFiles() { # Fixing the issue where the git does not use the .gitignore cd $script_dir - local result=$(runAsManager git config core.fileMode false) + local result; result=$(runAsManager git config core.fileMode false) checkSuccess "Removing configs and logs from git for git changes" - local result=$(runAsManager git commit -m "Stop tracking ignored files") + local result; result=$(runAsManager git commit -m "Stop tracking ignored files") checkSuccess "Removing tracking ignored files" } diff --git a/scripts/webui/data/logs/webui_app_logs.sh b/scripts/webui/data/logs/webui_app_logs.sh index 6c364f2..5dd0b60 100755 --- a/scripts/webui/data/logs/webui_app_logs.sh +++ b/scripts/webui/data/logs/webui_app_logs.sh @@ -15,7 +15,7 @@ webuiGenerateAppLogs() # Fast approach: Scan containers directory directly if [ -d "$containers_dir" ]; then runFileOp find "$containers_dir" -maxdepth 1 -type d -not -path "$containers_dir" | while read -r dir; do - local result=$(basename "$dir") + local result; result=$(basename "$dir") local app_name="$result" total_apps=$((total_apps + 1)) @@ -24,7 +24,7 @@ webuiGenerateAppLogs() installed_count=$((installed_count + 1)) # Create log file for this app - local result=$(webuiUpdateAppLog "$app_name" install) + local result; result=$(webuiUpdateAppLog "$app_name" install) checkSuccess "Created log file for: $app_name" fi done diff --git a/scripts/webui/data/logs/webui_logs_folders.sh b/scripts/webui/data/logs/webui_logs_folders.sh index 12cbb9e..8cda4c1 100755 --- a/scripts/webui/data/logs/webui_logs_folders.sh +++ b/scripts/webui/data/logs/webui_logs_folders.sh @@ -7,7 +7,7 @@ webuiCreateLogsFolders() local log_dir="${containers_dir}libreportal/frontend/logs" local apps_dir="${log_dir}/apps" if [ ! -d "$apps_dir" ]; then - local result=$(createFolders "loud" $sudo_user_name $log_dir $apps_dir) + local result; result=$(createFolders "loud" $sudo_user_name $log_dir $apps_dir) checkSuccess "Creating frontend logs folder" fi } diff --git a/scripts/webui/data/tasks/webui_task_files.sh b/scripts/webui/data/tasks/webui_task_files.sh index a2ffb43..bf3f7c1 100755 --- a/scripts/webui/data/tasks/webui_task_files.sh +++ b/scripts/webui/data/tasks/webui_task_files.sh @@ -8,7 +8,7 @@ webuiEnsureTaskFiles() { # Create tasks directory if it doesn't exist if [ ! -d "$task_dir" ]; then - local result=$(createFolders "quiet" $docker_install_user "$task_dir") + local result; result=$(createFolders "quiet" $docker_install_user "$task_dir") checkSuccess "Created tasks directory..." fi @@ -16,7 +16,7 @@ webuiEnsureTaskFiles() { if [ ! -f "$task_dir/queue.json" ]; then echo " Creating queue.json" createTouch "$task_dir/queue.json" $docker_install_user "silent" - local result=$(echo "[]" | runFileWrite "$task_dir/queue.json" > /dev/null) + local result; result=$(echo "[]" | runFileWrite "$task_dir/queue.json" > /dev/null) checkSuccess "Created queue.json..." else echo " queue.json exists" @@ -26,7 +26,7 @@ webuiEnsureTaskFiles() { if [ ! -f "$task_dir/current.json" ]; then echo " Creating current.json" createTouch "$task_dir/current.json" $docker_install_user "silent" - local result=$(echo '{}' | runFileWrite "$task_dir/current.json" > /dev/null) + local result; result=$(echo '{}' | runFileWrite "$task_dir/current.json" > /dev/null) checkSuccess "Created current.json..." else echo " current.json exists" diff --git a/scripts/webui/data/utils/webui_app_log.sh b/scripts/webui/data/utils/webui_app_log.sh index ed0682f..c1cc8e7 100755 --- a/scripts/webui/data/utils/webui_app_log.sh +++ b/scripts/webui/data/utils/webui_app_log.sh @@ -9,7 +9,7 @@ webuiUpdateAppLog() local log_dir="${containers_dir}libreportal/frontend/logs" local apps_dir="${log_dir}/apps" if [ ! -d "$apps_dir" ]; then - local result=$(createFolders "loud" $sudo_user_name $log_dir $apps_dir) + local result; result=$(createFolders "loud" $sudo_user_name $log_dir $apps_dir) checkSuccess "Creating frontend logs folder" fi @@ -27,7 +27,7 @@ webuiUpdateAppLog() # interactively for write-protected files, which hangs an unattended # deploy (the uninstall phase of a 'full' redeploy). if [ -f "${log_file}" ]; then - local result=$(runFileOp rm -f "${log_file}") + local result; result=$(runFileOp rm -f "${log_file}") checkSuccess "Removed ${app_name}.log" fi fi diff --git a/scripts/webui/webui_install_image.sh b/scripts/webui/webui_install_image.sh index f4c23f1..3f415f8 100755 --- a/scripts/webui/webui_install_image.sh +++ b/scripts/webui/webui_install_image.sh @@ -13,7 +13,7 @@ installLibrePortalImageWebUI() # Establish traversal + containers-root ownership FIRST. fixFolderPermissions - local result=$(copyFolder "$install_containers_dir/libreportal" "$containers_dir" "$sudo_user_name") + local result; result=$(copyFolder "$install_containers_dir/libreportal" "$containers_dir" "$sudo_user_name") checkSuccess "Copy the LibrePortal to the containers folder" reconcileWebuiDirOwnership @@ -34,6 +34,6 @@ installLibrePortalImageWebUI() fi isNotice "Building libreportal-service image, this may take a while..." - local result=$(runFileOp docker build -t libreportal-service -f $containers_dir/libreportal/Dockerfile $containers_dir/libreportal >/dev/null 2>&1) + local result; result=$(runFileOp docker build -t libreportal-service -f $containers_dir/libreportal/Dockerfile $containers_dir/libreportal >/dev/null 2>&1) checkSuccess "Built LibrePortal WebUI Docker image" } \ No newline at end of file diff --git a/scripts/webui/webui_updater.sh b/scripts/webui/webui_updater.sh index 785549b..f1ad245 100755 --- a/scripts/webui/webui_updater.sh +++ b/scripts/webui/webui_updater.sh @@ -27,7 +27,7 @@ webuiLibrePortalUpdate() { isHeader "LibrePortal WebUI Updater" # Check for update lock file first - local result=$(webuiCheckUpdateLock) + local result; result=$(webuiCheckUpdateLock) checkSuccess "Checked for update lock file." if [[ "$lock_file_found" == "true" ]]; then @@ -38,35 +38,35 @@ webuiLibrePortalUpdate() { echo "" else # Create update lock file - local result=$(webuiCreateUpdateLock) + local result; result=$(webuiCreateUpdateLock) checkSuccess "Created update lock file..." # Update system information first - local result=$(webuiSystemUpdate) + local result; result=$(webuiSystemUpdate) checkSuccess "Updated system information..." # Ensure task system files exist (failsafe) - local result=$(webuiEnsureTaskFiles) + local result; result=$(webuiEnsureTaskFiles) checkSuccess "Ensured task system files exist..." # Generate system configuration - local result=$(webuiGenerateSystemConfigs) + local result; result=$(webuiGenerateSystemConfigs) checkSuccess "Generated system configurations..." # Generate categories - local result=$(webuiCreateCategories $containers_dir/libreportal/frontend/data) + local result; result=$(webuiCreateCategories $containers_dir/libreportal/frontend/data) checkSuccess "Generated app and config categories..." # Generate LibrePortal app configuration - local result=$(webuiGenerateLibrePortalConfig) + local result; result=$(webuiGenerateLibrePortalConfig) checkSuccess "Generated LibrePortal app configuration..." # Generate apps-services.json - local result=$(webuiGenerateAppsServicesConfig) + local result; result=$(webuiGenerateAppsServicesConfig) checkSuccess "Generated apps-services.json..." # Generate apps-tools.json (aggregate of per-app *.tools.json) - local result=$(webuiGenerateAppsToolsConfig) + local result; result=$(webuiGenerateAppsToolsConfig) checkSuccess "Generated apps-tools.json..." # Per-app routine refresh hooks. An installed app may define @@ -81,38 +81,38 @@ webuiLibrePortalUpdate() { [[ -f "${containers_dir}${_app}/docker-compose.yml" ]] || continue _hook="appWebuiRefresh_${_app}" declare -F "$_hook" >/dev/null 2>&1 || continue - local result=$($_hook) + local result; result=$($_hook) checkSuccess "Refreshed ${_app} WebUI data..." done # Generate Backup locations / snapshots / engines / dashboards - local result=$(webuiGenerateBackupLocations && webuiGenerateBackupDashboard && webuiGenerateBackupSnapshots all && webuiGenerateBackupAppStatus && webuiGenerateBackupEngines && webuiGenerateBackupSchema && webuiGenerateBackupPasswords && webuiGenerateBackupMigrate) + local result; result=$(webuiGenerateBackupLocations && webuiGenerateBackupDashboard && webuiGenerateBackupSnapshots all && webuiGenerateBackupAppStatus && webuiGenerateBackupEngines && webuiGenerateBackupSchema && webuiGenerateBackupPasswords && webuiGenerateBackupMigrate) checkSuccess "Refreshed backup dashboard data..." # Peers (named other LibrePortal instances) — small, cheap; lives # in its own data/peers/generated/peers.json file consumed by # /peers and overlay-read by the migrate tab. - local result=$(webuiGeneratePeers) + local result; result=$(webuiGeneratePeers) checkSuccess "Refreshed peers data..." # SSH access snapshot (authorized keys + password-login state) - local result=$(webuiGenerateSshAccess) + local result; result=$(webuiGenerateSshAccess) checkSuccess "Refreshed SSH access data..." # Sync app icons - local result=$(webuiSyncAppIcons) + local result; result=$(webuiSyncAppIcons) checkSuccess "Synced app icons..." # Generate log files for installed apps - local result=$(webuiGenerateAppLogs) + local result; result=$(webuiGenerateAppLogs) checkSuccess "Generated log files for installed apps..." # Remove update lock file - local result=$(webuiRemoveUpdateLock) + local result; result=$(webuiRemoveUpdateLock) checkSuccess "Removed update lock file..." # Remove setup lock file - local result=$(webuiRemoveSetupLock) + local result; result=$(webuiRemoveSetupLock) checkSuccess "Removed setup lock file..." isSuccessful "WebUI update completed successfully!"