run-postinst: Ensure that the postinsts are ordered
PATCH 1/1 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.
--- meta/classes/package_rpm.bbclass | 14 ++++++++++---- meta/classes/rootfs_deb.bbclass | 7 ++++++- meta/classes/rootfs_ipk.bbclass | 7 ++++++- 3 files changed, 22 insertions(+), 6 deletions(-)
meta/classes/package_rpm.bbclass +10 -4
@@ -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
meta/classes/rootfs_deb.bbclass +6 -1
@@ -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 }
meta/classes/rootfs_ipk.bbclass +6 -1
@@ -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 }
Signature · 1 line
1.8.1.2.545.g2f19ada
Quoted 6 lines · Mark Hatle
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.
Quoted 8 lines
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.
I can confirm that it does solve rpm, and ipk it makes things "better". No matter
what, I prefer the bit of ordering over the alphabetical ordering.
Quoted 92 lines
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 <[email protected]>--- meta/classes/package_rpm.bbclass | 14 ++++++++++---- meta/classes/rootfs_deb.bbclass | 7 ++++++- meta/classes/rootfs_ipk.bbclass | 7 ++++++- 3 files changed, 22 insertions(+), 6 deletions(-)meta/classes/package_rpm.bbclass +10
-4@@ -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" fimeta/classes/rootfs_deb.bbclass +6
-1@@ -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 }meta/classes/rootfs_ipk.bbclass +6
-2@@ -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 } --1.8.1.2.545.g2f19ada
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core
Signature · 2 lines
"Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end"