<br><br>On Monday, June 11, 2012, Mark Hatle <<a href="mailto:mark.hatle@windriver.com">mark.hatle@windriver.com</a>> wrote:<br>> An empty manifest will cause a failure condition. We ensure that any install<br>> actions occur only with a manifest larger then size 0. Also ensure that padding<br>
> is added to the end of the manifest, instead of the beginning to enable this<br>> size check. (Padding is required for very small manifest files..)<br>><br>> Signed-off-by: Mark Hatle <<a href="mailto:mark.hatle@windriver.com">mark.hatle@windriver.com</a>><br>
> ---<br>> meta/classes/package_rpm.bbclass | 59 ++++++++++++++++++++++----------------<br>> 1 files changed, 34 insertions(+), 25 deletions(-)<br>><br>> diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass<br>
> index b84c044..bb9aa1a 100644<br>> --- a/meta/classes/package_rpm.bbclass<br>> +++ b/meta/classes/package_rpm.bbclass<br>> @@ -182,6 +182,7 @@ rpm_update_pkg () {<br>> # been run by now, so don't have to run them(preun, postun, etc.) when<br>
> # erase the pkg<br>> if [ -s ${target_rootfs}/install/remove.manifest ]; then<br>> + echo "# Removal manifest padding...." >> ${target_rootfs}/install/remove.manifest<br>
<br>Should this be just 'remove'<br><br>> rpm_common_comand --noscripts --nodeps \<br>> -e `cat ${target_rootfs}/install/remove.manifest`<br>> fi<br>> @@ -249,7 +250,7 @@ package_install_internal_rpm () {<br>
><br>> # Setup manifest of packages to install...<br>> mkdir -p ${target_rootfs}/install<br>> - echo "# Install manifest" > ${target_rootfs}/install/install.manifest<br>> + rm -f ${target_rootfs}/install/install.manifest<br>
><br>> # Uclibc builds don't provide this stuff...<br>> if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} = "xlinux-gnueabi" ] ; then<br>> @@ -309,12 +310,15 @@ package_install_internal_rpm () {<br>
><br>> # Generate an install solution by doing a --justdb install, then recreate it with<br>> # an actual package install!<br>> - ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \<br>
> - --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \<br>> - -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}-base_archs.macro`" \<br>
> - -D "__dbi_txn create nofsync" \<br>> - -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \<br>> - ${target_rootfs}/install/install.manifest<br>
> + if [ -s ${target_rootfs}/install/install.manifest ]; then<br>> + echo "# Install manifest padding" >> ${target_rootfs}/install/install.manifest<br>> + ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \<br>
> + --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \<br>> + -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}-base_archs.macro`" \<br>
> + -D "__dbi_txn create nofsync" \<br>> + -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \<br>> + ${target_rootfs}/install/install.manifest<br>
> + fi<br>><br>> if [ ! -z "${package_attemptonly}" ]; then<br>> echo "Adding attempt only packages..."<br>> @@ -407,8 +411,9 @@ package_install_internal_rpm () {<br>
><br>> touch ${target_rootfs}/install/install_multilib_solution.manifest<br>><br>> - if [ -e "${target_rootfs}/install/install_multilib.manifest" ]; then<br>> + if [ -s "${target_rootfs}/install/install_multilib.manifest" ]; then<br>
> # multilib package installation<br>> + echo "# Install multilib manifest padding" >> ${target_rootfs}/install/install_multilib.manifest<br>><br>> # Generate an install solution by doing a --justdb install, then recreate it with<br>
> # an actual package install!<br>> @@ -493,33 +498,37 @@ EOF<br>> if [ "${INC_RPM_IMAGE_GEN}" = "1" -a -f "$pre_btmanifest" ]; then<br>> echo "Skipping pre install due to exisitng image"<br>
> else<br>> - echo "# Initial Install manifest" > ${target_rootfs}/install/initial_install.manifest<br>> + rm -f ${target_rootfs}/install/initial_install.manifest<br>
> echo "Installing base dependencies first (base-passwd, base-files and shadow) since rpm is special"<br>> grep /base-passwd-[0-9] ${target_rootfs}/install/total_solution.manifest >> ${target_rootfs}/install/initial_install.manifest || true<br>
> grep /base-files-[0-9] ${target_rootfs}/install/total_solution.manifest >> ${target_rootfs}/install/initial_install.manifest || true<br>> grep /shadow-[0-9] ${target_rootfs}/install/total_solution.manifest >> ${target_rootfs}/install/initial_install.manifest || true<br>
><br>> - # Generate an install solution by doing a --justdb install, then recreate it with<br>> - # an actual package install!<br>> - mkdir -p ${target_rootfs}/initial<br>
> + if [ -s ${target_rootfs}/install/initial_install.manifest ]; then<br>> + echo "# Initial Install manifest padding..." >> ${target_rootfs}/install/initial_install.manifest<br>
><br>> - ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \<br>> - --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \<br>
> - -D "_dbpath ${target_rootfs}/initial" -D "`cat ${confbase}.macro`" \<br>> - -D "__dbi_txn create nofsync" \<br>> - -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \<br>
> - ${target_rootfs}/install/initial_install.manifest<br>> + # Generate an install solution by doing a --justdb install, then recreate it with<br>> + # an actual package install!<br>
> + mkdir -p ${target_rootfs}/initial<br>><br>> - ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --qf "%{packageorigin}\n" \<br>> - -D "__dbi_txn create nofsync private" \<br>
> - > ${target_rootfs}/install/initial_solution.manifest<br>> + ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \<br>> + --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \<br>
> + -D "_dbpath ${target_rootfs}/initial" -D "`cat ${confbase}.macro`" \<br>> + -D "__dbi_txn create nofsync" \<br>> + -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \<br>
> + ${target_rootfs}/install/initial_install.manifest<br>> +<br>> + ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --qf "%{packageorigin}\n" \<br>
> + -D "__dbi_txn create nofsync private" \<br>> + > ${target_rootfs}/install/initial_solution.manifest<br>><br>> - rpm_update_pkg ${target_rootfs}/install/initial_solution.manifest<br>
> + rpm_update_pkg ${target_rootfs}/install/initial_solution.manifest<br>><br>> - grep -Fv -f ${target_rootfs}/install/initial_solution.manifest ${target_rootfs}/install/total_solution.manifest > ${target_rootfs}/install/total_solution.manifest.new<br>
> - mv ${target_rootfs}/install/total_solution.manifest.new ${target_rootfs}/install/total_solution.manifest<br>> + grep -Fv -f ${target_rootfs}/install/initial_solution.manifest ${target_rootfs}/install/total_solution.manifest > ${target_rootfs}/install/total_solution.manifest.new<br>
> + mv ${target_rootfs}/install/total_solution.manifest.new ${target_rootfs}/install/total_solution.manifest<br>><br>> - rm -rf ${target_rootfs}/initial<br>> + rm -rf ${target_rootfs}/initial<br>
> + fi<br>> fi<br>><br>> echo "Installing main solution manifest (${target_rootfs}/install/total_solution.manifest)"<br>> --<br>> 1.7.3.4<br>><br>><br>> _______________________________________________<br>
> Openembedded-core mailing list<br>> <a href="mailto:Openembedded-core@lists.openembedded.org">Openembedded-core@lists.openembedded.org</a><br>> <a href="http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core">http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core</a><br>
>