|
|
class netboot2_target(generic_stage_target): | class netboot2_target(generic_stage_target): |
def __init__(self,spec,addlargs): | def __init__(self,spec,addlargs): |
self.required_values=[ | self.required_values=[ |
"boot/kernel", |
"boot/kernel" |
"netboot2/builddate", |
|
"netboot2/packages", |
|
"netboot2/use" |
|
] | ] |
self.valid_values=self.required_values[:] | self.valid_values=self.required_values[:] |
self.valid_values.extend(self.required_values) |
self.valid_values.extend([ |
self.valid_values.extend(["netboot2/extra_files"]) |
"netboot2/packages", |
|
"netboot2/use", |
|
"netboot2/packages/files", |
|
"netboot2/overlay" |
|
]) |
| |
try: |
|
if addlargs.has_key("netboot2/packages"): |
|
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." |
|
|
|
|
|
|
|
generic_stage_target.__init__(self,spec,addlargs) | generic_stage_target.__init__(self,spec,addlargs) |
self.set_build_kernel_vars() | self.set_build_kernel_vars() |
|
self.settings["merge_path"]=normpath("/tmp/image/") |
| |
# Merge packages into the buildroot, and pick out certain files to place in |
|
# /tmp/image |
|
self.settings["merge_path"]=normpath("/tmp/image") |
|
|
|
def set_dest_path(self): |
|
if self.settings.has_key("merge_path"): |
|
self.settings["destpath"]=normpath(self.settings["chroot_path"]+self.settings["merge_path"]) |
|
else: |
|
self.settings["destpath"]=normpath(self.settings["chroot_path"]) |
|
|
|
def set_target_path(self): | def set_target_path(self): |
self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+\ | self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+\ |
self.settings["target_subpath"]+"/") | self.settings["target_subpath"]+"/") |
|
|
and os.path.exists(self.settings["autoresume_path"]+"copy_files_to_image"): | and os.path.exists(self.settings["autoresume_path"]+"copy_files_to_image"): |
print "Resume point detected, skipping target path setup operation..." | print "Resume point detected, skipping target path setup operation..." |
else: | else: |
if self.settings.has_key("netboot2/packages"): |
if self.settings.has_key("netboot2/packages/files"): |
if type(self.settings["netboot2/packages"]) == types.StringType: |
if type(self.settings["netboot2/packages/files"]) == types.ListType: |
loopy=[self.settings["netboot2/packages"]] |
myfiles.extend(self.settings["netboot2/packages/files"]) |
else: | else: |
loopy=self.settings["netboot2/packages"] |
myfiles.append([self.settings["netboot2/packages/files"]]) |
|
|
for x in loopy: |
|
if self.settings.has_key("netboot2/packages/"+x+"/files"): |
|
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 self.settings.has_key("netboot2/extra_files"): |
|
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: | try: |
cmd("/bin/bash "+self.settings["controller_file"]+\ | cmd("/bin/bash "+self.settings["controller_file"]+\ |
" image " + list_bashify(myfiles),env=self.env) | " image " + list_bashify(myfiles),env=self.env) |
|
|
| |
touch(self.settings["autoresume_path"]+"copy_files_to_image") | touch(self.settings["autoresume_path"]+"copy_files_to_image") |
| |
|
def setup_overlay(self): |
|
if self.settings.has_key("AUTORESUME") \ |
|
and os.path.exists(self.settings["autoresume_path"]+"setup_overlay"): |
|
print "Resume point detected, skipping setup_overlay operation..." |
|
else: |
|
if self.settings.has_key("netboot2/overlay"): |
|
for x in self.settings["netboot2/overlay"]: |
|
if os.path.exists(x): |
|
cmd("rsync -a "+x+"/ "+\ |
|
self.settings["chroot_path"], "netboot2/overlay: "+x+" copy failed.",env=self.env) |
|
touch(self.settings["autoresume_path"]+"setup_overlay") |
| |
def move_kernels(self): | def move_kernels(self): |
# we're done, move the kernels to builds/* | # we're done, move the kernels to builds/* |
|
|
self.unbind() | self.unbind() |
raise CatalystError,"Failed to move kernel images!" | raise CatalystError,"Failed to move kernel images!" |
| |
|
def remove(self): |
|
if self.settings.has_key("AUTORESUME") \ |
|
and os.path.exists(self.settings["autoresume_path"]+"remove"): |
|
print "Resume point detected, skipping remove operation..." |
|
else: |
|
if self.settings.has_key(self.settings["spec_prefix"]+"/rm"): |
|
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 self.settings.has_key("AUTORESUME") \ |
|
and os.path.exists(self.settings["autoresume_path"]+"empty"): |
|
print "Resume point detected, skipping empty operation..." |
|
else: |
|
if self.settings.has_key("netboot2/empty"): |
|
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 |
|
os.system("rm -rf " + self.settings["chroot_path"] + self.settings["merge_path"] + x + "/*") |
|
touch(self.settings["autoresume_path"]+"empty") |
|
|
def set_action_sequence(self): | def set_action_sequence(self): |
self.settings["action_sequence"]=["unpack","unpack_snapshot","config_profile_link", | self.settings["action_sequence"]=["unpack","unpack_snapshot","config_profile_link", |
"setup_confdir","bind","chroot_setup",\ | "setup_confdir","bind","chroot_setup",\ |
"setup_environment","build_packages","root_overlay",\ | "setup_environment","build_packages","root_overlay",\ |
"copy_files_to_image","build_kernel","move_kernels",\ |
"copy_files_to_image","setup_overlay","build_kernel","move_kernels",\ |
"unbind","clean","clear_autoresume"] |
"remove","empty","unbind","clean","clear_autoresume"] |
| |
def register(foo): | def register(foo): |
foo.update({"netboot2":netboot2_target}) | foo.update({"netboot2":netboot2_target}) |