]> code.ossystems Code Review - openembedded-core.git/commitdiff
package_rpm: Verify that the package manifests are not empty
authorMark Hatle <mark.hatle@windriver.com>
Mon, 11 Jun 2012 18:18:59 +0000 (13:18 -0500)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 12 Jun 2012 10:09:40 +0000 (11:09 +0100)
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@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/package_rpm.bbclass

index b84c0441b4c9e6eaba6d15d3e5515909a26f3ea3..d5406c21a84e2e736550b0a1578b25c7efc09e02 100644 (file)
@@ -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 "# Remove manifest padding...." >> ${target_rootfs}/install/remove.manifest
             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)"