summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2011-11-14 12:45:57 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-01-30 16:43:40 +0000
commitf812a2c912e8ab52c218b3abeb2fa9a9902b510b (patch)
treeb3ff72cd016888d6e21e045493937f0079de45cb /meta/recipes-core
parentd3c848094fdedb7836630a1b038a2b3049dab866 (diff)
downloadpoky-f812a2c912e8ab52c218b3abeb2fa9a9902b510b.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. (From OE-Core rev: fc708d88f97e40a5bf929e4e02ed805fb3684ffe) (From OE-Core rev: 0f4156c0735e28812c3f8ab27075d3de5360badb) 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.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 aa90a6d925..05be23f7e2 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 @@
1SUMMARY = "Base system master password/group files." 1SUMMARY = "Base system master password/group files."
2DESCRIPTION = "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." 2DESCRIPTION = "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."
3SECTION = "base" 3SECTION = "base"
4PR = "r4" 4PR = "r5"
5LICENSE = "GPLv2+" 5LICENSE = "GPLv2+"
6LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a" 6LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a"
7 7
@@ -37,36 +37,6 @@ do_install () {
37 install -p -m 644 debian/copyright ${D}${docdir}/${BPN}/ 37 install -p -m 644 debian/copyright ${D}${docdir}/${BPN}/
38} 38}
39 39
40pkg_preinst_${PN} () {
41 set -e
42
43 # Used for rootfs generation. On in-target install this will be run
44 # before the unpack so the files won't be available
45
46 if [ ! -e $D${sysconfdir}/passwd ] && [ -e $D${datadir}/base-passwd/passwd.master ]; then
47 cp $D${datadir}/base-passwd/passwd.master $D${sysconfdir}/passwd
48 fi
49
50 if [ ! -e $D${sysconfdir}/group ] && [ -e $D${datadir}/base-passwd/group.master ]; then
51 cp $D${datadir}/base-passwd/group.master $D${sysconfdir}/group
52 fi
53
54 exit 0
55}
56
57pkg_postinst_${PN} () {
58 set -e
59
60 if [ ! -e $D${sysconfdir}/passwd ] ; then
61 cp $D${datadir}/base-passwd/passwd.master $D${sysconfdir}/passwd
62 fi
63
64 if [ ! -e $D${sysconfdir}/group ] ; then
65 cp $D${datadir}/base-passwd/group.master $D${sysconfdir}/group
66 fi
67 exit 0
68}
69
70base_passwd_sstate_postinst() { 40base_passwd_sstate_postinst() {
71 if [ "${BB_CURRENTTASK}" = "populate_sysroot" -o "${BB_CURRENTTASK}" = "populate_sysroot_setscene" ] 41 if [ "${BB_CURRENTTASK}" = "populate_sysroot" -o "${BB_CURRENTTASK}" = "populate_sysroot_setscene" ]
72 then 42 then
@@ -80,3 +50,31 @@ base_passwd_sstate_postinst() {
80 install -p -m 644 ${STAGING_DIR_TARGET}${datadir}/base-passwd/group.master ${STAGING_DIR_TARGET}${sysconfdir}/group 50 install -p -m 644 ${STAGING_DIR_TARGET}${datadir}/base-passwd/group.master ${STAGING_DIR_TARGET}${sysconfdir}/group
81 fi 51 fi
82} 52}
53
54python populate_packages_prepend() {
55 # Add in the preinst function for ${PN}
56 # We have to do this here as prior to this, passwd/group.master
57 # would be unavailable. We need to create these files at preinst
58 # time before the files from the package may be available, hence
59 # storing the data from the files in the preinst directly.
60
61 f = open(bb.data.expand("${STAGING_DATADIR}/base-passwd/passwd.master", d), 'r')
62 passwd = "".join(f.readlines())
63 f.close()
64 f = open(bb.data.expand("${STAGING_DATADIR}/base-passwd/group.master", d), 'r')
65 group = "".join(f.readlines())
66 f.close()
67
68 preinst = """#!/bin/sh
69if [ ! -e $D${sysconfdir}/passwd ]; then
70 cat << EOF > $D${sysconfdir}/passwd
71""" + passwd + """EOF
72fi
73if [ ! -e $D${sysconfdir}/group ]; then
74 cat << EOF > $D${sysconfdir}/group
75""" + group + """EOF
76fi
77"""
78 d.setVar('pkg_preinst_${PN}', preinst)
79}
80