[OE-core] [PATCH 1/2] do_rootfs: Added PACKAGE_FEED_URIS functionality
Laurentiu Palcu
laurentiu.palcu at intel.com
Fri Feb 28 07:29:45 UTC 2014
Reviewed-by: Laurentiu Palcu <laurentiu.palcu at intel.com>
On Thu, Feb 27, 2014 at 09:20:37PM +0100, David Nyström wrote:
> Adding a common interface to add predefined package manager
> channels to prebuilt rootfs:es.
>
> Adding PACKAGE_FEED_URIS = "http://myre.po/repo/, will
> assume repo directories named (rpm,ipk,deb) as subdirectories
> and statically add them to the rootfs, using the same PKG_ARCHs
> as the build which produced the images.
>
> Tested with RPM, IPK and DEB.
>
> deb feed functionality seem broken, is anyone using this ?
>
> Signed-off-by: David Nyström <david.c.nystrom at gmail.com>
> Signed-off-by: David Nyström <david.nystrom at enea.com>
> ---
> meta/lib/oe/package_manager.py | 89 +++++++++++++++++++++++++++++++++++++++++-
> meta/lib/oe/rootfs.py | 16 ++------
> 2 files changed, 92 insertions(+), 13 deletions(-)
>
> diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
> index ff4f1de..c930572 100644
> --- a/meta/lib/oe/package_manager.py
> +++ b/meta/lib/oe/package_manager.py
> @@ -223,6 +223,7 @@ class PackageManager(object):
> self.d = d
> self.deploy_dir = None
> self.deploy_lock = None
> + self.feed_uris = self.d.getVar('PACKAGE_FEED_URIS', True) or ""
>
> """
> Update the package manager package database.
> @@ -262,6 +263,10 @@ class PackageManager(object):
> def list_installed(self, format=None):
> pass
>
> + @abstractmethod
> + def insert_feeds_uris(self):
> + pass
> +
> """
> Install complementary packages based upon the list of currently installed
> packages e.g. locales, *-dev, *-dbg, etc. This will only attempt to install
> @@ -358,6 +363,46 @@ class RpmPM(PackageManager):
>
> self.ml_prefix_list, self.ml_os_list = self.indexer.get_ml_prefix_and_os_list(arch_var, os_var)
>
> +
> + def insert_feeds_uris(self):
> + if self.feed_uris == "":
> + return
> +
> + # List must be prefered to least preferred order
> + default_platform_extra = set()
> + platform_extra = set()
> + bbextendvariant = self.d.getVar('BBEXTENDVARIANT', True) or ""
> + for mlib in self.ml_os_list:
> + for arch in self.ml_prefix_list[mlib]:
> + plt = arch.replace('-', '_') + '-.*-' + self.ml_os_list[mlib]
> + if mlib == bbextendvariant:
> + default_platform_extra.add(plt)
> + else:
> + platform_extra.add(plt)
> +
> + platform_extra = platform_extra.union(default_platform_extra)
> +
> + arch_list = []
> + for canonical_arch in platform_extra:
> + arch = canonical_arch.split('-')[0]
> + if not os.path.exists(os.path.join(self.deploy_dir, arch)):
> + continue
> + arch_list.append(arch)
> +
> + uri_iterator = 0
> + channel_priority = 10 + 5 * len(self.feed_uris.split()) * len(arch_list)
> +
> + for uri in self.feed_uris.split():
> + for arch in arch_list:
> + bb.note('Note: adding Smart channel url%d%s (%s)' %
> + (uri_iterator, arch, channel_priority))
> + self._invoke_smart('channel --add url%d-%s type=rpm-md baseurl=%s/rpm/%s -y'
> + % (uri_iterator, arch, uri, arch))
> + self._invoke_smart('channel --set url%d-%s priority=%d' %
> + (uri_iterator, arch, channel_priority))
> + channel_priority -= 5
> + uri_iterator += 1
> +
> '''
> Create configs for rpm and smart, and multilib is supported
> '''
> @@ -944,7 +989,6 @@ class OpkgPM(PackageManager):
>
> self.deploy_dir = self.d.getVar("DEPLOY_DIR_IPK", True)
> self.deploy_lock_file = os.path.join(self.deploy_dir, "deploy.lock")
> -
> self.opkg_cmd = bb.utils.which(os.getenv('PATH'), "opkg-cl")
> self.opkg_args = "-f %s -o %s " % (self.config_file, target_rootfs)
> self.opkg_args += self.d.getVar("OPKG_ARGS", True)
> @@ -1050,6 +1094,29 @@ class OpkgPM(PackageManager):
> config_file.write("src oe-%s file:%s\n" %
> (arch, pkgs_dir))
>
> + def insert_feeds_uris(self):
> + if self.feed_uris == "":
> + return
> +
> + rootfs_config = os.path.join('%s/etc/opkg/base-feeds.conf'
> + % self.target_rootfs)
> +
> + with open(rootfs_config, "w+") as config_file:
> + uri_iterator = 0
> + for uri in self.feed_uris.split():
> + config_file.write("src/gz url-%d %s/ipk\n" %
> + (uri_iterator, uri))
> +
> + for arch in self.pkg_archs.split():
> + if not os.path.exists(os.path.join(self.deploy_dir, arch)):
> + continue
> + bb.note('Note: adding opkg channel url-%s-%d (%s)' %
> + (arch, uri_iterator, uri))
> +
> + config_file.write("src/gz uri-%s-%d %s/ipk/%s\n" %
> + (arch, uri_iterator, uri, arch))
> + uri_iterator += 1
> +
> def update(self):
> self.deploy_dir_lock()
>
> @@ -1410,6 +1477,26 @@ class DpkgPM(PackageManager):
> if result is not None:
> bb.fatal(result)
>
> + def insert_feeds_uris(self):
> + if self.feed_uris == "":
> + return
> +
> + sources_conf = os.path.join("%s/etc/apt/sources.list"
> + % self.target_rootfs)
> + arch_list = []
> + archs = self.d.getVar('PACKAGE_ARCHS', True)
> + for arch in archs.split():
> + if not os.path.exists(os.path.join(self.deploy_dir, arch)):
> + continue
> + arch_list.append(arch)
> +
> + with open(sources_conf, "w+") as sources_file:
> + for uri in self.feed_uris.split():
> + for arch in arch_list:
> + bb.note('Note: adding dpkg channel at (%s)' % uri)
> + sources_file.write("deb %s/deb/%s ./\n" %
> + (uri, arch))
> +
> def _create_configs(self, archs, base_archs):
> base_archs = re.sub("_", "-", base_archs)
>
> diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
> index be0afa6..cb0a739 100644
> --- a/meta/lib/oe/rootfs.py
> +++ b/meta/lib/oe/rootfs.py
> @@ -41,9 +41,10 @@ class Rootfs(object):
> def _log_check(self):
> pass
>
> - @abstractmethod
> def _insert_feed_uris(self):
> - pass
> + if base_contains("IMAGE_FEATURES", "package-management",
> + True, False, self.d):
> + self.pm.insert_feeds_uris()
>
> @abstractmethod
> def _handle_intercept_failure(self, failed_script):
> @@ -349,9 +350,6 @@ class RpmRootfs(Rootfs):
> if found_error == 6:
> bb.fatal(message)
>
> - def _insert_feed_uris(self):
> - pass
> -
> def _handle_intercept_failure(self, registered_pkgs):
> rpm_postinsts_dir = self.image_rootfs + self.d.expand('${sysconfdir}/rpm-postinsts/')
> bb.utils.mkdirhier(rpm_postinsts_dir)
> @@ -372,6 +370,7 @@ class DpkgRootfs(Rootfs):
> d.getVar('PACKAGE_ARCHS', True),
> d.getVar('DPKG_ARCH', True))
>
> +
> def _create(self):
> pkgs_to_install = self.manifest.parse_initial_manifest()
>
> @@ -432,9 +431,6 @@ class DpkgRootfs(Rootfs):
> def _log_check(self):
> pass
>
> - def _insert_feed_uris(self):
> - pass
> -
>
> class OpkgRootfs(Rootfs):
> def __init__(self, d, manifest_dir):
> @@ -698,10 +694,6 @@ class OpkgRootfs(Rootfs):
> def _log_check(self):
> pass
>
> - def _insert_feed_uris(self):
> - pass
> -
> -
> def create_rootfs(d, manifest_dir=None):
> env_bkp = os.environ.copy()
>
> --
> 1.8.3.2
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
More information about the Openembedded-core
mailing list