#1141131 ITP: moraine -- snapshot backup over SSH/rsync and rclone

Package:
wnpp
Source:
wnpp
Submitter:
Thern AI Solutions
Date:
2026-08-09 17:03:02 UTC
Severity:
normal
#1141131#5
Date:
2026-06-30 05:38:31 UTC
From:
To:
Package name: moraine
Version: 0.1.1
Upstream Author: Jonaz Thern info@thern.io
URL: https://github.com/TheJonaz/moraine-backup
License:  MIT
Programming Lang: Rust
Description: snapshot backup over SSH/rsync and rclone

Moraine creates timestamped, hard-linked snapshots: each backup run
looks like a complete tree, but unchanged files share disk via hard
links, so history costs almost nothing. It restores individual files or
whole trees, prunes old snapshots with a GFS retention policy, and keeps
a run log.


Backends: rsync over SSH, and rclone (cloud, SFTP, SMB, WebDAV, S3, ...).


The package provides both the command-line client (moraine) and the GTK
4 desktop application (moraine-gui), built from one source against
Debian's GTK 4 crates.


I am the upstream author and intend to maintain the Debian package,
ideally within the Debian Rust Maintainers team. I will need a sponsor
for the initial upload.

#1141131#10
Date:
2026-06-30 10:08:42 UTC
From:
To:
Hi Jonaz,

Given the licensing uncertainty of code output by LLMs, I'm not sure
vibe-coded software is ready to be accepted in Debian.

Please expect some resistence :)

Bye!

#1141131#15
Date:
2026-06-30 10:59:50 UTC
From:
To:
Hello,

can you explain what is the advantage of using this over a 2 lines
script like this?

cp -ral directory "snapshot-$(date)"
rsync/rclone directory

Best

Il giorno mar 30 giu 2026 alle ore 07:38 Thern AI Solutions
<info@thern.io> ha scritto:

#1141131#20
Date:
2026-06-30 10:59:50 UTC
From:
To:
Hello,

can you explain what is the advantage of using this over a 2 lines
script like this?

cp -ral directory "snapshot-$(date)"
rsync/rclone directory

Best

Il giorno mar 30 giu 2026 alle ore 07:38 Thern AI Solutions
<info@thern.io> ha scritto:

#1141131#25
Date:
2026-06-30 18:31:26 UTC
From:
To:
Hi Mr/Ms/Msr Tomaselli, and thanks! That's a fair question, and you're
right that the core idea is genuinely that simple. Hard-linked snapshots
are a well-working trick, and for a single local directory your two
lines capture the essence of it.

What Moraine adds is everything around that kernel that turns it into a
robust, general-purpose tool rather than a personal script:

Remote-first. cp -ral is local-only. The common backup case is a remote
NAS/server, so Moraine uses rsync --link-dest=../latest over SSH. The
hard-linking happens on the destination in a single pass, with no
full-tree pre-copy and no separate ssh cp -ral step. It also updates the
latest symlink atomically so an interrupted run can't leave a half-built
snapshot referenced.

Retention/pruning (GFS). Snapshots otherwise grow without bound. Moraine
keeps N latest plus newest-per-day/week/month and auto-prunes after a
successful run.

Restore. Browsing a snapshot's tree and pulling back individual files or
whole trees to the client, never touching the destination. The two-liner
leaves you to do that by hand.

A second backend. Besides rsync/SSH it drives rclone (SFTP, SMB, WebDAV,
S3, cloud), where --link-dest doesn't exist and you instead need
server-side --copy-dest with capability detection. "rsync/rclone" hides
a real difference in how snapshotting has to work.

The boring-but-important bits: declarative config with multiple targets
and validation; a pre-flight check (key, connection, dest writable)
before anything runs; a run log; correct exit codes; exclude patterns;
SSH key-passphrase handling; crontab Windows Task Scheduler generation;
and a GTK desktop app for people who don't live in a terminal.

So the honest framing is: the snapshot mechanism is a few lines, but a
packaged tool is the part that makes it safe, remote, prunable,
restorable and usable by non-experts.

Happy to trim the scope if you feel a piece doesn't belong in the
initial upload.

Thanks again for the review,
Jonaz

#1141131#30
Date:
2026-06-30 18:31:26 UTC
From:
To:
Hi Mr/Ms/Msr Tomaselli, and thanks! That's a fair question, and you're
right that the core idea is genuinely that simple. Hard-linked snapshots
are a well-working trick, and for a single local directory your two
lines capture the essence of it.

What Moraine adds is everything around that kernel that turns it into a
robust, general-purpose tool rather than a personal script:

Remote-first. cp -ral is local-only. The common backup case is a remote
NAS/server, so Moraine uses rsync --link-dest=../latest over SSH. The
hard-linking happens on the destination in a single pass, with no
full-tree pre-copy and no separate ssh cp -ral step. It also updates the
latest symlink atomically so an interrupted run can't leave a half-built
snapshot referenced.

Retention/pruning (GFS). Snapshots otherwise grow without bound. Moraine
keeps N latest plus newest-per-day/week/month and auto-prunes after a
successful run.

Restore. Browsing a snapshot's tree and pulling back individual files or
whole trees to the client, never touching the destination. The two-liner
leaves you to do that by hand.

A second backend. Besides rsync/SSH it drives rclone (SFTP, SMB, WebDAV,
S3, cloud), where --link-dest doesn't exist and you instead need
server-side --copy-dest with capability detection. "rsync/rclone" hides
a real difference in how snapshotting has to work.

The boring-but-important bits: declarative config with multiple targets
and validation; a pre-flight check (key, connection, dest writable)
before anything runs; a run log; correct exit codes; exclude patterns;
SSH key-passphrase handling; crontab Windows Task Scheduler generation;
and a GTK desktop app for people who don't live in a terminal.

