summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Hatle <mark.hatle@windriver.com>2013-10-04 15:48:19 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-10-06 09:43:35 +0100
commitb5bafccb89f45d7cdd515b4ba45e0152ca7922de (patch)
treee0b58a8c2c25b5740e36ab6ff1489c7cdc8dd78e
parent4228005689e31ebcafcf0969e80fcc021d1ae063 (diff)
downloadopenembedded-core-b5bafccb89f45d7cdd515b4ba45e0152ca7922de.tar.gz
openembedded-core-b5bafccb89f45d7cdd515b4ba45e0152ca7922de.tar.bz2
openembedded-core-b5bafccb89f45d7cdd515b4ba45e0152ca7922de.zip
run-postinst: Ensure that the postinsts are ordered
The postinst files were being generated using purely the name of the package, this unfortunately meant the run order would be based on the name of the package and not the order in which it was installed on the filesystem. If package A requires package Z to be fully installed, this causes a problem. Note: rpm - as the rpm based install proceeds the order is defined and captured. so the problem is resolved there. ipk - this unfortunately does not appear to solve the problem for ipk, as the status file is not ordered in any appreciable way. This does not cause any regressions however and sets the stage for a proper fix. deb - this -may- fix the deb install. Early testing indicates at least some ordering to the status file. But it's unclear if it completely resolves the issue. Signed-off-by: Mark Hatle <mark.hatle@windriver.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/package_rpm.bbclass14
-rw-r--r--meta/classes/rootfs_deb.bbclass7
-rw-r--r--meta/classes/rootfs_ipk.bbclass7
3 files changed, 22 insertions, 6 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 98aa98b03b..36bad09ea1 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -391,6 +391,10 @@ EOF
fi
# Construct install scriptlet wrapper
+ # Scripts need to be ordered when executed, this ensures numeric order
+ # If we ever run into needing more the 899 scripts, we'll have to
+ # change num to start with 1000.
+ #
cat << EOF > ${WORKDIR}/scriptlet_wrapper
#!/bin/bash
@@ -406,11 +410,13 @@ export NATIVE_ROOT=${STAGING_DIR_NATIVE}
if [ \$? -ne 0 ]; then
if [ \$4 -eq 1 ]; then
mkdir -p \$1/etc/rpm-postinsts
+ num=100
+ while [ -e \$1/etc/rpm-postinsts/\${num}-* ]; do num=\$((num + 1)); done
name=\`head -1 \$1/\$3 | cut -d' ' -f 2\`
- echo "#!\$2" > \$1/etc/rpm-postinsts/\${name}
- echo "# Arg: \$4" >> \$1/etc/rpm-postinsts/\${name}
- cat \$1/\$3 >> \$1/etc/rpm-postinsts/\${name}
- chmod +x \$1/etc/rpm-postinsts/\${name}
+ echo "#!\$2" > \$1/etc/rpm-postinsts/\${num}-\${name}
+ echo "# Arg: \$4" >> \$1/etc/rpm-postinsts/\${num}-\${name}
+ cat \$1/\$3 >> \$1/etc/rpm-postinsts/\${num}-\${name}
+ chmod +x \$1/etc/rpm-postinsts/\${num}-\${name}
else
echo "Error: pre/post remove scriptlet failed"
fi
diff --git a/meta/classes/rootfs_deb.bbclass b/meta/classes/rootfs_deb.bbclass
index 0161f7a718..b1c52f9dd6 100644
--- a/meta/classes/rootfs_deb.bbclass
+++ b/meta/classes/rootfs_deb.bbclass
@@ -107,9 +107,14 @@ delayed_postinsts () {
}
save_postinsts () {
+ # Scripts need to be ordered when executed, this ensures numeric order
+ # If we ever run into needing more the 899 scripts, we'll have to
+ # change num to start with 1000.
+ num=100
for p in $(delayed_postinsts); do
install -d ${IMAGE_ROOTFS}${sysconfdir}/deb-postinsts
- cp ${IMAGE_ROOTFS}/var/lib/dpkg/info/$p.postinst ${IMAGE_ROOTFS}${sysconfdir}/deb-postinsts/$p
+ cp ${IMAGE_ROOTFS}/var/lib/dpkg/info/$p.postinst ${IMAGE_ROOTFS}${sysconfdir}/deb-postinsts/$num-$p
+ num=`echo \$((num+1))`
done
}
diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass
index a37ab14df7..b0805dc329 100644
--- a/meta/classes/rootfs_ipk.bbclass
+++ b/meta/classes/rootfs_ipk.bbclass
@@ -106,9 +106,14 @@ delayed_postinsts () {
}
save_postinsts () {
+ # Scripts need to be ordered when executed, this ensures numeric order
+ # If we ever run into needing more the 899 scripts, we'll have to
+ # change num to start with 1000.
+ num=100
for p in $(delayed_postinsts); do
install -d ${IMAGE_ROOTFS}${sysconfdir}/ipk-postinsts
- cp ${IMAGE_ROOTFS}${OPKGLIBDIR}/opkg/info/$p.postinst ${IMAGE_ROOTFS}${sysconfdir}/ipk-postinsts/$p
+ cp ${IMAGE_ROOTFS}${OPKGLIBDIR}/opkg/info/$p.postinst ${IMAGE_ROOTFS}${sysconfdir}/ipk-postinsts/$num-$p
+ num=`echo \$((num+1))`
done
}