Table of Contents
- sync-files.sh
- Getestet unter
- Zweck des Scripts
- Wie das Script funktioniert
- Betriebssystem-Philosophien verstehen
- Source-zu-Installation Mapping
- Berechtigungs-Strategie
- Script praktisch nutzen
- Installation validieren
- Troubleshooting
- "Not in furt source directory"
- "Permission denied" bei chown
- Target-Verzeichnis existiert nicht
- Scripts nicht ausführbar
- Script erweitern
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:
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:
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.
# 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.
# 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:
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
# 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
# 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
# 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:
# 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:
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:
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:
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:
# Manuell korrigieren
chmod +x /usr/local/share/furt/scripts/start.sh
Script erweitern
Zusätzliche Verzeichnisse
# Weitere Source-Verzeichnisse hinzufügen
[ -d "docs/" ] && cp -r docs/ "$TARGET/"
[ -d "examples/" ] && cp -r examples/ "$TARGET/"
Selektive Synchronisation
# 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
# 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.