7.9 KiB
Update-Anleitung
AdGuard Shield wird in der Go-Version über das Binary selbst installiert und aktualisiert. Es gibt kein install.sh und kein update-Shellskript mehr.
Kurzfassung
# Neues Linux-Binary bereitstellen
chmod +x ./adguard-shield
# Update durchführen
sudo ./adguard-shield update
Am Ende fragt der Updater, ob AdGuard Shield direkt neu gestartet werden soll.
Nach dem Update prüfen
sudo /opt/adguard-shield/adguard-shield install-status
sudo /opt/adguard-shield/adguard-shield status
sudo journalctl -u adguard-shield --no-pager -n 50
Neues Binary beziehen
Du brauchst ein fertiges Linux-Binary. Das kann aus einem Release, aus CI oder aus einem lokalen Build kommen.
Variante A: Release-Binary herunterladen
curl -fL -o adguard-shield-linux-amd64.tar.gz \
https://git.techniverse.net/scriptos/adguard-shield/releases/download/v1.0.0/adguard-shield-linux-amd64.tar.gz
tar -xzf adguard-shield-linux-amd64.tar.gz
chmod +x ./adguard-shield
Variante B: Lokal mit Go bauen
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o adguard-shield ./cmd/adguard-shieldd
Variante C: Per Docker bauen (ohne lokales Go)
docker run --rm -v "$PWD":/src -w /src \
-e GOOS=linux -e GOARCH=amd64 -e CGO_ENABLED=0 \
golang:1.22 go build -o adguard-shield ./cmd/adguard-shieldd
Auf dem Zielserver muss Go nicht installiert sein, wenn dort nur das fertige Binary ausgeführt wird.
Was update macht
Der Update-Befehl nutzt intern dieselbe Routine wie die Installation:
| Schritt | Aktion |
|---|---|
| 1 | Linux- und Root-Rechte prüfen |
| 2 | Auf alte Shell-Artefakte prüfen |
| 3 | Systemabhängigkeiten prüfen (sofern nicht --skip-deps) |
| 4 | Installationsverzeichnis sicherstellen |
| 5 | Neues Binary nach /opt/adguard-shield/adguard-shield kopieren |
| 6 | Konfiguration migrieren (vorhandene Werte behalten, neue ergänzen) |
| 7 | systemd-Service neu schreiben |
| 8 | systemctl daemon-reload |
| 9 | Autostart aktivieren (sofern nicht --no-enable) |
| 10 | Nachfrage: Service direkt neu starten |
Konfigurationsmigration
Vorhandene Werte bleiben erhalten. Neue Parameter werden am Ende der Datei ergänzt. Der Installer überschreibt keine bestehenden Einstellungen.
Wenn eine Migration nötig ist:
| Datei | Inhalt |
|---|---|
adguard-shield.conf |
Aktualisierte Konfiguration mit alten + neuen Parametern |
adguard-shield.conf.old |
Backup der vorherigen Datei |
Änderungen prüfen
sudo diff -u /opt/adguard-shield/adguard-shield.conf.old /opt/adguard-shield/adguard-shield.conf
Falls diff keine .old-Datei findet, war keine Konfigurationsmigration nötig.
Neue Parameter prüfen
Nach dem Update solltest du die neu ergänzten Parameter überprüfen und bei Bedarf anpassen:
sudo nano /opt/adguard-shield/adguard-shield.conf
Update-Optionen
Update mit Service-Neustart
Wenn der Service nach dem Update direkt laufen soll, bestätige die Nachfrage am Ende mit j.
Wenn du vorher manuell prüfen möchtest:
sudo ./adguard-shield update
sudo /opt/adguard-shield/adguard-shield test
sudo /opt/adguard-shield/adguard-shield dry-run
sudo systemctl restart adguard-shield
Update ohne Paketprüfung
sudo ./adguard-shield update --skip-deps
Sinnvoll, wenn iptables, ip6tables, ipset und systemctl bereits vorhanden sind oder die Paketinstallation nicht über apt-get laufen soll.
Update mit expliziter Konfigurationsquelle
sudo ./adguard-shield update --config-source ./adguard-shield.conf
Update in anderem Installationsverzeichnis
sudo ./adguard-shield update --install-dir /opt/adguard-shield-test
Hinweis: Die systemd-Unit heißt weiterhin adguard-shield.service. Mehrere parallele produktive Installationen über dieselbe Unit sind nicht vorgesehen.
Migration von der alten Shell-Version
Die Go-Version erkennt alte Shell-Artefakte und bricht ab, wenn sie noch vorhanden sind.
Typische alte Artefakte
| Datei | Funktion in der alten Version |
|---|---|
adguard-shield.sh |
Hauptskript |
iptables-helper.sh |
Firewall-Management |
external-blocklist-worker.sh |
Blocklist-Synchronisation |
external-whitelist-worker.sh |
Whitelist-Synchronisation |
geoip-worker.sh |
GeoIP-Prüfung |
offense-cleanup-worker.sh |
Offense-Bereinigung |
report-generator.sh |
Report-Erstellung |
unban-expired.sh |
Ablauf temporärer Sperren |
adguard-shield-watchdog.service |
Watchdog-Service |
adguard-shield-watchdog.timer |
Watchdog-Timer |
Warum bricht der Installer ab?
Die alte und die neue Version würden sonst dieselbe Firewall, dieselbe Konfiguration und dieselben Sperren verwalten. Das kann zu schwer nachvollziehbaren Zuständen führen, bei denen zwei Implementierungen sich gegenseitig die Regeln überschreiben.
Empfohlener Migrationsablauf
# 1. Konfiguration sichern
sudo cp /opt/adguard-shield/adguard-shield.conf /root/adguard-shield.conf.backup
# 2. Alte Shell-Version mit deren Uninstaller entfernen
# (dabei Konfiguration behalten, falls der alte Uninstaller diese Option anbietet)
# 3. Neues Go-Binary installieren und alte Konfiguration als Quelle nutzen
sudo ./adguard-shield install --config-source /root/adguard-shield.conf.backup
# 4. API-Verbindung prüfen
sudo /opt/adguard-shield/adguard-shield test
# 5. Dry-Run: prüfen, was gesperrt würde
sudo /opt/adguard-shield/adguard-shield dry-run
# 6. Produktiven Service starten
sudo systemctl start adguard-shield
sudo systemctl status adguard-shield
Wichtig: Wenn der Go-Installer Legacy-Dateien meldet, entferne nur die gemeldeten alten Artefakte der Shell-Version. Keine fremden Firewall-Regeln oder unrelated Dateien löschen.
Nach dem Update prüfen
Installation
sudo /opt/adguard-shield/adguard-shield install-status
Service
sudo systemctl status adguard-shield
sudo journalctl -u adguard-shield --no-pager -n 100
API-Verbindung
sudo /opt/adguard-shield/adguard-shield test
Laufzeitstatus
sudo /opt/adguard-shield/adguard-shield status
sudo /opt/adguard-shield/adguard-shield live --once
Firewall
sudo /opt/adguard-shield/adguard-shield firewall-status
Rollback
Ein Rollback besteht aus zwei Teilen: altes Binary wieder bereitstellen und passende Konfiguration verwenden.
Schritt-für-Schritt
# 1. Service stoppen
sudo systemctl stop adguard-shield
# 2. Altes Binary wiederherstellen
sudo cp ./adguard-shield-alte-version /opt/adguard-shield/adguard-shield
sudo chmod +x /opt/adguard-shield/adguard-shield
# 3. Service starten
sudo systemctl start adguard-shield
Konfiguration zurücksetzen (optional)
sudo cp /opt/adguard-shield/adguard-shield.conf.old /opt/adguard-shield/adguard-shield.conf
sudo systemctl restart adguard-shield
Hinweis: SQLite-Schema-Migrationen sind aktuell sehr konservativ. Trotzdem solltest du vor größeren Updates ein Backup der Datenbank erstellen, wenn dir History und aktive Sperren wichtig sind.
Backup vor größeren Updates
# Service kurz stoppen für konsistentes Backup
sudo systemctl stop adguard-shield
# Konfiguration und Datenbank sichern
sudo cp /opt/adguard-shield/adguard-shield.conf /root/adguard-shield.conf.$(date +%F)
sudo cp /var/lib/adguard-shield/adguard-shield.db /root/adguard-shield.db.$(date +%F)
# Service wieder starten
sudo systemctl start adguard-shield
WAL-Dateien beachten
Bei laufendem SQLite mit WAL können zusätzliche Dateien existieren:
| Datei | Beschreibung |
|---|---|
adguard-shield.db |
Hauptdatenbank |
adguard-shield.db-wal |
Write-Ahead-Log (enthält noch nicht in die Hauptdatei geschriebene Daten) |
adguard-shield.db-shm |
Shared-Memory-Datei |
Am saubersten ist ein kurzer Service-Stop während des Backups. So wird sichergestellt, dass alle WAL-Einträge in die Hauptdatei geschrieben werden.