So the honest framing is: the snapshot mechanism is a few lines, but a
packaged tool is the part that makes it safe, remote, prunable,
restorable and usable by non-experts.

Happy to trim the scope if you feel a piece doesn't belong in the
initial upload.

Thanks again for the review,
Jonaz

#1141131#35
Date:
2026-08-09 17:01:34 UTC
From:
To:
We believe that the bug you reported is fixed in the latest version of
moraine, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1141131@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Jonaz Thern <info@thern.io> (supplier of updated moraine package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
Format: 1.8
Date: Wed, 22 Jul 2026 15:30:00 +0200
Source: moraine
Binary: moraine moraine-dbgsym
Architecture: source amd64
Version: 0.2.2-1
Distribution: unstable
Urgency: medium
Maintainer: Jonaz Thern <info@thern.io>
Changed-By: Jonaz Thern <info@thern.io>
Description:
 moraine    - snapshot backup over SSH/rsync and rclone (CLI + GTK desktop app)
Closes: 1141131
Changes:
 moraine (0.2.2-1) unstable; urgency=medium
 .
   * Initial release. (Closes: #1141131)
Checksums-Sha1:
 ad95a34df2ae54bac8e32cf661b8825777f57934 2184 moraine_0.2.2-1.dsc
 5c3040ac1e7efff05e4a900c12ecd7f0463b0f6d 332756 moraine_0.2.2.orig.tar.xz
 a53ccb6e950fecdcf01bfd2bf868c0b6d57af45d 3744 moraine_0.2.2-1.debian.tar.xz
 bab60fea35241902e03bae505637cbe0ac629ae1 19363832 moraine-dbgsym_0.2.2-1_amd64.deb
 217434cd49bc5814d75cae125ada69eb561eacdb 25833 moraine_0.2.2-1_amd64.buildinfo
 3399a563591ec196f0178a5599cb4be013801a64 1017748 moraine_0.2.2-1_amd64.deb
Checksums-Sha256:
 f98f2efbd08468ad4b6fa13725e12a989cedef7116798a592d832619985e0213 2184 moraine_0.2.2-1.dsc
 146a3853adb435c5e8760a12c9bfb4789e60027f8ea7cbd3bf892d45c7994292 332756 moraine_0.2.2.orig.tar.xz
 54684ef74e031fcc03990f6ba135b0c8f75b96d9647f298f6d1b191d81788a9d 3744 moraine_0.2.2-1.debian.tar.xz
 d166d86a080f338b136e26e8365b95d9fd768bf4f93768838fed85e120b85ede 19363832 moraine-dbgsym_0.2.2-1_amd64.deb
 673c2d97874f129dd01f4dff5cf0fcaa58ab5c706024af5d4cf07eb700a4c8d7 25833 moraine_0.2.2-1_amd64.buildinfo
 2ed4455a3b02bc841676456f684f6f0a479effb884a3acff695fbcdf43386301 1017748 moraine_0.2.2-1_amd64.deb
Files:
 0a03526ce783db6bc0333c478a8312c2 2184 utils optional moraine_0.2.2-1.dsc
 5e5ae707ceebc41450c3add6f7d09722 332756 utils optional moraine_0.2.2.orig.tar.xz
 2e214c67a1ed29ab33652b9eb84da4d9 3744 utils optional moraine_0.2.2-1.debian.tar.xz
 629ea3c8bd3608d7764275824ab5167b 19363832 debug optional moraine-dbgsym_0.2.2-1_amd64.deb
 9c3df82c48a9a97d7e4effbdae1172b0 25833 utils optional moraine_0.2.2-1_amd64.buildinfo
 500a954ea76819253ca6809e22564d51 1017748 utils optional moraine_0.2.2-1_amd64.deb
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEXHq+og+GMEWcyMi14n8s+EWML6QFAmphBiEACgkQ4n8s+EWM
L6SlNhAAs1D4dqPMH3cVgbOLJlgViyHxH6r7eDqOS5w129yTJAvTgug75D1B8r1l
8NinRy+1t9uehvKCdhcZe25TvjiEX/Z/v8MGbd1It37oahz4C9osEuT7vrZpY0m6
s+/6+ySq4vZRmv7KXkzsx3SSc4oDq8hxpnIeiK9nGpOqdVlUeQW4F2ZP0lcMhrJT
eHZQ44GDT+VAIBm9Wrbv+23Eh9un/0Um6doxeG5vU4rDUl5R76psrWRa8GiVQHpS
qBQ0W+y1g00b5Lt4jg5xh/cwoZ1NJ9s2e7i+/TcApoK55AdipkcrmuPRHvf8beVp
EppeQEwF65srggOftRw/nwG6hi4T6Nu/ajVzy10IgAjdCX/cIg2e4scU0aNEEnfs
x6MvfEqIX26Yeba6G+05cbOlLXxUTO/10eWFhki0NhLU7LFiJXHCmUuzWa2ffn3c
FnvPqGay9HfRWNPbJeKRNZaRZy4cdNnp2/4g2Ak835VUXuYMRMJJTRwy0jyTOABc
jZjD2oMfPHnYw5URIn311jxIFkdUzNLkObP8KPzRcHtaiL9CLSSUGpoQCSAgQQDI
xTW8qErtVc4ZQOXIVZ5f7KafFp5Pmvz2FgqsyACVcmEaEEiMVCOgI/iKRJ/A0Rgk
xWTkCC8FxOdmZHMZPdNYQe/VzQRPTdr00MjoX7KEg8Mn/pZYPXw=
=XtkT
-----END PGP SIGNATURE-----