- Modify the script to explicitly set the owner of the database directory to root, ensuring proper access for SQLite. - Include error handling to attempt ownership change with sudo if the initial command fails, improving robustness of the script.
77 lines
2.6 KiB
Bash
Executable File
77 lines
2.6 KiB
Bash
Executable File
#!/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"
|
|
|