<div dir="ltr"><div class="gmail_quote"><br><div dir="ltr">Hi All,<div><br></div><div>I have  created a layer (my first layer) and have build it with WindRiver media which uses Systemd for the startup services. </div><div><br></div><div>As per my application need, I have to create a new user on the final image and change the owner permissions of certain files to the new user. </div><div>Since I could not get it done on the build machine, I have written the post install script such that it gets executed on the  target board during the 1st boot cycle</div><div>and from within the post install script I am creating the new user and changing the file ownership. And this works. </div><div><br></div><div>But the only problem I have now is that, even though I register my service with Systemd at pre-install (or postinstall) section (using the systemctl enable command)</div><div>my service is not getting launched by Systemd during the 1st boot. On subsequent reboots, it invokes my service at boot up. </div><div><br></div><div>As part of debugging I just modified my postinstall script, such that it gets executed on the board (i.e without the exit 1)  and not executed on the 1st boot. After that I see that </div><div>systemd invokes my service at boot up.  So I wonder if Systemd ignores the services for which post-install is not invoked at build machine ?</div><div><br></div><div>Now I am confused on how to solve this problem. </div><div><br></div><div>Only 2 approaches comes to my mind : </div><div>1) Run the postinstall on the board only (not on 1st boot)  - But with this (i.e running the postinstall section on board) I don't see the new user creation happening and as a result it fails to change the file ownership. </div><div><br></div><div>2) Somehow force systemd to invoke my service at startup (even with postinstall running during 1st boot)  - But I don't know what I have to do to achieve this. </div><div><br></div><div>Here is the brief of my recipe file :</div><div>-----------------------------------------------</div><div><br></div><div><div>DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-systemctl-native', '', d)}"</div><div><br></div><div><br></div><div>do_install() {  </div><div><span style="white-space:pre-wrap">           </span>------------</div><div><span style="white-space:pre-wrap">             </span>------------</div><div><span style="white-space:pre-wrap">             </span>#if systemd configured</div><div><span style="white-space:pre-wrap">           </span>install -m 0755 -d ${D}/lib/systemd/system<span style="white-space:pre-wrap">                                              </span></div><div><span style="white-space:pre-wrap">         </span>cp ${WORKDIR}/${MA_BIN_DIR}/my_ser.service ${D}/lib/systemd/system/</div><div><span style="white-space:pre-wrap">              </span>------------</div><div><span style="white-space:pre-wrap">             </span>------------</div><div>}</div><div><br></div><div>pkg_preinst_${PN}() {</div><div><span style="white-space:pre-wrap">                </span>------------</div><div><span style="white-space:pre-wrap">             </span>------------</div><div><br></div><div><span style="white-space:pre-wrap">            </span>if [  "$IS_SYSTEMD_CONFIGURED" = "yes" ] ; then<span style="white-space:pre-wrap">                                            </span> </div><div><span style="white-space:pre-wrap">                       </span>systemctl --root=$D enable my_ser.service    # Have tried executing it only on postinstall, but it does not help.</div><div><span style="white-space:pre-wrap">              </span>fi</div><div><span style="white-space:pre-wrap">               </span>------------</div><div><span style="white-space:pre-wrap">             </span>------------</div><div>}</div><div><br></div><div>pkg_postinst_${PN}() { </div><div><span style="white-space:pre-wrap">             </span>------------</div><div><span style="white-space:pre-wrap">             </span>------------</div><div><span style="white-space:pre-wrap">             </span>if [  "$IS_SYSTEMD_CONFIGURED" = "yes" ] ; then</div><div><span style="white-space:pre-wrap">                     </span>systemctl --root=$D enable ma.service</div><div><span style="white-space:pre-wrap">            </span>fi</div><div><span style="white-space:pre-wrap">               </span></div><div><span style="white-space:pre-wrap">         </span>if [ x"$D" = "x" ] ; then</div><div><span style="white-space:pre-wrap">            </span></div><div><span style="white-space:pre-wrap">                 </span># Create group and user</div><div><span style="white-space:pre-wrap">                  </span>groupadd test_grp</div><div><span style="white-space:pre-wrap">                        </span>useradd -r -s /sbin/nologin -g  test_grp test_usr</div><div><span style="white-space:pre-wrap">                       </span></div><div><span style="white-space:pre-wrap">                 </span>chown test_usr:test_grp /etc/test_folder/*</div><div><span style="white-space:pre-wrap">                       </span></div><div><span style="white-space:pre-wrap">                 </span>if [  "$IS_SYSTEMD_CONFIGURED" = "yes" ] ; then<span style="white-space:pre-wrap">                                                            </span></div><div><span style="white-space:pre-wrap">                         </span>if [ "$1" == 1 ] || [ "$1" = 2 ] ; then  # only install and upgrade scenario, not to exeute on 1st boot<span style="white-space:pre-wrap">                                                                            </span></div><div><span style="white-space:pre-wrap">                                 </span>systemctl daemon-reload </div><div><span style="white-space:pre-wrap">                                        </span>systemctl start my_ser.service </div><div><span style="white-space:pre-wrap">                 </span>fi<span style="white-space:pre-wrap">                      </span></div><div><span style="white-space:pre-wrap">         </span>else</div><div><span style="white-space:pre-wrap">                     </span>exit 1</div><div><span style="white-space:pre-wrap">           </span>fi</div><div>}</div><div><span style="white-space:pre-wrap">               </span></div><div><br></div></div><div>I am new to the yacto project and the layer approach. So kindly guide me on how to resolve this issue. </div><div><br></div><div>Also if this is not the right group to get help on this issue, please suggest about the relevant group.</div><div><br></div><div>Thanks</div><span class="HOEnZb"><font color="#888888"><div>Vipin</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><div><br></div><div><br></div></div></font></span></div>
</div><br></div>