From: Richard Purdie <richard.purdie@linuxfoundation.org>
To: Patches and discussions about the oe-core layer
<openembedded-core@lists.openembedded.org>
Cc: Zhenfeng.Zhao@windriver.com
Subject: Re: [PATCH 1/3] rpm: install external binary packages
Date: Sat, 18 Aug 2012 17:55:18 +0100 [thread overview]
Message-ID: <1345308918.27428.63.camel@ted> (raw)
In-Reply-To: <e6641325f6a4fca0214556749ca1e2c126eaa582.1345105475.git.liezhi.yang@windriver.com>
On Thu, 2012-08-16 at 16:27 +0800, Robert Yang wrote:
> It's been suggested that it would be a useful feature to be able to
> easily take a binary from a 3rd party software vendor and integrate
> it into an image created by the build system.
>
> * The user can easily use this by:
> # Specify where is the external binary pkg dir
> #EXTERNAL_PACKAGE_DIR = "<path1> <path2> ..."
> # Specify which pkg will be installed
> #EXTERNAL_INSTALL_PACKAGE = "<pkg1> <pkg2> ..."
>
> Then the pkg1, pkg2 ... would be installed.
>
> Add an "EXTERNAL_INSTALL_PACKAGE"here since we can't use the existence
> variable (for example, IMAGE_INSTALL), if we add the pkg to the IMAGE_INSTALL,
> it would check whether the pkg is in the PROVIDES, and this is an external
> pkg, it is not in the PROVIDES.
>
> * Main changes:
> - Add external_package.bbclass:
> Add the external package to the repo, the package would be copied
> to deploy/rpm/external/<arch>.
>
> Use an "external" directory since we don't want the "internal" pkgs
> to be mixed, and it would be easy to remove them.
>
> - package_rpm.bbclass:
> Create repo for deploy/rpm/external
>
> - rootfs_rpm.bbclass
> Add the package that would be installed to INSTALL_PACKAGES_RPM, so
> that it would be installed.
>
> [YOCTO #1592]
>
> Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
> ---
> meta/classes/external_package.bbclass | 42 +++++++++++++++++++++++++++++++++++
> meta/classes/image.bbclass | 2 ++
> meta/classes/package_rpm.bbclass | 12 +++++++---
> meta/classes/rootfs_rpm.bbclass | 2 +-
> 4 files changed, 54 insertions(+), 4 deletions(-)
> create mode 100644 meta/classes/external_package.bbclass
This breaks on the autobuilder:
http://autobuilder.yoctoproject.org:8010/builders/nightly/builds/634/steps/shell_42/logs/stdio
Cheers,
Richard
> diff --git a/meta/classes/external_package.bbclass b/meta/classes/external_package.bbclass
> new file mode 100644
> index 0000000..e032bec
> --- /dev/null
> +++ b/meta/classes/external_package.bbclass
> @@ -0,0 +1,42 @@
> +#
> +# ex:ts=4:sw=4:sts=4:et
> +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
> +#
> +# Add external binary pkg to the repo and install them:
> +#
> +# Specify where are the external binary pkg dir
> +#EXTERNAL_PACKAGE_DIR = "<path1> <path2> ..."
> +# Specify which pkg will be installed
> +#EXTERNAL_INSTALL_PACKAGE = "<pkg1> <pkg2> ..."
> +
> +#
> +# Add the external binary rpm into the repo, copy the binary rpm files
> +# from EXTERNAL_PACKAGE_DIR to ${DEPLOY_DIR_RPM}/external, and put them
> +# to the relevant arch dir.
> +#
> +add_external_rpm () {
> + local supported_archs
> + supported_archs="$@"
> +
> + # Clean the EXTERNAL_DIR_RPM dir and re-copy
> + [ ! -d "${EXTERNAL_DIR_RPM}" ] || rm -fr ${EXTERNAL_DIR_RPM}
> +
> + if [ -n "${EXTERNAL_PACKAGE_DIR}" -a -n "${EXTERNAL_INSTALL_PACKAGE}" ]; then
> + echo "Adding external binary rpms to the repo ..."
> + for f in `find ${EXTERNAL_PACKAGE_DIR} -type f -name '*.rpm'`; do
> + arch="`echo $f | awk -F\. '{print $(NF-1)}'`"
> + found=""
> + for archvar in $supported_archs; do
> + # Only pick up the supported arch's rpm
> + if [ "$arch" == "$archvar" ]; then
> + [ -d "${EXTERNAL_DIR_RPM}/$arch" ] || mkdir -p ${EXTERNAL_DIR_RPM}/$arch
> + cp -f $f ${EXTERNAL_DIR_RPM}/$arch/
> + found="1"
> + break
> + fi
> + done
> + [ -n "$found" ] || echo "Uknown arch $arch"
> + done
> + fi
> +}
> +
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> index 72720f1..283688a 100644
> --- a/meta/classes/image.bbclass
> +++ b/meta/classes/image.bbclass
> @@ -5,6 +5,8 @@ inherit imagetest-${IMAGETEST}
>
> inherit populate_sdk_base
>
> +inherit external_package
> +
> TOOLCHAIN_TARGET_TASK += "${PACKAGE_INSTALL}"
> TOOLCHAIN_TARGET_TASK_ATTEMPTONLY += "${PACKAGE_INSTALL_ATTEMPTONLY}"
> POPULATE_SDK_POST_TARGET_COMMAND += "rootfs_install_complementary populate_sdk; "
> diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
> index b58ae85..bd2c9a2 100644
> --- a/meta/classes/package_rpm.bbclass
> +++ b/meta/classes/package_rpm.bbclass
> @@ -7,6 +7,7 @@ RPMBUILD="rpmbuild"
>
> PKGWRITEDIRRPM = "${WORKDIR}/deploy-rpms"
> PKGWRITEDIRSRPM = "${DEPLOY_DIR}/sources/deploy-srpm"
> +EXTERNAL_DIR_RPM = "${DEPLOY_DIR_RPM}/external"
>
> python package_rpm_fn () {
> d.setVar('PKGFN', d.getVar('PKG'))
> @@ -26,6 +27,9 @@ package_update_index_rpm () {
> return
> fi
>
> + # Add external binary pkgs
> + add_external_rpm ${PACKAGE_ARCHS} ${MULTILIB_PACKAGE_ARCHS} ${SDK_PACKAGE_ARCHS}
> +
> # Update target packages
> base_archs="${PACKAGE_ARCHS}"
> ml_archs="${MULTILIB_PACKAGE_ARCHS}"
> @@ -44,9 +48,11 @@ package_update_index_rpm_common () {
> for archvar in "$@"; do
> eval archs=\${${archvar}}
> packagedirs=""
> - for arch in $archs; do
> - packagedirs="${DEPLOY_DIR_RPM}/$arch $packagedirs"
> - rm -rf ${DEPLOY_DIR_RPM}/$arch/solvedb.done
> + for d in ${DEPLOY_DIR_RPM} ${EXTERNAL_DIR_RPM}; do
> + for arch in $archs; do
> + packagedirs="$d/$arch $packagedirs"
> + rm -rf $d/$arch/solvedb.done
> + done
> done
>
> cat /dev/null > ${rpmconf_base}-${archvar}.conf
> diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass
> index c0207d8..7ce694c 100644
> --- a/meta/classes/rootfs_rpm.bbclass
> +++ b/meta/classes/rootfs_rpm.bbclass
> @@ -51,7 +51,7 @@ fakeroot rootfs_rpm_do_rootfs () {
> export INSTALL_ROOTFS_RPM="${IMAGE_ROOTFS}"
> export INSTALL_PLATFORM_RPM="${TARGET_ARCH}"
> export INSTALL_CONFBASE_RPM="${RPMCONF_TARGET_BASE}"
> - export INSTALL_PACKAGES_RPM="${PACKAGE_INSTALL}"
> + export INSTALL_PACKAGES_RPM="${PACKAGE_INSTALL} ${EXTERNAL_INSTALL_PACKAGE}"
> export INSTALL_PACKAGES_ATTEMPTONLY_RPM="${PACKAGE_INSTALL_ATTEMPTONLY}"
> export INSTALL_PACKAGES_LINGUAS_RPM="${LINGUAS_INSTALL}"
> export INSTALL_PROVIDENAME_RPM=""
next prev parent reply other threads:[~2012-08-18 17:07 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-16 8:27 [PATCH 0/3 V2] Install external binary packages Robert Yang
2012-08-16 8:27 ` [PATCH 1/3] rpm: install " Robert Yang
2012-08-18 16:55 ` Richard Purdie [this message]
2012-08-20 2:06 ` Robert Yang
2012-08-16 8:27 ` [PATCH 2/3] ipk: " Robert Yang
2012-08-16 9:40 ` Koen Kooi
2012-08-16 11:18 ` Robert Yang
2012-08-16 8:27 ` [PATCH 3/3] deb: " Robert Yang
2012-08-16 13:35 ` [PATCH 0/3 V2] Install " Robert Yang
-- strict thread matches above, loose matches on Subject: below --
2012-08-15 15:32 [PATCH 0/3] " Robert Yang
2012-08-15 15:32 ` [PATCH 1/3] rpm: install " Robert Yang
2012-08-16 6:48 ` Robert Yang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1345308918.27428.63.camel@ted \
--to=richard.purdie@linuxfoundation.org \
--cc=Zhenfeng.Zhao@windriver.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.