summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/base-passwd
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2011-11-14 12:45:57 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-11-15 11:54:43 +0000
commitfc708d88f97e40a5bf929e4e02ed805fb3684ffe (patch)
tree1785f87b1e5f2092f783f4b58e54186be94e65b7 /meta/recipes-core/base-passwd
parent4013de36a60b8f69f04e58cf5751efaf0d26d5ea (diff)
downloadopenembedded-core-contrib-fc708d88f97e40a5bf929e4e02ed805fb3684ffe.tar.gz
base-passwd: Fix the broken preinst/postinstall
The preinst accesses file which may not yet have been unpacked. The postinst is too late for the creation of these files for at least the opkg backend. This patch therefore encodes the file contents into the preinst, resolving the various issues once and for all. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core/base-passwd')
-rw-r--r--meta/recipes-core/base-passwd/base-passwd_3.5.22.bb60
1 files changed, 29 insertions, 31 deletions
diff --git a/meta/recipes-core/base-passwd/base-passwd_3.5.22.bb b/meta/recipes-core/base-passwd/base-passwd_3.5.22.bb
index aa90a6d9257..05be23f7e2f 100644
--- a/meta/recipes-core/base-passwd/base-passwd_3.5.22.bb
+++ b/meta/recipes-core/base-passwd/base-passwd_3.5.22.bb
@@ -1,7 +1,7 @@
SUMMARY = "Base system master password/group files."
DESCRIPTION = "The master copies of the user database files (/etc/passwd and /etc/group). The update-passwd tool is also provided to keep the system databases synchronized with these master files."
SECTION = "base"
-PR = "r4"
+PR = "r5"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a"
@@ -37,36 +37,6 @@ do_install () {
install -p -m 644 debian/copyright ${D}${docdir}/${BPN}/
}
-pkg_preinst_${PN} () {
- set -e
-
- # Used for rootfs generation. On in-target install this will be run
- # before the unpack so the files won't be available
-
- if [ ! -e $D${sysconfdir}/passwd ] && [ -e $D${datadir}/base-passwd/passwd.master ]; then
- cp $D${datadir}/base-passwd/passwd.master $D${sysconfdir}/passwd
- fi
-
- if [ ! -e $D${sysconfdir}/group ] && [ -e $D${datadir}/base-passwd/group.master ]; then
- cp $D${datadir}/base-passwd/group.master $D${sysconfdir}/group
- fi
-
- exit 0
-}
-
-pkg_postinst_${PN} () {
- set -e
-
- if [ ! -e $D${sysconfdir}/passwd ] ; then
- cp $D${datadir}/base-passwd/passwd.master $D${sysconfdir}/passwd
- fi
-
- if [ ! -e $D${sysconfdir}/group ] ; then
- cp $D${datadir}/base-passwd/group.master $D${sysconfdir}/group
- fi
- exit 0
-}
-
base_passwd_sstate_postinst() {
if [ "${BB_CURRENTTASK}" = "populate_sysroot" -o "${BB_CURRENTTASK}" = "populate_sysroot_setscene" ]
then
@@ -80,3 +50,31 @@ base_passwd_sstate_postinst() {
install -p -m 644 ${STAGING_DIR_TARGET}${datadir}/base-passwd/group.master ${STAGING_DIR_TARGET}${sysconfdir}/group
fi
}
+
+python populate_packages_prepend() {
+ # Add in the preinst function for ${PN}
+ # We have to do this here as prior to this, passwd/group.master
+ # would be unavailable. We need to create these files at preinst
+ # time before the files from the package may be available, hence
+ # storing the data from the files in the preinst directly.
+
+ f = open(bb.data.expand("${STAGING_DATADIR}/base-passwd/passwd.master", d), 'r')
+ passwd = "".join(f.readlines())
+ f.close()
+ f = open(bb.data.expand("${STAGING_DATADIR}/base-passwd/group.master", d), 'r')
+ group = "".join(f.readlines())
+ f.close()
+
+ preinst = """#!/bin/sh
+if [ ! -e $D${sysconfdir}/passwd ]; then
+ cat << EOF > $D${sysconfdir}/passwd
+""" + passwd + """EOF
+fi
+if [ ! -e $D${sysconfdir}/group ]; then
+ cat << EOF > $D${sysconfdir}/group
+""" + group + """EOF
+fi
+"""
+ d.setVar('pkg_preinst_${PN}', preinst)
+}
+