Adding to inittab based on image content
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
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 inDISTRO_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
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,
RudiQuoted 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 inDISTRO_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
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 -> %prepkg_post_inst -> %postpkg_prerm -> %preunpkg_postrm -> %postun
Accordingly for the other package management systems.
Signature · 1 line
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.