setup directories sh hinzugefügt
parent
8fdc01616d
commit
af2a1f0847
1 changed files with 200 additions and 0 deletions
200
setup-directories-sh.md
Normal file
200
setup-directories-sh.md
Normal file
|
|
@ -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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue