mirror of
https://git.yoctoproject.org/poky
synced 2026-02-22 09:29:40 +01:00
package_rpm: Verify that the package manifests are not empty
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..) (From OE-Core rev: 9b115181a8b10ec1eb8eac355405695f63e2e011) Signed-off-by: Mark Hatle <mark.hatle@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
f182f53cc3
commit
9786663f9c
@@ -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_update_pkg ${target_rootfs}/install/initial_solution.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
|
||||
|
||||
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)"
|
||||
|
||||
Reference in New Issue
Block a user