Rewrote TODO to make it clearer and added a ton of new items to it.
[catalyst.git] / modules / netboot_target.py
1
2 """
3 Builder class for a netboot build.
4 """
5
6 import os,string,types
7 from catalyst_support import *
8 from generic_stage_target import *
9
10 class netboot_target(generic_stage_target):
11         def __init__(self,spec,addlargs):
12                 self.valid_values = [
13                         "netboot/kernel/sources",
14                         "netboot/kernel/config",
15                         "netboot/kernel/prebuilt",
16
17                         "netboot/busybox_config",
18
19                         "netboot/extra_files",
20                         "netboot/packages"
21                 ]
22                 self.required_values=[]
23                         
24                 try:
25                         if addlargs.has_key("netboot/packages"):
26                                 if type(addlargs["netboot/packages"]) == types.StringType:
27                                         loopy=[addlargs["netboot/packages"]]
28                                 else:
29                                         loopy=addlargs["netboot/packages"]
30                         
31                 #       for x in loopy:
32                 #               self.required_values.append("netboot/packages/"+x+"/files")
33                 except:
34                         raise CatalystError,"configuration error in netboot/packages."
35                 
36                 
37                 
38
39                 generic_stage_target.__init__(self,spec,addlargs)
40                 self.set_build_kernel_vars(addlargs)
41                 if addlargs.has_key("netboot/busybox_config"):
42                         file_locate(self.settings, ["netboot/busybox_config"])
43
44                 # Custom Kernel Tarball --- use that instead ...
45
46                 # unless the user wants specific CFLAGS/CXXFLAGS, let's use -Os
47                 
48                 for envvar in "CFLAGS", "CXXFLAGS":
49                         if not os.environ.has_key(envvar) and not addlargs.has_key(envvar):
50                                 self.settings[envvar] = "-Os -pipe"
51         
52
53         def set_root_path(self):
54                 # ROOT= variable for emerges
55                 self.settings["root_path"]=normpath("/tmp/image")
56                 print "netboot root path is "+self.settings["root_path"]
57
58 #       def build_packages(self):
59 #               # build packages
60 #               if self.settings.has_key("netboot/packages"):
61 #                       mypack=list_bashify(self.settings["netboot/packages"])
62 #               try:
63 #                       cmd("/bin/bash "+self.settings["controller_file"]+" packages "+mypack,env=self.env)
64 #               except CatalystError:
65 #                       self.unbind()
66 #                       raise CatalystError,"netboot build aborting due to error."
67         
68         def build_busybox(self):
69                 # build busybox
70                 if self.settings.has_key("netboot/busybox_config"):
71                         mycmd = self.settings["netboot/busybox_config"]
72                 else:
73                         mycmd = ""
74                 try:
75                         cmd("/bin/bash "+self.settings["controller_file"]+" busybox "+ mycmd,env=self.env)
76                 except CatalystError:
77                         self.unbind()
78                         raise CatalystError,"netboot build aborting due to error."
79         
80
81         def copy_files_to_image(self):
82                 # create image
83                 myfiles=[]
84                 if self.settings.has_key("netboot/packages"):
85                         if type(self.settings["netboot/packages"]) == types.StringType:
86                                 loopy=[self.settings["netboot/packages"]]
87                         else:
88                                 loopy=self.settings["netboot/packages"]
89                 
90                 for x in loopy:
91                         if self.settings.has_key("netboot/packages/"+x+"/files"):
92                             if type(self.settings["netboot/packages/"+x+"/files"]) == types.ListType:
93                                     myfiles.extend(self.settings["netboot/packages/"+x+"/files"])
94                             else:
95                                     myfiles.append(self.settings["netboot/packages/"+x+"/files"])
96
97                 if self.settings.has_key("netboot/extra_files"):
98                         if type(self.settings["netboot/extra_files"]) == types.ListType:
99                                 myfiles.extend(self.settings["netboot/extra_files"])
100                         else:
101                                 myfiles.append(self.settings["netboot/extra_files"])
102
103                 try:
104                         cmd("/bin/bash "+self.settings["controller_file"]+\
105                                 " image " + list_bashify(myfiles),env=self.env)
106                 except CatalystError:
107                         self.unbind()
108                         raise CatalystError,"netboot build aborting due to error."
109
110
111         def create_netboot_files(self):
112                 # finish it all up
113                 try:
114                         cmd("/bin/bash "+self.settings["controller_file"]+" finish",env=self.env)
115                 except CatalystError:
116                         self.unbind()
117                         raise CatalystError,"netboot build aborting due to error."
118
119                 # end
120                 print "netboot: build finished !"
121
122
123         def set_action_sequence(self):
124             self.settings["action_sequence"]=["unpack","unpack_snapshot",
125                                         "config_profile_link","setup_confdir","bind","chroot_setup",\
126                                                 "setup_environment","build_packages","build_busybox",\
127                                                 "build_kernel","copy_files_to_image",\
128                                                 "clean","create_netboot_files","unbind","clear_autoresume"]
129
130 def register(foo):
131         foo.update({"netboot":netboot_target})
132         return foo