From: Robert Yang Date: Mon, 7 Jul 2014 04:40:37 +0000 (-0700) Subject: base-passwd: install passwd and group atomically X-Git-Tag: 2015-4~2392 X-Git-Url: https://code.ossystems.io/gitweb?a=commitdiff_plain;h=cdbe55215e3dd1b82a6c147a31c7c40186a8bf80;p=openembedded-core.git base-passwd: install passwd and group atomically 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 Signed-off-by: Saul Wold --- 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 59bd413b49..ec8f2afb22 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 }