Gerade wenn man viel und intensiv mit Debian arbeitet, sammeln sich mit der Zeit so einige Dinge an. Ich meine hier speziell:
- Konfigurationsdateien, die man mühsam ausgearbeitet und verfeinert hat
- Skripte, also kleine Helferchen, die natürlich auch irgendwohin müssen
- Aliase und Abbreviations
- Schriften
- Themes, Icons, ...
Vielleicht kennt ja der/die ein oder andere dieses Problem.
Anfangs kopierte ich dies alles einfach von Rechner zu Rechner.
Heutzutage lässt sich das allerdings sehr viel eleganter lösen.
In diesem Türchen geht es also um benutzerdefinierte Anwendersoftware und alle dazu benötigten Ressourcen. Wo kann man diese ablegen und wie hält man dies auf mehreren Rechnern synchron.
local vs. local
Für das heutige Türchen befassen wir uns mit "/usr", einem sehr wichtigen Systemverzeichnis, in dem zentral die gesamte Anwendersoftware und alle dazu benötigten Ressourcen liegen. Das Verzeichnis wird von dpkg/apt verwaltet, weshalb man hier besser nichts manuell ändern sollte. Für Änderungen gibt es zwei Verzeichnisse, welche "/usr" sozusagen überlagern:
Code: Alles auswählen
1. /usr # Systemverzeichnis, von dpkg/apt verwaltet
2. /usr/local # Systemverzeichnis, benutzerdefiniert (root), systemweit verfügbar
3. ~/.local # Benutzerverzeichnis, benutzerdefiniert (user), für einen einzelnen Benutzer verfügbar
- Soll etwas für alle Benutzer am Rechner verfügbar sein: "/usr/local"
- Soll etwas nur für einen selbst verfügbar sein: "~/.local"
In den zuvor genannten 3 Verzeichnissen existiert jeweils ein Verzeichnis namens "bin", in welchem eigene Skripte/Programme abgelegt werden können.
Das Programm zu einem eingegebenen Befehl wird dann der Reihe nach wie folgt gesucht (vereinfacht dargestellt):
Code: Alles auswählen
1. ~/.local/bin
2. /usr/local/bin
3. /usr/bin
Für die Verwendung von "~/.local/bin" muss meist noch die PATH-Variable manuell angepasst werden.
Dies kann z.B. in der ".bashrc" oder ".zshrc" geschehen:
Code: Alles auswählen
PATH=~/.local/bin:$PATH
Neben "bin" gibt es noch weitere Unterverzeichnisse, welche man gut nutzen kann. Ggf. müssen diese erst angelegt werden:
Code: Alles auswählen
├── bin # Ausführbare Skripte/Programme
├── etc # Konfigurationsdateien
├── games # Spiele
├── include # Header-Dateien für Programmierung
├── lib # Bibliotheken
├── share # Architekturunabhängige Daten
├── src # Quellcode
Hier ein paar konkrete Beispiele:
Code: Alles auswählen
/usr/local/bin # Systemweit verfügbare Skripte
/usr/local/share/color/icc # Benutzerdefinierte ICC-Farbprofile
/usr/local/share/fonts/truetype # Benutzerdefinierte TrueType-Fonts
/usr/local/share/fonts/opentype # Benutzerdefinierte OpenType-Fonts
/usr/local/share/icons # Benutzerdefinierte Icons
/usr/local/etc # Globale Konfigurationsdateien, welche von /etc verlinkt werden können
/usr/local/config # Konfigurations-Dateien welche von ~/.config verlinkt werden können
Z.B.: "/usr/local/share/fonts/truetype/google" oder "/usr/local/config/helix"
Ist man der einzige Benutzer oder Admin eines Rechners, so kann ich die Arbeit mit "/usr/local" sehr empfehlen. Neben einem selbst können so natürlich auch andere Benutzer von den dort abgelegten Sachen profitieren. Sollte hingegen kein Root-Zugriff bestehen, nutzt man eben "~/.local".
Zentrale Konfigurations-Dateien
Hat man seine Konfigurationen zentral unter "/usr/local/config" liegen, so kann bei Bedarf einfach darauf verlinkt werden.
Als Beispiel erwähnt, meine Helix-Konfiguration liegt unter "/usr/local/config/helix" worauf ich im Homeverzeichnis einfach verlinke:
Code: Alles auswählen
cd ~/.config
ln -s /usr/local/config/helix
Anfangs (so vor 15 Jahren) versuchte ich, "/usr/local" mittels "rsync" zwischen den Rechnern zu synchronisieren. Dies ist zwar möglich, allerdings auch etwas mühsam wenn Änderungen an mehreren Rechnern vorgenommen wurden. Versuche mit "unison" funktionierten da besser, jedoch ist dieses Tool auch etwas unhandlich. Heutzutage verwende ich "git", was wirklich einwandfrei läuft. Alternativ kann natürlich "svn", "cvs" oder jedes beliebige Versionsmanagement verwendet werden.
Es gibt Leute, die ihr gesamtes Home-Verzeichnis in einem Git-Repository haben. Meist reicht es aber, eines der beiden "local"-Verzeichnisse mittels Versionsmanagement zu verwalten.
Ich persönlich nutze einen kleinen OrangePi-Zero als Git-Server, über den ich alle Rechner und Laptops im Haus synchron halten kann. Änderungen sind so überall schnell verfügbar und es gibt kaum Probleme, wenn an mehreren Rechnern etwas geändert wurde.
Auf die Verwendung von Git gehe ich hier nicht weiter ein, auf Wunsch kann ich gerne noch etwas als Kommentar hinzufügen.
Schlusswort
Wie habt Ihr eure Skripte/Konfigurationen organisiert?
Nutzt ihr "~/.local" oder "/usr/local"?
Eine weitere Möglichkeit zur Verwaltung der Konfigurationsdateien bietet "chezmoi", welches im Türchen vom 9. vorgestellt wurde:
Adventskalender 9. Dezember 2024 - Was tun mit den ganzen gepunkteten Dateien?