- 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:
parent
cfdfdbbabe
commit
cc68ffa5d8
@ -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
68
pungi
@ -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()
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user