- Added permission setting for backup and temporary database files to ensure proper access. - Implemented checks for file readability and ownership adjustments to enhance robustness. - Included detailed SQL commands to fix internationalization data in the database, improving data integrity.
151 lines
4.5 KiB
Bash
Executable File
151 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Fix für i18n-Daten: Kopiert DB lokal, fixt sie, kopiert zurück
|
|
|
|
set -e
|
|
|
|
echo "🔧 Fixe i18n-Daten (lokal kopieren, fixen, zurück kopieren)..."
|
|
echo ""
|
|
|
|
# Prüfe ob Container läuft
|
|
if ! docker ps | grep -q hoerdle; then
|
|
echo "❌ Container 'hoerdle' läuft nicht!"
|
|
exit 1
|
|
fi
|
|
|
|
# Backup erstellen
|
|
BACKUP_FILE="./data/prod.db.backup.$(date +%Y%m%d_%H%M%S)"
|
|
echo "💾 Erstelle Backup..."
|
|
docker cp hoerdle:/app/data/prod.db "$BACKUP_FILE"
|
|
# Setze Berechtigungen (kann root gehören)
|
|
sudo chmod 666 "$BACKUP_FILE" 2>/dev/null || chmod 666 "$BACKUP_FILE" 2>/dev/null || true
|
|
echo "✅ Backup erstellt: $BACKUP_FILE"
|
|
echo ""
|
|
|
|
# Kopiere DB lokal
|
|
echo "📥 Kopiere Datenbank lokal..."
|
|
docker cp hoerdle:/app/data/prod.db ./data/prod.db.tmp
|
|
# Setze Berechtigungen (Datei kann root gehören)
|
|
sudo chmod 666 ./data/prod.db.tmp 2>/dev/null || chmod 666 ./data/prod.db.tmp 2>/dev/null || {
|
|
echo "⚠️ Konnte Berechtigungen nicht setzen. Versuche mit sudo..."
|
|
sudo chmod 666 ./data/prod.db.tmp
|
|
}
|
|
chmod 775 ./data 2>/dev/null || sudo chmod 775 ./data 2>/dev/null || true
|
|
echo "✅ Datenbank kopiert"
|
|
echo ""
|
|
|
|
# Prüfe ob sqlite3 verfügbar ist
|
|
if ! command -v sqlite3 &> /dev/null; then
|
|
echo "❌ sqlite3 ist nicht installiert!"
|
|
echo " Installiere es mit: sudo apt-get install sqlite3"
|
|
exit 1
|
|
fi
|
|
|
|
# Fixe die Datenbank
|
|
echo "🔧 Fixe i18n-Daten..."
|
|
# Stelle sicher, dass wir Schreibrechte haben (auch für WAL-Dateien)
|
|
chmod 666 ./data/prod.db.tmp 2>/dev/null || sudo chmod 666 ./data/prod.db.tmp
|
|
chmod 775 ./data 2>/dev/null || sudo chmod 775 ./data
|
|
# Prüfe ob wir die Datei lesen können
|
|
if [ ! -r "./data/prod.db.tmp" ]; then
|
|
echo "❌ Kann Datenbankdatei nicht lesen. Setze Besitzer..."
|
|
sudo chown $(whoami):$(whoami) ./data/prod.db.tmp || true
|
|
fi
|
|
|
|
# Führe SQL-Befehle aus (mit sudo falls nötig)
|
|
if [ -r "./data/prod.db.tmp" ] && [ -w "./data" ]; then
|
|
sqlite3 ./data/prod.db.tmp << 'SQL'
|
|
-- Fix Genre.name
|
|
UPDATE Genre
|
|
SET name = json_object('de', name, 'en', name)
|
|
WHERE typeof(name) = 'text' AND name NOT LIKE '{%';
|
|
|
|
-- Fix Genre.subtitle
|
|
UPDATE Genre
|
|
SET subtitle = json_object('de', subtitle, 'en', subtitle)
|
|
WHERE subtitle IS NOT NULL AND typeof(subtitle) = 'text' AND subtitle NOT LIKE '{%';
|
|
|
|
-- Fix Special.name
|
|
UPDATE Special
|
|
SET name = json_object('de', name, 'en', name)
|
|
WHERE typeof(name) = 'text' AND name NOT LIKE '{%';
|
|
|
|
-- Fix Special.subtitle
|
|
UPDATE Special
|
|
SET subtitle = json_object('de', subtitle, 'en', subtitle)
|
|
WHERE subtitle IS NOT NULL AND typeof(subtitle) = 'text' AND subtitle NOT LIKE '{%';
|
|
|
|
-- Fix News.title
|
|
UPDATE News
|
|
SET title = json_object('de', title, 'en', title)
|
|
WHERE typeof(title) = 'text' AND title NOT LIKE '{%';
|
|
|
|
-- Fix News.content
|
|
UPDATE News
|
|
SET content = json_object('de', content, 'en', content)
|
|
WHERE typeof(content) = 'text' AND content NOT LIKE '{%';
|
|
|
|
SELECT '✅ Alle i18n-Daten wurden gefixt!' as status;
|
|
SQL
|
|
else
|
|
echo "❌ Kann Datenbankdatei nicht lesen oder schreiben!"
|
|
echo " Versuche mit sudo..."
|
|
sudo sqlite3 ./data/prod.db.tmp << 'SQL'
|
|
-- Fix Genre.name
|
|
UPDATE Genre
|
|
SET name = json_object('de', name, 'en', name)
|
|
WHERE typeof(name) = 'text' AND name NOT LIKE '{%';
|
|
|
|
-- Fix Genre.subtitle
|
|
UPDATE Genre
|
|
SET subtitle = json_object('de', subtitle, 'en', subtitle)
|
|
WHERE subtitle IS NOT NULL AND typeof(subtitle) = 'text' AND subtitle NOT LIKE '{%';
|
|
|
|
-- Fix Special.name
|
|
UPDATE Special
|
|
SET name = json_object('de', name, 'en', name)
|
|
WHERE typeof(name) = 'text' AND name NOT LIKE '{%';
|
|
|
|
-- Fix Special.subtitle
|
|
UPDATE Special
|
|
SET subtitle = json_object('de', subtitle, 'en', subtitle)
|
|
WHERE subtitle IS NOT NULL AND typeof(subtitle) = 'text' AND subtitle NOT LIKE '{%';
|
|
|
|
-- Fix News.title
|
|
UPDATE News
|
|
SET title = json_object('de', title, 'en', title)
|
|
WHERE typeof(title) = 'text' AND title NOT LIKE '{%';
|
|
|
|
-- Fix News.content
|
|
UPDATE News
|
|
SET content = json_object('de', content, 'en', content)
|
|
WHERE typeof(content) = 'text' AND content NOT LIKE '{%';
|
|
|
|
SELECT '✅ Alle i18n-Daten wurden gefixt!' as status;
|
|
SQL
|
|
fi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Fehler beim Fixen der Datenbank!"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ Datenbank gefixt"
|
|
echo ""
|
|
|
|
# Kopiere zurück
|
|
echo "📤 Kopiere gefixte Datenbank zurück..."
|
|
docker cp ./data/prod.db.tmp hoerdle:/app/data/prod.db
|
|
echo "✅ Datenbank zurück kopiert"
|
|
echo ""
|
|
|
|
# Aufräumen
|
|
rm -f ./data/prod.db.tmp ./data/prod.db.tmp.backup
|
|
|
|
echo "🔄 Starte Container neu..."
|
|
docker compose restart hoerdle
|
|
echo ""
|
|
|
|
echo "✅ Fertig! Prüfe die Logs:"
|
|
echo " docker logs hoerdle --tail=50"
|
|
|