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.
$ sudo mkdir /Users && ln -s $HOME /Users/
# mkdir /Users && ln -s /home/{Benutzer} /Users/
(hier {Benutzer} mit dem Namen des Benutzers ersetzen)
Achtung:
Verwendung des ganzen auf eigene Gefahr!