DOCUMENTATION UPDATE: Added detailed step-by-step guide covering the entire installation process from PBS server setup to completion. README.md Changes: Prerequisites Section (Expanded): - How to create API tokens in PBS web interface - How to configure datastore permissions - Common permission error and how to fix it - Information gathering checklist before running installer New: Step-by-Step Walkthrough (14 Steps): 1. Running the installer 2. PBS server configuration (IP, port, datastore) 3. Authentication method selection (why API tokens) 4. Entering API token details 5. Backup type selection (files/block/hybrid) 6. File backup paths configuration 7. Block device selection and auto-detection 8. Backup schedule configuration 9. Retention policy settings 10. Encryption setup and key management 11. 3-step connection test process 12. Systemd service creation 13. Optional immediate backup 14. Completion summary Each step includes: - Example prompts and responses - Explanation of options - Recommendations and best practices - Common device types and their paths - Troubleshooting tips CHANGELOG.md Updates: - Documented new comprehensive walkthrough - Listed PBS server setup documentation - Added permission error troubleshooting to Added section This addresses the most common user questions and provides a complete reference for first-time users. Users can now follow the guide step-by-step to successfully configure PBS backups. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
649 lines
17 KiB
Markdown
649 lines
17 KiB
Markdown
# 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
|
|
- `yay` AUR 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:**
|
|
|
|
1. Login to your PBS server (e.g., https://192.168.1.181:8007)
|
|
2. Go to **Configuration → Access Control → API Tokens**
|
|
3. Click **Add**
|
|
4. 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
|
|
5. Click **Add**
|
|
6. **IMPORTANT:** Copy the **Secret** immediately - it's only shown once!
|
|
- Format: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
|
|
|
|
#### 2. Configure Datastore Permissions
|
|
|
|
Your API token needs backup permissions on the datastore:
|
|
|
|
1. Go to **Configuration → Access Control → Permissions**
|
|
2. Click **Add → User Permission**
|
|
3. Fill in:
|
|
- **Path:** `/datastore/YOUR-DATASTORE-NAME`
|
|
- **User:** `root@pam!backupAutomations` (your token)
|
|
- **Role:** `DatastoreBackup` (or `DatastoreAdmin` for full access)
|
|
4. 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)
|
|
|
|
## Installation
|
|
|
|
### Clone the repository
|
|
|
|
```bash
|
|
git clone https://github.com/zaphod-black/PBSClientInstaller
|
|
cd PBSClientInstaller
|
|
chmod +x pbs-client-installer.sh
|
|
```
|
|
|
|
### Run with sudo
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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 `DatastoreBackup` permission 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:
|
|
|
|
1. **PBS Server Configuration**
|
|
- Server IP/hostname
|
|
- Port (default: 8007)
|
|
- Datastore name
|
|
|
|
2. **Authentication**
|
|
- Username + Password OR
|
|
- API Token (recommended for automation)
|
|
|
|
3. **Backup Configuration**
|
|
- Paths to backup (e.g., `/`, `/home`)
|
|
- Exclusion patterns (e.g., `/tmp`, `/var/cache`)
|
|
|
|
4. **Schedule**
|
|
- Hourly, Daily, Weekly, or Custom schedule
|
|
- Specific time for backups
|
|
|
|
5. **Retention Policy**
|
|
- Number of last backups to keep
|
|
- Daily/weekly/monthly retention
|
|
|
|
6. **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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
sudo nano /etc/proxmox-backup-client/config
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl restart pbs-backup.timer
|
|
```
|
|
|
|
### Disable Automatic Backups
|
|
|
|
```bash
|
|
sudo systemctl disable pbs-backup.timer
|
|
sudo systemctl stop pbs-backup.timer
|
|
```
|
|
|
|
### Uninstall
|
|
|
|
Use the provided uninstaller:
|
|
|
|
```bash
|
|
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
|
|
1. Print the paper backup immediately
|
|
2. Store printed copy in safe location (fireproof safe, safety deposit box)
|
|
3. Copy `encryption-key.json` to password manager
|
|
4. Never store key on the same system being backed up
|
|
5. Test key restoration regularly
|
|
|
|
### Restore Encryption Key
|
|
|
|
To restore backups on a new system:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
./test-connection.sh <server> <port> <datastore> <username> <realm> <password-or-token>
|
|
```
|
|
|
|
**Examples:**
|
|
|
|
With username/password:
|
|
```bash
|
|
./test-connection.sh 192.168.1.181 8007 DEAD-BACKUP root pam mypassword
|
|
```
|
|
|
|
With API token:
|
|
```bash
|
|
./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:**
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
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`:
|
|
```bash
|
|
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:
|
|
```bash
|
|
yay -S proxmox-backup-client-bin --rebuild
|
|
```
|
|
|
|
### Backups Not Running
|
|
|
|
Check timer and service status:
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
# 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
|