multilib: two step of rpm rootfs installation.
Hi Richard and Saul,
This pull request implement the two step of rpm rootfs installation, please help to review and pull.
Thanks,
Dongxiao
The following changes since commit bcfff457f63f43f53bcaf04f116e09bb2bba9bd6:
Fix mercurial fetcher in fetch2 (2011-09-21 14:07:31 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib dxu4/ml-testing
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=dxu4/ml-testing
Dongxiao Xu (1):
rootfs_rpm: two step installation
meta/classes/package_rpm.bbclass | 54 +++++++++++++++++++++++++++++++++++--- 1 files changed, 50 insertions(+), 4 deletions(-)
PATCH 1/1 rootfs_rpm: two step installation
Firstly we install a base image.
Then install those multilib packages listed in MULTILIB_IMAGE_INSTALL.
--- meta/classes/package_rpm.bbclass | 54 +++++++++++++++++++++++++++++++++++--- 1 files changed, 50 insertions(+), 4 deletions(-)
meta/classes/package_rpm.bbclass +50 -4
@@ -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 () {
Signature · 1 line
1.7.1
Re: [PATCH 1/1] rootfs_rpm: two step installation
Quoted 4 lines · Dongxiao Xu
Firstly we install a base image.
Then install those multilib packages listed inMULTILIB_IMAGE_INSTALL.Signed-off-by Dongxiao Xu <[email protected]>
I worked with Dongxiao on this solution.
Quoted 93 lines
--- meta/classes/package_rpm.bbclass | 54 +++++++++++++++++++++++++++++++++++--- 1 files changed, 50 insertions(+), 4 deletions(-)meta/classes/package_rpm.bbclass +50
-4@@ -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 () {
Richard Purdie
AppliedRe: [PATCH 1/1] rootfs_rpm: two step installation
In reply to Dongxiao XuQuoted 7 lines · Dongxiao Xu
Firstly we install a base image.
Then install those multilib packages listed inMULTILIB_IMAGE_INSTALL.Signed-off-by Dongxiao Xu <[email protected]>--- meta/classes/package_rpm.bbclass | 54 +++++++++++++++++++++++++++++++++++--- 1 files changed, 50 insertions(+), 4 deletions(-)
Merged to master, thanks.
Richard