Skip to contentSkip to conversation

Adding to inittab based on image content

DISCUSSION [email protected] 3 participants 5 messages Jan 6, 2017 – Jan 11, 2017

lore
Share & tools
lore
#0 lore raw

Hi,

I have a custom recipe for an application, and the app also needs an entry adding to inittab. I'd like to trigger this, obviously, only when the app is included in the image.

I came across some hints at how to do this -
http://git.yoctoproject.org/cgit/cgit.cgi/meta-virtualization/tree/recipes-c
ore/sysvinit/sysvinit-inittab_2.88dsf.bbappend?h=dizzy - but the app isn't in DISTRO_FEATURES. (Right or wrong.., I include it in the image with a "CORE_IMAGE_EXTRA_INSTALL +=" in my image recipe).

Any suggestions on how to make this inittab addition conditional?

Thanks

#1 lore raw

Hi Colin,

The correct way of doing this is a package postinstallation script that is run by the package manager after the package containing your application is installed on the target system.

You add to your recipe:

pkg_postinst_${PN}() {
#!/bin/sh
echo "whateveryouneed" >> ${D}/etc/inittab
}

The build system will include this as the post install script into the package in the correct form for the package manager you are using e.g. RPM, DEB, IPK.

This will work when the build system installs your package into the system root or when executed on the target.

You can also distinguish the two cases:

pkg_postinst_${PN}() {
#!/bin/sh
if [ x"$D" = "x" ] ; then

   # shell commands for target execution
else
   # shell commands for build system execution
fi
}

In the case of target execution $D is not set.

Best regards,
Rudi

Quoted 15 lines · On Friday, January 6, 2017 1:39:40 PM PST [email protected] wrote:

Hi,

I have a custom recipe for an application, and the app also needs an entry adding to inittab. I'd like to trigger this, obviously, only when the app is included in the image.

I came across some hints at how to do this -
http://git.yoctoproject.org/cgit/cgit.cgi/meta-virtualization/tree/recipes-c
ore/sysvinit/sysvinit-inittab_2.88dsf.bbappend?h=dizzy - but the app isn't in DISTRO_FEATURES. (Right or wrong.., I include it in the image with a "CORE_IMAGE_EXTRA_INSTALL +=" in my image recipe).

Any suggestions on how to make this inittab addition conditional?

Thanks

Signature · 1 line
Rudolf J Streif
#2 lore raw
Quoted 6 lines · Rudolf J Streif

Hi Colin,

The correct way of doing this is a package postinstallation script that is run by the package manager after the package containing your application is installed on the target system.

Quoted 6 lines

You add to your recipe:

pkg_postinst_${PN}() {
#!/bin/sh
echo "whateveryouneed" >> ${D}/etc/inittab
}

Problems are that if you upgrade the application on target, it'll be included twice, and that when you remove the application, the inittab entry remains. If inittab itsef gets upgraded, the entry will be gone.

Quoted 45 lines

The build system will include this as the post install script into the package in the correct form for the package manager you are using e.g. RPM, DEB, IPK.

This will work when the build system installs your package into the system root or when executed on the target.

You can also distinguish the two cases:

pkg_postinst_${PN}() {
#!/bin/sh
if [ x"$D" = "x" ] ; then

    # shell commands for target execution
else
    # shell commands for build system execution
fi
}

In the case of target execution $D is not set.

Best regards,
Rudi

Quoted 15 lines · On Friday, January 6, 2017 1:39:40 PM PST [email protected] wrote:

Hi,

I have a custom recipe for an application, and the app also needs an entry adding to inittab. I'd like to trigger this, obviously, only when the app is included in the image.

I came across some hints at how to do this -
http://git.yoctoproject.org/cgit/cgit.cgi/meta-virtualization/tree/recipes-c
ore/sysvinit/sysvinit-inittab_2.88dsf.bbappend?h=dizzy - but the app isn't in DISTRO_FEATURES. (Right or wrong.., I include it in the image with a "CORE_IMAGE_EXTRA_INSTALL +=" in my image recipe).

Any suggestions on how to make this inittab addition conditional?

Thanks

Signature · 16 lines
Mike Looijmans


Kind regards,

Mike Looijmans
System Expert

TOPIC Products
Materiaalweg 4, NL-5681 RJ Best
Postbus 440, NL-5680 AK Best
Telefoon: +31 (0) 499 33 69 79
E-mail: [email protected]
Website: www.topicproducts.com

Please consider the environment before printing this e-mail
#3 lore raw
Quoted 9 lines · PST Mike Looijmans
Quoted 8 lines · Rudolf J Streif

Hi Colin,

The correct way of doing this is a package postinstallation script that is run by the package manager after the package containing your application is installed on the target system.

You add to your recipe:

Quoted 9 lines
Quoted 4 lines

pkg_postinst_${PN}() {
#!/bin/sh
echo "whateveryouneed" >> ${D}/etc/inittab
}

Problems are that if you upgrade the application on target, it'll be included twice, and that when you remove the application, the inittab entry remains. If inittab itsef gets upgraded, the entry will be gone.

For the former, you use your imagination and scripting skills to see if the entry is already there and remove it or you use pkg_preinst_${PN} to remove the entry before installing.

For the latter pkg_prerm_${PN} and pkg_postrm_${PN} are at your disposition.

The problem you stated is actually independent of the build system. It is part of the package management. For RPM, for example, the scripts get copied into the respective sections of the package manifest:

pgk_preinst -> %pre
pkg_post_inst -> %post
pkg_prerm -> %preun
pkg_postrm -> %postun

Accordingly for the other package management systems.

Signature · 1 line
Rudolf J Streif
#4 lore raw
In reply to Rudolf J Streif

Thanks Rudi, that's got it.

-----Original Message-----
From: Rudolf J Streif [mailto:[email protected]]
Sent: 06 January 2017 17:18
To: [email protected]; [email protected]
Subject: Re: [yocto] Adding to inittab based on image content

Hi Colin,

The correct way of doing this is a package postinstallation script that is run by the package manager after the package containing your application is installed on the target system.

You add to your recipe:

pkg_postinst_${PN}() {
#!/bin/sh
echo "whateveryouneed" >> ${D}/etc/inittab }

The build system will include this as the post install script into the package in the correct form for the package manager you are using e.g. RPM, DEB, IPK.

This will work when the build system installs your package into the system root or when executed on the target.

You can also distinguish the two cases:

pkg_postinst_${PN}() {
#!/bin/sh
if [ x"$D" = "x" ] ; then

   # shell commands for target execution else
   # shell commands for build system execution fi }

In the case of target execution $D is not set.