<div dir="ltr"><div dir="ltr">On Mon, May 9, 2022 at 7:17 AM Hamza, Muhammad <<a href="mailto:Muhammad_Hamza@mentor.com">Muhammad_Hamza@mentor.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US" style="overflow-wrap: break-word;">
<div class="gmail-m_6921857651424301970WordSection1">
<p class="MsoNormal">Hello,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I am trying to use swupdate services to perform updates on my BSP but there is a problem that I am facing.<u></u><u></u></p>
<p class="MsoNormal">When update usb is plugged in during the boot time, swupdate core and swupdate-usb service run right after<u></u><u></u></p>
<p class="MsoNormal">each-other where swupdate-usb service is dependent on swupdate-core service. Therefore, the update fails as<u></u><u></u></p>
<p class="MsoNormal">core has not initialized yet when swupdate-usb launches the client.<u></u><u></u></p>
<p class="MsoNormal">I have tried adding service type as “exec” in swupdate core service and have tried both Requires and After in swupdate-usb<u></u><u></u></p>
<p class="MsoNormal">service but in all case swupdate-usb does not wait for core to be initialized completely before launching.<u></u><u></u></p>
<p class="MsoNormal">My understanding is that when service type is set to exec service manager will only assume that swupdate core service is<u></u><u></u></p>
<p class="MsoNormal">launched once main process of core is executed and with “Requires” set in swupdate-usb service it should wait till<u></u><u></u></p>
<p class="MsoNormal">swupdate core service has executed its main process and is assumed launched. </p></div></div></blockquote><div><br></div><div>Even with Type=exec, systemd won't automatically know when your process has "initialized completely". Type=exec only means that the kernel call to start executing the process has been fired off – systemd has no automatic visibility beyond that, since the initialization stage varies greatly from one program to another.</div><div><br></div><div>(In fact, looking at your example, systemd thinks that *the shell script* is the main process, it doesn't find out about the actual daemon until later. Please get rid of the .sh script and change your ExecStart= to directly launch the daemon binary.)</div><div><br></div><div>What you need is either Type=notify or Type=forking, and the process needs to <b>explicitly notify</b> systemd that it has reached initialization – for Type=notify it must send a READY=1 message over a socket (see sd_notify), and for Type=forking it needs to "daemonize" at the correct point.</div><div><br></div><div>I checked the source code of swupdate on GitHub, and it seems it already has support for sending READY – there's even <a href="https://github.com/sbabic/swupdate/blob/master/doc/source/swupdate.rst#systemd-integration">a whole section about systemd integration</a> in its docs. So in short, you need to compile it with CONFIG_SYSTEMD, then you'll be able to use Type=notify in the .service unit. Example taken from the swupdate docs:</div><div><br></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_quote"><div><font face="monospace">[Service]</font></div></div><div class="gmail_quote"><div><font face="monospace"><b>Type=notify</b></font></div></div><div class="gmail_quote"><div><font face="monospace"><b>ExecStart=/usr/bin/swupdate</b> -u '-t default -u <a href="http://localhost">http://localhost</a> -i 25'</font></div></div></blockquote><div class="gmail_quote"><div><br></div><div>(The "socket activation" part isn't required, but may help as well.)</div><div><br></div><div>Finally, Type=oneshot is for services where systemd waits for the main process to start *and finish* (e.g. for services that perform a single update and don't have a daemon at all). It sounds a bit like it would be the right choice for swupdate-usb, but it's never correct to use oneshot for daemons like swupdate-core.</div></div><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">Mantas Mikulėnas</div></div></div>