feat: adguard-shield als globalen CLI-Befehl registrieren + Doku

This commit is contained in:
Patrick Asmus
2026-05-09 21:18:44 +02:00
parent de521f73ed
commit 9e3656bfbc
11 changed files with 353 additions and 226 deletions

View File

@@ -94,15 +94,16 @@ docker run --rm -v "$PWD":/src -w /src -e GOOS=linux -e GOARCH=amd64 -e CGO_ENAB
# Binary auf dem Server installieren # Binary auf dem Server installieren
sudo ./adguard-shield install sudo ./adguard-shield install
# Der Installer fragt am Ende, ob AdGuard Shield direkt gestartet werden soll. # Der Installer fragt am Ende, ob AdGuard Shield direkt gestartet werden soll.
# Dabei wird der Befehl adguard-shield in /usr/local/bin registriert.
# Konfiguration anpassen (mindestens API-Zugangsdaten und Whitelist) # Konfiguration anpassen (mindestens API-Zugangsdaten und Whitelist)
sudo nano /opt/adguard-shield/adguard-shield.conf sudo nano /opt/adguard-shield/adguard-shield.conf
# API-Verbindung testen # API-Verbindung testen
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
# Dry-Run: loggt Erkennungen, sperrt aber nicht # Dry-Run: loggt Erkennungen, sperrt aber nicht
sudo /opt/adguard-shield/adguard-shield dry-run sudo adguard-shield dry-run
# Service starten und prüfen # Service starten und prüfen
sudo systemctl start adguard-shield sudo systemctl start adguard-shield
@@ -110,6 +111,7 @@ sudo systemctl status adguard-shield
``` ```
> Beim Installieren wird der systemd-Service für den Autostart registriert und am Ende nach dem direkten Start gefragt. Die Go-Version nutzt `Restart=on-failure`; einen separaten Watchdog-Timer wie in der alten Shell-Version gibt es nicht mehr. > Beim Installieren wird der systemd-Service für den Autostart registriert und am Ende nach dem direkten Start gefragt. Die Go-Version nutzt `Restart=on-failure`; einen separaten Watchdog-Timer wie in der alten Shell-Version gibt es nicht mehr.
> Zusätzlich legt der Installer standardmäßig `/usr/local/bin/adguard-shield` als Symlink auf das installierte Binary an. Danach kannst du `sudo adguard-shield <befehl>` statt `sudo /opt/adguard-shield/adguard-shield <befehl>` verwenden.
> **Bestehende Shell-Installation?** Der Go-Installer bricht ab und meldet die gefundenen Script-Artefakte. Die alte Version muss zuerst deinstalliert werden (Konfiguration behalten). Details unter [docs/update.md](docs/update.md). > **Bestehende Shell-Installation?** Der Go-Installer bricht ab und meldet die gefundenen Script-Artefakte. Die alte Version muss zuerst deinstalliert werden (Konfiguration behalten). Details unter [docs/update.md](docs/update.md).
@@ -120,7 +122,7 @@ sudo systemctl status adguard-shield
AdGuard Shield wird über ein einzelnes Binary bedient. Die Grundform lautet: AdGuard Shield wird über ein einzelnes Binary bedient. Die Grundform lautet:
```bash ```bash
sudo /opt/adguard-shield/adguard-shield <befehl> sudo adguard-shield <befehl>
``` ```
### Installation & Updates ### Installation & Updates
@@ -130,9 +132,11 @@ sudo /opt/adguard-shield/adguard-shield <befehl>
| `install` | Binary, Konfiguration und systemd-Service installieren | | `install` | Binary, Konfiguration und systemd-Service installieren |
| `install --skip-deps` | Installation ohne automatische Paketprüfung | | `install --skip-deps` | Installation ohne automatische Paketprüfung |
| `install --no-enable` | Installation ohne systemd-Autostart | | `install --no-enable` | Installation ohne systemd-Autostart |
| `install --no-register` | Installation ohne globalen CLI-Befehl in `/usr/local/bin` |
| `install --config-source <pfad>` | Bestehende Konfiguration als Vorlage übernehmen | | `install --config-source <pfad>` | Bestehende Konfiguration als Vorlage übernehmen |
| `update` | Binary, Service und Konfiguration aktualisieren | | `update` | Binary, Service und Konfiguration aktualisieren |
| `install-status` | Installationsstatus anzeigen (Binary, Service, Version) | | `update --no-register` | Update ohne Änderung des globalen CLI-Befehls |
| `install-status` | Installationsstatus anzeigen (Binary, CLI-Befehl, Service, Version) |
| `uninstall` | Vollständige Deinstallation | | `uninstall` | Vollständige Deinstallation |
| `uninstall --keep-config` | Deinstallation mit Erhalt der Konfiguration | | `uninstall --keep-config` | Deinstallation mit Erhalt der Konfiguration |

View File

