Backups with kopia on Mac OS X 10.4 and 10.5 — a thin client that speaks the kopia repository server protocol in about 1500 lines of C99. No Go, no modern TLS stack, no MacPorts.
# the real thing, on the real machine $ /usr/local/bin/kopia-darwin-ppc kopia-push \ --url https://kopia.lan:51515 \ --user root --hostname macmini-g4-1 --password … \ --fingerprint b1:53:…:a3 /Users/philipp connected: hash=BLAKE2B-256-128 splitter=DYNAMIC-4M-BUZHASH diag: completed with 0 skipped files, 0 skipped dirs, 1 skipped special files object: kcd8ba6c2e3cd44c005951e41c1c2f9cd snapshot: cc1232e8cf438c7a833e0f8d537bc30a
§ 01 / why this exists
Kopia is written in Go — and Go has no darwin/ppc target.
Leopard’s system OpenSSL is 0.9.7, which speaks TLS 1.0, and that conversation
is over in 2026. So the usual “just install it” path ends at a dead end
on a G4 or G5.
This client doesn’t need either. It implements the repository server protocol directly — one gRPC session over HTTP/2, HPACK by hand, mbedTLS statically linked, the server certificate pinned by SHA-256. The server does the crypto; the client ships chunks.
§ 02 / how it works
Files are chunked locally with buzhash32, matching kopia’s
DYNAMIC-4M-BUZHASH splitter (2 MB min, 4 MB avg, 8 MB max).
Chunks travel as plaintext; the server encrypts them with
AES-256-GCM, computes content IDs and packs the index.
Directory objects, multi-chunk indirect objects and snapshot manifests are
written in kopia’s exact JSON formats — restores with the stock
kopia restore are byte-identical. The full wire specification
lives in docs/kopia-protocol.md.
§ 03 / quick start
On the kopia server — register the client as a server user and grant it access (ACLs apply to content, snapshots and policies):
# inside the kopia server container
kopia server user add root@my-g4 --user-password SECRET
kopia server acl add --user root@my-g4 --target type=content --access FULL
kopia server acl add --user root@my-g4 --target type=snapshot --access FULL
kopia server acl add --user root@my-g4 --target type=policy --access FULL
On the PowerPC Mac — push a path; it uploads and creates a snapshot. Wrap it in a root-owned script and schedule it:
# /usr/local/bin/kopia-cron (mode 700) /usr/local/bin/kopia-darwin-ppc kopia-push \ --url https://kopia.example.com:51515 \ --user root --hostname my-g4 \ --password SECRET \ --fingerprint XX:XX:…:XX \ /Users/youruser # root crontab 17 */4 * * * /usr/local/bin/kopia-cron
Verify from any machine with the stock CLI:
kopia snapshot list --all ·
kopia restore <snapshot-id> /dest —
no special tooling on the restore side. Full setup notes in the
README.
§ 04 / honest limits
add, compression fields are placeholders.