sync files sh hinzugefügt
parent
af2a1f0847
commit
4a51ae5c83
1 changed files with 211 additions and 0 deletions
211
sync-files-sh.md
Normal file
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.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue