282 lines
7.6 KiB
Bash
Executable File
282 lines
7.6 KiB
Bash
Executable File
#!/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:-<nicht gesetzt>}"
|
|
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
|