Files
beeper-bridge-docker/repair.sh

102 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
echo "=== Beeper Bridge Repair Tool v2 (Python YAML Fix) ==="
# 1. Python Script erstellen, das YAML sauber manipuliert
cat << 'PYTHON_SCRIPT' > fix_yaml.py
import sys
import os
# Versuche ruamel.yaml zu importieren (Standard in mautrix images), sonst pyyaml
try:
from ruamel.yaml import YAML
yaml = YAML()
yaml.preserve_quotes = True
except ImportError:
print("WARNUNG: ruamel.yaml nicht gefunden. Nutze einfaches String-Parsing (weniger sicher).")
sys.exit(1)
files = [
"data/whatsapp/config.yaml",
"data/telegram/config.yaml",
"data/signal/config.yaml",
"data/googlechat/config.yaml"
]
# Standard Logging Config für Docker (nur Stdout)
logging_config = {
"version": 1,
"formatters": {
"colored": {
"format": "[%(asctime)s] [%(levelname)s@%(name)s] %(message)s",
"datefmt": "%b %d %H:%M:%S"
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "colored",
"stream": "ext://sys.stdout"
}
},
"root": {
"level": "INFO",
"handlers": ["console"]
}
}
for file_path in files:
if not os.path.exists(file_path):
print(f"Skipping missing file: {file_path}")
continue
print(f"Processing {file_path}...")
try:
with open(file_path, 'r') as f:
data = yaml.load(f)
# 1. Fix Database URI
if 'appservice' in data and 'database' in data['appservice']:
# Alte Struktur
if isinstance(data['appservice']['database'], str):
data['appservice']['database'] = "sqlite:////data/bridge.db"
# Neue Struktur (oft direkt unter root oder appservice.database.uri)
elif isinstance(data['appservice']['database'], dict):
data['appservice']['database']['uri'] = "sqlite:////data/bridge.db"
# Fallback: Suche nach 'database' im Root (manche Bridges)
if 'database' in data and isinstance(data['database'], dict) and 'uri' in data['database']:
data['database']['uri'] = "sqlite:////data/bridge.db"
# 2. Replace Logging Section completely
data['logging'] = logging_config
with open(file_path, 'w') as f:
yaml.dump(data, f)
print(f" -> Success.")
except Exception as e:
print(f" -> Error processing {file_path}: {e}")
PYTHON_SCRIPT
# 2. Prüfen ob Python/ruamel verfügbar ist. Wenn nicht, nutzen wir einen Docker Container zum Fixen!
# Da wir eh Docker haben, nutzen wir einfach das whatsapp image, da ist python+ruamel drin.
echo "[*] Starte Reparatur im Docker Container (um Python-Abhängigkeiten zu nutzen)..."
docker run --rm -v $(pwd):/work -w /work dock.mau.dev/mautrix/whatsapp:latest python3 fix_yaml.py
# 3. Berechtigungen nochmal setzen
echo "[*] Setze Berechtigungen auf 777..."
chmod -R 777 data/
# Cleanup
rm fix_yaml.py
echo ""
echo "=== Fertig ==="
echo "Versuche jetzt: docker compose up"