3 Builder class for a netboot build, version 2
7 from catalyst_support import *
8 from generic_stage_target import *
10 class netboot2_target(generic_stage_target):
11 def __init__(self,spec,addlargs):
12 self.required_values=[
18 self.valid_values=self.required_values[:]
19 self.valid_values.extend(self.required_values)
20 self.valid_values.extend(["netboot2/extra_files"])
23 if addlargs.has_key("netboot2/packages"):
24 if type(addlargs["netboot2/packages"]) == types.StringType:
25 loopy=[addlargs["netboot2/packages"]]
27 loopy=addlargs["netboot2/packages"]
30 self.valid_values.append("netboot2/packages/"+x+"/files")
32 raise CatalystError,"configuration error in netboot2/packages."
36 generic_stage_target.__init__(self,spec,addlargs)
37 self.set_build_kernel_vars()
39 # Merge packages into the buildroot, and pick out certain files to place in
41 self.settings["merge_path"]=normpath("/tmp/image")
43 def set_dest_path(self):
44 if self.settings.has_key("merge_path"):
45 self.settings["destpath"]=normpath(self.settings["chroot_path"]+self.settings["merge_path"])
47 self.settings["destpath"]=normpath(self.settings["chroot_path"])
49 def set_target_path(self):
50 self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+\
51 self.settings["target_subpath"]+"/")
52 if self.settings.has_key("AUTORESUME") \
53 and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
54 print "Resume point detected, skipping target path setup operation..."
56 # first clean up any existing target stuff
57 if os.path.isfile(self.settings["target_path"]):
58 cmd("rm -f "+self.settings["target_path"], \
59 "Could not remove existing file: "+self.settings["target_path"],env=self.env)
60 touch(self.settings["autoresume_path"]+"setup_target_path")
62 if not os.path.exists(self.settings["storedir"]+"/builds/"):
63 os.makedirs(self.settings["storedir"]+"/builds/")
65 def copy_files_to_image(self):
66 # copies specific files from the buildroot to merge_path
69 # check for autoresume point
70 if self.settings.has_key("AUTORESUME") \
71 and os.path.exists(self.settings["autoresume_path"]+"copy_files_to_image"):
72 print "Resume point detected, skipping target path setup operation..."
74 if self.settings.has_key("netboot2/packages"):
75 if type(self.settings["netboot2/packages"]) == types.StringType:
76 loopy=[self.settings["netboot2/packages"]]
78 loopy=self.settings["netboot2/packages"]
81 if self.settings.has_key("netboot2/packages/"+x+"/files"):
82 if type(self.settings["netboot2/packages/"+x+"/files"]) == types.ListType:
83 myfiles.extend(self.settings["netboot2/packages/"+x+"/files"])
85 myfiles.append(self.settings["netboot2/packages/"+x+"/files"])
87 if self.settings.has_key("netboot2/extra_files"):
88 if type(self.settings["netboot2/extra_files"]) == types.ListType:
89 myfiles.extend(self.settings["netboot2/extra_files"])
91 myfiles.append(self.settings["netboot2/extra_files"])
94 cmd("/bin/bash "+self.settings["controller_file"]+\
95 " image " + list_bashify(myfiles),env=self.env)
98 raise CatalystError,"Failed to copy files to image!"
100 touch(self.settings["autoresume_path"]+"copy_files_to_image")
103 def move_kernels(self):
104 # we're done, move the kernels to builds/*
105 # no auto resume here as we always want the
106 # freshest images moved
108 cmd("/bin/bash "+self.settings["controller_file"]+\
109 " final",env=self.env)
110 print ">>> Netboot Build Finished!"
111 except CatalystError:
113 raise CatalystError,"Failed to move kernel images!"
116 def set_action_sequence(self):
117 self.settings["action_sequence"]=["unpack","unpack_snapshot","config_profile_link",
118 "setup_confdir","bind","chroot_setup",\
119 "setup_environment","build_packages","root_overlay",\
120 "copy_files_to_image","build_kernel","move_kernels",\
121 "unbind","clean","clear_autoresume"]
124 foo.update({"netboot2":netboot2_target})