Agent Support

One agent. Every machine you actually own.

The Borg Backup Server agent is a single stdlib-only Python file and a one-line installer. It runs on modern Linux, the enterprise distros nobody has retired yet, macOS, Windows, FreeBSD, NAS boxes, and even the set-top box in the living room. No inbound ports, no VPN, no per-OS builds to babysit.

15+Linux distros detected
3.4Python floor
2.17glibc floor (CentOS 7 era)
10 / 11 / 2016+Windows & Server
0Inbound ports
Runs On

If it has a shell, it’s probably on this list.

One installer detects the platform, picks the right package manager and service supervisor, and matches a borg build to the CPU, libc, and OS — automatically.

Linux

Package-manager installs, family by family.

The installer reads /etc/os-release, installs borg and Python the way that distro expects, and registers a service with whatever init system is actually running.

FamilyDistros recognisedHow borg is installedService
Debian family Ubuntu, Debian, Pop!_OS, Linux Mint, Raspberry Pi OS apt systemd
Enterprise Linux RHEL, CentOS, Rocky Linux, AlmaLinux dnf / yum + EPEL; PowerTools/CRB enabled automatically; falls back to a server-hosted borg build systemd (SysV init on CentOS 6)
Fedora Fedora dnf systemd
Arch family Arch, Manjaro, EndeavourOS, CachyOS pacman -Syu (full sync — no partial upgrades) systemd
SUSE openSUSE Leap & Tumbleweed, SLES zypper systemd
NixOS NixOS nix-env; borg updates stay under your Nix config systemd
Anything with /etc/os-release Any other distro Install borg + python3 yourself, re-run the installer systemd, SysV /etc/init.d, or OpenRC

Still running CentOS 7? So are we.

Upstream borg binaries won’t even start on a glibc 2.17 system. Most tools shrug. BBS ships its own signed borg 1.4.x build for glibc 2.17 and serves it to those clients automatically, based on the glibc version the agent reports. Verified on real CentOS 7 hosts.

  • CentOS 7 / RHEL 7 / Amazon Linux 2 and anything else on glibc 2.17 — a borg build that actually runs.
  • Python 3.4 and up. The agent avoids anything newer — its own subprocess.run() polyfill, no f-strings, no json.JSONDecodeError — so Debian 8 and CentOS 6-era interpreters still work.
  • Old OpenSSH. Compatible with the OpenSSH CentOS 7 ships; the server keeps legacy ssh-rsa available for older clients.
  • Non-UTF-8 locales. ASCII-locale systems with non-ASCII filenames are handled.
Borg binary tiers matched automatically per client
glibc 2.17BBS build · signedx86_64 · arm64
glibc 2.31upstreamx86_64 · arm64
glibc 2.35upstreamx86_64 · arm64
glibc 2.38upstreamx86_64 · arm64
FreeBSDupstreamx86_64
Windowsborg-windowsx86_64

The agent reports its platform, architecture, and glibc; the server hands back the right binary and keeps it updated.

Beyond the Server Room

Macs, Windows boxes, NAS units, and the odd set-top box.

Containers & virtualisation

  • LXC / LXD system containers (Proxmox and friends) — the installer judges by PID 1, so systemd, sysvinit, and OpenRC containers all work.
  • Docker agent for hosts with no service manager — Docker hosts, appliances. See Docker Agent Setup in the wiki.
  • Immutable hosts like NixOS keep borg under your own config.

NAS appliances

  • Synology DSM — runs the Docker agent via Container Manager; mount shared folders into the container.
  • TrueNAS SCALE — runs the Docker agent as a custom app with datasets mounted in.
  • TrueNAS CORE — uses the native FreeBSD installer.
  • Unraid — the BBS server has a Community Applications template; the Docker agent runs alongside it for local shares.

FreeBSD

  • Detected natively; borg and Python installed via pkg.
  • Installed as an rc.d service (bbsagent), using FreeBSD’s pip conventions.
  • FreeBSD x86_64 borg binaries matched from upstream releases.

macOS

  • Apple Silicon and Intel — universal wrapper; Homebrew at /opt/homebrew or /usr/local.
  • Installer offers to install Homebrew, then installs borg + python3 as the invoking user — never as root.
  • Runs as a launchd daemon with a code-signed .app wrapper, so it shows up properly in Full Disk Access and can back up Desktop, Documents, Mail, and Photos.
  • Works with the stock bash 3.2; caffeinate keeps the Mac awake during backups.

Windows

Pre-release
  • Windows 10 (1607+), Windows 11, Server 2016 / 2019 / 2022 / 2025 — 64-bit.
  • Zero-dependency PowerShell 5.1 one-liner: bundles an embeddable Python runtime and Borg for Windows. No WSL, no Cygwin, no Python install.
  • Runs as a native Windows Service with automatic restart on failure.
  • Drive-letter aware file browser and restore (“This PC” root, multi-drive restore).
  • The installer refuses Windows 7 / 8 / 8.1 and Server 2008 R2 / 2012 / 2012 R2 with a clear message.

Embedded & unusual

  • Enigma2 set-top boxes (Dreambox, OpenATV, OE-Alliance) — detected via /proc/stb, reporting image name and version.
  • Dropbear SSH on BusyBox / embedded Linux — the agent spots dbclient, rewrites unsupported SSH flags, and converts the server-issued key to Dropbear format.
  • armv7l boards (older Raspberry Pi and friends) — runs; borg auto-update is skipped where pip isn’t available.

Synology and TrueNAS support is community-run via the Docker agent — the agent runs on them; there is no DSM- or SCALE-specific package.

How the Agent Works

Small, outbound-only, and self-maintaining.

One file, stdlib only

A single Python file with no dependencies — nothing to pip install, nothing to break on upgrade.

No inbound connections

Polls the server over HTTPS and backs up over SSH to the server. Works behind NAT, CGNAT, and strict firewalls.

Centrally version-managed

The agent self-updates from the server; borg binaries are matched to each client’s platform, architecture, and glibc.

Wake-on-LAN

Sleeping machines are woken before their scheduled backup window.

Plugins run client-side

MySQL, PostgreSQL, MongoDB, and shell-script hooks run on the client before the backup starts.

Honest Scope

What’s not on the list.

A short list, kept deliberately honest.

Not supported

  • Alpine / musl-based Linux — no musl borg build. May work if you install borg yourself.
  • OpenWrt routers
  • 32-bit Windows
  • Windows Server 2012 R2 and older
Install

One line. Any platform.

Every client gets its own one-liner from the BBS Add Client → Install tab, with the server URL and enrolment key already filled in.

Linux · macOS · FreeBSD
$ curl -fsSL https://your-server/api/agent/download?file=install.sh | sudo bash -s -- --server https://your-server --key YOUR_KEY
Windows · PowerShell as Administrator
> powershell -ExecutionPolicy Bypass -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; iwr -UseBasicParsing 'https://your-server/api/agent/download?file=install-windows.ps1' -OutFile $env:TEMP\bbs-install.ps1; & $env:TEMP\bbs-install.ps1 -Server 'https://your-server' -Key 'YOUR_KEY'}"

Your fleet is more mixed than you think.

Ubuntu on the web tier, a CentOS 7 box nobody will touch, a Mac Studio in design, Windows Server in accounting, a Synology under someone’s desk. One server, one agent, one place to see all of it.

FREE · OPEN SOURCE · MIT LICENSED