rootfs_rpm: two step installation

Firstly we install a base image.
Then install those multilib packages listed in MULTILIB_IMAGE_INSTALL.

Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Dongxiao Xu 2011-09-22 03:06:52 +08:00 committed by Richard Purdie
parent bcfff457f6
commit 97bded5bc4
1 changed files with 50 additions and 4 deletions

View File

@ -166,7 +166,8 @@ package_install_internal_rpm () {
local platform="${INSTALL_PLATFORM_RPM}"
local platform_extra="${INSTALL_PLATFORM_EXTRA_RPM}"
local confbase="${INSTALL_CONFBASE_RPM}"
local package_to_install="${INSTALL_PACKAGES_NORMAL_RPM} ${INSTALL_PACKAGES_MULTILIB_RPM}"
local package_to_install="${INSTALL_PACKAGES_NORMAL_RPM}"
local multilib_to_install="${INSTALL_PACKAGES_MULTILIB_RPM}"
local package_attemptonly="${INSTALL_PACKAGES_ATTEMPTONLY_RPM}"
local package_linguas="${INSTALL_PACKAGES_LINGUAS_RPM}"
local providename="${INSTALL_PROVIDENAME_RPM}"
@ -253,11 +254,13 @@ package_install_internal_rpm () {
done
fi
# Normal package installation
# 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}.macro`" \
-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
@ -351,14 +354,57 @@ package_install_internal_rpm () {
-D "__dbi_txn create nofsync private" \
| grep -i 'Packageorigin' | cut -d : -f 2 > ${target_rootfs}/install/install_solution.manifest
if [ ! -z "${multilib_to_install}" ]; then
for pkg in ${multilib_to_install} ; do
echo "Processing $pkg..."
archvar=base_archs
ml_prefix=`echo ${pkg} | cut -d'-' -f1`
ml_pkg=$pkg
for i in ${MULTILIB_PREFIX_LIST} ; do
if [ ${ml_prefix} == ${i} ]; then
ml_pkg=$(echo ${pkg} | sed "s,^${ml_prefix}-\(.*\),\1,")
archvar=ml_archs
break
fi
done
pkg_name=$(resolve_package_rpm ${confbase}-${archvar}.conf ${ml_pkg})
if [ -z "$pkg_name" ]; then
echo "Unable to find package $pkg ($ml_pkg)!"
exit 1
fi
echo $pkg_name >> ${target_rootfs}/install/install_multilib.manifest
done
fi
# multilib package installation
# 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}-ml_archs.macro`" \
-D "__dbi_txn create nofsync" \
-U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \
${target_rootfs}/install/install_multilib.manifest
# Now that we have a solution, pull out a list of what to install...
echo "Manifest: ${target_rootfs}/install/install_multilib.manifest"
${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \
-D "__dbi_txn create nofsync private" \
| grep -i 'Packageorigin' | cut -d : -f 2 > ${target_rootfs}/install/install_multilib_solution.manifest
# Attempt install
${RPM} --root ${target_rootfs} \
--predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \
--predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \
-D "_dbpath ${rpmlibdir}" \
--noscripts --notriggers --noparentdirs --nolinktos \
--noscripts --notriggers --noparentdirs --nolinktos --replacepkgs \
-D "__dbi_txn create nofsync private" \
-Uhv ${target_rootfs}/install/install_solution.manifest
-Uhv ${target_rootfs}/install/install_solution.manifest \
${target_rootfs}/install/install_multilib_solution.manifest
}
python write_specfile () {