Fixed the race issue:
util-macros.do_package failed: 'getpwnam(): name not found: root'

The error happens when there is a half etc/passwd, fixed by:
$ install usr/share/base-passwd/passwd.master etc/passwd.master
$ mv etc/passwd.master etc/passwd

The "mv" is atomic which will fix this problem.

[YOCTO #6124]

Signed-off-by: Robert Yang <liezhi.y...@windriver.com>
---
 .../recipes-core/base-passwd/base-passwd_3.5.29.bb |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/meta/recipes-core/base-passwd/base-passwd_3.5.29.bb 
b/meta/recipes-core/base-passwd/base-passwd_3.5.29.bb
index 59bd413..ec8f2af 100644
--- a/meta/recipes-core/base-passwd/base-passwd_3.5.29.bb
+++ b/meta/recipes-core/base-passwd/base-passwd_3.5.29.bb
@@ -47,9 +47,14 @@ base_passwd_sstate_postinst() {
                # put these files in the target sysroot so they can
                # be used by recipes which use custom user/group
                # permissions.
+               # Install passwd.master and group.master to sysconfdir and mv
+               # them to make sure they are atomically install.
                install -d -m 755 ${STAGING_DIR_TARGET}${sysconfdir}
-               install -p -m 644 
${STAGING_DIR_TARGET}${datadir}/base-passwd/passwd.master 
${STAGING_DIR_TARGET}${sysconfdir}/passwd
-               install -p -m 644 
${STAGING_DIR_TARGET}${datadir}/base-passwd/group.master 
${STAGING_DIR_TARGET}${sysconfdir}/group
+               for i in passwd group; do
+                       install -p -m 644 
${STAGING_DIR_TARGET}${datadir}/base-passwd/$i.master \
+                               ${STAGING_DIR_TARGET}${sysconfdir}/
+                       mv ${STAGING_DIR_TARGET}${sysconfdir}/$i.master 
${STAGING_DIR_TARGET}${sysconfdir}/$i
+               done
        fi
 }
 
-- 
1.7.9.5

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to