[OE-core] [PATCH 8/9] package_rpm: Verify that the package manifests are not empty

Khem Raj raj.khem at gmail.com
Mon Jun 11 19:56:30 UTC 2012


On Monday, June 11, 2012, Mark Hatle <mark.hatle at windriver.com> wrote:
> An empty manifest will cause a failure condition.  We ensure that any
install
> actions occur only with a manifest larger then size 0.  Also ensure that
padding
> is added to the end of the manifest, instead of the beginning to enable
this
> size check.  (Padding is required for very small manifest files..)
>
> Signed-off-by: Mark Hatle <mark.hatle at windriver.com>
> ---
>  meta/classes/package_rpm.bbclass |   59
++++++++++++++++++++++----------------
>  1 files changed, 34 insertions(+), 25 deletions(-)
>
> diff --git a/meta/classes/package_rpm.bbclass
b/meta/classes/package_rpm.bbclass
> index b84c044..bb9aa1a 100644
> --- a/meta/classes/package_rpm.bbclass
> +++ b/meta/classes/package_rpm.bbclass
> @@ -182,6 +182,7 @@ rpm_update_pkg () {
>         # been run by now, so don't have to run them(preun, postun, etc.)
when
>         # erase the pkg
>         if [ -s ${target_rootfs}/install/remove.manifest ]; then
> +            echo "# Removal manifest padding...." >>
${target_rootfs}/install/remove.manifest

Should this be just 'remove'

>             rpm_common_comand --noscripts --nodeps \
>                 -e `cat ${target_rootfs}/install/remove.manifest`
>         fi
> @@ -249,7 +250,7 @@ package_install_internal_rpm () {
>
>        # Setup manifest of packages to install...
>        mkdir -p ${target_rootfs}/install
> -       echo "# Install manifest" >
${target_rootfs}/install/install.manifest
> +       rm -f ${target_rootfs}/install/install.manifest
>
>        # Uclibc builds don't provide this stuff...
>        if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} =
"xlinux-gnueabi" ] ; then
> @@ -309,12 +310,15 @@ package_install_internal_rpm () {
>
>        # Generate an install solution by doing a --justdb install, then
recreate it with
>        # an actual package install!
> -       ${RPM} --predefine "_rpmds_sysinfo_path
${target_rootfs}/etc/rpm/sysinfo" \
> -               --predefine "_rpmrc_platform_path
${target_rootfs}/etc/rpm/platform" \
> -               -D "_dbpath ${target_rootfs}/install" -D "`cat
${confbase}-base_archs.macro`" \
> -               -D "__dbi_txn create nofsync" \
> -               -U --justdb --noscripts --notriggers --noparentdirs
--nolinktos --ignoresize \
> -               ${target_rootfs}/install/install.manifest
> +       if [ -s ${target_rootfs}/install/install.manifest ]; then
> +               echo "# Install manifest padding" >>
${target_rootfs}/install/install.manifest
> +               ${RPM} --predefine "_rpmds_sysinfo_path
${target_rootfs}/etc/rpm/sysinfo" \
> +                       --predefine "_rpmrc_platform_path
${target_rootfs}/etc/rpm/platform" \
> +                       -D "_dbpath ${target_rootfs}/install" -D "`cat
${confbase}-base_archs.macro`" \
> +                       -D "__dbi_txn create nofsync" \
> +                       -U --justdb --noscripts --notriggers
--noparentdirs --nolinktos --ignoresize \
> +                       ${target_rootfs}/install/install.manifest
> +       fi
>
>        if [ ! -z "${package_attemptonly}" ]; then
>                echo "Adding attempt only packages..."
> @@ -407,8 +411,9 @@ package_install_internal_rpm () {
>
>        touch ${target_rootfs}/install/install_multilib_solution.manifest
>
> -       if [ -e "${target_rootfs}/install/install_multilib.manifest" ];
then
> +       if [ -s "${target_rootfs}/install/install_multilib.manifest" ];
then
>                # multilib package installation
> +               echo "# Install multilib manifest padding" >>
${target_rootfs}/install/install_multilib.manifest
>
>                # Generate an install solution by doing a --justdb
install, then recreate it with
>                # an actual package install!
> @@ -493,33 +498,37 @@ EOF
>        if [ "${INC_RPM_IMAGE_GEN}" = "1" -a -f "$pre_btmanifest" ]; then
>                echo "Skipping pre install due to exisitng image"
>        else
> -               echo "# Initial Install manifest" >
${target_rootfs}/install/initial_install.manifest
> +               rm -f ${target_rootfs}/install/initial_install.manifest
>                echo "Installing base dependencies first (base-passwd,
base-files and shadow) since rpm is special"
>                grep /base-passwd-[0-9]
${target_rootfs}/install/total_solution.manifest >>
${target_rootfs}/install/initial_install.manifest || true
>                grep /base-files-[0-9]
${target_rootfs}/install/total_solution.manifest >>
${target_rootfs}/install/initial_install.manifest || true
>                grep /shadow-[0-9]
${target_rootfs}/install/total_solution.manifest >>
${target_rootfs}/install/initial_install.manifest || true
>
> -               # Generate an install solution by doing a --justdb
install, then recreate it with
> -               # an actual package install!
> -               mkdir -p ${target_rootfs}/initial
> +               if [ -s ${target_rootfs}/install/initial_install.manifest
]; then
> +                       echo "# Initial Install manifest padding..." >>
${target_rootfs}/install/initial_install.manifest
>
> -               ${RPM} --predefine "_rpmds_sysinfo_path
${target_rootfs}/etc/rpm/sysinfo" \
> -                       --predefine "_rpmrc_platform_path
${target_rootfs}/etc/rpm/platform" \
> -                       -D "_dbpath ${target_rootfs}/initial" -D "`cat
${confbase}.macro`" \
> -                       -D "__dbi_txn create nofsync" \
> -                       -U --justdb --noscripts --notriggers
--noparentdirs --nolinktos --ignoresize \
> -                       ${target_rootfs}/install/initial_install.manifest
> +                       # Generate an install solution by doing a
--justdb install, then recreate it with
> +                       # an actual package install!
> +                       mkdir -p ${target_rootfs}/initial
>
> -               ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --qf
"%{packageorigin}\n" \
> -                       -D "__dbi_txn create nofsync private" \
> -                       >
${target_rootfs}/install/initial_solution.manifest
> +                       ${RPM} --predefine "_rpmds_sysinfo_path
${target_rootfs}/etc/rpm/sysinfo" \
> +                               --predefine "_rpmrc_platform_path
${target_rootfs}/etc/rpm/platform" \
> +                               -D "_dbpath ${target_rootfs}/initial" -D
"`cat ${confbase}.macro`" \
> +                               -D "__dbi_txn create nofsync" \
> +                               -U --justdb --noscripts --notriggers
--noparentdirs --nolinktos --ignoresize \
> +
${target_rootfs}/install/initial_install.manifest
> +
> +                       ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa
--qf "%{packageorigin}\n" \
> +                               -D "__dbi_txn create nofsync private" \
> +                               >
${target_rootfs}/install/initial_solution.manifest
>
> -               rpm_update_pkg
${target_rootfs}/install/initial_solution.manifest
> +                       rpm_update_pkg
${target_rootfs}/install/initial_solution.manifest
>
> -               grep -Fv -f
${target_rootfs}/install/initial_solution.manifest
${target_rootfs}/install/total_solution.manifest >
${target_rootfs}/install/total_solution.manifest.new
> -               mv ${target_rootfs}/install/total_solution.manifest.new
${target_rootfs}/install/total_solution.manifest
> +                       grep -Fv -f
${target_rootfs}/install/initial_solution.manifest
${target_rootfs}/install/total_solution.manifest >
${target_rootfs}/install/total_solution.manifest.new
> +                       mv
${target_rootfs}/install/total_solution.manifest.new
${target_rootfs}/install/total_solution.manifest
>
> -               rm -rf ${target_rootfs}/initial
> +                       rm -rf ${target_rootfs}/initial
> +               fi
>        fi
>
>        echo "Installing main solution manifest
(${target_rootfs}/install/total_solution.manifest)"
> --
> 1.7.3.4
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20120611/27ec276c/attachment-0002.html>


More information about the Openembedded-core mailing list