# Borg CLI Installer A comprehensive installer script for Borg CLI that supports multiple Linux distributions and installation methods. ## Features - **Version Checking**: Only downloads and installs if newer version is available - **Multiple Installation Methods**: - Package manager (apt, yum, dnf, pacman, zypper) - Binary download from GitHub releases - **Cross-Platform Support**: Debian, Ubuntu, RHEL, CentOS, Fedora, Arch, openSUSE - **Architecture Support**: x86_64 (amd64), ARM64, ARM - **Automatic Updates**: Fetches latest version from GitHub API - **Force Reinstall**: Option to force reinstall even if up-to-date ## Usage ### Basic Usage ```bash # Install latest version (only if newer than current) ./install-borg-cli.sh # Install specific version ./install-borg-cli.sh -v 1.4.2 # Force reinstall even if up-to-date ./install-borg-cli.sh --force ``` ### Installation Methods ```bash # Force installation from package manager ./install-borg-cli.sh --package # Force installation from binary ./install-borg-cli.sh --binary ``` ### Help ```bash ./install-borg-cli.sh --help ``` ## Installation Logic ### Version Checking 1. **Check Current Version**: Detects installed Borg CLI version 2. **Fetch Latest**: Gets latest version from GitHub API 3. **Compare Versions**: Only proceeds if newer version available 4. **Force Override**: `--force` flag bypasses version check ### Installation Priority 1. **Package Manager** (preferred): - Debian/Ubuntu: Checks for official borgbackup package - RHEL/CentOS/Fedora: Checks for available borgbackup package - Arch Linux: Available in pacman repositories - openSUSE: Checks for available borgbackup package 2. **Binary Download** (fallback): - Downloads platform-specific binary from GitHub releases - Supports x86_64, ARM64, ARM architectures - Installs to `/usr/local/bin/borg` or `~/bin/borg` ## File Locations ### Installation Directory - Binary: `/usr/local/bin/borg` (system) or `~/bin/borg` (user) - Symlink: `borg -> borg-1.4.2` (version-specific) ## Version Comparison The installer uses semantic version comparison: - **Format**: `X.Y.Z` (e.g., `1.4.2`) - **Logic**: Compares major, minor, patch versions - **Build Info**: Ignores build hashes/identifiers ### Examples ```bash # Current: 1.4.0, Latest: 1.4.2 → Update needed # Current: 1.4.2, Latest: 1.4.2 → No update needed # Current: 1.4.3, Latest: 1.4.2 → No update needed (newer installed) ``` ## System Requirements ### Required - `curl` or `wget` (for downloading) - `sudo` access (for system-wide installation) ### Optional - Package manager access (for package installations) - Internet connection (for downloading releases) ## Supported Distributions ### Package Manager Support - **Debian/Ubuntu**: `borgbackup` package - **RHEL/CentOS/Fedora**: `borgbackup` package - **Arch Linux**: `borg` package - **openSUSE**: `borgbackup` package ### Binary Support - **Linux x86_64**: `borg-linux-glibc231-x86_64` - **Linux ARM64**: `borg-linux-glibc231-aarch64` - **Linux ARM**: `borg-linux-glibc231-armv7` ## Troubleshooting ### Version Detection Issues ```bash # Check current version manually borg --version # Force reinstall if version detection fails ./install-borg-cli.sh --force ``` ### Permission Issues ```bash # For system installation sudo ./install-borg-cli.sh --binary ``` ### PATH Issues ```bash # Check if user bin is in PATH echo $PATH | grep -q "$HOME/bin" && echo "OK" || echo "Add to PATH" # Test borg command which borg borg --version ``` ## Examples ### Typical Workflow ```bash # Check if update needed ./install-borg-cli.sh # Output if up-to-date: # [SUCCESS] You already have latest version (1.4.2) # [SUCCESS] No installation needed. Exiting. # Output if update available: # [INFO] Current version: 1.4.0 (user) # [INFO] Latest version: 1.4.2 # [INFO] Newer version available: 1.4.2 > 1.4.0 # [SUCCESS] Installation completed successfully! ``` ### Force Binary Installation ```bash # Force binary installation ./install-borg-cli.sh --force --binary # Output: # [SUCCESS] Borg CLI binary installed successfully # Next steps: # 1. Test installation: borg --version # 2. Initialize repository: borg init --encryption=repokey /path/to/repo # 3. Create backup: borg create /path/to/repo::backup-name /path/to/backup # 4. Use Borg CLI: borg --help ``` ## Integration with Setup Script The Borg CLI installer can be integrated with backup setup scripts: - Automatically called when Borg CLI is needed - Respects user preferences for installation location - Provides clear feedback on installation strategy - Handles both new installations and updates ## Security Features - **Official Releases**: Downloads from official GitHub releases - **Package Verification**: Uses official package repositories - **Proper Permissions**: Sets appropriate file ownership and permissions ## Contributing To add support for new distributions or architectures: 1. Update `detect_os()` function for new package managers 2. Add architecture detection in `get_arch()` function 3. Update installation methods in `install_borg_from_*()` functions 4. Test with target distribution 5. Update documentation ## License This installer script follows the same license as Borg (BSD-3-Clause).