[OE-core] [PATCH] run-postinst: Ensure that the postinsts are ordered

Bruce Ashfield bruce.ashfield at gmail.com
Fri Oct 4 17:21:37 UTC 2013


On Fri, Oct 4, 2013 at 11:48 AM, Mark Hatle <mark.hatle at windriver.com> wrote:
> 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.

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.

Tested-by: Bruce Ashfield <bruce.ashfield at windriver.com>

>
> 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 at windriver.com>
> ---
>  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(-)
>
> diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
> index 98aa98b..36bad09 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 0161f7a..b1c52f9 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 a37ab14..b0805dc 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
>  }
>
> --
> 1.8.1.2.545.g2f19ada
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core



-- 
"Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end"



More information about the Openembedded-core mailing list