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