diff --git a/setup-directories-sh.md b/setup-directories-sh.md new file mode 100644 index 0000000..01c527c --- /dev/null +++ b/setup-directories-sh.md @@ -0,0 +1,200 @@ +# setup-directories.sh + +**Verzeichnisstruktur für furt automatisch erstellen** + +## Getestet unter +- OpenBSD 7.7 +- Debian 12 +- Arch Linux + +## Zweck des Scripts + +Das `setup-directories.sh` Script erstellt die komplette Verzeichnisstruktur für furt mit korrekten betriebssystem-spezifischen Pfaden und Berechtigungen. Es behandelt Config-Verzeichnisse, Share-Dateien, Log-Verzeichnisse und PID-Files konsistent zwischen verschiedenen Systemen. + +Das Script eliminiert manuelles Erstellen von Verzeichnissen und stellt sicher dass furt alle benötigten Pfade mit korrekten Berechtigungen zur Verfügung hat. + +## Wie das Script funktioniert + +Das Script erkennt das Betriebssystem und wählt die passenden Standard-Pfade: + +```bash +if [ "$(uname)" = "OpenBSD" ]; then + CONFIG_DIR="/usr/local/etc/furt" + USER="_furt" + GROUP="_furt" +else + CONFIG_DIR="/etc/furt" + USER="furt" + GROUP="furt" +fi +``` + +Anschließend werden alle Verzeichnisse erstellt und kritische Pfade erhalten die richtigen Berechtigungen: + +```bash +mkdir -p "$CONFIG_DIR" +mkdir -p /usr/local/share/furt +mkdir -p /var/log/furt +mkdir -p /var/run/furt + +chown "$USER:$GROUP" /var/log/furt +chown "$USER:$GROUP" /var/run/furt +``` + +Das `mkdir -p` Flag sorgt dafür dass auch Parent-Verzeichnisse erstellt werden falls sie nicht existieren. Das macht das Script robust gegen verschiedene Ausgangszustände. + +## Betriebssystem-Philosophien verstehen + +Die verschiedenen Verzeichnisstrukturen spiegeln unterschiedliche System-Philosophien wider: + +### BSD-Ansatz (OpenBSD) +BSD-Systeme bevorzugen `/usr/local/` für Software die nicht Teil des Base-Systems ist. Diese klare Trennung zwischen System (`/etc`) und Third-Party (`/usr/local/etc`) verhindert Konflikte bei System-Updates. + +```bash +# OpenBSD Pfade +CONFIG_DIR="/usr/local/etc/furt" +USER="_furt" +``` + +Die `/usr/local/`-Hierarchie bleibt bei System-Updates unberührt und Software-Installationen überleben Betriebssystem-Upgrades ohne Probleme. + +### Linux-Ansatz (Debian, Arch, etc.) +Linux-Distributionen nutzen meist `/etc` für alle Konfigurationsdateien unabhängig von der Installationsquelle. Package-Manager koordinieren zwischen verschiedenen Software-Quellen. + +```bash +# Linux Pfade +CONFIG_DIR="/etc/furt" +USER="furt" +``` + +Diese Konvention macht alle Konfiguration zentral auffindbar und integriert sich nahtlos in bestehende Admin-Workflows. + +## Verzeichnis-Zwecke verstehen + +Jedes erstellte Verzeichnis hat einen spezifischen Zweck in der furt-Architektur: + +**Config-Verzeichnis:** Enthält `furt.conf` und service-spezifische Konfigurationsdateien. Root-owned, world-readable für Transparenz. + +**Share-Verzeichnis:** `/usr/local/share/furt` speichert Lua-Module, Templates und statische Ressourcen. Cross-platform-Pfad für portierbare Installations. + +**Log-Verzeichnis:** `/var/log/furt` gehört dem furt-User für Write-Zugriff. Structured Logging ohne Root-Rechte. + +**PID-Verzeichnis:** `/var/run/furt` für Process-ID-Files und Unix-Sockets. Service-owned für sichere IPC. + +## Berechtigungs-Strategie + +Das Script implementiert das Principle of Least Privilege: + +```bash +chown "$USER:$GROUP" /var/log/furt +chown "$USER:$GROUP" /var/run/furt +``` + +Nur Verzeichnisse die Write-Zugriff benötigen werden dem Service-User übertragen. Config- und Share-Verzeichnisse bleiben Root-owned weil furt dort nur lesen muss. + +Diese Strategie minimiert Schäden bei möglichen Service-Kompromittierungen - furt kann keine System-Konfiguration oder andere Services beeinflussen. + +## Script praktisch nutzen + +### Standard-Installation +```bash +# Nach setup-user.sh ausführen +sudo ./scripts/setup-directories.sh +``` + +Ausgabe bestätigt die erstellte Struktur: +``` +Created directories: + Config: /usr/local/etc/furt + Share: /usr/local/share/furt + Logs: /var/log/furt (owned by _furt) + PID: /var/run/furt (owned by _furt) +``` + +### Als Teil der orchestrierten Installation +```bash +./install.sh +# [INFO] Phase 2: Creating directory structure... OK +``` + +Das Orchestrator-Script ruft `setup-directories.sh` nach der Benutzer-Erstellung auf damit die `chown`-Operationen funktionieren. + +### Development-Setup +```bash +# Verzeichnisse für lokale Tests vorbereiten +sudo ./scripts/setup-directories.sh +# ... furt entwickeln und testen ... +``` + +## Installation validieren + +Nach der Script-Ausführung kannst du die Verzeichnisstruktur prüfen: + +```bash +# Verzeichnisse existieren? +ls -la /usr/local/etc/furt/ +ls -la /var/log/furt/ +ls -la /var/run/furt/ + +# Berechtigungen korrekt? +stat -c "%U:%G %a %n" /var/log/furt +stat -c "%U:%G %a %n" /var/run/furt +``` + +Korrekte Ausgabe zeigt Service-User-Ownership: +``` +_furt:_furt 755 /var/log/furt +_furt:_furt 755 /var/run/furt +``` + +## Troubleshooting + +### "Permission denied" bei chown +``` +chown: /var/log/furt: Operation not permitted +``` +Das Script benötigt Root-Rechte für Ownership-Änderungen: +```bash +sudo ./scripts/setup-directories.sh # Linux +doas ./scripts/setup-directories.sh # OpenBSD +``` + +### "No such user" Fehler +``` +chown: invalid user: 'furt' +``` +Das `setup-user.sh` Script muss vor `setup-directories.sh` ausgeführt werden: +```bash +sudo ./scripts/setup-user.sh # Erst Benutzer erstellen +sudo ./scripts/setup-directories.sh # Dann Verzeichnisse +``` + +### Verzeichnisse bereits vorhanden +Das Script überschreibt keine bestehenden Verzeichnisse aber ändert Berechtigungen. Bei manuell erstellten Verzeichnissen mit falschen Permissions wird das korrigiert. + +### Falsche Config-Pfade +Wenn furt die Konfiguration nicht findet, prüfe die Pfad-Erkennung: +```bash +uname # Sollte "OpenBSD" oder "Linux" zurückgeben +``` + +## Script erweitern + +### Zusätzliche Verzeichnisse +```bash +# Service-spezifische Verzeichnisse hinzufügen +mkdir -p /var/lib/furt/cache +mkdir -p /var/lib/furt/sessions +chown "$USER:$GROUP" /var/lib/furt/cache +chown "$USER:$GROUP" /var/lib/furt/sessions +``` + +### Custom Config-Pfade +```bash +# Unterstützung für alternative Installations-Prefixes +PREFIX="${PREFIX:-/usr/local}" +CONFIG_DIR="$PREFIX/etc/furt" +SHARE_DIR="$PREFIX/share/furt" +``` + +Das `setup-directories.sh` Script schafft eine konsistente, sichere Verzeichnisstruktur die sich nahtlos in verschiedene Betriebssysteme integriert und dabei bewährte Admin-Praktiken respektiert. \ No newline at end of file