# ChangeLog for gentoo/src/catalyst
# Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/ChangeLog,v 1.126 2004/12/16 20:01:38 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/ChangeLog,v 1.127 2004/12/16 23:13:24 wolf31o2 Exp $
+
+ 16 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:
+ Added patches from Eric Edgar <e_edgar@hotmail.com> from bug #70663 to
+ separate out specific target logic from the generic targets modules.
16 Dec 2004; Chris Gianelloni <wolf31o2@gentoo.org>
modules/embedded_target.py, targets/embedded/embedded-fs-runscript.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.53 2004/11/07 13:51:55 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/catalyst,v 1.54 2004/12/16 23:13:24 wolf31o2 Exp $
# Maintained in full by John Davis <zhen@gentoo.org>
try:
build_target(addlargs, targetmap)
except:
- print "!!! catalyst: could not complete build"
+ raise CatalystError,"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.30 2004/10/21 17:06:21 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/catalyst_support.py,v 1.31 2004/12/16 23:13:24 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.4 2004/12/16 20:01:38 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/embedded_target.py,v 1.5 2004/12/16 23:13:24 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.17 2004/11/23 00:02:57 zhen Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/generic_stage_target.py,v 1.18 2004/12/16 23:13:24 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.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"]
-
+ 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()
+
# 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"]}
-
- if self.settings["target"]=="grp":
- self.mounts.append("/tmp/grp")
- self.mountmap["/tmp/grp"]=self.settings["target_path"]
+ self.set_mounts()
# configure any user specified options (either in catalyst.conf or on the cmdline)
if self.settings.has_key("PKGCACHE"):
- self.settings["pkgcache_path"]=st+"/packages/"+self.settings["target_subpath"]
+ self.settings["pkgcache_path"]=self.settings["storedir"]+"/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 not self.settings["target"] == "livecd-stage2":
+ if os.path.exists(self.settings["chroot_path"]):
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["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"])
+
+ if self.settings.has_key("use"):
+ myusevars.extend(self.settings["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..."
- 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")
+ cmd("tar cjf "+self.settings["target_path"]+" -C "+self.settings["stage_path"]+\
+ " .","Couldn't create stage tarball")
def run_local(self):
try:
except CatalystError:
self.unbind()
raise CatalystError,"Stage build aborting due to error."
-
- def run(self):
- self.dir_setup()
- self.unpack_and_bind()
- try:
- self.chroot_setup()
-
- except:
- self.unbind()
- raise
-
+
+ def setup_environment(self):
# 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])
-
- self.run_local()
- if self.settings["target"] in ["stage1","stage2","stage3","livecd-stage1","livecd-stage2"]:
- self.preclean()
-
- 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()
+
+ def run(self):
- if self.settings["target"] in ["livecd-stage2"]:
- self.cdroot_setup()
+ 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))
# 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.3 2004/10/15 02:27:58 zhen Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/grp_target.py,v 1.4 2004/12/16 23:13:24 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.3 2004/10/15 02:27:58 zhen Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/livecd_stage1_target.py,v 1.4 2004/12/16 23:13:24 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.24 2004/12/16 17:51:23 wolf31o2 Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/livecd_stage2_target.py,v 1.25 2004/12/16 23:13:24 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.6 2004/10/15 02:27:58 zhen Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/Attic/netboot.py,v 1.7 2004/12/16 23:13:24 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.3 2004/10/15 02:27:58 zhen Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/stage1_target.py,v 1.4 2004/12/16 23:13:24 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.3 2004/10/15 02:27:58 zhen Exp $
+# $Header: /var/cvsroot/gentoo/src/catalyst/modules/tinderbox_target.py,v 1.4 2004/12/16 23:13:24 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