Pi-hole 6.3: `--unattended` zeigt trotzdem ncurses-Dialog bei Neuinstallation (ohne `pihole.toml`)

Beschreibung

Ich versuche, Pi-hole 6.3 nicht-interaktiv mit dem Installer und dem Parameter --unattended zu installieren – sowohl manuell auf der Shell als auch aus einem Ansible-Playbook heraus.
Trotzdem öffnet der Installer den ncurses-Dialog („This installer will transform your device into a network-wide ad blocker!“) und wartet auf eine Bestätigung, sodass die Installation nicht unattended durchläuft.

Umgebung

  • Pi-hole-Version: 6.3 (frische Installation, kein Upgrade)
  • Betriebssystem: Debian 13 (Bookworm/Testing)
  • Host: KVM/QEMU-VM
  • Vorher kein Pi-hole installiert, /etc/pihole existiert vor dem Installer nicht
  • Keine pihole.toml oder setupVars.conf vor der Installation vorhanden

Verwendeter Befehl

Manueller Test direkt auf der VM:

export DEBIAN_FRONTEND=noninteractive
export PIHOLE_SKIP_OS_CHECK=true
curl -sSL https://install.pi-hole.net | bash /dev/stdin --unattended

(Der gleiche Befehl wird auch in einem Ansible-shell-Task verwendet.)

Erwartetes Verhalten

Mit gesetztem --unattended erwarte ich, dass der Installer:

  • keine interaktiven ncurses-/Dialog-Screens anzeigt
  • entweder Standardwerte oder Werte aus einer vorhandenen Konfigurationsdatei verwendet
  • mit einem nicht-null Exit-Code und einer klaren Fehlermeldung abbricht, falls eine unattended-Installation nicht möglich ist (z. B. weil keine pihole.toml existiert), statt auf Benutzereingaben zu warten.

Tatsächliches Verhalten

  • Der Installer öffnet die erste ncurses-Oberfläche
    This installer will transform your device into a network-wide ad blocker!
  • Er wartet darauf, dass man „OK“ bestätigt.
  • Wenn der Installer aus Ansible heraus gestartet wird, bleibt das Playbook an diesem Task hängen, weil keine TTY-Eingabe möglich ist.

In diesem Zustand wird auch kein /var/log/pihole-install.log angelegt, das Script scheint also sehr früh im Installationsablauf zu stoppen.

Was ich bereits geprüft habe

  • DNS und Netzwerk funktionieren, curl https://install.pi-hole.net läuft ohne Fehler.
  • Das Verhalten ist identisch, egal ob der Installer direkt auf der Shell oder über Ansible gestartet wird.
  • Es wirkt so, als ob --unattended bei einer frischen v6.3-Installation ohne vorhandene Konfigurationsdatei ignoriert wird bzw. intern eine Config erwartet, ohne das klar mitzuteilen.

Wunsch / Vorschlag

Falls --unattended zwingend eine vorbereitete /etc/pihole/pihole.toml benötigt, wäre es sehr hilfreich, wenn der Installer:

  1. Ganz am Anfang prüft, ob diese Datei vorhanden ist, und
  2. Wenn sie fehlt, eine klare Fehlermeldung ausgibt wie z. B.:
    Unattended installation requires /etc/pihole/pihole.toml – aborting.
    und mit einem nicht-null Exit-Code abbricht, anstatt Dialoge zu öffnen.

Das würde automatisierte Deployments (z. B. mit Ansible) deutlich einfacher machen und verhindern, dass der Installer scheinbar „hängt“, ohne Logs zu erzeugen.

Wenn es bereits einen empfohlenen Weg für eine vollständig unattended Installation von v6.x gibt (z. B. minimaler Inhalt einer pihole.toml), wäre ein kurzes Beispiel in der Dokumentation sehr hilfreich.

Der OS check wurde mit core v6.1 entfernt und PIHOLE_SKIP_OS_CHECK=true wird nicht mehr benötigt.

--unattended braucht ein bereits ausgefülltes /etc/pihole/pihole.toml.

Auf GitHub gibt es ein zugehöriges Issue: Installer: `--unattended` silently fails if no config file provided. · Issue #6380 · pi-hole/pi-hole · GitHub
Es gibt auch einen Ansatz zur Lösung: When running with --unattended flag, ensure pre-seeded pihole.toml file exists by PromoFaux · Pull Request #6381 · pi-hole/pi-hole · GitHub