]> code.ossystems Code Review - openembedded-core.git/commitdiff
run-postinst: Ensure that the postinsts are ordered
authorMark Hatle <mark.hatle@windriver.com>
Fri, 4 Oct 2013 15:48:19 +0000 (15:48 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sun, 6 Oct 2013 08:43:35 +0000 (09:43 +0100)
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>
meta/classes/package_rpm.bbclass
meta/classes/rootfs_deb.bbclass
meta/classes/rootfs_ipk.bbclass

index 98aa98b03b2d83733acae3c5ba9455736d3b23b5..36bad09ea1d86b50b57aa916778e2f7cc0e8af97 100644 (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
index 0161f7a718549849048c86b894d176fb80e1414b..b1c52f9dd695ef862224794f99d12a0a0201542a 100644 (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
 }
 
index a37ab14df73d327b7165214adada315a5c0b1cba..b0805dc3297980b8235394a4813ecca45df833d4 100644 (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
 }