User Experience Enhancement: Show real-time backup progress instead of just asking if user wants to follow logs. Changes to Backup Progress Display: 1. Automatic Progress Monitoring: - No longer prompts to follow logs - Automatically starts showing journalctl output - Displays PBS client's built-in progress bars and stats - Runs in background with PID tracking 2. Visual Progress Box: ╔════════════════════════════════════════════════════════╗ ║ Backup Progress (Live) ║ ║ Press Ctrl+C to exit (backup continues in background) ║ ╚════════════════════════════════════════════════════════╝ 3. Automatic Completion Detection: - Monitors systemd service with `systemctl is-active` - Polls every 2 seconds until service completes - Kills journal follow process when done - Shows final status (success or failure) 4. Helpful Post-Backup Information: - On success: Shows how to list snapshots - On failure: Shows how to check full logs - Includes repository info for easy copy/paste Applied to Two Functions: - run_backup_now() - Called after initial installation - Main menu option 4 - "Run backup now" Technical Implementation: - Uses `timeout 3600` to prevent runaway journal process - Background journal follow with PID capture - Clean process termination with kill + wait - Proper error handling for failed backups CHANGELOG.md Updates: - Added new "Live backup progress monitoring" feature - Listed all capabilities and use cases This provides immediate visual feedback and shows the user exactly what's happening during the backup process, including file counts, transfer speeds, and compression stats from PBS client. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| CHANGELOG.md | ||
| pbs-client-installer.sh | ||
| pbs-client-uninstaller.sh | ||
| quickstart.md | ||
| README.md | ||
| test-connection.sh | ||
PBSClientInstaller
Interactive bash script that automatically installs and configures Proxmox Backup Client on Ubuntu, Debian, and Arch Linux systems.
Features
- Auto-detects Linux distribution (Ubuntu 20.04/22.04/24.04, Debian 10/11/12, Arch Linux)
- Installs correct PBS client version for your system
- Interactive configuration via console prompts
- Automatic encryption key generation with paper backup
- Systemd service and timer for automated backups
- Configurable retention policies (daily, weekly, monthly)
- Connection testing before finalizing setup
- Immediate backup option after installation
Prerequisites
All Systems
- Root/sudo access
- Active internet connection
- Proxmox Backup Server accessible on network
Arch Linux Specifically
yayAUR helper must be installed- Install yay first: https://github.com/Jguer/yay
Before Running - PBS Server Setup
1. Create API Token (Recommended)
API tokens are the recommended authentication method for automated backups. They're more secure than passwords and don't expire.
In PBS Web Interface:
- Login to your PBS server (e.g., https://192.168.1.181:8007)
- Go to Configuration → Access Control → API Tokens
- Click Add
- Fill in:
- User:
root@pam(or your backup user) - Token ID:
backupAutomations(or any name you prefer) - Privilege Separation: Leave unchecked for full user permissions
- User:
- Click Add
- IMPORTANT: Copy the Secret immediately - it's only shown once!
- Format:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- Format:
2. Configure Datastore Permissions
Your API token needs backup permissions on the datastore:
- Go to Configuration → Access Control → Permissions
- Click Add → User Permission
- Fill in:
- Path:
/datastore/YOUR-DATASTORE-NAME - User:
root@pam!backupAutomations(your token) - Role:
DatastoreBackup(orDatastoreAdminfor full access)
- Path:
- Click Add
Common Permission Error:
Error: permission check failed - missing Datastore.Audit|Datastore.Backup
This means the token lacks permissions. Double-check the permission settings above.
3. Gather Information
Have these details ready before running the installer:
- Server IP/hostname: (e.g., 192.168.1.181)
- Port: (default: 8007)
- Datastore name: (exactly as shown in PBS, e.g., DEAD-BACKUP)
- API Token:
- Username:
root - Realm:
pam - Token name:
backupAutomations - Token secret: (the secret you copied earlier)
- Username:
Installation
Clone the repository
git clone https://github.com/zaphod-black/PBSClientInstaller
cd PBSClientInstaller
chmod +x pbs-client-installer.sh
Run with sudo
sudo ./pbs-client-installer.sh
Step-by-Step Walkthrough
This walkthrough shows a complete installation using API token authentication (recommended).
Step 1: Run the Installer
sudo ./pbs-client-installer.sh
If PBS client is already installed, you'll see options. Choose 1 to configure or 2 to reinstall.
Step 2: PBS Server Configuration
Enter your server details:
Enter PBS server IP/hostname [192.168.1.181]: 192.168.1.181
Enter PBS server port [8007]: 8007
Enter datastore name [backups]: DEAD-BACKUP
Important: The datastore name must match exactly as shown in your PBS web interface.
Step 3: Authentication Method
Choose API Token (option 2):
Authentication Method:
1) Username + Password
2) API Token (recommended for automation)
Select authentication method [1/2] [2]: 2
Why API Tokens?
- More secure than passwords
- Don't expire
- Can be easily revoked without changing passwords
- Recommended for automated/scheduled backups
Step 4: Enter API Token Details
Enter username [backup]: root
Enter realm [pbs]: pam
Enter token name [backup-token]: backupAutomations
Enter token secret: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Note: The token secret won't be displayed as you type (for security).
Step 5: Backup Configuration
Choose your backup type:
Backup Type:
1) File-level only (.pxar) - Fast, efficient, selective restore
2) Block device only (.img) - Full disk image, bootable as VM
3) Both (Hybrid) - Daily files + Weekly block device (recommended)
Select backup type [1/2/3] [3]: 3
Recommendation: Option 3 (Both) gives you:
- Daily file-level backups (fast, efficient)
- Weekly block device backups (full system image)
Step 6: File Backup Paths
Enter paths to backup (space-separated) [/]: /
Enter exclusion patterns (space-separated) [/tmp /var/tmp /var/cache /proc /sys /dev /run]:
Press Enter to accept defaults, or customize as needed.
Step 7: Block Device Selection
The script auto-detects your root device:
[INFO] Auto-detected root device: /dev/mapper/root
Enter block device to backup [/dev/mapper/root]:
Press Enter to accept, or enter a different device (e.g., /dev/sda, /dev/nvme0n1).
Common devices:
/dev/sda- First SATA/SCSI drive/dev/nvme0n1- First NVMe drive/dev/vda- Virtual disk (VM)/dev/mapper/root- LVM/encrypted volume
Step 8: Backup Schedule
Backup Schedule:
1) Hourly
2) Daily (recommended)
3) Weekly
4) Custom
Select schedule type [1/2/3/4] [2]: 2
Enter hour for daily backup (0-23) [2]: 2
Note: If you selected "Both" backup type:
- File backups run on this schedule (e.g., daily at 2 AM)
- Block device backups run weekly on Sunday
Step 9: Retention Policy
Keep last N backups [3]: 3
Keep daily backups for N days [7]: 7
Keep weekly backups for N weeks [4]: 4
Keep monthly backups for N months [6]: 6
These settings determine how long backups are kept before automatic pruning.
Step 10: Encryption
Enable encryption? (yes/no) [yes]: yes
If you enable encryption:
- A unique encryption key is generated
- Paper backup saved to
/root/pbs-encryption-key-YYYYMMDD.txt - Print and store this securely - lost keys = lost data!
Step 11: Connection Test
The installer will test your connection in 3 steps:
[INFO] Step 1/3: Checking if server is reachable...
[INFO] Server is reachable
[INFO] Step 2/3: Testing authentication...
[INFO] SSL fingerprint accepted: a1:41:69:b7:...
[INFO] Authentication successful
[INFO] Step 3/3: Verifying datastore access...
[INFO] Datastore access verified
[INFO] Connection test successful!
If Step 2 fails with permission error:
- Go back to PBS web interface
- Verify API token has
DatastoreBackuppermission on your datastore - See "Prerequisites → Configure Datastore Permissions" section above
Step 12: Service Creation
The installer creates systemd service and timer:
[INFO] Creating systemd service and timer...
[INFO] Systemd service and timer created successfully
Step 13: Optional Immediate Backup
Do you want to run a backup now? (yes/no) [no]: yes
[INFO] Starting immediate backup...
Choose yes to test your backup immediately, or no to wait for the scheduled time.
Step 14: Completion
======================================
Installation Complete!
======================================
Configuration Summary:
PBS Server: 192.168.1.181:8007
Datastore: DEAD-BACKUP
Repository: root@pam!backupAutomations@192.168.1.181:8007:DEAD-BACKUP
Backup Type: both
Backup Paths: /
Block Device: /dev/mapper/root
Schedule: Files daily (02:00:00), Block device weekly (Sunday)
Your backups are now configured! 🎉
Reconfiguration
If PBS client is already installed, the script will detect this and offer you options:
With existing configuration:
- Reconfigure connection only - Quick update of PBS server IP/credentials only
- Full reconfiguration - Redo all settings (paths, schedules, retention, etc.)
- Reinstall PBS client and reconfigure - Complete reinstall
- Exit without changes
Without existing configuration:
- Configure PBS client - Set up for the first time
- Reinstall and configure - Fresh installation
- Exit without changes
The connection-only reconfiguration is perfect for:
- Switching to a different backup server
- Updating expired API tokens
- Changing authentication methods
- Updating datastore names
All backup settings (paths, schedules, retention policies) are preserved.
Usage Example
The script will interactively prompt you for:
-
PBS Server Configuration
- Server IP/hostname
- Port (default: 8007)
- Datastore name
-
Authentication
- Username + Password OR
- API Token (recommended for automation)
-
Backup Configuration
- Paths to backup (e.g.,
/,/home) - Exclusion patterns (e.g.,
/tmp,/var/cache)
- Paths to backup (e.g.,
-
Schedule
- Hourly, Daily, Weekly, or Custom schedule
- Specific time for backups
-
Retention Policy
- Number of last backups to keep
- Daily/weekly/monthly retention
-
Encryption
- Enable/disable client-side encryption
Example Session
╔════════════════════════════════════════╗
║ Proxmox Backup Client Installer ║
║ Version: 1.0.0 ║
╚════════════════════════════════════════╝
[INFO] Detected: Ubuntu 24.04 LTS
[INFO] Installing Proxmox Backup Client on Ubuntu 24.04...
[INFO] PBS client installed successfully
======================================
PBS Client Configuration
======================================
Enter PBS server IP/hostname [192.168.1.181]:
Enter PBS server port [8007]:
Enter datastore name [backups]:
Authentication Method:
1) Username + Password
2) API Token (recommended for automation)
Select authentication method [1/2] [2]:
Enter username [backup]:
Enter realm [pbs]:
Enter token name [backup-token]:
Enter token secret:
Backup Configuration:
Enter paths to backup (space-separated) [/]: /
Enter exclusion patterns (space-separated) [/tmp /var/tmp /var/cache /proc /sys /dev /run]:
Backup Schedule:
1) Hourly
2) Daily (recommended)
3) Weekly
4) Custom
Select schedule type [1/2/3/4] [2]: 2
Enter hour for daily backup (0-23) [2]: 3
Retention Policy:
Keep last N backups [3]: 3
Keep daily backups for N days [7]: 7
Keep weekly backups for N weeks [4]: 4
Keep monthly backups for N months [6]: 12
Enable encryption? (yes/no) [yes]: yes
[INFO] Encryption key created successfully
[WARN] IMPORTANT: Encryption key paper backup saved to: /root/pbs-encryption-key-20251101.txt
[WARN] Print this file and store it securely. Lost keys = permanent data loss!
[INFO] Testing connection to PBS server...
[INFO] Connection test successful!
[INFO] Creating systemd service and timer...
[INFO] Systemd service and timer created successfully
Do you want to run a backup now? (yes/no) [no]: yes
[INFO] Starting immediate backup...
Post-Installation
Check Status
# Check timer status
sudo systemctl status pbs-backup.timer
# Check last backup run
sudo systemctl status pbs-backup.service
# View backup logs
sudo journalctl -u pbs-backup.service
# Follow logs in real-time
sudo journalctl -fu pbs-backup.service
Manual Backup
# Run backup immediately
sudo systemctl start pbs-backup.service
# List all backups
sudo -E proxmox-backup-client snapshot list
Configuration Files
/etc/proxmox-backup-client/config- Main configuration/etc/proxmox-backup-client/backup.sh- Backup script/root/.config/proxmox-backup/encryption-key.json- Encryption key/etc/systemd/system/pbs-backup.service- Systemd service/etc/systemd/system/pbs-backup.timer- Systemd timer
Modify Configuration
Edit the config file and restart the timer:
sudo nano /etc/proxmox-backup-client/config
sudo systemctl daemon-reload
sudo systemctl restart pbs-backup.timer
Disable Automatic Backups
sudo systemctl disable pbs-backup.timer
sudo systemctl stop pbs-backup.timer
Uninstall
Use the provided uninstaller:
sudo ./pbs-client-uninstaller.sh
Backup Encryption Key
CRITICAL: Your encryption key is your only way to restore data. If you lose it, your backups are permanently unrecoverable.
Key Locations
- Primary:
/root/.config/proxmox-backup/encryption-key.json - Paper backup:
/root/pbs-encryption-key-YYYYMMDD.txt
Best Practices
- Print the paper backup immediately
- Store printed copy in safe location (fireproof safe, safety deposit box)
- Copy
encryption-key.jsonto password manager - Never store key on the same system being backed up
- Test key restoration regularly
Restore Encryption Key
To restore backups on a new system:
# Copy your saved encryption-key.json
sudo mkdir -p /root/.config/proxmox-backup
sudo cp /path/to/saved/encryption-key.json /root/.config/proxmox-backup/
# Or recreate from paper backup QR code
# (scan QR code and save to file)
Troubleshooting
Connection Test Script
If you encounter connection issues, use the included diagnostic script:
./test-connection.sh <server> <port> <datastore> <username> <realm> <password-or-token>
Examples:
With username/password:
./test-connection.sh 192.168.1.181 8007 DEAD-BACKUP root pam mypassword
With API token:
./test-connection.sh 192.168.1.181 8007 DEAD-BACKUP root pam backup-token token-secret-here
The script will:
- Test server reachability
- Handle SSL certificate fingerprint acceptance
- Test authentication
- Verify datastore access
- Provide detailed error messages
Connection Test Fails
The installer tests the connection with a 3-step process:
Step 1 - Server Reachability (5s timeout):
- PBS server is unreachable (check IP/hostname)
- Firewall blocking port (default: 8007)
- Network connectivity issues
Step 2 - Authentication (15s timeout):
- Invalid credentials (username/password/token)
- SSL certificate fingerprint issues (automatically handled)
- API token format errors
Step 3 - Datastore Access:
- Datastore does not exist on server
- User lacks permissions for the datastore
Quick checks:
# Test server reachability
ping 192.168.1.181
curl -k https://192.168.1.181:8007
# Verify credentials in PBS web interface
# Check datastore name matches exactly
SSL Certificate Fingerprints:
The installer automatically accepts SSL fingerprints during setup. If you need to manually accept a fingerprint:
export PBS_REPOSITORY="root@pam@192.168.1.181:8007:DEAD-BACKUP"
export PBS_PASSWORD="your-password"
proxmox-backup-client login
# Answer 'y' when prompted to accept the fingerprint
Installation Fails on Ubuntu 22.04
You may need to manually install libssl1.1:
wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
Arch: "libfuse3.so.3 not found"
Rebuild after fuse3 updates:
yay -S proxmox-backup-client-bin --rebuild
Backups Not Running
Check timer and service status:
sudo systemctl list-timers pbs-backup.timer
sudo systemctl status pbs-backup.service
sudo journalctl -u pbs-backup.service -n 50
"Skip mount point" Messages
This is normal. The script excludes separate mount points by default. To include specific mount points, edit /etc/proxmox-backup-client/backup.sh and add --include-dev flags.
Advanced Usage
Custom Backup Script
Modify /etc/proxmox-backup-client/backup.sh for advanced scenarios:
# Add specific mount points
--include-dev /boot/efi
# Use data change detection mode
--change-detection-mode=data
# Add rate limiting (10 MB/s)
--rate-limit 10485760
# Verbose output
--verbose
Multiple Backup Jobs
Create additional services for different schedules:
# Copy and modify service/timer files
sudo cp /etc/systemd/system/pbs-backup.service /etc/systemd/system/pbs-backup-hourly.service
sudo cp /etc/systemd/system/pbs-backup.timer /etc/systemd/system/pbs-backup-hourly.timer
# Edit timer OnCalendar setting
sudo nano /etc/systemd/system/pbs-backup-hourly.timer
sudo systemctl daemon-reload
sudo systemctl enable --now pbs-backup-hourly.timer
Security Considerations
- Configuration file contains credentials - protected with mode 600
- Encryption key is root-only accessible
- No passwords logged or displayed in output
- All communication uses TLS encryption
- Consider using API tokens instead of passwords for automation
Supported Distributions
| Distribution | Versions | Notes |
|---|---|---|
| Ubuntu | 20.04, 22.04, 24.04 | LTS versions only |
| Debian | 10 (Buster), 11 (Bullseye), 12 (Bookworm) | Stable releases |
| Arch Linux | Rolling | Requires yay AUR helper |
Contributing
Issues and pull requests welcome at [your-repo-url]
License
MIT License - see LICENSE file
Credits
- Proxmox team for PBS client
- Script by Cade
Support
For PBS client issues: https://forum.proxmox.com For script issues: [your-repo-url]/issues