View previous topic :: View next topic |
Author |
Message |
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Mon Mar 19, 2018 2:33 pm Post subject: net-ftp/tftp-hpa-5.2-r1 und systemd: Konfiguration anpassen |
|
|
Hallo zusammen,
ich habe hier immer noch ein Verständnisproblem mit dem Start von daemonen unter systemd und im speziellen Fall hier mit dem oben genannten tftp daemon.
Bei den Unit files finde ich das hier:
Code: | systemctl list-unit-files
...
tftp.service static
...
tftp.socket disabled
...
|
Dann jeweils die Konfig:
Code: | systemctl cat tftp.service
# /lib/systemd/system/tftp.service
[Unit]
Description=Tftp Server
[Service]
ExecStart=/usr/sbin/in.tftpd -R 4096:32767 -s /tftproot
StandardInput=socket
|
und
Code: | systemctl cat tftp.socket
# /lib/systemd/system/tftp.socket
[Unit]
Description=Tftp Server Activation Socket
[Socket]
ListenDatagram=69
[Install]
WantedBy=sockets.target |
Wenn ich das jetzt richtig interpretiere aktiviert man den socket, welcher dann den daemon startet sobald der socket angesprochen wird.
So, die Konfig ist ja in dem Fall global und wenn ich die für meine Zwecke anpassen will, kann ich das mit einem override file tun welches ich per
Code: | systemctl edit tftp.service
[Service]
ExecStart=/usr/sbin/in.tftpd -c -u ftp -R 4096:32767 -s /srv/tftp_root/
| in der Art anlege.
Dann aktivieren:
Code: | systemctl daemon-reload
systemctl enable tftp.socket |
Und wenn ich versuche was per tftp zu übertragen bekomme ich einen timeout, und sehe im journal
Code: | tftp.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing. |
So, ich könnte es im globalen Unitfile ändern, aber dann würde es ja beim nächsten Update überschrieben. Deshalb gibt es ja die override files.
Also was mache ich falsch? _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
schmidicom Veteran
Joined: 09 Mar 2006 Posts: 1924 Location: Schweiz
|
Posted: Mon Mar 19, 2018 3:06 pm Post subject: |
|
|
Die Funktion "edit" von systemctl habe ich ehrlich gesagt nie benutzt aber anhand der Fehlermeldung die du da bekommen hast hat das Unit nach deinem Edit wohl zwei "ExecStart"-Zeilen was nicht funktionieren kann.
Versuche erst einmal sicherzustellen das die Originaldatei von "tftp.service" unter "/lib/systemd/system/" noch in ihrem original zustand ist. Wenn ja dann kopiere diese mit cp nach "/etc/systemd/system/" und ändere mit irgend einem Editor deiner Wahl diese Kopie ab. Danach wäre noch ein "systemctl daemon-reload && systemctl disable tftp.service tftp.socket && systemctl enable tftp.socket" gut um sicherzustellen das beim hochfahren auch wirklich das richtige gestartet wird.
EDIT:
Nach dem durchlesen der Manpage zu "systemctl edit" würde ich dir auch empfehlen mal nachzusehen ob du in deinem "/etc/systemd/system/" von deinem ersten edit Versuch irgendwelche "tftp.service.d/override.conf" Fragmente übrig hast. _________________ Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW |
|
Back to top |
|
|
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Wed Mar 21, 2018 2:43 pm Post subject: |
|
|
schmidicom wrote: | Die Funktion "edit" von systemctl habe ich ehrlich gesagt nie benutzt aber anhand der Fehlermeldung die du da bekommen hast hat das Unit nach deinem Edit wohl zwei "ExecStart"-Zeilen was nicht funktionieren kann.
Versuche erst einmal sicherzustellen das die Originaldatei von "tftp.service" unter "/lib/systemd/system/" noch in ihrem original zustand ist. Wenn ja dann kopiere diese mit cp nach "/etc/systemd/system/" und ändere mit irgend einem Editor deiner Wahl diese Kopie ab. Danach wäre noch ein "systemctl daemon-reload && systemctl disable tftp.service tftp.socket && systemctl enable tftp.socket" gut um sicherzustellen das beim hochfahren auch wirklich das richtige gestartet wird.
EDIT:
Nach dem durchlesen der Manpage zu "systemctl edit" würde ich dir auch empfehlen mal nachzusehen ob du in deinem "/etc/systemd/system/" von deinem ersten edit Versuch irgendwelche "tftp.service.d/override.conf" Fragmente übrig hast. |
Die Funktion edit legt in "/etc/systemd/system/" ein Verzeichnis mit dem Namen das service an. In diesem Fall "tftp.service.d" und da dann die Datei override.conf an.
Inzwischen hab ich herausgefunden, dass man in override Dateien einen schon gesetzten Parameter erst wieder auf leer setzen muss bevor man ihn wieder neu setzt und das immer mit der zugehörigen section.
Also z.B. in meinem Fall so:
Code: | [Service]
ExecStart=
ExecStart=/usr/sbin/in.tftpd -u ftp -c -R 4096:32767 -s /srv/tftp_root/
|
Jetzt scheint das Ding auch zu starten. _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
musv Advocate
Joined: 01 Dec 2002 Posts: 3337 Location: de
|
Posted: Fri Mar 23, 2018 8:58 am Post subject: |
|
|
edit kannte ich auch noch nicht.
Mal ein paar Worte zu xyz.service.d:
Die Datei(en) darin müssen nicht override.conf heißen. Du kannst jeden beliebigen Namen wählen. Es muss halt nur auf .conf enden. Die Dateien darin haben den Sinn, die Unit zu erweiteren und dabei die originale Unit ansonsten beizubehalten. Sinnvolle Verwendung wären das Hinzufügen einer Abhängigkeit (after, requires), das Starten und Beenden eines anderen Services (bindto) oder das Setzen von Environmentvariablen.
Willst du hingegen die originale Unit ändern, halte ich es auch für sinnvoller, die originale Unit aus /usr/lib/systemd/system nach /etc/systemd/system zu kopieren und da zu ändern.
Ich stand übrigens mal vor demselben Problem. Nach irgendeinem Update funktionierte der tftpd (auch tftp-hpa) nicht mehr. Ich fand dann raus, dass das Teil nur noch auf IPv6 hört und IPv4 mal eben so deaktiviert wurde.
/etc/systemd/system/tftp.service: |
[Unit]
Description=Tftp Server
[Service]
ExecStart=/usr/sbin/in.tftpd -4 -L -R 4096:32767 -s /tftproot
[Install]
WantedBy=multi-user.target |
Den Socket hab ich übrigens deaktiviert. Soviel Leistung braucht der tftp-Daemon jetzt nicht. |
|
Back to top |
|
|
|