diff options
author | Dongxiao Xu <dongxiao.xu@intel.com> | 2011-09-22 03:06:52 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-09-22 01:21:33 +0100 |
commit | c215d920a763979867a4a9ee62495ee457f47cb2 (patch) | |
tree | ec0f3fb739a5b70a7f664479552eb371af402f2f | |
parent | eb39d55d07880e9338808fc077991b5673077aa1 (diff) | |
download | openembedded-core-c215d920a763979867a4a9ee62495ee457f47cb2.tar.gz openembedded-core-c215d920a763979867a4a9ee62495ee457f47cb2.tar.bz2 openembedded-core-c215d920a763979867a4a9ee62495ee457f47cb2.zip |
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>
Acked-by: Mark Hatle <mark.hatle@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes/package_rpm.bbclass | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index d822b545fc..775d525033 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass @@ -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 () { |