Lines 98-128
Link Here
|
98 |
self.settings[envvar] = os.environ[envvar] |
98 |
self.settings[envvar] = os.environ[envvar] |
99 |
|
99 |
|
100 |
# define all of our core variables |
100 |
# define all of our core variables |
101 |
self.settings["target_profile"]=self.settings["profile"] |
101 |
self.set_target_profile() |
102 |
self.settings["target_subpath"]=self.settings["rel_type"]+"/"+self.settings["target"]+\ |
102 |
self.set_target_subpath() |
103 |
"-"+self.settings["subarch"]+"-"+self.settings["version_stamp"] |
103 |
self.set_snapshot_path() |
104 |
|
104 |
self.set_target_path() |
105 |
st=self.settings["storedir"] |
105 |
self.set_source_path() |
106 |
self.settings["snapshot_path"]=st+"/snapshots/portage-"+self.settings["snapshot"]+".tar.bz2" |
106 |
self.set_chroot_path() |
107 |
if self.settings["target"] in ["grp","tinderbox"]: |
107 |
self.set_action_sequence() |
108 |
# grp creates a directory of packages and sources rather than a compressed tarball |
108 |
self.set_use() |
109 |
self.settings["target_path"]=st+"/builds/"+self.settings["target_subpath"] |
109 |
self.set_stage_path() |
110 |
self.settings["source_path"]=st+"/builds/"+self.settings["source_subpath"]+".tar.bz2" |
110 |
|
111 |
|
|
|
112 |
elif self.settings["target"] == "livecd-stage2": |
113 |
self.settings["source_path"]=st+"/tmp/"+self.settings["source_subpath"] |
114 |
self.settings["cdroot_path"]=st+"/builds/"+self.settings["target_subpath"] |
115 |
|
116 |
elif self.settings["target"] == "netboot": |
117 |
self.settings["target_path"]=st+"/builds/"+self.settings["target_subpath"] |
118 |
self.settings["source_path"]=st+"/builds/"+self.settings["source_subpath"]+".tar.bz2" |
119 |
|
120 |
else: |
121 |
self.settings["target_path"]=st+"/builds/"+self.settings["target_subpath"]+".tar.bz2" |
122 |
self.settings["source_path"]=st+"/builds/"+self.settings["source_subpath"]+".tar.bz2" |
123 |
|
124 |
self.settings["chroot_path"]=st+"/tmp/"+self.settings["target_subpath"] |
125 |
|
126 |
# this next line checks to make sure that the specified variables exist on disk. |
111 |
# this next line checks to make sure that the specified variables exist on disk. |
127 |
file_locate(self.settings,["source_path","snapshot_path","distdir"],expand=0) |
112 |
file_locate(self.settings,["source_path","snapshot_path","distdir"],expand=0) |
128 |
|
113 |
|
Lines 134-147
Link Here
|
134 |
self.mounts=[ "/proc","/dev","/dev/pts","/usr/portage/distfiles" ] |
119 |
self.mounts=[ "/proc","/dev","/dev/pts","/usr/portage/distfiles" ] |
135 |
self.mountmap={"/proc":"/proc", "/dev":"/dev", "/dev/pts":"/dev/pts",\ |
120 |
self.mountmap={"/proc":"/proc", "/dev":"/dev", "/dev/pts":"/dev/pts",\ |
136 |
"/usr/portage/distfiles":self.settings["distdir"]} |
121 |
"/usr/portage/distfiles":self.settings["distdir"]} |
137 |
|
122 |
self.set_mounts() |
138 |
if self.settings["target"]=="grp": |
|
|
139 |
self.mounts.append("/tmp/grp") |
140 |
self.mountmap["/tmp/grp"]=self.settings["target_path"] |
141 |
|
123 |
|
142 |
# configure any user specified options (either in catalyst.conf or on the cmdline) |
124 |
# configure any user specified options (either in catalyst.conf or on the cmdline) |
143 |
if self.settings.has_key("PKGCACHE"): |
125 |
if self.settings.has_key("PKGCACHE"): |
144 |
self.settings["pkgcache_path"]=st+"/packages/"+self.settings["target_subpath"] |
126 |
self.settings["pkgcache_path"]=self.settings["storedir"]+"/packages/"+self.settings["target_subpath"] |
145 |
self.mounts.append("/usr/portage/packages") |
127 |
self.mounts.append("/usr/portage/packages") |
146 |
self.mountmap["/usr/portage/packages"]=self.settings["pkgcache_path"] |
128 |
self.mountmap["/usr/portage/packages"]=self.settings["pkgcache_path"] |
147 |
|
129 |
|
Lines 158-164
Link Here
|
158 |
self.mountmap["/var/tmp/ccache"]=ccdir |
140 |
self.mountmap["/var/tmp/ccache"]=ccdir |
159 |
# for the chroot: |
141 |
# for the chroot: |
160 |
os.environ["CCACHE_DIR"]="/var/tmp/ccache" |
142 |
os.environ["CCACHE_DIR"]="/var/tmp/ccache" |
161 |
|
143 |
|
|
|
144 |
def set_target_profile(self): |
145 |
self.settings["target_profile"]=self.settings["profile"] |
146 |
|
147 |
def set_target_subpath(self): |
148 |
self.settings["target_subpath"]=self.settings["rel_type"]+"/"+self.settings["target"]+\ |
149 |
"-"+self.settings["subarch"]+"-"+self.settings["version_stamp"] |
150 |
|
151 |
def set_target_path(self): |
152 |
self.settings["target_path"]=self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+".tar.bz2" |
153 |
|
154 |
def set_source_path(self): |
155 |
self.settings["source_path"]=self.settings["storedir"]+"/builds/"+self.settings["source_subpath"]+".tar.bz2" |
156 |
|
157 |
def set_snapshot_path(self): |
158 |
self.settings["snapshot_path"]=self.settings["storedir"]+"/snapshots/portage-"+self.settings["snapshot"]+".tar.bz2" |
159 |
|
160 |
def set_chroot_path(self): |
161 |
self.settings["chroot_path"]=self.settings["storedir"]+"/tmp/"+self.settings["target_subpath"] |
162 |
|
163 |
def set_action_sequence(self): |
164 |
#Default action sequence for run method |
165 |
self.settings["action_sequence"]=["dir_setup","unpack_and_bind","chroot_setup",\ |
166 |
"setup_environment","run_local","preclean","unbind","clean","capture"] |
167 |
|
168 |
def set_use(self): |
169 |
pass |
170 |
|
171 |
def set_stage_path(self): |
172 |
self.settings["stage_path"]=self.settings["chroot_path"] |
173 |
def set_mounts(self): |
174 |
pass |
175 |
|
162 |
def mount_safety_check(self): |
176 |
def mount_safety_check(self): |
163 |
mypath=self.settings["chroot_path"] |
177 |
mypath=self.settings["chroot_path"] |
164 |
|
178 |
|
Lines 193-199
Link Here
|
193 |
print "Setting up directories..." |
207 |
print "Setting up directories..." |
194 |
self.mount_safety_check() |
208 |
self.mount_safety_check() |
195 |
|
209 |
|
196 |
if not self.settings["target"] == "livecd-stage2": |
210 |
if os.path.exists(self.settings["chroot_path"]): |
197 |
cmd("rm -rf "+self.settings["chroot_path"],\ |
211 |
cmd("rm -rf "+self.settings["chroot_path"],\ |
198 |
"Could not remove existing directory: "+self.settings["chroot_path"]) |
212 |
"Could not remove existing directory: "+self.settings["chroot_path"]) |
199 |
|
213 |
|
Lines 301-336
Link Here
|
301 |
myf.write("# Please consult /etc/make.conf.example for a more detailed example\n") |
315 |
myf.write("# Please consult /etc/make.conf.example for a more detailed example\n") |
302 |
myf.write('CFLAGS="'+self.settings["CFLAGS"]+'"\n') |
316 |
myf.write('CFLAGS="'+self.settings["CFLAGS"]+'"\n') |
303 |
myf.write('CHOST="'+self.settings["CHOST"]+'"\n') |
317 |
myf.write('CHOST="'+self.settings["CHOST"]+'"\n') |
304 |
|
|
|
305 |
# figure out what our USE vars are for building |
318 |
# figure out what our USE vars are for building |
306 |
myusevars=[] |
319 |
myusevars=[] |
307 |
if self.settings.has_key("HOSTUSE"): |
320 |
if self.settings.has_key("HOSTUSE"): |
308 |
myusevars.extend(self.settings["HOSTUSE"]) |
321 |
myusevars.extend(self.settings["HOSTUSE"]) |
309 |
|
322 |
|
310 |
if self.settings["target"]=="grp": |
323 |
if self.settings.has_key("use"): |
311 |
myusevars.append("bindist") |
324 |
myusevars.extend(self.settings["use"]) |
312 |
myusevars.extend(self.settings["grp/use"]) |
|
|
313 |
myf.write('USE="'+string.join(myusevars)+'"\n') |
314 |
|
315 |
elif self.settings["target"]=="tinderbox": |
316 |
myusevars.extend(self.settings["tinderbox/use"]) |
317 |
myf.write('USE="'+string.join(myusevars)+'"\n') |
318 |
|
319 |
elif self.settings["target"]=="livecd-stage1": |
320 |
myusevars.extend(self.settings["livecd/use"]) |
321 |
myf.write('USE="'+string.join(myusevars)+'"\n') |
322 |
|
323 |
elif self.settings["target"]=="embedded": |
324 |
myusevars.extend(self.settings["embedded/use"]) |
325 |
myf.write('USE="'+string.join(myusevars)+'"\n') |
325 |
myf.write('USE="'+string.join(myusevars)+'"\n') |
326 |
|
326 |
|
327 |
if self.settings.has_key("CXXFLAGS"): |
327 |
if self.settings.has_key("CXXFLAGS"): |
328 |
myf.write('CXXFLAGS="'+self.settings["CXXFLAGS"]+'"\n') |
328 |
myf.write('CXXFLAGS="'+self.settings["CXXFLAGS"]+'"\n') |
329 |
|
329 |
|
330 |
else: |
330 |
else: |
331 |
myf.write('CXXFLAGS="${CFLAGS}"\n') |
331 |
myf.write('CXXFLAGS="${CFLAGS}"\n') |
332 |
myf.close() |
332 |
myf.close() |
333 |
|
333 |
|
334 |
def clean(self): |
334 |
def clean(self): |
335 |
destpath=self.settings["chroot_path"] |
335 |
destpath=self.settings["chroot_path"] |
336 |
|
336 |
|
Lines 381-397
Link Here
|
381 |
|
381 |
|
382 |
print "Creating stage tarball..." |
382 |
print "Creating stage tarball..." |
383 |
|
383 |
|
384 |
if self.settings["target"]=="stage1": |
384 |
cmd("tar cjf "+self.settings["target_path"]+" -C "+self.settings["stage_path"]+\ |
385 |
cmd("tar cjf "+self.settings["target_path"]+" -C "+self.settings["chroot_path"]+\ |
385 |
" .","Couldn't create stage tarball") |
386 |
"/tmp/stage1root .","Couldn't create stage tarball") |
|
|
387 |
|
388 |
elif self.settings["target"]=="embedded": |
389 |
cmd("tar cjf "+self.settings["target_path"]+" -C "+self.settings["chroot_path"]+\ |
390 |
"/tmp/mergeroot .","Couldn't create stage tarball") |
391 |
|
392 |
else: |
393 |
cmd("tar cjf "+self.settings["target_path"]+" -C "+self.settings["chroot_path"]+\ |
394 |
" .","Couldn't create stage tarball") |
395 |
|
386 |
|
396 |
def run_local(self): |
387 |
def run_local(self): |
397 |
try: |
388 |
try: |
Lines 401-417
Link Here
|
401 |
except CatalystError: |
392 |
except CatalystError: |
402 |
self.unbind() |
393 |
self.unbind() |
403 |
raise CatalystError,"Stage build aborting due to error." |
394 |
raise CatalystError,"Stage build aborting due to error." |
404 |
|
395 |
|
405 |
def run(self): |
396 |
def setup_environment(self): |
406 |
self.dir_setup() |
|
|
407 |
self.unpack_and_bind() |
408 |
try: |
409 |
self.chroot_setup() |
410 |
|
411 |
except: |
412 |
self.unbind() |
413 |
raise |
414 |
|
415 |
# modify the current environment. This is an ugly hack that should be fixed. We need this |
397 |
# modify the current environment. This is an ugly hack that should be fixed. We need this |
416 |
# to use the os.system() call since we can't specify our own environ: |
398 |
# to use the os.system() call since we can't specify our own environ: |
417 |
for x in self.settings.keys(): |
399 |
for x in self.settings.keys(): |
Lines 423-446
Link Here
|
423 |
os.environ[varname]=self.settings[x] |
405 |
os.environ[varname]=self.settings[x] |
424 |
elif type(self.settings[x])==types.ListType: |
406 |
elif type(self.settings[x])==types.ListType: |
425 |
os.environ[varname]=string.join(self.settings[x]) |
407 |
os.environ[varname]=string.join(self.settings[x]) |
426 |
|
408 |
|
427 |
self.run_local() |
409 |
def run(self): |
428 |
if self.settings["target"] in ["stage1","stage2","stage3","livecd-stage1","livecd-stage2"]: |
|
|
429 |
self.preclean() |
430 |
|
431 |
if self.settings["target"] in ["livecd-stage2"]: |
432 |
self.unmerge() |
433 |
|
434 |
# unbind everything here so that we can clean() |
435 |
self.unbind() |
436 |
|
437 |
if self.settings["target"] in ["stage1","stage2","stage3","livecd-stage1","livecd-stage2"]: |
438 |
# clean is for removing things after bind-mounts are |
439 |
# unmounted (general file removal and cleanup) |
440 |
self.clean() |
441 |
|
442 |
if self.settings["target"] in ["stage1","stage2","stage3","embedded"]: |
443 |
self.capture() |
444 |
|
410 |
|
445 |
if self.settings["target"] in ["livecd-stage2"]: |
411 |
for x in self.settings["action_sequence"]: |
446 |
self.cdroot_setup() |
412 |
print "Running action sequence: "+x |
|
|
413 |
if x == 'chroot_setup': |
414 |
try: |
415 |
self.chroot_setup() |
416 |
except: |
417 |
self.unbind() |
418 |
raise |
419 |
else: |
420 |
apply(getattr(self,x)) |