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.

(From OE-Core rev: b5bafccb89f45d7cdd515b4ba45e0152ca7922de)

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>
This commit is contained in:
Mark Hatle 2013-10-04 15:48:19 +00:00 committed by Richard Purdie
parent a59aa9eebb
commit 28eedee1d4
3 changed files with 22 additions and 6 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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
}