# ChangeLog for gentoo/src/catalyst
# Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/ChangeLog,v 1.128 2004/12/17 21:06:36 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/ChangeLog,v 1.129 2004/12/17 21:18:06 wolf31o2 Exp $
+
+ 17 Dec 2004; Chris Gianelloni <wolf31o2@gentoo.org> catalyst,
+ modules/catalyst_support.py, modules/embedded_target.py,
+ modules/generic_stage_target.py, modules/grp_target.py,
+ modules/livecd_stage1_target.py, modules/livecd_stage2_target.py,
+ modules/netboot.py, modules/stage1_target.py, modules/tinderbox_target.py:
+ Reversing patch from Eric Edgar from bug #70663.
17 Dec 2004; Chris Gianelloni <wolf31o2@gentoo.org>
livecd/runscript/x86-archscript.sh:
#!/usr/bin/python
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/catalyst,v 1.54 2004/12/16 23:13:24 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/catalyst,v 1.55 2004/12/17 21:18:06 wolf31o2 Exp $
# Maintained in full by John Davis <zhen@gentoo.org>
try:
build_target(addlargs, targetmap)
except:
- raise CatalystError,"could not complete build"
+ print "!!! catalyst: could not complete build"
sys.exit(2)
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/modules/catalyst_support.py,v 1.31 2004/12/16 23:13:24 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/catalyst_support.py,v 1.32 2004/12/17 21:18:06 wolf31o2 Exp $
import sys,string,os,types,re
if message:
print
print "!!! catalyst: "+message
-
- #Uncomment the line below if you need more detailed debugging messages
- #raise
def die(msg=None):
warn(msg)
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/modules/embedded_target.py,v 1.5 2004/12/16 23:13:24 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/embedded_target.py,v 1.6 2004/12/17 21:18:06 wolf31o2 Exp $
"""
This class works like a 'stage3'. A stage2 tarball is unpacked, but instead
self.clean()
self.build_fs()
- def set_action_sequence(self):
- self.settings["action_sequence"]=["dir_setup","unpack_and_bind","chroot_setup",\
- "setup_environment","run_local","unbind","capture"]
-
- def set_use(self):
- self.settings["use"]=self.settings["embedded/use"]
- def set_stage_path(self):
- self.settings["stage_path"]=self.settings["chroot_path"]+"/tmp/mergeroot"
- print "embedded stage path is "self.settings["stage_path"]
def register(foo):
foo.update({"embedded":embedded_target})
return foo
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/modules/generic_stage_target.py,v 1.18 2004/12/16 23:13:24 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/generic_stage_target.py,v 1.19 2004/12/17 21:18:06 wolf31o2 Exp $
"""
This class does all of the chroot setup, copying of files, etc. It is
self.settings[envvar] = os.environ[envvar]
# define all of our core variables
- self.set_target_profile()
- self.set_target_subpath()
- self.set_snapshot_path()
- self.set_target_path()
- self.set_source_path()
- self.set_chroot_path()
- self.set_action_sequence()
- self.set_use()
- self.set_stage_path()
-
+ self.settings["target_profile"]=self.settings["profile"]
+ self.settings["target_subpath"]=self.settings["rel_type"]+"/"+self.settings["target"]+\
+ "-"+self.settings["subarch"]+"-"+self.settings["version_stamp"]
+
+ st=self.settings["storedir"]
+ self.settings["snapshot_path"]=st+"/snapshots/portage-"+self.settings["snapshot"]+".tar.bz2"
+ if self.settings["target"] in ["grp","tinderbox"]:
+ # grp creates a directory of packages and sources rather than a compressed tarball
+ self.settings["target_path"]=st+"/builds/"+self.settings["target_subpath"]
+ self.settings["source_path"]=st+"/builds/"+self.settings["source_subpath"]+".tar.bz2"
+
+ elif self.settings["target"] == "livecd-stage2":
+ self.settings["source_path"]=st+"/tmp/"+self.settings["source_subpath"]
+ self.settings["cdroot_path"]=st+"/builds/"+self.settings["target_subpath"]
+
+ elif self.settings["target"] == "netboot":
+ self.settings["target_path"]=st+"/builds/"+self.settings["target_subpath"]
+ self.settings["source_path"]=st+"/builds/"+self.settings["source_subpath"]+".tar.bz2"
+
+ else:
+ self.settings["target_path"]=st+"/builds/"+self.settings["target_subpath"]+".tar.bz2"
+ self.settings["source_path"]=st+"/builds/"+self.settings["source_subpath"]+".tar.bz2"
+
+ self.settings["chroot_path"]=st+"/tmp/"+self.settings["target_subpath"]
+
# this next line checks to make sure that the specified variables exist on disk.
file_locate(self.settings,["source_path","snapshot_path","distdir"],expand=0)
self.mounts=[ "/proc","/dev","/dev/pts","/usr/portage/distfiles" ]
self.mountmap={"/proc":"/proc", "/dev":"/dev", "/dev/pts":"/dev/pts",\
"/usr/portage/distfiles":self.settings["distdir"]}
- self.set_mounts()
+
+ if self.settings["target"]=="grp":
+ self.mounts.append("/tmp/grp")
+ self.mountmap["/tmp/grp"]=self.settings["target_path"]
# configure any user specified options (either in catalyst.conf or on the cmdline)
if self.settings.has_key("PKGCACHE"):
- self.settings["pkgcache_path"]=self.settings["storedir"]+"/packages/"+self.settings["target_subpath"]
+ self.settings["pkgcache_path"]=st+"/packages/"+self.settings["target_subpath"]
self.mounts.append("/usr/portage/packages")
self.mountmap["/usr/portage/packages"]=self.settings["pkgcache_path"]
self.mountmap["/var/tmp/ccache"]=ccdir
# for the chroot:
os.environ["CCACHE_DIR"]="/var/tmp/ccache"
-
- def set_target_profile(self):
- self.settings["target_profile"]=self.settings["profile"]
-
- def set_target_subpath(self):
- self.settings["target_subpath"]=self.settings["rel_type"]+"/"+self.settings["target"]+\
- "-"+self.settings["subarch"]+"-"+self.settings["version_stamp"]
-
- def set_target_path(self):
- self.settings["target_path"]=self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+".tar.bz2"
-
- def set_source_path(self):
- self.settings["source_path"]=self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2"
-
- def set_snapshot_path(self):
- self.settings["snapshot_path"]=self.settings["storedir"]+"/snapshots/portage-"+self.settings["snapshot"]+".tar.bz2"
-
- def set_chroot_path(self):
- self.settings["chroot_path"]=self.settings["storedir"]+"/tmp/"+self.settings["target_subpath"]
-
- def set_action_sequence(self):
- #Default action sequence for run method
- self.settings["action_sequence"]=["dir_setup","unpack_and_bind","chroot_setup",\
- "setup_environment","run_local","preclean","unbind","clean","capture"]
-
- def set_use(self):
- pass
-
- def set_stage_path(self):
- self.settings["stage_path"]=self.settings["chroot_path"]
- def set_mounts(self):
- pass
-
+
def mount_safety_check(self):
mypath=self.settings["chroot_path"]
print "Setting up directories..."
self.mount_safety_check()
- if os.path.exists(self.settings["chroot_path"]):
+ if not self.settings["target"] == "livecd-stage2":
cmd("rm -rf "+self.settings["chroot_path"],\
"Could not remove existing directory: "+self.settings["chroot_path"])
myf.write("# Please consult /etc/make.conf.example for a more detailed example\n")
myf.write('CFLAGS="'+self.settings["CFLAGS"]+'"\n')
myf.write('CHOST="'+self.settings["CHOST"]+'"\n')
+
# figure out what our USE vars are for building
myusevars=[]
if self.settings.has_key("HOSTUSE"):
myusevars.extend(self.settings["HOSTUSE"])
-
- if self.settings.has_key("use"):
- myusevars.extend(self.settings["use"])
+
+ if self.settings["target"]=="grp":
+ myusevars.append("bindist")
+ myusevars.extend(self.settings["grp/use"])
myf.write('USE="'+string.join(myusevars)+'"\n')
-
+
+ elif self.settings["target"]=="tinderbox":
+ myusevars.extend(self.settings["tinderbox/use"])
+ myf.write('USE="'+string.join(myusevars)+'"\n')
+
+ elif self.settings["target"]=="livecd-stage1":
+ myusevars.extend(self.settings["livecd/use"])
+ myf.write('USE="'+string.join(myusevars)+'"\n')
+
+ elif self.settings["target"]=="embedded":
+ myusevars.extend(self.settings["embedded/use"])
+ myf.write('USE="'+string.join(myusevars)+'"\n')
+
if self.settings.has_key("CXXFLAGS"):
myf.write('CXXFLAGS="'+self.settings["CXXFLAGS"]+'"\n')
else:
myf.write('CXXFLAGS="${CFLAGS}"\n')
myf.close()
-
+
def clean(self):
destpath=self.settings["chroot_path"]
print "Creating stage tarball..."
- cmd("tar cjf "+self.settings["target_path"]+" -C "+self.settings["stage_path"]+\
- " .","Couldn't create stage tarball")
+ if self.settings["target"]=="stage1":
+ cmd("tar cjf "+self.settings["target_path"]+" -C "+self.settings["chroot_path"]+\
+ "/tmp/stage1root .","Couldn't create stage tarball")
+
+ elif self.settings["target"]=="embedded":
+ cmd("tar cjf "+self.settings["target_path"]+" -C "+self.settings["chroot_path"]+\
+ "/tmp/mergeroot .","Couldn't create stage tarball")
+
+ else:
+ cmd("tar cjf "+self.settings["target_path"]+" -C "+self.settings["chroot_path"]+\
+ " .","Couldn't create stage tarball")
def run_local(self):
try:
except CatalystError:
self.unbind()
raise CatalystError,"Stage build aborting due to error."
-
- def setup_environment(self):
+
+ def run(self):
+ self.dir_setup()
+ self.unpack_and_bind()
+ try:
+ self.chroot_setup()
+
+ except:
+ self.unbind()
+ raise
+
# modify the current environment. This is an ugly hack that should be fixed. We need this
# to use the os.system() call since we can't specify our own environ:
for x in self.settings.keys():
os.environ[varname]=self.settings[x]
elif type(self.settings[x])==types.ListType:
os.environ[varname]=string.join(self.settings[x])
-
- def run(self):
+
+ self.run_local()
+ if self.settings["target"] in ["stage1","stage2","stage3","livecd-stage1","livecd-stage2"]:
+ self.preclean()
- for x in self.settings["action_sequence"]:
- print "Running action sequence: "+x
- if x == 'chroot_setup':
- try:
- self.chroot_setup()
- except:
- self.unbind()
- raise
- else:
- apply(getattr(self,x))
+ if self.settings["target"] in ["livecd-stage2"]:
+ self.unmerge()
+
+ # unbind everything here so that we can clean()
+ self.unbind()
+
+ if self.settings["target"] in ["stage1","stage2","stage3","livecd-stage1","livecd-stage2"]:
+ # clean is for removing things after bind-mounts are
+ # unmounted (general file removal and cleanup)
+ self.clean()
+
+ if self.settings["target"] in ["stage1","stage2","stage3","embedded"]:
+ self.capture()
+
+ if self.settings["target"] in ["livecd-stage2"]:
+ self.cdroot_setup()
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/modules/grp_target.py,v 1.4 2004/12/16 23:13:24 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/grp_target.py,v 1.5 2004/12/17 21:18:06 wolf31o2 Exp $
"""
The builder class for GRP (Gentoo Reference Platform) builds.
self.required_values.append("grp/"+x+"/type")
generic_stage_target.__init__(self,spec,addlargs)
-
- def set_target_path(self):
- self.settings["target_path"]=self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]
-
+
def run_local(self):
for pkgset in self.settings["grp"]:
# example call: "grp.sh run pkgset cd1 xmms vim sys-apps/gleep"
self.unbind()
raise CatalystError,"GRP build aborting due to error."
- def set_action_sequence(self):
- self.settings["action_sequence"]=["dir_setup","unpack_and_bind","chroot_setup",\
- "setup_environment","run_local","unbind"]
-
- def set_use(self):
- self.settings["use"]=self.settings["grp/use"]
- self.settings["use"].append("bindlist")
-
- def set_mounts(self):
- self.mounts.append("/tmp/grp")
- self.mountmap["/tmp/grp"]=self.settings["target_path"]
-
def register(foo):
foo.update({"grp":grp_target})
return foo
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/modules/livecd_stage1_target.py,v 1.4 2004/12/16 23:13:24 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/livecd_stage1_target.py,v 1.5 2004/12/17 21:18:06 wolf31o2 Exp $
"""
Builder class for LiveCD stage1.
except CatalystError:
self.unbind()
raise CatalystError,"LiveCD stage1 build aborting due to error."
- def set_action_sequence(self):
- #self.settings["action_sequence"]=["dir_setup","unpack_and_bind","chroot_setup",\
- # "setup_environment","run_local","preclean","unbind","clean"]
- self.settings["action_sequence"]=["chroot_setup"]
-
- def set_use(self):
- self.settings["use"]=self.settings["livecd/use"]
def register(foo):
foo.update({"livecd-stage1":livecd_stage1_target})
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/modules/livecd_stage2_target.py,v 1.25 2004/12/16 23:13:24 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/livecd_stage2_target.py,v 1.26 2004/12/17 21:18:06 wolf31o2 Exp $
"""
Builder class for a LiveCD stage2 build.
"gamecd/conf"])
generic_stage_target.__init__(self,spec,addlargs)
- self.set_cdroot_path()
file_locate(self.settings, ["livecd/cdtar","livecd/archscript","livecd/runscript"])
if self.settings.has_key("portage_confdir"):
file_locate(self.settings,["portage_confdir"],expand=0)
if retval!=0:
self.unbind()
raise CatalystError,"Couldn't bind mount "+src
-
- def set_target_path(self):
- pass
- #self.settings["target_path"]=self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]
-
- def set_source_path(self):
- self.settings["source_path"]=self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]
-
- def set_cdroot_path(self):
- self.settings["cdroot_path"]=self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]
-
- def dir_setup(self):
- print "Setting up directories..."
- self.mount_safety_check()
-
- if not os.path.exists(self.settings["chroot_path"]+"/tmp"):
- os.makedirs(self.settings["chroot_path"]+"/tmp")
-
- if not os.path.exists(self.settings["chroot_path"]):
- os.makedirs(self.settings["chroot_path"])
-
- if self.settings.has_key("PKGCACHE"):
- if not os.path.exists(self.settings["pkgcache_path"]):
- os.makedirs(self.settings["pkgcache_path"])
-
+
def unmerge(self):
if self.settings.has_key("AUTORESUME") \
and os.path.exists(self.settings["chroot_path"]+"/tmp/.clst_unmerge"):
if self.settings.has_key("livecd/root_overlay"):
cmd("rsync -a "+self.settings["livecd/root_overlay"]+"/* "+\
self.settings["chroot_path"], "livecd/root_overlay copy failed.")
- def set_action_sequence(self):
- self.settings["action_sequence"]=["dir_setup","unpack_and_bind","chroot_setup",\
- "setup_environment","run_local","preclean","unmerge",\
- "unbind","clean","cdroot_setup"]
def register(foo):
foo.update({"livecd-stage2":livecd_stage2_target})
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/modules/Attic/netboot.py,v 1.7 2004/12/16 23:13:24 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/Attic/netboot.py,v 1.8 2004/12/17 21:18:06 wolf31o2 Exp $
"""
Builder class for a netboot build.
if not os.environ.has_key(envvar) and not addlargs.has_key(envvar):
self.settings[envvar] = "-Os -pipe"
- def set_target_path(self):
- self.settings["target_path"]=self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]
-
def run_local(self):
# setup our chroot
try:
print "netboot: build finished !"
- def set_action_sequence(self):
- self.settings["action_sequence"]=["dir_setup","unpack_and_bind","chroot_setup",\
- "setup_environment","run_local","unbind"]
-
def register(foo):
foo.update({"netboot":netboot_target})
return foo
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/modules/stage1_target.py,v 1.4 2004/12/16 23:13:24 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/stage1_target.py,v 1.5 2004/12/17 21:18:06 wolf31o2 Exp $
"""
Builder class for a stage1 installation tarball build.
self.required_values=[]
self.valid_values=[]
generic_stage_target.__init__(self,spec,addlargs)
-
- def set_stage_path(self):
- self.settings["stage_path"]=self.settings["chroot_path"]+"/tmp/stage1root"
- print "stage1 stage path is "+self.settings["stage_path"]
def register(foo):
foo.update({"stage1":stage1_target})
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/modules/tinderbox_target.py,v 1.4 2004/12/16 23:13:24 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/tinderbox_target.py,v 1.5 2004/12/17 21:18:06 wolf31o2 Exp $
"""
builder class for the tinderbox target
except CatalystError:
self.unbind()
raise CatalystError,"Tinderbox aborting due to error."
-
- def set_target_path(self):
- self.settings["target_path"]=self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]
- def set_use(self):
- self.settings["use"]=self.settings["tinderbox/use"]
+
def register(foo):
foo.update({"tinderbox":tinderbox_target})
return foo