#!/bin/bash trap exitScript SIGINT # Directories are contained in init.sh # Define text colors GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[0;33m' BLUE='\033[1;34m' PINK='\033[0;35m' CYAN='\033[0;36m' BOLD='\033[1m' DIM='\033[2m' NC='\033[0m' # No Color # Date/Time backupDate=$(date +'%F') backupFolder="backup_$(date +"%Y%m%d%H%M%S")" current_date=$(date +%Y-%m-%d) current_time=$(date +%H:%M:%S) # Domain/Network # Try to get public IP, fallback to local IP if all fail if command -v dig >/dev/null 2>&1; then public_ip_v4=$(dig +short myip.opendns.com @resolver1.opendns.com 2>/dev/null) fi # Fallback to local IP if dig failed or returned empty if [[ -z "$public_ip_v4" ]]; then public_ip_v4=$(hostname -I | awk '{print $1}' 2>/dev/null) fi # Final fallback to localhost if [[ -z "$public_ip_v4" ]]; then public_ip_v4="localhost" fi server_nic="$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1)" default_subnet="10.100.0" # Files docker_rooted_socket="/var/run/docker.sock" swap_file=/swapfile # Rootless sysctl settings + the "rootless configured" marker. MUST live under # /etc/sysctl.d/ — `sysctl --system` only reads there (+ /etc/sysctl.conf), NOT # the old non-standard /etc/sysctl/ path, so settings written elsewhere never # persist across reboot. sysctl="/etc/sysctl.d/99-libreportal-rootless.conf" # Rootless Docker's installer aborts outright when the legacy ip_tables modules # aren't loaded. Ubuntu 24.04/26.04 don't autoload them on a fresh box, so we # both modprobe them now and persist them here for subsequent boots. modules_load="/etc/modules-load.d/libreportal-rootless.conf" # Env vars that must survive the privilege drop into $docker_install_user for the # backup engines to open their repository (repo URI + passphrase + ssh transport). # Named explicitly rather than relying on `sudo -E`: sudo-rs, the default on # Ubuntu 25.10+ (incl. 26.04), does not implement bare -E — it warns and runs the # command with the environment dropped. Keep in sync with the fallback list in # scripts/docker/command/run_privileged.sh (init.sh sources that file directly, # without this one). backup_env_preserve="BORG_PASSPHRASE,BORG_REPO,BORG_RSH,KOPIA_CHECK_FOR_UPDATES,KOPIA_CONFIG_PATH,KOPIA_PASSWORD,RESTIC_PASSWORD,RESTIC_REPOSITORY,RESTIC_SFTP_COMMAND" docker_log_file=libreportal.log backup_log_file=backup.log db_file=database.db migrate_file=migrate.txt run_file=run.txt # Configs update_done=false config_file_wireguard=config_wireguard # Menu menu_number=0