* [PATCH 0/3] Install external binary packages
@ 2012-08-15 15:32 Robert Yang
2012-08-15 15:32 ` [PATCH 1/3] rpm: install " Robert Yang
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Robert Yang @ 2012-08-15 15:32 UTC (permalink / raw)
To: openembedded-core; +Cc: Zhenfeng.Zhao
Hi folks,
Please see the first commit for details, and I will send a patch to
add the usage to local.conf.sample.extended when this is OK.
// Robert
The following changes since commit 0c6ac62a9fb81146ace64ae7493dcc56b4bed197:
documentation: remove references to Pimlico (2012-08-15 15:26:27 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib robert/external_install
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=robert/external_install
Robert Yang (3):
rpm: install external binary packages
ipk: install external binary packages
deb: install external binary packages
meta/classes/external_package.bbclass | 89 +++++++++++++++++++++++++++++++++++
meta/classes/image.bbclass | 2 +
meta/classes/package_deb.bbclass | 43 ++++++++++-------
meta/classes/package_ipk.bbclass | 21 ++++++++-
meta/classes/package_rpm.bbclass | 12 +++--
meta/classes/rootfs_deb.bbclass | 2 +-
meta/classes/rootfs_ipk.bbclass | 2 +-
meta/classes/rootfs_rpm.bbclass | 2 +-
8 files changed, 149 insertions(+), 24 deletions(-)
create mode 100644 meta/classes/external_package.bbclass
--
1.7.11.2
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 1/3] rpm: install external binary packages 2012-08-15 15:32 [PATCH 0/3] Install external binary packages Robert Yang @ 2012-08-15 15:32 ` Robert Yang 2012-08-16 6:48 ` Robert Yang 2012-08-15 15:32 ` [PATCH 2/3] ipk: " Robert Yang 2012-08-15 15:32 ` [PATCH 3/3] deb: " Robert Yang 2 siblings, 1 reply; 10+ messages in thread From: Robert Yang @ 2012-08-15 15:32 UTC (permalink / raw) To: openembedded-core; +Cc: Zhenfeng.Zhao 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 | 41 +++++++++++++++++++++++++++++++++++ meta/classes/image.bbclass | 2 ++ meta/classes/package_rpm.bbclass | 12 +++++++--- meta/classes/rootfs_rpm.bbclass | 2 +- 4 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 meta/classes/external_package.bbclass diff --git a/meta/classes/external_package.bbclass b/meta/classes/external_package.bbclass new file mode 100644 index 0000000..c6d87bb --- /dev/null +++ b/meta/classes/external_package.bbclass @@ -0,0 +1,41 @@ +# +# 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="$@" + + # 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="" -- 1.7.11.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/3] rpm: install external binary packages 2012-08-15 15:32 ` [PATCH 1/3] rpm: install " Robert Yang @ 2012-08-16 6:48 ` Robert Yang 0 siblings, 0 replies; 10+ messages in thread From: Robert Yang @ 2012-08-16 6:48 UTC (permalink / raw) To: openembedded-core On 08/15/2012 11:32 PM, Robert Yang wrote: > > diff --git a/meta/classes/external_package.bbclass b/meta/classes/external_package.bbclass > new file mode 100644 > index 0000000..c6d87bb > --- /dev/null > +++ b/meta/classes/external_package.bbclass > @@ -0,0 +1,41 @@ > +# > +# 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="$@" > + I updated this patch and the "PATCH 2/3" a little since the "dash" doesn't support the local var="$@", so changed it to: local supported_archs supported_archs="$@" and pushed to the repo: git://git.pokylinux.org/poky-contrib robert/external_install http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=robert/external_install // Robert > + # 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="" > ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/3] ipk: install external binary packages 2012-08-15 15:32 [PATCH 0/3] Install external binary packages Robert Yang 2012-08-15 15:32 ` [PATCH 1/3] rpm: install " Robert Yang @ 2012-08-15 15:32 ` Robert Yang 2012-08-16 8:03 ` Koen Kooi 2012-08-15 15:32 ` [PATCH 3/3] deb: " Robert Yang 2 siblings, 1 reply; 10+ messages in thread From: Robert Yang @ 2012-08-15 15:32 UTC (permalink / raw) To: openembedded-core; +Cc: Zhenfeng.Zhao Please see the commit message for the rpm one, most of the contents are similar, except that add an function "add_external_debipk" which are used by both deb and ipk, the add_external_ipk is just a wrapper. [YOCTO #2948] Signed-off-by: Robert Yang <liezhi.yang@windriver.com> --- meta/classes/external_package.bbclass | 44 +++++++++++++++++++++++++++++++++++ meta/classes/package_ipk.bbclass | 21 ++++++++++++++++- meta/classes/rootfs_ipk.bbclass | 2 +- 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/meta/classes/external_package.bbclass b/meta/classes/external_package.bbclass index c6d87bb..1587363 100644 --- a/meta/classes/external_package.bbclass +++ b/meta/classes/external_package.bbclass @@ -39,3 +39,47 @@ add_external_rpm () { fi } +# +# Add the external binary ipk/deb into the repo, copy the binary files +# from EXTERNAL_PACKAGE_DIR to ${DEPLOY_DIR_IPK}/external, and put them +# to the relevant arch dir. +# +# $1: EXTERNAL_DIR_IPK or EXTERNAL_DIR_DEB +# $2, $3, $4...: supported archs +# +add_external_debipk () { + dir="$1" + + if [ "$dir" != "${EXTERNAL_DIR_DEB}" -a "$dir" != "${EXTERNAL_DIR_IPK}" ]; then + echo "Unsupported dir $1" + return + fi + + shift + local supported_archs="$@" + + # Clean the dir and re-copy + [ ! -d "$dir" ] || rm -fr $dir + + if [ -n "${EXTERNAL_PACKAGE_DIR}" -a -n "${EXTERNAL_INSTALL_PACKAGE}" ]; then + echo "Adding external binary ${IMAGE_PKGTYPE} to the repo ..." + for f in `find ${EXTERNAL_PACKAGE_DIR} -type f -name "*.${IMAGE_PKGTYPE}"`; do + arch="`echo $f | sed 's/.*_\(.*\)\.'"${IMAGE_PKGTYPE}"'$/\1/'`" + found="" + for archvar in $supported_archs; do + # Only pick up the supported arch + if [ "$arch" == "$archvar" ]; then + [ -d "$dir/$arch" ] || mkdir -p $dir/$arch + cp -f $f $dir/$arch/ + found="1" + break + fi + done + [ -n "$found" ] || echo "Uknown arch $arch" + done + fi +} + +add_external_ipk () { + add_external_debipk $@ +} diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass index a297a1f..12e493d 100644 --- a/meta/classes/package_ipk.bbclass +++ b/meta/classes/package_ipk.bbclass @@ -6,6 +6,7 @@ IPKGCONF_TARGET = "${WORKDIR}/opkg.conf" IPKGCONF_SDK = "${WORKDIR}/opkg-sdk.conf" PKGWRITEDIRIPK = "${WORKDIR}/deploy-ipks" +EXTERNAL_DIR_IPK = "${DEPLOY_DIR_IPK}/external" # Program to be used to build opkg packages OPKGBUILDCMD ??= "opkg-build" @@ -203,7 +204,7 @@ package_update_index_ipk () { return fi - packagedirs="${DEPLOY_DIR_IPK}" + packagedirs="${DEPLOY_DIR_IPK} ${EXTERNAL_DIR_IPK}" for arch in $ipkgarchs; do packagedirs="$packagedirs ${DEPLOY_DIR_IPK}/$arch" done @@ -213,6 +214,12 @@ package_update_index_ipk () { packagedirs="$packagedirs ${DEPLOY_DIR_IPK}/$arch" done + all_archs="$ipkgarchs $multilib_archs" + add_external_ipk "${EXTERNAL_DIR_IPK}" $all_archs + for arch in $all_archs; do + packagedirs="$packagedirs ${EXTERNAL_DIR_IPK}/$arch" + done + for pkgdir in $packagedirs; do if [ -e $pkgdir/ ]; then touch $pkgdir/Packages @@ -229,19 +236,31 @@ package_update_index_ipk () { package_generate_ipkg_conf () { package_generate_archlist echo "src oe file:${DEPLOY_DIR_IPK}" >> ${IPKGCONF_SDK} + if [ -e ${EXTERNAL_DIR_IPK} ]; then + echo "src external file:${EXTERNAL_DIR_IPK}" >> ${IPKGCONF_SDK} + fi ipkgarchs="${SDK_PACKAGE_ARCHS}" for arch in $ipkgarchs; do if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${IPKGCONF_SDK} fi + if [ -e ${EXTERNAL_DIR_IPK}/$arch/Packages ] ; then + echo "src external-$arch file:${EXTERNAL_DIR_IPK}/$arch" >> ${IPKGCONF_SDK} + fi done echo "src oe file:${DEPLOY_DIR_IPK}" >> ${IPKGCONF_TARGET} + if [ -e ${EXTERNAL_DIR_IPK} ]; then + echo "src external file:${EXTERNAL_DIR_IPK}" >> ${IPKGCONF_TARGET} + fi ipkgarchs="${ALL_MULTILIB_PACKAGE_ARCHS}" for arch in $ipkgarchs; do if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${IPKGCONF_TARGET} fi + if [ -e ${EXTERNAL_DIR_IPK}/$arch/Packages ] ; then + echo "src external-$arch file:${EXTERNAL_DIR_IPK}/$arch" >> ${IPKGCONF_TARGET} + fi done } diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass index 6cdd8f6..edea67f 100644 --- a/meta/classes/rootfs_ipk.bbclass +++ b/meta/classes/rootfs_ipk.bbclass @@ -62,7 +62,7 @@ fakeroot rootfs_ipk_do_rootfs () { export INSTALL_ROOTFS_IPK="${IMAGE_ROOTFS}" export INSTALL_CONF_IPK="${IPKGCONF_TARGET}" - export INSTALL_PACKAGES_IPK="${PACKAGE_INSTALL}" + export INSTALL_PACKAGES_IPK="${PACKAGE_INSTALL} ${EXTERNAL_INSTALL_PACKAGE}" #post install export D=${IMAGE_ROOTFS} -- 1.7.11.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] ipk: install external binary packages 2012-08-15 15:32 ` [PATCH 2/3] ipk: " Robert Yang @ 2012-08-16 8:03 ` Koen Kooi 2012-08-16 8:11 ` Robert Yang 0 siblings, 1 reply; 10+ messages in thread From: Koen Kooi @ 2012-08-16 8:03 UTC (permalink / raw) To: Patches and discussions about the oe-core layer; +Cc: Zhenfeng.Zhao Op 15 aug. 2012, om 17:32 heeft Robert Yang <liezhi.yang@windriver.com> het volgende geschreven: > Please see the commit message for the rpm one, No, you copy-paste that message into this commit message. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] ipk: install external binary packages 2012-08-16 8:03 ` Koen Kooi @ 2012-08-16 8:11 ` Robert Yang 0 siblings, 0 replies; 10+ messages in thread From: Robert Yang @ 2012-08-16 8:11 UTC (permalink / raw) To: Patches and discussions about the oe-core layer; +Cc: Koen Kooi, Zhenfeng.Zhao On 08/16/2012 04:03 PM, Koen Kooi wrote: > > Op 15 aug. 2012, om 17:32 heeft Robert Yang <liezhi.yang@windriver.com> het volgende geschreven: > >> Please see the commit message for the rpm one, > > No, you copy-paste that message into this commit message. > Thanks, sounds better, V2 is coming. // Robert _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core > > ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/3] deb: install external binary packages 2012-08-15 15:32 [PATCH 0/3] Install external binary packages Robert Yang 2012-08-15 15:32 ` [PATCH 1/3] rpm: install " Robert Yang 2012-08-15 15:32 ` [PATCH 2/3] ipk: " Robert Yang @ 2012-08-15 15:32 ` Robert Yang 2 siblings, 0 replies; 10+ messages in thread From: Robert Yang @ 2012-08-15 15:32 UTC (permalink / raw) To: openembedded-core; +Cc: Zhenfeng.Zhao Please see the commit message for the rpm one, most of the contents are similar. [YOCTO #2949] Signed-off-by: Robert Yang <liezhi.yang@windriver.com> --- meta/classes/external_package.bbclass | 4 ++++ meta/classes/package_deb.bbclass | 43 +++++++++++++++++++++-------------- meta/classes/rootfs_deb.bbclass | 2 +- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/meta/classes/external_package.bbclass b/meta/classes/external_package.bbclass index 1587363..618ae72 100644 --- a/meta/classes/external_package.bbclass +++ b/meta/classes/external_package.bbclass @@ -83,3 +83,7 @@ add_external_debipk () { add_external_ipk () { add_external_debipk $@ } + +add_external_deb () { + add_external_debipk $@ +} diff --git a/meta/classes/package_deb.bbclass b/meta/classes/package_deb.bbclass index 48511df..477b90c 100644 --- a/meta/classes/package_deb.bbclass +++ b/meta/classes/package_deb.bbclass @@ -9,6 +9,7 @@ IMAGE_PKGTYPE ?= "deb" DPKG_ARCH ?= "${TARGET_ARCH}" PKGWRITEDIRDEB = "${WORKDIR}/deploy-debs" +EXTERNAL_DIR_DEB = "${DEPLOY_DIR_DEB}/external" python package_deb_fn () { d.setVar('PKGFN', d.getVar('PKG')) @@ -72,19 +73,25 @@ package_update_index_deb () { return fi - for arch in ${PACKAGE_ARCHS} ${SDK_PACKAGE_ARCHS}; do - if [ -e ${DEPLOY_DIR_DEB}/$arch ]; then + all_archs="${PACKAGE_ARCHS} ${SDK_PACKAGE_ARCHS}" + + [ ! -d ${EXTERNAL_INSTALL_DIRS} ] || add_external_deb ${EXTERNAL_DIR_DEB} $all_archs + + for arch in $all_archs; do + if [ -e ${DEPLOY_DIR_DEB}/$arch -o -e ${EXTERNAL_DIR_DEB}/$arch ]; then debarchs="$debarchs $arch" fi done for arch in $debarchs; do - if [ ! -d ${DEPLOY_DIR_DEB}/$arch ]; then - continue; - fi - cd ${DEPLOY_DIR_DEB}/$arch - dpkg-scanpackages . | gzip > Packages.gz - echo "Label: $arch" > Release + for d in ${DEPLOY_DIR_DEB} ${EXTERNAL_DIR_DEB}; do + if [ ! -d $d/$arch ]; then + continue; + fi + cd $d/$arch + dpkg-scanpackages . | gzip > Packages.gz + echo "Label: $arch" > Release + done done } @@ -114,16 +121,18 @@ package_install_internal_deb () { priority=1 for arch in $archs; do - if [ ! -d ${DEPLOY_DIR_DEB}/$arch ]; then - continue; - fi + for d in ${DEPLOY_DIR_DEB} ${EXTERNAL_DIR_DEB}; do + if [ ! -d $d/$arch ]; then + continue; + fi - echo "deb file:${DEPLOY_DIR_DEB}/$arch/ ./" >> ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev - (echo "Package: *" - echo "Pin: release l=$arch" - echo "Pin-Priority: $(expr 800 + $priority)" - echo) >> ${STAGING_ETCDIR_NATIVE}/apt/preferences - priority=$(expr $priority + 5) + echo "deb file:$d/$arch/ ./" >> ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev + (echo "Package: *" + echo "Pin: release l=$arch" + echo "Pin-Priority: $(expr 800 + $priority)" + echo) >> ${STAGING_ETCDIR_NATIVE}/apt/preferences + priority=$(expr $priority + 5) + done done tac ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev > ${STAGING_ETCDIR_NATIVE}/apt/sources.list diff --git a/meta/classes/rootfs_deb.bbclass b/meta/classes/rootfs_deb.bbclass index 750a8ca..0c7f5f2 100644 --- a/meta/classes/rootfs_deb.bbclass +++ b/meta/classes/rootfs_deb.bbclass @@ -34,7 +34,7 @@ fakeroot rootfs_deb_do_rootfs () { export INSTALL_ROOTFS_DEB="${IMAGE_ROOTFS}" export INSTALL_BASEARCH_DEB="${DPKG_ARCH}" export INSTALL_ARCHS_DEB="${PACKAGE_ARCHS}" - export INSTALL_PACKAGES_NORMAL_DEB="${PACKAGE_INSTALL}" + export INSTALL_PACKAGES_NORMAL_DEB="${PACKAGE_INSTALL} ${EXTERNAL_INSTALL_PACKAGE}" export INSTALL_PACKAGES_ATTEMPTONLY_DEB="${PACKAGE_INSTALL_ATTEMPTONLY}" export INSTALL_PACKAGES_LINGUAS_DEB="${LINGUAS_INSTALL}" export INSTALL_TASK_DEB="rootfs" -- 1.7.11.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 0/3 V2] Install external binary packages @ 2012-08-16 8:27 Robert Yang 2012-08-16 8:27 ` [PATCH 1/3] rpm: install " Robert Yang 0 siblings, 1 reply; 10+ messages in thread From: Robert Yang @ 2012-08-16 8:27 UTC (permalink / raw) To: openembedded-core; +Cc: Zhenfeng.Zhao Changes of V2: * Add commit message to each commit. Changes of V1: * Initial version // Robert The following changes since commit 0c6ac62a9fb81146ace64ae7493dcc56b4bed197: documentation: remove references to Pimlico (2012-08-15 15:26:27 +0100) are available in the git repository at: git://git.pokylinux.org/poky-contrib robert/external_install http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=robert/external_install Robert Yang (3): rpm: install external binary packages ipk: install external binary packages deb: install external binary packages meta/classes/external_package.bbclass | 91 +++++++++++++++++++++++++++++++++++ meta/classes/image.bbclass | 2 + meta/classes/package_deb.bbclass | 43 ++++++++++------- meta/classes/package_ipk.bbclass | 21 +++++++- meta/classes/package_rpm.bbclass | 12 +++-- meta/classes/rootfs_deb.bbclass | 2 +- meta/classes/rootfs_ipk.bbclass | 2 +- meta/classes/rootfs_rpm.bbclass | 2 +- 8 files changed, 151 insertions(+), 24 deletions(-) create mode 100644 meta/classes/external_package.bbclass -- 1.7.11.2 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/3] rpm: install external binary packages 2012-08-16 8:27 [PATCH 0/3 V2] Install " Robert Yang @ 2012-08-16 8:27 ` Robert Yang 2012-08-18 16:55 ` Richard Purdie 0 siblings, 1 reply; 10+ messages in thread From: Robert Yang @ 2012-08-16 8:27 UTC (permalink / raw) To: openembedded-core; +Cc: Zhenfeng.Zhao 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 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="" -- 1.7.11.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/3] rpm: install external binary packages 2012-08-16 8:27 ` [PATCH 1/3] rpm: install " Robert Yang @ 2012-08-18 16:55 ` Richard Purdie 2012-08-20 2:06 ` Robert Yang 0 siblings, 1 reply; 10+ messages in thread From: Richard Purdie @ 2012-08-18 16:55 UTC (permalink / raw) To: Patches and discussions about the oe-core layer; +Cc: Zhenfeng.Zhao 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="" ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/3] rpm: install external binary packages 2012-08-18 16:55 ` Richard Purdie @ 2012-08-20 2:06 ` Robert Yang 0 siblings, 0 replies; 10+ messages in thread From: Robert Yang @ 2012-08-20 2:06 UTC (permalink / raw) To: openembedded-core On 08/19/2012 12:55 AM, Richard Purdie wrote: > 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 > I'm sorry, this is because I just added the "inherit external_package" to the image.bbclass and populate_sdk_base.bbclass, so the "bitbake package-index" failed, I will send a V3 to add the "inherit external_package" to each package_rpm/deb/ipk.bbclass rather than the image.class and populate_sdk_base.bbclass. // Robert > 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="" > > > > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core > > ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2012-08-20 2:18 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-08-15 15:32 [PATCH 0/3] Install external binary packages Robert Yang 2012-08-15 15:32 ` [PATCH 1/3] rpm: install " Robert Yang 2012-08-16 6:48 ` Robert Yang 2012-08-15 15:32 ` [PATCH 2/3] ipk: " Robert Yang 2012-08-16 8:03 ` Koen Kooi 2012-08-16 8:11 ` Robert Yang 2012-08-15 15:32 ` [PATCH 3/3] deb: " Robert Yang -- strict thread matches above, loose matches on Subject: below -- 2012-08-16 8:27 [PATCH 0/3 V2] Install " Robert Yang 2012-08-16 8:27 ` [PATCH 1/3] rpm: install " Robert Yang 2012-08-18 16:55 ` Richard Purdie 2012-08-20 2:06 ` Robert Yang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox