User info about runscript and archscript. Added checks for processes running i
[catalyst.git] / modules / livecd_stage2_target.py
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 $
4
5 """
6 Builder class for a LiveCD stage2 build.
7 """
8
9 import os,string,types,stat,shutil
10 from catalyst_support import *
11 from generic_stage_target import *
12
13 class livecd_stage2_target(generic_stage_target):
14         def __init__(self,spec,addlargs):
15                 self.required_values=["boot/kernel"]
16                 
17                 self.valid_values=[]
18                 
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"])
26                 
27                 generic_stage_target.__init__(self,spec,addlargs)
28                 if not self.settings.has_key("livecd/type"):
29                     self.settings["livecd/type"] = "generic-livecd"
30
31                 file_locate(self.settings, ["cdtar","controller_file"])
32         
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"])
38             else:
39                 self.settings["source_path"]=self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]
40         
41         def set_spec_prefix(self):
42             self.settings["spec_prefix"]="livecd"
43
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..."
49                 else:
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"])
57
58         def unpack(self):
59                 if not os.path.isdir(self.settings["source_path"]):
60                         generic_stage_target.unpack(self)
61                 else:
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..."
65                     else:
66                             if not os.path.exists(self.settings["chroot_path"]):
67                                     os.makedirs(self.settings["chroot_path"])
68                                 
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")
73
74         def run_local(self):
75                 # what modules do we want to blacklist?
76                 if self.settings.has_key("livecd/modblacklist"):
77                         try:
78                                 myf=open(self.settings["chroot_path"]+"/etc/hotplug/blacklist","a")
79                         except:
80                                 self.unbind()
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"]:
84                                 myf.write("\n"+x)
85                         myf.close()
86
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"]
95
96 def register(foo):
97         foo.update({"livecd-stage2":livecd_stage2_target})
98         return foo