diff mbox series

execute pkg_postinst_ontarget task for read only rootfs when read-only-rootfs-delayed-postinsts is set

Message ID PA4PR01MB935650793B965CC1A54FB63AD5DB2@PA4PR01MB9356.eurprd01.prod.exchangelabs.com
State New
Headers show
Series execute pkg_postinst_ontarget task for read only rootfs when read-only-rootfs-delayed-postinsts is set | expand

Commit Message

Gassner, Tobias.ext July 9, 2024, 7:03 a.m. UTC
Hi,

this patch will ensure that pkg_postinst_ontarget task is executed for read only rootfs when read-only-rootfs-delayed-postinsts is set as IMAGE_FEATURES. In addition to the fix, a test in meta/lib/oeqa/selftest/cases/overlayfs.py testing the fix has been implemented.

See https://lists.yoctoproject.org/g/poky/topic/106869018#msg13391 for the discussion of this patch; this patch consits of patches 608050984c5be67f506a0877fadbbe0b61575e54 and da51462765e24b186c55431b53856eebd5f6e8da in that discussion.

Greetings
-Tobias


From ecf1d8c47ecb72c2f27464f01e932091374f4e6c Mon Sep 17 00:00:00 2001
From: "Gassner, Tobias.ext" <tobias.gassner.ext@karlstorz.com>
Date: Tue, 9 Jul 2024 08:34:30 +0200
Subject: [PATCH] execute pkg_postinst_ontarget task for read only rootfs when
 read-only-rootfs-delayed-postinsts is set

Signed-off-by: Gassner, Tobias.ext <tobias.gassner.ext@karlstorz.com>
---
 meta/lib/oe/rootfs.py                     |  4 +++
 meta/lib/oeqa/selftest/cases/overlayfs.py | 41 ++++++++++++++++++++++-
 2 files changed, 44 insertions(+), 1 deletion(-)

--
2.45.2

Comments

Alexander Kanavin July 9, 2024, 7:21 a.m. UTC | #1
You need to use ‘git send-email’.

Alex

On Tue 9. Jul 2024 at 9.03, Gassner, Tobias.ext via lists.openembedded.org
<Tobias.Gassner.ext=karlstorz.com@lists.openembedded.org> wrote:

> Hi,
>
> this patch will ensure that pkg_postinst_ontarget task is executed for
> read only rootfs when read-only-rootfs-delayed-postinsts is set as
> IMAGE_FEATURES. In addition to the fix, a test in
> meta/lib/oeqa/selftest/cases/overlayfs.py testing the fix has been
> implemented.
>
> See https://lists.yoctoproject.org/g/poky/topic/106869018#msg13391 for
> the discussion of this patch; this patch consits of patches
> 608050984c5be67f506a0877fadbbe0b61575e54 and
> da51462765e24b186c55431b53856eebd5f6e8da in that discussion.
>
> Greetings
> -Tobias
>
>
> From ecf1d8c47ecb72c2f27464f01e932091374f4e6c Mon Sep 17 00:00:00 2001
> From: "Gassner, Tobias.ext" <tobias.gassner.ext@karlstorz.com>
> Date: Tue, 9 Jul 2024 08:34:30 +0200
> Subject: [PATCH] execute pkg_postinst_ontarget task for read only rootfs
> when
>  read-only-rootfs-delayed-postinsts is set
>
> Signed-off-by: Gassner, Tobias.ext <tobias.gassner.ext@karlstorz.com>
> ---
>  meta/lib/oe/rootfs.py                     |  4 +++
>  meta/lib/oeqa/selftest/cases/overlayfs.py | 41 ++++++++++++++++++++++-
>  2 files changed, 44 insertions(+), 1 deletion(-)
>
> diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
> index 8cd48f9450..5abce4ad7d 100644
> --- a/meta/lib/oe/rootfs.py
> +++ b/meta/lib/oe/rootfs.py
> @@ -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":
> diff --git a/meta/lib/oeqa/selftest/cases/overlayfs.py
> b/meta/lib/oeqa/selftest/cases/overlayfs.py
> index e31063567b..580fbdcb9c 100644
> --- a/meta/lib/oeqa/selftest/cases/overlayfs.py
> +++ b/meta/lib/oeqa/selftest/cases/overlayfs.py
> @@ -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
> --
> 2.45.2
>
>
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#201643):
> https://lists.openembedded.org/g/openembedded-core/message/201643
> Mute This Topic: https://lists.openembedded.org/mt/107118664/1686489
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> alex.kanavin@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
diff mbox series

Patch

diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
index 8cd48f9450..5abce4ad7d 100644
--- a/meta/lib/oe/rootfs.py
+++ b/meta/lib/oe/rootfs.py
@@ -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":
diff --git a/meta/lib/oeqa/selftest/cases/overlayfs.py b/meta/lib/oeqa/selftest/cases/overlayfs.py
index e31063567b..580fbdcb9c 100644
--- a/meta/lib/oeqa/selftest/cases/overlayfs.py
+++ b/meta/lib/oeqa/selftest/cases/overlayfs.py
@@ -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