From 9eb9b74f996b376cc50f738c95258f92c8ae5ff4 Mon Sep 17 00:00:00 2001 From: Chris Gianelloni Date: Fri, 17 Dec 2004 21:18:06 +0000 Subject: [PATCH] Reversing patch from Eric Edgar from bug #70663. git-svn-id: svn+ssh://svn.gentoo.org/var/svnroot/catalyst/trunk@501 d1e1f19c-881f-0410-ab34-b69fee027534 --- ChangeLog | 9 +- catalyst | 4 +- modules/catalyst_support.py | 5 +- modules/embedded_target.py | 11 +-- modules/generic_stage_target.py | 162 ++++++++++++++++++-------------- modules/grp_target.py | 19 +--- modules/livecd_stage1_target.py | 9 +- modules/livecd_stage2_target.py | 33 +------ modules/netboot.py | 9 +- modules/stage1_target.py | 6 +- modules/tinderbox_target.py | 8 +- 11 files changed, 115 insertions(+), 160 deletions(-) diff --git a/ChangeLog b/ChangeLog index ca968f17..6c926ddd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,13 @@ # 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 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 livecd/runscript/x86-archscript.sh: diff --git a/catalyst b/catalyst index 3536cf0a..7f117aec 100755 --- a/catalyst +++ b/catalyst @@ -1,7 +1,7 @@ #!/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 @@ -287,5 +287,5 @@ if __name__ == "__main__": try: build_target(addlargs, targetmap) except: - raise CatalystError,"could not complete build" + print "!!! catalyst: could not complete build" sys.exit(2) diff --git a/modules/catalyst_support.py b/modules/catalyst_support.py index 83de6ec6..10dd2e63 100644 --- a/modules/catalyst_support.py +++ b/modules/catalyst_support.py @@ -1,6 +1,6 @@ # 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 @@ -43,9 +43,6 @@ class CatalystError(Exception): if message: print print "!!! catalyst: "+message - - #Uncomment the line below if you need more detailed debugging messages - #raise def die(msg=None): warn(msg) diff --git a/modules/embedded_target.py b/modules/embedded_target.py index 8e189532..bba50fba 100644 --- a/modules/embedded_target.py +++ b/modules/embedded_target.py @@ -1,6 +1,6 @@ # 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 @@ -74,15 +74,6 @@ class embedded_target(generic_stage_target): 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 diff --git a/modules/generic_stage_target.py b/modules/generic_stage_target.py index 50aad78a..d5810180 100644 --- a/modules/generic_stage_target.py +++ b/modules/generic_stage_target.py @@ -1,6 +1,6 @@ # 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 @@ -98,16 +98,31 @@ class generic_stage_target(generic_target): 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) @@ -119,11 +134,14 @@ class generic_stage_target(generic_target): 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"] @@ -140,39 +158,7 @@ class generic_stage_target(generic_target): 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"] @@ -207,7 +193,7 @@ class generic_stage_target(generic_target): 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"]) @@ -309,22 +295,36 @@ class generic_stage_target(generic_target): 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"] @@ -371,8 +371,17 @@ class generic_stage_target(generic_target): 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: @@ -382,8 +391,17 @@ class generic_stage_target(generic_target): 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(): @@ -395,16 +413,24 @@ class generic_stage_target(generic_target): 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() diff --git a/modules/grp_target.py b/modules/grp_target.py index 3c8619d2..df4d52f1 100644 --- a/modules/grp_target.py +++ b/modules/grp_target.py @@ -1,6 +1,6 @@ # 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. @@ -28,10 +28,7 @@ class grp_target(generic_stage_target): 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" @@ -45,18 +42,6 @@ class grp_target(generic_stage_target): 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 diff --git a/modules/livecd_stage1_target.py b/modules/livecd_stage1_target.py index b3655e8a..4a142452 100644 --- a/modules/livecd_stage1_target.py +++ b/modules/livecd_stage1_target.py @@ -1,6 +1,6 @@ # 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. @@ -24,13 +24,6 @@ class livecd_stage1_target(generic_stage_target): 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}) diff --git a/modules/livecd_stage2_target.py b/modules/livecd_stage2_target.py index fc843fed..8937ff6b 100644 --- a/modules/livecd_stage2_target.py +++ b/modules/livecd_stage2_target.py @@ -1,6 +1,6 @@ # 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. @@ -43,7 +43,6 @@ class livecd_stage2_target(generic_stage_target): "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) @@ -86,31 +85,7 @@ class livecd_stage2_target(generic_stage_target): 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"): @@ -325,10 +300,6 @@ class livecd_stage2_target(generic_stage_target): 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}) diff --git a/modules/netboot.py b/modules/netboot.py index cbcb1975..022dfdd4 100644 --- a/modules/netboot.py +++ b/modules/netboot.py @@ -1,6 +1,6 @@ # 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. @@ -53,9 +53,6 @@ class netboot_target(generic_stage_target): 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: @@ -142,10 +139,6 @@ class netboot_target(generic_stage_target): 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 diff --git a/modules/stage1_target.py b/modules/stage1_target.py index b20c7d35..fddd56d4 100644 --- a/modules/stage1_target.py +++ b/modules/stage1_target.py @@ -1,6 +1,6 @@ # 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. @@ -14,10 +14,6 @@ class stage1_target(generic_stage_target): 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}) diff --git a/modules/tinderbox_target.py b/modules/tinderbox_target.py index 7f853181..711af0c0 100644 --- a/modules/tinderbox_target.py +++ b/modules/tinderbox_target.py @@ -1,6 +1,6 @@ # 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 @@ -26,11 +26,7 @@ class tinderbox_target(generic_stage_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 -- 2.26.2