diff options
| author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-04-12 18:29:09 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-04-14 09:47:08 +0100 |
| commit | b5c383074ae4e09b63f43066b25b5ccb0df00276 (patch) | |
| tree | a7450a53323b00909bc8ae9b77b23dd3f473422b /meta/recipes-core | |
| parent | 053e545b9d4d7985757bd79019e53d59d5c11eea (diff) | |
| download | poky-b5c383074ae4e09b63f43066b25b5ccb0df00276.tar.gz | |
base-passwd/useradd: Various improvements to useradd with RSS
Currently there are multiple issues with useradd:
* If base-passwd rebuilds, it wipes out recipe specific user/group additions
to sysroots and causes errors
* If recipe A adds a user and recipe B depends on A, it can't see any of the
users/groups A adds.
This patch changes base-passwd so it always works as a postinst script
within the sysroot and copies in the master files, then runs any
postinst-useradd-* scripts afterwards to add additional user/groups.
The postinst-useradd-* scripts are tweaked so that if /etc/passwd doesn't exist
they just exit, knowning they'll be executed later. We also add a dummy entry to
the dummy passwd file from pseudo so we can avoid this too.
There is a problem where if recipe A adds a user and recipe B depends on A but
doesn't care about users, it may not have a dependency on the useradd/groupadd
tools which would therefore not be available in B's sysroot. We therefore also
tweak postinst-useradd-* scripts so that if the tools aren't present we simply
don't add users. If you need the users, you add a dependency on the tools in the
recipe and they'll be added.
We add postinst-* to SSTATE_SCAN_FILES since almost any postinst script of this
kind is going to need relocation help.
We also ensure that the postinst-useradd script is written into the sstate
object as the current script was only being added in a recipe local way.
Thanks to Peter Kjellerstedt <pkj@axis.com> and Patrick Ohly for some pieces
of this patch.
[Yocto #11124]
(From OE-Core rev: 1b5afaf437f7a1107d4edca8eeb668b9618a5488)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core')
| -rw-r--r-- | meta/recipes-core/base-passwd/base-passwd_3.5.29.bb | 28 |
1 files changed, 22 insertions, 6 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 e43bc0a007..c6be1c1d08 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 | |||
| @@ -43,16 +43,32 @@ do_install () { | |||
| 43 | install -p -m 644 ${S}/debian/copyright ${D}${docdir}/${BPN}/ | 43 | install -p -m 644 ${S}/debian/copyright ${D}${docdir}/${BPN}/ |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | basepasswd_sysroot_postinst() { | ||
| 47 | #!/bin/sh | ||
| 48 | |||
| 49 | # Install passwd.master and group.master to sysconfdir | ||
| 50 | install -d -m 755 ${STAGING_DIR_TARGET}${sysconfdir} | ||
| 51 | for i in passwd group; do | ||
| 52 | install -p -m 644 ${STAGING_DIR_TARGET}${datadir}/base-passwd/\$i.master \ | ||
| 53 | ${STAGING_DIR_TARGET}${sysconfdir}/\$i | ||
| 54 | done | ||
| 55 | |||
| 56 | # Run any useradd postinsts | ||
| 57 | for script in ${STAGING_DIR_TARGET}${bindir}/postinst-useradd-*; do | ||
| 58 | if [ -f \$script ]; then | ||
| 59 | \$script | ||
| 60 | fi | ||
| 61 | done | ||
| 62 | } | ||
| 63 | |||
| 46 | SYSROOT_DIRS += "${sysconfdir}" | 64 | SYSROOT_DIRS += "${sysconfdir}" |
| 47 | SYSROOT_PREPROCESS_FUNCS += "base_passwd_tweaksysroot" | 65 | SYSROOT_PREPROCESS_FUNCS += "base_passwd_tweaksysroot" |
| 48 | 66 | ||
| 49 | base_passwd_tweaksysroot () { | 67 | base_passwd_tweaksysroot () { |
| 50 | # Install passwd.master and group.master to sysconfdir | 68 | mkdir -p ${SYSROOT_DESTDIR}${bindir} |
| 51 | install -d -m 755 ${SYSROOT_DESTDIR}${sysconfdir} | 69 | dest=${SYSROOT_DESTDIR}${bindir}/postinst-${PN} |
| 52 | for i in passwd group; do | 70 | echo "${basepasswd_sysroot_postinst}" > $dest |
| 53 | install -p -m 644 ${SYSROOT_DESTDIR}${datadir}/base-passwd/$i.master \ | 71 | chmod 0755 $dest |
| 54 | ${SYSROOT_DESTDIR}${sysconfdir}/$i | ||
| 55 | done | ||
| 56 | } | 72 | } |
| 57 | 73 | ||
| 58 | python populate_packages_prepend() { | 74 | python populate_packages_prepend() { |
