rootfs: Ensure run-postinsts is not uninstalled for read-only-rootfs-delayed-postinsts

This patch ensures that pkg_postinst_ontarget task is executed for read only rootfs when
read-only-rootfs-delayed-postinsts is set as IMAGE_FEATURES. The issue was that run-postinsts
could be uninstalled at the end of rootfs construction and that shouldn't happen for
the delayed usecase.

In addition to the fix, a test in meta/lib/oeqa/selftest/cases/overlayfs.py testing
the fix has been implemented.

(From OE-Core rev: 60f587475dda99eaa07848880058b69286b8900e)

Signed-off-by: Gassner, Tobias.ext <tobias.gassner.ext@karlstorz.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Gassner, Tobias.ext
2024-07-15 08:35:11 +02:00
committed by Richard Purdie
parent a278540fc1
commit a22bdf729a
2 changed files with 44 additions and 1 deletions

View File

@@ -269,7 +269,11 @@ class Rootfs(object, metaclass=ABCMeta):
self.pm.remove(["run-postinsts"])
image_rorfs = bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs",
True, False, self.d) and \
not bb.utils.contains("IMAGE_FEATURES",
"read-only-rootfs-delayed-postinsts",
True, False, self.d)
image_rorfs_force = self.d.getVar('FORCE_RO_REMOVE')
if image_rorfs or image_rorfs_force == "1":

View File

@@ -5,7 +5,7 @@
#
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import bitbake, runqemu
from oeqa.utils.commands import bitbake, runqemu, get_bb_vars
from oeqa.core.decorator import OETestTag
from oeqa.core.decorator.data import skipIfNotMachine
@@ -466,6 +466,45 @@ IMAGE_INSTALL:append = " overlayfs-user"
line = getline_qemu(output, "Read-only file system")
self.assertTrue(line, msg=output)
@skipIfNotMachine("qemux86-64", "tests are qemux86-64 specific currently")
def test_postinst_on_target_for_read_only_rootfs(self):
"""
Summary: The purpose of this test case is to verify that post-installation
on target scripts are executed even if using read-only rootfs when
read-only-rootfs-delayed-postinsts is set
Expected: The test files are created on first boot
"""
import oe.path
vars = get_bb_vars(("IMAGE_ROOTFS", "sysconfdir"), "core-image-minimal")
sysconfdir = vars["sysconfdir"]
self.assertIsNotNone(sysconfdir)
# Need to use oe.path here as sysconfdir starts with /
targettestdir = os.path.join(sysconfdir, "postinst-test")
config = self.get_working_config()
args = {
'OVERLAYFS_INIT_OPTION': "",
'OVERLAYFS_ETC_USE_ORIG_INIT_NAME': 1,
'OVERLAYFS_ROOTFS_TYPE': "ext4",
'OVERLAYFS_ETC_CREATE_MOUNT_DIRS': 1
}
# read-only-rootfs is already set in get_working_config()
config += 'EXTRA_IMAGE_FEATURES += "read-only-rootfs-delayed-postinsts"\n'
config += 'CORE_IMAGE_EXTRA_INSTALL = "postinst-delayed-b"\n'
self.write_config(config.format(**args))
res = bitbake('core-image-minimal')
with runqemu('core-image-minimal', image_fstype='wic') as qemu:
for filename in ("rootfs", "delayed-a", "delayed-b"):
status, output = qemu.run_serial("test -f %s && echo found" % os.path.join(targettestdir, filename))
self.assertIn("found", output, "%s was not present on boot" % filename)
def get_working_config(self):
return """
# Use systemd as init manager