Files
hoerdle/scripts/fix-database-permissions.sh
Hördle Bot 68dfba38df fix: update database permissions script to set ownership to root
- 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.
2025-12-01 16:53:48 +01:00

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"