[Yum-devel] [Yum] yum arch handling
Mark Salter
msalter at redhat.com
Mon Oct 27 19:22:31 UTC 2008
Moving this thread to yum-devel...
On Thu, 2008-10-23 at 14:33 -0400, seth vidal wrote:
> On Thu, 2008-10-23 at 13:51 -0400, Mark Salter wrote:
> > On Thu, 2008-10-23 at 12:14 -0400, seth vidal wrote:
> > > On Thu, 2008-10-23 at 12:04 -0400, Mark Salter wrote:
> > > > So, I'm toying around with the idea of using yum to install non-hostarch
> > > > packages into some installroot. For instance, I have a repo containing
> > > > some noarch and arm rpms. On an x86 box, given a yum.conf which only
> > > > points to that noarch+arm repo, I'd like to be able to do something
> > > > like:
> > > >
> > > > % yum -c my_yum.conf depsolve 'somepkg'
> > > >
> > > > The problem is that yum doesn't seem to want anything to do with arches
> > > > which don't make sense for the x86 host. Not even 'list' them. If I run
> > > > the yum list command, only the noarch rpms are shown.
> > > >
> > > > Am I missing something? Am I crazy for even thinking about such a thing?
> > >
> > > If the arch cannot use the pkgs then yum ignores them.
> > >
> > > If you can 'setarch' to that arch then yum will work - but I doubt you
> > > can do that with i686->arm.
> > >
> > > The trouble is, of course, that scriptlets can't be run. So installing
> > > the pkgs just won't work.
> > >
> > > does this help?
> > >
> >
> > Yes. I know about the scripts and have some thoughts on how to handle
> > that part. At the moment, I'm just using noscripts in tsflags and am
> > focused on getting the depsolving part working.
> >
> > And no, setarch as-is can't help.
> >
> > So, where to go from here? Would a commandline arg to yum specifying
> > the desired arch/arches be interesting for the community? Or should I
> > be thinking along the lines of a new tool (reusing as much of the yum
> > backend as possible)?
> >
>
> Look at how yum get's the arch. It's not laid out right now for it to be
> overridden but it is doable. Look at yum/config.py and yum/__init__.py
>
> if you can come up with a patch that isn't too nasty I'd be willing to
> take a look.
After digging around in the yum code for a bit, this is what I came up
with. The changes are minimal, but I'm not sure the placement is right,
so comments/pointers welcome.
diff --git a/cli.py b/cli.py
index ff4c7d6..8d103ab 100644
--- a/cli.py
+++ b/cli.py
@@ -227,6 +227,9 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
sleeptime = random.randrange(opts.sleeptime*60)
else:
sleeptime = 0
+
+ if opts.forcearch:
+ rpmUtils.arch.canonArch = opts.forcearch
# save our original args out
self.args = args
@@ -1224,6 +1227,9 @@ class YumOptionParser(OptionParser):
metavar='[plugin]')
self.add_option("--skip-broken", action="store_true", dest="skipbroken",
help=_("skip packages with depsolving problems"))
+ self.add_option("--forcearch", dest='forcearch', default=None,
+ help=_("specify arch to operate on"),
+ metavar='[arch]')
diff --git a/yum/config.py b/yum/config.py
index 03123a9..18bd545 100644
--- a/yum/config.py
+++ b/yum/config.py
@@ -643,6 +643,7 @@ class YumConf(StartupConf):
enablegroups = BoolOption(True)
enable_group_conditionals = BoolOption(True)
group_package_types = ListOption(['mandatory', 'default'])
+ ignorearch = BoolOption(False)
timeout = FloatOption(30.0) # FIXME: Should use variation of SecondsOption
diff --git a/yum/depsolve.py b/yum/depsolve.py
index 25eb0e6..3e055c8 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -114,6 +114,10 @@ class Depsolve(object):
self._tsInfo.install_method = self.install
self._tsInfo.update_method = self.update
self._tsInfo.remove_method = self.remove
+ if self.conf.ignorearch:
+ if rpm.RPMPROB_FILTER_IGNOREARCH not in self._tsInfo.probFilterFlags:
+ self._tsInfo.probFilterFlags.append(rpm.RPMPROB_FILTER_IGNOREARCH)
+
return self._tsInfo
def _setTsInfo(self, value):
--Mark
More information about the Yum-devel
mailing list