Made system-wide installation more discoverable and automatic.
CHANGES:
1. Main Menu Option 7 Added:
- New option: "Install as system command"
- Renumbered Exit from 7 to 8
- Updated prompt from [1-7] to [1-8]
- Calls install_script() directly from menu
2. Post-Installation Prompt:
- After initial target configuration completes, asks:
"Would you like to install PBSClientTool as a system command?"
- Shows benefit: "This will allow you to run 'sudo PBSClientTool' from anywhere."
- Default: yes (recommended)
- Only prompts if not already installed (checks $INSTALL_PATH)
- Applied to both setup paths:
- PBS client already installed (first target setup)
- PBS client not installed (fresh install)
3. Installation Detection:
- Checks if /usr/local/bin/PBSClientTool already exists
- Skips prompt if already installed
- Prevents redundant installation offers
USER EXPERIENCE:
Before:
- Users had to know about --install flag
- Manual installation required navigating to script directory
- No guidance after setup
After:
- Automatic prompt after initial setup (smart default)
- Menu option for installation anytime
- Clear explanation of benefits
- One-time setup, use anywhere
Example flow:
1. User runs: sudo ./pbs-client-installer.sh
2. Completes initial configuration wizard
3. Script shows: "First target 'default' created successfully!"
4. Script asks: "Install as system command? (yes/no) [yes]:"
5. User presses Enter (accepts default)
6. Installed to /usr/local/bin/PBSClientTool
7. User can now run: sudo PBSClientTool (from any directory)
This makes system installation the default path for new users,
improving discoverability and ease of use.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
13 KiB
13 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Added
- Multi-target backup support (v1.1.0 - COMPLETE)
- Support for multiple backup destinations (different PBS servers for redundancy)
- Named backup targets (e.g., "offsite", "local", "backup1")
- Target management functions (COMPLETE):
list_targets()- List all configured target namesshow_targets_list()- Display all targets with server/datastore/statusshow_target_detail()- Show comprehensive target configurationadd_target()- Interactive target creation wizardedit_target()- Edit connection, settings, or full reconfigdelete_target()- Remove target with confirmation and cleanupvalidate_target_name()- Enforce naming rules (alphanumeric, dash, underscore)
- Per-target wrapper functions (COMPLETE):
interactive_config_for_target()- Configure specific targetreconfigure_connection_for_target()- Update connection onlyreconfigure_backup_settings_for_target()- Update backup settings onlyrun_backup_for_target()- Execute backup with live progress monitoring
- Systemd service creation (COMPLETE):
create_systemd_service_for_target()- Generate all services for named target- Creates pbs-backup-TARGET.service (scheduled)
- Creates pbs-backup-TARGET-manual.service (manual/full)
- Creates pbs-backup-TARGET.timer (scheduler)
- Generates target-specific backup scripts with embedded target name
- Automatic migration (COMPLETE):
migrate_legacy_config()- Auto-migrate single-target to "default" target- Renames services: pbs-backup → pbs-backup-default
- Preserves existing schedules and backups
- Zero downtime migration
- Configuration storage (COMPLETE):
- /etc/proxmox-backup-client/targets/TARGET.conf
- /etc/proxmox-backup-client/backup-TARGET.sh
- /etc/systemd/system/pbs-backup-TARGET.{service,timer}
- Main menu integration (COMPLETE):
- Multi-target management menu with 8 options
- First-time setup wizard for new installations
- Automatic target name prompt for first target
- Clean menu structure: List, Add, Edit, Delete, Run, View, Reinstall, Exit
- Ready for testing:
- All code paths implemented
- Syntax validated
- Needs functional testing
- Needs migration testing from legacy configs
- Flexible block device scheduling in hybrid mode
- Separate schedule configuration for block device backups vs file backups
- Block device schedule options:
- Weekly (specific day of week, default Sunday)
- Biweekly (every other week on specific day)
- Monthly (specific day of month)
- Custom day of week (1-7, Monday-Sunday)
- Custom day of month (1-31)
- File backups run on main schedule, block device on independent schedule
- Configuration stored in BLOCK_DEVICE_FREQUENCY and BLOCK_DEVICE_DAY variables
- Manual backup selection for hybrid mode
- Interactive menu when running backup in hybrid mode
- Three options:
- Files only (fast ~2-3 minutes) - daily file archives
- Block device only (slow ~20-30 minutes) - full disk image for VM conversion
- Both files and block device (complete backup)
- Allows selective backup execution without changing configuration
- Backup script supports three FORCE_FULL values: "files", "block", "yes"
- Intelligent reconfiguration options when PBS client is already installed
- Quick connection-only reconfiguration (server/credentials only)
- Full reconfiguration of all settings
- Reinstall option with reconfiguration
- Exit without changes option
- 3-step connection verification process:
- Step 1: Server reachability test (5s timeout with curl)
- Step 2: Authentication test with automatic SSL fingerprint acceptance
- Step 3: Datastore access verification
- Display available block devices when invalid device is entered
- Step-by-step progress indicators during connection testing
test-connection.sh- Diagnostic script for testing PBS connections manually- Parameterized for security (no hardcoded credentials)
- Tests server reachability, authentication, and datastore access
- Handles SSL fingerprint acceptance interactively
- Comprehensive documentation in README:
- Step-by-step walkthrough of complete installation (14 steps)
- PBS server setup guide (API token creation and permissions)
- Common permission error troubleshooting
- Explanation of backup types, schedules, and retention policies
- Live backup progress monitoring
- Real-time log following when running backups
- Automatic completion detection
- Shows PBS client's built-in progress bars and statistics
- Can exit with Ctrl+C (backup continues in background)
- Applied to both "Run backup now" menu option and post-install backup
Changed
- Installation instructions now use
git cloneinstead ofwget - Connection test provides better user feedback during testing
- Script now detects existing configurations and offers appropriate options
- Block device detection now strips btrfs subvolume notation (e.g.,
[/@]) - Connection test succeeds if authentication works, even if no backups exist yet
- More specific error messages based on which step of connection test fails
- SSL certificate fingerprints are now automatically accepted during setup
- Reduced authentication timeout from 30s to 15s
- README now includes comprehensive step-by-step walkthrough
- Prerequisites section expanded with detailed PBS server setup instructions
- README updated with live backup progress examples in Step 13
- Reconfiguration section now documents "Run backup now" option (option 4)
- Manual Backup section updated to recommend easy method via installer
- Default realm changed from "pbs" to "pam" (more common for root authentication)
- Default encryption setting changed from "yes" to "no" (user can opt-in if needed)
- Main menu now includes "Run backup now" option for immediate backup testing
- Main menu now includes "Modify backup schedule/type" option (option 5)
- Repository renamed from PBSClientInstaller to PBSClientTool
- Manual backups now force full backup (files + block device) regardless of day
- Created separate pbs-backup-manual.service for manual runs
- Scheduled backups still follow daily/weekly pattern
- Manual backups always include block device even on non-Sunday
- Script version bumped to 1.1.0 for multi-target support
Added
- System-wide installation support
- New
--installflag to install PBSClientTool to /usr/local/bin - Run from anywhere with
sudo PBSClientToolcommand - No need to navigate to script directory
- Includes
--uninstallto remove from system - Added
--helpand--versionflags for command-line usage - Installation preserves original script (safe to update via git pull)
- install_script() function handles installation with overwrite confirmation
- uninstall_script() function removes command but keeps configurations
- Command-line argument parsing before main() execution
- Menu option 7: "Install as system command" - Available in main menu
- Post-installation prompt - Automatically asks if you want to install as system command after initial setup
- Detects if already installed (skips prompt if /usr/local/bin/PBSClientTool exists)
- New
- Automatic connection testing at startup
- All configured targets are automatically tested when script starts
- Quick authentication check (5 second timeout per target)
- Shows connection status: ✓ Connected or ✗ Failed
- Helps identify configuration issues before running backups
- Warns user if any targets have connection problems
- Runs in subshell to avoid environment pollution
Changed
- Documentation reorganization
- README.md simplified from 750 lines to 243 lines
- Removed redundant step-by-step walkthrough sections
- Moved all troubleshooting content to TROUBLESHOOTING.md
- Focused README on quick start and essential usage
- New TROUBLESHOOTING.md covers:
- Connection issues and SSL certificate problems
- Permission errors with detailed PBS setup instructions
- Installation issues (Ubuntu libssl1.1, Arch libfuse3)
- Backup problems and configuration issues
- Common misconfigurations with examples
- Easier to find relevant information
- Better navigation and organization
- Clearer installation flow when PBS client not installed
- Shows what the script will do before proceeding
- Lists 3 steps: Install PBS client, Configure target, Set up automation
- Asks for confirmation before installation
- Allows user to cancel if they change their mind
- No menu options shown (install → configure → exit)
- Clear progress messages throughout installation
- Improved menu flow for viewing target details
- "View target details" moved from main menu option 6 to sub-menu under "List all backup targets"
- After listing targets, users can choose:
- View target details (select target to see comprehensive info)
- Back to main menu
- Main menu reduced from 8 options to 7 (cleaner, more focused)
- More intuitive workflow: list → view details → back to menu
- Target selection now accepts both numbers and names
- All target selection prompts now accept either:
- Target number from the displayed list (e.g., "1")
- Full target name (e.g., "default")
- Applies to: Edit, Delete, Run backup, View details
- Improves user experience - no need to remember target names
- More intuitive for users familiar with numbered menus
- All target selection prompts now accept either:
Fixed
- CRITICAL: All input fields now trimmed to prevent whitespace issues
- Added
| xargsto all prompted variables (server, port, datastore, username, realm, token name, etc.) - Prevents trailing/leading whitespace from breaking PBS_REPOSITORY string
- Fixes authentication failures caused by malformed repository strings
- Example:
"root@pam "(with space) now becomes"root@pam"automatically - Applied to both interactive_config_for_target() and reconfigure_connection_for_target()
- Added
- Main menu now loops properly after actions
- Removed
exit 0calls from all menu options except Exit - Menu now continues after listing targets, running backups, or other actions
- Users can perform multiple operations without restarting script
- Removed
- Target list display improved for incomplete configurations
- Shows warning message when PBS_SERVER or PBS_DATASTORE are empty
- Suggests using "Edit target" option to fix incomplete configs
- Uses process substitution to avoid variable scoping issues
- Clears variables between iterations to prevent data carryover
- CRITICAL: SSL fingerprint prompt no longer causes authentication timeout
- Script now automatically accepts SSL fingerprints by piping 'y' to login
- This was the root cause of "authentication hanging" issues
- CRITICAL: Password/token capture no longer includes newline character
prompt_password()function now outputs formatting to stderr- Added defensive newline stripping when writing config file
- Filters
\nand\rcharacters from passwords usingtr -d '\n\r' - Fixes "authentication failed - invalid credentials" in backup service
- Config file now has properly formatted single-line passwords
- Applied to both
reconfigure_connection()andcreate_systemd_service()
- Script no longer hangs indefinitely when PBS server is unreachable
- Block device auto-detection now correctly handles btrfs subvolumes
- Invalid device paths like
/dev/mapper/root[/@]are now properly cleaned - Connection test now differentiates between network issues and authentication failures
- Shows actual PBS client error messages when authentication fails
- Authentication test now uses correct
logincommand instead of non-existentstatuscommand - Connection test no longer times out due to using wrong PBS client commands
- Backup progress logs now display properly during manual backup runs
- Fixed journalctl following wrong service (was following pbs-backup.service instead of pbs-backup-manual.service)
- Removed stderr suppression (2>/dev/null) that was hiding output
- Added --since flag to capture logs from service start, not just new entries
- Now shows verbose progress: "processed 65.6 GiB in 18m, uploaded 64.4 GiB"
- Backup logs now close automatically when backup completes (no more blank screen)
[1.0.0] - 2025-11-01
Added
- Initial release
- Auto-detection of Linux distribution (Ubuntu, Debian, Arch)
- Interactive configuration via console prompts
- Automatic encryption key generation with paper backup
- Systemd service and timer for automated backups
- Configurable retention policies
- Connection testing before finalization
- Immediate backup option after installation
- Support for file-level (.pxar) backups
- Support for block device (.img) backups
- Hybrid backup mode (daily files + weekly block device)
- Comprehensive error handling and logging
- Uninstaller script