diff mbox series

useradd: Fix useradd do_populate_sysroot dependency bug

Message ID 20231209153351.2260728-1-richard.purdie@linuxfoundation.org
State Accepted, archived
Commit 564339afb73fc52a66c1a08437587cad1c4d46e7
Headers show
Series useradd: Fix useradd do_populate_sysroot dependency bug | expand

Commit Message

Richard Purdie Dec. 9, 2023, 3:33 p.m. UTC
If a task is adde which has a dependency on the do_populate_sysroot task of
the recipe, it will cause it to be installed into the sysroot (similar to
do_addto_recipe_sysroot). This fails since the postinst script is an overlapping
file:

Exception: FileExistsError: [Errno 17] File exists:
'tmp/sysroots-components/all/useraddbadtask/usr/bin/postinst-useradd-useraddbadtask'
  ->
'tmp/work/all-poky-linux/useraddbadtask/1.0/recipe-sysroot/usr/bin/postinst-useradd-useraddbadtask'

The copy written out at do_prepare_recipe_sysroot time is just for debug so
rename it, meaning there are no longer overlapping files and the installation
can be successful, removing the error.

[YCOTO #14961]

With the bug fixed, enable the test.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/classes/useradd.bbclass                   | 6 +++++-
 meta/lib/oeqa/selftest/cases/usergrouptests.py | 8 +++-----
 2 files changed, 8 insertions(+), 6 deletions(-)
diff mbox series

Patch

diff --git a/meta/classes/useradd.bbclass b/meta/classes/useradd.bbclass
index a4b8a2d6d60..0997b3da7a5 100644
--- a/meta/classes/useradd.bbclass
+++ b/meta/classes/useradd.bbclass
@@ -154,7 +154,11 @@  python useradd_sysroot_sstate () {
         bb.build.exec_func("useradd_sysroot", d)
     elif task == "prepare_recipe_sysroot":
         # Used to update this recipe's own sysroot so the user/groups are available to do_install
-        scriptfile = d.expand("${RECIPE_SYSROOT}${bindir}/postinst-useradd-${PN}")
+
+        # If do_populate_sysroot is triggered and we write the file here, there would be an overlapping
+        # files. See usergrouptests.UserGroupTests.test_add_task_between_p_sysroot_and_package
+        scriptfile = d.expand("${RECIPE_SYSROOT}${bindir}/postinst-useradd-${PN}-recipedebug")
+
         bb.build.exec_func("useradd_sysroot", d)
     elif task == "populate_sysroot":
         # Used when installed in dependent task sysroots
diff --git a/meta/lib/oeqa/selftest/cases/usergrouptests.py b/meta/lib/oeqa/selftest/cases/usergrouptests.py
index f6a40b21e78..a331ca9f2c4 100644
--- a/meta/lib/oeqa/selftest/cases/usergrouptests.py
+++ b/meta/lib/oeqa/selftest/cases/usergrouptests.py
@@ -18,11 +18,9 @@  class UserGroupTests(OESelftestTestCase):
         self.logger.info("Packaging creategroup2")
         self.assertTrue(bitbake(' creategroup2 -c package'))
 
-    def _test_add_task_between_p_sysroot_and_package(self):
-        self.logger.info("Cleaning sstate for useraddbadtask")
-        self.logger.info("Building useraddbadtask")
-        # fails due to bug #14961
-        self.assertTrue(bitbake(' useraddbadtask -C fetch'))
+    def test_add_task_between_p_sysroot_and_package(self):
+        # Test for YOCTO #14961
+        self.assertTrue(bitbake('useraddbadtask -C fetch'))
 
     def test_static_useradd_from_dynamic(self):
         metaselftestpath = get_test_layer()