Describe ssh:// repository URLs for current repositories (served by a
remote "borg serve --rest") and for legacy borg 1.x repositories (with
--from-borg1, served by a remote "borg serve") and add a change log
entry.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- pull-backup: switch the socat recipe to borg serve --rest with
rest:// URLs (mechanism verified end-to-end; note added that socat
pins the server-side --backend repo), fix the ssh-agent section
(borg repo-create --encryption aes256-ocb --key-location repokey
instead of borg init --encryption repokey, forced command with
--rest and --restrict-to-repository), and fix the remote-forwarding
example (rest:// URL, -r option, mandatory archive name).
- automated-local: borg init -> borg repo-create -r; convert the
borg1 repo::archive syntax in the create calls.
- hosting-repositories: the authorized_keys forced command needs
--rest (clients cannot supply it - it is deliberately not in the
client-arg allowlist), plus repo-create wording.
- image-backup: borg list -> borg repo-list -r for the archive
listing; add a note about archive series (names without timestamps
match multiple archives on extract; use aid:<id>).
All replacement commands were run against scratch repositories; the
forced-command semantics were verified via Archiver.get_args().
Co-Authored-By: Claude Fable 5 <[email protected]>
Like --remote-path, --rsh was only honoured on the legacy (borg 1.x, ssh://)
code path. For borg2 repositories the remote shell command comes from
borgstore, which reads its own BORGSTORE_RSH environment variable, so --rsh
silently had no effect there.
Remove the option; BORG_RSH is now the only way to set the remote shell
command. For borgstore-based repositories, borg gives the BORG_RSH value to
borgstore as BORGSTORE_RSH, except if that was set explicitly (then the user
wants a different command for borgstore).
borg benchmark crud does not need to inherit --rsh / --remote-path into its
sub-invocations any more (environment variables are inherited anyway), so the
parse_args wrapper is gone.
Some features like append-only repositories rely on a server-side component
that enforces them (because that shall only be controllable server-side,
not client-side).
So, that can only work, if such a server-side component exists, which is the
case for borg 1.x ssh: repositories (but not for borg 1.x non-ssh: repositories).
For borg2, we currently have:
- fs repos
- sftp: repos
- rclone: repos (enabling many different cloud providers)
- s3/b3: repos
- ssh: repos using client/server rpc code similar as in borg 1.x
So, only for the last method we have a borg server-side process that could enforce some features, but not for any of the other repo types.
For append-only the current idea is that this should not be done within borg,
but solved by a missing repo object delete permission enforced by the storage.
borg create could then use credentials that miss permission to delete,
while borg compact would use credentials that include permission to delete.
One cannot "to not x", but one can "not to x".
Avoiding split infinitives gives the added bonus that machine
translation yields better results.
setup (n/adj) vs set(v) up. We don't "I setup it" but "I set it up".
Likewise for login(n/adj) and log(v) in, backup(n/adj) and back(v) up.