X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=catalyst;h=4b48587af53dc4a397786860f3a65a64d5bdc4ea;hb=1082b4471613842494261d74ec2598b4191056c9;hp=57bc3ad7d0403821b09440b70dec675bd6ef32e5;hpb=e75659541a39949fee96c6576ebafb85a5f552ed;p=catalyst.git diff --git a/catalyst b/catalyst index 57bc3ad7..4b48587a 100755 --- a/catalyst +++ b/catalyst @@ -1,30 +1,43 @@ #!/usr/bin/python -OO # Maintained in full by: +# Catalyst Team +# Release Engineering Team # Andrew Gaffney -# Chris Gianelloni +# Chris Gianelloni +# $Id$ -import os,sys,imp,string,getopt +import os, sys, imp, string, getopt import pdb +import os.path -__maintainer__="Chris Gianelloni " -__version__="2.0.6_pre12" +__selfpath__ = os.path.abspath(os.path.dirname(__file__)) + +sys.path.append(__selfpath__ + "/modules") + +import catalyst.config +import catalyst.util + +__maintainer__="Catalyst " +__version__="2.0.13" conf_values={} def usage(): print "Usage catalyst [options] [-C variable=value...] [ -s identifier]" print " -a --clear-autoresume clear autoresume flags" - print " -c --config use specified configuration file" - print " -C --cli catalyst commandline (MUST BE LAST OPTION)" - print " -d --debug enable debugging" - print " -f --file read specfile" - print " -F --fetchonly fetch files only" - print " -h --help print this help message" - print " -p --purge clear tmp dirs,package cache and autoresume flags" - print " -s --snapshot generate a release snapshot" - print " -V --version display version information" - print " -v --verbose verbose output" + print " -c --config use specified configuration file" + print " -C --cli catalyst commandline (MUST BE LAST OPTION)" + print " -d --debug enable debugging" + print " -f --file read specfile" + print " -F --fetchonly fetch files only" + print " -h --help print this help message" + print " -p --purge clear tmp dirs,package cache and autoresume flags" + print " -P --purgeonly clear tmp dirs,package cache and autoresume flags and exit" + print " -T --purgetmponly clear tmp dirs and autoresume flags and exit" + print " -s --snapshot generate a release snapshot" + print " -V --version display version information" + print " -v --verbose verbose output" print print "Usage examples:" print @@ -40,7 +53,8 @@ def usage(): def version(): print "Catalyst, version "+__version__ print "Copyright 2003-2008 Gentoo Foundation" - print "Distributed under the GNU General Public License version 2\n" + print "Copyright 2008-2012 various authors" + print "Distributed under the GNU General Public License version 2.1\n" def parse_config(myconfig): # search a couple of different areas for the main config file @@ -52,7 +66,7 @@ def parse_config(myconfig): "portdir":"/usr/portage","options":"",\ "snapshot_cache":"/var/tmp/catalyst/snapshot_cache",\ "hash_function":"crc32"} - + # first, try the one passed (presumably from the cmdline) if myconfig: if os.path.exists(myconfig): @@ -63,12 +77,12 @@ def parse_config(myconfig): print "!!! catalyst: Could not use specified configuration file "+\ myconfig sys.exit(1) - + # next, try the default location elif os.path.exists("/etc/catalyst/catalyst.conf"): print "Using default Catalyst configuration file, /etc/catalyst/catalyst.conf" config_file="/etc/catalyst/catalyst.conf" - + # can't find a config file (we are screwed), so bail out else: print "!!! catalyst: Could not find a suitable configuration file" @@ -76,15 +90,17 @@ def parse_config(myconfig): # now, try and parse the config file "config_file" try: - execfile(config_file, myconf, myconf) - +# execfile(config_file, myconf, myconf) + myconfig = catalyst.config.ConfigParser(config_file) + myconf.update(myconfig.get_values()) + except: print "!!! catalyst: Unable to parse configuration file, "+myconfig sys.exit(1) - + # now, load up the values into conf_values so that we can use them for x in confdefaults.keys(): - if myconf.has_key(x): + if x in myconf: print "Setting",x,"to config file value \""+myconf[x]+"\"" conf_values[x]=myconf[x] else: @@ -96,6 +112,14 @@ def parse_config(myconfig): print "Autoresuming support enabled." conf_values["AUTORESUME"]="1" + if "bindist" in string.split(conf_values["options"]): + print "Binary redistribution enabled" + conf_values["BINDIST"]="1" + else: + print "Bindist is not enabled in catalyst.conf" + print "Binary redistribution of generated stages/isos may be prohibited by law." + print "Please see the use description for bindist on any package you are including." + if "ccache" in string.split(conf_values["options"]): print "Compiler cache support enabled." conf_values["CCACHE"]="1" @@ -124,6 +148,10 @@ def parse_config(myconfig): print "Package cache support enabled." conf_values["PKGCACHE"]="1" + if "preserve_libs" in string.split(conf_values["options"]): + print "Preserving libs during unmerge." + conf_values["PRESERVE_LIBS"]="1" + if "purge" in string.split(conf_values["options"]): print "Purge support enabled." conf_values["PURGE"]="1" @@ -136,23 +164,25 @@ def parse_config(myconfig): print "Snapshot cache support enabled." conf_values["SNAPCACHE"]="1" - if "metadata_overlay" in conf_values["options"].split(): - print "Use of metadata_overlay module for portage enabled." - conf_values["METADATA_OVERLAY"]="1" - # if "tarball" in string.split(conf_values["options"]): # print "Tarball creation enabled." # conf_values["TARBALL"]="1" - if myconf.has_key("digests"): + if "digests" in myconf: conf_values["digests"]=myconf["digests"] - if myconf.has_key("contents"): + if "contents" in myconf: conf_values["contents"]=myconf["contents"] - if myconf.has_key("envscript"): + if "envscript" in myconf: print "Envscript support enabled." conf_values["ENVSCRIPT"]=myconf["envscript"] + if "var_tmpfs_portage" in myconf: + conf_values["var_tmpfs_portage"]=myconf["var_tmpfs_portage"]; + + if "port_logdir" in myconf: + conf_values["port_logdir"]=myconf["port_logdir"]; + def import_modules(): # import catalyst's own modules (i.e. catalyst_support and the arch modules) targetmap={} @@ -163,10 +193,10 @@ def import_modules(): fh=open(conf_values["sharedir"]+"/modules/"+x+".py") module=imp.load_module(x,fh,"modules/"+x+".py",(".py","r",imp.PY_SOURCE)) fh.close() - + except IOError: raise CatalystError,"Can't find "+x+".py plugin in "+\ - conf_values.settings["sharedir"]+"/modules/" + conf_values["sharedir"]+"/modules/" for x in valid_build_targets: try: @@ -174,10 +204,10 @@ def import_modules(): module=imp.load_module(x,fh,"modules/"+x+".py",(".py","r",imp.PY_SOURCE)) module.register(targetmap) fh.close() - + except IOError: raise CatalystError,"Can't find "+x+".py plugin in "+\ - conf_values.settings["sharedir"]+"/modules/" + conf_values["sharedir"]+"/modules/" except ImportError: print "!!! catalyst: Python modules not found in "+\ @@ -186,39 +216,23 @@ def import_modules(): return targetmap -def do_spec(myspecfile): - try: - addlargs=read_spec(myspecfile) - except: - sys.exit(1) - - return addlargs - -def do_cli(cmdline): - try: - return arg_parse(cmdline) - - except CatalystError: - print "!!! catalyst: Could not parse commandline, exiting." - sys.exit(1) - def build_target(addlargs, targetmap): try: - if not targetmap.has_key(addlargs["target"]): + if addlargs["target"] not in targetmap: raise CatalystError,"Target \""+addlargs["target"]+"\" not available." - + mytarget=targetmap[addlargs["target"]](conf_values, addlargs) - + mytarget.run() except: - # TODO: Capture traceback, so we can display this error after printing of the traceback + catalyst.util.print_traceback() print "!!! catalyst: Error encountered during run of target " + addlargs["target"] - raise + sys.exit(1) if __name__ == "__main__": targetmap={} - + version() if os.getuid() != 0: # catalyst cannot be run as a normal user due to chroots, mounts, etc @@ -232,13 +246,13 @@ if __name__ == "__main__": # parse out the command line arguments try: - opts,args = getopt.getopt(sys.argv[1:], "aphvdc:C:f:FVs:", ["purge","help", "version", "debug",\ + opts,args = getopt.getopt(sys.argv[1:], "apPThvdc:C:f:FVs:", ["purge", "purgeonly", "purgetmponly", "help", "version", "debug",\ "clear-autoresume", "config=", "cli=", "file=", "fetch", "verbose","snapshot="]) - + except getopt.GetoptError: usage() sys.exit(2) - + # defaults for commandline opts debug=False verbose=False @@ -253,59 +267,40 @@ if __name__ == "__main__": print "!!! catalyst: please specify one of either -f or -C\n" usage() sys.exit(2) - run=0 + + run = False for o, a in opts: if o in ("-h", "--help"): usage() sys.exit(1) - + if o in ("-V", "--version"): print "Catalyst version "+__version__ sys.exit(1) if o in ("-d", "--debug"): - if len(sys.argv) < 3: - print "!!! catalyst: please specify one of either -f or -C\n" - usage() - sys.exit(2) - else: - conf_values["DEBUG"]="1" - conf_values["VERBOSE"]="1" + conf_values["DEBUG"]="1" + conf_values["VERBOSE"]="1" if o in ("-c", "--config"): - if len(sys.argv) < 3: - print "!!! catalyst: please specify one of either -f or -C\n" - usage() - sys.exit(2) - else: - myconfig=a + myconfig=a if o in ("-C", "--cli"): - run=1 + run = True x=sys.argv.index(o)+1 while x < len(sys.argv): mycmdline.append(sys.argv[x]) x=x+1 - + if o in ("-f", "--file"): - run=1 + run = True myspecfile=a if o in ("-F", "--fetchonly"): - if len(sys.argv) < 3: - print "!!! catalyst: please specify one of either -f or -C\n" - usage() - sys.exit(2) - else: - conf_values["FETCH"]="1" - + conf_values["FETCH"]="1" + if o in ("-v", "--verbose"): - if len(sys.argv) < 3: - print "!!! catalyst: please specify one of either -f or -C\n" - usage() - sys.exit(2) - else: - conf_values["VERBOSE"]="1" + conf_values["VERBOSE"]="1" if o in ("-s", "--snapshot"): if len(sys.argv) < 3: @@ -313,25 +308,23 @@ if __name__ == "__main__": usage() sys.exit(2) else: - run=1 + run = True mycmdline.append("target=snapshot") mycmdline.append("version_stamp="+a) - + if o in ("-p", "--purge"): - if len(sys.argv) < 3: - print "!!! catalyst: please specify one of either -f or -C\n" - usage() - sys.exit(2) - else: - conf_values["PURGE"]="1" + conf_values["PURGE"] = "1" + + if o in ("-P", "--purgeonly"): + conf_values["PURGEONLY"] = "1" + + if o in ("-T", "--purgetmponly"): + conf_values["PURGETMPONLY"] = "1" + if o in ("-a", "--clear-autoresume"): - if len(sys.argv) < 3: - print "!!! catalyst: please specify one of either -f or -C\n" - usage() - sys.exit(2) - else: - conf_values["CLEAR_AUTORESUME"]="1" - if run != 1: + conf_values["CLEAR_AUTORESUME"] = "1" + + if not run: print "!!! catalyst: please specify one of either -f or -C\n" usage() sys.exit(2) @@ -340,11 +333,12 @@ if __name__ == "__main__": parse_config(myconfig) sys.path.append(conf_values["sharedir"]+"/modules") from catalyst_support import * - - # Start checking that digests are valid now that the hash_map was imported from catalyst_support - if conf_values.has_key("digests"): + + # Start checking that digests are valid now that the hash_map was imported + # from catalyst_support + if "digests" in conf_values: for i in conf_values["digests"].split(): - if not hash_map.has_key(i): + if i not in hash_map: print print i+" is not a valid digest entry" print "Valid digest entries:" @@ -360,10 +354,11 @@ if __name__ == "__main__": print print "Catalyst aborting...." sys.exit(2) - if conf_values.has_key("hash_function"): - if not hash_map.has_key(conf_values["hash_function"]): + if "hash_function" in conf_values: + if conf_values["hash_function"] not in hash_map: print - print conf_values["hash_function"]+" is not a valid hash_function entry" + print conf_values["hash_function"]+\ + " is not a valid hash_function entry" print "Valid hash_function entries:" print hash_map.keys() print @@ -382,20 +377,27 @@ if __name__ == "__main__": targetmap=import_modules() addlargs={} - + if myspecfile: - addlargs.update(do_spec(myspecfile)) - + spec = catalyst.config.SpecParser(myspecfile) + addlargs.update(spec.get_values()) + if mycmdline: - addlargs.update(do_cli(mycmdline)) - - if not addlargs.has_key("target"): + try: + cmdline = catalyst.config.ConfigParser() + cmdline.parse_lines(mycmdline) + addlargs.update(cmdline.get_values()) + except CatalystError: + print "!!! catalyst: Could not parse commandline, exiting." + sys.exit(1) + + if "target" not in addlargs: raise CatalystError, "Required value \"target\" not specified." # everything is setup, so the build is a go try: build_target(addlargs, targetmap) - + except CatalystError: print print "Catalyst aborting...."