Installation
Moraine levereras med en kommandoradsklient (moraine) och en GTK-skrivbordsapp (moraine-gui, Linux). Den här guiden fokuserar på CLI:t.
| Plattform | Installation |
|---|---|
| Debian / Ubuntu / Mint | Lägg till thern.io APT-förrådet, kör sedan sudo apt install moraine |
| Fedora / RHEL | Lägg till DNF-förrådet, kör sedan sudo dnf install moraine — eller via Copr: sudo dnf copr enable jonaz/moraine |
| openSUSE | sudo zypper ar https://download.opensuse.org/repositories/home:/TheJonaz/openSUSE_Tumbleweed/home:TheJonaz.repo, kör sedan sudo zypper in moraine |
| Arch Linux | Lägg till pacman-förrådet, kör sedan sudo pacman -S moraine |
| Arch Linux (AUR) | paru -S moraine — eller git clone https://aur.archlinux.org/moraine.git && makepkg -si |
| Gentoo | eselect repository add moraine git https://github.com/TheJonaz/moraine-overlay.git, kör sedan sudo emerge -av app-backup/moraine — USE="-gui" bygger CLI:t utan att dra in GTK |
| Flatpak (alla distributioner) | flatpak remote-add --if-not-exists moraine https://cdn.thern.io/moraine.flatpakrepo, kör sedan flatpak install moraine io.thern.moraine |
| AppImage (alla distributioner) | Ladda ner, kör sedan chmod +x moraine-x86_64.AppImage && ./moraine-x86_64.AppImage — kräver glibc ≥ 2.39 (Ubuntu 24.04+, Debian 13+, Fedora 40+); äldre system: använd Flatpaken |
| Raspberry Pi (CLI) | Statiskt länkad, inga beroenden — packa upp och kör. uname -m visar vilken: aarch64 → arm64-arkivet, armv7l → armv7-arkivet |
| macOS (CLI) | brew install TheJonaz/moraine/moraine |
| Windows (CLI) | scoop bucket add moraine https://github.com/TheJonaz/scoop-moraine, sedan scoop install moraine |
| Från källkod | cargo build --release — lägg till --no-default-features för enbart CLI:t (hoppar över GTK) |
thern.io CDN är värd för GPG-signerade APT-, DNF- och pacman-förråd, så installationer uppdateras automatiskt; de exakta enradarna för att lägga till förrådet (GPG-nyckel + källrad) finns på nedladdningssidan. Varje bygge finns även på GitHub Releases. Vid körning krävs rsync + ssh för SSH-backenden; rclone för moln-/FTP-backendarna.
Snabbstart
Fyra steg från ingenting till en fungerande snapshot:
# 1. Skriv en startkonfiguration (moraine.toml, endast ägaren)
$ moraine init
# 2. Redigera den — ange host, user, dest och dina källor
$ $EDITOR moraine.toml
# 3. Se exakt vad som skulle överföras, utan att röra något
$ moraine run --dry-run
# 4. Ta den första snapshoten
$ moraine run
Varje körning skapar <dest>/<name>/<timestamp>/ på målet och uppdaterar en latest-pekare. Oförändrade filer hårdlänkas mot föregående snapshot, så historiken kostar nästan ingenting.
Som standard läser Moraine moraine.toml i den aktuella katalogen. Peka ut en annan fil med -c/--config, t.ex. moraine -c ~/.config/moraine/moraine.toml run.
Konfigurationsfilen
Konfigurationen är TOML: ett [[target]]-block per destination, vart och ett med en valfri [target.retention]. Här är ett kommenterat SSH-mål:
[[target]]
name = "nas" # mapp på målet & namn för --target
host = "192.168.1.50" # IP eller värdnamn
user = "backup" # SSH-användare
port = 22 # valfritt (standard 22)
key = "~/.ssh/id_ed25519" # valfritt; utelämna för att använda ssh-agent
dest = "/volume1/backups" # snapshots hamnar under <dest>/<name>/
sources = ["/home/me/documents", "/home/me/pictures"]
exclude = ["*.tmp", "node_modules", ".cache"] # valfritt
# strict_host_key = true # kräv att värdnyckeln redan finns i known_hosts
# vpn = "home-vpn" # NetworkManager-anslutning att starta för körningen
[target.retention] # valfritt — utelämna för att behålla allt
keep_last = 7 # behåll de 7 senaste
keep_daily = 14 # + nyaste per dag, 14 dagar
keep_weekly = 8
keep_monthly = 12
| Fält | Betydelse |
|---|---|
name | Unikt, inget / — blir en mapp under dest. |
backend | ssh (standard), rclone eller ftp. |
host, user, port | SSH-anslutningen (eller namnet på rclone-remoten i host för rclone-backenden). |
key | Sökväg till en privat SSH-nyckel. Utelämna för att använda ssh-agent. |
password | Endast för FTP-backenden, eller en lösenfras till SSH-nyckeln / ett inloggningslösenord (lagras i klartext — filen skrivs med rättigheterna 0600). |
strict_host_key | true = kräv att nyckeln finns i known_hosts (skyddar den första anslutningen). Standard är förtroende vid första anslutning. |
dest | Rotkatalog på målet. Snapshots hamnar i <dest>/<name>/<timestamp>/. |
sources | Filer/mappar på den här maskinen som ska säkerhetskopieras. Två källor får inte ha samma basnamn. |
exclude | Uteslutningsmönster för rsync. |
vpn | En NetworkManager-anslutning som startas före körningen och stängs efteråt. |
Kommandoreferens
Alla kommandon tar den globala flaggan -c/--config <file>. Utan --target verkar kommandona på alla mål.
| Kommando | Vad det gör |
|---|---|
moraine init [--force] | Skriv en exempelfil moraine.toml att utgå från. |
moraine verify [-t NAME] | Kontrollera att källorna finns, att SSH-anslutningen fungerar och att destinationen är skrivbar. |
moraine run [-t NAME] [--dry-run] | Ta en snapshot. --dry-run visar vad som skulle överföras utan att skriva något. |
moraine list -t NAME | Lista snapshotarna på ett mål. |
moraine check [-t NAME] [--snapshot TS] | Verifiera en snapshots innehåll mot de aktuella källorna, med kontrollsummor. Utan --snapshot kontrolleras den nyaste kompletta. |
moraine prune [-t NAME] [--dry-run] | Radera gamla snapshots enligt gallringsreglerna. |
$ moraine verify -t nas # testa anslutning + källor + dest
$ moraine run -t nas # snapshot av ett mål
$ moraine run --dry-run # förhandsgranska alla mål
$ moraine list -t nas # visa tidsstämplar
$ moraine prune -t nas --dry-run # visa vad gallringen skulle radera
En lyckad moraine run gallrar målet automatiskt efteråt om det har en [target.retention]-policy — så en enda schemalagd run både säkerhetskopierar och städar upp.
Ad-hoc-backuper (utan konfigurationsfil)
moraine run kan definiera ett helt mål med enbart flaggor, vilket är praktiskt för engångsjobb och skript — inget skrivs till moraine.toml:
$ moraine run --host nas --user me --key ~/.ssh/id \
--dest /backups --source ~/docs --source ~/pictures
Det fungerar för alla backends (--backend ssh|rclone|ftp) och tar upprepade --source/--exclude, plus --port, --name (snapshot-mappen under --dest, standard: värdnamnet), --bwlimit (t.ex. 2M) och --strict-host-key.
Kryptera destinationen
För rclone- och FTP-backendarna krypterar --crypt-password destinationen i vila (rclones crypt), med ett valfritt --crypt-salt. Användbart när lagringen ligger någonstans du inte kontrollerar.
Skicka hemligheter via miljön, inte via flaggor. Ett värde som anges med --password eller --crypt-password är synligt för alla andra lokala användare i ps och /proc/<pid>/cmdline. Använd MORAINE_PASSWORD och MORAINE_CRYPT_PASSWORD istället:
$ MORAINE_PASSWORD=… moraine run --host ftp.example.com --backend ftp \
--user me --dest backups --source ~/docsSå fungerar snapshots
Moraine använder rsyncs --link-dest. Varje körning skriver ett träd som ser komplett ut, men filer som inte ändrats blir hårdlänkar till föregående snapshot istället för nya kopior:
/volume1/backups/nas/
2026-07-01T02-00-00/ # första körningen — full kopia
2026-07-02T02-00-00/ # oförändrade filer är hårdlänkar → ~inget extra diskutrymme
latest -> 2026-07-02T02-00-00
Eftersom varje snapshot är ett vanligt katalogträd kan du bläddra i den eller kopiera från den med helt vanliga verktyg — inget särskilt format, ingen uppackning. Att radera en snapshot frigör bara de block som inget annat länkar till.
En avbruten körning blir aldrig en snapshot
En snapshot byggs i ett dolt arbetsområde och görs synlig först när varenda fil har överförts. SSH-backenden skriver till .incomplete-<timestamp>/ och byter namn på katalogen atomärt när körningen lyckats; rclone-/FTP-backendarna skapar först en markör <timestamp>.incomplete och raderar den sist.
list, check, återställning och gallring ignorerar alla ofärdiga snapshots. En kraschad eller avbruten körning kan därför inte bli ”den senaste snapshoten”, kan inte återställas av misstag och kan inte lura gallringen att radera din senaste kompletta backup. Rester städas bort automatiskt — vid nästa lyckade backup (SSH), eller vid nästa lyckade backup eller gallring (rclone/FTP).
Bara en körning per mål åt gången. Ett lås som fungerar över processgränser hindrar en schemalagd och en manuell körning — eller CLI:t och skrivbordsappen — från att röra samma mål samtidigt; den andra misslyckas omedelbart med target is busy. Låset släpps av sig självt om en körning kraschar.
Backends
SSH / rsync (standard)
Standardvalet. Moraine kör rsync över ssh till user@host. Autentiseringsalternativ, enklast först:
- ssh-agent — utelämna
key; nyckeln som är laddad i din agent används. - Nyckelfil — sätt
key = "~/.ssh/id_ed25519". - Lösenfras / lösenord — sätt
password; det matas till ssh viaSSH_ASKPASS, aldrig på kommandoraden.
Fjärrsidan behöver ha rsync installerat. Vid den första anslutningen accepteras en okänd värdnyckel och fästs (sätt strict_host_key = true för att istället kräva den redan från början).
rclone & FTP
Sätt backend = "rclone" och ange namnet på en rclone-remote i host (kör rclone config först). Fungerar med SFTP, SMB, WebDAV, S3, Drive, B2 med mera — inget rsync/ssh behövs, vilket gör det till det portabla valet på Windows.
[[target]]
name = "cloud"
backend = "rclone"
host = "myremote" # en rclone-remote (tomt = en lokal sökväg)
dest = "backups"
sources = ["/home/me/documents"]
För ren FTP utan rclone-konfiguration, använd backend = "ftp" med host/user/password/port. Inloggningsuppgifterna skickas till rclone via miljön, inte via processlistan.
Gallring & rensning
Gallringen följer grandfather-father-son (GFS). Varje nivå är ett antal; den nyaste snapshoten behålls alltid, och poster som inte går att tolka eller ser udda ut behålls också (raderas aldrig av misstag).
| Nyckel | Behåller |
|---|---|
keep_last | de N senaste snapshotarna, oavsett ålder |
keep_daily | den nyaste snapshoten per dag, i N dagar |
keep_weekly | den nyaste per ISO-vecka, i N veckor |
keep_monthly | den nyaste per månad, i N månader |
De behållna mängderna slås ihop till en union. Kör moraine prune -t nas --dry-run för att se exakt vad en policy skulle radera, innan den gör det.
Schemaläggning
Automatisera moraine run med cron på Linux och macOS. Eftersom en lyckad körning gallrar automatiskt räcker en rad för båda delarna:
# crontab -e — nattlig backup av alla mål kl. 02:00
0 2 * * * moraine -c /home/me/moraine.toml run >/dev/null 2>&1
# eller ett enskilt mål, varje timme
0 * * * * moraine -c /home/me/moraine.toml run -t nas >/dev/null 2>&1
Använd absoluta sökvägar till både moraine och konfigurationsfilen (cron har en minimal miljö). Skrivbordsappens flik Schedule skriver de här raderna åt dig.
Windows
På Windows installerar samma flik Schedule istället jobb i Task Scheduler: varje schema blir en uppgift under mappen \Moraine\, driven av ett litet .cmd-omslag i %APPDATA%\Moraine\tasks\. Från CLI:t pekar du en åtgärd i Task Scheduler mot moraine.exe med samma argument -c och run.
Återställa filer
En snapshot är bara ett katalogträd, så att återställa från CLI:t är en helt vanlig kopiering från målet:
# hela snapshoten
$ rsync -aAX backup@192.168.1.50:/volume1/backups/nas/latest/ ./restore/
# en enskild fil eller mapp från en viss snapshot
$ rsync -aAX backup@192.168.1.50:/volume1/backups/nas/2026-07-01T02-00-00/documents/report.odt ./
För en återställning med peka-och-klicka — bläddra i filträdet, kryssa i filer, återställ till den ursprungliga platsen eller någon annanstans — använd skrivbordsappens flik Restore (se nedan). Återställning raderar aldrig något på destinationen; den lägger bara till och skriver över.
Återställningar hoppar över symlänkar som pekar utanför det återställda trädet (rsync --safe-links), eftersom fillistan kommer från destinationen och ett komprometterat mål annars skulle kunna placera ut en länk som x → ~/.ssh och skriva genom den. Om en legitim absolut symlänk hoppas över säger rsync till — återskapa den för hand.
VPN per mål
Om ett mål bara går att nå över VPN, sätt vpn till namnet på en NetworkManager-anslutning. Moraine startar den före körningen och stänger den efteråt (och låter den vara uppe om du redan hade anslutit den själv):
vpn = "home-vpn" # nmcli connection up/down runt körningen
Lista dina anslutningar med nmcli connection show. Detta gäller även schemalagda CLI-körningar.
Säkerhet
- Hemligheter på disk är åtkomliga endast för ägaren.
moraine.tomloch körningsloggen skrivs med rättigheterna0600. Behåll det så om du lagrar ettpassword. - Hemligheter från konfigurationen når aldrig kommandoraden. SSH-autentisering går via
SSH_ASKPASS; FTP-uppgifter går via rclones miljövariabler — inget frånmoraine.tomldyker upp ips. - Ad-hoc-flaggor är undantaget — använd miljön. En lösenfras som skickas med
--passwordeller--crypt-passwordär synlig för andra lokala användare ipsoch/proc/<pid>/cmdline. FöredraMORAINE_PASSWORDochMORAINE_CRYPT_PASSWORD. - Värdnycklar. Förtroende vid första anslutning som standard;
strict_host_key = truekräver att nyckeln finns iknown_hostsredan från början. Rekommenderas för alla mål som loggar in med lösenord — förtroende vid första anslutning skulle lämna över lösenordet till den som svarar först. - Återställningar följer inte symlänkar ut ur trädet. Fillistan vid återställning kommer från destinationen — sidan som Moraine betraktar som opålitlig — så återställningar använder rsync
--safe-links. En komprometterad destination kan inte placera utx → ~/.sshoch få en återställning att skriva genom den. Avvägningen: legitima absoluta symlänkar hoppas över (rsync rapporterar varje sådan). - Nedladdningar verifieras med kontrollsumma. Varje release publicerar en
SHA256SUMSsom täcker alla filer, och skrivbordsappens uppdaterare kontrollerar det nedladdade installationsprogrammet mot den innan den erbjuder Open. - Krypterad export av konfigurationen. I skrivbordsappen skriver ⚙ Settings → Export config en lösenordsskyddad kopia (gpg AES-256) att flytta mellan maskiner.
Felsökning
| Meddelande | Vad det betyder / åtgärd |
|---|---|
--link-dest arg does not exist: ../latest | Normalt vid allra första körningen (det finns ingen tidigare snapshot ännu). Ofarligt. |
opendir "…" failed: Permission denied | En källmapp går inte att läsa — rätta rättigheterna (chown/chmod) eller lägg till den i exclude. |
rsync: command not found (på fjärrsidan) | Installera rsync på målet — SSH-backenden behöver det i båda ändar. |
Host key verification failed | Serverns nyckel har ändrats. Verifiera att den är legitim och uppdatera sedan known_hosts. |
| rsync exit 23 (partiell överföring) | Körningen misslyckades — vissa källfiler kunde inte läsas (rättigheter, I/O-fel). Snapshoten färdigställs inte och latest fortsätter peka på den föregående kompletta. Åtgärda de oläsbara källorna eller lägg dem i exclude, och kör sedan igen. (Före 0.2.0 räknades detta som en lyckad körning — ett tyst sätt att förlora data, i takt med att gallringen rensade bort de snapshots som fortfarande innehöll filerna.) |
| rsync exit 24 (filer försvann) | Normalt på ett system i drift — filer försvann mitt under körningen. Räknas ändå som lyckat; snapshoten färdigställs och latest uppdateras. |
target is busy | En annan körning (schemalagd, manuell, CLI eller skrivbordsapp) håller redan låset för det här målet. Vänta tills den är klar — låset släpps av sig självt även om den körningen kraschar. |
| rclone anonymous-login- / lösenordsfel | FTP-lösenordet kunde inte obfuskeras — kontrollera att rclone är installerat och fungerar. |
Kör moraine verify -t NAME för en snabb hälsokontroll av källor, anslutning och destination.
Skrivbordsapp (GUI)
GTK-appen (moraine-gui, Linux) använder samma motor och samma konfiguration som CLI:t — allt du ställer in i den ena dyker upp i den andra. Fem flikar:
- Quick Backup — välj ett mål, redigera anslutningen, Test connection, sedan Dry run eller Run backup med en progressindikator i realtid (mängd, hastighet, återstående tid). ⚙ Settings per mål: källor (väljarna File… / Folder…), uteslutningar, gallring, VPN, strikt värdnyckel.
- Schedule — bygg scheman (varje timme/dagligen/veckovis) och tryck Install för att lägga in dem i crontab.
- Restore — snapshotarna laddas automatiskt; välj en, bläddra i filträdet, kryssa i filer/mappar och återställ. Restore to: är förifyllt med den ursprungliga platsen och går att ändra.
- History — varje backup/återställning/gallring, lyckad eller misslyckad.
- Settings — krypterad export/import av konfigurationen, starta vid inloggning (startar minimerad till aktivitetsfältet) och appinformation.
- Help — hela funktionsuppsättningen förklarad inne i appen: backuper & snapshots, backendarna, alla avancerade målinställningar, schemaläggning, återställning och hur hemligheter hanteras. Kräver ingen internetuppkoppling.
Installera skrivbordsappen på Linux från .deb-paketet (Debian/Ubuntu/Mint) eller Arch-paketet — det lägger in både moraine och moraine-gui. Se nedladdningssidan.