From: Laurentiu Palcu <laurentiu.palcu@intel.com>
To: "David Nyström" <david.c.nystrom@gmail.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH 1/2] do_rootfs: Added PACKAGE_FEED_URIS functionality
Date: Fri, 28 Feb 2014 09:29:45 +0200 [thread overview]
Message-ID: <20140228072944.GE3534@lpalcu-linux> (raw)
In-Reply-To: <1393532438-6852-1-git-send-email-david.c.nystrom@gmail.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@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@gmail.com>
> Signed-off-by: David Nyström <david.nystrom@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@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
prev parent reply other threads:[~2014-02-28 7:29 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-27 20:20 [PATCH 1/2] do_rootfs: Added PACKAGE_FEED_URIS functionality David Nyström
2014-02-27 20:20 ` [PATCH 2/2] do_rootfs: Add PACKAGE_FEED_URIS as a vardep David Nyström
2014-02-27 22:34 ` [PATCH 1/2] do_rootfs: Added PACKAGE_FEED_URIS functionality Paul Eggleton
2014-02-28 9:38 ` David Nyström
2014-03-03 20:41 ` Trevor Woerner
2014-03-04 0:57 ` Otavio Salvador
2014-03-04 8:45 ` David Nyström
2014-03-04 10:29 ` Paul Eggleton
2014-03-04 11:02 ` Andreas Oberritter
2014-03-04 11:04 ` Paul Eggleton
2014-02-28 7:29 ` Laurentiu Palcu [this message]
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=20140228072944.GE3534@lpalcu-linux \
--to=laurentiu.palcu@intel.com \
--cc=david.c.nystrom@gmail.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.