#!/bin/bash # Script zum Reparieren von Datenbank-Berechtigungen # Wichtig: Wenn eine Datenbank von einem anderen Server kopiert wurde, # müssen die Berechtigungen angepasst werden, damit SQLite schreiben kann. set -e echo "🔧 Repariere Datenbank-Berechtigungen..." # Datenbank-Pfad aus docker-compose.yml oder .env ermitteln DB_DIR="./data" DB_FILE="$DB_DIR/prod.db" # Prüfe ob Datenbankverzeichnis existiert if [ ! -d "$DB_DIR" ]; then echo "❌ Datenbankverzeichnis '$DB_DIR' existiert nicht!" echo " Erstelle Verzeichnis..." mkdir -p "$DB_DIR" fi # Prüfe ob Datenbankdatei existiert if [ ! -f "$DB_FILE" ]; then echo "⚠️ Datenbankdatei '$DB_FILE' existiert nicht!" echo " Das ist okay, wenn du eine neue Datenbank erstellst." echo "" echo " Setze Berechtigungen für das Verzeichnis..." else echo "✅ Datenbankdatei gefunden: $DB_FILE" fi # Setze Berechtigungen für Datenbankverzeichnis # SQLite braucht Schreibrechte auf: # 1. Die Datenbankdatei selbst # 2. Das Verzeichnis (für -wal und -shm Dateien) echo "📝 Setze Berechtigungen..." # Verzeichnis: Lesen, Schreiben, Ausführen für Owner und Gruppe chmod 775 "$DB_DIR" # Datenbankdatei: Lesen und Schreiben für Owner und Gruppe if [ -f "$DB_FILE" ]; then chmod 664 "$DB_FILE" # Auch für alle SQLite-temporären Dateien chmod 664 "$DB_DIR"/*.db-wal 2>/dev/null || true chmod 664 "$DB_DIR"/*.db-shm 2>/dev/null || true chmod 664 "$DB_DIR"/*.db-journal 2>/dev/null || true fi # Setze Besitzer: Container läuft als root, aber Datei kann node:node gehören # SQLite funktioniert, solange root die Datei lesen/schreiben kann # Setze Besitzer auf root, damit es definitiv funktioniert echo "👤 Setze Besitzer auf root (Container läuft als root)" chown -R root:root "$DB_DIR" 2>/dev/null || { echo "⚠️ Konnte Besitzer nicht ändern (vielleicht keine sudo-Rechte?)" echo " Versuche mit sudo..." sudo chown -R root:root "$DB_DIR" || echo "❌ Besitzer-Änderung fehlgeschlagen" } # Prüfe aktuelle Berechtigungen echo "" echo "📋 Aktuelle Berechtigungen:" ls -lh "$DB_DIR"/*.db* 2>/dev/null || echo " (Keine .db Dateien gefunden)" echo "" echo "✅ Berechtigungen gesetzt!" echo "" echo "💡 Wichtig für SQLite:" echo " - Die Datenbankdatei braucht Schreibrechte (rw-rw-r--)" echo " - Das Verzeichnis braucht Schreibrechte (rwxrwxr-x)" echo " - SQLite erstellt temporäre Dateien (-wal, -shm) im gleichen Verzeichnis" echo "" echo "🔄 Starte Container neu, damit die Änderungen wirksam werden:" echo " docker compose restart hoerdle"