@@ -244,7 +244,11 @@ func run() error {
case "report-test": case "report-test":
return report.SendTest(ctx, cfg) return report.SendTest(ctx, cfg)
case "report-install": case "report-install":
return report.InstallCron("/opt/adguard-shield/adguard-shield", cfg.Path, cfg) binary := "/opt/adguard-shield/adguard-shield"
if _, err := os.Stat(installer.CLICommandPath); err == nil {
binary = installer.CLICommandPath
}
return report.InstallCron(binary, cfg.Path, cfg)
case "report-remove": case "report-remove":
return report.RemoveCron() return report.RemoveCron()
case "firewall-create": case "firewall-create":
@@ -463,8 +467,8 @@ func usage() {
Nutzung: Nutzung:
adguard-shield version adguard-shield version
adguard-shield install [--config-source PATH] [--skip-deps] adguard-shield install [--config-source PATH] [--skip-deps] [--no-register]
adguard-shield update [--config-source PATH] [--skip-deps] adguard-shield update [--config-source PATH] [--skip-deps] [--no-register]
adguard-shield uninstall [--keep-config] adguard-shield uninstall [--keep-config]
adguard-shield install-status adguard-shield install-status
adguard-shield [-config PATH] run|start|stop|dry-run adguard-shield [-config PATH] run|start|stop|dry-run
@@ -653,9 +657,11 @@ func parseInstallFlags(name string, args []string) (installer.Options, error) {
fs.StringVar(&opts.ConfigSource, "config-source", "", "Konfiguration fuer Neuinstallation uebernehmen") fs.StringVar(&opts.ConfigSource, "config-source", "", "Konfiguration fuer Neuinstallation uebernehmen")
fs.BoolVar(&opts.SkipDeps, "skip-deps", false, "Paketpruefung ueberspringen") fs.BoolVar(&opts.SkipDeps, "skip-deps", false, "Paketpruefung ueberspringen")
noEnable := fs.Bool("no-enable", false, "systemd Autostart nicht aktivieren") noEnable := fs.Bool("no-enable", false, "systemd Autostart nicht aktivieren")
noRegister := fs.Bool("no-register", false, "CLI-Befehl nicht in /usr/local/bin registrieren")
if err := fs.Parse(args); err != nil { if err := fs.Parse(args); err != nil {
return opts, err return opts, err
} }
opts.Enable = !*noEnable opts.Enable = !*noEnable
opts.RegisterCLI = !*noRegister
return opts, nil return opts, nil
} }

View File

@@ -25,6 +25,12 @@ Die Go-Version bündelt alle Aufgaben in einem einzelnen Binary:
/opt/adguard-shield/adguard-shield /opt/adguard-shield/adguard-shield
``` ```
Bei Installation und Update wird zusätzlich ein Symlink in den üblichen PATH gelegt:
```text
/usr/local/bin/adguard-shield -> /opt/adguard-shield/adguard-shield
```
Dieses Binary ist gleichzeitig: Dieses Binary ist gleichzeitig:
- **Daemon** für den produktiven Betrieb (Querylog-Polling, Erkennung, Sperren) - **Daemon** für den produktiven Betrieb (Querylog-Polling, Erkennung, Sperren)
@@ -33,10 +39,10 @@ Dieses Binary ist gleichzeitig:
- **Report-Generator** für HTML- und Text-Reports - **Report-Generator** für HTML- und Text-Reports
- **Hintergrundprozess** für externe Whitelist, externe Blocklist, GeoIP und Offense-Cleanup - **Hintergrundprozess** für externe Whitelist, externe Blocklist, GeoIP und Offense-Cleanup
Die meisten Befehle beginnen daher mit: Die meisten Befehle beginnen daher nach der Installation mit:
```bash ```bash
sudo /opt/adguard-shield/adguard-shield <befehl> sudo adguard-shield <befehl>
``` ```
Für Installation oder Update nutzt du das neue Binary aus dem Repository, Release oder Build-Verzeichnis: Für Installation oder Update nutzt du das neue Binary aus dem Repository, Release oder Build-Verzeichnis:

View File

@@ -6,18 +6,24 @@ AdGuard Shield wird in der Go-Version über ein einzelnes Binary bedient:
/opt/adguard-shield/adguard-shield /opt/adguard-shield/adguard-shield
``` ```
Dieses Binary ist Daemon, CLI, Installer, Updater, Uninstaller und Report-Generator. Dadurch gibt es keine getrennten Shell-Skripte mehr. Bei Installation und Update registriert der Installer zusätzlich den globalen Befehl:
```bash
/usr/local/bin/adguard-shield
```
Dieser Symlink zeigt auf das installierte Binary. Dadurch gibt es keine getrennten Shell-Skripte mehr, und du kannst AdGuard Shield nach der Installation ohne vollständigen Pfad aufrufen.
## Grundform ## Grundform
```bash ```bash
sudo /opt/adguard-shield/adguard-shield <befehl> sudo adguard-shield <befehl>
``` ```
Wenn du eine andere Konfigurationsdatei verwenden möchtest, muss `-config` direkt vor dem Befehl stehen: Wenn du eine andere Konfigurationsdatei verwenden möchtest, muss `-config` direkt vor dem Befehl stehen:
```bash ```bash
sudo /opt/adguard-shield/adguard-shield -config /pfad/zur/adguard-shield.conf status sudo adguard-shield -config /pfad/zur/adguard-shield.conf status
``` ```
### Standardpfade ### Standardpfade
@@ -25,6 +31,7 @@ sudo /opt/adguard-shield/adguard-shield -config /pfad/zur/adguard-shield.conf st
| Datei | Pfad | | Datei | Pfad |
|---|---| |---|---|
| Binary | `/opt/adguard-shield/adguard-shield` | | Binary | `/opt/adguard-shield/adguard-shield` |
| CLI-Befehl | `/usr/local/bin/adguard-shield` |
| Konfiguration | `/opt/adguard-shield/adguard-shield.conf` | | Konfiguration | `/opt/adguard-shield/adguard-shield.conf` |
| SQLite-Datenbank | `/var/lib/adguard-shield/adguard-shield.db` | | SQLite-Datenbank | `/var/lib/adguard-shield/adguard-shield.db` |
| Logdatei | `/var/log/adguard-shield.log` | | Logdatei | `/var/log/adguard-shield.log` |
@@ -34,13 +41,13 @@ sudo /opt/adguard-shield/adguard-shield -config /pfad/zur/adguard-shield.conf st
```bash ```bash
# Version anzeigen # Version anzeigen
/opt/adguard-shield/adguard-shield version adguard-shield version
# Installation und Update # Installation und Update
sudo ./adguard-shield install sudo ./adguard-shield install
sudo ./adguard-shield update sudo ./adguard-shield update
sudo ./adguard-shield install-status sudo adguard-shield install-status
sudo /opt/adguard-shield/adguard-shield uninstall --keep-config sudo adguard-shield uninstall --keep-config
# Service-Management über systemd # Service-Management über systemd
sudo systemctl start adguard-shield sudo systemctl start adguard-shield
@@ -49,16 +56,16 @@ sudo systemctl restart adguard-shield
sudo systemctl status adguard-shield sudo systemctl status adguard-shield
# Diagnose und Monitoring # Diagnose und Monitoring
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
sudo /opt/adguard-shield/adguard-shield live sudo adguard-shield live
sudo /opt/adguard-shield/adguard-shield history 100 sudo adguard-shield history 100
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100 sudo adguard-shield logs --level warn --limit 100
# Manuelle Eingriffe # Manuelle Eingriffe
sudo /opt/adguard-shield/adguard-shield ban 192.168.1.100 sudo adguard-shield ban 192.168.1.100
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100 sudo adguard-shield unban 192.168.1.100
sudo /opt/adguard-shield/adguard-shield flush sudo adguard-shield flush
``` ```
--- ---
@@ -71,6 +78,12 @@ Das installierte Binary landet standardmäßig unter:
/opt/adguard-shield/adguard-shield /opt/adguard-shield/adguard-shield
``` ```
Zusätzlich wird standardmäßig dieser CLI-Befehl angelegt:
```text
/usr/local/bin/adguard-shield -> /opt/adguard-shield/adguard-shield
```
### Standardinstallation ### Standardinstallation
```bash ```bash
@@ -87,6 +100,7 @@ Am Ende fragt der Installer, ob AdGuard Shield direkt gestartet oder neu gestart
| `--config-source <pfad>` | Bestehende Konfigurationsdatei als Vorlage übernehmen | | `--config-source <pfad>` | Bestehende Konfigurationsdatei als Vorlage übernehmen |
| `--skip-deps` | Automatische Paketprüfung und -installation überspringen | | `--skip-deps` | Automatische Paketprüfung und -installation überspringen |
| `--no-enable` | systemd-Autostart nicht aktivieren | | `--no-enable` | systemd-Autostart nicht aktivieren |
| `--no-register` | Globalen CLI-Befehl `/usr/local/bin/adguard-shield` nicht anlegen |
| `--install-dir <pfad>` | Abweichendes Installationsverzeichnis verwenden | | `--install-dir <pfad>` | Abweichendes Installationsverzeichnis verwenden |
**Beispiele:** **Beispiele:**
@@ -98,6 +112,9 @@ sudo ./adguard-shield install --config-source ./adguard-shield.conf
# Ohne Paketprüfung installieren # Ohne Paketprüfung installieren
sudo ./adguard-shield install --skip-deps sudo ./adguard-shield install --skip-deps
# Ohne globalen CLI-Befehl installieren
sudo ./adguard-shield install --no-register
# In anderes Verzeichnis installieren # In anderes Verzeichnis installieren
sudo ./adguard-shield install --install-dir /opt/adguard-shield-test sudo ./adguard-shield install --install-dir /opt/adguard-shield-test
``` ```
@@ -113,11 +130,12 @@ Der Installer führt diese Schritte automatisch durch:
| 3 | Installation fehlender Abhängigkeiten über `apt-get` (sofern möglich) | | 3 | Installation fehlender Abhängigkeiten über `apt-get` (sofern möglich) |
| 4 | Anlage von Installations- und State-Verzeichnissen | | 4 | Anlage von Installations- und State-Verzeichnissen |
| 5 | Kopieren des Binarys nach `/opt/adguard-shield/` | | 5 | Kopieren des Binarys nach `/opt/adguard-shield/` |
| 6 | Anlage oder Migration der Konfiguration | | 6 | CLI-Befehl `/usr/local/bin/adguard-shield` registrieren (sofern nicht `--no-register`) |
| 7 | Schreiben der systemd-Unit | | 7 | Report-Templates installieren |
| 8 | `systemctl daemon-reload` | | 8 | Anlage oder Migration der Konfiguration |
| 9 | Optional: Autostart aktivieren | | 9 | Schreiben der systemd-Unit |
| 10 | Nachfrage: Service direkt starten oder neu starten | | 10 | `systemctl daemon-reload` und optional Autostart aktivieren |
| 11 | Nachfrage: Service direkt starten oder neu starten |
### Benötigte Systembefehle ### Benötigte Systembefehle
@@ -149,9 +167,16 @@ Am Ende fragt der Updater, ob AdGuard Shield direkt neu gestartet werden soll.
sudo ./adguard-shield update --config-source ./adguard-shield.conf sudo ./adguard-shield update --config-source ./adguard-shield.conf
``` ```
### Update ohne CLI-Registrierung
```bash
sudo ./adguard-shield update --no-register
```
### Was beim Update passiert ### Was beim Update passiert
- Die Installation wird wie bei `install` aktualisiert - Die Installation wird wie bei `install` aktualisiert
- Der CLI-Befehl `/usr/local/bin/adguard-shield` wird angelegt oder bestätigt, sofern `--no-register` nicht gesetzt ist
- Vorhandene Konfiguration bleibt erhalten - Vorhandene Konfiguration bleibt erhalten
- Neue Konfigurationsparameter werden ergänzt - Neue Konfigurationsparameter werden ergänzt
- Bei einer Migration wird `adguard-shield.conf.old` geschrieben - Bei einer Migration wird `adguard-shield.conf.old` geschrieben
@@ -164,13 +189,14 @@ Weitere Details stehen in der [Update-Anleitung](update.md).
## Installationsstatus ## Installationsstatus
```bash ```bash
sudo ./adguard-shield install-status sudo adguard-shield install-status
``` ```
Zeigt eine Übersicht mit: Zeigt eine Übersicht mit:
- Installationspfad und Binary-Status - Installationspfad und Binary-Status
- Installierte Version - Installierte Version
- CLI-Befehl in `/usr/local/bin` vorhanden
- Konfiguration vorhanden - Konfiguration vorhanden
- systemd-Service vorhanden und Status - systemd-Service vorhanden und Status
- Autostart aktiv - Autostart aktiv
@@ -188,10 +214,10 @@ sudo ./adguard-shield install-status --install-dir /opt/adguard-shield-test
```bash ```bash
# Vollständige Deinstallation # Vollständige Deinstallation
sudo /opt/adguard-shield/adguard-shield uninstall sudo adguard-shield uninstall
# Deinstallation mit Konfigurationserhalt # Deinstallation mit Konfigurationserhalt
sudo /opt/adguard-shield/adguard-shield uninstall --keep-config sudo adguard-shield uninstall --keep-config
``` ```
**Was bei der Deinstallation passiert:** **Was bei der Deinstallation passiert:**
@@ -275,19 +301,19 @@ Für Debugging oder Dry-Run kann der Daemon im Vordergrund gestartet werden:
```bash ```bash
# Normaler Vordergrundlauf # Normaler Vordergrundlauf
sudo /opt/adguard-shield/adguard-shield run sudo adguard-shield run
# Alias für run # Alias für run
sudo /opt/adguard-shield/adguard-shield start sudo adguard-shield start
# Analysieren ohne echte Sperren # Analysieren ohne echte Sperren
sudo /opt/adguard-shield/adguard-shield dry-run sudo adguard-shield dry-run
``` ```
### Daemon über PID-Datei stoppen ### Daemon über PID-Datei stoppen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield stop sudo adguard-shield stop
``` ```
Für den Alltag gilt: Nutze `systemctl`. Der direkte Vordergrundlauf endet, sobald die Shell beendet wird oder du `Strg+C` drückst. Für den Alltag gilt: Nutze `systemctl`. Der direkte Vordergrundlauf endet, sobald die Shell beendet wird oder du `Strg+C` drückst.
@@ -297,7 +323,7 @@ Für den Alltag gilt: Nutze `systemctl`. Der direkte Vordergrundlauf endet, soba
## API-Test ## API-Test
```bash ```bash
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
``` ```
Der `test`-Befehl prüft die Verbindung zur AdGuard-Home-API: Der `test`-Befehl prüft die Verbindung zur AdGuard-Home-API:
@@ -322,7 +348,7 @@ Wenn der Test fehlschlägt, zuerst die Konfiguration und die AdGuard-Home-Webobe
## Status ## Status
```bash ```bash
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
``` ```
Zeigt eine Übersicht des aktuellen Zustands: Zeigt eine Übersicht des aktuellen Zustands:
@@ -341,7 +367,7 @@ Bei sehr vielen aktiven Sperren werden nur die ersten 50 angezeigt. Für Details
## Live-Ansicht ## Live-Ansicht
```bash ```bash
sudo /opt/adguard-shield/adguard-shield live sudo adguard-shield live
``` ```
Die `live`-Ansicht ist das beste Werkzeug, wenn du verstehen möchtest, was gerade passiert. Sie zeigt in Echtzeit: Die `live`-Ansicht ist das beste Werkzeug, wenn du verstehen möchtest, was gerade passiert. Sie zeigt in Echtzeit:
@@ -371,7 +397,7 @@ Die `live`-Ansicht ist das beste Werkzeug, wenn du verstehen möchtest, was gera
### Alias ### Alias
```bash ```bash
sudo /opt/adguard-shield/adguard-shield watch sudo adguard-shield watch
``` ```
--- ---
@@ -380,10 +406,10 @@ sudo /opt/adguard-shield/adguard-shield watch
```bash ```bash
# Letzte 50 Einträge (Standard) # Letzte 50 Einträge (Standard)
sudo /opt/adguard-shield/adguard-shield history sudo adguard-shield history
# Letzte 200 Einträge # Letzte 200 Einträge
sudo /opt/adguard-shield/adguard-shield history 200 sudo adguard-shield history 200
``` ```
Die History kommt aus der SQLite-Tabelle `ban_history`. Die History kommt aus der SQLite-Tabelle `ban_history`.
@@ -432,16 +458,16 @@ AdGuard Shield schreibt Daemon-Ereignisse in `LOG_FILE`, standardmäßig:
```bash ```bash
# Letzte INFO/WARN/ERROR-Einträge # Letzte INFO/WARN/ERROR-Einträge
sudo /opt/adguard-shield/adguard-shield logs sudo adguard-shield logs
# Letzte 100 Warnungen und Fehler # Letzte 100 Warnungen und Fehler
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100 sudo adguard-shield logs --level warn --limit 100
# Kurzform (Level als Argument) # Kurzform (Level als Argument)
sudo /opt/adguard-shield/adguard-shield logs debug sudo adguard-shield logs debug
# Laufende Ansicht (wie tail -f) # Laufende Ansicht (wie tail -f)
sudo /opt/adguard-shield/adguard-shield logs-follow --level info sudo adguard-shield logs-follow --level info
``` ```
### Erlaubte Log-Level ### Erlaubte Log-Level
@@ -469,7 +495,7 @@ sudo journalctl -u adguard-shield --no-pager -n 100
### IP permanent sperren ### IP permanent sperren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield ban 192.168.1.100 sudo adguard-shield ban 192.168.1.100
``` ```
Legt eine manuelle permanente Sperre an. Die IP wird sofort in die Firewall eingetragen. Legt eine manuelle permanente Sperre an. Die IP wird sofort in die Firewall eingetragen.
@@ -477,7 +503,7 @@ Legt eine manuelle permanente Sperre an. Die IP wird sofort in die Firewall eing
### IP entsperren ### IP entsperren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100 sudo adguard-shield unban 192.168.1.100
``` ```
Entfernt die IP aus Firewall und Datenbank. Funktioniert für alle Sperrtypen (automatisch, manuell, GeoIP, Blocklist). Entfernt die IP aus Firewall und Datenbank. Funktioniert für alle Sperrtypen (automatisch, manuell, GeoIP, Blocklist).
@@ -485,7 +511,7 @@ Entfernt die IP aus Firewall und Datenbank. Funktioniert für alle Sperrtypen (a
### Alle Sperren aufheben ### Alle Sperren aufheben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield flush sudo adguard-shield flush
``` ```
Hebt alle aktiven Sperren auf. Bei aktivierten Benachrichtigungen wird eine zusammenfassende Meldung gesendet, nicht eine Nachricht pro IP. Hebt alle aktiven Sperren auf. Bei aktivierten Benachrichtigungen wird eine zusammenfassende Meldung gesendet, nicht eine Nachricht pro IP.
@@ -499,7 +525,7 @@ Hebt alle aktiven Sperren auf. Bei aktivierten Benachrichtigungen wird eine zusa
### Offense-Status anzeigen ### Offense-Status anzeigen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield offense-status sudo adguard-shield offense-status
``` ```
Zeigt die Gesamtzahl der Offense-Zähler, davon abgelaufene, und die Konfiguration. Zeigt die Gesamtzahl der Offense-Zähler, davon abgelaufene, und die Konfiguration.
@@ -507,19 +533,19 @@ Zeigt die Gesamtzahl der Offense-Zähler, davon abgelaufene, und die Konfigurati
### Abgelaufene Zähler entfernen ### Abgelaufene Zähler entfernen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield offense-cleanup sudo adguard-shield offense-cleanup
``` ```
### Alle Offense-Zähler zurücksetzen ### Alle Offense-Zähler zurücksetzen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield reset-offenses sudo adguard-shield reset-offenses
``` ```
### Zähler für eine IP zurücksetzen ### Zähler für eine IP zurücksetzen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield reset-offenses 192.168.1.100 sudo adguard-shield reset-offenses 192.168.1.100
``` ```
### Typischer Ablauf nach Fehlkonfiguration ### Typischer Ablauf nach Fehlkonfiguration
@@ -528,10 +554,10 @@ Wenn ein Client fälschlicherweise eskaliert wurde:
```bash ```bash
# Sperre aufheben # Sperre aufheben
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100 sudo adguard-shield unban 192.168.1.100
# Offense-Zähler zurücksetzen # Offense-Zähler zurücksetzen
sudo /opt/adguard-shield/adguard-shield reset-offenses 192.168.1.100 sudo adguard-shield reset-offenses 192.168.1.100
# IP dauerhaft in Whitelist aufnehmen (in adguard-shield.conf) # IP dauerhaft in Whitelist aufnehmen (in adguard-shield.conf)
# WHITELIST="127.0.0.1,::1,192.168.1.100" # WHITELIST="127.0.0.1,::1,192.168.1.100"
@@ -545,13 +571,13 @@ sudo systemctl restart adguard-shield
### Chain und ipsets anlegen ### Chain und ipsets anlegen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-create sudo adguard-shield firewall-create
``` ```
### Status anzeigen ### Status anzeigen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-status sudo adguard-shield firewall-status
``` ```
Zeigt die aktuelle Firewall-Struktur: Chain, ipsets und eingehängte Regeln. Zeigt die aktuelle Firewall-Struktur: Chain, ipsets und eingehängte Regeln.
@@ -559,7 +585,7 @@ Zeigt die aktuelle Firewall-Struktur: Chain, ipsets und eingehängte Regeln.
### ipsets leeren ### ipsets leeren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-flush sudo adguard-shield firewall-flush
``` ```
Entfernt alle IPs aus den ipsets. Die Firewall-Struktur (Chain, Regeln) bleibt bestehen. Entfernt alle IPs aus den ipsets. Die Firewall-Struktur (Chain, Regeln) bleibt bestehen.
@@ -567,13 +593,13 @@ Entfernt alle IPs aus den ipsets. Die Firewall-Struktur (Chain, Regeln) bleibt b
### Chain und ipsets vollständig entfernen ### Chain und ipsets vollständig entfernen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-remove sudo adguard-shield firewall-remove
``` ```
### Firewall-Regeln sichern ### Firewall-Regeln sichern
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-save sudo adguard-shield firewall-save
``` ```
Speichert die aktuellen Regeln nach: Speichert die aktuellen Regeln nach:
@@ -586,7 +612,7 @@ Speichert die aktuellen Regeln nach:
### Gesicherte Regeln wiederherstellen ### Gesicherte Regeln wiederherstellen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-restore sudo adguard-shield firewall-restore
``` ```
**Hinweis:** Normalerweise musst du diese Befehle nicht manuell ausführen. Der Daemon erstellt die Firewall beim Start und schreibt aktive Sperren aus SQLite wieder hinein. Welche Host-Chain genutzt wird, hängt von `FIREWALL_MODE` ab. Details stehen in [Docker-Installationen](docker.md). **Hinweis:** Normalerweise musst du diese Befehle nicht manuell ausführen. Der Daemon erstellt die Firewall beim Start und schreibt aktive Sperren aus SQLite wieder hinein. Welche Host-Chain genutzt wird, hängt von `FIREWALL_MODE` ab. Details stehen in [Docker-Installationen](docker.md).
@@ -598,19 +624,19 @@ sudo /opt/adguard-shield/adguard-shield firewall-restore
### Status anzeigen ### Status anzeigen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield whitelist-status sudo adguard-shield whitelist-status
``` ```
### Sofort synchronisieren ### Sofort synchronisieren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield whitelist-sync sudo adguard-shield whitelist-sync
``` ```
### Aufgelöste externe Whitelist entfernen ### Aufgelöste externe Whitelist entfernen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield whitelist-flush sudo adguard-shield whitelist-flush
``` ```
### Hinweise ### Hinweise
@@ -629,19 +655,19 @@ sudo /opt/adguard-shield/adguard-shield whitelist-flush
### Status anzeigen ### Status anzeigen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield blocklist-status sudo adguard-shield blocklist-status
``` ```
### Sofort synchronisieren ### Sofort synchronisieren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield blocklist-sync sudo adguard-shield blocklist-sync
``` ```
### Alle Sperren aus externer Blocklist aufheben ### Alle Sperren aus externer Blocklist aufheben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield blocklist-flush sudo adguard-shield blocklist-flush
``` ```
### Hinweise ### Hinweise
@@ -658,13 +684,13 @@ sudo /opt/adguard-shield/adguard-shield blocklist-flush
### Status anzeigen ### Status anzeigen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield geoip-status sudo adguard-shield geoip-status
``` ```
### Einzelne IP nachschlagen ### Einzelne IP nachschlagen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield geoip-lookup 8.8.8.8 sudo adguard-shield geoip-lookup 8.8.8.8
``` ```
**Ausgabe:** **Ausgabe:**
@@ -676,7 +702,7 @@ IP: 8.8.8.8 -> Land: US
### Aktuelle Clients prüfen ### Aktuelle Clients prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield geoip-sync sudo adguard-shield geoip-sync
``` ```
Liest das aktuelle Querylog und prüft alle darin enthaltenen Client-IPs einmalig gegen die GeoIP-Regeln. Liest das aktuelle Querylog und prüft alle darin enthaltenen Client-IPs einmalig gegen die GeoIP-Regeln.
@@ -684,13 +710,13 @@ Liest das aktuelle Querylog und prüft alle darin enthaltenen Client-IPs einmali
### Alle GeoIP-Sperren aufheben ### Alle GeoIP-Sperren aufheben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield geoip-flush sudo adguard-shield geoip-flush
``` ```
### Cache leeren ### Cache leeren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield geoip-flush-cache sudo adguard-shield geoip-flush-cache
``` ```
### Hinweise ### Hinweise
@@ -705,25 +731,25 @@ sudo /opt/adguard-shield/adguard-shield geoip-flush-cache
### Konfiguration und Cron-Status anzeigen ### Konfiguration und Cron-Status anzeigen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-status sudo adguard-shield report-status
``` ```
### HTML-Report in Datei schreiben ### HTML-Report in Datei schreiben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-generate html /tmp/adguard-shield-report.html sudo adguard-shield report-generate html /tmp/adguard-shield-report.html
``` ```
### Text-Report auf stdout ausgeben ### Text-Report auf stdout ausgeben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-generate txt sudo adguard-shield report-generate txt
``` ```
### Testmail senden ### Testmail senden
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-test sudo adguard-shield report-test
``` ```
Sendet eine einfache Testmail. Erst wenn diese funktioniert, lohnt sich die Fehlersuche am eigentlichen Report. Sendet eine einfache Testmail. Erst wenn diese funktioniert, lohnt sich die Fehlersuche am eigentlichen Report.
@@ -731,21 +757,21 @@ Sendet eine einfache Testmail. Erst wenn diese funktioniert, lohnt sich die Fehl
### Aktuellen Report erzeugen und versenden ### Aktuellen Report erzeugen und versenden
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-send sudo adguard-shield report-send
``` ```
### Cron-Job installieren ### Cron-Job installieren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-install sudo adguard-shield report-install
``` ```
Erstellt die Datei `/etc/cron.d/adguard-shield-report` mit dem konfigurierten Intervall und der Versandzeit. Erstellt die Datei `/etc/cron.d/adguard-shield-report` mit dem konfigurierten Intervall und der Versandzeit. Wenn der globale CLI-Befehl vorhanden ist, verwendet der Cron-Job `/usr/local/bin/adguard-shield`; sonst fällt er auf das installierte Binary unter `/opt/adguard-shield/adguard-shield` zurück.
### Cron-Job entfernen ### Cron-Job entfernen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-remove sudo adguard-shield report-remove
``` ```
Details zum Report-System stehen in [E-Mail Report](report.md). Details zum Report-System stehen in [E-Mail Report](report.md).
@@ -755,7 +781,7 @@ Details zum Report-System stehen in [E-Mail Report](report.md).
## Dry-Run ## Dry-Run
```bash ```bash
sudo /opt/adguard-shield/adguard-shield dry-run sudo adguard-shield dry-run
``` ```
Der Dry-Run ist der sicherste Weg, neue Konfigurationen zu prüfen, bevor sie produktiv gehen. Der Dry-Run ist der sicherste Weg, neue Konfigurationen zu prüfen, bevor sie produktiv gehen.
@@ -773,11 +799,11 @@ Der Dry-Run ist der sicherste Weg, neue Konfigurationen zu prüfen, bevor sie pr
```bash ```bash
# Dry-Run starten (Strg+C zum Beenden) # Dry-Run starten (Strg+C zum Beenden)
sudo /opt/adguard-shield/adguard-shield dry-run sudo adguard-shield dry-run
# Ergebnisse prüfen # Ergebnisse prüfen
sudo /opt/adguard-shield/adguard-shield history 50 sudo adguard-shield history 50
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 80 sudo adguard-shield logs --level warn --limit 80
``` ```
--- ---
@@ -785,7 +811,7 @@ sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 80
## Version ## Version
```bash ```bash
/opt/adguard-shield/adguard-shield version adguard-shield version
``` ```
Zeigt die installierte Version an. Aliase: `--version`, `-v`. Zeigt die installierte Version an. Aliase: `--version`, `-v`.
@@ -798,15 +824,15 @@ Zeigt die installierte Version an. Aliase: `--version`, `-v`.
```bash ```bash
sudo systemctl restart adguard-shield sudo systemctl restart adguard-shield
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
sudo /opt/adguard-shield/adguard-shield logs --level info --limit 80 sudo adguard-shield logs --level info --limit 80
``` ```
### Falsch gesperrte IP freigeben ### Falsch gesperrte IP freigeben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100 sudo adguard-shield unban 192.168.1.100
sudo /opt/adguard-shield/adguard-shield reset-offenses 192.168.1.100 sudo adguard-shield reset-offenses 192.168.1.100
``` ```
Danach die IP dauerhaft in `WHITELIST` oder eine externe Whitelist aufnehmen. Danach die IP dauerhaft in `WHITELIST` oder eine externe Whitelist aufnehmen.
@@ -814,16 +840,16 @@ Danach die IP dauerhaft in `WHITELIST` oder eine externe Whitelist aufnehmen.
### Externe Listen neu laden ### Externe Listen neu laden
```bash ```bash
sudo /opt/adguard-shield/adguard-shield whitelist-sync sudo adguard-shield whitelist-sync
sudo /opt/adguard-shield/adguard-shield blocklist-sync sudo adguard-shield blocklist-sync
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
``` ```
### Firewall neu aufbauen ### Firewall neu aufbauen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-remove sudo adguard-shield firewall-remove
sudo /opt/adguard-shield/adguard-shield firewall-create sudo adguard-shield firewall-create
sudo systemctl restart adguard-shield sudo systemctl restart adguard-shield
``` ```
@@ -834,8 +860,8 @@ Nach dem Neustart schreibt der Daemon aktive Sperren aus SQLite wieder in die Fi
```bash ```bash
sudo systemctl status adguard-shield sudo systemctl status adguard-shield
sudo journalctl -u adguard-shield --no-pager -n 100 sudo journalctl -u adguard-shield --no-pager -n 100
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
sudo /opt/adguard-shield/adguard-shield logs --level debug --limit 100 sudo adguard-shield logs --level debug --limit 100
``` ```
--- ---
@@ -900,7 +926,7 @@ Die Beispielzahlen liegen bewusst nahe an den Standardlimits `RATE_LIMIT_MAX_REQ
## Eingebaute Hilfe ## Eingebaute Hilfe
```bash ```bash
/opt/adguard-shield/adguard-shield --help adguard-shield --help
``` ```
Bei unbekannten Befehlen gibt das Binary die Usage-Ausgabe aus. Bei unbekannten Befehlen gibt das Binary die Usage-Ausgabe aus.

View File

@@ -217,9 +217,9 @@ GEOIP_NOTIFY=false
Diese Befehle können viele IPs auf einmal freigeben: Diese Befehle können viele IPs auf einmal freigeben:
```bash ```bash
sudo /opt/adguard-shield/adguard-shield flush sudo adguard-shield flush
sudo /opt/adguard-shield/adguard-shield geoip-flush sudo adguard-shield geoip-flush
sudo /opt/adguard-shield/adguard-shield blocklist-flush sudo adguard-shield blocklist-flush
``` ```
AdGuard Shield sendet dafür **nicht** eine Nachricht pro IP, sondern eine zusammenfassende Meldung mit der Anzahl der freigegebenen Sperren. AdGuard Shield sendet dafür **nicht** eine Nachricht pro IP, sondern eine zusammenfassende Meldung mit der Anzahl der freigegebenen Sperren.
@@ -326,7 +326,7 @@ Aktion: Manual-Flush
Wenn keine Benachrichtigung ankommt: Wenn keine Benachrichtigung ankommt:
```bash ```bash
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100 sudo adguard-shield logs --level warn --limit 100
sudo journalctl -u adguard-shield --no-pager -n 100 sudo journalctl -u adguard-shield --no-pager -n 100
``` ```

View File

@@ -143,8 +143,8 @@ BLOCKED_PORTS="53 443 853"
```bash ```bash
sudo systemctl restart adguard-shield sudo systemctl restart adguard-shield
sudo /opt/adguard-shield/adguard-shield firewall-status sudo adguard-shield firewall-status
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
``` ```
## Firewall neu aufbauen ## Firewall neu aufbauen
@@ -152,9 +152,9 @@ sudo /opt/adguard-shield/adguard-shield status
Falls der Modus gewechselt wurde: Falls der Modus gewechselt wurde:
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-remove sudo adguard-shield firewall-remove
sudo systemctl restart adguard-shield sudo systemctl restart adguard-shield
sudo /opt/adguard-shield/adguard-shield firewall-status sudo adguard-shield firewall-status
``` ```
Der Daemon erstellt die Firewall-Struktur beim Start automatisch neu und überträgt aktive Sperren aus SQLite. Der Daemon erstellt die Firewall-Struktur beim Start automatisch neu und überträgt aktive Sperren aus SQLite.

View File

@@ -20,7 +20,7 @@ Nach Änderungen muss der Service neu gestartet werden:
```bash ```bash
sudo systemctl restart adguard-shield sudo systemctl restart adguard-shield
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
``` ```
## Automatische Migration ## Automatische Migration
@@ -42,10 +42,10 @@ Nach dem Bearbeiten der Konfiguration:
```bash ```bash
# API-Verbindung testen # API-Verbindung testen
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
# Dry-Run: zeigt, was gesperrt würde, ohne die Firewall zu verändern # Dry-Run: zeigt, was gesperrt würde, ohne die Firewall zu verändern
sudo /opt/adguard-shield/adguard-shield dry-run sudo adguard-shield dry-run
``` ```
--- ---
@@ -262,10 +262,10 @@ Progressive Sperren gelten für Monitor-Sperren wie `rate-limit` und `subdomain-
### Verwaltungsbefehle ### Verwaltungsbefehle
```bash ```bash
sudo /opt/adguard-shield/adguard-shield offense-status # Zähler anzeigen sudo adguard-shield offense-status # Zähler anzeigen
sudo /opt/adguard-shield/adguard-shield offense-cleanup # Abgelaufene entfernen sudo adguard-shield offense-cleanup # Abgelaufene entfernen
sudo /opt/adguard-shield/adguard-shield reset-offenses # Alle zurücksetzen sudo adguard-shield reset-offenses # Alle zurücksetzen
sudo /opt/adguard-shield/adguard-shield reset-offenses <IP> # Eine IP zurücksetzen sudo adguard-shield reset-offenses <IP> # Eine IP zurücksetzen
``` ```
--- ---
@@ -289,9 +289,9 @@ sudo /opt/adguard-shield/adguard-shield reset-offenses <IP> # Eine IP zurück
### CLI-Befehle ### CLI-Befehle
```bash ```bash
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100 sudo adguard-shield logs --level warn --limit 100
sudo /opt/adguard-shield/adguard-shield logs-follow debug sudo adguard-shield logs-follow debug
sudo /opt/adguard-shield/adguard-shield live sudo adguard-shield live
``` ```
**Hinweis:** Query-Inhalte werden nicht dauerhaft ins Log geschrieben. Für Query-nahe Diagnose ist die Live-Ansicht gedacht. **Hinweis:** Query-Inhalte werden nicht dauerhaft ins Log geschrieben. Für Query-nahe Diagnose ist die Live-Ansicht gedacht.
@@ -413,7 +413,7 @@ REPORT_MAIL_CMD="msmtp"
### Cron-Job installieren ### Cron-Job installieren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-install sudo adguard-shield report-install
``` ```
Details stehen in [E-Mail Report](report.md). Details stehen in [E-Mail Report](report.md).
@@ -642,11 +642,11 @@ Die Datenbank wird unter `/opt/adguard-shield/geoip/` gespeichert und nach 24 St
### GeoIP-Befehle ### GeoIP-Befehle
```bash ```bash
sudo /opt/adguard-shield/adguard-shield geoip-status # Status anzeigen sudo adguard-shield geoip-status # Status anzeigen
sudo /opt/adguard-shield/adguard-shield geoip-lookup 8.8.8.8 # IP nachschlagen sudo adguard-shield geoip-lookup 8.8.8.8 # IP nachschlagen
sudo /opt/adguard-shield/adguard-shield geoip-sync # Clients prüfen sudo adguard-shield geoip-sync # Clients prüfen
sudo /opt/adguard-shield/adguard-shield geoip-flush-cache # Cache leeren sudo adguard-shield geoip-flush-cache # Cache leeren
sudo /opt/adguard-shield/adguard-shield geoip-flush # Alle GeoIP-Sperren aufheben sudo adguard-shield geoip-flush # Alle GeoIP-Sperren aufheben
``` ```
--- ---
@@ -739,6 +739,6 @@ NTFY_TOPIC="adguard-shield-prod"
### Vor produktiver Aktivierung ### Vor produktiver Aktivierung
```bash ```bash
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
sudo /opt/adguard-shield/adguard-shield dry-run sudo adguard-shield dry-run
``` ```

View File

@@ -88,13 +88,13 @@ REPORT_MAIL_CMD="msmtp"
### Konfiguration und Cron-Status anzeigen ### Konfiguration und Cron-Status anzeigen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-status sudo adguard-shield report-status
``` ```
### HTML-Report in Datei schreiben ### HTML-Report in Datei schreiben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-generate html /tmp/adguard-shield-report.html sudo adguard-shield report-generate html /tmp/adguard-shield-report.html
``` ```
Die Datei kann im Browser geöffnet werden, um das Ergebnis zu prüfen. Die Datei kann im Browser geöffnet werden, um das Ergebnis zu prüfen.
@@ -102,13 +102,13 @@ Die Datei kann im Browser geöffnet werden, um das Ergebnis zu prüfen.
### Text-Report auf stdout ausgeben ### Text-Report auf stdout ausgeben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-generate txt sudo adguard-shield report-generate txt
``` ```
### Testmail senden ### Testmail senden
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-test sudo adguard-shield report-test
``` ```
Sendet eine einfache Testmail. Erst wenn diese ankommt, lohnt sich die Fehlersuche am eigentlichen Report. Sendet eine einfache Testmail. Erst wenn diese ankommt, lohnt sich die Fehlersuche am eigentlichen Report.
@@ -116,19 +116,19 @@ Sendet eine einfache Testmail. Erst wenn diese ankommt, lohnt sich die Fehlersuc
### Aktuellen Report erzeugen und versenden ### Aktuellen Report erzeugen und versenden
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-send sudo adguard-shield report-send
``` ```
### Cron-Job installieren ### Cron-Job installieren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-install sudo adguard-shield report-install
``` ```
### Cron-Job entfernen ### Cron-Job entfernen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-remove sudo adguard-shield report-remove
``` ```
--- ---
@@ -148,7 +148,7 @@ REPORT_MAIL_CMD="msmtp"
sudo apt install msmtp msmtp-mta sudo apt install msmtp msmtp-mta
# Testmail senden # Testmail senden
sudo /opt/adguard-shield/adguard-shield report-test sudo adguard-shield report-test
``` ```
### Eigene Mailprogramm-Argumente ### Eigene Mailprogramm-Argumente
@@ -175,7 +175,7 @@ REPORT_MAIL_CMD="msmtp --account=default"
### Cron-Job installieren ### Cron-Job installieren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-install sudo adguard-shield report-install
``` ```
Dadurch wird diese Datei geschrieben: Dadurch wird diese Datei geschrieben:
@@ -184,12 +184,14 @@ Dadurch wird diese Datei geschrieben:
/etc/cron.d/adguard-shield-report /etc/cron.d/adguard-shield-report
``` ```
Der Cron-Eintrag ruft das installierte Binary mit der installierten Konfiguration auf: Der Cron-Eintrag ruft den globalen CLI-Befehl mit der installierten Konfiguration auf, sofern er registriert ist:
```text ```text
/opt/adguard-shield/adguard-shield -config /opt/adguard-shield/adguard-shield.conf report-send /usr/local/bin/adguard-shield -config /opt/adguard-shield/adguard-shield.conf report-send
``` ```
Falls die Installation mit `--no-register` erfolgt ist, verwendet `report-install` stattdessen `/opt/adguard-shield/adguard-shield`.
### Zeitplan nach Intervall ### Zeitplan nach Intervall
| Intervall | Cron-Verhalten | | Intervall | Cron-Verhalten |
@@ -202,7 +204,7 @@ Der Cron-Eintrag ruft das installierte Binary mit der installierten Konfiguratio
### Cron-Job entfernen ### Cron-Job entfernen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-remove sudo adguard-shield report-remove
``` ```
--- ---
@@ -212,33 +214,33 @@ sudo /opt/adguard-shield/adguard-shield report-remove
### Schritt 1: Status prüfen ### Schritt 1: Status prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-status sudo adguard-shield report-status
``` ```
### Schritt 2: Report lokal erzeugen ### Schritt 2: Report lokal erzeugen
```bash ```bash
# HTML-Report zum Ansehen im Browser # HTML-Report zum Ansehen im Browser
sudo /opt/adguard-shield/adguard-shield report-generate html /tmp/adguard-shield-report.html sudo adguard-shield report-generate html /tmp/adguard-shield-report.html
# Text-Report in der Konsole # Text-Report in der Konsole
sudo /opt/adguard-shield/adguard-shield report-generate txt sudo adguard-shield report-generate txt
``` ```
### Schritt 3: Versand testen ### Schritt 3: Versand testen
```bash ```bash
# Einfache Testmail # Einfache Testmail
sudo /opt/adguard-shield/adguard-shield report-test sudo adguard-shield report-test
# Vollständigen Report senden # Vollständigen Report senden
sudo /opt/adguard-shield/adguard-shield report-send sudo adguard-shield report-send
``` ```
### Schritt 4: Logs prüfen ### Schritt 4: Logs prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100 sudo adguard-shield logs --level warn --limit 100
sudo journalctl -u cron --no-pager -n 100 sudo journalctl -u cron --no-pager -n 100
``` ```
@@ -277,7 +279,7 @@ Oder setze `REPORT_MAIL_CMD` auf dein vorhandenes Mailprogramm.
Prüfe die Konfiguration und den Cron-Job: Prüfe die Konfiguration und den Cron-Job:
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-send sudo adguard-shield report-send
sudo cat /etc/cron.d/adguard-shield-report sudo cat /etc/cron.d/adguard-shield-report
``` ```
@@ -296,6 +298,6 @@ sudo cat /etc/cron.d/adguard-shield-report
Du kannst das Format unabhängig von der Konfiguration wählen: Du kannst das Format unabhängig von der Konfiguration wählen:
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-generate txt sudo adguard-shield report-generate txt
sudo /opt/adguard-shield/adguard-shield report-generate html /tmp/report.html sudo adguard-shield report-generate html /tmp/report.html
``` ```

View File

@@ -14,19 +14,19 @@ sudo systemctl status adguard-shield
sudo journalctl -u adguard-shield --no-pager -n 100 sudo journalctl -u adguard-shield --no-pager -n 100
# 3. Funktioniert die API? # 3. Funktioniert die API?
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
# 4. Was ist der aktuelle Zustand? # 4. Was ist der aktuelle Zustand?
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
# 5. Gibt es Warnungen oder Fehler? # 5. Gibt es Warnungen oder Fehler?
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100 sudo adguard-shield logs --level warn --limit 100
``` ```
Wenn du aktuelle Queries und den Echtzeit-Zustand sehen willst: Wenn du aktuelle Queries und den Echtzeit-Zustand sehen willst:
```bash ```bash
sudo /opt/adguard-shield/adguard-shield live sudo adguard-shield live
``` ```
--- ---
@@ -68,7 +68,7 @@ sudo systemctl daemon-reload
### Test ### Test
```bash ```bash
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
``` ```
### Konfiguration prüfen ### Konfiguration prüfen
@@ -104,9 +104,9 @@ Passe URL und Zugangsdaten entsprechend an.
### Prüfen ### Prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield live --once sudo adguard-shield live --once
sudo /opt/adguard-shield/adguard-shield history 50 sudo adguard-shield history 50
sudo /opt/adguard-shield/adguard-shield logs --level debug --limit 100 sudo adguard-shield logs --level debug --limit 100
``` ```
### Mögliche Ursachen und Lösungen ### Mögliche Ursachen und Lösungen
@@ -131,8 +131,8 @@ sudo /opt/adguard-shield/adguard-shield logs --level debug --limit 100
### Übersicht verschaffen ### Übersicht verschaffen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
sudo /opt/adguard-shield/adguard-shield history 100 sudo adguard-shield history 100
``` ```
### Ursachen und Gegenmaßnahmen ### Ursachen und Gegenmaßnahmen
@@ -149,10 +149,10 @@ sudo /opt/adguard-shield/adguard-shield history 100
```bash ```bash
# Sperre aufheben # Sperre aufheben
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100 sudo adguard-shield unban 192.168.1.100
# Offense-Zähler zurücksetzen (damit progressive Sperren nicht sofort eskalieren) # Offense-Zähler zurücksetzen (damit progressive Sperren nicht sofort eskalieren)
sudo /opt/adguard-shield/adguard-shield reset-offenses 192.168.1.100 sudo adguard-shield reset-offenses 192.168.1.100
``` ```
### Dauerhaft ausnehmen ### Dauerhaft ausnehmen
@@ -174,7 +174,7 @@ sudo systemctl restart adguard-shield
### Status über AdGuard Shield ### Status über AdGuard Shield
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-status sudo adguard-shield firewall-status
``` ```
### Direkte Prüfung mit Systembefehlen ### Direkte Prüfung mit Systembefehlen
@@ -198,8 +198,8 @@ sudo iptables -n -L DOCKER-USER --line-numbers -v | grep ADGUARD
### Firewall neu aufbauen ### Firewall neu aufbauen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-remove sudo adguard-shield firewall-remove
sudo /opt/adguard-shield/adguard-shield firewall-create sudo adguard-shield firewall-create
sudo systemctl restart adguard-shield sudo systemctl restart adguard-shield
``` ```
@@ -212,8 +212,8 @@ Nach dem Neustart werden aktive Sperren aus SQLite wieder in die ipsets geschrie
### Prüfen ### Prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
sudo /opt/adguard-shield/adguard-shield history 100 sudo adguard-shield history 100
``` ```
Temporäre Sperren werden beim Start und während jedes Pollings auf Ablauf geprüft. Wenn eine Sperre als permanent angezeigt wird, wird sie nicht automatisch freigegeben. Temporäre Sperren werden beim Start und während jedes Pollings auf Ablauf geprüft. Wenn eine Sperre als permanent angezeigt wird, wird sie nicht automatisch freigegeben.
@@ -231,7 +231,7 @@ Temporäre Sperren werden beim Start und während jedes Pollings auf Ablauf gepr
### Manuell freigeben ### Manuell freigeben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100 sudo adguard-shield unban 192.168.1.100
``` ```
--- ---
@@ -242,13 +242,13 @@ Dry-Run ist ideal, um neue Konfigurationen zu prüfen, bevor sie produktiv gehen
```bash ```bash
# Dry-Run starten (Strg+C zum Beenden) # Dry-Run starten (Strg+C zum Beenden)
sudo /opt/adguard-shield/adguard-shield dry-run sudo adguard-shield dry-run
``` ```
Währenddessen die Ergebnisse prüfen: Währenddessen die Ergebnisse prüfen:
```bash ```bash
sudo /opt/adguard-shield/adguard-shield history 50 sudo adguard-shield history 50
``` ```
Im Dry-Run werden mögliche Sperren als `DRY` protokolliert. Es entstehen keine aktiven Sperren und keine Firewall-Änderungen. Im Dry-Run werden mögliche Sperren als `DRY` protokolliert. Es entstehen keine aktiven Sperren und keine Firewall-Änderungen.
@@ -260,13 +260,13 @@ Im Dry-Run werden mögliche Sperren als `DRY` protokolliert. Es entstehen keine
### Status prüfen ### Status prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield whitelist-status sudo adguard-shield whitelist-status
``` ```
### Manuell synchronisieren ### Manuell synchronisieren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield whitelist-sync sudo adguard-shield whitelist-sync
``` ```
### Typische Probleme ### Typische Probleme
@@ -295,19 +295,19 @@ trusted.example.com # Hostname (wird per DNS aufgelöst)
### Status prüfen ### Status prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield blocklist-status sudo adguard-shield blocklist-status
``` ```
### Manuell synchronisieren ### Manuell synchronisieren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield blocklist-sync sudo adguard-shield blocklist-sync
``` ```
### Alle Blocklist-Sperren freigeben ### Alle Blocklist-Sperren freigeben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield blocklist-flush sudo adguard-shield blocklist-flush
``` ```
### Zu viele IPs gesperrt? ### Zu viele IPs gesperrt?
@@ -325,25 +325,25 @@ sudo /opt/adguard-shield/adguard-shield blocklist-flush
### Status prüfen ### Status prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield geoip-status sudo adguard-shield geoip-status
``` ```
### Einzelne IP prüfen ### Einzelne IP prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield geoip-lookup 8.8.8.8 sudo adguard-shield geoip-lookup 8.8.8.8
``` ```
### Cache leeren ### Cache leeren
```bash ```bash
sudo /opt/adguard-shield/adguard-shield geoip-flush-cache sudo adguard-shield geoip-flush-cache
``` ```
### Alle GeoIP-Sperren freigeben ### Alle GeoIP-Sperren freigeben
```bash ```bash
sudo /opt/adguard-shield/adguard-shield geoip-flush sudo adguard-shield geoip-flush
``` ```
### Typische Probleme und Lösungen ### Typische Probleme und Lösungen
@@ -368,17 +368,17 @@ Die GeoIP-Ländercodes folgen dem Standard ISO 3166-1 Alpha-2. Eine vollständig
### Status prüfen ### Status prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield report-status sudo adguard-shield report-status
``` ```
### Funktionstest ### Funktionstest
```bash ```bash
# Testmail senden # Testmail senden
sudo /opt/adguard-shield/adguard-shield report-test sudo adguard-shield report-test
# Text-Report in der Konsole ansehen # Text-Report in der Konsole ansehen
sudo /opt/adguard-shield/adguard-shield report-generate txt sudo adguard-shield report-generate txt
``` ```
### Keine Mail kommt an? ### Keine Mail kommt an?
@@ -396,7 +396,7 @@ sudo /opt/adguard-shield/adguard-shield report-generate txt
```bash ```bash
sudo cat /etc/cron.d/adguard-shield-report sudo cat /etc/cron.d/adguard-shield-report
sudo /opt/adguard-shield/adguard-shield report-send sudo adguard-shield report-send
``` ```
--- ---
@@ -406,7 +406,7 @@ sudo /opt/adguard-shield/adguard-shield report-send
### Prüfen ### Prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100 sudo adguard-shield logs --level warn --limit 100
``` ```
### Checkliste ### Checkliste
@@ -497,13 +497,13 @@ Wenn der Zustand unklar ist und ein sauberer Neustart nötig ist:
sudo systemctl stop adguard-shield sudo systemctl stop adguard-shield
# Firewall-Struktur entfernen # Firewall-Struktur entfernen
sudo /opt/adguard-shield/adguard-shield firewall-remove sudo adguard-shield firewall-remove
# Service neu starten (baut Firewall aus SQLite wieder auf) # Service neu starten (baut Firewall aus SQLite wieder auf)
sudo systemctl start adguard-shield sudo systemctl start adguard-shield
# Status prüfen # Status prüfen
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
``` ```
Das entfernt die Firewall-Struktur und lässt den Daemon sie beim Start wieder aus dem SQLite-State aufbauen. Aktive Sperren bleiben in der Datenbank erhalten. Das entfernt die Firewall-Struktur und lässt den Daemon sie beim Start wieder aus dem SQLite-State aufbauen. Aktive Sperren bleiben in der Datenbank erhalten.
@@ -515,13 +515,13 @@ Das entfernt die Firewall-Struktur und lässt den Daemon sie beim Start wieder a
### Konfiguration behalten ### Konfiguration behalten
```bash ```bash
sudo /opt/adguard-shield/adguard-shield uninstall --keep-config sudo adguard-shield uninstall --keep-config
``` ```
### Alles entfernen ### Alles entfernen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield uninstall sudo adguard-shield uninstall
``` ```
Ohne `--keep-config` werden Installationsverzeichnis, State-Verzeichnis und Logdatei entfernt. Ohne `--keep-config` werden Installationsverzeichnis, State-Verzeichnis und Logdatei entfernt.

View File

@@ -14,11 +14,13 @@ sudo ./adguard-shield update
Am Ende fragt der Updater, ob AdGuard Shield direkt neu gestartet werden soll. Am Ende fragt der Updater, ob AdGuard Shield direkt neu gestartet werden soll.
Der Updater registriert dabei auch den globalen CLI-Befehl `/usr/local/bin/adguard-shield`. Nach dem Update kannst du die installierte Anwendung daher direkt mit `sudo adguard-shield <befehl>` verwenden.
### Nach dem Update prüfen ### Nach dem Update prüfen
```bash ```bash
sudo /opt/adguard-shield/adguard-shield install-status sudo adguard-shield install-status
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
sudo journalctl -u adguard-shield --no-pager -n 50 sudo journalctl -u adguard-shield --no-pager -n 50
``` ```
@@ -66,11 +68,12 @@ Der Update-Befehl nutzt intern dieselbe Routine wie die Installation:
| 3 | Systemabhängigkeiten prüfen (sofern nicht `--skip-deps`) | | 3 | Systemabhängigkeiten prüfen (sofern nicht `--skip-deps`) |
| 4 | Installationsverzeichnis sicherstellen | | 4 | Installationsverzeichnis sicherstellen |
| 5 | Neues Binary nach `/opt/adguard-shield/adguard-shield` kopieren | | 5 | Neues Binary nach `/opt/adguard-shield/adguard-shield` kopieren |
| 6 | Konfiguration migrieren (vorhandene Werte behalten, neue ergänzen) | | 6 | CLI-Befehl `/usr/local/bin/adguard-shield` registrieren/aktualisieren (sofern nicht `--no-register`) |
| 7 | systemd-Service neu schreiben | | 7 | Report-Templates installieren |
| 8 | `systemctl daemon-reload` | | 8 | Konfiguration migrieren (vorhandene Werte behalten, neue ergänzen) |
| 9 | Autostart aktivieren (sofern nicht `--no-enable`) | | 9 | systemd-Service neu schreiben |
| 10 | Nachfrage: Service direkt neu starten | | 10 | `systemctl daemon-reload` und Autostart aktivieren (sofern nicht `--no-enable`) |
| 11 | Nachfrage: Service direkt neu starten |
--- ---
@@ -113,8 +116,8 @@ Wenn du vorher manuell prüfen möchtest:
```bash ```bash
sudo ./adguard-shield update sudo ./adguard-shield update
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
sudo /opt/adguard-shield/adguard-shield dry-run sudo adguard-shield dry-run
sudo systemctl restart adguard-shield sudo systemctl restart adguard-shield
``` ```
@@ -126,6 +129,14 @@ 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. Sinnvoll, wenn `iptables`, `ip6tables`, `ipset` und `systemctl` bereits vorhanden sind oder die Paketinstallation nicht über `apt-get` laufen soll.
### Update ohne CLI-Registrierung
```bash
sudo ./adguard-shield update --no-register
```
Damit wird kein Symlink unter `/usr/local/bin/adguard-shield` angelegt oder geändert. Die Anwendung bleibt dann weiterhin über `/opt/adguard-shield/adguard-shield` erreichbar.
### Update mit expliziter Konfigurationsquelle ### Update mit expliziter Konfigurationsquelle
```bash ```bash
@@ -138,7 +149,7 @@ sudo ./adguard-shield update --config-source ./adguard-shield.conf
sudo ./adguard-shield update --install-dir /opt/adguard-shield-test 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. **Hinweis:** Die systemd-Unit heißt weiterhin `adguard-shield.service`, und der globale CLI-Befehl heißt weiterhin `/usr/local/bin/adguard-shield`. Mehrere parallele produktive Installationen über dieselbe Unit oder denselben CLI-Befehl sind nicht vorgesehen.
--- ---
@@ -178,10 +189,10 @@ sudo cp /opt/adguard-shield/adguard-shield.conf /root/adguard-shield.conf.backup
sudo ./adguard-shield install --config-source /root/adguard-shield.conf.backup sudo ./adguard-shield install --config-source /root/adguard-shield.conf.backup
# 4. API-Verbindung prüfen # 4. API-Verbindung prüfen
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
# 5. Dry-Run: prüfen, was gesperrt würde # 5. Dry-Run: prüfen, was gesperrt würde
sudo /opt/adguard-shield/adguard-shield dry-run sudo adguard-shield dry-run
# 6. Produktiven Service starten # 6. Produktiven Service starten
sudo systemctl start adguard-shield sudo systemctl start adguard-shield
@@ -197,7 +208,7 @@ sudo systemctl status adguard-shield
### Installation ### Installation
```bash ```bash
sudo /opt/adguard-shield/adguard-shield install-status sudo adguard-shield install-status
``` ```
### Service ### Service
@@ -210,20 +221,20 @@ sudo journalctl -u adguard-shield --no-pager -n 100
### API-Verbindung ### API-Verbindung
```bash ```bash
sudo /opt/adguard-shield/adguard-shield test sudo adguard-shield test
``` ```
### Laufzeitstatus ### Laufzeitstatus
```bash ```bash
sudo /opt/adguard-shield/adguard-shield status sudo adguard-shield status
sudo /opt/adguard-shield/adguard-shield live --once sudo adguard-shield live --once
``` ```
### Firewall ### Firewall
```bash ```bash
sudo /opt/adguard-shield/adguard-shield firewall-status sudo adguard-shield firewall-status
``` ```
--- ---

View File

@@ -20,6 +20,7 @@ const (
DefaultInstallDir = "/opt/adguard-shield" DefaultInstallDir = "/opt/adguard-shield"
DefaultStateDir = "/var/lib/adguard-shield" DefaultStateDir = "/var/lib/adguard-shield"
DefaultLogFile = "/var/log/adguard-shield.log" DefaultLogFile = "/var/log/adguard-shield.log"
CLICommandPath = "/usr/local/bin/adguard-shield"
ServiceName = "adguard-shield.service" ServiceName = "adguard-shield.service"
ServicePath = "/etc/systemd/system/adguard-shield.service" ServicePath = "/etc/systemd/system/adguard-shield.service"
) )
@@ -30,19 +31,22 @@ type Options struct {
Enable bool Enable bool
SkipDeps bool SkipDeps bool
KeepConfig bool KeepConfig bool
RegisterCLI bool
} }
type Status struct { type Status struct {
InstallDir string InstallDir string
BinaryPath string BinaryPath string
ConfigPath string ConfigPath string
BinaryExists bool CLICommandPath string
ConfigExists bool BinaryExists bool
ServiceExists bool ConfigExists bool
ServiceEnabled bool CLICommandInstalled bool
ServiceActive bool ServiceExists bool
Version string ServiceEnabled bool
LegacyFindings []string ServiceActive bool
Version string
LegacyFindings []string
} }
type LegacyError struct { type LegacyError struct {
@@ -54,30 +58,30 @@ func (e *LegacyError) Error() string {
} }
func DefaultOptions() Options { func DefaultOptions() Options {
return Options{InstallDir: DefaultInstallDir, Enable: true} return Options{InstallDir: DefaultInstallDir, Enable: true, RegisterCLI: true}
} }
func Install(opts Options) error { func Install(opts Options) error {
opts = normalize(opts) opts = normalize(opts)
fmt.Println("AdGuard Shield Go-Installation") fmt.Println("AdGuard Shield Go-Installation")
fmt.Printf("Installationspfad: %s\n", opts.InstallDir) fmt.Printf("Installationspfad: %s\n", opts.InstallDir)
fmt.Println("1/9 Pruefe Betriebssystem und root-Rechte ...") fmt.Println("1/10 Pruefe Betriebssystem und root-Rechte ...")
if err := requireLinuxRoot(); err != nil { if err := requireLinuxRoot(); err != nil {
return err return err
} }
fmt.Println("2/9 Pruefe auf scriptbasierte Altinstallation ...") fmt.Println("2/10 Pruefe auf scriptbasierte Altinstallation ...")
if findings := DetectLegacy(opts.InstallDir); len(findings) > 0 { if findings := DetectLegacy(opts.InstallDir); len(findings) > 0 {
return &LegacyError{Findings: findings} return &LegacyError{Findings: findings}
} }
if !opts.SkipDeps { if !opts.SkipDeps {
fmt.Println("3/9 Pruefe System-Abhaengigkeiten ...") fmt.Println("3/10 Pruefe System-Abhaengigkeiten ...")
if err := ensureDependencies(); err != nil { if err := ensureDependencies(); err != nil {
return err return err
} }
} else { } else {
fmt.Println("3/9 System-Abhaengigkeiten uebersprungen (--skip-deps)") fmt.Println("3/10 System-Abhaengigkeiten uebersprungen (--skip-deps)")
} }
fmt.Println("4/9 Erstelle Verzeichnisse ...") fmt.Println("4/10 Erstelle Verzeichnisse ...")
if err := os.MkdirAll(opts.InstallDir, 0755); err != nil { if err := os.MkdirAll(opts.InstallDir, 0755); err != nil {
return err return err
} }
@@ -87,23 +91,31 @@ func Install(opts Options) error {
if err := os.MkdirAll(filepath.Join(opts.InstallDir, "geoip"), 0755); err != nil { if err := os.MkdirAll(filepath.Join(opts.InstallDir, "geoip"), 0755); err != nil {
return err return err
} }
fmt.Println("5/9 Installiere Binary ...") fmt.Println("5/10 Installiere Binary ...")
if err := copySelf(filepath.Join(opts.InstallDir, "adguard-shield")); err != nil { if err := copySelf(filepath.Join(opts.InstallDir, "adguard-shield")); err != nil {
return err return err
} }
fmt.Println("6/9 Installiere Report-Templates ...") if opts.RegisterCLI {
fmt.Printf("6/10 Registriere CLI-Befehl (%s) ...\n", CLICommandPath)
if err := registerCLICommand(opts.InstallDir); err != nil {
return err
}
} else {
fmt.Println("6/10 CLI-Registrierung uebersprungen (--no-register)")
}
fmt.Println("7/10 Installiere Report-Templates ...")
if err := report.InstallTemplates(filepath.Join(opts.InstallDir, "templates")); err != nil { if err := report.InstallTemplates(filepath.Join(opts.InstallDir, "templates")); err != nil {
return err return err
} }
fmt.Println("7/9 Installiere oder migriere Konfiguration ...") fmt.Println("8/10 Installiere oder migriere Konfiguration ...")
if err := ensureConfig(opts); err != nil { if err := ensureConfig(opts); err != nil {
return err return err
} }
fmt.Println("8/9 Schreibe systemd-Service ...") fmt.Println("9/10 Schreibe systemd-Service ...")
if err := writeService(opts.InstallDir); err != nil { if err := writeService(opts.InstallDir); err != nil {
return err return err
} }
fmt.Println("9/9 Aktualisiere systemd ...") fmt.Println("10/10 Aktualisiere systemd ...")
_ = run("systemctl", "daemon-reload") _ = run("systemctl", "daemon-reload")
if opts.Enable { if opts.Enable {
fmt.Println("Aktiviere Autostart ...") fmt.Println("Aktiviere Autostart ...")
@@ -144,6 +156,7 @@ func Uninstall(opts Options) error {
} }
_ = os.Remove(ServicePath) _ = os.Remove(ServicePath)
_ = run("systemctl", "daemon-reload") _ = run("systemctl", "daemon-reload")
_ = unregisterCLICommand(opts.InstallDir)
if opts.KeepConfig { if opts.KeepConfig {
for _, p := range []string{ for _, p := range []string{
filepath.Join(opts.InstallDir, "adguard-shield"), filepath.Join(opts.InstallDir, "adguard-shield"),
@@ -166,13 +179,15 @@ func GetStatus(installDir string) Status {
bin := filepath.Join(installDir, "adguard-shield") bin := filepath.Join(installDir, "adguard-shield")
conf := filepath.Join(installDir, "adguard-shield.conf") conf := filepath.Join(installDir, "adguard-shield.conf")
st := Status{ st := Status{
InstallDir: installDir, InstallDir: installDir,
BinaryPath: bin, BinaryPath: bin,
ConfigPath: conf, ConfigPath: conf,
BinaryExists: fileExists(bin), CLICommandPath: CLICommandPath,
ConfigExists: fileExists(conf), BinaryExists: fileExists(bin),
ServiceExists: fileExists(ServicePath), ConfigExists: fileExists(conf),
LegacyFindings: DetectLegacy(installDir), CLICommandInstalled: cliCommandInstalled(installDir),
ServiceExists: fileExists(ServicePath),
LegacyFindings: DetectLegacy(installDir),
} }
if st.BinaryExists { if st.BinaryExists {
if out, err := exec.Command(bin, "version").Output(); err == nil { if out, err := exec.Command(bin, "version").Output(); err == nil {
@@ -253,6 +268,7 @@ func PrintStatus(st Status) string {
if st.Version != "" { if st.Version != "" {
b.WriteString(fmt.Sprintf("Version: %s\n", st.Version)) b.WriteString(fmt.Sprintf("Version: %s\n", st.Version))
} }
b.WriteString(fmt.Sprintf("CLI-Befehl (%s): %s\n", st.CLICommandPath, yesNo(st.CLICommandInstalled)))
b.WriteString(fmt.Sprintf("Konfiguration: %s\n", yesNo(st.ConfigExists))) b.WriteString(fmt.Sprintf("Konfiguration: %s\n", yesNo(st.ConfigExists)))
b.WriteString(fmt.Sprintf("systemd Service: %s\n", yesNo(st.ServiceExists))) b.WriteString(fmt.Sprintf("systemd Service: %s\n", yesNo(st.ServiceExists)))
b.WriteString(fmt.Sprintf("Autostart: %s\n", yesNo(st.ServiceEnabled))) b.WriteString(fmt.Sprintf("Autostart: %s\n", yesNo(st.ServiceEnabled)))
@@ -391,6 +407,62 @@ func sameFile(a, b string) bool {
return errA == nil && errB == nil && os.SameFile(ai, bi) return errA == nil && errB == nil && os.SameFile(ai, bi)
} }
func registerCLICommand(installDir string) error {
target := filepath.Join(installDir, "adguard-shield")
if err := os.MkdirAll(filepath.Dir(CLICommandPath), 0755); err != nil {
return err
}
if existingTarget, err := os.Readlink(CLICommandPath); err == nil {
resolved := resolveLinkTarget(CLICommandPath, existingTarget)
if filepath.Clean(resolved) == filepath.Clean(target) {
return nil
}
return fmt.Errorf("%s existiert bereits und verweist auf %s", CLICommandPath, existingTarget)
} else if !os.IsNotExist(err) {
return err
}
if fileExists(CLICommandPath) {
return fmt.Errorf("%s existiert bereits und ist kein Symlink", CLICommandPath)
}
return os.Symlink(target, CLICommandPath)
}
func unregisterCLICommand(installDir string) error {
existingTarget, err := os.Readlink(CLICommandPath)
if os.IsNotExist(err) {
return nil
}
if err != nil {
return nil
}
target := filepath.Join(installDir, "adguard-shield")
resolved := resolveLinkTarget(CLICommandPath, existingTarget)
if filepath.Clean(resolved) != filepath.Clean(target) {
return nil
}
return os.Remove(CLICommandPath)
}
func cliCommandInstalled(installDir string) bool {
existingTarget, err := os.Readlink(CLICommandPath)
if err != nil {
return false
}
target := filepath.Join(installDir, "adguard-shield")
if !fileExists(target) {
return false
}
resolved := resolveLinkTarget(CLICommandPath, existingTarget)
return filepath.Clean(resolved) == filepath.Clean(target)
}
func resolveLinkTarget(linkPath, target string) string {
if filepath.IsAbs(target) {
return target
}
return filepath.Join(filepath.Dir(linkPath), target)
}
func ensureConfig(opts Options) error { func ensureConfig(opts Options) error {
target := filepath.Join(opts.InstallDir, "adguard-shield.conf") target := filepath.Join(opts.InstallDir, "adguard-shield.conf")
defaults := []byte(defaultConfig) defaults := []byte(defaultConfig)