atarixle.deWillkommen bei atarixle

16.08.2021, 08:56

Linux-Benutzerordner ohne Domäne mit Server synchronisieren (update)

Ich habe viele Laptops, alle müssen funktionieren und auf den meisten läuft Linux.

Weil es Laptops sind, die ich nicht immer im Heimnetz betreibe (und weil ich gar nicht weiß, wie es funktioniert), verzichte ich auf die Anmeldung an einer Domäne, sondern habe stattdessen auf allen Rechnern den gleichen Benutzer lokal angelegt (naheliegend). Es spielt keine Rolle, ob die UIDs der Benutzer auf allen Rechner gleich sind, was bei vielen Benutzer in einem unverhältnismäßig großen Aufwand im Vergleich zum Nutzen resultieren würde.

Dennoch hat es mir das Feature angetan, Benutzerdateien auf einem Server abzuspeichern bzw. zu synchronisieren, so wie es bei Windows möglich ist. In meinem Fall werkelt ein Raspberry Pi mit einer 4 TB USB Platte als Home-Server.

Nun brauche ich nicht wirklich das komplette Benutzerverzeichnis, sondern möchte nur bestimmte Ordner synchronisieren. Da meine Rechner-Sammlung wild gewachsen ist (oder sagt man, meine Dateistrukturen auf den Rechnern sei organisch gewachsen?), liegen die zu synchronisierenden Ordner auf allen Rechnern immer ein bisschen woanders, ganz abgesehen davon, dass der Pfad auf dem Pi ein ganz anderer ist.

Daher habe ich mir zwei Scripte geschrieben, welche die Ordner, die einen symbolischen Link in ~/roam haben, mit dem Pi synchronisieren. Eines in Richtung Pi und ein anderes in Richtung Laptop.

Bevor wir beginnen, erstellen wir auf dem Server den Ordner ~/roam:
mkdir ~/roam
Dann legen wir für alle möglichen Ordner, die wir auf mehreren Clients aktuell halten wollen, einen symbolischen Link in ~/roam an, z.B. mit
ln -s ~/Backups/Bewerbungen ~/roam/

Auf dem Client legen wir ebenfalls den Ordner ~/roam an und verknüpfen alle Ordner, die wir auf diesem Client synchronisieren möchten, z.B. mit
ln -s ~/Dokumente/Bewerbungen ~/roam/
Dabei spielt es keine Rolle, ob es weniger Ordner sind. Will ich zum Beispiel die Spielstände zwischen mehreren PCs synchron halten, brauche diese aber nicht auf den Laptops, dann lasse ich diese Verknüpfung auf dem Laptop weg.

Das folgende Script holt dann die Ordner vom Server auf den Client.

rsync_to_pi.sh
for i in ~/roam/*; do echo "sending $i"; rsync -rtuvkOe "ssh -p port" $i/* server:$i; done;

Der Teil in einschließlich den Anführungszeichen kann weggelassen werden, wenn der Server über den standardmäßigen SSH-Port erreichbar ist (22).

Dieses Script schickt die Ordner vom Client auf den Server.

rsync_from_pi.sh
for i in ~/roam/*; do echo "fetching $i"; rsync -rLtuve "ssh -p port" server:$i/* $i; chmod -R u=rwX,g=r,o=r $i/*; done;

Da meine externe Festplatte ziemlich merkwürdig eingebunden ist, korrigiere ich die lokalen Benutzerrechte mit dem Teil zwischen einschließlich chmod bis zum Semikolon. Den Teil lässt man weg, wenn die Rechte auf dem Server-Laufwerk mit gewünschten Rechten auf dem Client übereinstimmen.

Beiden Scripten gemein ist, dass nur neuere Dateien kopiert werden.
Man kann auch getrost kleinere Änderungen schnell zurück an den Server schicken, obwohl man auch große Ordner, z.B. eine Fotosammlung, synchronisiert.

Vorteile:
  • es funktioniert ohne Domäne
  • es kann ohne Änderungen am System eingerichtet werden (SSH-Zugang zum Server muss vorhanden sein, rsync muss installiert sein)
  • es werden nur neuere Dateien kopiert
  • man kann viele Rechner auf dem aktuellen Stand halten
  • die synchronisierten Order müssen nicht auf jedem Rechner am gleichen Ort sein
  • nicht alle Ordner müssen auf allen Clients synchronisiert werden
Nachteile:
  • die Scripte müssen manuell und in die richtige Richtung ausgeführt werden
  • es muss für jeden einzelnen Ordner das Benutzerpasswort des Servers eingegeben werden
  • Ordner, die man hochladen will, müssen bereits auf dem Server vorhanden sein (obgleich sie leer sein können, betrifft die Ersteinrichtung eines jeden neuen Ordners)
  • ähnlich wie bei einer Domäne muss der Benutzer auch auf dem Server existieren
  • es funktioniert mit Mac OS X nur, wenn man als root auf dem Linux-Server einen symbolischen Link setzt, der den Namen des Mac OS X Heimverzeichniss trägt:
    z.B. $ sudo mkdir /Users && ln -s $HOME /Users/
    oder # mkdir /Users && ln -s /home/{Benutzer} /Users/ (hier {Benutzer} mit dem Namen des Benutzers ersetzen)

Achtung:
Verwendung des ganzen auf eigene Gefahr!