Quick Install

The fastest way to get ProxSave running is to use the official installer script. It downloads the latest release, verifies checksums, installs the binary under /opt/proxsave/build/, and launches the installer wizard.

Install (recommended)

Run as root:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/tis24dev/proxsave/main/install.sh)"

If your SSH/TUI rendering is problematic, force CLI mode:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/tis24dev/proxsave/main/install.sh)" _ --cli

Clean reinstall

--new-install wipes most of /opt/proxsave and then runs the installer. It preserves build/, identity/ and legacy env/, but it removes other directories (including configs/).

Back up /opt/proxsave/configs/backup.env first if you want to keep your configuration.

bash -c "$(curl -fsSL https://raw.githubusercontent.com/tis24dev/proxsave/main/install.sh)" _ --new-install

CLI mode + clean reinstall:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/tis24dev/proxsave/main/install.sh)" _ --new-install --cli

Manual install from GitHub Releases (no install.sh)

If you prefer not to use install.sh, you can install the release tarball manually.

  1. Download and verify the release archive (replace VERSION and ARCH):
VERSION="x.y.z"
OS="linux"
ARCH="amd64" # or arm64
FILENAME="proxsave_${VERSION}_${OS}_${ARCH}.tar.gz"

curl -fsSLO "https://github.com/tis24dev/proxsave/releases/download/v${VERSION}/${FILENAME}"
curl -fsSLO "https://github.com/tis24dev/proxsave/releases/download/v${VERSION}/SHA256SUMS"

grep " ${FILENAME}$" SHA256SUMS | sha256sum -c -
  1. Extract the proxsave binary and install it:
tar -xzf "${FILENAME}" proxsave
sudo mkdir -p /opt/proxsave/build
sudo mv proxsave /opt/proxsave/build/proxsave
sudo chmod +x /opt/proxsave/build/proxsave
  1. Run the installer:
cd /opt/proxsave
sudo ./build/proxsave --install

Installer wizard (TUI/CLI)

The installer is a simple form that writes configs/backup.env, creates the proxsave/proxmox-backup entrypoints, and manages cron scheduling.

TUI (default):

cd /opt/proxsave
sudo ./build/proxsave --install

CLI (no TUI):

cd /opt/proxsave
sudo ./build/proxsave --install --cli
sudo ./build/proxsave --new-install --cli

If you need deeper troubleshooting, run the next dry-run with debug logging:

cd /opt/proxsave
./build/proxsave --dry-run --log-level debug

Wizard fields (light overview)

Secondary storage

  • Enable Secondary Storage (SECONDARY_ENABLED): enables the secondary tier copy after the primary backup is created.
  • Secondary Backup Path (SECONDARY_PATH): absolute path on a mounted filesystem (e.g., NFS/CIFS mount).
  • Secondary Log Path (SECONDARY_LOG_PATH): where logs are copied on the secondary tier.

Cloud storage (rclone)

  • Enable Cloud Storage (CLOUD_ENABLED): enables cloud upload via rclone after the primary backup is created.
  • Rclone Backup Remote (CLOUD_REMOTE): destination in remote:path format (configured via rclone config), e.g. myremote:pbs-backups.
  • Rclone Log Remote (CLOUD_LOG_PATH): destination for logs in remote:path format, e.g. myremote:pbs-logs.

Note: advanced setups can split the backup destination into CLOUD_REMOTE (remote name) + CLOUD_REMOTE_PATH (subdirectory), but the wizard accepts the remote:path shorthand.

Notifications

  • Enable Telegram notifications (TELEGRAM_ENABLED): enables Telegram (wizard defaults to BOT_TELEGRAM_TYPE=centralized).
  • Enable Email notifications (EMAIL_ENABLED): enables Email (wizard defaults to relay delivery). After install, set EMAIL_RECIPIENT to a real mailbox.

Encryption

  • Enable Backup Encryption (ENCRYPT_ARCHIVE): encrypts the archive as it is created. If enabled, the installer also guides you through creating/selecting an AGE recipient and saves it under identity/age/recipient.txt.

Firewall Settings Backup

  • BACKUP_FIREWALL_RULESΒ enables collecting and backing up the system’s firewall rules (iptables/nftables) so they can be restored during recovery.

Cron time

  • Cron time (HH:MM) (CRON_HOUR, CRON_MINUTE, CRON_SCHEDULE): daily schedule for automatic runs (default 02:00).

What gets created

/opt/proxsave/
β”œβ”€β”€ build/
β”‚   └── proxsave              # Binary
β”œβ”€β”€ backup/                   # Primary backups (mode 700)
β”œβ”€β”€ log/                      # Logs (mode 700)
β”œβ”€β”€ configs/
β”‚   └── backup.env            # Configuration (mode 600)
└── identity/
    β”œβ”€β”€ .server_identity      # Server ID (used e.g. for Telegram centralized mode)
    └── age/                  # Present when encryption is configured
        └── recipient.txt     # AGE recipient(s)

First run

Run backups as root (or via sudo) on the Proxmox node.

  1. Edit configuration:
nano /opt/proxsave/configs/backup.env
  1. Validate configuration (no changes):
cd /opt/proxsave
./build/proxsave --dry-run
  1. Run a real backup:
cd /opt/proxsave
./build/proxsave
  1. Check results:
ls -la /opt/proxsave/backup/
tail -f /opt/proxsave/log/*.log

Cron schedule

If you chose to set up cron during install, ProxSave migrates legacy entries and creates a default daily schedule (02:00) if none exists.

The configuration path is resolved relative to the installation base directory (so the default configs/backup.env works in cron without needing cd). If you use a non-standard config path, pass it explicitly with --config.

crontab -l | grep -E "proxsave|proxmox-backup" || true

Example: force a specific config path and capture output

0 2 * * * /usr/local/bin/proxsave --config /opt/proxsave/configs/backup.env >> /opt/proxsave/log/cron.log 2>&1