- Use a kickstart file as input now (for cdsize and package manifest)

- Turn pkglist into a pre-parsed package dictionary
- Arrange config setting logically
- Error out on usage if no config file passed
This commit is contained in:
Jesse Keating 2007-08-25 08:56:16 -04:00 committed by Jesse Keating
parent cfdfdbbabe
commit cc68ffa5d8
3 changed files with 44 additions and 62 deletions

View File

@ -1,3 +1,9 @@
* Sat Aug 25 2007 Jesse Keating <jkeating@redhat.com>
- Use a kickstart file as input now (for cdsize and package manifest)
- Turn pkglist into a pre-parsed package dictionary
- Arrange config setting logically
- Error out on usage if no config file passed
* Fri Aug 24 2007 Jesse Keating <jkeating@redhat.com> * Fri Aug 24 2007 Jesse Keating <jkeating@redhat.com>
- Remove a lot of configurable items and hard set them - Remove a lot of configurable items and hard set them
- Move some items to cli flags only (part of moving to pykickstart) - Move some items to cli flags only (part of moving to pykickstart)

68
pungi
View File

@ -16,6 +16,8 @@ import os
import pypungi.gather import pypungi.gather
import pypungi.pungi import pypungi.pungi
import yum import yum
import pykickstart.parser
import pykickstart.version
from ConfigParser import SafeConfigParser from ConfigParser import SafeConfigParser
@ -27,35 +29,30 @@ def main():
sourcedir = "source" sourcedir = "source"
debugdir = "debug" debugdir = "debug"
isodir = "iso" isodir = "iso"
cdsize = "685.0" cdsize = "4608.0"
relnotefilere = "eula.txt fedora.css GPL README-BURNING-ISOS-en_US.txt RELEASE-NOTES-en_US.html ^RPM-GPG" relnotefilere = "eula.txt fedora.css GPL README-BURNING-ISOS-en_US.txt RELEASE-NOTES-en_US.html ^RPM-GPG"
relnotedirre = "images stylesheet-images" relnotedirre = "images stylesheet-images"
relnotepkgs = "fedora-release fedora-release-notes" relnotepkgs = "fedora-release fedora-release-notes"
(opts, args) = get_arguments() (opts, args) = get_arguments()
# Set up the kickstart parser and pass in the kickstart file we were handed
ksparser = pykickstart.parser.KickstartParser(pykickstart.version.makeVersion())
ksparser.readKickstart(opts.config)
config = SafeConfigParser() config = SafeConfigParser()
config.read(opts.config)
if "default" not in config.sections(): # add some sections here before setting stuff.
print ("Check that the file %s exists and that it has a 'default' section" % opts.config)
sys.exit(1)
# hard coded non-options
config.set('default', 'osdir', osdir) config.set('default', 'osdir', osdir)
config.set('default', 'sourcedir', sourcedir) config.set('default', 'sourcedir', sourcedir)
config.set('default', 'debugdir', debugdir) config.set('default', 'debugdir', debugdir)
config.set('default', 'isodir', isodir) config.set('default', 'isodir', isodir)
config.set('default', 'cdsize', cdsize)
config.set('default', 'relnotefilere', relnotefilere) config.set('default', 'relnotefilere', relnotefilere)
config.set('default', 'relnotedirre', relnotedirre) config.set('default', 'relnotedirre', relnotedirre)
config.set('default', 'relnotepkgs', relnotepkgs) config.set('default', 'relnotepkgs', relnotepkgs)
config.set('default', 'product_path', 'Packages')
# set configs from cli options # set configs from cli options
config.set('default', 'name', opts.name) config.set('default', 'name', opts.name)
@ -66,12 +63,24 @@ def main():
config.set('default', 'discs', opts.discs) config.set('default', 'discs', opts.discs)
# set some other defaults # set some other defaults
config.set('default', 'product_path', 'Packages')
config.set('default', 'iso_basename', config.get('default', 'name')) config.set('default', 'iso_basename', config.get('default', 'name'))
pkglist = get_packagelist(config.get('default', 'manifest')) config.set('default', 'cdsize', cdsize)
for part in ksparser.handler.partition.partitions:
if part.mountpoint == 'iso':
config.set('default', 'cdsize', part.size)
# Build up a package dict.
pkgdict = {'groups': [], 'packages': [], 'excludes': [])
for group in ksparser.handler.packages.groupList:
if group.include == 1:
pkgdict['groups'].append(group.name)
pkgdict['packages'].extend(ksparser.handler.packages.packageList)
pkgdict['excludes'].extend(ksparser.handler.packages.excludedList)
# Set up our directories
if not os.path.exists(config.get('default', 'destdir')): if not os.path.exists(config.get('default', 'destdir')):
try: try:
os.makedirs(config.get('default', 'destdir')) os.makedirs(config.get('default', 'destdir'))
@ -91,7 +100,7 @@ def main():
# Actually do work. # Actually do work.
if not config.get('default', 'arch') == 'source': if not config.get('default', 'arch') == 'source':
if opts.do_all or opts.do_gather: if opts.do_all or opts.do_gather:
mygather = pypungi.gather.Gather(config, pkglist) mygather = pypungi.gather.Gather(config, pkgdict)
mygather.getPackageObjects() mygather.getPackageObjects()
mygather.downloadPackages() mygather.downloadPackages()
mygather.makeCompsFile() mygather.makeCompsFile()
@ -162,8 +171,8 @@ if __name__ == '__main__':
parser.add_option("--nosource", action="store_true", dest="nosource", parser.add_option("--nosource", action="store_true", dest="nosource",
help='the flavor of your distribution spin (optional)') help='the flavor of your distribution spin (optional)')
parser.add_option("-c", "--conf", default='/etc/pungi/pungi.conf', dest="config", parser.add_option("-c", "--config", dest="config",
help='Config file to use') help='Path to kickstart config file')
parser.add_option("--all-stages", action="store_true", default=True, dest="do_all", parser.add_option("--all-stages", action="store_true", default=True, dest="do_all",
help="Enable ALL stages") help="Enable ALL stages")
parser.add_option("-G", action="store_true", default=False, dest="do_gather", parser.add_option("-G", action="store_true", default=False, dest="do_gather",
@ -181,24 +190,13 @@ if __name__ == '__main__':
(opts, args) = parser.parse_args() (opts, args) = parser.parse_args()
if opts.do_gather or opts.do_createrepo or opts.do_buildinstall or opts.do_packageorder or opts.do_splittree or opts.do_createiso:
opts.do_all = False if not '-c' in sys.argv or not '--config' in sys.argv:
if len(sys.argv) < 2:
parser.print_help() parser.print_help()
sys.exit(0) sys.exit(0)
if opts.do_gather or opts.do_createrepo or opts.do_buildinstall or opts.do_packageorder or opts.do_splittree or opts.do_createiso:
opts.do_all = False
return (opts, args) return (opts, args)
def get_packagelist(manifest):
# Get the list of packages from the manifest file
try:
manifestfile = open(manifest, 'r')
except IOError:
print >> sys.stderr, "pungi: No such file:\'%s\'" % manifest
sys.exit(1)
pkglist = manifestfile.readlines()
manifestfile.close()
return pkglist
main() main()

View File

@ -47,7 +47,7 @@ class PungiYum(yum.YumBase):
pass pass
class Gather(pypungi.PungiBase): class Gather(pypungi.PungiBase):
def __init__(self, config, pkglist): def __init__(self, config, pkgdict):
pypungi.PungiBase.__init__(self, config) pypungi.PungiBase.__init__(self, config)
# Set our own logging name space # Set our own logging name space
@ -60,7 +60,7 @@ class Gather(pypungi.PungiBase):
console.setLevel(logging.INFO) console.setLevel(logging.INFO)
self.logger.addHandler(console) self.logger.addHandler(console)
self.pkglist = pkglist self.pkgdict = pkgdict
self.config.cachedir = os.path.join(self.workdir, 'yumcache') self.config.cachedir = os.path.join(self.workdir, 'yumcache')
self.polist = [] self.polist = []
self.srpmlist = [] self.srpmlist = []
@ -209,38 +209,16 @@ class Gather(pypungi.PungiBase):
searchlist = [] # The list of package names/globs to search for searchlist = [] # The list of package names/globs to search for
matchdict = {} # A dict of objects to names matchdict = {} # A dict of objects to names
grouplist = []
excludelist = []
addlist = []
# Cycle through the package list and pull out the groups
for line in self.pkglist:
line = line.strip()
if line.startswith('#'):
self.logger.debug('Skipping comment: %s' % line)
continue
if line.startswith('@'):
self.logger.info('Adding group: %s' % line)
grouplist.append(line.strip('@'))
continue
if line.startswith('-'):
self.logger.info('Adding exclude: %s' % line)
excludelist.append(line.strip('-'))
continue
else:
self.logger.info('Adding package: %s' % line)
addlist.append(line)
# First remove the excludes # First remove the excludes
self.ayum.conf.exclude.extend(excludelist) self.ayum.conf.exclude.extend(self.pkgdict['excludes'])
self.ayum.excludePackages() self.ayum.excludePackages()
# Get a list of packages from groups # Get a list of packages from groups
for group in grouplist: for group in self.pkgdict['groups']:
searchlist.extend(self.getPackagesFromGroup(group)) searchlist.extend(self.getPackagesFromGroup(group))
# Add the adds # Add the adds
searchlist.extend(addlist) searchlist.extend(self.pkgdict['packages'])
# Make the search list unique # Make the search list unique
searchlist = yum.misc.unique(searchlist) searchlist = yum.misc.unique(searchlist)