sync files sh hinzugefügt

michael 2025-09-10 10:18:11 +02:00
parent af2a1f0847
commit 4a51ae5c83

211
sync-files-sh.md Normal file

@ -0,0 +1,211 @@
# sync-files.sh
**furt Source-Dateien in Installation-Verzeichnis synchronisieren**
## Getestet unter
- OpenBSD 7.7
- Debian 12
- Arch Linux
## Zweck des Scripts
Das `sync-files.sh` Script kopiert Source-Dateien aus dem Entwicklungsverzeichnis in das System-Installations-Verzeichnis `/usr/local/share/furt`. Es überträgt Lua-Module, Konfigurationsdateien, Scripts und Version-Informationen mit korrekten Berechtigungen.
Das Script eliminiert manuelles Kopieren während der Entwicklung und stellt sicher dass alle furt-Komponenten konsistent im Installations-Verzeichnis verfügbar sind.
## Wie das Script funktioniert
Das Script prüft zunächst ob es im korrekten Source-Verzeichnis ausgeführt wird:
```bash
if [ ! -f "src/main.lua" ]; then
echo "Error: Not in furt source directory (src/main.lua not found)"
exit 1
fi
```
Diese Validierung verhindert versehentliche Ausführung in falschen Verzeichnissen die zu unvorhersagbaren Kopier-Operationen führen könnte.
Anschließend werden die Haupt-Verzeichnisse systematisch kopiert:
```bash
cp -r src/ "$TARGET/"
cp -r config/ "$TARGET/"
cp -r scripts/ "$TARGET/"
cp -r integrations/ "$TARGET/"
```
Das `-r` Flag sorgt für rekursives Kopieren aller Unterverzeichnisse und Dateien. Die Version-Dateien werden optional kopiert falls sie existieren - das macht das Script kompatibel mit verschiedenen Development-Setups.
## Betriebssystem-Philosophien verstehen
Die Berechtigungs-Behandlung berücksichtigt unterschiedliche System-Konventionen:
### BSD-Ansatz (OpenBSD)
BSD-Systeme verwenden `root:wheel` als Standard-Ownership für System-Dateien. Die `wheel`-Gruppe repräsentiert administrative Berechtigung und ist tief in der BSD-Tradition verwurzelt.
```bash
# OpenBSD
chown -R root:wheel "$TARGET"
```
Diese Konvention stammt aus den frühen Unix-Tagen und spiegelt BSD's Fokus auf bewährte, stabile Administrationsmodelle wider.
### Linux-Ansatz (Debian, Arch, etc.)
Linux-Distributionen nutzen typisch `root:root` für System-Dateien. Dies vereinfacht das Berechtigungsmodell und ist konsistent über verschiedene Linux-Flavors hinweg.
```bash
# Linux
chown -R root:root "$TARGET"
```
Das einheitliche `root:root` Pattern macht Linux-Administration vorhersagbarer und reduziert betriebssystem-spezifische Variationen.
## Source-zu-Installation Mapping
Das Script kopiert vier Kern-Verzeichnisse die die gesamte furt-Funktionalität repräsentieren:
**src/:** Lua-Module und Core-Logic. Enthält `main.lua`, Service-Module und Bibliotheken die zur Laufzeit geladen werden.
**config/:** Beispiel-Konfigurationen und Templates. Diese Dateien dienen als Ausgangsbasis für System-spezifische Anpassungen.
**scripts/:** Utility-Scripts für Start/Stop, Testing und Wartung. Beinhaltet `start.sh` welches ausführbare Berechtigung erhält.
**integrations/:** Hugo-Shortcodes und andere Framework-Integrationen. Ermöglicht nahtlose Einbindung in bestehende Website-Workflows.
## Berechtigungs-Strategie
Das Script implementiert eine durchdachte Berechtigungs-Hierarchie:
```bash
chmod -R 644 "$TARGET" # Basis: Read-only für alle
find "$TARGET" -type d -exec chmod 755 {} \; # Verzeichnisse: Traversierbar
chmod +x "$TARGET/scripts/start.sh" # Scripts: Ausführbar
```
Diese Strategie folgt dem Principle of Least Privilege - Dateien erhalten nur die minimal notwendigen Berechtigungen für ihre Funktion.
## Script praktisch nutzen
### Development-Workflow
```bash
# Nach Code-Änderungen synchronisieren
cd /path/to/furt/source
sudo ./scripts/sync-files.sh
```
Ausgabe bestätigt die Synchronisation:
```
Copying furt files to /usr/local/share/furt...
Files synced successfully to /usr/local/share/furt
```
### Integration in Build-Process
```bash
# Als Teil des Development-Cycles
make build
./scripts/sync-files.sh
systemctl restart furt
```
Das Script fügt sich nahtlos in iterative Development-Workflows ein wo häufige Code-Updates getestet werden müssen.
### Version-Tracking mit merkwerk
```bash
# merkwerk Version-Dateien werden automatisch kopiert
merkwerk bump patch
./scripts/sync-files.sh
# VERSION und .version_history sind jetzt synchronisiert
```
Die Integration mit merkwerk ermöglicht konsistente Versionierung zwischen Source und Installation.
## Installation validieren
Nach der Script-Ausführung kannst du die Synchronisation prüfen:
```bash
# Verzeichnisstruktur validieren
ls -la /usr/local/share/furt/
ls -la /usr/local/share/furt/src/
ls -la /usr/local/share/furt/scripts/
# Berechtigungen prüfen
stat -c "%a %n" /usr/local/share/furt/scripts/start.sh
# Sollte "755" zeigen für ausführbare Scripts
```
Korrekte Synchronisation zeigt alle Source-Verzeichnisse mit entsprechenden Berechtigungen:
```
drwxr-xr-x root wheel 512 src
drwxr-xr-x root wheel 512 config
drwxr-xr-x root wheel 512 scripts
-rwxr-xr-x root wheel 1234 scripts/start.sh
```
## Troubleshooting
### "Not in furt source directory"
```
Error: Not in furt source directory (src/main.lua not found)
```
Das Script muss im furt Source-Root ausgeführt werden:
```bash
cd /path/to/furt/source # Ins richtige Verzeichnis wechseln
./scripts/sync-files.sh # Dann ausführen
```
### "Permission denied" bei chown
```
chown: /usr/local/share/furt: Operation not permitted
```
Das Script benötigt Root-Rechte für Ownership-Änderungen:
```bash
sudo ./scripts/sync-files.sh # Linux
doas ./scripts/sync-files.sh # OpenBSD
```
### Target-Verzeichnis existiert nicht
```
cp: /usr/local/share/furt/: No such file or directory
```
Das `setup-directories.sh` Script muss vor `sync-files.sh` ausgeführt werden:
```bash
sudo ./scripts/setup-directories.sh # Erst Verzeichnisse erstellen
sudo ./scripts/sync-files.sh # Dann synchronisieren
```
### Scripts nicht ausführbar
Wenn `/usr/local/share/furt/scripts/start.sh` nicht ausführbar ist, prüfe die chmod-Operation:
```bash
# Manuell korrigieren
chmod +x /usr/local/share/furt/scripts/start.sh
```
## Script erweitern
### Zusätzliche Verzeichnisse
```bash
# Weitere Source-Verzeichnisse hinzufügen
[ -d "docs/" ] && cp -r docs/ "$TARGET/"
[ -d "examples/" ] && cp -r examples/ "$TARGET/"
```
### Selektive Synchronisation
```bash
# Nur bestimmte Verzeichnisse synchronisieren
SYNC_DIRS="${SYNC_DIRS:-src config scripts integrations}"
for dir in $SYNC_DIRS; do
[ -d "$dir" ] && cp -r "$dir/" "$TARGET/"
done
```
### Backup vor Synchronisation
```bash
# Backup der bestehenden Installation
if [ -d "$TARGET" ]; then
cp -r "$TARGET" "$TARGET.backup.$(date +%Y%m%d_%H%M%S)"
fi
```
Das `sync-files.sh` Script schließt die Lücke zwischen Development und Installation durch automatisierte, sichere Synchronisation aller furt-Komponenten mit betriebssystem-angemessenen Berechtigungen.