feat: adguard-shield als globalen CLI-Befehl registrieren + Doku
This commit is contained in:
12
README.md
12
README.md
@@ -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
|
||||
sudo ./adguard-shield install
|
||||
# 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)
|
||||
sudo nano /opt/adguard-shield/adguard-shield.conf
|
||||
|
||||
# API-Verbindung testen
|
||||
sudo /opt/adguard-shield/adguard-shield test
|
||||
sudo adguard-shield test
|
||||
|
||||
# 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
|
||||
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.
|
||||
> 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).
|
||||
|
||||
@@ -120,7 +122,7 @@ sudo systemctl status adguard-shield
|
||||
AdGuard Shield wird über ein einzelnes Binary bedient. Die Grundform lautet:
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield <befehl>
|
||||
sudo adguard-shield <befehl>
|
||||
```
|
||||
|
||||
### Installation & Updates
|
||||
@@ -130,9 +132,11 @@ sudo /opt/adguard-shield/adguard-shield <befehl>
|
||||
| `install` | Binary, Konfiguration und systemd-Service installieren |
|
||||
| `install --skip-deps` | Installation ohne automatische Paketprüfung |
|
||||
| `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 |
|
||||
| `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 --keep-config` | Deinstallation mit Erhalt der Konfiguration |
|
||||
|
||||
|
||||
@@ -244,7 +244,11 @@ func run() error {
|
||||
case "report-test":
|
||||
return report.SendTest(ctx, cfg)
|
||||
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":
|
||||
return report.RemoveCron()
|
||||
case "firewall-create":
|
||||
@@ -463,8 +467,8 @@ func usage() {
|
||||
|
||||
Nutzung:
|
||||
adguard-shield version
|
||||
adguard-shield install [--config-source PATH] [--skip-deps]
|
||||
adguard-shield update [--config-source PATH] [--skip-deps]
|
||||
adguard-shield install [--config-source PATH] [--skip-deps] [--no-register]
|
||||
adguard-shield update [--config-source PATH] [--skip-deps] [--no-register]
|
||||
adguard-shield uninstall [--keep-config]
|
||||
adguard-shield install-status
|
||||
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.BoolVar(&opts.SkipDeps, "skip-deps", false, "Paketpruefung ueberspringen")
|
||||
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 {
|
||||
return opts, err
|
||||
}
|
||||
opts.Enable = !*noEnable
|
||||
opts.RegisterCLI = !*noRegister
|
||||
return opts, nil
|
||||
}
|
||||
|
||||
@@ -25,6 +25,12 @@ Die Go-Version bündelt alle Aufgaben in einem einzelnen Binary:
|
||||
/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:
|
||||
|
||||
- **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
|
||||
- **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
|
||||
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:
|
||||
|
||||
200
docs/befehle.md
200
docs/befehle.md
@@ -6,18 +6,24 @@ AdGuard Shield wird in der Go-Version über ein einzelnes Binary bedient:
|
||||
/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
|
||||
|
||||
```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:
|
||||
|
||||
```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
|
||||
@@ -25,6 +31,7 @@ sudo /opt/adguard-shield/adguard-shield -config /pfad/zur/adguard-shield.conf st
|
||||
| Datei | Pfad |
|
||||
|---|---|
|
||||
| Binary | `/opt/adguard-shield/adguard-shield` |
|
||||
| CLI-Befehl | `/usr/local/bin/adguard-shield` |
|
||||
| Konfiguration | `/opt/adguard-shield/adguard-shield.conf` |
|
||||
| SQLite-Datenbank | `/var/lib/adguard-shield/adguard-shield.db` |
|
||||
| Logdatei | `/var/log/adguard-shield.log` |
|
||||
@@ -34,13 +41,13 @@ sudo /opt/adguard-shield/adguard-shield -config /pfad/zur/adguard-shield.conf st
|
||||
|
||||
```bash
|
||||
# Version anzeigen
|
||||
/opt/adguard-shield/adguard-shield version
|
||||
adguard-shield version
|
||||
|
||||
# Installation und Update
|
||||
sudo ./adguard-shield install
|
||||
sudo ./adguard-shield update
|
||||
sudo ./adguard-shield install-status
|
||||
sudo /opt/adguard-shield/adguard-shield uninstall --keep-config
|
||||
sudo adguard-shield install-status
|
||||
sudo adguard-shield uninstall --keep-config
|
||||
|
||||
# Service-Management über systemd
|
||||
sudo systemctl start adguard-shield
|
||||
@@ -49,16 +56,16 @@ sudo systemctl restart adguard-shield
|
||||
sudo systemctl status adguard-shield
|
||||
|
||||
# Diagnose und Monitoring
|
||||
sudo /opt/adguard-shield/adguard-shield test
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo /opt/adguard-shield/adguard-shield live
|
||||
sudo /opt/adguard-shield/adguard-shield history 100
|
||||
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100
|
||||
sudo adguard-shield test
|
||||
sudo adguard-shield status
|
||||
sudo adguard-shield live
|
||||
sudo adguard-shield history 100
|
||||
sudo adguard-shield logs --level warn --limit 100
|
||||
|
||||
# Manuelle Eingriffe
|
||||
sudo /opt/adguard-shield/adguard-shield ban 192.168.1.100
|
||||
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100
|
||||
sudo /opt/adguard-shield/adguard-shield flush
|
||||
sudo adguard-shield ban 192.168.1.100
|
||||
sudo adguard-shield unban 192.168.1.100
|
||||
sudo adguard-shield flush
|
||||
```
|
||||
|
||||
---
|
||||
@@ -71,6 +78,12 @@ Das installierte Binary landet standardmäßig unter:
|
||||
/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
|
||||
|
||||
```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 |
|
||||
| `--skip-deps` | Automatische Paketprüfung und -installation überspringen |
|
||||
| `--no-enable` | systemd-Autostart nicht aktivieren |
|
||||
| `--no-register` | Globalen CLI-Befehl `/usr/local/bin/adguard-shield` nicht anlegen |
|
||||
| `--install-dir <pfad>` | Abweichendes Installationsverzeichnis verwenden |
|
||||
|
||||
**Beispiele:**
|
||||
@@ -98,6 +112,9 @@ sudo ./adguard-shield install --config-source ./adguard-shield.conf
|
||||
# Ohne Paketprüfung installieren
|
||||
sudo ./adguard-shield install --skip-deps
|
||||
|
||||
# Ohne globalen CLI-Befehl installieren
|
||||
sudo ./adguard-shield install --no-register
|
||||
|
||||
# In anderes Verzeichnis installieren
|
||||
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) |
|
||||
| 4 | Anlage von Installations- und State-Verzeichnissen |
|
||||
| 5 | Kopieren des Binarys nach `/opt/adguard-shield/` |
|
||||
| 6 | Anlage oder Migration der Konfiguration |
|
||||
| 7 | Schreiben der systemd-Unit |
|
||||
| 8 | `systemctl daemon-reload` |
|
||||
| 9 | Optional: Autostart aktivieren |
|
||||
| 10 | Nachfrage: Service direkt starten oder neu starten |
|
||||
| 6 | CLI-Befehl `/usr/local/bin/adguard-shield` registrieren (sofern nicht `--no-register`) |
|
||||
| 7 | Report-Templates installieren |
|
||||
| 8 | Anlage oder Migration der Konfiguration |
|
||||
| 9 | Schreiben der systemd-Unit |
|
||||
| 10 | `systemctl daemon-reload` und optional Autostart aktivieren |
|
||||
| 11 | Nachfrage: Service direkt starten oder neu starten |
|
||||
|
||||
### 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
|
||||
```
|
||||
|
||||
### Update ohne CLI-Registrierung
|
||||
|
||||
```bash
|
||||
sudo ./adguard-shield update --no-register
|
||||
```
|
||||
|
||||
### Was beim Update passiert
|
||||
|
||||
- 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
|
||||
- Neue Konfigurationsparameter werden ergänzt
|
||||
- Bei einer Migration wird `adguard-shield.conf.old` geschrieben
|
||||
@@ -164,13 +189,14 @@ Weitere Details stehen in der [Update-Anleitung](update.md).
|
||||
## Installationsstatus
|
||||
|
||||
```bash
|
||||
sudo ./adguard-shield install-status
|
||||
sudo adguard-shield install-status
|
||||
```
|
||||
|
||||
Zeigt eine Übersicht mit:
|
||||
|
||||
- Installationspfad und Binary-Status
|
||||
- Installierte Version
|
||||
- CLI-Befehl in `/usr/local/bin` vorhanden
|
||||
- Konfiguration vorhanden
|
||||
- systemd-Service vorhanden und Status
|
||||
- Autostart aktiv
|
||||
@@ -188,10 +214,10 @@ sudo ./adguard-shield install-status --install-dir /opt/adguard-shield-test
|
||||
|
||||
```bash
|
||||
# Vollständige Deinstallation
|
||||
sudo /opt/adguard-shield/adguard-shield uninstall
|
||||
sudo adguard-shield uninstall
|
||||
|
||||
# Deinstallation mit Konfigurationserhalt
|
||||
sudo /opt/adguard-shield/adguard-shield uninstall --keep-config
|
||||
sudo adguard-shield uninstall --keep-config
|
||||
```
|
||||
|
||||
**Was bei der Deinstallation passiert:**
|
||||
@@ -275,19 +301,19 @@ Für Debugging oder Dry-Run kann der Daemon im Vordergrund gestartet werden:
|
||||
|
||||
```bash
|
||||
# Normaler Vordergrundlauf
|
||||
sudo /opt/adguard-shield/adguard-shield run
|
||||
sudo adguard-shield run
|
||||
|
||||
# Alias für run
|
||||
sudo /opt/adguard-shield/adguard-shield start
|
||||
sudo adguard-shield start
|
||||
|
||||
# Analysieren ohne echte Sperren
|
||||
sudo /opt/adguard-shield/adguard-shield dry-run
|
||||
sudo adguard-shield dry-run
|
||||
```
|
||||
|
||||
### Daemon über PID-Datei stoppen
|
||||
|
||||
```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.
|
||||
@@ -297,7 +323,7 @@ Für den Alltag gilt: Nutze `systemctl`. Der direkte Vordergrundlauf endet, soba
|
||||
## API-Test
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield test
|
||||
sudo adguard-shield test
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo adguard-shield status
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
```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:
|
||||
@@ -371,7 +397,7 @@ Die `live`-Ansicht ist das beste Werkzeug, wenn du verstehen möchtest, was gera
|
||||
### Alias
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield watch
|
||||
sudo adguard-shield watch
|
||||
```
|
||||
|
||||
---
|
||||
@@ -380,10 +406,10 @@ sudo /opt/adguard-shield/adguard-shield watch
|
||||
|
||||
```bash
|
||||
# Letzte 50 Einträge (Standard)
|
||||
sudo /opt/adguard-shield/adguard-shield history
|
||||
sudo adguard-shield history
|
||||
|
||||
# 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`.
|
||||
@@ -432,16 +458,16 @@ AdGuard Shield schreibt Daemon-Ereignisse in `LOG_FILE`, standardmäßig:
|
||||
|
||||
```bash
|
||||
# Letzte INFO/WARN/ERROR-Einträge
|
||||
sudo /opt/adguard-shield/adguard-shield logs
|
||||
sudo adguard-shield logs
|
||||
|
||||
# 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)
|
||||
sudo /opt/adguard-shield/adguard-shield logs debug
|
||||
sudo adguard-shield logs debug
|
||||
|
||||
# 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
|
||||
@@ -469,7 +495,7 @@ sudo journalctl -u adguard-shield --no-pager -n 100
|
||||
### IP permanent sperren
|
||||
|
||||
```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.
|
||||
@@ -477,7 +503,7 @@ Legt eine manuelle permanente Sperre an. Die IP wird sofort in die Firewall eing
|
||||
### IP entsperren
|
||||
|
||||
```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).
|
||||
@@ -485,7 +511,7 @@ Entfernt die IP aus Firewall und Datenbank. Funktioniert für alle Sperrtypen (a
|
||||
### Alle Sperren aufheben
|
||||
|
||||
```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.
|
||||
@@ -499,7 +525,7 @@ Hebt alle aktiven Sperren auf. Bei aktivierten Benachrichtigungen wird eine zusa
|
||||
### Offense-Status anzeigen
|
||||
|
||||
```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.
|
||||
@@ -507,19 +533,19 @@ Zeigt die Gesamtzahl der Offense-Zähler, davon abgelaufene, und die Konfigurati
|
||||
### Abgelaufene Zähler entfernen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield offense-cleanup
|
||||
sudo adguard-shield offense-cleanup
|
||||
```
|
||||
|
||||
### Alle Offense-Zähler zurücksetzen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield reset-offenses
|
||||
sudo adguard-shield reset-offenses
|
||||
```
|
||||
|
||||
### Zähler für eine IP zurücksetzen
|
||||
|
||||
```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
|
||||
@@ -528,10 +554,10 @@ Wenn ein Client fälschlicherweise eskaliert wurde:
|
||||
|
||||
```bash
|
||||
# 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
|
||||
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)
|
||||
# WHITELIST="127.0.0.1,::1,192.168.1.100"
|
||||
@@ -545,13 +571,13 @@ sudo systemctl restart adguard-shield
|
||||
### Chain und ipsets anlegen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-create
|
||||
sudo adguard-shield firewall-create
|
||||
```
|
||||
|
||||
### Status anzeigen
|
||||
|
||||
```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.
|
||||
@@ -559,7 +585,7 @@ Zeigt die aktuelle Firewall-Struktur: Chain, ipsets und eingehängte Regeln.
|
||||
### ipsets leeren
|
||||
|
||||
```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.
|
||||
@@ -567,13 +593,13 @@ Entfernt alle IPs aus den ipsets. Die Firewall-Struktur (Chain, Regeln) bleibt b
|
||||
### Chain und ipsets vollständig entfernen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-remove
|
||||
sudo adguard-shield firewall-remove
|
||||
```
|
||||
|
||||
### Firewall-Regeln sichern
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-save
|
||||
sudo adguard-shield firewall-save
|
||||
```
|
||||
|
||||
Speichert die aktuellen Regeln nach:
|
||||
@@ -586,7 +612,7 @@ Speichert die aktuellen Regeln nach:
|
||||
### Gesicherte Regeln wiederherstellen
|
||||
|
||||
```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).
|
||||
@@ -598,19 +624,19 @@ sudo /opt/adguard-shield/adguard-shield firewall-restore
|
||||
### Status anzeigen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield whitelist-status
|
||||
sudo adguard-shield whitelist-status
|
||||
```
|
||||
|
||||
### Sofort synchronisieren
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield whitelist-sync
|
||||
sudo adguard-shield whitelist-sync
|
||||
```
|
||||
|
||||
### Aufgelöste externe Whitelist entfernen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield whitelist-flush
|
||||
sudo adguard-shield whitelist-flush
|
||||
```
|
||||
|
||||
### Hinweise
|
||||
@@ -629,19 +655,19 @@ sudo /opt/adguard-shield/adguard-shield whitelist-flush
|
||||
### Status anzeigen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield blocklist-status
|
||||
sudo adguard-shield blocklist-status
|
||||
```
|
||||
|
||||
### Sofort synchronisieren
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield blocklist-sync
|
||||
sudo adguard-shield blocklist-sync
|
||||
```
|
||||
|
||||
### Alle Sperren aus externer Blocklist aufheben
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield blocklist-flush
|
||||
sudo adguard-shield blocklist-flush
|
||||
```
|
||||
|
||||
### Hinweise
|
||||
@@ -658,13 +684,13 @@ sudo /opt/adguard-shield/adguard-shield blocklist-flush
|
||||
### Status anzeigen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-status
|
||||
sudo adguard-shield geoip-status
|
||||
```
|
||||
|
||||
### Einzelne IP nachschlagen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-lookup 8.8.8.8
|
||||
sudo adguard-shield geoip-lookup 8.8.8.8
|
||||
```
|
||||
|
||||
**Ausgabe:**
|
||||
@@ -676,7 +702,7 @@ IP: 8.8.8.8 -> Land: US
|
||||
### Aktuelle Clients prüfen
|
||||
|
||||
```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.
|
||||
@@ -684,13 +710,13 @@ Liest das aktuelle Querylog und prüft alle darin enthaltenen Client-IPs einmali
|
||||
### Alle GeoIP-Sperren aufheben
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-flush
|
||||
sudo adguard-shield geoip-flush
|
||||
```
|
||||
|
||||
### Cache leeren
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-flush-cache
|
||||
sudo adguard-shield geoip-flush-cache
|
||||
```
|
||||
|
||||
### Hinweise
|
||||
@@ -705,25 +731,25 @@ sudo /opt/adguard-shield/adguard-shield geoip-flush-cache
|
||||
### Konfiguration und Cron-Status anzeigen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-status
|
||||
sudo adguard-shield report-status
|
||||
```
|
||||
|
||||
### HTML-Report in Datei schreiben
|
||||
|
||||
```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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-generate txt
|
||||
sudo adguard-shield report-generate txt
|
||||
```
|
||||
|
||||
### Testmail senden
|
||||
|
||||
```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.
|
||||
@@ -731,21 +757,21 @@ Sendet eine einfache Testmail. Erst wenn diese funktioniert, lohnt sich die Fehl
|
||||
### Aktuellen Report erzeugen und versenden
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-send
|
||||
sudo adguard-shield report-send
|
||||
```
|
||||
|
||||
### Cron-Job installieren
|
||||
|
||||
```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
|
||||
|
||||
```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).
|
||||
@@ -755,7 +781,7 @@ Details zum Report-System stehen in [E-Mail Report](report.md).
|
||||
## Dry-Run
|
||||
|
||||
```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.
|
||||
@@ -773,11 +799,11 @@ Der Dry-Run ist der sicherste Weg, neue Konfigurationen zu prüfen, bevor sie pr
|
||||
|
||||
```bash
|
||||
# Dry-Run starten (Strg+C zum Beenden)
|
||||
sudo /opt/adguard-shield/adguard-shield dry-run
|
||||
sudo adguard-shield dry-run
|
||||
|
||||
# Ergebnisse prüfen
|
||||
sudo /opt/adguard-shield/adguard-shield history 50
|
||||
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 80
|
||||
sudo adguard-shield history 50
|
||||
sudo adguard-shield logs --level warn --limit 80
|
||||
```
|
||||
|
||||
---
|
||||
@@ -785,7 +811,7 @@ sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 80
|
||||
## Version
|
||||
|
||||
```bash
|
||||
/opt/adguard-shield/adguard-shield version
|
||||
adguard-shield version
|
||||
```
|
||||
|
||||
Zeigt die installierte Version an. Aliase: `--version`, `-v`.
|
||||
@@ -798,15 +824,15 @@ Zeigt die installierte Version an. Aliase: `--version`, `-v`.
|
||||
|
||||
```bash
|
||||
sudo systemctl restart adguard-shield
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo /opt/adguard-shield/adguard-shield logs --level info --limit 80
|
||||
sudo adguard-shield status
|
||||
sudo adguard-shield logs --level info --limit 80
|
||||
```
|
||||
|
||||
### Falsch gesperrte IP freigeben
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100
|
||||
sudo /opt/adguard-shield/adguard-shield reset-offenses 192.168.1.100
|
||||
sudo adguard-shield unban 192.168.1.100
|
||||
sudo adguard-shield reset-offenses 192.168.1.100
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield whitelist-sync
|
||||
sudo /opt/adguard-shield/adguard-shield blocklist-sync
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo adguard-shield whitelist-sync
|
||||
sudo adguard-shield blocklist-sync
|
||||
sudo adguard-shield status
|
||||
```
|
||||
|
||||
### Firewall neu aufbauen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-remove
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-create
|
||||
sudo adguard-shield firewall-remove
|
||||
sudo adguard-shield firewall-create
|
||||
sudo systemctl restart adguard-shield
|
||||
```
|
||||
|
||||
@@ -834,8 +860,8 @@ Nach dem Neustart schreibt der Daemon aktive Sperren aus SQLite wieder in die Fi
|
||||
```bash
|
||||
sudo systemctl status adguard-shield
|
||||
sudo journalctl -u adguard-shield --no-pager -n 100
|
||||
sudo /opt/adguard-shield/adguard-shield test
|
||||
sudo /opt/adguard-shield/adguard-shield logs --level debug --limit 100
|
||||
sudo adguard-shield test
|
||||
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
|
||||
|
||||
```bash
|
||||
/opt/adguard-shield/adguard-shield --help
|
||||
adguard-shield --help
|
||||
```
|
||||
|
||||
Bei unbekannten Befehlen gibt das Binary die Usage-Ausgabe aus.
|
||||
|
||||
@@ -217,9 +217,9 @@ GEOIP_NOTIFY=false
|
||||
Diese Befehle können viele IPs auf einmal freigeben:
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield flush
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-flush
|
||||
sudo /opt/adguard-shield/adguard-shield blocklist-flush
|
||||
sudo adguard-shield flush
|
||||
sudo adguard-shield geoip-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.
|
||||
@@ -326,7 +326,7 @@ Aktion: Manual-Flush
|
||||
Wenn keine Benachrichtigung ankommt:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
|
||||
@@ -143,8 +143,8 @@ BLOCKED_PORTS="53 443 853"
|
||||
|
||||
```bash
|
||||
sudo systemctl restart adguard-shield
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-status
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo adguard-shield firewall-status
|
||||
sudo adguard-shield status
|
||||
```
|
||||
|
||||
## Firewall neu aufbauen
|
||||
@@ -152,9 +152,9 @@ sudo /opt/adguard-shield/adguard-shield status
|
||||
Falls der Modus gewechselt wurde:
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-remove
|
||||
sudo adguard-shield firewall-remove
|
||||
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.
|
||||
|
||||
@@ -20,7 +20,7 @@ Nach Änderungen muss der Service neu gestartet werden:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart adguard-shield
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo adguard-shield status
|
||||
```
|
||||
|
||||
## Automatische Migration
|
||||
@@ -42,10 +42,10 @@ Nach dem Bearbeiten der Konfiguration:
|
||||
|
||||
```bash
|
||||
# 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
|
||||
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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield offense-status # Zähler anzeigen
|
||||
sudo /opt/adguard-shield/adguard-shield offense-cleanup # Abgelaufene entfernen
|
||||
sudo /opt/adguard-shield/adguard-shield reset-offenses # Alle zurücksetzen
|
||||
sudo /opt/adguard-shield/adguard-shield reset-offenses <IP> # Eine IP zurücksetzen
|
||||
sudo adguard-shield offense-status # Zähler anzeigen
|
||||
sudo adguard-shield offense-cleanup # Abgelaufene entfernen
|
||||
sudo adguard-shield reset-offenses # Alle 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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100
|
||||
sudo /opt/adguard-shield/adguard-shield logs-follow debug
|
||||
sudo /opt/adguard-shield/adguard-shield live
|
||||
sudo adguard-shield logs --level warn --limit 100
|
||||
sudo adguard-shield logs-follow debug
|
||||
sudo adguard-shield live
|
||||
```
|
||||
|
||||
**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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-install
|
||||
sudo adguard-shield report-install
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-status # Status anzeigen
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-lookup 8.8.8.8 # IP nachschlagen
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-sync # Clients prüfen
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-flush-cache # Cache leeren
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-flush # Alle GeoIP-Sperren aufheben
|
||||
sudo adguard-shield geoip-status # Status anzeigen
|
||||
sudo adguard-shield geoip-lookup 8.8.8.8 # IP nachschlagen
|
||||
sudo adguard-shield geoip-sync # Clients prüfen
|
||||
sudo adguard-shield geoip-flush-cache # Cache leeren
|
||||
sudo adguard-shield geoip-flush # Alle GeoIP-Sperren aufheben
|
||||
```
|
||||
|
||||
---
|
||||
@@ -739,6 +739,6 @@ NTFY_TOPIC="adguard-shield-prod"
|
||||
### Vor produktiver Aktivierung
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield test
|
||||
sudo /opt/adguard-shield/adguard-shield dry-run
|
||||
sudo adguard-shield test
|
||||
sudo adguard-shield dry-run
|
||||
```
|
||||
|
||||
@@ -88,13 +88,13 @@ REPORT_MAIL_CMD="msmtp"
|
||||
### Konfiguration und Cron-Status anzeigen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-status
|
||||
sudo adguard-shield report-status
|
||||
```
|
||||
|
||||
### HTML-Report in Datei schreiben
|
||||
|
||||
```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.
|
||||
@@ -102,13 +102,13 @@ Die Datei kann im Browser geöffnet werden, um das Ergebnis zu prüfen.
|
||||
### Text-Report auf stdout ausgeben
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-generate txt
|
||||
sudo adguard-shield report-generate txt
|
||||
```
|
||||
|
||||
### Testmail senden
|
||||
|
||||
```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.
|
||||
@@ -116,19 +116,19 @@ Sendet eine einfache Testmail. Erst wenn diese ankommt, lohnt sich die Fehlersuc
|
||||
### Aktuellen Report erzeugen und versenden
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-send
|
||||
sudo adguard-shield report-send
|
||||
```
|
||||
|
||||
### Cron-Job installieren
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-install
|
||||
sudo adguard-shield report-install
|
||||
```
|
||||
|
||||
### Cron-Job entfernen
|
||||
|
||||
```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
|
||||
|
||||
# Testmail senden
|
||||
sudo /opt/adguard-shield/adguard-shield report-test
|
||||
sudo adguard-shield report-test
|
||||
```
|
||||
|
||||
### Eigene Mailprogramm-Argumente
|
||||
@@ -175,7 +175,7 @@ REPORT_MAIL_CMD="msmtp --account=default"
|
||||
### Cron-Job installieren
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-install
|
||||
sudo adguard-shield report-install
|
||||
```
|
||||
|
||||
Dadurch wird diese Datei geschrieben:
|
||||
@@ -184,12 +184,14 @@ Dadurch wird diese Datei geschrieben:
|
||||
/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
|
||||
/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
|
||||
|
||||
| Intervall | Cron-Verhalten |
|
||||
@@ -202,7 +204,7 @@ Der Cron-Eintrag ruft das installierte Binary mit der installierten Konfiguratio
|
||||
### Cron-Job entfernen
|
||||
|
||||
```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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-status
|
||||
sudo adguard-shield report-status
|
||||
```
|
||||
|
||||
### Schritt 2: Report lokal erzeugen
|
||||
|
||||
```bash
|
||||
# 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
|
||||
sudo /opt/adguard-shield/adguard-shield report-generate txt
|
||||
sudo adguard-shield report-generate txt
|
||||
```
|
||||
|
||||
### Schritt 3: Versand testen
|
||||
|
||||
```bash
|
||||
# Einfache Testmail
|
||||
sudo /opt/adguard-shield/adguard-shield report-test
|
||||
sudo adguard-shield report-test
|
||||
|
||||
# Vollständigen Report senden
|
||||
sudo /opt/adguard-shield/adguard-shield report-send
|
||||
sudo adguard-shield report-send
|
||||
```
|
||||
|
||||
### Schritt 4: Logs prüfen
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
@@ -277,7 +279,7 @@ Oder setze `REPORT_MAIL_CMD` auf dein vorhandenes Mailprogramm.
|
||||
Prüfe die Konfiguration und den Cron-Job:
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-send
|
||||
sudo adguard-shield report-send
|
||||
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:
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-generate txt
|
||||
sudo /opt/adguard-shield/adguard-shield report-generate html /tmp/report.html
|
||||
sudo adguard-shield report-generate txt
|
||||
sudo adguard-shield report-generate html /tmp/report.html
|
||||
```
|
||||
|
||||
@@ -14,19 +14,19 @@ sudo systemctl status adguard-shield
|
||||
sudo journalctl -u adguard-shield --no-pager -n 100
|
||||
|
||||
# 3. Funktioniert die API?
|
||||
sudo /opt/adguard-shield/adguard-shield test
|
||||
sudo adguard-shield test
|
||||
|
||||
# 4. Was ist der aktuelle Zustand?
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo adguard-shield status
|
||||
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield live
|
||||
sudo adguard-shield live
|
||||
```
|
||||
|
||||
---
|
||||
@@ -68,7 +68,7 @@ sudo systemctl daemon-reload
|
||||
### Test
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield test
|
||||
sudo adguard-shield test
|
||||
```
|
||||
|
||||
### Konfiguration prüfen
|
||||
@@ -104,9 +104,9 @@ Passe URL und Zugangsdaten entsprechend an.
|
||||
### Prüfen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield live --once
|
||||
sudo /opt/adguard-shield/adguard-shield history 50
|
||||
sudo /opt/adguard-shield/adguard-shield logs --level debug --limit 100
|
||||
sudo adguard-shield live --once
|
||||
sudo adguard-shield history 50
|
||||
sudo adguard-shield logs --level debug --limit 100
|
||||
```
|
||||
|
||||
### Mögliche Ursachen und Lösungen
|
||||
@@ -131,8 +131,8 @@ sudo /opt/adguard-shield/adguard-shield logs --level debug --limit 100
|
||||
### Übersicht verschaffen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo /opt/adguard-shield/adguard-shield history 100
|
||||
sudo adguard-shield status
|
||||
sudo adguard-shield history 100
|
||||
```
|
||||
|
||||
### Ursachen und Gegenmaßnahmen
|
||||
@@ -149,10 +149,10 @@ sudo /opt/adguard-shield/adguard-shield history 100
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
sudo /opt/adguard-shield/adguard-shield reset-offenses 192.168.1.100
|
||||
sudo adguard-shield reset-offenses 192.168.1.100
|
||||
```
|
||||
|
||||
### Dauerhaft ausnehmen
|
||||
@@ -174,7 +174,7 @@ sudo systemctl restart adguard-shield
|
||||
### Status über AdGuard Shield
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-status
|
||||
sudo adguard-shield firewall-status
|
||||
```
|
||||
|
||||
### Direkte Prüfung mit Systembefehlen
|
||||
@@ -198,8 +198,8 @@ sudo iptables -n -L DOCKER-USER --line-numbers -v | grep ADGUARD
|
||||
### Firewall neu aufbauen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-remove
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-create
|
||||
sudo adguard-shield firewall-remove
|
||||
sudo adguard-shield firewall-create
|
||||
sudo systemctl restart adguard-shield
|
||||
```
|
||||
|
||||
@@ -212,8 +212,8 @@ Nach dem Neustart werden aktive Sperren aus SQLite wieder in die ipsets geschrie
|
||||
### Prüfen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo /opt/adguard-shield/adguard-shield history 100
|
||||
sudo adguard-shield status
|
||||
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.
|
||||
@@ -231,7 +231,7 @@ Temporäre Sperren werden beim Start und während jedes Pollings auf Ablauf gepr
|
||||
### Manuell freigeben
|
||||
|
||||
```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
|
||||
# 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:
|
||||
|
||||
```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.
|
||||
@@ -260,13 +260,13 @@ Im Dry-Run werden mögliche Sperren als `DRY` protokolliert. Es entstehen keine
|
||||
### Status prüfen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield whitelist-status
|
||||
sudo adguard-shield whitelist-status
|
||||
```
|
||||
|
||||
### Manuell synchronisieren
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield whitelist-sync
|
||||
sudo adguard-shield whitelist-sync
|
||||
```
|
||||
|
||||
### Typische Probleme
|
||||
@@ -295,19 +295,19 @@ trusted.example.com # Hostname (wird per DNS aufgelöst)
|
||||
### Status prüfen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield blocklist-status
|
||||
sudo adguard-shield blocklist-status
|
||||
```
|
||||
|
||||
### Manuell synchronisieren
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield blocklist-sync
|
||||
sudo adguard-shield blocklist-sync
|
||||
```
|
||||
|
||||
### Alle Blocklist-Sperren freigeben
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield blocklist-flush
|
||||
sudo adguard-shield blocklist-flush
|
||||
```
|
||||
|
||||
### Zu viele IPs gesperrt?
|
||||
@@ -325,25 +325,25 @@ sudo /opt/adguard-shield/adguard-shield blocklist-flush
|
||||
### Status prüfen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-status
|
||||
sudo adguard-shield geoip-status
|
||||
```
|
||||
|
||||
### Einzelne IP prüfen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-lookup 8.8.8.8
|
||||
sudo adguard-shield geoip-lookup 8.8.8.8
|
||||
```
|
||||
|
||||
### Cache leeren
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-flush-cache
|
||||
sudo adguard-shield geoip-flush-cache
|
||||
```
|
||||
|
||||
### Alle GeoIP-Sperren freigeben
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield geoip-flush
|
||||
sudo adguard-shield geoip-flush
|
||||
```
|
||||
|
||||
### 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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield report-status
|
||||
sudo adguard-shield report-status
|
||||
```
|
||||
|
||||
### Funktionstest
|
||||
|
||||
```bash
|
||||
# Testmail senden
|
||||
sudo /opt/adguard-shield/adguard-shield report-test
|
||||
sudo adguard-shield report-test
|
||||
|
||||
# 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?
|
||||
@@ -396,7 +396,7 @@ sudo /opt/adguard-shield/adguard-shield report-generate txt
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100
|
||||
sudo adguard-shield logs --level warn --limit 100
|
||||
```
|
||||
|
||||
### Checkliste
|
||||
@@ -497,13 +497,13 @@ Wenn der Zustand unklar ist und ein sauberer Neustart nötig ist:
|
||||
sudo systemctl stop adguard-shield
|
||||
|
||||
# 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)
|
||||
sudo systemctl start adguard-shield
|
||||
|
||||
# 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.
|
||||
@@ -515,13 +515,13 @@ Das entfernt die Firewall-Struktur und lässt den Daemon sie beim Start wieder a
|
||||
### Konfiguration behalten
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield uninstall --keep-config
|
||||
sudo adguard-shield uninstall --keep-config
|
||||
```
|
||||
|
||||
### Alles entfernen
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield uninstall
|
||||
sudo adguard-shield uninstall
|
||||
```
|
||||
|
||||
Ohne `--keep-config` werden Installationsverzeichnis, State-Verzeichnis und Logdatei entfernt.
|
||||
|
||||
@@ -14,11 +14,13 @@ sudo ./adguard-shield update
|
||||
|
||||
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
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield install-status
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo adguard-shield install-status
|
||||
sudo adguard-shield status
|
||||
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`) |
|
||||
| 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 |
|
||||
| 6 | CLI-Befehl `/usr/local/bin/adguard-shield` registrieren/aktualisieren (sofern nicht `--no-register`) |
|
||||
| 7 | Report-Templates installieren |
|
||||
| 8 | Konfiguration migrieren (vorhandene Werte behalten, neue ergänzen) |
|
||||
| 9 | systemd-Service neu schreiben |
|
||||
| 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
|
||||
sudo ./adguard-shield update
|
||||
sudo /opt/adguard-shield/adguard-shield test
|
||||
sudo /opt/adguard-shield/adguard-shield dry-run
|
||||
sudo adguard-shield test
|
||||
sudo adguard-shield dry-run
|
||||
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.
|
||||
|
||||
### 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
|
||||
|
||||
```bash
|
||||
@@ -138,7 +149,7 @@ sudo ./adguard-shield update --config-source ./adguard-shield.conf
|
||||
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
|
||||
|
||||
# 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
|
||||
sudo /opt/adguard-shield/adguard-shield dry-run
|
||||
sudo adguard-shield dry-run
|
||||
|
||||
# 6. Produktiven Service starten
|
||||
sudo systemctl start adguard-shield
|
||||
@@ -197,7 +208,7 @@ sudo systemctl status adguard-shield
|
||||
### Installation
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield install-status
|
||||
sudo adguard-shield install-status
|
||||
```
|
||||
|
||||
### Service
|
||||
@@ -210,20 +221,20 @@ sudo journalctl -u adguard-shield --no-pager -n 100
|
||||
### API-Verbindung
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield test
|
||||
sudo adguard-shield test
|
||||
```
|
||||
|
||||
### Laufzeitstatus
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield status
|
||||
sudo /opt/adguard-shield/adguard-shield live --once
|
||||
sudo adguard-shield status
|
||||
sudo adguard-shield live --once
|
||||
```
|
||||
|
||||
### Firewall
|
||||
|
||||
```bash
|
||||
sudo /opt/adguard-shield/adguard-shield firewall-status
|
||||
sudo adguard-shield firewall-status
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -20,6 +20,7 @@ const (
|
||||
DefaultInstallDir = "/opt/adguard-shield"
|
||||
DefaultStateDir = "/var/lib/adguard-shield"
|
||||
DefaultLogFile = "/var/log/adguard-shield.log"
|
||||
CLICommandPath = "/usr/local/bin/adguard-shield"
|
||||
ServiceName = "adguard-shield.service"
|
||||
ServicePath = "/etc/systemd/system/adguard-shield.service"
|
||||
)
|
||||
@@ -30,14 +31,17 @@ type Options struct {
|
||||
Enable bool
|
||||
SkipDeps bool
|
||||
KeepConfig bool
|
||||
RegisterCLI bool
|
||||
}
|
||||
|
||||
type Status struct {
|
||||
InstallDir string
|
||||
BinaryPath string
|
||||
ConfigPath string
|
||||
CLICommandPath string
|
||||
BinaryExists bool
|
||||
ConfigExists bool
|
||||
CLICommandInstalled bool
|
||||
ServiceExists bool
|
||||
ServiceEnabled bool
|
||||
ServiceActive bool
|
||||
@@ -54,30 +58,30 @@ func (e *LegacyError) Error() string {
|
||||
}
|
||||
|
||||
func DefaultOptions() Options {
|
||||
return Options{InstallDir: DefaultInstallDir, Enable: true}
|
||||
return Options{InstallDir: DefaultInstallDir, Enable: true, RegisterCLI: true}
|
||||
}
|
||||
|
||||
func Install(opts Options) error {
|
||||
opts = normalize(opts)
|
||||
fmt.Println("AdGuard Shield Go-Installation")
|
||||
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 {
|
||||
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 {
|
||||
return &LegacyError{Findings: findings}
|
||||
}
|
||||
if !opts.SkipDeps {
|
||||
fmt.Println("3/9 Pruefe System-Abhaengigkeiten ...")
|
||||
fmt.Println("3/10 Pruefe System-Abhaengigkeiten ...")
|
||||
if err := ensureDependencies(); err != nil {
|
||||
return err
|
||||
}
|
||||
} 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 {
|
||||
return err
|
||||
}
|
||||
@@ -87,23 +91,31 @@ func Install(opts Options) error {
|
||||
if err := os.MkdirAll(filepath.Join(opts.InstallDir, "geoip"), 0755); err != nil {
|
||||
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 {
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
fmt.Println("7/9 Installiere oder migriere Konfiguration ...")
|
||||
fmt.Println("8/10 Installiere oder migriere Konfiguration ...")
|
||||
if err := ensureConfig(opts); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println("8/9 Schreibe systemd-Service ...")
|
||||
fmt.Println("9/10 Schreibe systemd-Service ...")
|
||||
if err := writeService(opts.InstallDir); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println("9/9 Aktualisiere systemd ...")
|
||||
fmt.Println("10/10 Aktualisiere systemd ...")
|
||||
_ = run("systemctl", "daemon-reload")
|
||||
if opts.Enable {
|
||||
fmt.Println("Aktiviere Autostart ...")
|
||||
@@ -144,6 +156,7 @@ func Uninstall(opts Options) error {
|
||||
}
|
||||
_ = os.Remove(ServicePath)
|
||||
_ = run("systemctl", "daemon-reload")
|
||||
_ = unregisterCLICommand(opts.InstallDir)
|
||||
if opts.KeepConfig {
|
||||
for _, p := range []string{
|
||||
filepath.Join(opts.InstallDir, "adguard-shield"),
|
||||
@@ -169,8 +182,10 @@ func GetStatus(installDir string) Status {
|
||||
InstallDir: installDir,
|
||||
BinaryPath: bin,
|
||||
ConfigPath: conf,
|
||||
CLICommandPath: CLICommandPath,
|
||||
BinaryExists: fileExists(bin),
|
||||
ConfigExists: fileExists(conf),
|
||||
CLICommandInstalled: cliCommandInstalled(installDir),
|
||||
ServiceExists: fileExists(ServicePath),
|
||||
LegacyFindings: DetectLegacy(installDir),
|
||||
}
|
||||
@@ -253,6 +268,7 @@ func PrintStatus(st Status) string {
|
||||
if 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("systemd Service: %s\n", yesNo(st.ServiceExists)))
|
||||
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)
|
||||
}
|
||||
|
||||
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 {
|
||||
target := filepath.Join(opts.InstallDir, "adguard-shield.conf")
|
||||
defaults := []byte(defaultConfig)
|
||||
|
||||
Reference in New Issue
Block a user