[OE-core] [PATCH 3/3] deb: install external binary packages
Robert Yang
liezhi.yang at windriver.com
Thu Aug 16 08:27:42 UTC 2012
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/deb/external/<arch>, the add_external_debipk is used by
ipk and deb, the add_external_deb is just a wrapper.
Use an "external" directory since we don't want the "internal" pkgs
to be mixed, and it would be easy to remove them.
- package_deb.bbclass:
Create repo for deploy/deb/external
- rootfs_deb.bbclass
Add the package that would be installed to INSTALL_PACKAGES_DEB, so
that it would be installed.
[YOCTO #2949]
Signed-off-by: Robert Yang <liezhi.yang at 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 c21a5c6..d971384 100644
--- a/meta/classes/external_package.bbclass
+++ b/meta/classes/external_package.bbclass
@@ -85,3 +85,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
More information about the Openembedded-core
mailing list