[yocto] Fwd: With my layer, Systemd not invoking my application at startup
Saul Wold
sgw at linux.intel.com
Wed Jul 1 09:44:33 PDT 2015
On 06/30/2015 08:35 PM, Vipin Nair wrote:
> Hi All,
>
> I have created a layer (my first layer) and have build it with WindRiver
> media which uses Systemd for the startup services.
>
> 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.
> 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
> and from within the post install script I am creating the new user and
> changing the file ownership. And this works.
>
> 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)
> my service is not getting launched by Systemd during the 1st boot. On
> subsequent reboots, it invokes my service at boot up.
>
> 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
> 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 ?
>
> Now I am confused on how to solve this problem.
>
> Only 2 approaches comes to my mind :
> 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.
>
> 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.
>
> Here is the brief of my recipe file :
> -----------------------------------------------
>
> DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd',
> 'systemd-systemctl-native', '', d)}"
>
>
> do_install() {
> ------------
> ------------
> #if systemd configured
> install -m 0755 -d ${D}/lib/systemd/system
> cp ${WORKDIR}/${MA_BIN_DIR}/my_ser.service ${D}/lib/systemd/system/
> ------------
> ------------
> }
>
> pkg_preinst_${PN}() {
> ------------
> ------------
>
> if [ "$IS_SYSTEMD_CONFIGURED" = "yes" ] ; then
> systemctl --root=$D enable my_ser.service # Have tried executing it only
> on postinstall, but it does not help.
> fi
> ------------
> ------------
> }
>
> pkg_postinst_${PN}() {
> ------------
> ------------
> if [ "$IS_SYSTEMD_CONFIGURED" = "yes" ] ; then
> systemctl --root=$D enable ma.service
> fi
> if [ x"$D" = "x" ] ; then
> # Create group and user
> groupadd test_grp
> useradd -r -s /sbin/nologin -g test_grp test_usr
It appears you did not try to use the useradd bbclass here.
> chown test_usr:test_grp /etc/test_folder/*
> if [ "$IS_SYSTEMD_CONFIGURED" = "yes" ] ; then
> if [ "$1" == 1 ] || [ "$1" = 2 ] ; then # only install and upgrade
> scenario, not to exeute on 1st boot
> systemctl daemon-reload
> systemctl start my_ser.service
> fi
> else
> exit 1
> fi
> }
>
> I am new to the yacto project and the layer approach. So kindly guide me on
> how to resolve this issue.
>
If you can send your full bb file, are you using the systemd bbclass as
I suggested in a past email?
Sau!
> Also if this is not the right group to get help on this issue, please
> suggest about the relevant group.
>
> Thanks
> Vipin
>
>
>
More information about the yocto
mailing list