Gentoo Archives: gentoo-catalyst

From: Brian Dolbec <dolsen@g.o>
To: gentoo-catalyst@l.g.o
Subject: [gentoo-catalyst] [PATCH 3/3] [3 of 3] Rename all target .py files and classes without _target in them.
Date: Thu, 11 Sep 2014 03:51:02
Message-Id: 1410407450-2888-4-git-send-email-dolsen@gentoo.org
In Reply to: [gentoo-catalyst] [PATCH 0/3] Code breakup & restructuring by Brian Dolbec
1 This is so they are the named the same as the target .sh files
2 and work with the now simplified module loading.
3 ---
4 catalyst/targets/embedded.py | 47 +++++++++
5 catalyst/targets/embedded_target.py | 47 ---------
6 catalyst/targets/grp.py | 120 ++++++++++++++++++++++
7 catalyst/targets/grp_target.py | 120 ----------------------
8 catalyst/targets/livecd_stage1.py | 78 ++++++++++++++
9 catalyst/targets/livecd_stage1_target.py | 78 --------------
10 catalyst/targets/livecd_stage2.py | 147 +++++++++++++++++++++++++++
11 catalyst/targets/livecd_stage2_target.py | 147 ---------------------------
12 catalyst/targets/netboot.py | 129 +++++++++++++++++++++++
13 catalyst/targets/netboot2.py | 169 +++++++++++++++++++++++++++++++
14 catalyst/targets/netboot2_target.py | 169 -------------------------------
15 catalyst/targets/netboot_target.py | 129 -----------------------
16 catalyst/targets/stage1.py | 96 ++++++++++++++++++
17 catalyst/targets/stage1_target.py | 96 ------------------
18 catalyst/targets/stage2.py | 64 ++++++++++++
19 catalyst/targets/stage2_target.py | 64 ------------
20 catalyst/targets/stage3.py | 27 +++++
21 catalyst/targets/stage3_target.py | 27 -----
22 catalyst/targets/stage4.py | 38 +++++++
23 catalyst/targets/stage4_target.py | 38 -------
24 catalyst/targets/tinderbox.py | 47 +++++++++
25 catalyst/targets/tinderbox_target.py | 47 ---------
26 22 files changed, 962 insertions(+), 962 deletions(-)
27 create mode 100644 catalyst/targets/embedded.py
28 delete mode 100644 catalyst/targets/embedded_target.py
29 create mode 100644 catalyst/targets/grp.py
30 delete mode 100644 catalyst/targets/grp_target.py
31 create mode 100644 catalyst/targets/livecd_stage1.py
32 delete mode 100644 catalyst/targets/livecd_stage1_target.py
33 create mode 100644 catalyst/targets/livecd_stage2.py
34 delete mode 100644 catalyst/targets/livecd_stage2_target.py
35 create mode 100644 catalyst/targets/netboot.py
36 create mode 100644 catalyst/targets/netboot2.py
37 delete mode 100644 catalyst/targets/netboot2_target.py
38 delete mode 100644 catalyst/targets/netboot_target.py
39 create mode 100644 catalyst/targets/stage1.py
40 delete mode 100644 catalyst/targets/stage1_target.py
41 create mode 100644 catalyst/targets/stage2.py
42 delete mode 100644 catalyst/targets/stage2_target.py
43 create mode 100644 catalyst/targets/stage3.py
44 delete mode 100644 catalyst/targets/stage3_target.py
45 create mode 100644 catalyst/targets/stage4.py
46 delete mode 100644 catalyst/targets/stage4_target.py
47 create mode 100644 catalyst/targets/tinderbox.py
48 delete mode 100644 catalyst/targets/tinderbox_target.py
49
50 diff --git a/catalyst/targets/embedded.py b/catalyst/targets/embedded.py
51 new file mode 100644
52 index 0000000..3309278
53 --- /dev/null
54 +++ b/catalyst/targets/embedded.py
55 @@ -0,0 +1,47 @@
56 +"""
57 +Enbedded target, similar to the stage2 target, builds upon a stage2 tarball.
58 +
59 +A stage2 tarball is unpacked, but instead
60 +of building a stage3, it emerges @system into another directory
61 +inside the stage2 system. This way, we do not have to emerge GCC/portage
62 +into the staged system.
63 +It may sound complicated but basically it runs
64 +ROOT=/tmp/submerge emerge --something foo bar .
65 +"""
66 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
67 +
68 +
69 +from catalyst.support import normpath
70 +
71 +from catalyst.base.stagebase import StageBase
72 +
73 +class embedded(StageBase):
74 + """
75 + Builder class for embedded target
76 + """
77 + def __init__(self,spec,addlargs):
78 + self.required_values=[]
79 + self.valid_values=[]
80 + self.valid_values.extend(["embedded/empty","embedded/rm","embedded/unmerge","embedded/fs-prepare","embedded/fs-finish","embedded/mergeroot","embedded/packages","embedded/fs-type","embedded/runscript","boot/kernel","embedded/linuxrc"])
81 + self.valid_values.extend(["embedded/use"])
82 + if "embedded/fs-type" in addlargs:
83 + self.valid_values.append("embedded/fs-ops")
84 +
85 + StageBase.__init__(self,spec,addlargs)
86 + self.set_build_kernel_vars(addlargs)
87 +
88 + def set_action_sequence(self):
89 + self.settings["action_sequence"]=["dir_setup","unpack","unpack_snapshot",\
90 + "config_profile_link","setup_confdir",\
91 + "portage_overlay","bind","chroot_setup",\
92 + "setup_environment","build_kernel","build_packages",\
93 + "bootloader","root_overlay","fsscript","unmerge",\
94 + "unbind","remove","empty","clean","capture","clear_autoresume"]
95 +
96 + def set_stage_path(self):
97 + self.settings["stage_path"]=normpath(self.settings["chroot_path"]+"/tmp/mergeroot")
98 + print "embedded stage path is "+self.settings["stage_path"]
99 +
100 + def set_root_path(self):
101 + self.settings["root_path"]=normpath("/tmp/mergeroot")
102 + print "embedded root path is "+self.settings["root_path"]
103 diff --git a/catalyst/targets/embedded_target.py b/catalyst/targets/embedded_target.py
104 deleted file mode 100644
105 index aee0f00..0000000
106 --- a/catalyst/targets/embedded_target.py
107 +++ /dev/null
108 @@ -1,47 +0,0 @@
109 -"""
110 -Enbedded target, similar to the stage2 target, builds upon a stage2 tarball.
111 -
112 -A stage2 tarball is unpacked, but instead
113 -of building a stage3, it emerges @system into another directory
114 -inside the stage2 system. This way, we do not have to emerge GCC/portage
115 -into the staged system.
116 -It may sound complicated but basically it runs
117 -ROOT=/tmp/submerge emerge --something foo bar .
118 -"""
119 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
120 -
121 -
122 -from catalyst.support import normpath
123 -
124 -from catalyst.base.stagebase import StageBase
125 -
126 -class embedded_target(StageBase):
127 - """
128 - Builder class for embedded target
129 - """
130 - def __init__(self,spec,addlargs):
131 - self.required_values=[]
132 - self.valid_values=[]
133 - self.valid_values.extend(["embedded/empty","embedded/rm","embedded/unmerge","embedded/fs-prepare","embedded/fs-finish","embedded/mergeroot","embedded/packages","embedded/fs-type","embedded/runscript","boot/kernel","embedded/linuxrc"])
134 - self.valid_values.extend(["embedded/use"])
135 - if "embedded/fs-type" in addlargs:
136 - self.valid_values.append("embedded/fs-ops")
137 -
138 - StageBase.__init__(self,spec,addlargs)
139 - self.set_build_kernel_vars(addlargs)
140 -
141 - def set_action_sequence(self):
142 - self.settings["action_sequence"]=["dir_setup","unpack","unpack_snapshot",\
143 - "config_profile_link","setup_confdir",\
144 - "portage_overlay","bind","chroot_setup",\
145 - "setup_environment","build_kernel","build_packages",\
146 - "bootloader","root_overlay","fsscript","unmerge",\
147 - "unbind","remove","empty","clean","capture","clear_autoresume"]
148 -
149 - def set_stage_path(self):
150 - self.settings["stage_path"]=normpath(self.settings["chroot_path"]+"/tmp/mergeroot")
151 - print "embedded stage path is "+self.settings["stage_path"]
152 -
153 - def set_root_path(self):
154 - self.settings["root_path"]=normpath("/tmp/mergeroot")
155 - print "embedded root path is "+self.settings["root_path"]
156 diff --git a/catalyst/targets/grp.py b/catalyst/targets/grp.py
157 new file mode 100644
158 index 0000000..0075714
159 --- /dev/null
160 +++ b/catalyst/targets/grp.py
161 @@ -0,0 +1,120 @@
162 +"""
163 +Gentoo Reference Platform (GRP) target
164 +"""
165 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
166 +
167 +import os
168 +import types
169 +import glob
170 +
171 +
172 +from catalyst.support import (CatalystError, normpath,
173 + touch, cmd, list_bashify)
174 +
175 +from catalyst.base.stagebase import StageBase
176 +
177 +
178 +class grp(StageBase):
179 + """
180 + The builder class for GRP (Gentoo Reference Platform) builds.
181 + """
182 + def __init__(self,spec,addlargs):
183 + self.required_values=["version_stamp","target","subarch",\
184 + "rel_type","profile","snapshot","source_subpath"]
185 +
186 + self.valid_values=self.required_values[:]
187 + self.valid_values.extend(["grp/use"])
188 + if "grp" not in addlargs:
189 + raise CatalystError,"Required value \"grp\" not specified in spec."
190 +
191 + self.required_values.extend(["grp"])
192 + if type(addlargs["grp"])==types.StringType:
193 + addlargs["grp"]=[addlargs["grp"]]
194 +
195 + if "grp/use" in addlargs:
196 + if type(addlargs["grp/use"])==types.StringType:
197 + addlargs["grp/use"]=[addlargs["grp/use"]]
198 +
199 + for x in addlargs["grp"]:
200 + self.required_values.append("grp/"+x+"/packages")
201 + self.required_values.append("grp/"+x+"/type")
202 +
203 + StageBase.__init__(self,spec,addlargs)
204 +
205 + def set_target_path(self):
206 + self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
207 + if "autoresume" in self.settings["options"] \
208 + and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
209 + print "Resume point detected, skipping target path setup operation..."
210 + else:
211 + # first clean up any existing target stuff
212 + #if os.path.isdir(self.settings["target_path"]):
213 + #cmd("rm -rf "+self.settings["target_path"],
214 + #"Could not remove existing directory: "+self.settings["target_path"],env=self.env)
215 + if not os.path.exists(self.settings["target_path"]):
216 + os.makedirs(self.settings["target_path"])
217 +
218 + touch(self.settings["autoresume_path"]+"setup_target_path")
219 +
220 + def run_local(self):
221 + for pkgset in self.settings["grp"]:
222 + # example call: "grp.sh run pkgset cd1 xmms vim sys-apps/gleep"
223 + mypackages=list_bashify(self.settings["grp/"+pkgset+"/packages"])
224 + try:
225 + cmd(self.settings["controller_file"]+" run "+self.settings["grp/"+pkgset+"/type"]\
226 + +" "+pkgset+" "+mypackages,env=self.env)
227 +
228 + except CatalystError:
229 + self.unbind()
230 + raise CatalystError,"GRP build aborting due to error."
231 +
232 + def set_use(self):
233 + StageBase.set_use(self)
234 + if "use" in self.settings:
235 + self.settings["use"].append("bindist")
236 + else:
237 + self.settings["use"]=["bindist"]
238 +
239 + def set_mounts(self):
240 + self.mounts.append("/tmp/grp")
241 + self.mountmap["/tmp/grp"]=self.settings["target_path"]
242 +
243 + def generate_digests(self):
244 + for pkgset in self.settings["grp"]:
245 + if self.settings["grp/"+pkgset+"/type"] == "pkgset":
246 + destdir=normpath(self.settings["target_path"]+"/"+pkgset+"/All")
247 + print "Digesting files in the pkgset....."
248 + digests=glob.glob(destdir+'/*.DIGESTS')
249 + for i in digests:
250 + if os.path.exists(i):
251 + os.remove(i)
252 +
253 + files=os.listdir(destdir)
254 + #ignore files starting with '.' using list comprehension
255 + files=[filename for filename in files if filename[0] != '.']
256 + for i in files:
257 + if os.path.isfile(normpath(destdir+"/"+i)):
258 + self.gen_contents_file(normpath(destdir+"/"+i))
259 + self.gen_digest_file(normpath(destdir+"/"+i))
260 + else:
261 + destdir=normpath(self.settings["target_path"]+"/"+pkgset)
262 + print "Digesting files in the srcset....."
263 +
264 + digests=glob.glob(destdir+'/*.DIGESTS')
265 + for i in digests:
266 + if os.path.exists(i):
267 + os.remove(i)
268 +
269 + files=os.listdir(destdir)
270 + #ignore files starting with '.' using list comprehension
271 + files=[filename for filename in files if filename[0] != '.']
272 + for i in files:
273 + if os.path.isfile(normpath(destdir+"/"+i)):
274 + #self.gen_contents_file(normpath(destdir+"/"+i))
275 + self.gen_digest_file(normpath(destdir+"/"+i))
276 +
277 + def set_action_sequence(self):
278 + self.settings["action_sequence"]=["unpack","unpack_snapshot",\
279 + "config_profile_link","setup_confdir","portage_overlay","bind","chroot_setup",\
280 + "setup_environment","run_local","unbind",\
281 + "generate_digests","clear_autoresume"]
282 diff --git a/catalyst/targets/grp_target.py b/catalyst/targets/grp_target.py
283 deleted file mode 100644
284 index e3f08a2..0000000
285 --- a/catalyst/targets/grp_target.py
286 +++ /dev/null
287 @@ -1,120 +0,0 @@
288 -"""
289 -Gentoo Reference Platform (GRP) target
290 -"""
291 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
292 -
293 -import os
294 -import types
295 -import glob
296 -
297 -
298 -from catalyst.support import (CatalystError, normpath,
299 - touch, cmd, list_bashify)
300 -
301 -from catalyst.base.stagebase import StageBase
302 -
303 -
304 -class grp_target(StageBase):
305 - """
306 - The builder class for GRP (Gentoo Reference Platform) builds.
307 - """
308 - def __init__(self,spec,addlargs):
309 - self.required_values=["version_stamp","target","subarch",\
310 - "rel_type","profile","snapshot","source_subpath"]
311 -
312 - self.valid_values=self.required_values[:]
313 - self.valid_values.extend(["grp/use"])
314 - if "grp" not in addlargs:
315 - raise CatalystError,"Required value \"grp\" not specified in spec."
316 -
317 - self.required_values.extend(["grp"])
318 - if type(addlargs["grp"])==types.StringType:
319 - addlargs["grp"]=[addlargs["grp"]]
320 -
321 - if "grp/use" in addlargs:
322 - if type(addlargs["grp/use"])==types.StringType:
323 - addlargs["grp/use"]=[addlargs["grp/use"]]
324 -
325 - for x in addlargs["grp"]:
326 - self.required_values.append("grp/"+x+"/packages")
327 - self.required_values.append("grp/"+x+"/type")
328 -
329 - StageBase.__init__(self,spec,addlargs)
330 -
331 - def set_target_path(self):
332 - self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
333 - if "autoresume" in self.settings["options"] \
334 - and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
335 - print "Resume point detected, skipping target path setup operation..."
336 - else:
337 - # first clean up any existing target stuff
338 - #if os.path.isdir(self.settings["target_path"]):
339 - #cmd("rm -rf "+self.settings["target_path"],
340 - #"Could not remove existing directory: "+self.settings["target_path"],env=self.env)
341 - if not os.path.exists(self.settings["target_path"]):
342 - os.makedirs(self.settings["target_path"])
343 -
344 - touch(self.settings["autoresume_path"]+"setup_target_path")
345 -
346 - def run_local(self):
347 - for pkgset in self.settings["grp"]:
348 - # example call: "grp.sh run pkgset cd1 xmms vim sys-apps/gleep"
349 - mypackages=list_bashify(self.settings["grp/"+pkgset+"/packages"])
350 - try:
351 - cmd(self.settings["controller_file"]+" run "+self.settings["grp/"+pkgset+"/type"]\
352 - +" "+pkgset+" "+mypackages,env=self.env)
353 -
354 - except CatalystError:
355 - self.unbind()
356 - raise CatalystError,"GRP build aborting due to error."
357 -
358 - def set_use(self):
359 - StageBase.set_use(self)
360 - if "use" in self.settings:
361 - self.settings["use"].append("bindist")
362 - else:
363 - self.settings["use"]=["bindist"]
364 -
365 - def set_mounts(self):
366 - self.mounts.append("/tmp/grp")
367 - self.mountmap["/tmp/grp"]=self.settings["target_path"]
368 -
369 - def generate_digests(self):
370 - for pkgset in self.settings["grp"]:
371 - if self.settings["grp/"+pkgset+"/type"] == "pkgset":
372 - destdir=normpath(self.settings["target_path"]+"/"+pkgset+"/All")
373 - print "Digesting files in the pkgset....."
374 - digests=glob.glob(destdir+'/*.DIGESTS')
375 - for i in digests:
376 - if os.path.exists(i):
377 - os.remove(i)
378 -
379 - files=os.listdir(destdir)
380 - #ignore files starting with '.' using list comprehension
381 - files=[filename for filename in files if filename[0] != '.']
382 - for i in files:
383 - if os.path.isfile(normpath(destdir+"/"+i)):
384 - self.gen_contents_file(normpath(destdir+"/"+i))
385 - self.gen_digest_file(normpath(destdir+"/"+i))
386 - else:
387 - destdir=normpath(self.settings["target_path"]+"/"+pkgset)
388 - print "Digesting files in the srcset....."
389 -
390 - digests=glob.glob(destdir+'/*.DIGESTS')
391 - for i in digests:
392 - if os.path.exists(i):
393 - os.remove(i)
394 -
395 - files=os.listdir(destdir)
396 - #ignore files starting with '.' using list comprehension
397 - files=[filename for filename in files if filename[0] != '.']
398 - for i in files:
399 - if os.path.isfile(normpath(destdir+"/"+i)):
400 - #self.gen_contents_file(normpath(destdir+"/"+i))
401 - self.gen_digest_file(normpath(destdir+"/"+i))
402 -
403 - def set_action_sequence(self):
404 - self.settings["action_sequence"]=["unpack","unpack_snapshot",\
405 - "config_profile_link","setup_confdir","portage_overlay","bind","chroot_setup",\
406 - "setup_environment","run_local","unbind",\
407 - "generate_digests","clear_autoresume"]
408 diff --git a/catalyst/targets/livecd_stage1.py b/catalyst/targets/livecd_stage1.py
409 new file mode 100644
410 index 0000000..661e06e
411 --- /dev/null
412 +++ b/catalyst/targets/livecd_stage1.py
413 @@ -0,0 +1,78 @@
414 +"""
415 +LiveCD stage1 target
416 +"""
417 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
418 +
419 +import os
420 +import types
421 +import string
422 +
423 +from catalyst.support import (normpath,
424 + touch, cmd)
425 +
426 +from catalyst.base.stagebase import StageBase
427 +
428 +
429 +class livecd_stage1(StageBase):
430 + """
431 + Builder class for LiveCD stage1.
432 + """
433 + def __init__(self,spec,addlargs):
434 + self.required_values=["livecd/packages"]
435 + self.valid_values=self.required_values[:]
436 +
437 + self.valid_values.extend(["livecd/use"])
438 + StageBase.__init__(self,spec,addlargs)
439 +
440 + def set_action_sequence(self):
441 + self.settings["action_sequence"]=["unpack","unpack_snapshot",\
442 + "config_profile_link","setup_confdir","portage_overlay",\
443 + "bind","chroot_setup","setup_environment","build_packages",\
444 + "unbind", "clean","clear_autoresume"]
445 +
446 + def set_target_path(self):
447 + self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"])
448 + if "autoresume" in self.settings["options"] \
449 + and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
450 + print "Resume point detected, skipping target path setup operation..."
451 + else:
452 + # first clean up any existing target stuff
453 + if os.path.exists(self.settings["target_path"]):
454 + cmd("rm -rf "+self.settings["target_path"],\
455 + "Could not remove existing directory: "+self.settings["target_path"],env=self.env)
456 + touch(self.settings["autoresume_path"]+"setup_target_path")
457 +
458 + if not os.path.exists(self.settings["target_path"]):
459 + os.makedirs(self.settings["target_path"])
460 +
461 + def set_target_path(self):
462 + pass
463 +
464 + def set_spec_prefix(self):
465 + self.settings["spec_prefix"]="livecd"
466 +
467 + def set_use(self):
468 + StageBase.set_use(self)
469 + if "use" in self.settings:
470 + self.settings["use"].append("livecd")
471 + if "BINDIST" in self.settings:
472 + self.settings["use"].append("bindist")
473 + else:
474 + self.settings["use"]=["livecd"]
475 + if "BINDIST" in self.settings:
476 + self.settings["use"].append("bindist")
477 +
478 + def set_packages(self):
479 + StageBase.set_packages(self)
480 + if self.settings["spec_prefix"]+"/packages" in self.settings:
481 + if type(self.settings[self.settings["spec_prefix"]+"/packages"]) == types.StringType:
482 + self.settings[self.settings["spec_prefix"]+"/packages"] = \
483 + self.settings[self.settings["spec_prefix"]+"/packages"].split()
484 + self.settings[self.settings["spec_prefix"]+"/packages"].append("app-misc/livecd-tools")
485 +
486 + def set_pkgcache_path(self):
487 + if "pkgcache_path" in self.settings:
488 + if type(self.settings["pkgcache_path"]) != types.StringType:
489 + self.settings["pkgcache_path"]=normpath(string.join(self.settings["pkgcache_path"]))
490 + else:
491 + StageBase.set_pkgcache_path(self)
492 diff --git a/catalyst/targets/livecd_stage1_target.py b/catalyst/targets/livecd_stage1_target.py
493 deleted file mode 100644
494 index 9c74253..0000000
495 --- a/catalyst/targets/livecd_stage1_target.py
496 +++ /dev/null
497 @@ -1,78 +0,0 @@
498 -"""
499 -LiveCD stage1 target
500 -"""
501 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
502 -
503 -import os
504 -import types
505 -import string
506 -
507 -from catalyst.support import (normpath,
508 - touch, cmd)
509 -
510 -from catalyst.base.stagebase import StageBase
511 -
512 -
513 -class livecd_stage1_target(StageBase):
514 - """
515 - Builder class for LiveCD stage1.
516 - """
517 - def __init__(self,spec,addlargs):
518 - self.required_values=["livecd/packages"]
519 - self.valid_values=self.required_values[:]
520 -
521 - self.valid_values.extend(["livecd/use"])
522 - StageBase.__init__(self,spec,addlargs)
523 -
524 - def set_action_sequence(self):
525 - self.settings["action_sequence"]=["unpack","unpack_snapshot",\
526 - "config_profile_link","setup_confdir","portage_overlay",\
527 - "bind","chroot_setup","setup_environment","build_packages",\
528 - "unbind", "clean","clear_autoresume"]
529 -
530 - def set_target_path(self):
531 - self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"])
532 - if "autoresume" in self.settings["options"] \
533 - and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
534 - print "Resume point detected, skipping target path setup operation..."
535 - else:
536 - # first clean up any existing target stuff
537 - if os.path.exists(self.settings["target_path"]):
538 - cmd("rm -rf "+self.settings["target_path"],\
539 - "Could not remove existing directory: "+self.settings["target_path"],env=self.env)
540 - touch(self.settings["autoresume_path"]+"setup_target_path")
541 -
542 - if not os.path.exists(self.settings["target_path"]):
543 - os.makedirs(self.settings["target_path"])
544 -
545 - def set_target_path(self):
546 - pass
547 -
548 - def set_spec_prefix(self):
549 - self.settings["spec_prefix"]="livecd"
550 -
551 - def set_use(self):
552 - StageBase.set_use(self)
553 - if "use" in self.settings:
554 - self.settings["use"].append("livecd")
555 - if "BINDIST" in self.settings:
556 - self.settings["use"].append("bindist")
557 - else:
558 - self.settings["use"]=["livecd"]
559 - if "BINDIST" in self.settings:
560 - self.settings["use"].append("bindist")
561 -
562 - def set_packages(self):
563 - StageBase.set_packages(self)
564 - if self.settings["spec_prefix"]+"/packages" in self.settings:
565 - if type(self.settings[self.settings["spec_prefix"]+"/packages"]) == types.StringType:
566 - self.settings[self.settings["spec_prefix"]+"/packages"] = \
567 - self.settings[self.settings["spec_prefix"]+"/packages"].split()
568 - self.settings[self.settings["spec_prefix"]+"/packages"].append("app-misc/livecd-tools")
569 -
570 - def set_pkgcache_path(self):
571 - if "pkgcache_path" in self.settings:
572 - if type(self.settings["pkgcache_path"]) != types.StringType:
573 - self.settings["pkgcache_path"]=normpath(string.join(self.settings["pkgcache_path"]))
574 - else:
575 - StageBase.set_pkgcache_path(self)
576 diff --git a/catalyst/targets/livecd_stage2.py b/catalyst/targets/livecd_stage2.py
577 new file mode 100644
578 index 0000000..20f6014
579 --- /dev/null
580 +++ b/catalyst/targets/livecd_stage2.py
581 @@ -0,0 +1,147 @@
582 +"""
583 +LiveCD stage2 target, builds upon previous LiveCD stage1 tarball
584 +"""
585 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
586 +
587 +import os
588 +
589 +from catalyst.support import (normpath, file_locate, CatalystError, cmd,
590 + read_from_clst, touch)
591 +from catalyst.base.stagebase import StageBase
592 +
593 +
594 +class livecd_stage2(StageBase):
595 + """
596 + Builder class for a LiveCD stage2 build.
597 + """
598 + def __init__(self,spec,addlargs):
599 + self.required_values=["boot/kernel"]
600 +
601 + self.valid_values=[]
602 +
603 + self.valid_values.extend(self.required_values)
604 + self.valid_values.extend(["livecd/cdtar","livecd/empty","livecd/rm",\
605 + "livecd/unmerge","livecd/iso","livecd/gk_mainargs","livecd/type",\
606 + "livecd/readme","livecd/motd","livecd/overlay",\
607 + "livecd/modblacklist","livecd/splash_theme","livecd/rcadd",\
608 + "livecd/rcdel","livecd/fsscript","livecd/xinitrc",\
609 + "livecd/root_overlay","livecd/users","portage_overlay",\
610 + "livecd/fstype","livecd/fsops","livecd/linuxrc","livecd/bootargs",\
611 + "gamecd/conf","livecd/xdm","livecd/xsession","livecd/volid"])
612 +
613 + StageBase.__init__(self,spec,addlargs)
614 + if "livecd/type" not in self.settings:
615 + self.settings["livecd/type"] = "generic-livecd"
616 +
617 + file_locate(self.settings, ["cdtar","controller_file"])
618 +
619 + def set_source_path(self):
620 + self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2")
621 + if os.path.isfile(self.settings["source_path"]):
622 + self.settings["source_path_hash"] = \
623 + self.settings["hash_map"].generate_hash(
624 + self.settings["source_path"])
625 + else:
626 + self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/")
627 + if not os.path.exists(self.settings["source_path"]):
628 + raise CatalystError,"Source Path: "+self.settings["source_path"]+" does not exist."
629 +
630 + def set_spec_prefix(self):
631 + self.settings["spec_prefix"]="livecd"
632 +
633 + def set_target_path(self):
634 + self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
635 + if "autoresume" in self.settings["options"] \
636 + and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
637 + print "Resume point detected, skipping target path setup operation..."
638 + else:
639 + # first clean up any existing target stuff
640 + if os.path.isdir(self.settings["target_path"]):
641 + cmd("rm -rf "+self.settings["target_path"],
642 + "Could not remove existing directory: "+self.settings["target_path"],env=self.env)
643 + touch(self.settings["autoresume_path"]+"setup_target_path")
644 + if not os.path.exists(self.settings["target_path"]):
645 + os.makedirs(self.settings["target_path"])
646 +
647 + def run_local(self):
648 + # what modules do we want to blacklist?
649 + if "livecd/modblacklist" in self.settings:
650 + try:
651 + myf=open(self.settings["chroot_path"]+"/etc/modprobe.d/blacklist.conf","a")
652 + except:
653 + self.unbind()
654 + raise CatalystError,"Couldn't open "+self.settings["chroot_path"]+"/etc/modprobe.d/blacklist.conf."
655 +
656 + myf.write("\n#Added by Catalyst:")
657 + # workaround until config.py is using configparser
658 + if isinstance(self.settings["livecd/modblacklist"], str):
659 + self.settings["livecd/modblacklist"] = self.settings["livecd/modblacklist"].split()
660 + for x in self.settings["livecd/modblacklist"]:
661 + myf.write("\nblacklist "+x)
662 + myf.close()
663 +
664 + def unpack(self):
665 + unpack=True
666 + display_msg=None
667 +
668 + clst_unpack_hash=read_from_clst(self.settings["autoresume_path"]+"unpack")
669 +
670 + if os.path.isdir(self.settings["source_path"]):
671 + unpack_cmd="rsync -a --delete "+self.settings["source_path"]+" "+self.settings["chroot_path"]
672 + display_msg="\nStarting rsync from "+self.settings["source_path"]+"\nto "+\
673 + self.settings["chroot_path"]+" (This may take some time) ...\n"
674 + error_msg="Rsync of "+self.settings["source_path"]+" to "+self.settings["chroot_path"]+" failed."
675 + invalid_snapshot=False
676 +
677 + if "autoresume" in self.settings["options"]:
678 + if os.path.isdir(self.settings["source_path"]) and \
679 + os.path.exists(self.settings["autoresume_path"]+"unpack"):
680 + print "Resume point detected, skipping unpack operation..."
681 + unpack=False
682 + elif "source_path_hash" in self.settings:
683 + if self.settings["source_path_hash"] != clst_unpack_hash:
684 + invalid_snapshot=True
685 +
686 + if unpack:
687 + self.mount_safety_check()
688 + if invalid_snapshot:
689 + print "No Valid Resume point detected, cleaning up ..."
690 + #os.remove(self.settings["autoresume_path"]+"dir_setup")
691 + self.clear_autoresume()
692 + self.clear_chroot()
693 + #self.dir_setup()
694 +
695 + if not os.path.exists(self.settings["chroot_path"]):
696 + os.makedirs(self.settings["chroot_path"])
697 +
698 + if not os.path.exists(self.settings["chroot_path"]+"/tmp"):
699 + os.makedirs(self.settings["chroot_path"]+"/tmp",1777)
700 +
701 + if "pkgcache" in self.settings["options"]:
702 + if not os.path.exists(self.settings["pkgcache_path"]):
703 + os.makedirs(self.settings["pkgcache_path"],0755)
704 +
705 + if not display_msg:
706 + raise CatalystError,"Could not find appropriate source. Please check the 'source_subpath' setting in the spec file."
707 +
708 + print display_msg
709 + cmd(unpack_cmd,error_msg,env=self.env)
710 +
711 + if "source_path_hash" in self.settings:
712 + myf=open(self.settings["autoresume_path"]+"unpack","w")
713 + myf.write(self.settings["source_path_hash"])
714 + myf.close()
715 + else:
716 + touch(self.settings["autoresume_path"]+"unpack")
717 +
718 + def set_action_sequence(self):
719 + self.settings["action_sequence"]=["unpack","unpack_snapshot",\
720 + "config_profile_link","setup_confdir","portage_overlay",\
721 + "bind","chroot_setup","setup_environment","run_local",\
722 + "build_kernel"]
723 + if "fetch" not in self.settings["options"]:
724 + self.settings["action_sequence"] += ["bootloader","preclean",\
725 + "livecd_update","root_overlay","fsscript","rcupdate","unmerge",\
726 + "unbind","remove","empty","target_setup",\
727 + "setup_overlay","create_iso"]
728 + self.settings["action_sequence"].append("clear_autoresume")
729 diff --git a/catalyst/targets/livecd_stage2_target.py b/catalyst/targets/livecd_stage2_target.py
730 deleted file mode 100644
731 index a4630e6..0000000
732 --- a/catalyst/targets/livecd_stage2_target.py
733 +++ /dev/null
734 @@ -1,147 +0,0 @@
735 -"""
736 -LiveCD stage2 target, builds upon previous LiveCD stage1 tarball
737 -"""
738 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
739 -
740 -import os
741 -
742 -from catalyst.support import (normpath, file_locate, CatalystError, cmd,
743 - read_from_clst, touch)
744 -from catalyst.base.stagebase import StageBase
745 -
746 -
747 -class livecd_stage2_target(StageBase):
748 - """
749 - Builder class for a LiveCD stage2 build.
750 - """
751 - def __init__(self,spec,addlargs):
752 - self.required_values=["boot/kernel"]
753 -
754 - self.valid_values=[]
755 -
756 - self.valid_values.extend(self.required_values)
757 - self.valid_values.extend(["livecd/cdtar","livecd/empty","livecd/rm",\
758 - "livecd/unmerge","livecd/iso","livecd/gk_mainargs","livecd/type",\
759 - "livecd/readme","livecd/motd","livecd/overlay",\
760 - "livecd/modblacklist","livecd/splash_theme","livecd/rcadd",\
761 - "livecd/rcdel","livecd/fsscript","livecd/xinitrc",\
762 - "livecd/root_overlay","livecd/users","portage_overlay",\
763 - "livecd/fstype","livecd/fsops","livecd/linuxrc","livecd/bootargs",\
764 - "gamecd/conf","livecd/xdm","livecd/xsession","livecd/volid"])
765 -
766 - StageBase.__init__(self,spec,addlargs)
767 - if "livecd/type" not in self.settings:
768 - self.settings["livecd/type"] = "generic-livecd"
769 -
770 - file_locate(self.settings, ["cdtar","controller_file"])
771 -
772 - def set_source_path(self):
773 - self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2")
774 - if os.path.isfile(self.settings["source_path"]):
775 - self.settings["source_path_hash"] = \
776 - self.settings["hash_map"].generate_hash(
777 - self.settings["source_path"])
778 - else:
779 - self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/")
780 - if not os.path.exists(self.settings["source_path"]):
781 - raise CatalystError,"Source Path: "+self.settings["source_path"]+" does not exist."
782 -
783 - def set_spec_prefix(self):
784 - self.settings["spec_prefix"]="livecd"
785 -
786 - def set_target_path(self):
787 - self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
788 - if "autoresume" in self.settings["options"] \
789 - and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
790 - print "Resume point detected, skipping target path setup operation..."
791 - else:
792 - # first clean up any existing target stuff
793 - if os.path.isdir(self.settings["target_path"]):
794 - cmd("rm -rf "+self.settings["target_path"],
795 - "Could not remove existing directory: "+self.settings["target_path"],env=self.env)
796 - touch(self.settings["autoresume_path"]+"setup_target_path")
797 - if not os.path.exists(self.settings["target_path"]):
798 - os.makedirs(self.settings["target_path"])
799 -
800 - def run_local(self):
801 - # what modules do we want to blacklist?
802 - if "livecd/modblacklist" in self.settings:
803 - try:
804 - myf=open(self.settings["chroot_path"]+"/etc/modprobe.d/blacklist.conf","a")
805 - except:
806 - self.unbind()
807 - raise CatalystError,"Couldn't open "+self.settings["chroot_path"]+"/etc/modprobe.d/blacklist.conf."
808 -
809 - myf.write("\n#Added by Catalyst:")
810 - # workaround until config.py is using configparser
811 - if isinstance(self.settings["livecd/modblacklist"], str):
812 - self.settings["livecd/modblacklist"] = self.settings["livecd/modblacklist"].split()
813 - for x in self.settings["livecd/modblacklist"]:
814 - myf.write("\nblacklist "+x)
815 - myf.close()
816 -
817 - def unpack(self):
818 - unpack=True
819 - display_msg=None
820 -
821 - clst_unpack_hash=read_from_clst(self.settings["autoresume_path"]+"unpack")
822 -
823 - if os.path.isdir(self.settings["source_path"]):
824 - unpack_cmd="rsync -a --delete "+self.settings["source_path"]+" "+self.settings["chroot_path"]
825 - display_msg="\nStarting rsync from "+self.settings["source_path"]+"\nto "+\
826 - self.settings["chroot_path"]+" (This may take some time) ...\n"
827 - error_msg="Rsync of "+self.settings["source_path"]+" to "+self.settings["chroot_path"]+" failed."
828 - invalid_snapshot=False
829 -
830 - if "autoresume" in self.settings["options"]:
831 - if os.path.isdir(self.settings["source_path"]) and \
832 - os.path.exists(self.settings["autoresume_path"]+"unpack"):
833 - print "Resume point detected, skipping unpack operation..."
834 - unpack=False
835 - elif "source_path_hash" in self.settings:
836 - if self.settings["source_path_hash"] != clst_unpack_hash:
837 - invalid_snapshot=True
838 -
839 - if unpack:
840 - self.mount_safety_check()
841 - if invalid_snapshot:
842 - print "No Valid Resume point detected, cleaning up ..."
843 - #os.remove(self.settings["autoresume_path"]+"dir_setup")
844 - self.clear_autoresume()
845 - self.clear_chroot()
846 - #self.dir_setup()
847 -
848 - if not os.path.exists(self.settings["chroot_path"]):
849 - os.makedirs(self.settings["chroot_path"])
850 -
851 - if not os.path.exists(self.settings["chroot_path"]+"/tmp"):
852 - os.makedirs(self.settings["chroot_path"]+"/tmp",1777)
853 -
854 - if "pkgcache" in self.settings["options"]:
855 - if not os.path.exists(self.settings["pkgcache_path"]):
856 - os.makedirs(self.settings["pkgcache_path"],0755)
857 -
858 - if not display_msg:
859 - raise CatalystError,"Could not find appropriate source. Please check the 'source_subpath' setting in the spec file."
860 -
861 - print display_msg
862 - cmd(unpack_cmd,error_msg,env=self.env)
863 -
864 - if "source_path_hash" in self.settings:
865 - myf=open(self.settings["autoresume_path"]+"unpack","w")
866 - myf.write(self.settings["source_path_hash"])
867 - myf.close()
868 - else:
869 - touch(self.settings["autoresume_path"]+"unpack")
870 -
871 - def set_action_sequence(self):
872 - self.settings["action_sequence"]=["unpack","unpack_snapshot",\
873 - "config_profile_link","setup_confdir","portage_overlay",\
874 - "bind","chroot_setup","setup_environment","run_local",\
875 - "build_kernel"]
876 - if "fetch" not in self.settings["options"]:
877 - self.settings["action_sequence"] += ["bootloader","preclean",\
878 - "livecd_update","root_overlay","fsscript","rcupdate","unmerge",\
879 - "unbind","remove","empty","target_setup",\
880 - "setup_overlay","create_iso"]
881 - self.settings["action_sequence"].append("clear_autoresume")
882 diff --git a/catalyst/targets/netboot.py b/catalyst/targets/netboot.py
883 new file mode 100644
884 index 0000000..f753c7f
885 --- /dev/null
886 +++ b/catalyst/targets/netboot.py
887 @@ -0,0 +1,129 @@
888 +"""
889 +netboot target, version 1
890 +"""
891 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
892 +
893 +import os
894 +import types
895 +
896 +from catalyst.support import (CatalystError, normpath,
897 + cmd, list_bashify, file_locate)
898 +
899 +from catalyst.base.stagebase import StageBase
900 +
901 +
902 +class netboot(StageBase):
903 + """
904 + Builder class for a netboot build.
905 + """
906 + def __init__(self,spec,addlargs):
907 + self.valid_values = [
908 + "netboot/kernel/sources",
909 + "netboot/kernel/config",
910 + "netboot/kernel/prebuilt",
911 +
912 + "netboot/busybox_config",
913 +
914 + "netboot/extra_files",
915 + "netboot/packages"
916 + ]
917 + self.required_values=[]
918 +
919 + try:
920 + if "netboot/packages" in addlargs:
921 + if type(addlargs["netboot/packages"]) == types.StringType:
922 + loopy=[addlargs["netboot/packages"]]
923 + else:
924 + loopy=addlargs["netboot/packages"]
925 +
926 + # for x in loopy:
927 + # self.required_values.append("netboot/packages/"+x+"/files")
928 + except:
929 + raise CatalystError,"configuration error in netboot/packages."
930 +
931 + StageBase.__init__(self,spec,addlargs)
932 + self.set_build_kernel_vars(addlargs)
933 + if "netboot/busybox_config" in addlargs:
934 + file_locate(self.settings, ["netboot/busybox_config"])
935 +
936 + # Custom Kernel Tarball --- use that instead ...
937 +
938 + # unless the user wants specific CFLAGS/CXXFLAGS, let's use -Os
939 +
940 + for envvar in "CFLAGS", "CXXFLAGS":
941 + if envvar not in os.environ and envvar not in addlargs:
942 + self.settings[envvar] = "-Os -pipe"
943 +
944 + def set_root_path(self):
945 + # ROOT= variable for emerges
946 + self.settings["root_path"]=normpath("/tmp/image")
947 + print "netboot root path is "+self.settings["root_path"]
948 +
949 +# def build_packages(self):
950 +# # build packages
951 +# if "netboot/packages" in self.settings:
952 +# mypack=list_bashify(self.settings["netboot/packages"])
953 +# try:
954 +# cmd(self.settings["controller_file"]+" packages "+mypack,env=self.env)
955 +# except CatalystError:
956 +# self.unbind()
957 +# raise CatalystError,"netboot build aborting due to error."
958 +
959 + def build_busybox(self):
960 + # build busybox
961 + if "netboot/busybox_config" in self.settings:
962 + mycmd = self.settings["netboot/busybox_config"]
963 + else:
964 + mycmd = ""
965 + try:
966 + cmd(self.settings["controller_file"]+" busybox "+ mycmd,env=self.env)
967 + except CatalystError:
968 + self.unbind()
969 + raise CatalystError,"netboot build aborting due to error."
970 +
971 + def copy_files_to_image(self):
972 + # create image
973 + myfiles=[]
974 + if "netboot/packages" in self.settings:
975 + if type(self.settings["netboot/packages"]) == types.StringType:
976 + loopy=[self.settings["netboot/packages"]]
977 + else:
978 + loopy=self.settings["netboot/packages"]
979 +
980 + for x in loopy:
981 + if "netboot/packages/"+x+"/files" in self.settings:
982 + if type(self.settings["netboot/packages/"+x+"/files"]) == types.ListType:
983 + myfiles.extend(self.settings["netboot/packages/"+x+"/files"])
984 + else:
985 + myfiles.append(self.settings["netboot/packages/"+x+"/files"])
986 +
987 + if "netboot/extra_files" in self.settings:
988 + if type(self.settings["netboot/extra_files"]) == types.ListType:
989 + myfiles.extend(self.settings["netboot/extra_files"])
990 + else:
991 + myfiles.append(self.settings["netboot/extra_files"])
992 +
993 + try:
994 + cmd(self.settings["controller_file"]+\
995 + " image " + list_bashify(myfiles),env=self.env)
996 + except CatalystError:
997 + self.unbind()
998 + raise CatalystError,"netboot build aborting due to error."
999 +
1000 + def create_netboot_files(self):
1001 + # finish it all up
1002 + try:
1003 + cmd(self.settings["controller_file"]+" finish",env=self.env)
1004 + except CatalystError:
1005 + self.unbind()
1006 + raise CatalystError,"netboot build aborting due to error."
1007 +
1008 + # end
1009 + print "netboot: build finished !"
1010 +
1011 + def set_action_sequence(self):
1012 + self.settings["action_sequence"]=["unpack","unpack_snapshot",
1013 + "config_profile_link","setup_confdir","bind","chroot_setup",\
1014 + "setup_environment","build_packages","build_busybox",\
1015 + "build_kernel","copy_files_to_image",\
1016 + "clean","create_netboot_files","unbind","clear_autoresume"]
1017 diff --git a/catalyst/targets/netboot2.py b/catalyst/targets/netboot2.py
1018 new file mode 100644
1019 index 0000000..fc8c64c
1020 --- /dev/null
1021 +++ b/catalyst/targets/netboot2.py
1022 @@ -0,0 +1,169 @@
1023 +"""
1024 +netboot target, version 2
1025 +"""
1026 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1027 +
1028 +import os
1029 +import types
1030 +import shutil
1031 +from stat import ST_UID, ST_GID, ST_MODE
1032 +
1033 +from catalyst.support import (CatalystError, normpath,
1034 + touch, cmd, list_bashify)
1035 +
1036 +from catalyst.base.stagebase import StageBase
1037 +
1038 +
1039 +class netboot2(StageBase):
1040 + """
1041 + Builder class for a netboot build, version 2
1042 + """
1043 + def __init__(self,spec,addlargs):
1044 + self.required_values=[
1045 + "boot/kernel"
1046 + ]
1047 + self.valid_values=self.required_values[:]
1048 + self.valid_values.extend([
1049 + "netboot2/packages",
1050 + "netboot2/use",
1051 + "netboot2/extra_files",
1052 + "netboot2/overlay",
1053 + "netboot2/busybox_config",
1054 + "netboot2/root_overlay",
1055 + "netboot2/linuxrc"
1056 + ])
1057 +
1058 + try:
1059 + if "netboot2/packages" in addlargs:
1060 + if type(addlargs["netboot2/packages"]) == types.StringType:
1061 + loopy=[addlargs["netboot2/packages"]]
1062 + else:
1063 + loopy=addlargs["netboot2/packages"]
1064 +
1065 + for x in loopy:
1066 + self.valid_values.append("netboot2/packages/"+x+"/files")
1067 + except:
1068 + raise CatalystError,"configuration error in netboot2/packages."
1069 +
1070 + StageBase.__init__(self,spec,addlargs)
1071 + self.set_build_kernel_vars()
1072 + self.settings["merge_path"]=normpath("/tmp/image/")
1073 +
1074 + def set_target_path(self):
1075 + self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+\
1076 + self.settings["target_subpath"]+"/")
1077 + if "autoresume" in self.settings["options"] \
1078 + and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
1079 + print "Resume point detected, skipping target path setup operation..."
1080 + else:
1081 + # first clean up any existing target stuff
1082 + if os.path.isfile(self.settings["target_path"]):
1083 + cmd("rm -f "+self.settings["target_path"], \
1084 + "Could not remove existing file: "+self.settings["target_path"],env=self.env)
1085 + touch(self.settings["autoresume_path"]+"setup_target_path")
1086 +
1087 + if not os.path.exists(self.settings["storedir"]+"/builds/"):
1088 + os.makedirs(self.settings["storedir"]+"/builds/")
1089 +
1090 + def copy_files_to_image(self):
1091 + # copies specific files from the buildroot to merge_path
1092 + myfiles=[]
1093 +
1094 + # check for autoresume point
1095 + if "autoresume" in self.settings["options"] \
1096 + and os.path.exists(self.settings["autoresume_path"]+"copy_files_to_image"):
1097 + print "Resume point detected, skipping target path setup operation..."
1098 + else:
1099 + if "netboot2/packages" in self.settings:
1100 + if type(self.settings["netboot2/packages"]) == types.StringType:
1101 + loopy=[self.settings["netboot2/packages"]]
1102 + else:
1103 + loopy=self.settings["netboot2/packages"]
1104 +
1105 + for x in loopy:
1106 + if "netboot2/packages/"+x+"/files" in self.settings:
1107 + if type(self.settings["netboot2/packages/"+x+"/files"]) == types.ListType:
1108 + myfiles.extend(self.settings["netboot2/packages/"+x+"/files"])
1109 + else:
1110 + myfiles.append(self.settings["netboot2/packages/"+x+"/files"])
1111 +
1112 + if "netboot2/extra_files" in self.settings:
1113 + if type(self.settings["netboot2/extra_files"]) == types.ListType:
1114 + myfiles.extend(self.settings["netboot2/extra_files"])
1115 + else:
1116 + myfiles.append(self.settings["netboot2/extra_files"])
1117 +
1118 + try:
1119 + cmd(self.settings["controller_file"]+\
1120 + " image " + list_bashify(myfiles),env=self.env)
1121 + except CatalystError:
1122 + self.unbind()
1123 + raise CatalystError,"Failed to copy files to image!"
1124 +
1125 + touch(self.settings["autoresume_path"]+"copy_files_to_image")
1126 +
1127 + def setup_overlay(self):
1128 + if "autoresume" in self.settings["options"] \
1129 + and os.path.exists(self.settings["autoresume_path"]+"setup_overlay"):
1130 + print "Resume point detected, skipping setup_overlay operation..."
1131 + else:
1132 + if "netboot2/overlay" in self.settings:
1133 + for x in self.settings["netboot2/overlay"]:
1134 + if os.path.exists(x):
1135 + cmd("rsync -a "+x+"/ "+\
1136 + self.settings["chroot_path"] + self.settings["merge_path"], "netboot2/overlay: "+x+" copy failed.",env=self.env)
1137 + touch(self.settings["autoresume_path"]+"setup_overlay")
1138 +
1139 + def move_kernels(self):
1140 + # we're done, move the kernels to builds/*
1141 + # no auto resume here as we always want the
1142 + # freshest images moved
1143 + try:
1144 + cmd(self.settings["controller_file"]+\
1145 + " final",env=self.env)
1146 + print ">>> Netboot Build Finished!"
1147 + except CatalystError:
1148 + self.unbind()
1149 + raise CatalystError,"Failed to move kernel images!"
1150 +
1151 + def remove(self):
1152 + if "autoresume" in self.settings["options"] \
1153 + and os.path.exists(self.settings["autoresume_path"]+"remove"):
1154 + print "Resume point detected, skipping remove operation..."
1155 + else:
1156 + if self.settings["spec_prefix"]+"/rm" in self.settings:
1157 + for x in self.settings[self.settings["spec_prefix"]+"/rm"]:
1158 + # we're going to shell out for all these cleaning operations,
1159 + # so we get easy glob handling
1160 + print "netboot2: removing " + x
1161 + os.system("rm -rf " + self.settings["chroot_path"] + self.settings["merge_path"] + x)
1162 +
1163 + def empty(self):
1164 + if "autoresume" in self.settings["options"] \
1165 + and os.path.exists(self.settings["autoresume_path"]+"empty"):
1166 + print "Resume point detected, skipping empty operation..."
1167 + else:
1168 + if "netboot2/empty" in self.settings:
1169 + if type(self.settings["netboot2/empty"])==types.StringType:
1170 + self.settings["netboot2/empty"]=self.settings["netboot2/empty"].split()
1171 + for x in self.settings["netboot2/empty"]:
1172 + myemp=self.settings["chroot_path"] + self.settings["merge_path"] + x
1173 + if not os.path.isdir(myemp):
1174 + print x,"not a directory or does not exist, skipping 'empty' operation."
1175 + continue
1176 + print "Emptying directory", x
1177 + # stat the dir, delete the dir, recreate the dir and set
1178 + # the proper perms and ownership
1179 + mystat=os.stat(myemp)
1180 + shutil.rmtree(myemp)
1181 + os.makedirs(myemp,0755)
1182 + os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
1183 + os.chmod(myemp,mystat[ST_MODE])
1184 + touch(self.settings["autoresume_path"]+"empty")
1185 +
1186 + def set_action_sequence(self):
1187 + self.settings["action_sequence"]=["unpack","unpack_snapshot","config_profile_link",
1188 + "setup_confdir","portage_overlay","bind","chroot_setup",\
1189 + "setup_environment","build_packages","root_overlay",\
1190 + "copy_files_to_image","setup_overlay","build_kernel","move_kernels",\
1191 + "remove","empty","unbind","clean","clear_autoresume"]
1192 diff --git a/catalyst/targets/netboot2_target.py b/catalyst/targets/netboot2_target.py
1193 deleted file mode 100644
1194 index 130e2b6..0000000
1195 --- a/catalyst/targets/netboot2_target.py
1196 +++ /dev/null
1197 @@ -1,169 +0,0 @@
1198 -"""
1199 -netboot target, version 2
1200 -"""
1201 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1202 -
1203 -import os
1204 -import types
1205 -import shutil
1206 -from stat import ST_UID, ST_GID, ST_MODE
1207 -
1208 -from catalyst.support import (CatalystError, normpath,
1209 - touch, cmd, list_bashify)
1210 -
1211 -from catalyst.base.stagebase import StageBase
1212 -
1213 -
1214 -class netboot2_target(StageBase):
1215 - """
1216 - Builder class for a netboot build, version 2
1217 - """
1218 - def __init__(self,spec,addlargs):
1219 - self.required_values=[
1220 - "boot/kernel"
1221 - ]
1222 - self.valid_values=self.required_values[:]
1223 - self.valid_values.extend([
1224 - "netboot2/packages",
1225 - "netboot2/use",
1226 - "netboot2/extra_files",
1227 - "netboot2/overlay",
1228 - "netboot2/busybox_config",
1229 - "netboot2/root_overlay",
1230 - "netboot2/linuxrc"
1231 - ])
1232 -
1233 - try:
1234 - if "netboot2/packages" in addlargs:
1235 - if type(addlargs["netboot2/packages"]) == types.StringType:
1236 - loopy=[addlargs["netboot2/packages"]]
1237 - else:
1238 - loopy=addlargs["netboot2/packages"]
1239 -
1240 - for x in loopy:
1241 - self.valid_values.append("netboot2/packages/"+x+"/files")
1242 - except:
1243 - raise CatalystError,"configuration error in netboot2/packages."
1244 -
1245 - StageBase.__init__(self,spec,addlargs)
1246 - self.set_build_kernel_vars()
1247 - self.settings["merge_path"]=normpath("/tmp/image/")
1248 -
1249 - def set_target_path(self):
1250 - self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+\
1251 - self.settings["target_subpath"]+"/")
1252 - if "autoresume" in self.settings["options"] \
1253 - and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
1254 - print "Resume point detected, skipping target path setup operation..."
1255 - else:
1256 - # first clean up any existing target stuff
1257 - if os.path.isfile(self.settings["target_path"]):
1258 - cmd("rm -f "+self.settings["target_path"], \
1259 - "Could not remove existing file: "+self.settings["target_path"],env=self.env)
1260 - touch(self.settings["autoresume_path"]+"setup_target_path")
1261 -
1262 - if not os.path.exists(self.settings["storedir"]+"/builds/"):
1263 - os.makedirs(self.settings["storedir"]+"/builds/")
1264 -
1265 - def copy_files_to_image(self):
1266 - # copies specific files from the buildroot to merge_path
1267 - myfiles=[]
1268 -
1269 - # check for autoresume point
1270 - if "autoresume" in self.settings["options"] \
1271 - and os.path.exists(self.settings["autoresume_path"]+"copy_files_to_image"):
1272 - print "Resume point detected, skipping target path setup operation..."
1273 - else:
1274 - if "netboot2/packages" in self.settings:
1275 - if type(self.settings["netboot2/packages"]) == types.StringType:
1276 - loopy=[self.settings["netboot2/packages"]]
1277 - else:
1278 - loopy=self.settings["netboot2/packages"]
1279 -
1280 - for x in loopy:
1281 - if "netboot2/packages/"+x+"/files" in self.settings:
1282 - if type(self.settings["netboot2/packages/"+x+"/files"]) == types.ListType:
1283 - myfiles.extend(self.settings["netboot2/packages/"+x+"/files"])
1284 - else:
1285 - myfiles.append(self.settings["netboot2/packages/"+x+"/files"])
1286 -
1287 - if "netboot2/extra_files" in self.settings:
1288 - if type(self.settings["netboot2/extra_files"]) == types.ListType:
1289 - myfiles.extend(self.settings["netboot2/extra_files"])
1290 - else:
1291 - myfiles.append(self.settings["netboot2/extra_files"])
1292 -
1293 - try:
1294 - cmd(self.settings["controller_file"]+\
1295 - " image " + list_bashify(myfiles),env=self.env)
1296 - except CatalystError:
1297 - self.unbind()
1298 - raise CatalystError,"Failed to copy files to image!"
1299 -
1300 - touch(self.settings["autoresume_path"]+"copy_files_to_image")
1301 -
1302 - def setup_overlay(self):
1303 - if "autoresume" in self.settings["options"] \
1304 - and os.path.exists(self.settings["autoresume_path"]+"setup_overlay"):
1305 - print "Resume point detected, skipping setup_overlay operation..."
1306 - else:
1307 - if "netboot2/overlay" in self.settings:
1308 - for x in self.settings["netboot2/overlay"]:
1309 - if os.path.exists(x):
1310 - cmd("rsync -a "+x+"/ "+\
1311 - self.settings["chroot_path"] + self.settings["merge_path"], "netboot2/overlay: "+x+" copy failed.",env=self.env)
1312 - touch(self.settings["autoresume_path"]+"setup_overlay")
1313 -
1314 - def move_kernels(self):
1315 - # we're done, move the kernels to builds/*
1316 - # no auto resume here as we always want the
1317 - # freshest images moved
1318 - try:
1319 - cmd(self.settings["controller_file"]+\
1320 - " final",env=self.env)
1321 - print ">>> Netboot Build Finished!"
1322 - except CatalystError:
1323 - self.unbind()
1324 - raise CatalystError,"Failed to move kernel images!"
1325 -
1326 - def remove(self):
1327 - if "autoresume" in self.settings["options"] \
1328 - and os.path.exists(self.settings["autoresume_path"]+"remove"):
1329 - print "Resume point detected, skipping remove operation..."
1330 - else:
1331 - if self.settings["spec_prefix"]+"/rm" in self.settings:
1332 - for x in self.settings[self.settings["spec_prefix"]+"/rm"]:
1333 - # we're going to shell out for all these cleaning operations,
1334 - # so we get easy glob handling
1335 - print "netboot2: removing " + x
1336 - os.system("rm -rf " + self.settings["chroot_path"] + self.settings["merge_path"] + x)
1337 -
1338 - def empty(self):
1339 - if "autoresume" in self.settings["options"] \
1340 - and os.path.exists(self.settings["autoresume_path"]+"empty"):
1341 - print "Resume point detected, skipping empty operation..."
1342 - else:
1343 - if "netboot2/empty" in self.settings:
1344 - if type(self.settings["netboot2/empty"])==types.StringType:
1345 - self.settings["netboot2/empty"]=self.settings["netboot2/empty"].split()
1346 - for x in self.settings["netboot2/empty"]:
1347 - myemp=self.settings["chroot_path"] + self.settings["merge_path"] + x
1348 - if not os.path.isdir(myemp):
1349 - print x,"not a directory or does not exist, skipping 'empty' operation."
1350 - continue
1351 - print "Emptying directory", x
1352 - # stat the dir, delete the dir, recreate the dir and set
1353 - # the proper perms and ownership
1354 - mystat=os.stat(myemp)
1355 - shutil.rmtree(myemp)
1356 - os.makedirs(myemp,0755)
1357 - os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
1358 - os.chmod(myemp,mystat[ST_MODE])
1359 - touch(self.settings["autoresume_path"]+"empty")
1360 -
1361 - def set_action_sequence(self):
1362 - self.settings["action_sequence"]=["unpack","unpack_snapshot","config_profile_link",
1363 - "setup_confdir","portage_overlay","bind","chroot_setup",\
1364 - "setup_environment","build_packages","root_overlay",\
1365 - "copy_files_to_image","setup_overlay","build_kernel","move_kernels",\
1366 - "remove","empty","unbind","clean","clear_autoresume"]
1367 diff --git a/catalyst/targets/netboot_target.py b/catalyst/targets/netboot_target.py
1368 deleted file mode 100644
1369 index 9d92ef2..0000000
1370 --- a/catalyst/targets/netboot_target.py
1371 +++ /dev/null
1372 @@ -1,129 +0,0 @@
1373 -"""
1374 -netboot target, version 1
1375 -"""
1376 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1377 -
1378 -import os
1379 -import types
1380 -
1381 -from catalyst.support import (CatalystError, normpath,
1382 - cmd, list_bashify, file_locate)
1383 -
1384 -from catalyst.base.stagebase import StageBase
1385 -
1386 -
1387 -class netboot_target(StageBase):
1388 - """
1389 - Builder class for a netboot build.
1390 - """
1391 - def __init__(self,spec,addlargs):
1392 - self.valid_values = [
1393 - "netboot/kernel/sources",
1394 - "netboot/kernel/config",
1395 - "netboot/kernel/prebuilt",
1396 -
1397 - "netboot/busybox_config",
1398 -
1399 - "netboot/extra_files",
1400 - "netboot/packages"
1401 - ]
1402 - self.required_values=[]
1403 -
1404 - try:
1405 - if "netboot/packages" in addlargs:
1406 - if type(addlargs["netboot/packages"]) == types.StringType:
1407 - loopy=[addlargs["netboot/packages"]]
1408 - else:
1409 - loopy=addlargs["netboot/packages"]
1410 -
1411 - # for x in loopy:
1412 - # self.required_values.append("netboot/packages/"+x+"/files")
1413 - except:
1414 - raise CatalystError,"configuration error in netboot/packages."
1415 -
1416 - StageBase.__init__(self,spec,addlargs)
1417 - self.set_build_kernel_vars(addlargs)
1418 - if "netboot/busybox_config" in addlargs:
1419 - file_locate(self.settings, ["netboot/busybox_config"])
1420 -
1421 - # Custom Kernel Tarball --- use that instead ...
1422 -
1423 - # unless the user wants specific CFLAGS/CXXFLAGS, let's use -Os
1424 -
1425 - for envvar in "CFLAGS", "CXXFLAGS":
1426 - if envvar not in os.environ and envvar not in addlargs:
1427 - self.settings[envvar] = "-Os -pipe"
1428 -
1429 - def set_root_path(self):
1430 - # ROOT= variable for emerges
1431 - self.settings["root_path"]=normpath("/tmp/image")
1432 - print "netboot root path is "+self.settings["root_path"]
1433 -
1434 -# def build_packages(self):
1435 -# # build packages
1436 -# if "netboot/packages" in self.settings:
1437 -# mypack=list_bashify(self.settings["netboot/packages"])
1438 -# try:
1439 -# cmd(self.settings["controller_file"]+" packages "+mypack,env=self.env)
1440 -# except CatalystError:
1441 -# self.unbind()
1442 -# raise CatalystError,"netboot build aborting due to error."
1443 -
1444 - def build_busybox(self):
1445 - # build busybox
1446 - if "netboot/busybox_config" in self.settings:
1447 - mycmd = self.settings["netboot/busybox_config"]
1448 - else:
1449 - mycmd = ""
1450 - try:
1451 - cmd(self.settings["controller_file"]+" busybox "+ mycmd,env=self.env)
1452 - except CatalystError:
1453 - self.unbind()
1454 - raise CatalystError,"netboot build aborting due to error."
1455 -
1456 - def copy_files_to_image(self):
1457 - # create image
1458 - myfiles=[]
1459 - if "netboot/packages" in self.settings:
1460 - if type(self.settings["netboot/packages"]) == types.StringType:
1461 - loopy=[self.settings["netboot/packages"]]
1462 - else:
1463 - loopy=self.settings["netboot/packages"]
1464 -
1465 - for x in loopy:
1466 - if "netboot/packages/"+x+"/files" in self.settings:
1467 - if type(self.settings["netboot/packages/"+x+"/files"]) == types.ListType:
1468 - myfiles.extend(self.settings["netboot/packages/"+x+"/files"])
1469 - else:
1470 - myfiles.append(self.settings["netboot/packages/"+x+"/files"])
1471 -
1472 - if "netboot/extra_files" in self.settings:
1473 - if type(self.settings["netboot/extra_files"]) == types.ListType:
1474 - myfiles.extend(self.settings["netboot/extra_files"])
1475 - else:
1476 - myfiles.append(self.settings["netboot/extra_files"])
1477 -
1478 - try:
1479 - cmd(self.settings["controller_file"]+\
1480 - " image " + list_bashify(myfiles),env=self.env)
1481 - except CatalystError:
1482 - self.unbind()
1483 - raise CatalystError,"netboot build aborting due to error."
1484 -
1485 - def create_netboot_files(self):
1486 - # finish it all up
1487 - try:
1488 - cmd(self.settings["controller_file"]+" finish",env=self.env)
1489 - except CatalystError:
1490 - self.unbind()
1491 - raise CatalystError,"netboot build aborting due to error."
1492 -
1493 - # end
1494 - print "netboot: build finished !"
1495 -
1496 - def set_action_sequence(self):
1497 - self.settings["action_sequence"]=["unpack","unpack_snapshot",
1498 - "config_profile_link","setup_confdir","bind","chroot_setup",\
1499 - "setup_environment","build_packages","build_busybox",\
1500 - "build_kernel","copy_files_to_image",\
1501 - "clean","create_netboot_files","unbind","clear_autoresume"]
1502 diff --git a/catalyst/targets/stage1.py b/catalyst/targets/stage1.py
1503 new file mode 100644
1504 index 0000000..e72cbcc
1505 --- /dev/null
1506 +++ b/catalyst/targets/stage1.py
1507 @@ -0,0 +1,96 @@
1508 +"""
1509 +stage1 target
1510 +"""
1511 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1512 +
1513 +import os
1514 +
1515 +from catalyst.support import normpath, list_to_string
1516 +from catalyst.base.stagebase import StageBase
1517 +
1518 +
1519 +class stage1(StageBase):
1520 + """
1521 + Builder class for a stage1 installation tarball build.
1522 + """
1523 + def __init__(self,spec,addlargs):
1524 + self.required_values=[]
1525 + self.valid_values=["chost"]
1526 + self.valid_values.extend(["update_seed","update_seed_command"])
1527 + StageBase.__init__(self,spec,addlargs)
1528 +
1529 + def set_stage_path(self):
1530 + self.settings["stage_path"]=normpath(self.settings["chroot_path"]+self.settings["root_path"])
1531 + print "stage1 stage path is "+self.settings["stage_path"]
1532 +
1533 + def set_root_path(self):
1534 + # sets the root path, relative to 'chroot_path', of the stage1 root
1535 + self.settings["root_path"]=normpath("/tmp/stage1root")
1536 + print "stage1 root path is "+self.settings["root_path"]
1537 +
1538 + def set_cleanables(self):
1539 + StageBase.set_cleanables(self)
1540 + self.settings["cleanables"].extend([\
1541 + "/usr/share/zoneinfo", "/etc/portage/package*"])
1542 +
1543 + # XXX: How do these override_foo() functions differ from the ones in StageBase and why aren't they in stage3_target?
1544 +
1545 + def override_chost(self):
1546 + if "chost" in self.settings:
1547 + self.settings["CHOST"]=list_to_string(self.settings["chost"])
1548 +
1549 + def override_cflags(self):
1550 + if "cflags" in self.settings:
1551 + self.settings["CFLAGS"]=list_to_string(self.settings["cflags"])
1552 +
1553 + def override_cxxflags(self):
1554 + if "cxxflags" in self.settings:
1555 + self.settings["CXXFLAGS"]=list_to_string(self.settings["cxxflags"])
1556 +
1557 + def override_ldflags(self):
1558 + if "ldflags" in self.settings:
1559 + self.settings["LDFLAGS"]=list_to_string(self.settings["ldflags"])
1560 +
1561 + def set_portage_overlay(self):
1562 + StageBase.set_portage_overlay(self)
1563 + if "portage_overlay" in self.settings:
1564 + print "\nWARNING !!!!!"
1565 + print "\tUsing an portage overlay for earlier stages could cause build issues."
1566 + print "\tIf you break it, you buy it. Don't complain to us about it."
1567 + print "\tDont say we did not warn you\n"
1568 +
1569 + def base_dirs(self):
1570 + if os.uname()[0] == "FreeBSD":
1571 + # baselayout no longer creates the .keep files in proc and dev for FreeBSD as it
1572 + # would create them too late...we need them earlier before bind mounting filesystems
1573 + # since proc and dev are not writeable, so...create them here
1574 + if not os.path.exists(self.settings["stage_path"]+"/proc"):
1575 + os.makedirs(self.settings["stage_path"]+"/proc")
1576 + if not os.path.exists(self.settings["stage_path"]+"/dev"):
1577 + os.makedirs(self.settings["stage_path"]+"/dev")
1578 + if not os.path.isfile(self.settings["stage_path"]+"/proc/.keep"):
1579 + try:
1580 + proc_keepfile = open(self.settings["stage_path"]+"/proc/.keep","w")
1581 + proc_keepfile.write('')
1582 + proc_keepfile.close()
1583 + except IOError:
1584 + print "!!! Failed to create %s" % (self.settings["stage_path"]+"/dev/.keep")
1585 + if not os.path.isfile(self.settings["stage_path"]+"/dev/.keep"):
1586 + try:
1587 + dev_keepfile = open(self.settings["stage_path"]+"/dev/.keep","w")
1588 + dev_keepfile.write('')
1589 + dev_keepfile.close()
1590 + except IOError:
1591 + print "!!! Failed to create %s" % (self.settings["stage_path"]+"/dev/.keep")
1592 + else:
1593 + pass
1594 +
1595 + def set_mounts(self):
1596 + # stage_path/proc probably doesn't exist yet, so create it
1597 + if not os.path.exists(self.settings["stage_path"]+"/proc"):
1598 + os.makedirs(self.settings["stage_path"]+"/proc")
1599 +
1600 + # alter the mount mappings to bind mount proc onto it
1601 + self.mounts.append("stage1root/proc")
1602 + self.target_mounts["stage1root/proc"] = "/tmp/stage1root/proc"
1603 + self.mountmap["stage1root/proc"] = "/proc"
1604 diff --git a/catalyst/targets/stage1_target.py b/catalyst/targets/stage1_target.py
1605 deleted file mode 100644
1606 index 2329b58..0000000
1607 --- a/catalyst/targets/stage1_target.py
1608 +++ /dev/null
1609 @@ -1,96 +0,0 @@
1610 -"""
1611 -stage1 target
1612 -"""
1613 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1614 -
1615 -import os
1616 -
1617 -from catalyst.support import normpath, list_to_string
1618 -from catalyst.base.stagebase import StageBase
1619 -
1620 -
1621 -class stage1_target(StageBase):
1622 - """
1623 - Builder class for a stage1 installation tarball build.
1624 - """
1625 - def __init__(self,spec,addlargs):
1626 - self.required_values=[]
1627 - self.valid_values=["chost"]
1628 - self.valid_values.extend(["update_seed","update_seed_command"])
1629 - StageBase.__init__(self,spec,addlargs)
1630 -
1631 - def set_stage_path(self):
1632 - self.settings["stage_path"]=normpath(self.settings["chroot_path"]+self.settings["root_path"])
1633 - print "stage1 stage path is "+self.settings["stage_path"]
1634 -
1635 - def set_root_path(self):
1636 - # sets the root path, relative to 'chroot_path', of the stage1 root
1637 - self.settings["root_path"]=normpath("/tmp/stage1root")
1638 - print "stage1 root path is "+self.settings["root_path"]
1639 -
1640 - def set_cleanables(self):
1641 - StageBase.set_cleanables(self)
1642 - self.settings["cleanables"].extend([\
1643 - "/usr/share/zoneinfo", "/etc/portage/package*"])
1644 -
1645 - # XXX: How do these override_foo() functions differ from the ones in StageBase and why aren't they in stage3_target?
1646 -
1647 - def override_chost(self):
1648 - if "chost" in self.settings:
1649 - self.settings["CHOST"]=list_to_string(self.settings["chost"])
1650 -
1651 - def override_cflags(self):
1652 - if "cflags" in self.settings:
1653 - self.settings["CFLAGS"]=list_to_string(self.settings["cflags"])
1654 -
1655 - def override_cxxflags(self):
1656 - if "cxxflags" in self.settings:
1657 - self.settings["CXXFLAGS"]=list_to_string(self.settings["cxxflags"])
1658 -
1659 - def override_ldflags(self):
1660 - if "ldflags" in self.settings:
1661 - self.settings["LDFLAGS"]=list_to_string(self.settings["ldflags"])
1662 -
1663 - def set_portage_overlay(self):
1664 - StageBase.set_portage_overlay(self)
1665 - if "portage_overlay" in self.settings:
1666 - print "\nWARNING !!!!!"
1667 - print "\tUsing an portage overlay for earlier stages could cause build issues."
1668 - print "\tIf you break it, you buy it. Don't complain to us about it."
1669 - print "\tDont say we did not warn you\n"
1670 -
1671 - def base_dirs(self):
1672 - if os.uname()[0] == "FreeBSD":
1673 - # baselayout no longer creates the .keep files in proc and dev for FreeBSD as it
1674 - # would create them too late...we need them earlier before bind mounting filesystems
1675 - # since proc and dev are not writeable, so...create them here
1676 - if not os.path.exists(self.settings["stage_path"]+"/proc"):
1677 - os.makedirs(self.settings["stage_path"]+"/proc")
1678 - if not os.path.exists(self.settings["stage_path"]+"/dev"):
1679 - os.makedirs(self.settings["stage_path"]+"/dev")
1680 - if not os.path.isfile(self.settings["stage_path"]+"/proc/.keep"):
1681 - try:
1682 - proc_keepfile = open(self.settings["stage_path"]+"/proc/.keep","w")
1683 - proc_keepfile.write('')
1684 - proc_keepfile.close()
1685 - except IOError:
1686 - print "!!! Failed to create %s" % (self.settings["stage_path"]+"/dev/.keep")
1687 - if not os.path.isfile(self.settings["stage_path"]+"/dev/.keep"):
1688 - try:
1689 - dev_keepfile = open(self.settings["stage_path"]+"/dev/.keep","w")
1690 - dev_keepfile.write('')
1691 - dev_keepfile.close()
1692 - except IOError:
1693 - print "!!! Failed to create %s" % (self.settings["stage_path"]+"/dev/.keep")
1694 - else:
1695 - pass
1696 -
1697 - def set_mounts(self):
1698 - # stage_path/proc probably doesn't exist yet, so create it
1699 - if not os.path.exists(self.settings["stage_path"]+"/proc"):
1700 - os.makedirs(self.settings["stage_path"]+"/proc")
1701 -
1702 - # alter the mount mappings to bind mount proc onto it
1703 - self.mounts.append("stage1root/proc")
1704 - self.target_mounts["stage1root/proc"] = "/tmp/stage1root/proc"
1705 - self.mountmap["stage1root/proc"] = "/proc"
1706 diff --git a/catalyst/targets/stage2.py b/catalyst/targets/stage2.py
1707 new file mode 100644
1708 index 0000000..884b20d
1709 --- /dev/null
1710 +++ b/catalyst/targets/stage2.py
1711 @@ -0,0 +1,64 @@
1712 +"""
1713 +stage2 target, builds upon previous stage1 tarball
1714 +"""
1715 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1716 +
1717 +import os
1718 +
1719 +from catalyst.support import normpath, list_to_string
1720 +from catalyst.base.stagebase import StageBase
1721 +
1722 +
1723 +class stage2(StageBase):
1724 + """
1725 + Builder class for a stage2 installation tarball build.
1726 + """
1727 + def __init__(self,spec,addlargs):
1728 + self.required_values=[]
1729 + self.valid_values=["chost"]
1730 + StageBase.__init__(self,spec,addlargs)
1731 +
1732 + def set_source_path(self):
1733 + if "seedcache" in self.settings["options"] and os.path.isdir(normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root/")):
1734 + self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root/")
1735 + else:
1736 + self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2")
1737 + if os.path.isfile(self.settings["source_path"]):
1738 + if os.path.exists(self.settings["source_path"]):
1739 + # XXX: Is this even necessary if the previous check passes?
1740 + self.settings["source_path_hash"] = \
1741 + self.settings["hash_map"].generate_hash(
1742 + self.settings["source_path"],\
1743 + hash_=self.settings["hash_function"],
1744 + verbose=False)
1745 + print "Source path set to "+self.settings["source_path"]
1746 + if os.path.isdir(self.settings["source_path"]):
1747 + print "\tIf this is not desired, remove this directory or turn of seedcache in the options of catalyst.conf"
1748 + print "\tthe source path will then be "+normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2\n")
1749 +
1750 + # XXX: How do these override_foo() functions differ from the ones in
1751 + # StageBase and why aren't they in stage3_target?
1752 +
1753 + def override_chost(self):
1754 + if "chost" in self.settings:
1755 + self.settings["CHOST"]=list_to_string(self.settings["chost"])
1756 +
1757 + def override_cflags(self):
1758 + if "cflags" in self.settings:
1759 + self.settings["CFLAGS"]=list_to_string(self.settings["cflags"])
1760 +
1761 + def override_cxxflags(self):
1762 + if "cxxflags" in self.settings:
1763 + self.settings["CXXFLAGS"]=list_to_string(self.settings["cxxflags"])
1764 +
1765 + def override_ldflags(self):
1766 + if "ldflags" in self.settings:
1767 + self.settings["LDFLAGS"]=list_to_string(self.settings["ldflags"])
1768 +
1769 + def set_portage_overlay(self):
1770 + StageBase.set_portage_overlay(self)
1771 + if "portage_overlay" in self.settings:
1772 + print "\nWARNING !!!!!"
1773 + print "\tUsing an portage overlay for earlier stages could cause build issues."
1774 + print "\tIf you break it, you buy it. Don't complain to us about it."
1775 + print "\tDont say we did not warn you\n"
1776 diff --git a/catalyst/targets/stage2_target.py b/catalyst/targets/stage2_target.py
1777 deleted file mode 100644
1778 index ec6d78d..0000000
1779 --- a/catalyst/targets/stage2_target.py
1780 +++ /dev/null
1781 @@ -1,64 +0,0 @@
1782 -"""
1783 -stage2 target, builds upon previous stage1 tarball
1784 -"""
1785 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1786 -
1787 -import os
1788 -
1789 -from catalyst.support import normpath, list_to_string
1790 -from catalyst.base.stagebase import StageBase
1791 -
1792 -
1793 -class stage2_target(StageBase):
1794 - """
1795 - Builder class for a stage2 installation tarball build.
1796 - """
1797 - def __init__(self,spec,addlargs):
1798 - self.required_values=[]
1799 - self.valid_values=["chost"]
1800 - StageBase.__init__(self,spec,addlargs)
1801 -
1802 - def set_source_path(self):
1803 - if "seedcache" in self.settings["options"] and os.path.isdir(normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root/")):
1804 - self.settings["source_path"]=normpath(self.settings["storedir"]+"/tmp/"+self.settings["source_subpath"]+"/tmp/stage1root/")
1805 - else:
1806 - self.settings["source_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2")
1807 - if os.path.isfile(self.settings["source_path"]):
1808 - if os.path.exists(self.settings["source_path"]):
1809 - # XXX: Is this even necessary if the previous check passes?
1810 - self.settings["source_path_hash"] = \
1811 - self.settings["hash_map"].generate_hash(
1812 - self.settings["source_path"],\
1813 - hash_=self.settings["hash_function"],
1814 - verbose=False)
1815 - print "Source path set to "+self.settings["source_path"]
1816 - if os.path.isdir(self.settings["source_path"]):
1817 - print "\tIf this is not desired, remove this directory or turn of seedcache in the options of catalyst.conf"
1818 - print "\tthe source path will then be "+normpath(self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2\n")
1819 -
1820 - # XXX: How do these override_foo() functions differ from the ones in
1821 - # StageBase and why aren't they in stage3_target?
1822 -
1823 - def override_chost(self):
1824 - if "chost" in self.settings:
1825 - self.settings["CHOST"]=list_to_string(self.settings["chost"])
1826 -
1827 - def override_cflags(self):
1828 - if "cflags" in self.settings:
1829 - self.settings["CFLAGS"]=list_to_string(self.settings["cflags"])
1830 -
1831 - def override_cxxflags(self):
1832 - if "cxxflags" in self.settings:
1833 - self.settings["CXXFLAGS"]=list_to_string(self.settings["cxxflags"])
1834 -
1835 - def override_ldflags(self):
1836 - if "ldflags" in self.settings:
1837 - self.settings["LDFLAGS"]=list_to_string(self.settings["ldflags"])
1838 -
1839 - def set_portage_overlay(self):
1840 - StageBase.set_portage_overlay(self)
1841 - if "portage_overlay" in self.settings:
1842 - print "\nWARNING !!!!!"
1843 - print "\tUsing an portage overlay for earlier stages could cause build issues."
1844 - print "\tIf you break it, you buy it. Don't complain to us about it."
1845 - print "\tDont say we did not warn you\n"
1846 diff --git a/catalyst/targets/stage3.py b/catalyst/targets/stage3.py
1847 new file mode 100644
1848 index 0000000..cc3e520
1849 --- /dev/null
1850 +++ b/catalyst/targets/stage3.py
1851 @@ -0,0 +1,27 @@
1852 +"""
1853 +stage3 target, builds upon previous stage2/stage3 tarball
1854 +"""
1855 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1856 +
1857 +from catalyst.base.stagebase import StageBase
1858 +
1859 +
1860 +class stage3(StageBase):
1861 + """
1862 + Builder class for a stage3 installation tarball build.
1863 + """
1864 + def __init__(self,spec,addlargs):
1865 + self.required_values=[]
1866 + self.valid_values=[]
1867 + StageBase.__init__(self,spec,addlargs)
1868 +
1869 + def set_portage_overlay(self):
1870 + StageBase.set_portage_overlay(self)
1871 + if "portage_overlay" in self.settings:
1872 + print "\nWARNING !!!!!"
1873 + print "\tUsing an overlay for earlier stages could cause build issues."
1874 + print "\tIf you break it, you buy it. Don't complain to us about it."
1875 + print "\tDont say we did not warn you\n"
1876 +
1877 + def set_cleanables(self):
1878 + StageBase.set_cleanables(self)
1879 diff --git a/catalyst/targets/stage3_target.py b/catalyst/targets/stage3_target.py
1880 deleted file mode 100644
1881 index 103242d..0000000
1882 --- a/catalyst/targets/stage3_target.py
1883 +++ /dev/null
1884 @@ -1,27 +0,0 @@
1885 -"""
1886 -stage3 target, builds upon previous stage2/stage3 tarball
1887 -"""
1888 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1889 -
1890 -from catalyst.base.stagebase import StageBase
1891 -
1892 -
1893 -class stage3_target(StageBase):
1894 - """
1895 - Builder class for a stage3 installation tarball build.
1896 - """
1897 - def __init__(self,spec,addlargs):
1898 - self.required_values=[]
1899 - self.valid_values=[]
1900 - StageBase.__init__(self,spec,addlargs)
1901 -
1902 - def set_portage_overlay(self):
1903 - StageBase.set_portage_overlay(self)
1904 - if "portage_overlay" in self.settings:
1905 - print "\nWARNING !!!!!"
1906 - print "\tUsing an overlay for earlier stages could cause build issues."
1907 - print "\tIf you break it, you buy it. Don't complain to us about it."
1908 - print "\tDont say we did not warn you\n"
1909 -
1910 - def set_cleanables(self):
1911 - StageBase.set_cleanables(self)
1912 diff --git a/catalyst/targets/stage4.py b/catalyst/targets/stage4.py
1913 new file mode 100644
1914 index 0000000..4aef33f
1915 --- /dev/null
1916 +++ b/catalyst/targets/stage4.py
1917 @@ -0,0 +1,38 @@
1918 +"""
1919 +stage4 target, builds upon previous stage3/stage4 tarball
1920 +"""
1921 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1922 +
1923 +from catalyst.base.stagebase import StageBase
1924 +
1925 +
1926 +class stage4(StageBase):
1927 + """
1928 + Builder class for stage4.
1929 + """
1930 + def __init__(self,spec,addlargs):
1931 + self.required_values=["stage4/packages"]
1932 + self.valid_values=self.required_values[:]
1933 + self.valid_values.extend(["stage4/use","boot/kernel",\
1934 + "stage4/root_overlay","stage4/fsscript",\
1935 + "stage4/gk_mainargs","splash_theme",\
1936 + "portage_overlay","stage4/rcadd","stage4/rcdel",\
1937 + "stage4/linuxrc","stage4/unmerge","stage4/rm","stage4/empty"])
1938 + StageBase.__init__(self,spec,addlargs)
1939 +
1940 + def set_cleanables(self):
1941 + self.settings["cleanables"]=["/var/tmp/*","/tmp/*"]
1942 +
1943 + def set_action_sequence(self):
1944 + self.settings["action_sequence"]=["unpack","unpack_snapshot",\
1945 + "config_profile_link","setup_confdir","portage_overlay",\
1946 + "bind","chroot_setup","setup_environment","build_packages",\
1947 + "build_kernel","bootloader","root_overlay","fsscript",\
1948 + "preclean","rcupdate","unmerge","unbind","remove","empty",\
1949 + "clean"]
1950 +
1951 +# if "TARBALL" in self.settings or \
1952 +# "fetch" not in self.settings['options']:
1953 + if "fetch" not in self.settings['options']:
1954 + self.settings["action_sequence"].append("capture")
1955 + self.settings["action_sequence"].append("clear_autoresume")
1956 diff --git a/catalyst/targets/stage4_target.py b/catalyst/targets/stage4_target.py
1957 deleted file mode 100644
1958 index 4dbdb45..0000000
1959 --- a/catalyst/targets/stage4_target.py
1960 +++ /dev/null
1961 @@ -1,38 +0,0 @@
1962 -"""
1963 -stage4 target, builds upon previous stage3/stage4 tarball
1964 -"""
1965 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
1966 -
1967 -from catalyst.base.stagebase import StageBase
1968 -
1969 -
1970 -class stage4_target(StageBase):
1971 - """
1972 - Builder class for stage4.
1973 - """
1974 - def __init__(self,spec,addlargs):
1975 - self.required_values=["stage4/packages"]
1976 - self.valid_values=self.required_values[:]
1977 - self.valid_values.extend(["stage4/use","boot/kernel",\
1978 - "stage4/root_overlay","stage4/fsscript",\
1979 - "stage4/gk_mainargs","splash_theme",\
1980 - "portage_overlay","stage4/rcadd","stage4/rcdel",\
1981 - "stage4/linuxrc","stage4/unmerge","stage4/rm","stage4/empty"])
1982 - StageBase.__init__(self,spec,addlargs)
1983 -
1984 - def set_cleanables(self):
1985 - self.settings["cleanables"]=["/var/tmp/*","/tmp/*"]
1986 -
1987 - def set_action_sequence(self):
1988 - self.settings["action_sequence"]=["unpack","unpack_snapshot",\
1989 - "config_profile_link","setup_confdir","portage_overlay",\
1990 - "bind","chroot_setup","setup_environment","build_packages",\
1991 - "build_kernel","bootloader","root_overlay","fsscript",\
1992 - "preclean","rcupdate","unmerge","unbind","remove","empty",\
1993 - "clean"]
1994 -
1995 -# if "TARBALL" in self.settings or \
1996 -# "fetch" not in self.settings['options']:
1997 - if "fetch" not in self.settings['options']:
1998 - self.settings["action_sequence"].append("capture")
1999 - self.settings["action_sequence"].append("clear_autoresume")
2000 diff --git a/catalyst/targets/tinderbox.py b/catalyst/targets/tinderbox.py
2001 new file mode 100644
2002 index 0000000..4cb7537
2003 --- /dev/null
2004 +++ b/catalyst/targets/tinderbox.py
2005 @@ -0,0 +1,47 @@
2006 +"""
2007 +Tinderbox target
2008 +"""
2009 +# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
2010 +
2011 +import os
2012 +
2013 +from catalyst.support import cmd, list_bashify, CatalystError
2014 +from catalyst.base.stagebase import StageBase
2015 +
2016 +
2017 +class tinderbox(StageBase):
2018 + """
2019 + Builder class for the tinderbox target
2020 + """
2021 + def __init__(self,spec,addlargs):
2022 + self.required_values=["tinderbox/packages"]
2023 + self.valid_values=self.required_values[:]
2024 + self.valid_values.extend(["tinderbox/use"])
2025 + StageBase.__init__(self,spec,addlargs)
2026 +
2027 + def run_local(self):
2028 + # tinderbox
2029 + # example call: "grp.sh run xmms vim sys-apps/gleep"
2030 + try:
2031 + if os.path.exists(self.settings["controller_file"]):
2032 + cmd(self.settings["controller_file"]+" run "+\
2033 + list_bashify(self.settings["tinderbox/packages"]),"run script failed.",env=self.env)
2034 +
2035 + except CatalystError:
2036 + self.unbind()
2037 + raise CatalystError,"Tinderbox aborting due to error."
2038 +
2039 + def set_cleanables(self):
2040 + self.settings['cleanables'] = [
2041 + '/etc/resolv.conf',
2042 + '/var/tmp/*',
2043 + '/root/*',
2044 + self.settings['portdir'],
2045 + ]
2046 +
2047 + def set_action_sequence(self):
2048 + #Default action sequence for run method
2049 + self.settings["action_sequence"]=["unpack","unpack_snapshot",\
2050 + "config_profile_link","setup_confdir","bind","chroot_setup",\
2051 + "setup_environment","run_local","preclean","unbind","clean",\
2052 + "clear_autoresume"]
2053 diff --git a/catalyst/targets/tinderbox_target.py b/catalyst/targets/tinderbox_target.py
2054 deleted file mode 100644
2055 index 0c389e6..0000000
2056 --- a/catalyst/targets/tinderbox_target.py
2057 +++ /dev/null
2058 @@ -1,47 +0,0 @@
2059 -"""
2060 -Tinderbox target
2061 -"""
2062 -# NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
2063 -
2064 -import os
2065 -
2066 -from catalyst.support import cmd, list_bashify, CatalystError
2067 -from catalyst.base.stagebase import StageBase
2068 -
2069 -
2070 -class tinderbox_target(StageBase):
2071 - """
2072 - Builder class for the tinderbox target
2073 - """
2074 - def __init__(self,spec,addlargs):
2075 - self.required_values=["tinderbox/packages"]
2076 - self.valid_values=self.required_values[:]
2077 - self.valid_values.extend(["tinderbox/use"])
2078 - StageBase.__init__(self,spec,addlargs)
2079 -
2080 - def run_local(self):
2081 - # tinderbox
2082 - # example call: "grp.sh run xmms vim sys-apps/gleep"
2083 - try:
2084 - if os.path.exists(self.settings["controller_file"]):
2085 - cmd(self.settings["controller_file"]+" run "+\
2086 - list_bashify(self.settings["tinderbox/packages"]),"run script failed.",env=self.env)
2087 -
2088 - except CatalystError:
2089 - self.unbind()
2090 - raise CatalystError,"Tinderbox aborting due to error."
2091 -
2092 - def set_cleanables(self):
2093 - self.settings['cleanables'] = [
2094 - '/etc/resolv.conf',
2095 - '/var/tmp/*',
2096 - '/root/*',
2097 - self.settings['portdir'],
2098 - ]
2099 -
2100 - def set_action_sequence(self):
2101 - #Default action sequence for run method
2102 - self.settings["action_sequence"]=["unpack","unpack_snapshot",\
2103 - "config_profile_link","setup_confdir","bind","chroot_setup",\
2104 - "setup_environment","run_local","preclean","unbind","clean",\
2105 - "clear_autoresume"]
2106 --
2107 2.1.0