- 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> | ||||
| - 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_path = Fedora | ||||
| 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 | ||||
| destdir = /srv/pungi | ||||
| cachedir = /srv/pungi/cache | ||||
|  | ||||
							
								
								
									
										14
									
								
								pungi
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								pungi
									
									
									
									
									
								
							| @ -64,7 +64,7 @@ def main(): | ||||
|     if not config.has_option('default', 'iso_basename'): | ||||
|         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') | ||||
| 
 | ||||
| @ -146,19 +146,17 @@ if __name__ == '__main__': | ||||
|         #    sys.exit(0) | ||||
|         return (opts, args) | ||||
| 
 | ||||
|     def get_packagelist(myComps): | ||||
|     def get_packagelist(manifest): | ||||
|     # Get the list of packages from the comps file | ||||
|         try: | ||||
|             compsobj = yum.comps.Comps() | ||||
|             compsobj.add(myComps) | ||||
|             manifestfile = open(manifest, 'r') | ||||
| 
 | ||||
|         except IOError: | ||||
|             print >> sys.stderr, "pungi: No such file:\'%s\'" % opts.comps | ||||
|             print >> sys.stderr, "pungi: No such file:\'%s\'" % manifest | ||||
|             sys.exit(1) | ||||
| 
 | ||||
|         pkglist = [] | ||||
|         for group in compsobj.groups: | ||||
|             pkglist += group.packages | ||||
|         pkglist = [l.strip() for l in manifestfile.readlines()] | ||||
|         manifestfile.close() | ||||
|         return pkglist | ||||
| 
 | ||||
|     main() | ||||
|  | ||||
| @ -21,10 +21,12 @@ class Gather(yum.YumBase): | ||||
|     def __init__(self, config, pkglist): | ||||
|         # Create a yum object to use | ||||
|         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.cleanSqlite() # clean metadata that might be in the cache from previous runs | ||||
|         self.doRepoSetup() | ||||
|         self.doTsSetup() | ||||
|         self.doRpmDBSetup() | ||||
|         if config.get('default', 'arch') == 'i386': | ||||
|             arches = yum.rpmUtils.arch.getArchList('i686') | ||||
|         elif config.get('default', 'arch') == 'ppc': | ||||
| @ -32,12 +34,33 @@ class Gather(yum.YumBase): | ||||
|         else: | ||||
|             arches = yum.rpmUtils.arch.getArchList(config.get('default', 'arch')) | ||||
|         self.doSackSetup(arches) | ||||
|         self.doSackFilelistPopulate() | ||||
|         self.logger = yum.logging.getLogger("yum.verbose.pungi") | ||||
|         self.config = config | ||||
|         self.pkglist = pkglist | ||||
|         self.polist = [] | ||||
|         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): | ||||
|         """Return the dependencies for a given package, as well | ||||
|            possible solutions for those dependencies. | ||||
| @ -48,18 +71,25 @@ class Gather(yum.YumBase): | ||||
|         if not self.config.has_option('default', 'quiet'): | ||||
|             self.logger.info('Checking deps of %s.%s' % (po.name, po.arch)) | ||||
| 
 | ||||
|         reqs = po.requires; | ||||
|         reqs = po.requires | ||||
|         provs = po.provides | ||||
|         pkgresults = {} | ||||
| 
 | ||||
|         for req in reqs: | ||||
|             (r,f,v) = req | ||||
|             if r.startswith('rpmlib('): | ||||
|             if r.startswith('rpmlib(') or r.startswith('config('): | ||||
|                 continue | ||||
|             if req in provs: | ||||
|                 continue | ||||
| 
 | ||||
|             provides = self.whatProvides(r, f, v) | ||||
|             for provide in provides.returnNewestByNameArch(): | ||||
|                 if not pkgresults.has_key(provide): | ||||
|                     pkgresults[provide] = None | ||||
|             dep = self._provideToPkg(req) | ||||
|             if dep is None: | ||||
|                 self.logger.warning("Unresolvable dependency %s in %s" % (r, po.name)) | ||||
|                 continue | ||||
| 
 | ||||
|             if not pkgresults.has_key(dep): | ||||
|                 pkgresults[dep] = None | ||||
|                 self.tsInfo.addInstall(dep) | ||||
| 
 | ||||
|         return pkgresults.keys() | ||||
| 
 | ||||
| @ -79,6 +109,7 @@ class Gather(yum.YumBase): | ||||
|              | ||||
|             for match in mysack.returnNewestByNameArch(): | ||||
|                 unprocessed_pkgs[match] = None | ||||
|                 self.tsInfo.addInstall(match) | ||||
| 
 | ||||
|         if not self.config.has_option('default', 'quiet'): | ||||
|             for pkg in unprocessed_pkgs.keys(): | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 jkeating@reducto.boston.redhat.com
						jkeating@reducto.boston.redhat.com