import catalyst.util
from catalyst.support import CatalystError, find_binary, LockInUse
from catalyst.defaults import (required_build_targets, valid_build_targets,
- hash_definitions, confdefaults
+ hash_definitions, confdefaults, option_messages
)
from hash_utils import HashMap
for x in list(confdefaults):
if x in myconf:
print "Setting",x,"to config file value \""+myconf[x]+"\""
- conf_values[x]=myconf[x]
+ if x == 'options':
+ conf_values[x] = set(myconf[x].split())
+ else:
+ conf_values[x]=myconf[x]
else:
print "Setting",x,"to default value \""+confdefaults[x]+"\""
conf_values[x]=confdefaults[x]
# add our python base directory to use for loading target arch's
conf_values["PythonDir"] = __selfpath__
- # parse out the rest of the options from the config file
- if "autoresume" in string.split(conf_values["options"]):
- 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"
-
- if "clear-autoresume" in string.split(conf_values["options"]):
- print "Cleaning autoresume flags support enabled."
- conf_values["CLEAR_AUTORESUME"]="1"
-
- if "distcc" in string.split(conf_values["options"]):
- print "Distcc support enabled."
- conf_values["DISTCC"]="1"
-
- if "icecream" in string.split(conf_values["options"]):
- print "Icecream compiler cluster support enabled."
- conf_values["ICECREAM"]="1"
- if "kerncache" in string.split(conf_values["options"]):
- print "Kernel cache support enabled."
- conf_values["KERNCACHE"]="1"
+ # print out any options messages
+ for opt in conf_values['options']:
+ if opt in option_messages:
+ print option_messages[opt]
- if "pkgcache" in string.split(conf_values["options"]):
- print "Package cache support enabled."
- conf_values["PKGCACHE"]="1"
+ for key in ["digests", "envscript", "var_tmpfs_portage", "port_logdir"]:
+ if key in myconf:
+ conf_values[key] = myconf[key]
- 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"
-
- if "seedcache" in string.split(conf_values["options"]):
- print "Seed cache support enabled."
- conf_values["SEEDCACHE"]="1"
-
- if "snapcache" in string.split(conf_values["options"]):
- print "Snapshot cache support enabled."
- conf_values["SNAPCACHE"]="1"
-
- if "digests" in myconf:
- conf_values["digests"]=myconf["digests"]
if "contents" in myconf:
# replace '-' with '_' (for compatibility with existing configs)
conf_values["contents"] = myconf["contents"].replace("-", '_')
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)
usage()
sys.exit(2)
+ # initialize it if it's not already
+ if 'options' not in conf_values:
+ conf_values['options'] = set()
+
run = False
for o, a in opts:
if o in ("-h", "--help"):
sys.exit(1)
if o in ("-d", "--debug"):
- conf_values["DEBUG"]="1"
- conf_values["VERBOSE"]="1"
+ conf_values["DEBUG"] = True
+ conf_values["VERBOSE"] = True
if o in ("-c", "--config"):
myconfig=a
myspecfile=a
if o in ("-F", "--fetchonly"):
- conf_values["FETCH"]="1"
+ conf_values['options'].add("fetch")
if o in ("-v", "--verbose"):
conf_values["VERBOSE"]="1"
mycmdline.append("version_stamp="+a)
if o in ("-p", "--purge"):
- conf_values["PURGE"] = "1"
+ conf_values['options'].add("purge")
if o in ("-P", "--purgeonly"):
- conf_values["PURGEONLY"] = "1"
+ conf_values['options'].add("purgeonly")
if o in ("-T", "--purgetmponly"):
- conf_values["PURGETMPONLY"] = "1"
+ conf_values['options'].add("purgetmponly")
if o in ("-a", "--clear-autoresume"):
- conf_values["CLEAR_AUTORESUME"] = "1"
+ conf_values['options'].add("clear-autoresume")
if not run:
print "!!! catalyst: please specify one of either -f or -C\n"
file_locate(self.settings,["portage_confdir"],expand=0)
""" Setup our mount points """
- if "SNAPCACHE" in self.settings:
- self.mounts=["/proc","/dev","/usr/portage","/usr/portage/distfiles","/var/tmp/portage"]
- self.mountmap={"/proc":"/proc","/dev":"/dev","/dev/pts":"/dev/pts",\
- "/usr/portage":self.settings["snapshot_cache_path"]+"/portage",\
- "/usr/portage/distfiles":self.settings["distdir"],"/var/tmp/portage":"tmpfs"}
+ if "snapcache" in self.settings["options"]:
+ self.mounts=["proc", "dev", 'portdir', 'distdir', 'port_tmpdir']
+ self.mountmap={"proc":"proc", "dev":"/dev", "pts":"/dev/pts",
+ "portdir":self.settings["snapshot_cache_path"]+"/" + self.settings["repo_name"],
+ "distdir":self.settings["distdir"],"port_tmpdir":"tmpfs"}
else:
self.mounts = ["proc", "dev", "distdir", "port_tmpdir"]
self.mountmap = {"proc":"/proc", "dev":"/dev", "devpts":"/dev/pts",
Configure any user specified options (either in catalyst.conf or on
the command line).
"""
- if "PKGCACHE" in self.settings:
+ if "pkgcache" in self.settings["options"]:
self.set_pkgcache_path()
print "Location of the package cache is "+\
self.settings["pkgcache_path"]
self.mounts.append("packagedir")
self.mountmap["packagedir"] = self.settings["pkgcache_path"]
- if "KERNCACHE" in self.settings:
+ if "kerncache" in self.settings["options"]:
self.set_kerncache_path()
print "Location of the kerncache is "+\
self.settings["kerncache_path"]
self.mounts.append("kerncache")
self.mountmap["kerncache"] = self.settings["kerncache_path"]
- if "CCACHE" in self.settings:
+ if "ccache" in self.settings["options"]:
if "CCACHE_DIR" in os.environ:
ccdir=os.environ["CCACHE_DIR"]
del os.environ["CCACHE_DIR"]
""" for the chroot: """
self.env["CCACHE_DIR"]="/var/tmp/ccache"
- if "ICECREAM" in self.settings:
- self.mounts.append("/var/cache/icecream")
- self.mountmap["/var/cache/icecream"]="/var/cache/icecream"
+ if "icecream" in self.settings["options"]:
+ self.mounts.append("icecream")
+ self.mountmap["icecream"]="/var/cache/icecream"
self.env["PATH"]="/usr/lib/icecc/bin:"+self.env["PATH"]
if "port_logdir" in self.settings:
def set_target_path(self):
self.settings["target_path"]=normpath(self.settings["storedir"]+\
"/builds/"+self.settings["target_subpath"]+".tar.bz2")
- if "AUTORESUME" in self.settings\
+ if "autoresume" in self.settings["options"]\
and os.path.exists(self.settings["autoresume_path"]+\
"setup_target_path"):
print \
del self.settings[self.settings["spec_prefix"]+"/fsops"]
def set_source_path(self):
- if "SEEDCACHE" in self.settings\
+ if "seedcache" in self.settings["options"]\
and os.path.isdir(normpath(self.settings["storedir"]+"/tmp/"+\
self.settings["source_subpath"]+"/")):
self.settings["source_path"]=normpath(self.settings["storedir"]+\
hash_function=self.settings["hash_function"],verbose=False)
def set_snapcache_path(self):
- if "SNAPCACHE" in self.settings:
+ if "snapcache" in self.settings["options"]:
self.settings["snapshot_cache_path"]=\
normpath(self.settings["snapshot_cache"]+"/"+\
self.settings["snapshot"]+"/")
"/tmp/"+self.settings["rel_type"]+"/"+".autoresume-"+\
self.settings["target"]+"-"+self.settings["subarch"]+"-"+\
self.settings["version_stamp"]+"/")
- if "AUTORESUME" in self.settings:
+ if "autoresume" in self.settings["options"]:
print "The autoresume path is " + self.settings["autoresume_path"]
if not os.path.exists(self.settings["autoresume_path"]):
os.makedirs(self.settings["autoresume_path"],0755)
"base_dirs","bind","chroot_setup","setup_environment",\
"run_local","preclean","unbind","clean"]
# if "TARBALL" in self.settings or \
-# "FETCH" not in self.settings:
- if "FETCH" not in self.settings:
+# "fetch" not in self.settings["options"]:
+ if "fetch" not in self.settings["options"]:
self.settings["action_sequence"].append("capture")
self.settings["action_sequence"].append("clear_autoresume")
clst_unpack_hash=read_from_clst(self.settings["autoresume_path"]+\
"unpack")
- if "SEEDCACHE" in self.settings:
+ if "seedcache" in self.settings["options"]:
if os.path.isdir(self.settings["source_path"]):
""" SEEDCACHE Is a directory, use rsync """
unpack_cmd="rsync -a --delete "+self.settings["source_path"]+\
error_msg="Tarball extraction of "+self.settings["source_path"]+\
" to "+self.settings["chroot_path"]+" failed."
- if "AUTORESUME" in self.settings:
+ if "autoresume" in self.settings["options"]:
if os.path.isdir(self.settings["source_path"]) \
and os.path.exists(self.settings["autoresume_path"]+"unpack"):
""" Autoresume is valid, SEEDCACHE is valid """
invalid_snapshot=True
else:
""" No autoresume, SEEDCACHE """
- if "SEEDCACHE" in self.settings:
+ if "seedcache" in self.settings["options"]:
""" SEEDCACHE so let's run rsync and let it clean up """
if os.path.isdir(self.settings["source_path"]):
unpack=True
self.mount_safety_check()
if invalid_snapshot:
- if "AUTORESUME" in self.settings:
+ if "autoresume" in self.settings["options"]:
print "No Valid Resume point detected, cleaning up..."
self.clear_autoresume()
if not os.path.exists(self.settings["chroot_path"]+"/tmp"):
os.makedirs(self.settings["chroot_path"]+"/tmp",1777)
- if "PKGCACHE" in self.settings:
+ if "pkgcache" in self.settings["options"]:
if not os.path.exists(self.settings["pkgcache_path"]):
os.makedirs(self.settings["pkgcache_path"],0755)
- if "KERNCACHE" in self.settings:
+ if "kerncache" in self.settings["options"]:
if not os.path.exists(self.settings["kerncache_path"]):
os.makedirs(self.settings["kerncache_path"],0755)
snapshot_hash=read_from_clst(self.settings["autoresume_path"]+\
"unpack_portage")
- if "SNAPCACHE" in self.settings:
+ if "snapcache" in self.settings["options"]:
snapshot_cache_hash=\
read_from_clst(self.settings["snapshot_cache_path"]+\
"catalyst-hash")
self.settings["chroot_path"]+"/usr"
unpack_errmsg="Error unpacking snapshot"
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["chroot_path"]+\
self.settings["portdir"]) \
and os.path.exists(self.settings["autoresume_path"]\
unpack=False
if unpack:
- if "SNAPCACHE" in self.settings:
+ if "snapcache" in self.settings["options"]:
self.snapshot_lock_object.write_lock()
if os.path.exists(destdir):
print cleanup_msg
print "Unpacking portage tree (This can take a long time) ..."
cmd(unpack_cmd,unpack_errmsg,env=self.env)
- if "SNAPCACHE" in self.settings:
+ if "snapcache" in self.settings["options"]:
myf=open(self.settings["snapshot_cache_path"]+"catalyst-hash","w")
myf.write(self.settings["snapshot_path_hash"])
myf.close()
myf.write(self.settings["snapshot_path_hash"])
myf.close()
- if "SNAPCACHE" in self.settings:
+ if "snapcache" in self.settings["options"]:
self.snapshot_lock_object.unlock()
def config_profile_link(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+\
"config_profile_link"):
print \
touch(self.settings["autoresume_path"]+"config_profile_link")
def setup_confdir(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+\
"setup_confdir"):
print "Resume point detected, skipping setup_confdir operation..."
os.makedirs(self.mountmap[x],0755)
src=self.mountmap[x]
- if "SNAPCACHE" in self.settings and x == "/usr/portage":
+ if "snapcache" in self.settings["options"] and x == "portdir":
self.snapshot_lock_object.read_lock()
if os.uname()[0] == "FreeBSD":
if src == "/dev":
ouch=1
warn("Couldn't umount bind mount: " + mypath + self.mountmap[x])
- if "SNAPCACHE" in self.settings and x == "/usr/portage":
+ if "snapcache" in self.settings["options"] and x == "portdir":
try:
"""
It's possible the snapshot lock object isn't created yet.
self.override_cflags()
self.override_cxxflags()
self.override_ldflags()
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"chroot_setup"):
print "Resume point detected, skipping chroot_setup operation..."
else:
"Could not copy resolv.conf into place.",env=self.env)
""" Copy over the envscript, if applicable """
- if "ENVSCRIPT" in self.settings:
- if not os.path.exists(self.settings["ENVSCRIPT"]):
+ if "envscript" in self.settings:
+ if not os.path.exists(self.settings["envscript"]):
raise CatalystError,\
- "Can't find envscript "+self.settings["ENVSCRIPT"]
+ "Can't find envscript "+self.settings["envscript"]
print "\nWarning!!!!"
print "\tOverriding certain env variables may cause catastrophic failure."
print "\tCatalyst Maintainers use VERY minimal envscripts if used at all"
print "\tYou have been warned\n"
- cmd("cp "+self.settings["ENVSCRIPT"]+" "+\
+ cmd("cp "+self.settings["envscript"]+" "+\
self.settings["chroot_path"]+"/tmp/envscript",\
"Could not copy envscript into place.",env=self.env)
touch(self.settings["autoresume_path"]+"chroot_setup")
def fsscript(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"fsscript"):
print "Resume point detected, skipping fsscript operation..."
else:
touch(self.settings["autoresume_path"]+"fsscript")
def rcupdate(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"rcupdate"):
print "Resume point detected, skipping rcupdate operation..."
else:
touch(self.settings["autoresume_path"]+"rcupdate")
def clean(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"clean"):
print "Resume point detected, skipping clean operation..."
else:
touch(self.settings["autoresume_path"]+"clean")
def empty(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"empty"):
print "Resume point detected, skipping empty operation..."
else:
touch(self.settings["autoresume_path"]+"empty")
def remove(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"remove"):
print "Resume point detected, skipping remove operation..."
else:
raise
def preclean(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"preclean"):
print "Resume point detected, skipping preclean operation..."
else:
raise CatalystError, "Build failed, could not execute preclean"
def capture(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"capture"):
print "Resume point detected, skipping capture operation..."
else:
touch(self.settings["autoresume_path"]+"capture")
def run_local(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"run_local"):
print "Resume point detected, skipping run_local operation..."
else:
""" Check for mounts right away and abort if we cannot unmount them """
self.mount_safety_check()
- if "CLEAR_AUTORESUME" in self.settings:
+ if "clear-autoresume" in self.settings["options"]:
self.clear_autoresume()
- if "PURGETMPONLY" in self.settings:
+ if "purgetmponly" in self.settings["options"]:
self.purge()
return
self.purge()
return
- if "PURGE" in self.settings:
+ if "purge" in self.settings["options"]:
self.purge()
for x in self.settings["action_sequence"]:
self.chroot_lock.unlock()
def unmerge(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"unmerge"):
print "Resume point detected, skipping unmerge operation..."
else:
touch(self.settings["autoresume_path"]+"unmerge")
def target_setup(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"target_setup"):
print "Resume point detected, skipping target_setup operation..."
else:
touch(self.settings["autoresume_path"]+"target_setup")
def setup_overlay(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"setup_overlay"):
print "Resume point detected, skipping setup_overlay operation..."
else:
touch(self.settings["autoresume_path"]+"setup_overlay")
def create_iso(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"create_iso"):
print "Resume point detected, skipping create_iso operation..."
else:
print "An ISO Image will not be created."
def build_packages(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+\
"build_packages"):
print "Resume point detected, skipping build_packages operation..."
else:
if self.settings["spec_prefix"]+"/packages" in self.settings:
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+\
"build_packages"):
print "Resume point detected, skipping build_packages operation..."
"build aborting due to error."
def build_kernel(self):
- "Build all configured kernels"
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"build_kernel"):
print "Resume point detected, skipping build_kernel operation..."
else:
def _build_kernel(self, kname):
"Build a single configured kernel by name"
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]\
+"build_kernel_"+kname):
print "Resume point detected, skipping build_kernel for "+kname+" operation..."
"/initramfs_overlay"],env=self.env)
def bootloader(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+"bootloader"):
print "Resume point detected, skipping bootloader operation..."
else:
raise CatalystError,"Script aborting due to error."
def livecd_update(self):
- if "AUTORESUME" in self.settings \
+ if "autoresume" in self.settings["options"] \
and os.path.exists(self.settings["autoresume_path"]+\
"livecd_update"):
print "Resume point detected, skipping build_packages operation..."
os.chmod(myemp,mystat[ST_MODE])
def clear_packages(self):
- if "PKGCACHE" in self.settings:
+ if "pkgcache" in self.settings["options"]:
print "purging the pkgcache ..."
myemp=self.settings["pkgcache_path"]
os.chmod(myemp,mystat[ST_MODE])
def clear_kerncache(self):
- if "KERNCACHE" in self.settings:
+ if "kerncache" in self.settings["options"]:
print "purging the kerncache ..."
myemp=self.settings["kerncache_path"]
def clear_autoresume(self):
""" Clean resume points since they are no longer needed """
- if "AUTORESUME" in self.settings:
+ if "autoresume" in self.settings["options"]:
print "Removing AutoResume Points: ..."
myemp=self.settings["autoresume_path"]
if os.path.isdir(myemp):
- if "AUTORESUME" in self.settings:
+ if "autoresume" in self.settings["options"]:
print "Emptying directory",myemp
"""
stat the dir, delete the dir, recreate the dir and set
def purge(self):
countdown(10,"Purging Caches ...")
- if any(k in self.settings for k in ("PURGE","PURGEONLY","PURGETMPONLY")):
+ if any(k in self.settings["options"] for k in ("purge","purgeonly","purgetmponly")):
print "clearing autoresume ..."
self.clear_autoresume()