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