fix ensure-printers service

This commit is contained in:
2026-05-05 07:08:54 +02:00
parent 7dc953f5b5
commit 1804613a44

View File

@@ -1,15 +1,40 @@
{pkgs, ...}: { {pkgs, ...}: let
# Wait-Script für Erreichbarkeit des Druckers (IPPS-Port 443).
# Funktioniert sowohl im Office (direkte Route) als auch unterwegs via NetBird.
wait-for-printer = pkgs.writeShellScriptBin "wait-for-printer" ''
PRINTER_HOST="192.168.152.137"
PRINTER_PORT="443"
MAX_ATTEMPTS="120"
NC="${pkgs.netcat}/bin/nc"
for i in $(${pkgs.coreutils}/bin/seq 1 $MAX_ATTEMPTS); do
if $NC -z -w 1 "$PRINTER_HOST" "$PRINTER_PORT"; then
exit 0
fi
${pkgs.coreutils}/bin/sleep 1
done
echo "Printer $PRINTER_HOST:$PRINTER_PORT not reachable after ''${MAX_ATTEMPTS}s" >&2
exit 1
'';
in {
# CUPS Druckdienst für PDF-Druck aus n8n # CUPS Druckdienst für PDF-Druck aus n8n
# Drucker: Kyocera TASKalfa 4054ci @ 192.168.152.137 # Drucker: Kyocera TASKalfa 4054ci @ 192.168.152.137
# Druckernetz (192.168.152.0/24) wird via NetBird geroutet ensure-printers # Erreichbar im Office direkt oder unterwegs via NetBird-Tunnel.
# muss warten bis NetBird verbunden ist und die Route aktiv ist. # Das Wait-Script prüft IPPS-Port 443 unabhängig vom Interface.
systemd.services.ensure-printers = { systemd.services.ensure-printers = {
after = ["netbird.service"]; wantedBy = ["multi-user.target"];
requires = ["netbird.service"]; wants = ["netbird.service" "network-online.target"];
serviceConfig.ExecStartPre = [ after = ["netbird.service" "network-online.target"];
"${pkgs.bash}/bin/bash -c 'for i in $(seq 1 60); do ${pkgs.iproute2}/bin/ip route get 192.168.152.137 2>/dev/null | grep -q wt0 && exit 0; sleep 1; done; echo \"NetBird route to printer not available after 60s\" >&2; exit 1'"
]; serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStartPre = ["${wait-for-printer}/bin/wait-for-printer"];
Restart = "on-failure";
RestartSec = "30s";
};
}; };
services.printing = { services.printing = {