systemd socket activation fuer einen UDP-Dienst, hier tftp

13/08/2016 - 08:30 von Marc Haber | Report spam
Hallo,

ich möchte den atftpd-Dienst per systemd socket activation starten und
bin dabei bisher nicht erfolgreich. Hier mein aktueller Versuch:

|==> /etc/systemd/system/atftpd.socket <=|[Unit]
|Description=Advanced tftp Server Activation Socket
|
|[Socket]
|ListenDatagrami
|
|[Install]
|WantedBy=sockets.target

|==> /etc/systemd/system/atftpd@.service <=|[Unit]
|Description=Advanced TFTP Server
|
|[Service]
|ExecStart=/usr/sbin/atftpd --tftpd-timeout 300 --retry-timeout 5 --no-multicast --maxthread 100 --verbose=5 /srv/tftp
|StandardInput=socket

So wie das da steht, versucht er beim Zugriff auf Port 69 den atftpd
über das im Debian-Paket enthaltene Initscript per LSB-Generator zu
starten. Unerwünscht.

Wenn ich dann atftpd.service maskiere, sagt er:
|Aug 12 10:21:56 weave systemd[1]: Starting Advanced tftp Server Activation Socket.
|Aug 12 10:21:56 weave systemd[1]: Socket service atftpd.service not loaded, refusing.
|Aug 12 10:21:56 weave systemd[1]: Failed to listen on Advanced tftp Server Activation Socket.

Wenn ich "Accept=yes" in der socket-Unit setze (was laut Doku für
ListnDatagram ignoriert wird), sagt er im Log "atftpd.socket
configured for accepting sockets, but sockets are non-accepting.
Refusing."

Wie macht man's richtig?

Grüße
Marc
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834
 

Lesen sie die antworten

#1 Marc Haber
16/08/2016 - 14:50 | Warnen spam
On Sat, 13 Aug 2016 08:03:15 +0200, Marc Haber
<mh+ wrote:
ich möchte den atftpd-Dienst per systemd socket activation starten und
bin dabei bisher nicht erfolgreich.



Marc Haber <mh+ wrote:
ich möchte den atftpd-Dienst per systemd socket activation starten und
bin dabei bisher nicht erfolgreich.



Meine Findings:

(1)
Socket Activation in Systemd dient - o Wunder - der Beschleunigung des
Systemstarts. Es ist Bestandteil des Konzepts, dass der Dienst nach
seiner ersten Aktivierung weiterlàuft und die eine laufende Insanz
weitere Requests von systemd zugestellt bekommt.

(2)
Für TCP-Dienste kann man Accept=yes auf dem socket setzen, dann wird
für jeden Request eine neue Instanz des Dienstes gestartet.

(3)
Accept=yes funktioniert auch in systemd 231 nicht mit UDP-Diensten
("atftpd.socket configured for accepting sockets, but sockets are
non-accepting. Refusing")

(4)
Man könnte jetzt den gestarteten Dienst per cron alle paar Minuten
wieder stoppen, damit er nicht die ganze Zeit sinnlos herumhàngt, wenn
er nur zweimal im Monat gestartet wird.

(5)
Aber: auch das funktioniert nicht in Debian Stable, dort beschwert
sich der tftp-Server beim zweiten und folgenden Aufruf ("Address
family not supported"), man müsste ihn also viel hàufiger stoppen,
damit auch mehrere Requests hintereinander ordentlich serviert werden
können. Ob das nun ein Bug im (inzwischen) tftp-hpa oder in systemd
215 ist, habe ich nicht weiter untersucht, denn...


... ich lege das jetzt zu den Akten und lass den tftpd einfach laufen.
Mit dem Release von Stretch überlege ich mir, ob ich Konzept (4)
umsetze.

Es sei denn, es liefert doch noch jemand weitere Einsicht.

Grüße
Marc

Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834

Ähnliche fragen