mirror of
https://git.yoctoproject.org/poky
synced 2026-09-20 03:49:32 +02:00
do_rootfs: Added PACKAGE_FEED_URIS functionality
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 ? (From OE-Core rev: 9b8811045546ad67b4695d980f09636d5506e50c) Signed-off-by: David Nyström <david.c.nystrom@gmail.com> Signed-off-by: David Nyström <david.nystrom@enea.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
ff8d8fbc9e
commit
7af3eb8434
@@ -223,6 +223,7 @@ class PackageManager(object):
|
|||||||
self.d = d
|
self.d = d
|
||||||
self.deploy_dir = None
|
self.deploy_dir = None
|
||||||
self.deploy_lock = None
|
self.deploy_lock = None
|
||||||
|
self.feed_uris = self.d.getVar('PACKAGE_FEED_URIS', True) or ""
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Update the package manager package database.
|
Update the package manager package database.
|
||||||
@@ -262,6 +263,10 @@ class PackageManager(object):
|
|||||||
def list_installed(self, format=None):
|
def list_installed(self, format=None):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def insert_feeds_uris(self):
|
||||||
|
pass
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Install complementary packages based upon the list of currently installed
|
Install complementary packages based upon the list of currently installed
|
||||||
packages e.g. locales, *-dev, *-dbg, etc. This will only attempt to install
|
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)
|
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
|
Create configs for rpm and smart, and multilib is supported
|
||||||
'''
|
'''
|
||||||
@@ -964,7 +1009,6 @@ class OpkgPM(PackageManager):
|
|||||||
|
|
||||||
self.deploy_dir = self.d.getVar("DEPLOY_DIR_IPK", True)
|
self.deploy_dir = self.d.getVar("DEPLOY_DIR_IPK", True)
|
||||||
self.deploy_lock_file = os.path.join(self.deploy_dir, "deploy.lock")
|
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_cmd = bb.utils.which(os.getenv('PATH'), "opkg-cl")
|
||||||
self.opkg_args = "-f %s -o %s " % (self.config_file, target_rootfs)
|
self.opkg_args = "-f %s -o %s " % (self.config_file, target_rootfs)
|
||||||
self.opkg_args += self.d.getVar("OPKG_ARGS", True)
|
self.opkg_args += self.d.getVar("OPKG_ARGS", True)
|
||||||
@@ -1070,6 +1114,29 @@ class OpkgPM(PackageManager):
|
|||||||
config_file.write("src oe-%s file:%s\n" %
|
config_file.write("src oe-%s file:%s\n" %
|
||||||
(arch, pkgs_dir))
|
(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):
|
def update(self):
|
||||||
self.deploy_dir_lock()
|
self.deploy_dir_lock()
|
||||||
|
|
||||||
@@ -1433,6 +1500,26 @@ class DpkgPM(PackageManager):
|
|||||||
if result is not None:
|
if result is not None:
|
||||||
bb.fatal(result)
|
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):
|
def _create_configs(self, archs, base_archs):
|
||||||
base_archs = re.sub("_", "-", base_archs)
|
base_archs = re.sub("_", "-", base_archs)
|
||||||
|
|
||||||
|
|||||||
@@ -41,9 +41,10 @@ class Rootfs(object):
|
|||||||
def _log_check(self):
|
def _log_check(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def _insert_feed_uris(self):
|
def _insert_feed_uris(self):
|
||||||
pass
|
if base_contains("IMAGE_FEATURES", "package-management",
|
||||||
|
True, False, self.d):
|
||||||
|
self.pm.insert_feeds_uris()
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def _handle_intercept_failure(self, failed_script):
|
def _handle_intercept_failure(self, failed_script):
|
||||||
@@ -349,9 +350,6 @@ class RpmRootfs(Rootfs):
|
|||||||
if found_error == 6:
|
if found_error == 6:
|
||||||
bb.fatal(message)
|
bb.fatal(message)
|
||||||
|
|
||||||
def _insert_feed_uris(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _handle_intercept_failure(self, registered_pkgs):
|
def _handle_intercept_failure(self, registered_pkgs):
|
||||||
rpm_postinsts_dir = self.image_rootfs + self.d.expand('${sysconfdir}/rpm-postinsts/')
|
rpm_postinsts_dir = self.image_rootfs + self.d.expand('${sysconfdir}/rpm-postinsts/')
|
||||||
bb.utils.mkdirhier(rpm_postinsts_dir)
|
bb.utils.mkdirhier(rpm_postinsts_dir)
|
||||||
@@ -372,6 +370,7 @@ class DpkgRootfs(Rootfs):
|
|||||||
d.getVar('PACKAGE_ARCHS', True),
|
d.getVar('PACKAGE_ARCHS', True),
|
||||||
d.getVar('DPKG_ARCH', True))
|
d.getVar('DPKG_ARCH', True))
|
||||||
|
|
||||||
|
|
||||||
def _create(self):
|
def _create(self):
|
||||||
pkgs_to_install = self.manifest.parse_initial_manifest()
|
pkgs_to_install = self.manifest.parse_initial_manifest()
|
||||||
|
|
||||||
@@ -432,9 +431,6 @@ class DpkgRootfs(Rootfs):
|
|||||||
def _log_check(self):
|
def _log_check(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _insert_feed_uris(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class OpkgRootfs(Rootfs):
|
class OpkgRootfs(Rootfs):
|
||||||
def __init__(self, d, manifest_dir):
|
def __init__(self, d, manifest_dir):
|
||||||
@@ -698,10 +694,6 @@ class OpkgRootfs(Rootfs):
|
|||||||
def _log_check(self):
|
def _log_check(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _insert_feed_uris(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def create_rootfs(d, manifest_dir=None):
|
def create_rootfs(d, manifest_dir=None):
|
||||||
env_bkp = os.environ.copy()
|
env_bkp = os.environ.copy()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user