1 # Copyright 1999-2004 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo/src/catalyst/modules/livecd_stage2_target.py,v 1.42 2005/05/03 14:58:52 rocket Exp $
6 Builder class for a LiveCD stage2 build.
9 import os,string,types,stat,shutil
10 from catalyst_support import *
11 from generic_stage_target import *
13 class livecd_stage2_target(generic_stage_target):
14 def __init__(self,spec,addlargs):
15 self.required_values=["boot/kernel"]
19 self.valid_values.extend(self.required_values)
20 self.valid_values.extend(["livecd/cdtar","livecd/empty","livecd/rm",\
21 "livecd/unmerge","livecd/iso","livecd/gk_mainargs","livecd/type",\
22 "livecd/motd","livecd/overlay","livecd/modblacklist","livecd/splash_theme",\
23 "livecd/rcadd","livecd/rcdel","livecd/fsscript","livecd/xinitrc",\
24 "livecd/root_overlay","livecd/devmanager","livecd/splash_type",\
25 "gamecd/conf","livecd/users","portage_overlay","livecd/cdfstype"])
27 generic_stage_target.__init__(self,spec,addlargs)
28 if not self.settings.has_key("livecd/type"):
29 self.settings["livecd/type"] = "generic-livecd"
31 file_locate(self.settings, ["cdtar","controller_file"])
33 def set_source_path(self):
34 self.settings["source_path"]=self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2"
35 if os.path.isfile(self.settings["source_path"]):
36 if os.path.exists(self.settings["source_path"]):
37 self.settings["source_path_md5sum"]=calc_md5(self.settings["source_path"])
39 self.settings["source_path"]=self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]
41 def set_spec_prefix(self):
42 self.settings["spec_prefix"]="livecd"
44 def set_target_path(self):
45 self.settings["target_path"]=self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]
46 if self.settings.has_key("AUTORESUME") \
47 and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
48 print "Resume point detected, skipping target path setup operation..."
50 # first clean up any existing target stuff
51 if os.path.isdir(self.settings["target_path"]):
52 cmd("rm -rf "+self.settings["target_path"],
53 "Could not remove existing directory: "+self.settings["target_path"])
54 touch(self.settings["autoresume_path"]+"setup_target_path")
55 if not os.path.exists(self.settings["target_path"]):
56 os.makedirs(self.settings["target_path"])
59 if not os.path.isdir(self.settings["source_path"]):
60 generic_stage_target.unpack(self)
62 if self.settings.has_key("AUTORESUME") \
63 and os.path.exists(self.settings["autoresume_path"]+"unpack"):
64 print "Resume point detected, skipping unpack operation..."
66 if not os.path.exists(self.settings["chroot_path"]):
67 os.makedirs(self.settings["chroot_path"])
69 print "Copying livecd-stage1 result to new livecd-stage2 work directory..."
70 cmd("rsync -a --delete "+self.settings["source_path"]+"/* "+self.settings["chroot_path"],\
71 "Error copying initial livecd-stage2")
72 touch(self.settings["autoresume_path"]+"unpack")
75 # what modules do we want to blacklist?
76 if self.settings.has_key("livecd/modblacklist"):
78 myf=open(self.settings["chroot_path"]+"/etc/hotplug/blacklist","a")
81 raise CatalystError,"Couldn't open "+self.settings["chroot_path"]+"/etc/hotplug/blacklist."
82 myf.write("\n#Added by Catalyst:")
83 for x in self.settings["livecd/modblacklist"]:
87 def set_action_sequence(self):
88 self.settings["action_sequence"]=["dir_setup","unpack","unpack_snapshot",\
89 "config_profile_link","setup_confdir","portage_overlay",\
90 "bind","chroot_setup","setup_environment","run_local",\
91 "build_kernel","bootloader","preclean","livecd_update",
92 "root_overlay","fsscript","rcupdate","unmerge",\
93 "unbind","remove","empty","target_setup",\
94 "setup_overlay","create_iso","clear_autoresume"]
97 foo.update({"livecd-stage2":livecd_stage2_target})