Howto: rclone unraid edition

Nach dem erfolgreichen ersten Setup von rclone soll das Ganze nun automatisch auf einer Unraid-Instanz laufen, sprich: Ein lokaler Unraid-Server soll per Batch-Job eine im Netz laufende Nextcloud-Instanz spiegeln.

Auswahl der rclone-Installation

Schaut man sich die Community-Apps an, so finden sich eine Reihe von Möglichkeiten rclone zu installieren:

Screenshot aus dem Unraid Community-App-Store, die das Such-Ergebnis für "rclone" zeigt

UniFi-Protect-Backup, cryptomator-webdav und Rclone-mount haben jeweils spezielle Anwendungsbereiche die jedoch hier nicht wichtig sind.

rclone von Waseh installiert das executable direkt in Unraid. Das geschieht automatisch beim Starten und es wird die jeweils aktuellste Version runtgerladen. Da ist es verschmerzlich, wenn die letzte Änderung der App selbst 2022 erfolgt ist. Allerdings ist das direkte Installieren in das Unraid-Filesystem nicht genau das, wonach ich gesucht habe. Ich hätte das ganze gerne gekapselt in Docker, mit eigenem Cron.

Rclone von tynor88 hat das letzte Update vor 4 Jahren erfahren und ist daher raus.

Nacho-Rclone-Native-GUI ist nichts anderes als ein Docker-Template für Unraid. Es verweist selbst auf das offizielle rclone-Docker-Image, sollte also immer up-to-date sein. Allerdings gibt es eine Reihe von offenen Issues und der Autor des Templates benutzt offenbar Unraid nicht mehr selbst.

binhex-rclone wird regelmäßig aktualisiert und läuft als nobody-User in einem Docker-Container. Das rclone wird dabei aus den arch – Repos runtergeladen beim Erzeugen des Images. Ich entscheide mich für binhex-rclone.

Installation und Konfiguration

Nach einem Klick auf “install” erscheint die Eingabemaske für die Konfiguration des Docker-Containers. Die meisten Einstellungen können beim Default gelassen werden.

rclone arbeitet normalerweise rein passiv im Batch-Betrieb und bietet keine Ports nach außen an. Dennoch sind zwei Portforwardings – nämlich 53682 und 5572 – aktiviert:

Screenshot aus der Unraid-Container-Ansicht, mit den Default-Einstellungen

Der Port 53682 hat mit Browser-basierter Authorisierung / oauth zu tun, bei dem zwangsläufig der Browsers der Client-Maschine ins Spiel kommt um das Forwarding zwischen der Webseite des Dienste-Anbieters und der headless-Maschine auf der rclone läuft zu regeln (rclone authorize). Dieser Port tritt nur bei Verwendung entsprechender remotes und dann auch nur während des Aufrufs von rclone authorize in Erscheinung.

Über der Port 5572 bietet rclone ein web-basiertes UI an. In meiner Installation schalte ich dieses Web-UI ab, weil ich es nicht benötige. Damit bietet der Docker-Container keine Ports nach außen an.

Die Einstellungen für “Host Path2” und “Key 1” müssen nicht verändert werden. Ich führe sie nur der Vollständigkeit an:

Screenshot aus der Unraid-Container-Ansicht, mit den Default-Einstellungen

“Host Path 2” wird im Container unter /media gemountet. Die Standard-Einstellung sorgt dafür, dass alle Shares für rclone zur Verfügung stehen.

“Key1” ist der Pfad zur Konfigurationsdatei innerhalb des Containers. Diese Einstellung muss nicht geändert werden. Auf dem Unraid-Host entspricht /config dem Verzeichnis /mnt/cache/appdata/binhex-rclone:

Screenshot aus der Unraid-Container-Ansicht, mit den Default-Einstellungen

Die Datei rclone.conf muss händisch nach Anleitung erzeugt werden- ist sie nicht vorhanden startet der Container nicht. Im vorliegenden Fall habe ich die Datei bereits auf einem andern Rechner erzeugt – inkl. Verschlüsselung. Mit einer verschlüsselten Config-Datei kann der Docker-Container jedoch nichts anfangen, das Passwort wird im Klartext (bzw. obfuscated) erwartet. Eine bestehende verschlüsselte Konfiguration kann man sich mit rclone config show im Klartext anzeigen lassen:

[nextcloud]
url = https://nextcloud.example.com/remote.php/dav/files/user
vendor = nextcloud
user = user
pass = ... obfuscated passwort ...

und entsprechend auf den Unraid-Server per ssh und Copy&Paste übertragen:

mkdir -p /mnt/cache/appdata/binhex-rclone/rclone/config
vi /mnt/cache/appdata/binhex-rclone/rclone/config/rclone.conf
chown -R nobody:users /mnt/cache/appdata/binhex-rclone

Will man nun innerhalb des rclone-Remotes “nextcloud” den Ordner “bilder” auf das gleichnaminge Unraid-Share synchronisieren so muß mit dem aktuellen Image von binhex-rclone etwas tricksen, da die Implementierung implizit davon ausgeht, dass der lokale Ordner in dem Container unterhalb von “/media” dem Remote-Ordner entspricht.

Aber es gibt einen Workaround: Man erstellt ein zusätzliches Verzeichnis-Mapping, was dafür sorgt, dass der Pfad innerhalb des Containers dem Remote-Pfad entspricht:

Screenshot aus der Unraid-Container-Ansicht, mit der ein neues Pfad-Mapping erstellt wird.

Container Path: /bilder
Host Path: /mnt/user/bilder

Nun können RCLONE_MEDIA_SHARES und RCLONE_REMOTE_NAME wie folgt geändert werden:

Screenshot aus der Unraid-Container-Ansicht:

RCLONE_MEDIA_SHARES: /bilder
RCLONE_REMOTE_NAME: nextcloud

Für den ersten Versuch bietet es sich an, rclone mit der Option “–dry-run” aufzurufen. So werden die Änderungen noch nicht geschrieben und man kann sich in den Logmeldungen ansehen, ob alles den Erwartungen entspricht:

Screenshot aus der Unraid-Container-Ansicht:

RCLONE_USER_FLAGS=--dry-run

Wir wollen eine 1:1 Kopie des Remote-Ordners haben, inkl. etwaiger Datei-Löschungen, deshalb ist für RCLONE_OPERATION die Einstellung “sync” und für RCLONE_DIRECTION die Einstellung “remotetolocal” das Richtige. Eine WebUI soll nicht gestartet werden. Lässt man die WebUI auf dem Default-Wert “yes” sollte man sich auf jeden Fall Gedanken um ein Passwort machen:

Screenshot aus der Unraid-Container-Ansicht mit der geänderten Einstellung für ENABLE_WEBUI:

ENABLE_WEBUI=no

Nach dem Starten des Containers legt rclone los und man sollte sich auf dem Unraid-Server die Datei /mnt/user/appdata/binhex-rclone/rclone/logs/rclone.log ansehen. Sind dort keine Fehlermeldungen zu sehen, kann man die Option “–dry-run” aus den RCLONE_USER_FLAGS wieder entfernen.