- Now use a manifest to determine what to pull in, not comps itself
- Add a minimal-manifest for test composes - Add current F7 comps file for test composes - Use some anaconda code to depsolve, gets better (and more common) results
This commit is contained in:
parent
5e762d8c15
commit
c6851db291
@ -1,3 +1,9 @@
|
|||||||
|
* Tue Jan 23 2007 Jesse Keating <jkeating@redhat.com>
|
||||||
|
- Now use a manifest to determine what to pull in, not comps itself
|
||||||
|
- Add a minimal-manifest for test composes
|
||||||
|
- Add current F7 comps file for test composes
|
||||||
|
- Use some anaconda code to depsolve, gets better (and more common) results
|
||||||
|
|
||||||
* Wed Jan 17 2007 Jesse Keating <jkeating@redhat.com>
|
* Wed Jan 17 2007 Jesse Keating <jkeating@redhat.com>
|
||||||
- Move splittree workdirs into work/ at the end of the run
|
- Move splittree workdirs into work/ at the end of the run
|
||||||
|
|
||||||
|
13204
config/comps-fc7.xml
Normal file
13204
config/comps-fc7.xml
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,35 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE newcomps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
|
|
||||||
<comps>
|
|
||||||
<group>
|
|
||||||
<id>base</id>
|
|
||||||
<name>Base</name>
|
|
||||||
<description>This is the base group.</description>
|
|
||||||
<default>true</default>
|
|
||||||
<uservisible>true</uservisible>
|
|
||||||
<packagelist>
|
|
||||||
<packagereq type="optional">anaconda-runtime</packagereq>
|
|
||||||
<packagereq type="mandatory">authconfig</packagereq>
|
|
||||||
<packagereq type="optional">busybox-anaconda</packagereq>
|
|
||||||
<packagereq type="optional">dejavu-lgc-fonts</packagereq>
|
|
||||||
<packagereq type="optional">firstboot</packagereq>
|
|
||||||
<packagereq type="optional">gnome-python2-gtkhtml2</packagereq>
|
|
||||||
<packagereq type="default">grub</packagereq>
|
|
||||||
<packagereq type="default">joe</packagereq>
|
|
||||||
<packagereq type="optional">kernel</packagereq>
|
|
||||||
<packagereq type="optional">kernel-xen</packagereq>
|
|
||||||
<packagereq type="optional">libuser</packagereq>
|
|
||||||
<packagereq type="optional">man</packagereq>
|
|
||||||
<packagereq type="optional">memtest86+</packagereq>
|
|
||||||
<packagereq type="optional">policycoreutils</packagereq>
|
|
||||||
<packagereq type="optional">selinux-policy</packagereq>
|
|
||||||
<packagereq type="optional">selinux-policy-targeted</packagereq>
|
|
||||||
<packagereq type="optional">system-config-keyboard</packagereq>
|
|
||||||
<packagereq type="optional">xen</packagereq>
|
|
||||||
<packagereq type="optional">xorg-x11-drivers</packagereq>
|
|
||||||
<packagereq type="optional">xorg-x11-fonts-base</packagereq>
|
|
||||||
<packagereq type="optional">xorg-x11-fonts-ISO8859-1-75dpi</packagereq>
|
|
||||||
<packagereq type="mandatory">yum</packagereq>
|
|
||||||
</packagelist>
|
|
||||||
</group>
|
|
||||||
</comps>
|
|
14
config/minimal-manifest
Normal file
14
config/minimal-manifest
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
kernel
|
||||||
|
xorg-x11-fonts-ISO8859-1-75dpi
|
||||||
|
busybox-anaconda
|
||||||
|
dejavu-lgc-fonts
|
||||||
|
xen
|
||||||
|
xorg-x11-fonts-base
|
||||||
|
memtest86+
|
||||||
|
xorg-x11-drivers
|
||||||
|
selinux-policy-targeted
|
||||||
|
kernel-xen
|
||||||
|
anaconda-runtime
|
||||||
|
man
|
||||||
|
joe
|
||||||
|
grub
|
@ -5,7 +5,8 @@
|
|||||||
product_name = Fedora Core
|
product_name = Fedora Core
|
||||||
product_path = Fedora
|
product_path = Fedora
|
||||||
iso_basename = FC
|
iso_basename = FC
|
||||||
comps = /etc/pungi/comps.xml
|
comps = /etc/pungi/comps-fc7.xml
|
||||||
|
manifest = /etc/pungi/minimal-manifest
|
||||||
yumconf = /etc/pungi/yum.conf.x86_64
|
yumconf = /etc/pungi/yum.conf.x86_64
|
||||||
destdir = /srv/pungi
|
destdir = /srv/pungi
|
||||||
cachedir = /srv/pungi/cache
|
cachedir = /srv/pungi/cache
|
||||||
|
14
pungi
14
pungi
@ -64,7 +64,7 @@ def main():
|
|||||||
if not config.has_option('default', 'iso_basename'):
|
if not config.has_option('default', 'iso_basename'):
|
||||||
config.set('default', 'iso_basename', config.get('default', 'product_name'))
|
config.set('default', 'iso_basename', config.get('default', 'product_name'))
|
||||||
|
|
||||||
pkglist = get_packagelist(config.get('default', 'comps'))
|
pkglist = get_packagelist(config.get('default', 'manifest'))
|
||||||
|
|
||||||
destdir = config.get('default', 'destdir')
|
destdir = config.get('default', 'destdir')
|
||||||
|
|
||||||
@ -146,19 +146,17 @@ if __name__ == '__main__':
|
|||||||
# sys.exit(0)
|
# sys.exit(0)
|
||||||
return (opts, args)
|
return (opts, args)
|
||||||
|
|
||||||
def get_packagelist(myComps):
|
def get_packagelist(manifest):
|
||||||
# Get the list of packages from the comps file
|
# Get the list of packages from the comps file
|
||||||
try:
|
try:
|
||||||
compsobj = yum.comps.Comps()
|
manifestfile = open(manifest, 'r')
|
||||||
compsobj.add(myComps)
|
|
||||||
|
|
||||||
except IOError:
|
except IOError:
|
||||||
print >> sys.stderr, "pungi: No such file:\'%s\'" % opts.comps
|
print >> sys.stderr, "pungi: No such file:\'%s\'" % manifest
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
pkglist = []
|
pkglist = [l.strip() for l in manifestfile.readlines()]
|
||||||
for group in compsobj.groups:
|
manifestfile.close()
|
||||||
pkglist += group.packages
|
|
||||||
return pkglist
|
return pkglist
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
@ -21,10 +21,12 @@ class Gather(yum.YumBase):
|
|||||||
def __init__(self, config, pkglist):
|
def __init__(self, config, pkglist):
|
||||||
# Create a yum object to use
|
# Create a yum object to use
|
||||||
yum.YumBase.__init__(self)
|
yum.YumBase.__init__(self)
|
||||||
self.doConfigSetup(fn=config.get('default', 'yumconf'))
|
self.doConfigSetup(fn=config.get('default', 'yumconf'), debuglevel=6, errorlevel=6, root="/tmp")
|
||||||
self.cleanMetadata() # clean metadata that might be in the cache from previous runs
|
self.cleanMetadata() # clean metadata that might be in the cache from previous runs
|
||||||
self.cleanSqlite() # clean metadata that might be in the cache from previous runs
|
self.cleanSqlite() # clean metadata that might be in the cache from previous runs
|
||||||
self.doRepoSetup()
|
self.doRepoSetup()
|
||||||
|
self.doTsSetup()
|
||||||
|
self.doRpmDBSetup()
|
||||||
if config.get('default', 'arch') == 'i386':
|
if config.get('default', 'arch') == 'i386':
|
||||||
arches = yum.rpmUtils.arch.getArchList('i686')
|
arches = yum.rpmUtils.arch.getArchList('i686')
|
||||||
elif config.get('default', 'arch') == 'ppc':
|
elif config.get('default', 'arch') == 'ppc':
|
||||||
@ -32,12 +34,33 @@ class Gather(yum.YumBase):
|
|||||||
else:
|
else:
|
||||||
arches = yum.rpmUtils.arch.getArchList(config.get('default', 'arch'))
|
arches = yum.rpmUtils.arch.getArchList(config.get('default', 'arch'))
|
||||||
self.doSackSetup(arches)
|
self.doSackSetup(arches)
|
||||||
|
self.doSackFilelistPopulate()
|
||||||
self.logger = yum.logging.getLogger("yum.verbose.pungi")
|
self.logger = yum.logging.getLogger("yum.verbose.pungi")
|
||||||
self.config = config
|
self.config = config
|
||||||
self.pkglist = pkglist
|
self.pkglist = pkglist
|
||||||
self.polist = []
|
self.polist = []
|
||||||
self.srpmlist = []
|
self.srpmlist = []
|
||||||
|
|
||||||
|
def _provideToPkg(self, req): #this is stolen from Anaconda
|
||||||
|
best = None
|
||||||
|
(r, f, v) = req
|
||||||
|
|
||||||
|
satisfiers = []
|
||||||
|
for po in self.whatProvides(r, f, v):
|
||||||
|
# if we already have something installed which does the provide
|
||||||
|
# then that's obviously the one we want to use. this takes
|
||||||
|
# care of the case that we select, eg, kernel-smp and then
|
||||||
|
# have something which requires kernel
|
||||||
|
if self.tsInfo.getMembers(po.pkgtup):
|
||||||
|
return po
|
||||||
|
if po not in satisfiers:
|
||||||
|
satisfiers.append(po)
|
||||||
|
|
||||||
|
if satisfiers:
|
||||||
|
best = self.bestPackagesFromList(satisfiers)[0]
|
||||||
|
return best
|
||||||
|
return None
|
||||||
|
|
||||||
def getPackageDeps(self, po):
|
def getPackageDeps(self, po):
|
||||||
"""Return the dependencies for a given package, as well
|
"""Return the dependencies for a given package, as well
|
||||||
possible solutions for those dependencies.
|
possible solutions for those dependencies.
|
||||||
@ -48,18 +71,25 @@ class Gather(yum.YumBase):
|
|||||||
if not self.config.has_option('default', 'quiet'):
|
if not self.config.has_option('default', 'quiet'):
|
||||||
self.logger.info('Checking deps of %s.%s' % (po.name, po.arch))
|
self.logger.info('Checking deps of %s.%s' % (po.name, po.arch))
|
||||||
|
|
||||||
reqs = po.requires;
|
reqs = po.requires
|
||||||
|
provs = po.provides
|
||||||
pkgresults = {}
|
pkgresults = {}
|
||||||
|
|
||||||
for req in reqs:
|
for req in reqs:
|
||||||
(r,f,v) = req
|
(r,f,v) = req
|
||||||
if r.startswith('rpmlib('):
|
if r.startswith('rpmlib(') or r.startswith('config('):
|
||||||
|
continue
|
||||||
|
if req in provs:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
provides = self.whatProvides(r, f, v)
|
dep = self._provideToPkg(req)
|
||||||
for provide in provides.returnNewestByNameArch():
|
if dep is None:
|
||||||
if not pkgresults.has_key(provide):
|
self.logger.warning("Unresolvable dependency %s in %s" % (r, po.name))
|
||||||
pkgresults[provide] = None
|
continue
|
||||||
|
|
||||||
|
if not pkgresults.has_key(dep):
|
||||||
|
pkgresults[dep] = None
|
||||||
|
self.tsInfo.addInstall(dep)
|
||||||
|
|
||||||
return pkgresults.keys()
|
return pkgresults.keys()
|
||||||
|
|
||||||
@ -79,6 +109,7 @@ class Gather(yum.YumBase):
|
|||||||
|
|
||||||
for match in mysack.returnNewestByNameArch():
|
for match in mysack.returnNewestByNameArch():
|
||||||
unprocessed_pkgs[match] = None
|
unprocessed_pkgs[match] = None
|
||||||
|
self.tsInfo.addInstall(match)
|
||||||
|
|
||||||
if not self.config.has_option('default', 'quiet'):
|
if not self.config.has_option('default', 'quiet'):
|
||||||
for pkg in unprocessed_pkgs.keys():
|
for pkg in unprocessed_pkgs.keys():
|
||||||
|
Loading…
Reference in New Issue
Block a user