2 sync files sh
michael edited this page 2025-09-10 14:12:26 +02:00

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.