Table of Contents
- setup-directories.sh
- Getestet unter
- Zweck des Scripts
- Wie das Script funktioniert
- Betriebssystem-Philosophien verstehen
- Verzeichnis-Zwecke verstehen
- Berechtigungs-Strategie
- Script praktisch nutzen
- Installation validieren
- Troubleshooting
- "Permission denied" bei chown
- "No such user" Fehler
- Verzeichnisse bereits vorhanden
- Falsche Config-Pfade
- Script erweitern
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:
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:
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.
# 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.
# 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:
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
# 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
./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
# 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:
# 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:
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:
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:
uname # Sollte "OpenBSD" oder "Linux" zurückgeben
Script erweitern
Zusätzliche Verzeichnisse
# 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
# 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.