#!/bin/sh # ============================================================================ # check-installation.sh - Debug-Skript für LibreBooking Node Installation # Kann sowohl im Container als auch auf dem Host ausgeführt werden # ============================================================================ echo "============================================" echo " LibreBooking Node - Installation Check" echo "============================================" echo "" echo "Ausgeführt: $(date)" echo "Hostname: $(hostname)" echo "" # Status-Zähler OK_COUNT=0 WARN_COUNT=0 ERROR_COUNT=0 ok() { echo "[✓] $1" OK_COUNT=$((OK_COUNT + 1)) } warn() { echo "[!] $1" WARN_COUNT=$((WARN_COUNT + 1)) } error() { echo "[✗] $1" ERROR_COUNT=$((ERROR_COUNT + 1)) } info() { echo "[i] $1" } echo "============================================" echo " 1. UMGEBUNG" echo "============================================" # Node.js/npm prüfen if command -v node >/dev/null 2>&1; then ok "Node.js installiert: $(node --version)" else error "Node.js nicht gefunden" fi if command -v npm >/dev/null 2>&1; then ok "npm installiert: $(npm --version)" else error "npm nicht gefunden" fi # Aktueller Benutzer info "Aktueller Benutzer: $(whoami) (UID: $(id -u))" echo "" echo "============================================" echo " 2. UMGEBUNGSVARIABLEN" echo "============================================" if [ -n "$N8N_CUSTOM_EXTENSIONS" ]; then ok "N8N_CUSTOM_EXTENSIONS: $N8N_CUSTOM_EXTENSIONS" else warn "N8N_CUSTOM_EXTENSIONS nicht gesetzt" info " Empfehlung: N8N_CUSTOM_EXTENSIONS=/home/node/.n8n/custom" fi if [ "$N8N_COMMUNITY_NODES_ENABLED" = "true" ]; then ok "N8N_COMMUNITY_NODES_ENABLED: true" else warn "N8N_COMMUNITY_NODES_ENABLED ist nicht 'true'" info " Aktueller Wert: ${N8N_COMMUNITY_NODES_ENABLED:-}" fi # Weitere n8n Variablen if [ -n "$N8N_LOG_LEVEL" ]; then info "N8N_LOG_LEVEL: $N8N_LOG_LEVEL" fi echo "" echo "============================================" echo " 3. VERZEICHNISSE PRÜFEN" echo "============================================" # Mögliche Pfade POSSIBLE_PATHS=" /home/node/.n8n/custom/n8n-nodes-librebooking /home/node/.n8n/custom /opt/n8n/custom-nodes /data/custom-nodes " FOUND_PATH="" for path in $POSSIBLE_PATHS; do if [ -d "$path" ]; then if [ -f "$path/package.json" ]; then ok "Custom Node Verzeichnis: $path" FOUND_PATH="$path" break elif [ -f "$path/n8n-nodes-librebooking/package.json" ]; then ok "Custom Node Verzeichnis: $path/n8n-nodes-librebooking" FOUND_PATH="$path/n8n-nodes-librebooking" break else info "Verzeichnis existiert (ohne package.json): $path" fi fi done if [ -z "$FOUND_PATH" ]; then error "Kein Custom Node Verzeichnis mit package.json gefunden!" info " Geprüfte Pfade:" for path in $POSSIBLE_PATHS; do info " - $path" done fi echo "" echo "============================================" echo " 4. NODE-DATEIEN PRÜFEN" echo "============================================" if [ -n "$FOUND_PATH" ]; then cd "$FOUND_PATH" 2>/dev/null || true # package.json if [ -f "package.json" ]; then ok "package.json vorhanden" info " Name: $(grep '"name":' package.json | head -1 | cut -d'"' -f4)" info " Version: $(grep '"version":' package.json | head -1 | cut -d'"' -f4)" else error "package.json fehlt" fi # node_modules if [ -d "node_modules" ]; then MODULE_COUNT=$(ls -1 node_modules 2>/dev/null | wc -l) ok "node_modules vorhanden ($MODULE_COUNT Pakete)" else error "node_modules fehlt - führen Sie 'npm install' aus" fi # dist Verzeichnis if [ -d "dist" ]; then ok "dist/ Verzeichnis vorhanden" # .node.js Dateien suchen echo "" info "Gefundene Node-Dateien:" NODE_FILES=$(find dist -name "*.node.js" 2>/dev/null) if [ -n "$NODE_FILES" ]; then echo "$NODE_FILES" | while read -r f; do if [ -f "$f" ]; then ok " $f ($(ls -lh "$f" | awk '{print $5}'))" fi done else error " Keine .node.js Dateien gefunden!" fi # Credentials echo "" info "Gefundene Credential-Dateien:" CRED_FILES=$(find dist -name "*.credentials.js" 2>/dev/null) if [ -n "$CRED_FILES" ]; then echo "$CRED_FILES" | while read -r f; do if [ -f "$f" ]; then ok " $f" fi done else error " Keine .credentials.js Dateien gefunden!" fi else error "dist/ Verzeichnis fehlt - führen Sie 'npm run build' aus" fi # Icons echo "" info "Icon-Dateien:" find . -name "*.svg" 2>/dev/null | while read -r f; do info " $f" done fi echo "" echo "============================================" echo " 5. BERECHTIGUNGEN" 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 else return 1 # Read-only fi } if [ -n "$FOUND_PATH" ]; then # Prüfe Schreibrechte (inkl. read-only Volume Check) if check_readonly "$FOUND_PATH"; then ok "Schreibrechte auf $FOUND_PATH" else error "KEINE Schreibrechte auf $FOUND_PATH (Read-only Volume?)" echo "" info " PROBLEM: Das Verzeichnis ist möglicherweise als :ro gemountet." info " LÖSUNG 1: Volume ohne :ro mounten:" info " - ./custom-nodes:/home/node/.n8n/custom/n8n-nodes-librebooking" info " LÖSUNG 2: Auf dem Host bauen mit ./build-on-host.sh" info " Siehe: TROUBLESHOOTING.md" echo "" fi # Besitzer prüfen OWNER=$(ls -ld "$FOUND_PATH" | awk '{print $3}') GROUP=$(ls -ld "$FOUND_PATH" | awk '{print $4}') info "Besitzer: $OWNER:$GROUP" # n8n läuft als node (UID 1000) if [ "$(id -u)" = "1000" ]; then ok "Läuft als UID 1000 (Standard für n8n)" else warn "Läuft nicht als UID 1000 (aktuell: $(id -u))" fi fi echo "" echo "============================================" echo " ZUSAMMENFASSUNG" echo "============================================" echo "" echo "Ergebnisse:" echo " ✓ OK: $OK_COUNT" echo " ! Warnung: $WARN_COUNT" echo " ✗ Fehler: $ERROR_COUNT" echo "" if [ "$ERROR_COUNT" -gt 0 ]; then echo "============================================" echo " EMPFOHLENE AKTIONEN" echo "============================================" echo "" if [ ! -d "node_modules" ] 2>/dev/null; then echo "1. Dependencies installieren:" echo " cd $FOUND_PATH && npm install" echo "" fi if [ ! -d "dist" ] 2>/dev/null; then echo "2. Node bauen:" echo " cd $FOUND_PATH && npm run build" echo "" fi echo "3. Container neustarten:" echo " docker restart n8n" echo "" exit 1 elif [ "$WARN_COUNT" -gt 0 ]; then echo "Status: TEILWEISE OK (Warnungen beachten)" exit 0 else echo "Status: ALLES OK ✓" echo "" echo "Falls der Node trotzdem nicht erscheint:" echo " 1. Starten Sie n8n neu: docker restart n8n" echo " 2. Prüfen Sie die Logs: docker logs n8n | grep -i libre" exit 0 fi