This is so they are the named the same as the target .sh files
and work with the now simplified module loading.
---
 catalyst/targets/embedded.py             |  47 +++++++++
 catalyst/targets/embedded_target.py      |  47 ---------
 catalyst/targets/grp.py                  | 120 ++++++++++++++++++++++
 catalyst/targets/grp_target.py           | 120 ----------------------
 catalyst/targets/livecd_stage1.py        |  78 ++++++++++++++
 catalyst/targets/livecd_stage1_target.py |  78 --------------
 catalyst/targets/livecd_stage2.py        | 147 +++++++++++++++++++++++++++
 catalyst/targets/livecd_stage2_target.py | 147 ---------------------------
 catalyst/targets/netboot.py              | 129 +++++++++++++++++++++++
 catalyst/targets/netboot2.py             | 169 +++++++++++++++++++++++++++++++
 catalyst/targets/netboot2_target.py      | 169 -------------------------------
 catalyst/targets/netboot_target.py       | 129 -----------------------
 catalyst/targets/stage1.py               |  96 ++++++++++++++++++
 catalyst/targets/stage1_target.py        |  96 ------------------
 catalyst/targets/stage2.py               |  64 ++++++++++++
 catalyst/targets/stage2_target.py        |  64 ------------
 catalyst/targets/stage3.py               |  27 +++++
 catalyst/targets/stage3_target.py        |  27 -----
 catalyst/targets/stage4.py               |  38 +++++++
 catalyst/targets/stage4_target.py        |  38 -------
 catalyst/targets/tinderbox.py            |  47 +++++++++
 catalyst/targets/tinderbox_target.py     |  47 ---------
 22 files changed, 962 insertions(+), 962 deletions(-)
 create mode 100644 catalyst/targets/embedded.py
 delete mode 100644 catalyst/targets/embedded_target.py
 create mode 100644 catalyst/targets/grp.py
 delete mode 100644 catalyst/targets/grp_target.py
 create mode 100644 catalyst/targets/livecd_stage1.py
 delete mode 100644 catalyst/targets/livecd_stage1_target.py
 create mode 100644 catalyst/targets/livecd_stage2.py
 delete mode 100644 catalyst/targets/livecd_stage2_target.py
 create mode 100644 catalyst/targets/netboot.py
 create mode 100644 catalyst/targets/netboot2.py
 delete mode 100644 catalyst/targets/netboot2_target.py
 delete mode 100644 catalyst/targets/netboot_target.py
 create mode 100644 catalyst/targets/stage1.py
 delete mode 100644 catalyst/targets/stage1_target.py
 create mode 100644 catalyst/targets/stage2.py
 delete mode 100644 catalyst/targets/stage2_target.py
 create mode 100644 catalyst/targets/stage3.py
 delete mode 100644 catalyst/targets/stage3_target.py
 create mode 100644 catalyst/targets/stage4.py
 delete mode 100644 catalyst/targets/stage4_target.py
 create mode 100644 catalyst/targets/tinderbox.py
 delete mode 100644 catalyst/targets/tinderbox_target.py

