#!/bin/sh # ============================================================================ # install-in-container.sh - Installiert den LibreBooking Node IM Docker Container # Dieses Skript wird INNERHALB des Containers ausgeführt! # ============================================================================ set -e echo "============================================" echo " LibreBooking Node - Container Installation" echo "============================================" echo "" # Funktion: Prüft ob ein Verzeichnis read-only ist check_readonly() { local dir="$1" local test_file="$dir/.write_test_$$" # Versuche eine Test-Datei zu erstellen if touch "$test_file" 2>/dev/null; then rm -f "$test_file" 2>/dev/null return 0 # Schreibbar (exit code 0 = true) else return 1 # Read-only (exit code 1 = false) fi } print_readonly_error() { local dir="$1" echo "" echo "============================================" echo " FEHLER: Read-only Volume!" echo "============================================" echo "" echo "Das Verzeichnis '$dir' ist read-only gemountet." echo "npm install und npm run build benötigen Schreibrechte." echo "" echo "LÖSUNGEN:" echo "" echo "1. Volume OHNE :ro mounten:" echo " In docker-compose.yml oder docker-compose.override.yml:" echo "" echo " volumes:" echo " - ./custom-nodes:/home/node/.n8n/custom/n8n-nodes-librebooking" echo " # NICHT:" echo " - ./custom-nodes:/home/node/.n8n/custom/n8n-nodes-librebooking:ro" echo "" echo "2. Auf dem Host bauen:" echo " Führen Sie auf dem HOST aus: ./build-on-host.sh" echo " Dann verwenden Sie: docker-compose.readonly.yml" echo "" echo "Siehe: TROUBLESHOOTING.md" exit 1 } # Mögliche Pfade für custom-nodes POSSIBLE_PATHS=" /home/node/.n8n/custom/n8n-nodes-librebooking /home/node/.n8n/custom /opt/n8n/custom-nodes /data/custom-nodes " CUSTOM_NODE_PATH="" # Finde den custom-nodes Pfad echo "[1/5] Suche custom-nodes Verzeichnis..." for path in $POSSIBLE_PATHS; do if [ -d "$path" ]; then # Prüfe ob package.json vorhanden ist if [ -f "$path/package.json" ]; then CUSTOM_NODE_PATH="$path" echo " ✓ Gefunden: $path" break elif [ -f "$path/n8n-nodes-librebooking/package.json" ]; then CUSTOM_NODE_PATH="$path/n8n-nodes-librebooking" echo " ✓ Gefunden: $CUSTOM_NODE_PATH" break fi fi done if [ -z "$CUSTOM_NODE_PATH" ]; then echo " ✗ Kein custom-nodes Verzeichnis mit package.json gefunden!" echo "" echo " Geprüfte Pfade:" for path in $POSSIBLE_PATHS; do if [ -d "$path" ]; then echo " - $path (existiert, aber keine package.json)" else echo " - $path (existiert nicht)" fi done echo "" echo " Bitte stellen Sie sicher, dass die Dateien korrekt kopiert wurden." exit 1 fi # Wechsle ins Verzeichnis echo "[2/5] Wechsle ins Verzeichnis: $CUSTOM_NODE_PATH" cd "$CUSTOM_NODE_PATH" echo " ✓ Aktuelles Verzeichnis: $(pwd)" # Prüfe ob npm verfügbar ist echo "[3/5] Prüfe npm..." if ! command -v npm >/dev/null 2>&1; then echo " ✗ npm ist nicht installiert!" echo "" echo " Im n8n Docker-Image sollte npm vorhanden sein." echo " Falls nicht, verwenden Sie ein Image mit Node.js." exit 1 fi echo " ✓ npm Version: $(npm --version)" echo " ✓ node Version: $(node --version)" # Prüfe Schreibrechte (read-only Volume?) echo "[3.5/5] Prüfe Schreibrechte..." if ! check_readonly "$CUSTOM_NODE_PATH"; then print_readonly_error "$CUSTOM_NODE_PATH" fi echo " ✓ Schreibrechte vorhanden" # Dependencies installieren echo "[4/5] Installiere Dependencies..." echo " Führe 'npm install' aus..." if npm install 2>&1; then echo " ✓ Dependencies installiert" else echo " ✗ npm install fehlgeschlagen!" echo "" echo " Mögliche Lösungen:" echo " - Prüfen Sie die Berechtigungen" echo " - Prüfen Sie die Internetverbindung" echo " - Führen Sie 'npm cache clean --force' aus" exit 1 fi # Build ausführen echo "[5/5] Baue den Node..." echo " Führe 'npm run build' aus..." if npm run build 2>&1; then echo " ✓ Build erfolgreich" else echo " ✗ Build fehlgeschlagen!" echo "" echo " Prüfen Sie die TypeScript-Fehler in der Ausgabe oben." exit 1 fi # Prüfe Ergebnis echo "" echo "============================================" echo " Prüfe Installation..." echo "============================================" if [ -d "$CUSTOM_NODE_PATH/dist" ]; then echo "✓ dist/ Verzeichnis existiert" # Prüfe auf .node.js Dateien NODE_FILES=$(find "$CUSTOM_NODE_PATH/dist" -name "*.node.js" 2>/dev/null | wc -l) if [ "$NODE_FILES" -gt 0 ]; then echo "✓ $NODE_FILES Node-Datei(en) gefunden:" find "$CUSTOM_NODE_PATH/dist" -name "*.node.js" -exec echo " - {}" \; else echo "✗ Keine .node.js Dateien im dist/ Verzeichnis gefunden!" fi # Prüfe credentials CRED_FILES=$(find "$CUSTOM_NODE_PATH/dist" -name "*.credentials.js" 2>/dev/null | wc -l) if [ "$CRED_FILES" -gt 0 ]; then echo "✓ $CRED_FILES Credential-Datei(en) gefunden" fi else echo "✗ dist/ Verzeichnis wurde nicht erstellt!" exit 1 fi echo "" echo "============================================" echo " Installation abgeschlossen!" echo "============================================" echo "" echo "Nächste Schritte:" echo " 1. Verlassen Sie den Container: exit" echo " 2. Starten Sie n8n neu: docker restart n8n" echo " 3. Öffnen Sie n8n im Browser und suchen Sie nach 'LibreBooking'" echo "" echo "Falls der Node nicht erscheint:" echo " - Prüfen Sie die Umgebungsvariable N8N_CUSTOM_EXTENSIONS" echo " - Führen Sie ./check-installation.sh aus" echo ""