<div dir="ltr"><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Thu, Dec 5, 2024 at 1:29 PM Windl, Ulrich <<a href="mailto:u.windl@ukr.de">u.windl@ukr.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="msg561393539772241435">





<div lang="DE">
<div class="m_561393539772241435WordSection1">
<p class="MsoNormal">Hi!<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span lang="EN-US">I wonder: If a socket unit is using an TCP/IP (v4) stream socket, can’t systemd deduce that the socket should start *<b>after</b>* the network had been set up?</span></p></div></div></div></blockquote><div><br></div><div>It <i>technically</i> could watch netlink for that, but likewise you could use <span style="font-family:monospace">[Socket] FreeBind=yes</span> to avoid the need to wait for the network in the first place.</div><div><br></div><div>(Also, I'm not sure if netlink events can be filtered, and on servers/routers that run BGP with frequent routing updates it already leads to quite a bit of CPU use from things like networkd or strongswan that try to monitor the whole thing...)<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="msg561393539772241435"><div lang="DE"><div class="m_561393539772241435WordSection1"><p class="MsoNormal"><span lang="EN-US"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Specifically I had the case in SLES15 SP6 (systemd-254.18-150600.4.15.10.x86_64) that this socket unit failed to start after the paths target:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"># /usr/lib/systemd/system/omni.socket<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">[Unit]<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Description=DATA-PROTECTOR-INET<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">PartOf=omni.service<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">[Socket]<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">ListenStream=<a href="http://172.20.2.24:5565" target="_blank">172.20.2.24:5565</a><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Accept=yes<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">MaxConnections=1000000<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">MaxConnectionsPerSource=100000<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">TriggerLimitIntervalSec=0<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">TriggerLimitBurst=0<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">[Install]<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">WantedBy=sockets.target<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">The corresponding service unit was:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"># /usr/lib/systemd/system/omni@.service<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">[Unit]<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Description=DATA-PROTECTOR-INET<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Requires=omni.socket<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">[Service]<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">StandardInput=socket<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">PIDFile=/var/run/omni.pid<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">ExecStart=/opt/omni/lbin/inet -log /var/opt/omni/log/inet.log<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">SuccessExitStatus=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 …the list is as long as you can imagine!</span></p></div></div></div></blockquote><div><br></div><div>Avoid this nonsense by using <span style="font-family:monospace">ExecStart=<b>-</b>/opt/omni/lbin/inet.</span><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="msg561393539772241435"><div lang="DE"><div class="m_561393539772241435WordSection1"><p class="MsoNormal"><span lang="EN-US"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Type=simple<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">KillMode=process<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">[Install]<u></u><u></u></span></p>
<div style="border-width:medium medium 1pt;border-style:none none solid;border-color:currentcolor currentcolor windowtext;padding:0cm 0cm 1pt">
<p class="MsoNormal" style="border:medium;padding:0cm"><span lang="EN-US">WantedBy=default.target<u></u><u></u></span></p>
</div>
<p class="MsoNormal"><span lang="EN-US">BTW: Don’t ask ME why the service is a template unit when no instance parameter is being used.</span></p></div></div></div></blockquote><div><br></div><div>You specified <span style="font-family:monospace">Accept=yes</span> – explicitly requesting "fork a new process for each connection" mode – which obviously needs a template service so that multiple instances of it could be run for multiple connections, and the socket 4-tuple becomes the instance parameter to differentiate them.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="msg561393539772241435"><div lang="DE"><div class="m_561393539772241435WordSection1"><p class="MsoNormal"><span lang="EN-US"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Related is the question whether this dependency is OK or not:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"># /usr/lib/systemd/system/sshd.service<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">[Unit]<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Description=OpenSSH Daemon<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">After=network.target<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">[Service]<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Type=notify<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">EnvironmentFile=-/etc/sysconfig/ssh<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">ExecStartPre=/usr/sbin/sshd-gen-keys-start<u></u><u></u></span></p>
<p class="MsoNormal">ExecStartPre=/usr/sbin/sshd -t $SSHD_OPTS<u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">ExecStart=/usr/sbin/sshd -D $SSHD_OPTS<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">ExecReload=/bin/kill -HUP $MAINPID<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">KillMode=process<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Restart=on-failure<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">RestartPreventExitStatus=255<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">TasksMax=infinity<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">[Install]<u></u><u></u></span></p>
<div style="border-width:medium medium 1pt;border-style:none none solid;border-color:currentcolor currentcolor windowtext;padding:0cm 0cm 1pt">
<p class="MsoNormal" style="border:medium;padding:0cm"><span lang="EN-US">WantedBy=multi-user.target<u></u><u></u></span></p>
</div>
<p class="MsoNormal"><span lang="EN-US">Should it “Wants=” or “Requisite=” network.target, too?</span></p></div></div></div></blockquote><div><br></div><div>Does it make sense for a manual 'systemctl start sshd' to also start the network? I'd say Requisite= would make sense, but Wants= a bit less so. (I'm reminded of situations where, if you booted into single-user mode and attempted to start udev, it would also start everything up to Xorg; it was annoying.)</div><div><br></div></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">Mantas Mikulėnas</div></div></div>