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.
- 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 -
- 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
- 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 toBOT_TELEGRAM_TYPE=centralized). - Enable Email notifications (
EMAIL_ENABLED): enables Email (wizard defaults to relay delivery). After install, setEMAIL_RECIPIENTto 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.
- Edit configuration:
nano /opt/proxsave/configs/backup.env
- Validate configuration (no changes):
cd /opt/proxsave
./build/proxsave --dry-run
- Run a real backup:
cd /opt/proxsave
./build/proxsave
- 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