diff --git a/catalyst/targets/embedded.py b/catalyst/targets/embedded.py
new file mode 100644
index 0000000..3309278
--- /dev/null
+++ b/catalyst/targets/embedded.py
@@ -0,0 +1,47 @@
+"""
+Enbedded target, similar to the stage2 target, builds upon a stage2 tarball.
+
+A stage2 tarball is unpacked, but instead
+of building a stage3, it emerges @system into another directory
+inside the stage2 system.  This way, we do not have to emerge GCC/portage
+into the staged system.
+It may sound complicated but basically it runs
+ROOT=/tmp/submerge emerge --something foo bar .
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+
+from catalyst.support import normpath
+
+from catalyst.base.stagebase import StageBase
+
+class embedded(StageBase):
+       """
+       Builder class for embedded target
+       """
+       def __init__(self,spec,addlargs):
+               self.required_values=[]
+               self.valid_values=[]
+               
self.valid_values.extend(["embedded/empty","embedded/rm","embedded/unmerge","embedded/fs-prepare","embedded/fs-finish","embedded/mergeroot","embedded/packages","embedded/fs-type","embedded/runscript","boot/kernel","embedded/linuxrc"])
+               self.valid_values.extend(["embedded/use"])
+               if "embedded/fs-type" in addlargs:
+                       self.valid_values.append("embedded/fs-ops")
+
+               StageBase.__init__(self,spec,addlargs)
+               self.set_build_kernel_vars(addlargs)
+
+       def set_action_sequence(self):
+               
self.settings["action_sequence"]=["dir_setup","unpack","unpack_snapshot",\
+                                       "config_profile_link","setup_confdir",\
+                                       
"portage_overlay","bind","chroot_setup",\
+                                       
"setup_environment","build_kernel","build_packages",\
+                                       
"bootloader","root_overlay","fsscript","unmerge",\
+                                       
"unbind","remove","empty","clean","capture","clear_autoresume"]
+
+       def set_stage_path(self):
+               
self.settings["stage_path"]=normpath(self.settings["chroot_path"]+"/tmp/mergeroot")
+               print "embedded stage path is "+self.settings["stage_path"]
+
+       def set_root_path(self):
+               self.settings["root_path"]=normpath("/tmp/mergeroot")
+               print "embedded root path is "+self.settings["root_path"]
diff --git a/catalyst/targets/embedded_target.py 
b/catalyst/targets/embedded_target.py
deleted file mode 100644
index aee0f00..0000000
--- a/catalyst/targets/embedded_target.py
+++ /dev/null
@@ -1,47 +0,0 @@
-"""
-Enbedded target, similar to the stage2 target, builds upon a stage2 tarball.
-
-A stage2 tarball is unpacked, but instead
-of building a stage3, it emerges @system into another directory
-inside the stage2 system.  This way, we do not have to emerge GCC/portage
-into the staged system.
-It may sound complicated but basically it runs
-ROOT=/tmp/submerge emerge --something foo bar .
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-
-from catalyst.support import normpath
-
-from catalyst.base.stagebase import StageBase
-
-class embedded_target(StageBase):
-       """
-       Builder class for embedded target
-       """
-       def __init__(self,spec,addlargs):
-               self.required_values=[]
-               self.valid_values=[]
-               
self.valid_values.extend(["embedded/empty","embedded/rm","embedded/unmerge","embedded/fs-prepare","embedded/fs-finish","embedded/mergeroot","embedded/packages","embedded/fs-type","embedded/runscript","boot/kernel","embedded/linuxrc"])
-               self.valid_values.extend(["embedded/use"])
-               if "embedded/fs-type" in addlargs:
-                       self.valid_values.append("embedded/fs-ops")
-
-               StageBase.__init__(self,spec,addlargs)
-               self.set_build_kernel_vars(addlargs)
-
-       def set_action_sequence(self):
-               
self.settings["action_sequence"]=["dir_setup","unpack","unpack_snapshot",\
-                                       "config_profile_link","setup_confdir",\
-                                       
"portage_overlay","bind","chroot_setup",\
-                                       
"setup_environment","build_kernel","build_packages",\
-                                       
"bootloader","root_overlay","fsscript","unmerge",\
-                                       
"unbind","remove","empty","clean","capture","clear_autoresume"]
-
-       def set_stage_path(self):
-               
self.settings["stage_path"]=normpath(self.settings["chroot_path"]+"/tmp/mergeroot")
-               print "embedded stage path is "+self.settings["stage_path"]
-
-       def set_root_path(self):
-               self.settings["root_path"]=normpath("/tmp/mergeroot")
-               print "embedded root path is "+self.settings["root_path"]
diff --git a/catalyst/targets/grp.py b/catalyst/targets/grp.py
new file mode 100644
index 0000000..0075714
--- /dev/null
+++ b/catalyst/targets/grp.py
@@ -0,0 +1,120 @@
+"""
+Gentoo Reference Platform (GRP) target
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+import os
+import types
+import glob
+
+
+from catalyst.support import (CatalystError, normpath,
+       touch, cmd, list_bashify)
+
+from catalyst.base.stagebase import StageBase
+
+
+class grp(StageBase):
+       """
+       The builder class for GRP (Gentoo Reference Platform) builds.
+       """
+       def __init__(self,spec,addlargs):
+               self.required_values=["version_stamp","target","subarch",\
+                       "rel_type","profile","snapshot","source_subpath"]
+
+               self.valid_values=self.required_values[:]
+               self.valid_values.extend(["grp/use"])
+               if "grp" not in addlargs:
+                       raise CatalystError,"Required value \"grp\" not 
specified in spec."
+
+               self.required_values.extend(["grp"])
+               if type(addlargs["grp"])==types.StringType:
+                       addlargs["grp"]=[addlargs["grp"]]
+
+               if "grp/use" in addlargs:
+                       if type(addlargs["grp/use"])==types.StringType:
+                               addlargs["grp/use"]=[addlargs["grp/use"]]
+
+               for x in addlargs["grp"]:
+                       self.required_values.append("grp/"+x+"/packages")
+                       self.required_values.append("grp/"+x+"/type")
+
+               StageBase.__init__(self,spec,addlargs)
+
+       def set_target_path(self):
+               
self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
+               if "autoresume" in self.settings["options"] \
+                       and 
os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
+                       print "Resume point detected, skipping target path 
setup operation..."
+               else:
+                       # first clean up any existing target stuff
+                       #if os.path.isdir(self.settings["target_path"]):
+                               #cmd("rm -rf "+self.settings["target_path"],
+                               #"Could not remove existing directory: 
"+self.settings["target_path"],env=self.env)
+                       if not os.path.exists(self.settings["target_path"]):
+                               os.makedirs(self.settings["target_path"])
+
+                       
touch(self.settings["autoresume_path"]+"setup_target_path")
+
+       def run_local(self):
+               for pkgset in self.settings["grp"]:
+                       # example call: "grp.sh run pkgset cd1 xmms vim 
sys-apps/gleep"
+                       
mypackages=list_bashify(self.settings["grp/"+pkgset+"/packages"])
+                       try:
+                               cmd(self.settings["controller_file"]+" run 
"+self.settings["grp/"+pkgset+"/type"]\
+                                       +" "+pkgset+" "+mypackages,env=self.env)
+
+                       except CatalystError:
+                               self.unbind()
+                               raise CatalystError,"GRP build aborting due to 
error."
+
+       def set_use(self):
+               StageBase.set_use(self)
+               if "use" in self.settings:
+                       self.settings["use"].append("bindist")
+               else:
+                       self.settings["use"]=["bindist"]
+
+       def set_mounts(self):
+               self.mounts.append("/tmp/grp")
+               self.mountmap["/tmp/grp"]=self.settings["target_path"]
+
+       def generate_digests(self):
+               for pkgset in self.settings["grp"]:
+                       if self.settings["grp/"+pkgset+"/type"] == "pkgset":
+                               
destdir=normpath(self.settings["target_path"]+"/"+pkgset+"/All")
+                               print "Digesting files in the pkgset....."
+                               digests=glob.glob(destdir+'/*.DIGESTS')
+                               for i in digests:
+                                       if os.path.exists(i):
+                                               os.remove(i)
+
+                               files=os.listdir(destdir)
+                               #ignore files starting with '.' using list 
comprehension
+                               files=[filename for filename in files if 
filename[0] != '.']
+                               for i in files:
+                                       if 
os.path.isfile(normpath(destdir+"/"+i)):
+                                               
self.gen_contents_file(normpath(destdir+"/"+i))
+                                               
self.gen_digest_file(normpath(destdir+"/"+i))
+                       else:
+                               
destdir=normpath(self.settings["target_path"]+"/"+pkgset)
+                               print "Digesting files in the srcset....."
+
+                               digests=glob.glob(destdir+'/*.DIGESTS')
+                               for i in digests:
+                                       if os.path.exists(i):
+                                               os.remove(i)
+
+                               files=os.listdir(destdir)
+                               #ignore files starting with '.' using list 
comprehension
+                               files=[filename for filename in files if 
filename[0] != '.']
+                               for i in files:
+                                       if 
os.path.isfile(normpath(destdir+"/"+i)):
+                                               
#self.gen_contents_file(normpath(destdir+"/"+i))
+                                               
self.gen_digest_file(normpath(destdir+"/"+i))
+
+       def set_action_sequence(self):
+               self.settings["action_sequence"]=["unpack","unpack_snapshot",\
+                                       
"config_profile_link","setup_confdir","portage_overlay","bind","chroot_setup",\
+                                       
"setup_environment","run_local","unbind",\
+                                       "generate_digests","clear_autoresume"]
diff --git a/catalyst/targets/grp_target.py b/catalyst/targets/grp_target.py
deleted file mode 100644
index e3f08a2..0000000
--- a/catalyst/targets/grp_target.py
+++ /dev/null
@@ -1,120 +0,0 @@
-"""
-Gentoo Reference Platform (GRP) target
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-import os
-import types
-import glob
-
-
-from catalyst.support import (CatalystError, normpath,
-       touch, cmd, list_bashify)
-
-from catalyst.base.stagebase import StageBase
-
-
-class grp_target(StageBase):
-       """
-       The builder class for GRP (Gentoo Reference Platform) builds.
-       """
-       def __init__(self,spec,addlargs):
-               self.required_values=["version_stamp","target","subarch",\
-                       "rel_type","profile","snapshot","source_subpath"]
-
-               self.valid_values=self.required_values[:]
-               self.valid_values.extend(["grp/use"])
-               if "grp" not in addlargs:
-                       raise CatalystError,"Required value \"grp\" not 
specified in spec."
-
-               self.required_values.extend(["grp"])
-               if type(addlargs["grp"])==types.StringType:
-                       addlargs["grp"]=[addlargs["grp"]]
-
-               if "grp/use" in addlargs:
-                       if type(addlargs["grp/use"])==types.StringType:
-                               addlargs["grp/use"]=[addlargs["grp/use"]]
-
-               for x in addlargs["grp"]:
-                       self.required_values.append("grp/"+x+"/packages")
-                       self.required_values.append("grp/"+x+"/type")
-
-               StageBase.__init__(self,spec,addlargs)
-
-       def set_target_path(self):
-               
self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
-               if "autoresume" in self.settings["options"] \
-                       and 
os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
-                       print "Resume point detected, skipping target path 
setup operation..."
-               else:
-                       # first clean up any existing target stuff
-                       #if os.path.isdir(self.settings["target_path"]):
-                               #cmd("rm -rf "+self.settings["target_path"],
-                               #"Could not remove existing directory: 
"+self.settings["target_path"],env=self.env)
-                       if not os.path.exists(self.settings["target_path"]):
-                               os.makedirs(self.settings["target_path"])
-
-                       
touch(self.settings["autoresume_path"]+"setup_target_path")
-
-       def run_local(self):
-               for pkgset in self.settings["grp"]:
-                       # example call: "grp.sh run pkgset cd1 xmms vim 
sys-apps/gleep"
-                       
mypackages=list_bashify(self.settings["grp/"+pkgset+"/packages"])
-                       try:
-                               cmd(self.settings["controller_file"]+" run 
"+self.settings["grp/"+pkgset+"/type"]\
-                                       +" "+pkgset+" "+mypackages,env=self.env)
-
-                       except CatalystError:
-                               self.unbind()
-                               raise CatalystError,"GRP build aborting due to 
error."
-
-       def set_use(self):
-               StageBase.set_use(self)
-               if "use" in self.settings:
-                       self.settings["use"].append("bindist")
-               else:
-                       self.settings["use"]=["bindist"]
-
-       def set_mounts(self):
-               self.mounts.append("/tmp/grp")
-               self.mountmap["/tmp/grp"]=self.settings["target_path"]
-
-       def generate_digests(self):
-               for pkgset in self.settings["grp"]:
-                       if self.settings["grp/"+pkgset+"/type"] == "pkgset":
-                               
destdir=normpath(self.settings["target_path"]+"/"+pkgset+"/All")
-                               print "Digesting files in the pkgset....."
-                               digests=glob.glob(destdir+'/*.DIGESTS')
-                               for i in digests:
-                                       if os.path.exists(i):
-                                               os.remove(i)
-
-                               files=os.listdir(destdir)
-                               #ignore files starting with '.' using list 
comprehension
-                               files=[filename for filename in files if 
filename[0] != '.']
-                               for i in files:
-                                       if 
os.path.isfile(normpath(destdir+"/"+i)):
-                                               
self.gen_contents_file(normpath(destdir+"/"+i))
-                                               
self.gen_digest_file(normpath(destdir+"/"+i))
-                       else:
-                               
destdir=normpath(self.settings["target_path"]+"/"+pkgset)
-                               print "Digesting files in the srcset....."
-
-                               digests=glob.glob(destdir+'/*.DIGESTS')
-                               for i in digests:
-                                       if os.path.exists(i):
-                                               os.remove(i)
-
-                               files=os.listdir(destdir)
-                               #ignore files starting with '.' using list 
comprehension
-                               files=[filename for filename in files if 
filename[0] != '.']
-                               for i in files:
-                                       if 
os.path.isfile(normpath(destdir+"/"+i)):
-                                               
#self.gen_contents_file(normpath(destdir+"/"+i))
-                                               
self.gen_digest_file(normpath(destdir+"/"+i))
-
-       def set_action_sequence(self):
-               self.settings["action_sequence"]=["unpack","unpack_snapshot",\
-                                       
"config_profile_link","setup_confdir","portage_overlay","bind","chroot_setup",\
-                                       
"setup_environment","run_local","unbind",\
-                                       "generate_digests","clear_autoresume"]
diff --git a/catalyst/targets/livecd_stage1.py 
b/catalyst/targets/livecd_stage1.py
new file mode 100644
index 0000000..661e06e
--- /dev/null
+++ b/catalyst/targets/livecd_stage1.py
@@ -0,0 +1,78 @@
+"""
+LiveCD stage1 target
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+import os
+import types
+import string
+
+from catalyst.support import (normpath,
+       touch, cmd)
+
+from catalyst.base.stagebase import StageBase
+
+
+class livecd_stage1(StageBase):
+       """
+       Builder class for LiveCD stage1.
+       """
+       def __init__(self,spec,addlargs):
+               self.required_values=["livecd/packages"]
+               self.valid_values=self.required_values[:]
+
+               self.valid_values.extend(["livecd/use"])
+               StageBase.__init__(self,spec,addlargs)
+
+       def set_action_sequence(self):
+               self.settings["action_sequence"]=["unpack","unpack_snapshot",\
+                                       
"config_profile_link","setup_confdir","portage_overlay",\
+                                       
"bind","chroot_setup","setup_environment","build_packages",\
+                                       "unbind", "clean","clear_autoresume"]
+
+       def set_target_path(self):
+               
self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"])
+               if "autoresume" in self.settings["options"] \
+                       and 
os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
+                               print "Resume point detected, skipping target 
path setup operation..."
+               else:
+                       # first clean up any existing target stuff
+                       if os.path.exists(self.settings["target_path"]):
+                               cmd("rm -rf "+self.settings["target_path"],\
+                                       "Could not remove existing directory: 
"+self.settings["target_path"],env=self.env)
+                               
touch(self.settings["autoresume_path"]+"setup_target_path")
+
+                       if not os.path.exists(self.settings["target_path"]):
+                               os.makedirs(self.settings["target_path"])
+
+       def set_target_path(self):
+               pass
+
+       def set_spec_prefix(self):
+                       self.settings["spec_prefix"]="livecd"
+
+       def set_use(self):
+               StageBase.set_use(self)
+               if "use" in self.settings:
+                       self.settings["use"].append("livecd")
+                       if "BINDIST" in self.settings:
+                               self.settings["use"].append("bindist")
+               else:
+                       self.settings["use"]=["livecd"]
+                       if "BINDIST" in self.settings:
+                               self.settings["use"].append("bindist")
+
+       def set_packages(self):
+               StageBase.set_packages(self)
+               if self.settings["spec_prefix"]+"/packages" in self.settings:
+                       if 
type(self.settings[self.settings["spec_prefix"]+"/packages"]) == 
types.StringType:
+                               
self.settings[self.settings["spec_prefix"]+"/packages"] = \
+                                       
self.settings[self.settings["spec_prefix"]+"/packages"].split()
+               
self.settings[self.settings["spec_prefix"]+"/packages"].append("app-misc/livecd-tools")
+
+       def set_pkgcache_path(self):
+               if "pkgcache_path" in self.settings:
+                       if type(self.settings["pkgcache_path"]) != 
types.StringType:
+                               
self.settings["pkgcache_path"]=normpath(string.join(self.settings["pkgcache_path"]))
+               else:
+                       StageBase.set_pkgcache_path(self)
diff --git a/catalyst/targets/livecd_stage1_target.py 
b/catalyst/targets/livecd_stage1_target.py
deleted file mode 100644
index 9c74253..0000000
--- a/catalyst/targets/livecd_stage1_target.py
+++ /dev/null
@@ -1,78 +0,0 @@
-"""
-LiveCD stage1 target
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-import os
-import types
-import string
-
-from catalyst.support import (normpath,
-       touch, cmd)
-
-from catalyst.base.stagebase import StageBase
-
-
-class livecd_stage1_target(StageBase):
-       """
-       Builder class for LiveCD stage1.
-       """
-       def __init__(self,spec,addlargs):
-               self.required_values=["livecd/packages"]
-               self.valid_values=self.required_values[:]
-
-               self.valid_values.extend(["livecd/use"])
-               StageBase.__init__(self,spec,addlargs)
-
-       def set_action_sequence(self):
-               self.settings["action_sequence"]=["unpack","unpack_snapshot",\
-                                       
"config_profile_link","setup_confdir","portage_overlay",\
-                                       
"bind","chroot_setup","setup_environment","build_packages",\
-                                       "unbind", "clean","clear_autoresume"]
-
-       def set_target_path(self):
-               
self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"])
-               if "autoresume" in self.settings["options"] \
-                       and 
os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
-                               print "Resume point detected, skipping target 
path setup operation..."
-               else:
-                       # first clean up any existing target stuff
-                       if os.path.exists(self.settings["target_path"]):
-                               cmd("rm -rf "+self.settings["target_path"],\
-                                       "Could not remove existing directory: 
"+self.settings["target_path"],env=self.env)
-                               
touch(self.settings["autoresume_path"]+"setup_target_path")
-
-                       if not os.path.exists(self.settings["target_path"]):
-                               os.makedirs(self.settings["target_path"])
-
-       def set_target_path(self):
-               pass
-
-       def set_spec_prefix(self):
-                       self.settings["spec_prefix"]="livecd"
-
-       def set_use(self):
-               StageBase.set_use(self)
-               if "use" in self.settings:
-                       self.settings["use"].append("livecd")
-                       if "BINDIST" in self.settings:
-                               self.settings["use"].append("bindist")
-               else:
-                       self.settings["use"]=["livecd"]
-                       if "BINDIST" in self.settings:
-                               self.settings["use"].append("bindist")
-
-       def set_packages(self):
-               StageBase.set_packages(self)
-               if self.settings["spec_prefix"]+"/packages" in self.settings:
-                       if 
type(self.settings[self.settings["spec_prefix"]+"/packages"]) == 
types.StringType:
-                               
self.settings[self.settings["spec_prefix"]+"/packages"] = \
-                                       
self.settings[self.settings["spec_prefix"]+"/packages"].split()
-               
self.settings[self.settings["spec_prefix"]+"/packages"].append("app-misc/livecd-tools")
-
-       def set_pkgcache_path(self):
-               if "pkgcache_path" in self.settings:
-                       if type(self.settings["pkgcache_path"]) != 
types.StringType:
-                               
self.settings["pkgcache_path"]=normpath(string.join(self.settings["pkgcache_path"]))
-               else:
-                       StageBase.set_pkgcache_path(self)
diff --git a/catalyst/targets/livecd_stage2.py 
b/catalyst/targets/livecd_stage2.py
new file mode 100644
index 0000000..20f6014
--- /dev/null
+++ b/catalyst/targets/livecd_stage2.py
@@ -0,0 +1,147 @@
+"""
+LiveCD stage2 target, builds upon previous LiveCD stage1 tarball
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+import os
+
+from catalyst.support import (normpath, file_locate, CatalystError, cmd,
+       read_from_clst, touch)
+from catalyst.base.stagebase import StageBase
+
+
+class livecd_stage2(StageBase):
+       """
+       Builder class for a LiveCD stage2 build.
+       """
+       def __init__(self,spec,addlargs):
+               self.required_values=["boot/kernel"]
+
+               self.valid_values=[]
+
+               self.valid_values.extend(self.required_values)
+               
self.valid_values.extend(["livecd/cdtar","livecd/empty","livecd/rm",\
+                       
"livecd/unmerge","livecd/iso","livecd/gk_mainargs","livecd/type",\
+                       "livecd/readme","livecd/motd","livecd/overlay",\
+                       
"livecd/modblacklist","livecd/splash_theme","livecd/rcadd",\
+                       "livecd/rcdel","livecd/fsscript","livecd/xinitrc",\
+                       "livecd/root_overlay","livecd/users","portage_overlay",\
+                       
"livecd/fstype","livecd/fsops","livecd/linuxrc","livecd/bootargs",\
+                       
"gamecd/conf","livecd/xdm","livecd/xsession","livecd/volid"])
+
+               StageBase.__init__(self,spec,addlargs)
+               if "livecd/type" not in self.settings:
+                       self.settings["livecd/type"] = "generic-livecd"
+
+               file_locate(self.settings, ["cdtar","controller_file"])
+
+       def set_source_path(self):
+               
self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2")
+               if os.path.isfile(self.settings["source_path"]):
+                       self.settings["source_path_hash"] = \
+                               self.settings["hash_map"].generate_hash(
+                                       self.settings["source_path"])
+               else:
+                       
self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/")
+               if not os.path.exists(self.settings["source_path"]):
+                       raise CatalystError,"Source Path: 
"+self.settings["source_path"]+" does not exist."
+
+       def set_spec_prefix(self):
+           self.settings["spec_prefix"]="livecd"
+
+       def set_target_path(self):
+               
self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
+               if "autoresume" in self.settings["options"] \
+                       and 
os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
+                               print "Resume point detected, skipping target 
path setup operation..."
+               else:
+                       # first clean up any existing target stuff
+                       if os.path.isdir(self.settings["target_path"]):
+                               cmd("rm -rf "+self.settings["target_path"],
+                               "Could not remove existing directory: 
"+self.settings["target_path"],env=self.env)
+                               
touch(self.settings["autoresume_path"]+"setup_target_path")
+                       if not os.path.exists(self.settings["target_path"]):
+                               os.makedirs(self.settings["target_path"])
+
+       def run_local(self):
+               # what modules do we want to blacklist?
+               if "livecd/modblacklist" in self.settings:
+                       try:
+                               
myf=open(self.settings["chroot_path"]+"/etc/modprobe.d/blacklist.conf","a")
+                       except:
+                               self.unbind()
+                               raise CatalystError,"Couldn't open 
"+self.settings["chroot_path"]+"/etc/modprobe.d/blacklist.conf."
+
+                       myf.write("\n#Added by Catalyst:")
+                       # workaround until config.py is using configparser
+                       if isinstance(self.settings["livecd/modblacklist"], 
str):
+                               self.settings["livecd/modblacklist"] = 
self.settings["livecd/modblacklist"].split()
+                       for x in self.settings["livecd/modblacklist"]:
+                               myf.write("\nblacklist "+x)
+                       myf.close()
+
+       def unpack(self):
+               unpack=True
+               display_msg=None
+
+               
clst_unpack_hash=read_from_clst(self.settings["autoresume_path"]+"unpack")
+
+               if os.path.isdir(self.settings["source_path"]):
+                       unpack_cmd="rsync -a --delete 
"+self.settings["source_path"]+" "+self.settings["chroot_path"]
+                       display_msg="\nStarting rsync from 
"+self.settings["source_path"]+"\nto "+\
+                               self.settings["chroot_path"]+" (This may take 
some time) ...\n"
+                       error_msg="Rsync of "+self.settings["source_path"]+" to 
"+self.settings["chroot_path"]+" failed."
+                       invalid_snapshot=False
+
+               if "autoresume" in self.settings["options"]:
+                       if os.path.isdir(self.settings["source_path"]) and \
+                               
os.path.exists(self.settings["autoresume_path"]+"unpack"):
+                               print "Resume point detected, skipping unpack 
operation..."
+                               unpack=False
+                       elif "source_path_hash" in self.settings:
+                               if self.settings["source_path_hash"] != 
clst_unpack_hash:
+                                       invalid_snapshot=True
+
+               if unpack:
+                       self.mount_safety_check()
+                       if invalid_snapshot:
+                               print "No Valid Resume point detected, cleaning 
up  ..."
+                               
#os.remove(self.settings["autoresume_path"]+"dir_setup")
+                               self.clear_autoresume()
+                               self.clear_chroot()
+                               #self.dir_setup()
+
+                       if not os.path.exists(self.settings["chroot_path"]):
+                               os.makedirs(self.settings["chroot_path"])
+
+                       if not 
os.path.exists(self.settings["chroot_path"]+"/tmp"):
+                               
os.makedirs(self.settings["chroot_path"]+"/tmp",1777)
+
+                       if "pkgcache" in self.settings["options"]:
+                               if not 
os.path.exists(self.settings["pkgcache_path"]):
+                                       
os.makedirs(self.settings["pkgcache_path"],0755)
+
+                       if not display_msg:
+                               raise CatalystError,"Could not find appropriate 
source. Please check the 'source_subpath' setting in the spec file."
+
+                       print display_msg
+                       cmd(unpack_cmd,error_msg,env=self.env)
+
+                       if "source_path_hash" in self.settings:
+                               
myf=open(self.settings["autoresume_path"]+"unpack","w")
+                               myf.write(self.settings["source_path_hash"])
+                               myf.close()
+                       else:
+                               touch(self.settings["autoresume_path"]+"unpack")
+
+       def set_action_sequence(self):
+               self.settings["action_sequence"]=["unpack","unpack_snapshot",\
+                               
"config_profile_link","setup_confdir","portage_overlay",\
+                               
"bind","chroot_setup","setup_environment","run_local",\
+                               "build_kernel"]
+               if "fetch" not in self.settings["options"]:
+                       self.settings["action_sequence"] += 
["bootloader","preclean",\
+                               
"livecd_update","root_overlay","fsscript","rcupdate","unmerge",\
+                               "unbind","remove","empty","target_setup",\
+                               "setup_overlay","create_iso"]
+               self.settings["action_sequence"].append("clear_autoresume")
diff --git a/catalyst/targets/livecd_stage2_target.py 
b/catalyst/targets/livecd_stage2_target.py
deleted file mode 100644
index a4630e6..0000000
--- a/catalyst/targets/livecd_stage2_target.py
+++ /dev/null
@@ -1,147 +0,0 @@
-"""
-LiveCD stage2 target, builds upon previous LiveCD stage1 tarball
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-import os
-
-from catalyst.support import (normpath, file_locate, CatalystError, cmd,
-       read_from_clst, touch)
-from catalyst.base.stagebase import StageBase
-
-
-class livecd_stage2_target(StageBase):
-       """
-       Builder class for a LiveCD stage2 build.
-       """
-       def __init__(self,spec,addlargs):
-               self.required_values=["boot/kernel"]
-
-               self.valid_values=[]
-
-               self.valid_values.extend(self.required_values)
-               
self.valid_values.extend(["livecd/cdtar","livecd/empty","livecd/rm",\
-                       
"livecd/unmerge","livecd/iso","livecd/gk_mainargs","livecd/type",\
-                       "livecd/readme","livecd/motd","livecd/overlay",\
-                       
"livecd/modblacklist","livecd/splash_theme","livecd/rcadd",\
-                       "livecd/rcdel","livecd/fsscript","livecd/xinitrc",\
-                       "livecd/root_overlay","livecd/users","portage_overlay",\
-                       
"livecd/fstype","livecd/fsops","livecd/linuxrc","livecd/bootargs",\
-                       
"gamecd/conf","livecd/xdm","livecd/xsession","livecd/volid"])
-
-               StageBase.__init__(self,spec,addlargs)
-               if "livecd/type" not in self.settings:
-                       self.settings["livecd/type"] = "generic-livecd"
-
-               file_locate(self.settings, ["cdtar","controller_file"])
-
-       def set_source_path(self):
-               
self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2")
-               if os.path.isfile(self.settings["source_path"]):
-                       self.settings["source_path_hash"] = \
-                               self.settings["hash_map"].generate_hash(
-                                       self.settings["source_path"])
-               else:
-                       
self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/")
-               if not os.path.exists(self.settings["source_path"]):
-                       raise CatalystError,"Source Path: 
"+self.settings["source_path"]+" does not exist."
-
-       def set_spec_prefix(self):
-           self.settings["spec_prefix"]="livecd"
-
-       def set_target_path(self):
-               
self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
-               if "autoresume" in self.settings["options"] \
-                       and 
os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
-                               print "Resume point detected, skipping target 
path setup operation..."
-               else:
-                       # first clean up any existing target stuff
-                       if os.path.isdir(self.settings["target_path"]):
-                               cmd("rm -rf "+self.settings["target_path"],
-                               "Could not remove existing directory: 
"+self.settings["target_path"],env=self.env)
-                               
touch(self.settings["autoresume_path"]+"setup_target_path")
-                       if not os.path.exists(self.settings["target_path"]):
-                               os.makedirs(self.settings["target_path"])
-
-       def run_local(self):
-               # what modules do we want to blacklist?
-               if "livecd/modblacklist" in self.settings:
-                       try:
-                               
myf=open(self.settings["chroot_path"]+"/etc/modprobe.d/blacklist.conf","a")
-                       except:
-                               self.unbind()
-                               raise CatalystError,"Couldn't open 
"+self.settings["chroot_path"]+"/etc/modprobe.d/blacklist.conf."
-
-                       myf.write("\n#Added by Catalyst:")
-                       # workaround until config.py is using configparser
-                       if isinstance(self.settings["livecd/modblacklist"], 
str):
-                               self.settings["livecd/modblacklist"] = 
self.settings["livecd/modblacklist"].split()
-                       for x in self.settings["livecd/modblacklist"]:
-                               myf.write("\nblacklist "+x)
-                       myf.close()
-
-       def unpack(self):
-               unpack=True
-               display_msg=None
-
-               
clst_unpack_hash=read_from_clst(self.settings["autoresume_path"]+"unpack")
-
-               if os.path.isdir(self.settings["source_path"]):
-                       unpack_cmd="rsync -a --delete 
"+self.settings["source_path"]+" "+self.settings["chroot_path"]
-                       display_msg="\nStarting rsync from 
"+self.settings["source_path"]+"\nto "+\
-                               self.settings["chroot_path"]+" (This may take 
some time) ...\n"
-                       error_msg="Rsync of "+self.settings["source_path"]+" to 
"+self.settings["chroot_path"]+" failed."
-                       invalid_snapshot=False
-
-               if "autoresume" in self.settings["options"]:
-                       if os.path.isdir(self.settings["source_path"]) and \
-                               
os.path.exists(self.settings["autoresume_path"]+"unpack"):
-                               print "Resume point detected, skipping unpack 
operation..."
-                               unpack=False
-                       elif "source_path_hash" in self.settings:
-                               if self.settings["source_path_hash"] != 
clst_unpack_hash:
-                                       invalid_snapshot=True
-
-               if unpack:
-                       self.mount_safety_check()
-                       if invalid_snapshot:
-                               print "No Valid Resume point detected, cleaning 
up  ..."
-                               
#os.remove(self.settings["autoresume_path"]+"dir_setup")
-                               self.clear_autoresume()
-                               self.clear_chroot()
-                               #self.dir_setup()
-
-                       if not os.path.exists(self.settings["chroot_path"]):
-                               os.makedirs(self.settings["chroot_path"])
-
-                       if not 
os.path.exists(self.settings["chroot_path"]+"/tmp"):
-                               
os.makedirs(self.settings["chroot_path"]+"/tmp",1777)
-
-                       if "pkgcache" in self.settings["options"]:
-                               if not 
os.path.exists(self.settings["pkgcache_path"]):
-                                       
os.makedirs(self.settings["pkgcache_path"],0755)
-
-                       if not display_msg:
-                               raise CatalystError,"Could not find appropriate 
source. Please check the 'source_subpath' setting in the spec file."
-
-                       print display_msg
-                       cmd(unpack_cmd,error_msg,env=self.env)
-
-                       if "source_path_hash" in self.settings:
-                               
myf=open(self.settings["autoresume_path"]+"unpack","w")
-                               myf.write(self.settings["source_path_hash"])
-                               myf.close()
-                       else:
-                               touch(self.settings["autoresume_path"]+"unpack")
-
-       def set_action_sequence(self):
-               self.settings["action_sequence"]=["unpack","unpack_snapshot",\
-                               
"config_profile_link","setup_confdir","portage_overlay",\
-                               
"bind","chroot_setup","setup_environment","run_local",\
-                               "build_kernel"]
-               if "fetch" not in self.settings["options"]:
-                       self.settings["action_sequence"] += 
["bootloader","preclean",\
-                               
"livecd_update","root_overlay","fsscript","rcupdate","unmerge",\
-                               "unbind","remove","empty","target_setup",\
-                               "setup_overlay","create_iso"]
-               self.settings["action_sequence"].append("clear_autoresume")
diff --git a/catalyst/targets/netboot.py b/catalyst/targets/netboot.py
new file mode 100644
index 0000000..f753c7f
--- /dev/null
+++ b/catalyst/targets/netboot.py
@@ -0,0 +1,129 @@
+"""
+netboot target, version 1
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+import os
+import types
+
+from catalyst.support import (CatalystError, normpath,
+       cmd, list_bashify, file_locate)
+
+from catalyst.base.stagebase import StageBase
+
+
+class netboot(StageBase):
+       """
+       Builder class for a netboot build.
+       """
+       def __init__(self,spec,addlargs):
+               self.valid_values = [
+                       "netboot/kernel/sources",
+                       "netboot/kernel/config",
+                       "netboot/kernel/prebuilt",
+
+                       "netboot/busybox_config",
+
+                       "netboot/extra_files",
+                       "netboot/packages"
+               ]
+               self.required_values=[]
+
+               try:
+                       if "netboot/packages" in addlargs:
+                               if type(addlargs["netboot/packages"]) == 
types.StringType:
+                                       loopy=[addlargs["netboot/packages"]]
+                               else:
+                                       loopy=addlargs["netboot/packages"]
+
+               #       for x in loopy:
+               #               
self.required_values.append("netboot/packages/"+x+"/files")
+               except:
+                       raise CatalystError,"configuration error in 
netboot/packages."
+
+               StageBase.__init__(self,spec,addlargs)
+               self.set_build_kernel_vars(addlargs)
+               if "netboot/busybox_config" in addlargs:
+                       file_locate(self.settings, ["netboot/busybox_config"])
+
+               # Custom Kernel Tarball --- use that instead ...
+
+               # unless the user wants specific CFLAGS/CXXFLAGS, let's use -Os
+
+               for envvar in "CFLAGS", "CXXFLAGS":
+                       if envvar not in os.environ and envvar not in addlargs:
+                               self.settings[envvar] = "-Os -pipe"
+
+       def set_root_path(self):
+               # ROOT= variable for emerges
+               self.settings["root_path"]=normpath("/tmp/image")
+               print "netboot root path is "+self.settings["root_path"]
+
+#      def build_packages(self):
+#              # build packages
+#              if "netboot/packages" in self.settings:
+#                      mypack=list_bashify(self.settings["netboot/packages"])
+#              try:
+#                      cmd(self.settings["controller_file"]+" packages 
"+mypack,env=self.env)
+#              except CatalystError:
+#                      self.unbind()
+#                      raise CatalystError,"netboot build aborting due to 
error."
+
+       def build_busybox(self):
+               # build busybox
+               if "netboot/busybox_config" in self.settings:
+                       mycmd = self.settings["netboot/busybox_config"]
+               else:
+                       mycmd = ""
+               try:
+                       cmd(self.settings["controller_file"]+" busybox "+ 
mycmd,env=self.env)
+               except CatalystError:
+                       self.unbind()
+                       raise CatalystError,"netboot build aborting due to 
error."
+
+       def copy_files_to_image(self):
+               # create image
+               myfiles=[]
+               if "netboot/packages" in self.settings:
+                       if type(self.settings["netboot/packages"]) == 
types.StringType:
+                               loopy=[self.settings["netboot/packages"]]
+                       else:
+                               loopy=self.settings["netboot/packages"]
+
+               for x in loopy:
+                       if "netboot/packages/"+x+"/files" in self.settings:
+                           if 
type(self.settings["netboot/packages/"+x+"/files"]) == types.ListType:
+                                   
myfiles.extend(self.settings["netboot/packages/"+x+"/files"])
+                           else:
+                                   
myfiles.append(self.settings["netboot/packages/"+x+"/files"])
+
+               if "netboot/extra_files" in self.settings:
+                       if type(self.settings["netboot/extra_files"]) == 
types.ListType:
+                               
myfiles.extend(self.settings["netboot/extra_files"])
+                       else:
+                               
myfiles.append(self.settings["netboot/extra_files"])
+
+               try:
+                       cmd(self.settings["controller_file"]+\
+                               " image " + list_bashify(myfiles),env=self.env)
+               except CatalystError:
+                       self.unbind()
+                       raise CatalystError,"netboot build aborting due to 
error."
+
+       def create_netboot_files(self):
+               # finish it all up
+               try:
+                       cmd(self.settings["controller_file"]+" 
finish",env=self.env)
+               except CatalystError:
+                       self.unbind()
+                       raise CatalystError,"netboot build aborting due to 
error."
+
+               # end
+               print "netboot: build finished !"
+
+       def set_action_sequence(self):
+           self.settings["action_sequence"]=["unpack","unpack_snapshot",
+                                       
"config_profile_link","setup_confdir","bind","chroot_setup",\
+                                               
"setup_environment","build_packages","build_busybox",\
+                                               
"build_kernel","copy_files_to_image",\
+                                               
"clean","create_netboot_files","unbind","clear_autoresume"]
diff --git a/catalyst/targets/netboot2.py b/catalyst/targets/netboot2.py
new file mode 100644
index 0000000..fc8c64c
--- /dev/null
+++ b/catalyst/targets/netboot2.py
@@ -0,0 +1,169 @@
+"""
+netboot target, version 2
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+import os
+import types
+import shutil
+from stat import ST_UID, ST_GID, ST_MODE
+
+from catalyst.support import (CatalystError, normpath,
+       touch, cmd, list_bashify)
+
+from catalyst.base.stagebase import StageBase
+
+
+class netboot2(StageBase):
+       """
+       Builder class for a netboot build, version 2
+       """
+       def __init__(self,spec,addlargs):
+               self.required_values=[
+                       "boot/kernel"
+               ]
+               self.valid_values=self.required_values[:]
+               self.valid_values.extend([
+                       "netboot2/packages",
+                       "netboot2/use",
+                       "netboot2/extra_files",
+                       "netboot2/overlay",
+                       "netboot2/busybox_config",
+                       "netboot2/root_overlay",
+                       "netboot2/linuxrc"
+               ])
+
+               try:
+                       if "netboot2/packages" in addlargs:
+                               if type(addlargs["netboot2/packages"]) == 
types.StringType:
+                                       loopy=[addlargs["netboot2/packages"]]
+                               else:
+                                       loopy=addlargs["netboot2/packages"]
+
+                               for x in loopy:
+                                       
self.valid_values.append("netboot2/packages/"+x+"/files")
+               except:
+                       raise CatalystError,"configuration error in 
netboot2/packages."
+
+               StageBase.__init__(self,spec,addlargs)
+               self.set_build_kernel_vars()
+               self.settings["merge_path"]=normpath("/tmp/image/")
+
+       def set_target_path(self):
+               
self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+\
+                       self.settings["target_subpath"]+"/")
+               if "autoresume" in self.settings["options"] \
+                       and 
os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
+                               print "Resume point detected, skipping target 
path setup operation..."
+               else:
+                       # first clean up any existing target stuff
+                       if os.path.isfile(self.settings["target_path"]):
+                               cmd("rm -f "+self.settings["target_path"], \
+                                       "Could not remove existing file: 
"+self.settings["target_path"],env=self.env)
+                               
touch(self.settings["autoresume_path"]+"setup_target_path")
+
+               if not os.path.exists(self.settings["storedir"]+"/builds/"):
+                       os.makedirs(self.settings["storedir"]+"/builds/")
+
+       def copy_files_to_image(self):
+               # copies specific files from the buildroot to merge_path
+               myfiles=[]
+
+               # check for autoresume point
+               if "autoresume" in self.settings["options"] \
+                       and 
os.path.exists(self.settings["autoresume_path"]+"copy_files_to_image"):
+                               print "Resume point detected, skipping target 
path setup operation..."
+               else:
+                       if "netboot2/packages" in self.settings:
+                               if type(self.settings["netboot2/packages"]) == 
types.StringType:
+                                       
loopy=[self.settings["netboot2/packages"]]
+                               else:
+                                       loopy=self.settings["netboot2/packages"]
+
+                       for x in loopy:
+                               if "netboot2/packages/"+x+"/files" in 
self.settings:
+                                   if 
type(self.settings["netboot2/packages/"+x+"/files"]) == types.ListType:
+                                           
myfiles.extend(self.settings["netboot2/packages/"+x+"/files"])
+                                   else:
+                                           
myfiles.append(self.settings["netboot2/packages/"+x+"/files"])
+
+                       if "netboot2/extra_files" in self.settings:
+                               if type(self.settings["netboot2/extra_files"]) 
== types.ListType:
+                                       
myfiles.extend(self.settings["netboot2/extra_files"])
+                               else:
+                                       
myfiles.append(self.settings["netboot2/extra_files"])
+
+                       try:
+                               cmd(self.settings["controller_file"]+\
+                                       " image " + 
list_bashify(myfiles),env=self.env)
+                       except CatalystError:
+                               self.unbind()
+                               raise CatalystError,"Failed to copy files to 
image!"
+
+                       
touch(self.settings["autoresume_path"]+"copy_files_to_image")
+
+       def setup_overlay(self):
+               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:
+                       if "netboot2/overlay" in self.settings:
+                               for x in self.settings["netboot2/overlay"]:
+                                       if os.path.exists(x):
+                                               cmd("rsync -a "+x+"/ "+\
+                                                       
self.settings["chroot_path"] + self.settings["merge_path"], "netboot2/overlay: 
"+x+" copy failed.",env=self.env)
+                               
touch(self.settings["autoresume_path"]+"setup_overlay")
+
+       def move_kernels(self):
+               # we're done, move the kernels to builds/*
+               # no auto resume here as we always want the
+               # freshest images moved
+               try:
+                       cmd(self.settings["controller_file"]+\
+                               " final",env=self.env)
+                       print ">>> Netboot Build Finished!"
+               except CatalystError:
+                       self.unbind()
+                       raise CatalystError,"Failed to move kernel images!"
+
+       def remove(self):
+               if "autoresume" in self.settings["options"] \
+                       and 
os.path.exists(self.settings["autoresume_path"]+"remove"):
+                       print "Resume point detected, skipping remove 
operation..."
+               else:
+                       if self.settings["spec_prefix"]+"/rm" in self.settings:
+                               for x in 
self.settings[self.settings["spec_prefix"]+"/rm"]:
+                                       # we're going to shell out for all 
these cleaning operations,
+                                       # so we get easy glob handling
+                                       print "netboot2: removing " + x
+                                       os.system("rm -rf " + 
self.settings["chroot_path"] + self.settings["merge_path"] + x)
+
+       def empty(self):
+               if "autoresume" in self.settings["options"] \
+                       and 
os.path.exists(self.settings["autoresume_path"]+"empty"):
+                       print "Resume point detected, skipping empty 
operation..."
+               else:
+                       if "netboot2/empty" in self.settings:
+                               if 
type(self.settings["netboot2/empty"])==types.StringType:
+                                       
self.settings["netboot2/empty"]=self.settings["netboot2/empty"].split()
+                               for x in self.settings["netboot2/empty"]:
+                                       myemp=self.settings["chroot_path"] + 
self.settings["merge_path"] + x
+                                       if not os.path.isdir(myemp):
+                                               print x,"not a directory or 
does not exist, skipping 'empty' operation."
+                                               continue
+                                       print "Emptying directory", x
+                                       # stat the dir, delete the dir, 
recreate the dir and set
+                                       # the proper perms and ownership
+                                       mystat=os.stat(myemp)
+                                       shutil.rmtree(myemp)
+                                       os.makedirs(myemp,0755)
+                                       
os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
+                                       os.chmod(myemp,mystat[ST_MODE])
+               touch(self.settings["autoresume_path"]+"empty")
+
+       def set_action_sequence(self):
+           
self.settings["action_sequence"]=["unpack","unpack_snapshot","config_profile_link",
+                                       
"setup_confdir","portage_overlay","bind","chroot_setup",\
+                                       
"setup_environment","build_packages","root_overlay",\
+                                       
"copy_files_to_image","setup_overlay","build_kernel","move_kernels",\
+                                       
"remove","empty","unbind","clean","clear_autoresume"]
diff --git a/catalyst/targets/netboot2_target.py 
b/catalyst/targets/netboot2_target.py
deleted file mode 100644
index 130e2b6..0000000
--- a/catalyst/targets/netboot2_target.py
+++ /dev/null
@@ -1,169 +0,0 @@
-"""
-netboot target, version 2
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-import os
-import types
-import shutil
-from stat import ST_UID, ST_GID, ST_MODE
-
-from catalyst.support import (CatalystError, normpath,
-       touch, cmd, list_bashify)
-
-from catalyst.base.stagebase import StageBase
-
-
-class netboot2_target(StageBase):
-       """
-       Builder class for a netboot build, version 2
-       """
-       def __init__(self,spec,addlargs):
-               self.required_values=[
-                       "boot/kernel"
-               ]
-               self.valid_values=self.required_values[:]
-               self.valid_values.extend([
-                       "netboot2/packages",
-                       "netboot2/use",
-                       "netboot2/extra_files",
-                       "netboot2/overlay",
-                       "netboot2/busybox_config",
-                       "netboot2/root_overlay",
-                       "netboot2/linuxrc"
-               ])
-
-               try:
-                       if "netboot2/packages" in addlargs:
-                               if type(addlargs["netboot2/packages"]) == 
types.StringType:
-                                       loopy=[addlargs["netboot2/packages"]]
-                               else:
-                                       loopy=addlargs["netboot2/packages"]
-
-                               for x in loopy:
-                                       
self.valid_values.append("netboot2/packages/"+x+"/files")
-               except:
-                       raise CatalystError,"configuration error in 
netboot2/packages."
-
-               StageBase.__init__(self,spec,addlargs)
-               self.set_build_kernel_vars()
-               self.settings["merge_path"]=normpath("/tmp/image/")
-
-       def set_target_path(self):
-               
self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+\
-                       self.settings["target_subpath"]+"/")
-               if "autoresume" in self.settings["options"] \
-                       and 
os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
-                               print "Resume point detected, skipping target 
path setup operation..."
-               else:
-                       # first clean up any existing target stuff
-                       if os.path.isfile(self.settings["target_path"]):
-                               cmd("rm -f "+self.settings["target_path"], \
-                                       "Could not remove existing file: 
"+self.settings["target_path"],env=self.env)
-                               
touch(self.settings["autoresume_path"]+"setup_target_path")
-
-               if not os.path.exists(self.settings["storedir"]+"/builds/"):
-                       os.makedirs(self.settings["storedir"]+"/builds/")
-
-       def copy_files_to_image(self):
-               # copies specific files from the buildroot to merge_path
-               myfiles=[]
-
-               # check for autoresume point
-               if "autoresume" in self.settings["options"] \
-                       and 
os.path.exists(self.settings["autoresume_path"]+"copy_files_to_image"):
-                               print "Resume point detected, skipping target 
path setup operation..."
-               else:
-                       if "netboot2/packages" in self.settings:
-                               if type(self.settings["netboot2/packages"]) == 
types.StringType:
-                                       
loopy=[self.settings["netboot2/packages"]]
-                               else:
-                                       loopy=self.settings["netboot2/packages"]
-
-                       for x in loopy:
-                               if "netboot2/packages/"+x+"/files" in 
self.settings:
-                                   if 
type(self.settings["netboot2/packages/"+x+"/files"]) == types.ListType:
-                                           
myfiles.extend(self.settings["netboot2/packages/"+x+"/files"])
-                                   else:
-                                           
myfiles.append(self.settings["netboot2/packages/"+x+"/files"])
-
-                       if "netboot2/extra_files" in self.settings:
-                               if type(self.settings["netboot2/extra_files"]) 
== types.ListType:
-                                       
myfiles.extend(self.settings["netboot2/extra_files"])
-                               else:
-                                       
myfiles.append(self.settings["netboot2/extra_files"])
-
-                       try:
-                               cmd(self.settings["controller_file"]+\
-                                       " image " + 
list_bashify(myfiles),env=self.env)
-                       except CatalystError:
-                               self.unbind()
-                               raise CatalystError,"Failed to copy files to 
image!"
-
-                       
touch(self.settings["autoresume_path"]+"copy_files_to_image")
-
-       def setup_overlay(self):
-               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:
-                       if "netboot2/overlay" in self.settings:
-                               for x in self.settings["netboot2/overlay"]:
-                                       if os.path.exists(x):
-                                               cmd("rsync -a "+x+"/ "+\
-                                                       
self.settings["chroot_path"] + self.settings["merge_path"], "netboot2/overlay: 
"+x+" copy failed.",env=self.env)
-                               
touch(self.settings["autoresume_path"]+"setup_overlay")
-
-       def move_kernels(self):
-               # we're done, move the kernels to builds/*
-               # no auto resume here as we always want the
-               # freshest images moved
-               try:
-                       cmd(self.settings["controller_file"]+\
-                               " final",env=self.env)
-                       print ">>> Netboot Build Finished!"
-               except CatalystError:
-                       self.unbind()
-                       raise CatalystError,"Failed to move kernel images!"
-
-       def remove(self):
-               if "autoresume" in self.settings["options"] \
-                       and 
os.path.exists(self.settings["autoresume_path"]+"remove"):
-                       print "Resume point detected, skipping remove 
operation..."
-               else:
-                       if self.settings["spec_prefix"]+"/rm" in self.settings:
-                               for x in 
self.settings[self.settings["spec_prefix"]+"/rm"]:
-                                       # we're going to shell out for all 
these cleaning operations,
-                                       # so we get easy glob handling
-                                       print "netboot2: removing " + x
-                                       os.system("rm -rf " + 
self.settings["chroot_path"] + self.settings["merge_path"] + x)
-
-       def empty(self):
-               if "autoresume" in self.settings["options"] \
-                       and 
os.path.exists(self.settings["autoresume_path"]+"empty"):
-                       print "Resume point detected, skipping empty 
operation..."
-               else:
-                       if "netboot2/empty" in self.settings:
-                               if 
type(self.settings["netboot2/empty"])==types.StringType:
-                                       
self.settings["netboot2/empty"]=self.settings["netboot2/empty"].split()
-                               for x in self.settings["netboot2/empty"]:
-                                       myemp=self.settings["chroot_path"] + 
self.settings["merge_path"] + x
-                                       if not os.path.isdir(myemp):
-                                               print x,"not a directory or 
does not exist, skipping 'empty' operation."
-                                               continue
-                                       print "Emptying directory", x
-                                       # stat the dir, delete the dir, 
recreate the dir and set
-                                       # the proper perms and ownership
-                                       mystat=os.stat(myemp)
-                                       shutil.rmtree(myemp)
-                                       os.makedirs(myemp,0755)
-                                       
os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
-                                       os.chmod(myemp,mystat[ST_MODE])
-               touch(self.settings["autoresume_path"]+"empty")
-
-       def set_action_sequence(self):
-           
self.settings["action_sequence"]=["unpack","unpack_snapshot","config_profile_link",
-                                       
"setup_confdir","portage_overlay","bind","chroot_setup",\
-                                       
"setup_environment","build_packages","root_overlay",\
-                                       
"copy_files_to_image","setup_overlay","build_kernel","move_kernels",\
-                                       
"remove","empty","unbind","clean","clear_autoresume"]
diff --git a/catalyst/targets/netboot_target.py 
b/catalyst/targets/netboot_target.py
deleted file mode 100644
index 9d92ef2..0000000
--- a/catalyst/targets/netboot_target.py
+++ /dev/null
@@ -1,129 +0,0 @@
-"""
-netboot target, version 1
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-import os
-import types
-
-from catalyst.support import (CatalystError, normpath,
-       cmd, list_bashify, file_locate)
-
-from catalyst.base.stagebase import StageBase
-
-
-class netboot_target(StageBase):
-       """
-       Builder class for a netboot build.
-       """
-       def __init__(self,spec,addlargs):
-               self.valid_values = [
-                       "netboot/kernel/sources",
-                       "netboot/kernel/config",
-                       "netboot/kernel/prebuilt",
-
-                       "netboot/busybox_config",
-
-                       "netboot/extra_files",
-                       "netboot/packages"
-               ]
-               self.required_values=[]
-
-               try:
-                       if "netboot/packages" in addlargs:
-                               if type(addlargs["netboot/packages"]) == 
types.StringType:
-                                       loopy=[addlargs["netboot/packages"]]
-                               else:
-                                       loopy=addlargs["netboot/packages"]
-
-               #       for x in loopy:
-               #               
self.required_values.append("netboot/packages/"+x+"/files")
-               except:
-                       raise CatalystError,"configuration error in 
netboot/packages."
-
-               StageBase.__init__(self,spec,addlargs)
-               self.set_build_kernel_vars(addlargs)
-               if "netboot/busybox_config" in addlargs:
-                       file_locate(self.settings, ["netboot/busybox_config"])
-
-               # Custom Kernel Tarball --- use that instead ...
-
-               # unless the user wants specific CFLAGS/CXXFLAGS, let's use -Os
-
-               for envvar in "CFLAGS", "CXXFLAGS":
-                       if envvar not in os.environ and envvar not in addlargs:
-                               self.settings[envvar] = "-Os -pipe"
-
-       def set_root_path(self):
-               # ROOT= variable for emerges
-               self.settings["root_path"]=normpath("/tmp/image")
-               print "netboot root path is "+self.settings["root_path"]
-
-#      def build_packages(self):
-#              # build packages
-#              if "netboot/packages" in self.settings:
-#                      mypack=list_bashify(self.settings["netboot/packages"])
-#              try:
-#                      cmd(self.settings["controller_file"]+" packages 
"+mypack,env=self.env)
-#              except CatalystError:
-#                      self.unbind()
-#                      raise CatalystError,"netboot build aborting due to 
error."
-
-       def build_busybox(self):
-               # build busybox
-               if "netboot/busybox_config" in self.settings:
-                       mycmd = self.settings["netboot/busybox_config"]
-               else:
-                       mycmd = ""
-               try:
-                       cmd(self.settings["controller_file"]+" busybox "+ 
mycmd,env=self.env)
-               except CatalystError:
-                       self.unbind()
-                       raise CatalystError,"netboot build aborting due to 
error."
-
-       def copy_files_to_image(self):
-               # create image
-               myfiles=[]
-               if "netboot/packages" in self.settings:
-                       if type(self.settings["netboot/packages"]) == 
types.StringType:
-                               loopy=[self.settings["netboot/packages"]]
-                       else:
-                               loopy=self.settings["netboot/packages"]
-
-               for x in loopy:
-                       if "netboot/packages/"+x+"/files" in self.settings:
-                           if 
type(self.settings["netboot/packages/"+x+"/files"]) == types.ListType:
-                                   
myfiles.extend(self.settings["netboot/packages/"+x+"/files"])
-                           else:
-                                   
myfiles.append(self.settings["netboot/packages/"+x+"/files"])
-
-               if "netboot/extra_files" in self.settings:
-                       if type(self.settings["netboot/extra_files"]) == 
types.ListType:
-                               
myfiles.extend(self.settings["netboot/extra_files"])
-                       else:
-                               
myfiles.append(self.settings["netboot/extra_files"])
-
-               try:
-                       cmd(self.settings["controller_file"]+\
-                               " image " + list_bashify(myfiles),env=self.env)
-               except CatalystError:
-                       self.unbind()
-                       raise CatalystError,"netboot build aborting due to 
error."
-
-       def create_netboot_files(self):
-               # finish it all up
-               try:
-                       cmd(self.settings["controller_file"]+" 
finish",env=self.env)
-               except CatalystError:
-                       self.unbind()
-                       raise CatalystError,"netboot build aborting due to 
error."
-
-               # end
-               print "netboot: build finished !"
-
-       def set_action_sequence(self):
-           self.settings["action_sequence"]=["unpack","unpack_snapshot",
-                                       
"config_profile_link","setup_confdir","bind","chroot_setup",\
-                                               
"setup_environment","build_packages","build_busybox",\
-                                               
"build_kernel","copy_files_to_image",\
-                                               
"clean","create_netboot_files","unbind","clear_autoresume"]
diff --git a/catalyst/targets/stage1.py b/catalyst/targets/stage1.py
new file mode 100644
index 0000000..e72cbcc
--- /dev/null
+++ b/catalyst/targets/stage1.py
@@ -0,0 +1,96 @@
+"""
+stage1 target
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+import os
+
+from catalyst.support import normpath, list_to_string
+from catalyst.base.stagebase import StageBase
+
+
+class stage1(StageBase):
+       """
+       Builder class for a stage1 installation tarball build.
+       """
+       def __init__(self,spec,addlargs):
+               self.required_values=[]
+               self.valid_values=["chost"]
+               self.valid_values.extend(["update_seed","update_seed_command"])
+               StageBase.__init__(self,spec,addlargs)
+
+       def set_stage_path(self):
+               
self.settings["stage_path"]=normpath(self.settings["chroot_path"]+self.settings["root_path"])
+               print "stage1 stage path is "+self.settings["stage_path"]
+
+       def set_root_path(self):
+               # sets the root path, relative to 'chroot_path', of the stage1 
root
+               self.settings["root_path"]=normpath("/tmp/stage1root")
+               print "stage1 root path is "+self.settings["root_path"]
+
+       def set_cleanables(self):
+               StageBase.set_cleanables(self)
+               self.settings["cleanables"].extend([\
+               "/usr/share/zoneinfo", "/etc/portage/package*"])
+
+       # XXX: How do these override_foo() functions differ from the ones in 
StageBase and why aren't they in stage3_target?
+
+       def override_chost(self):
+               if "chost" in self.settings:
+                       
self.settings["CHOST"]=list_to_string(self.settings["chost"])
+
+       def override_cflags(self):
+               if "cflags" in self.settings:
+                       
self.settings["CFLAGS"]=list_to_string(self.settings["cflags"])
+
+       def override_cxxflags(self):
+               if "cxxflags" in self.settings:
+                       
self.settings["CXXFLAGS"]=list_to_string(self.settings["cxxflags"])
+
+       def override_ldflags(self):
+               if "ldflags" in self.settings:
+                       
self.settings["LDFLAGS"]=list_to_string(self.settings["ldflags"])
+
+       def set_portage_overlay(self):
+               StageBase.set_portage_overlay(self)
+               if "portage_overlay" in self.settings:
+                       print "\nWARNING !!!!!"
+                       print "\tUsing an portage overlay for earlier stages 
could cause build issues."
+                       print "\tIf you break it, you buy it. Don't complain to 
us about it."
+                       print "\tDont say we did not warn you\n"
+
+       def base_dirs(self):
+               if os.uname()[0] == "FreeBSD":
+                       # baselayout no longer creates the .keep files in proc 
and dev for FreeBSD as it
+                       # would create them too late...we need them earlier 
before bind mounting filesystems
+                       # since proc and dev are not writeable, so...create 
them here
+                       if not 
os.path.exists(self.settings["stage_path"]+"/proc"):
+                               os.makedirs(self.settings["stage_path"]+"/proc")
+                       if not 
os.path.exists(self.settings["stage_path"]+"/dev"):
+                               os.makedirs(self.settings["stage_path"]+"/dev")
+                       if not 
os.path.isfile(self.settings["stage_path"]+"/proc/.keep"):
+                               try:
+                                       proc_keepfile = 
open(self.settings["stage_path"]+"/proc/.keep","w")
+                                       proc_keepfile.write('')
+                                       proc_keepfile.close()
+                               except IOError:
+                                       print "!!! Failed to create %s" % 
(self.settings["stage_path"]+"/dev/.keep")
+                       if not 
os.path.isfile(self.settings["stage_path"]+"/dev/.keep"):
+                               try:
+                                       dev_keepfile = 
open(self.settings["stage_path"]+"/dev/.keep","w")
+                                       dev_keepfile.write('')
+                                       dev_keepfile.close()
+                               except IOError:
+                                       print "!!! Failed to create %s" % 
(self.settings["stage_path"]+"/dev/.keep")
+               else:
+                       pass
+
+       def set_mounts(self):
+               # stage_path/proc probably doesn't exist yet, so create it
+               if not os.path.exists(self.settings["stage_path"]+"/proc"):
+                       os.makedirs(self.settings["stage_path"]+"/proc")
+
+               # alter the mount mappings to bind mount proc onto it
+               self.mounts.append("stage1root/proc")
+               self.target_mounts["stage1root/proc"] = "/tmp/stage1root/proc"
+               self.mountmap["stage1root/proc"] = "/proc"
diff --git a/catalyst/targets/stage1_target.py 
b/catalyst/targets/stage1_target.py
deleted file mode 100644
index 2329b58..0000000
--- a/catalyst/targets/stage1_target.py
+++ /dev/null
@@ -1,96 +0,0 @@
-"""
-stage1 target
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-import os
-
-from catalyst.support import normpath, list_to_string
-from catalyst.base.stagebase import StageBase
-
-
-class stage1_target(StageBase):
-       """
-       Builder class for a stage1 installation tarball build.
-       """
-       def __init__(self,spec,addlargs):
-               self.required_values=[]
-               self.valid_values=["chost"]
-               self.valid_values.extend(["update_seed","update_seed_command"])
-               StageBase.__init__(self,spec,addlargs)
-
-       def set_stage_path(self):
-               
self.settings["stage_path"]=normpath(self.settings["chroot_path"]+self.settings["root_path"])
-               print "stage1 stage path is "+self.settings["stage_path"]
-
-       def set_root_path(self):
-               # sets the root path, relative to 'chroot_path', of the stage1 
root
-               self.settings["root_path"]=normpath("/tmp/stage1root")
-               print "stage1 root path is "+self.settings["root_path"]
-
-       def set_cleanables(self):
-               StageBase.set_cleanables(self)
-               self.settings["cleanables"].extend([\
-               "/usr/share/zoneinfo", "/etc/portage/package*"])
-
-       # XXX: How do these override_foo() functions differ from the ones in 
StageBase and why aren't they in stage3_target?
-
-       def override_chost(self):
-               if "chost" in self.settings:
-                       
self.settings["CHOST"]=list_to_string(self.settings["chost"])
-
-       def override_cflags(self):
-               if "cflags" in self.settings:
-                       
self.settings["CFLAGS"]=list_to_string(self.settings["cflags"])
-
-       def override_cxxflags(self):
-               if "cxxflags" in self.settings:
-                       
self.settings["CXXFLAGS"]=list_to_string(self.settings["cxxflags"])
-
-       def override_ldflags(self):
-               if "ldflags" in self.settings:
-                       
self.settings["LDFLAGS"]=list_to_string(self.settings["ldflags"])
-
-       def set_portage_overlay(self):
-               StageBase.set_portage_overlay(self)
-               if "portage_overlay" in self.settings:
-                       print "\nWARNING !!!!!"
-                       print "\tUsing an portage overlay for earlier stages 
could cause build issues."
-                       print "\tIf you break it, you buy it. Don't complain to 
us about it."
-                       print "\tDont say we did not warn you\n"
-
-       def base_dirs(self):
-               if os.uname()[0] == "FreeBSD":
-                       # baselayout no longer creates the .keep files in proc 
and dev for FreeBSD as it
-                       # would create them too late...we need them earlier 
before bind mounting filesystems
-                       # since proc and dev are not writeable, so...create 
them here
-                       if not 
os.path.exists(self.settings["stage_path"]+"/proc"):
-                               os.makedirs(self.settings["stage_path"]+"/proc")
-                       if not 
os.path.exists(self.settings["stage_path"]+"/dev"):
-                               os.makedirs(self.settings["stage_path"]+"/dev")
-                       if not 
os.path.isfile(self.settings["stage_path"]+"/proc/.keep"):
-                               try:
-                                       proc_keepfile = 
open(self.settings["stage_path"]+"/proc/.keep","w")
-                                       proc_keepfile.write('')
-                                       proc_keepfile.close()
-                               except IOError:
-                                       print "!!! Failed to create %s" % 
(self.settings["stage_path"]+"/dev/.keep")
-                       if not 
os.path.isfile(self.settings["stage_path"]+"/dev/.keep"):
-                               try:
-                                       dev_keepfile = 
open(self.settings["stage_path"]+"/dev/.keep","w")
-                                       dev_keepfile.write('')
-                                       dev_keepfile.close()
-                               except IOError:
-                                       print "!!! Failed to create %s" % 
(self.settings["stage_path"]+"/dev/.keep")
-               else:
-                       pass
-
-       def set_mounts(self):
-               # stage_path/proc probably doesn't exist yet, so create it
-               if not os.path.exists(self.settings["stage_path"]+"/proc"):
-                       os.makedirs(self.settings["stage_path"]+"/proc")
-
-               # alter the mount mappings to bind mount proc onto it
-               self.mounts.append("stage1root/proc")
-               self.target_mounts["stage1root/proc"] = "/tmp/stage1root/proc"
-               self.mountmap["stage1root/proc"] = "/proc"
diff --git a/catalyst/targets/stage2.py b/catalyst/targets/stage2.py
new file mode 100644
index 0000000..884b20d
--- /dev/null
+++ b/catalyst/targets/stage2.py
@@ -0,0 +1,64 @@
+"""
+stage2 target, builds upon previous stage1 tarball
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+import os
+
+from catalyst.support import normpath, list_to_string
+from catalyst.base.stagebase import StageBase
+
+
+class stage2(StageBase):
+       """
+       Builder class for a stage2 installation tarball build.
+       """
+       def __init__(self,spec,addlargs):
+               self.required_values=[]
+               self.valid_values=["chost"]
+               StageBase.__init__(self,spec,addlargs)
+
+       def set_source_path(self):
+               if "seedcache" in self.settings["options"] and 
os.path.isdir(normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root/")):
+                       
self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root/")
+               else:
+                       
self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2")
+                       if os.path.isfile(self.settings["source_path"]):
+                               if os.path.exists(self.settings["source_path"]):
+                               # XXX: Is this even necessary if the previous 
check passes?
+                                       self.settings["source_path_hash"] = \
+                                               
self.settings["hash_map"].generate_hash(
+                                                       
self.settings["source_path"],\
+                                                       
hash_=self.settings["hash_function"],
+                                                       verbose=False)
+               print "Source path set to "+self.settings["source_path"]
+               if os.path.isdir(self.settings["source_path"]):
+                       print "\tIf this is not desired, remove this directory 
or turn of seedcache in the options of catalyst.conf"
+                       print "\tthe source path will then be 
"+normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2\n")
+
+       # XXX: How do these override_foo() functions differ from the ones in
+       # StageBase and why aren't they in stage3_target?
+
+       def override_chost(self):
+               if "chost" in self.settings:
+                       
self.settings["CHOST"]=list_to_string(self.settings["chost"])
+
+       def override_cflags(self):
+               if "cflags" in self.settings:
+                       
self.settings["CFLAGS"]=list_to_string(self.settings["cflags"])
+
+       def override_cxxflags(self):
+               if "cxxflags" in self.settings:
+                       
self.settings["CXXFLAGS"]=list_to_string(self.settings["cxxflags"])
+
+       def override_ldflags(self):
+               if "ldflags" in self.settings:
+                       
self.settings["LDFLAGS"]=list_to_string(self.settings["ldflags"])
+
+       def set_portage_overlay(self):
+                       StageBase.set_portage_overlay(self)
+                       if "portage_overlay" in self.settings:
+                               print "\nWARNING !!!!!"
+                               print "\tUsing an portage overlay for earlier 
stages could cause build issues."
+                               print "\tIf you break it, you buy it. Don't 
complain to us about it."
+                               print "\tDont say we did not warn you\n"
diff --git a/catalyst/targets/stage2_target.py 
b/catalyst/targets/stage2_target.py
deleted file mode 100644
index ec6d78d..0000000
--- a/catalyst/targets/stage2_target.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-stage2 target, builds upon previous stage1 tarball
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-import os
-
-from catalyst.support import normpath, list_to_string
-from catalyst.base.stagebase import StageBase
-
-
-class stage2_target(StageBase):
-       """
-       Builder class for a stage2 installation tarball build.
-       """
-       def __init__(self,spec,addlargs):
-               self.required_values=[]
-               self.valid_values=["chost"]
-               StageBase.__init__(self,spec,addlargs)
-
-       def set_source_path(self):
-               if "seedcache" in self.settings["options"] and 
os.path.isdir(normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root/")):
-                       
self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root/")
-               else:
-                       
self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2")
-                       if os.path.isfile(self.settings["source_path"]):
-                               if os.path.exists(self.settings["source_path"]):
-                               # XXX: Is this even necessary if the previous 
check passes?
-                                       self.settings["source_path_hash"] = \
-                                               
self.settings["hash_map"].generate_hash(
-                                                       
self.settings["source_path"],\
-                                                       
hash_=self.settings["hash_function"],
-                                                       verbose=False)
-               print "Source path set to "+self.settings["source_path"]
-               if os.path.isdir(self.settings["source_path"]):
-                       print "\tIf this is not desired, remove this directory 
or turn of seedcache in the options of catalyst.conf"
-                       print "\tthe source path will then be 
"+normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2\n")
-
-       # XXX: How do these override_foo() functions differ from the ones in
-       # StageBase and why aren't they in stage3_target?
-
-       def override_chost(self):
-               if "chost" in self.settings:
-                       
self.settings["CHOST"]=list_to_string(self.settings["chost"])
-
-       def override_cflags(self):
-               if "cflags" in self.settings:
-                       
self.settings["CFLAGS"]=list_to_string(self.settings["cflags"])
-
-       def override_cxxflags(self):
-               if "cxxflags" in self.settings:
-                       
self.settings["CXXFLAGS"]=list_to_string(self.settings["cxxflags"])
-
-       def override_ldflags(self):
-               if "ldflags" in self.settings:
-                       
self.settings["LDFLAGS"]=list_to_string(self.settings["ldflags"])
-
-       def set_portage_overlay(self):
-                       StageBase.set_portage_overlay(self)
-                       if "portage_overlay" in self.settings:
-                               print "\nWARNING !!!!!"
-                               print "\tUsing an portage overlay for earlier 
stages could cause build issues."
-                               print "\tIf you break it, you buy it. Don't 
complain to us about it."
-                               print "\tDont say we did not warn you\n"
diff --git a/catalyst/targets/stage3.py b/catalyst/targets/stage3.py
new file mode 100644
index 0000000..cc3e520
--- /dev/null
+++ b/catalyst/targets/stage3.py
@@ -0,0 +1,27 @@
+"""
+stage3 target, builds upon previous stage2/stage3 tarball
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+from catalyst.base.stagebase import StageBase
+
+
+class stage3(StageBase):
+       """
+       Builder class for a stage3 installation tarball build.
+       """
+       def __init__(self,spec,addlargs):
+               self.required_values=[]
+               self.valid_values=[]
+               StageBase.__init__(self,spec,addlargs)
+
+       def set_portage_overlay(self):
+               StageBase.set_portage_overlay(self)
+               if "portage_overlay" in self.settings:
+                       print "\nWARNING !!!!!"
+                       print "\tUsing an overlay for earlier stages could 
cause build issues."
+                       print "\tIf you break it, you buy it. Don't complain to 
us about it."
+                       print "\tDont say we did not warn you\n"
+
+       def set_cleanables(self):
+               StageBase.set_cleanables(self)
diff --git a/catalyst/targets/stage3_target.py 
b/catalyst/targets/stage3_target.py
deleted file mode 100644
index 103242d..0000000
--- a/catalyst/targets/stage3_target.py
+++ /dev/null
@@ -1,27 +0,0 @@
-"""
-stage3 target, builds upon previous stage2/stage3 tarball
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-from catalyst.base.stagebase import StageBase
-
-
-class stage3_target(StageBase):
-       """
-       Builder class for a stage3 installation tarball build.
-       """
-       def __init__(self,spec,addlargs):
-               self.required_values=[]
-               self.valid_values=[]
-               StageBase.__init__(self,spec,addlargs)
-
-       def set_portage_overlay(self):
-               StageBase.set_portage_overlay(self)
-               if "portage_overlay" in self.settings:
-                       print "\nWARNING !!!!!"
-                       print "\tUsing an overlay for earlier stages could 
cause build issues."
-                       print "\tIf you break it, you buy it. Don't complain to 
us about it."
-                       print "\tDont say we did not warn you\n"
-
-       def set_cleanables(self):
-               StageBase.set_cleanables(self)
diff --git a/catalyst/targets/stage4.py b/catalyst/targets/stage4.py
new file mode 100644
index 0000000..4aef33f
--- /dev/null
+++ b/catalyst/targets/stage4.py
@@ -0,0 +1,38 @@
+"""
+stage4 target, builds upon previous stage3/stage4 tarball
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+from catalyst.base.stagebase import StageBase
+
+
+class stage4(StageBase):
+       """
+       Builder class for stage4.
+       """
+       def __init__(self,spec,addlargs):
+               self.required_values=["stage4/packages"]
+               self.valid_values=self.required_values[:]
+               self.valid_values.extend(["stage4/use","boot/kernel",\
+                               "stage4/root_overlay","stage4/fsscript",\
+                               "stage4/gk_mainargs","splash_theme",\
+                               
"portage_overlay","stage4/rcadd","stage4/rcdel",\
+                               
"stage4/linuxrc","stage4/unmerge","stage4/rm","stage4/empty"])
+               StageBase.__init__(self,spec,addlargs)
+
+       def set_cleanables(self):
+               self.settings["cleanables"]=["/var/tmp/*","/tmp/*"]
+
+       def set_action_sequence(self):
+               self.settings["action_sequence"]=["unpack","unpack_snapshot",\
+                                       
"config_profile_link","setup_confdir","portage_overlay",\
+                                       
"bind","chroot_setup","setup_environment","build_packages",\
+                                       
"build_kernel","bootloader","root_overlay","fsscript",\
+                                       
"preclean","rcupdate","unmerge","unbind","remove","empty",\
+                                       "clean"]
+
+#              if "TARBALL" in self.settings or \
+#                      "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")
diff --git a/catalyst/targets/stage4_target.py 
b/catalyst/targets/stage4_target.py
deleted file mode 100644
index 4dbdb45..0000000
--- a/catalyst/targets/stage4_target.py
+++ /dev/null
@@ -1,38 +0,0 @@
-"""
-stage4 target, builds upon previous stage3/stage4 tarball
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-from catalyst.base.stagebase import StageBase
-
-
-class stage4_target(StageBase):
-       """
-       Builder class for stage4.
-       """
-       def __init__(self,spec,addlargs):
-               self.required_values=["stage4/packages"]
-               self.valid_values=self.required_values[:]
-               self.valid_values.extend(["stage4/use","boot/kernel",\
-                               "stage4/root_overlay","stage4/fsscript",\
-                               "stage4/gk_mainargs","splash_theme",\
-                               
"portage_overlay","stage4/rcadd","stage4/rcdel",\
-                               
"stage4/linuxrc","stage4/unmerge","stage4/rm","stage4/empty"])
-               StageBase.__init__(self,spec,addlargs)
-
-       def set_cleanables(self):
-               self.settings["cleanables"]=["/var/tmp/*","/tmp/*"]
-
-       def set_action_sequence(self):
-               self.settings["action_sequence"]=["unpack","unpack_snapshot",\
-                                       
"config_profile_link","setup_confdir","portage_overlay",\
-                                       
"bind","chroot_setup","setup_environment","build_packages",\
-                                       
"build_kernel","bootloader","root_overlay","fsscript",\
-                                       
"preclean","rcupdate","unmerge","unbind","remove","empty",\
-                                       "clean"]
-
-#              if "TARBALL" in self.settings or \
-#                      "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")
diff --git a/catalyst/targets/tinderbox.py b/catalyst/targets/tinderbox.py
new file mode 100644
index 0000000..4cb7537
--- /dev/null
+++ b/catalyst/targets/tinderbox.py
@@ -0,0 +1,47 @@
+"""
+Tinderbox target
+"""
+# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
+
+import os
+
+from catalyst.support import cmd, list_bashify, CatalystError
+from catalyst.base.stagebase import StageBase
+
+
+class tinderbox(StageBase):
+       """
+       Builder class for the tinderbox target
+       """
+       def __init__(self,spec,addlargs):
+               self.required_values=["tinderbox/packages"]
+               self.valid_values=self.required_values[:]
+               self.valid_values.extend(["tinderbox/use"])
+               StageBase.__init__(self,spec,addlargs)
+
+       def run_local(self):
+               # tinderbox
+               # example call: "grp.sh run xmms vim sys-apps/gleep"
+               try:
+                       if os.path.exists(self.settings["controller_file"]):
+                           cmd(self.settings["controller_file"]+" run "+\
+                               
list_bashify(self.settings["tinderbox/packages"]),"run script 
failed.",env=self.env)
+
+               except CatalystError:
+                       self.unbind()
+                       raise CatalystError,"Tinderbox aborting due to error."
+
+       def set_cleanables(self):
+               self.settings['cleanables'] = [
+                       '/etc/resolv.conf',
+                       '/var/tmp/*',
+                       '/root/*',
+                       self.settings['portdir'],
+                       ]
+
+       def set_action_sequence(self):
+               #Default action sequence for run method
+               self.settings["action_sequence"]=["unpack","unpack_snapshot",\
+                             
"config_profile_link","setup_confdir","bind","chroot_setup",\
+                             
"setup_environment","run_local","preclean","unbind","clean",\
+                             "clear_autoresume"]
diff --git a/catalyst/targets/tinderbox_target.py 
b/catalyst/targets/tinderbox_target.py
deleted file mode 100644
index 0c389e6..0000000
--- a/catalyst/targets/tinderbox_target.py
+++ /dev/null
@@ -1,47 +0,0 @@
-"""
-Tinderbox target
-"""
-# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
-
-import os
-
-from catalyst.support import cmd, list_bashify, CatalystError
-from catalyst.base.stagebase import StageBase
-
-
-class tinderbox_target(StageBase):
-       """
-       Builder class for the tinderbox target
-       """
-       def __init__(self,spec,addlargs):
-               self.required_values=["tinderbox/packages"]
-               self.valid_values=self.required_values[:]
-               self.valid_values.extend(["tinderbox/use"])
-               StageBase.__init__(self,spec,addlargs)
-
-       def run_local(self):
-               # tinderbox
-               # example call: "grp.sh run xmms vim sys-apps/gleep"
-               try:
-                       if os.path.exists(self.settings["controller_file"]):
-                           cmd(self.settings["controller_file"]+" run "+\
-                               
list_bashify(self.settings["tinderbox/packages"]),"run script 
failed.",env=self.env)
-
-               except CatalystError:
-                       self.unbind()
-                       raise CatalystError,"Tinderbox aborting due to error."
-
-       def set_cleanables(self):
-               self.settings['cleanables'] = [
-                       '/etc/resolv.conf',
-                       '/var/tmp/*',
-                       '/root/*',
-                       self.settings['portdir'],
-                       ]
-
-       def set_action_sequence(self):
-               #Default action sequence for run method
-               self.settings["action_sequence"]=["unpack","unpack_snapshot",\
-                             
"config_profile_link","setup_confdir","bind","chroot_setup",\
-                             
"setup_environment","run_local","preclean","unbind","clean",\
-                             "clear_autoresume"]
-- 
2.1.0


Reply via email to