1 |
Very few of the commands we execute actually need to be run through a |
2 |
shell. Extend the cmd helper to take an argv and convert the majority |
3 |
of calls over to that. |
4 |
--- |
5 |
catalyst/base/stagebase.py | 94 +++++++++++++++++++------------------------ |
6 |
catalyst/support.py | 48 +++++++++++----------- |
7 |
catalyst/targets/grp.py | 9 +++-- |
8 |
catalyst/targets/netboot.py | 28 ++++++------- |
9 |
catalyst/targets/netboot2.py | 14 +++---- |
10 |
catalyst/targets/snapshot.py | 14 +++++-- |
11 |
catalyst/targets/tinderbox.py | 6 +-- |
12 |
7 files changed, 104 insertions(+), 109 deletions(-) |
13 |
|
14 |
diff --git a/catalyst/base/stagebase.py b/catalyst/base/stagebase.py |
15 |
index 0b25516..78e5b94 100644 |
16 |
--- a/catalyst/base/stagebase.py |
17 |
+++ b/catalyst/base/stagebase.py |
18 |
@@ -13,7 +13,7 @@ from catalyst import log |
19 |
from catalyst.defaults import (SOURCE_MOUNT_DEFAULTS, TARGET_MOUNT_DEFAULTS, |
20 |
PORT_LOGDIR_CLEAN) |
21 |
from catalyst.support import (CatalystError, file_locate, normpath, |
22 |
- cmd, list_bashify, read_makeconf, ismount, file_check) |
23 |
+ cmd, read_makeconf, ismount, file_check) |
24 |
from catalyst.base.targetbase import TargetBase |
25 |
from catalyst.base.clearbase import ClearBase |
26 |
from catalyst.base.genbase import GenBase |
27 |
@@ -648,7 +648,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
28 |
killcmd = normpath(self.settings["sharedir"] + |
29 |
self.settings["shdir"] + "/support/kill-chroot-pids.sh") |
30 |
if os.path.exists(killcmd): |
31 |
- cmd(killcmd, env=self.env) |
32 |
+ cmd([killcmd], env=self.env) |
33 |
|
34 |
def mount_safety_check(self): |
35 |
""" |
36 |
@@ -873,10 +873,9 @@ class StageBase(TargetBase, ClearBase, GenBase): |
37 |
clear_path(self.settings['chroot_path'] + |
38 |
self.settings['port_conf'] + '/make.profile') |
39 |
ensure_dirs(self.settings['chroot_path'] + self.settings['port_conf']) |
40 |
- cmd("ln -sf ../.." + self.settings["portdir"] + "/profiles/" + |
41 |
- self.settings["target_profile"] + " " + |
42 |
- self.settings["chroot_path"] + |
43 |
- self.settings["port_conf"] + "/make.profile", |
44 |
+ cmd(['ln', '-sf', |
45 |
+ '../..' + self.settings['portdir'] + '/profiles/' + self.settings['target_profile'], |
46 |
+ self.settings['chroot_path'] + self.settings['port_conf'] + '/make.profile'], |
47 |
env=self.env) |
48 |
self.resume.enable("config_profile_link") |
49 |
|
50 |
@@ -892,7 +891,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
51 |
# The trailing slashes on both paths are important: |
52 |
# We want to make sure rsync copies the dirs into each |
53 |
# other and not as subdirs. |
54 |
- cmd('rsync -a %s/ %s/' % (self.settings['portage_confdir'], dest), |
55 |
+ cmd(['rsync', '-a', self.settings['portage_confdir'] + '/', dest + '/'], |
56 |
env=self.env) |
57 |
self.resume.enable("setup_confdir") |
58 |
|
59 |
@@ -914,7 +913,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
60 |
"/root_overlay"]: |
61 |
if os.path.exists(x): |
62 |
log.info('Copying root_overlay: %s', x) |
63 |
- cmd('rsync -a ' + x + '/ ' + self.settings['chroot_path'], |
64 |
+ cmd(['rsync', '-a', x + '/', self.settings['chroot_path']], |
65 |
env=self.env) |
66 |
|
67 |
def base_dirs(self): |
68 |
@@ -922,7 +921,6 @@ class StageBase(TargetBase, ClearBase, GenBase): |
69 |
|
70 |
def bind(self): |
71 |
for x in self.mounts: |
72 |
- _cmd = '' |
73 |
log.debug('bind(); x = %s', x) |
74 |
target = normpath(self.settings["chroot_path"] + self.target_mounts[x]) |
75 |
ensure_dirs(target, mode=0o755) |
76 |
@@ -935,23 +933,25 @@ class StageBase(TargetBase, ClearBase, GenBase): |
77 |
log.debug('bind(); src = %s', src) |
78 |
if "snapcache" in self.settings["options"] and x == "portdir": |
79 |
self.snapcache_lock.read_lock() |
80 |
+ _cmd = None |
81 |
if os.uname()[0] == "FreeBSD": |
82 |
if src == "/dev": |
83 |
- _cmd = "mount -t devfs none " + target |
84 |
+ _cmd = ['mount', '-t', 'devfs', 'none', target] |
85 |
else: |
86 |
- _cmd = "mount_nullfs " + src + " " + target |
87 |
+ _cmd = ['mount_nullfs', src, target] |
88 |
else: |
89 |
if src == "tmpfs": |
90 |
if "var_tmpfs_portage" in self.settings: |
91 |
- _cmd = "mount -t tmpfs -o size=" + \ |
92 |
- self.settings["var_tmpfs_portage"] + "G " + \ |
93 |
- src + " " + target |
94 |
+ _cmd = ['mount', '-t', 'tmpfs', |
95 |
+ '-o', 'size=' + self.settings['var_tmpfs_portage'] + 'G', |
96 |
+ src, target] |
97 |
elif src == "shmfs": |
98 |
- _cmd = "mount -t tmpfs -o noexec,nosuid,nodev shm " + target |
99 |
+ _cmd = ['mount', '-t', 'tmpfs', '-o', 'noexec,nosuid,nodev', 'shm', target] |
100 |
else: |
101 |
- _cmd = "mount --bind " + src + " " + target |
102 |
- log.debug('bind(); _cmd = %s', _cmd) |
103 |
- cmd(_cmd, env=self.env, fail_func=self.unbind) |
104 |
+ _cmd = ['mount', '--bind', src, target] |
105 |
+ if _cmd: |
106 |
+ log.debug('bind(); _cmd = %s', _cmd) |
107 |
+ cmd(_cmd, env=self.env, fail_func=self.unbind) |
108 |
log.debug('bind(); finished :D') |
109 |
|
110 |
def unbind(self): |
111 |
@@ -1134,7 +1134,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
112 |
else: |
113 |
if "fsscript" in self.settings: |
114 |
if os.path.exists(self.settings["controller_file"]): |
115 |
- cmd(self.settings['controller_file'] + ' fsscript', |
116 |
+ cmd([self.settings['controller_file'], 'fsscript'], |
117 |
env=self.env) |
118 |
self.resume.enable("fsscript") |
119 |
|
120 |
@@ -1144,7 +1144,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
121 |
log.notice('Resume point detected, skipping rcupdate operation...') |
122 |
else: |
123 |
if os.path.exists(self.settings["controller_file"]): |
124 |
- cmd(self.settings["controller_file"]+" rc-update",\ |
125 |
+ cmd([self.settings['controller_file'], 'rc-update'], |
126 |
env=self.env) |
127 |
self.resume.enable("rcupdate") |
128 |
|
129 |
@@ -1178,12 +1178,12 @@ class StageBase(TargetBase, ClearBase, GenBase): |
130 |
|
131 |
# Clean up old and obsoleted files in /etc |
132 |
if os.path.exists(self.settings["stage_path"]+"/etc"): |
133 |
- cmd("find "+self.settings["stage_path"]+\ |
134 |
- "/etc -maxdepth 1 -name \"*-\" | xargs rm -f",\ |
135 |
+ cmd(['find', self.settings['stage_path'] + '/etc', |
136 |
+ '-maxdepth', '1', '-name', '*-', '-delete'], |
137 |
env=self.env) |
138 |
|
139 |
if os.path.exists(self.settings["controller_file"]): |
140 |
- cmd(self.settings['controller_file'] + ' clean', env=self.env) |
141 |
+ cmd([self.settings['controller_file'], 'clean'], env=self.env) |
142 |
self.resume.enable("clean") |
143 |
|
144 |
def empty(self): |
145 |
@@ -1224,7 +1224,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
146 |
clear_path(self.settings["chroot_path"] + x) |
147 |
try: |
148 |
if os.path.exists(self.settings["controller_file"]): |
149 |
- cmd(self.settings['controller_file'] + ' clean', |
150 |
+ cmd([self.settings['controller_file'], 'clean'], |
151 |
env=self.env) |
152 |
self.resume.enable("remove") |
153 |
except: |
154 |
@@ -1238,7 +1238,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
155 |
else: |
156 |
try: |
157 |
if os.path.exists(self.settings["controller_file"]): |
158 |
- cmd(self.settings['controller_file'] + ' preclean', |
159 |
+ cmd([self.settings['controller_file'], 'preclean'], |
160 |
env=self.env) |
161 |
self.resume.enable("preclean") |
162 |
|
163 |
@@ -1295,7 +1295,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
164 |
try: |
165 |
if os.path.exists(self.settings["controller_file"]): |
166 |
log.info('run_local() starting controller script...') |
167 |
- cmd(self.settings["controller_file"]+" run",\ |
168 |
+ cmd([self.settings['controller_file'], 'run'], |
169 |
env=self.env) |
170 |
self.resume.enable("run_local") |
171 |
else: |
172 |
@@ -1422,19 +1422,12 @@ class StageBase(TargetBase, ClearBase, GenBase): |
173 |
if isinstance(self.settings[self.settings['spec_prefix']+'/unmerge'], str): |
174 |
self.settings[self.settings["spec_prefix"]+"/unmerge"]=\ |
175 |
[self.settings[self.settings["spec_prefix"]+"/unmerge"]] |
176 |
- myunmerge=\ |
177 |
- self.settings[self.settings["spec_prefix"]+"/unmerge"][:] |
178 |
- |
179 |
- for x in range(0,len(myunmerge)): |
180 |
- # Surround args with quotes for passing to bash, allows |
181 |
- # things like "<" to remain intact |
182 |
- myunmerge[x]="'"+myunmerge[x]+"'" |
183 |
- myunmerge = ' '.join(myunmerge) |
184 |
|
185 |
# Before cleaning, unmerge stuff |
186 |
try: |
187 |
- cmd(self.settings['controller_file'] + |
188 |
- ' unmerge ' + myunmerge, env=self.env) |
189 |
+ cmd([self.settings['controller_file'], 'unmerge'] + |
190 |
+ self.settings[self.settings['spec_prefix'] + '/unmerge'], |
191 |
+ env=self.env) |
192 |
log.info('unmerge shell script') |
193 |
except CatalystError: |
194 |
self.unbind() |
195 |
@@ -1447,9 +1440,8 @@ class StageBase(TargetBase, ClearBase, GenBase): |
196 |
log.notice('Resume point detected, skipping target_setup operation...') |
197 |
else: |
198 |
log.notice('Setting up filesystems per filesystem type') |
199 |
- cmd(self.settings["controller_file"]+\ |
200 |
- " target_image_setup "+ self.settings["target_path"],\ |
201 |
- env=self.env) |
202 |
+ cmd([self.settings['controller_file'], 'target_image_setup', |
203 |
+ self.settings['target_path']], env=self.env) |
204 |
self.resume.enable("target_setup") |
205 |
|
206 |
def setup_overlay(self): |
207 |
@@ -1460,7 +1452,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
208 |
if self.settings["spec_prefix"]+"/overlay" in self.settings: |
209 |
for x in self.settings[self.settings["spec_prefix"]+"/overlay"]: |
210 |
if os.path.exists(x): |
211 |
- cmd('rsync -a ' + x + '/ ' + self.settings['target_path'], |
212 |
+ cmd(['rsync', '-a', x + '/', self.settings['target_path']], |
213 |
env=self.env) |
214 |
self.resume.enable("setup_overlay") |
215 |
|
216 |
@@ -1471,8 +1463,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
217 |
else: |
218 |
# Create the ISO |
219 |
if "iso" in self.settings: |
220 |
- cmd(self.settings["controller_file"]+" iso "+\ |
221 |
- self.settings['iso'], |
222 |
+ cmd([self.settings['controller_file'], 'iso', self.settings['iso']], |
223 |
env=self.env) |
224 |
self.gen_contents_file(self.settings["iso"]) |
225 |
self.gen_digest_file(self.settings["iso"]) |
226 |
@@ -1492,12 +1483,9 @@ class StageBase(TargetBase, ClearBase, GenBase): |
227 |
and self.resume.is_enabled("build_packages"): |
228 |
log.notice('Resume point detected, skipping build_packages operation...') |
229 |
else: |
230 |
- mypack=\ |
231 |
- list_bashify(self.settings[self.settings["spec_prefix"]\ |
232 |
- +"/packages"]) |
233 |
try: |
234 |
- cmd(self.settings["controller_file"]+\ |
235 |
- " build_packages "+mypack,\ |
236 |
+ cmd([self.settings['controller_file'], 'build_packages'] + |
237 |
+ self.settings[self.settings["spec_prefix"] + '/packages'], |
238 |
env=self.env) |
239 |
fileutils.touch(build_packages_resume) |
240 |
self.resume.enable("build_packages") |
241 |
@@ -1518,7 +1506,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
242 |
if isinstance(mynames, str): |
243 |
mynames=[mynames] |
244 |
# Execute the script that sets up the kernel build environment |
245 |
- cmd(self.settings['controller_file'] + ' pre-kmerge', |
246 |
+ cmd([self.settings['controller_file'], 'pre-kmerge'], |
247 |
env=self.env) |
248 |
for kname in mynames: |
249 |
self._build_kernel(kname=kname) |
250 |
@@ -1556,7 +1544,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
251 |
self._copy_initramfs_overlay(kname=kname) |
252 |
|
253 |
# Execute the script that builds the kernel |
254 |
- cmd(self.settings['controller_file'] + ' kernel ' + kname, |
255 |
+ cmd([self.settings['controller_file'], 'kernel', kname], |
256 |
env=self.env) |
257 |
|
258 |
if "boot/kernel/"+kname+"/initramfs_overlay" in self.settings: |
259 |
@@ -1566,7 +1554,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
260 |
self.resume.is_enabled("build_kernel_"+kname) |
261 |
|
262 |
# Execute the script that cleans up the kernel build environment |
263 |
- cmd(self.settings['controller_file'] + ' post-kmerge', |
264 |
+ cmd([self.settings['controller_file'], 'post-kmerge'], |
265 |
env=self.env) |
266 |
|
267 |
def _copy_kernel_config(self, kname): |
268 |
@@ -1604,8 +1592,8 @@ class StageBase(TargetBase, ClearBase, GenBase): |
269 |
log.notice('Resume point detected, skipping bootloader operation...') |
270 |
else: |
271 |
try: |
272 |
- cmd(self.settings["controller_file"]+\ |
273 |
- " bootloader " + self.settings["target_path"].rstrip('/'),\ |
274 |
+ cmd([self.settings['controller_file'], 'bootloader', |
275 |
+ self.settings['target_path'].rstrip('/')], |
276 |
env=self.env) |
277 |
self.resume.enable("bootloader") |
278 |
except CatalystError: |
279 |
@@ -1618,7 +1606,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
280 |
log.notice('Resume point detected, skipping build_packages operation...') |
281 |
else: |
282 |
try: |
283 |
- cmd(self.settings['controller_file'] + ' livecd-update', |
284 |
+ cmd([self.settings['controller_file'], 'livecd-update'], |
285 |
env=self.env) |
286 |
self.resume.enable("livecd_update") |
287 |
|
288 |
diff --git a/catalyst/support.py b/catalyst/support.py |
289 |
index 0ce49d2..f2ae5bb 100644 |
290 |
--- a/catalyst/support.py |
291 |
+++ b/catalyst/support.py |
292 |
@@ -12,18 +12,6 @@ from catalyst.defaults import valid_config_file_values |
293 |
BASH_BINARY = "/bin/bash" |
294 |
|
295 |
|
296 |
-def list_bashify(mylist): |
297 |
- if isinstance(mylist, str): |
298 |
- mypack=[mylist] |
299 |
- else: |
300 |
- mypack=mylist[:] |
301 |
- for x in range(0,len(mypack)): |
302 |
- # surround args with quotes for passing to bash, |
303 |
- # allows things like "<" to remain intact |
304 |
- mypack[x]="'"+mypack[x]+"'" |
305 |
- return ' '.join(mypack) |
306 |
- |
307 |
- |
308 |
class CatalystError(Exception): |
309 |
def __init__(self, message, print_traceback=False): |
310 |
if message: |
311 |
@@ -31,26 +19,38 @@ class CatalystError(Exception): |
312 |
|
313 |
|
314 |
def cmd(mycmd, env=None, debug=False, fail_func=None): |
315 |
- if env is None: |
316 |
- env = {} |
317 |
+ """Run the external |mycmd|. |
318 |
+ |
319 |
+ If |mycmd| is a string, then it's assumed to be a bash snippet and will |
320 |
+ be run through bash. Otherwise, it's a standalone command line and will |
321 |
+ be run directly. |
322 |
+ """ |
323 |
log.debug('cmd: %r', mycmd) |
324 |
sys.stdout.flush() |
325 |
- args=[BASH_BINARY] |
326 |
- if "BASH_ENV" not in env: |
327 |
+ |
328 |
+ if env is None: |
329 |
+ env = {} |
330 |
+ if 'BASH_ENV' not in env: |
331 |
env = env.copy() |
332 |
- env["BASH_ENV"] = "/etc/spork/is/not/valid/profile.env" |
333 |
- if debug: |
334 |
- args.append("-x") |
335 |
- args.append("-c") |
336 |
- args.append(mycmd) |
337 |
+ env['BASH_ENV'] = '/etc/spork/is/not/valid/profile.env' |
338 |
+ |
339 |
+ args = [] |
340 |
+ if isinstance(mycmd, str): |
341 |
+ args.append(BASH_BINARY) |
342 |
+ if debug: |
343 |
+ args.append('-x') |
344 |
+ args.extend(['-c', mycmd]) |
345 |
+ else: |
346 |
+ args.extend(mycmd) |
347 |
|
348 |
log.debug('args: %r', args) |
349 |
proc = Popen(args, env=env) |
350 |
- if proc.wait() != 0: |
351 |
+ ret = proc.wait() |
352 |
+ if ret: |
353 |
if fail_func: |
354 |
- log.error('CMD(), NON-Zero command return. Running fail_func().') |
355 |
+ log.error('cmd(%r) exited %s; running fail_func().', args, ret) |
356 |
fail_func() |
357 |
- raise CatalystError("cmd() NON-zero return value from: %s" % args, |
358 |
+ raise CatalystError('cmd(%r) exited %s' % (args, ret), |
359 |
print_traceback=False) |
360 |
|
361 |
|
362 |
diff --git a/catalyst/targets/grp.py b/catalyst/targets/grp.py |
363 |
index c1bd2dd..049bc55 100644 |
364 |
--- a/catalyst/targets/grp.py |
365 |
+++ b/catalyst/targets/grp.py |
366 |
@@ -7,7 +7,7 @@ import os |
367 |
import glob |
368 |
|
369 |
from catalyst import log |
370 |
-from catalyst.support import (CatalystError, normpath, cmd, list_bashify) |
371 |
+from catalyst.support import (CatalystError, normpath, cmd) |
372 |
from catalyst.base.stagebase import StageBase |
373 |
|
374 |
|
375 |
@@ -41,10 +41,11 @@ class grp(StageBase): |
376 |
def run_local(self): |
377 |
for pkgset in self.settings["grp"]: |
378 |
# example call: "grp.sh run pkgset cd1 xmms vim sys-apps/gleep" |
379 |
- mypackages=list_bashify(self.settings["grp/"+pkgset+"/packages"]) |
380 |
try: |
381 |
- cmd(self.settings["controller_file"]+" run "+self.settings["grp/"+pkgset+"/type"]\ |
382 |
- +" "+pkgset+" "+mypackages,env=self.env) |
383 |
+ cmd([self.settings['controller_file'], 'run', |
384 |
+ self.settings['grp/' + pkgset + '/type'], |
385 |
+ pkgset] + self.settings['grp/' + pkgset + '/packages'], |
386 |
+ env=self.env) |
387 |
|
388 |
except CatalystError: |
389 |
self.unbind() |
390 |
diff --git a/catalyst/targets/netboot.py b/catalyst/targets/netboot.py |
391 |
index 5285c05..161300d 100644 |
392 |
--- a/catalyst/targets/netboot.py |
393 |
+++ b/catalyst/targets/netboot.py |
394 |
@@ -7,7 +7,7 @@ import os |
395 |
|
396 |
from catalyst import log |
397 |
from catalyst.support import (CatalystError, normpath, |
398 |
- cmd, list_bashify, file_locate) |
399 |
+ cmd, file_locate) |
400 |
|
401 |
from catalyst.base.stagebase import StageBase |
402 |
|
403 |
@@ -62,22 +62,22 @@ class netboot(StageBase): |
404 |
# def build_packages(self): |
405 |
# # build packages |
406 |
# if "netboot/packages" in self.settings: |
407 |
-# mypack=list_bashify(self.settings["netboot/packages"]) |
408 |
-# try: |
409 |
-# cmd(self.settings["controller_file"]+" packages "+mypack,env=self.env) |
410 |
-# except CatalystError: |
411 |
-# self.unbind() |
412 |
-# raise CatalystError("netboot build aborting due to error.", |
413 |
-# print_traceback=True) |
414 |
+# try: |
415 |
+# cmd([self.settings['controller_file'], 'packages'] + |
416 |
+# self.settings['netboot/packages'], env=self.env) |
417 |
+# except CatalystError: |
418 |
+# self.unbind() |
419 |
+# raise CatalystError('netboot build aborting due to error.', |
420 |
+# print_traceback=True) |
421 |
|
422 |
def build_busybox(self): |
423 |
# build busybox |
424 |
if "netboot/busybox_config" in self.settings: |
425 |
- mycmd = self.settings["netboot/busybox_config"] |
426 |
+ mycmd = [self.settings['netboot/busybox_config']] |
427 |
else: |
428 |
- mycmd = "" |
429 |
+ mycmd = [] |
430 |
try: |
431 |
- cmd(self.settings["controller_file"]+" busybox "+ mycmd,env=self.env) |
432 |
+ cmd([self.settings['controller_file'], 'busybox'] + mycmd, env=self.env) |
433 |
except CatalystError: |
434 |
self.unbind() |
435 |
raise CatalystError("netboot build aborting due to error.", |
436 |
@@ -106,8 +106,8 @@ class netboot(StageBase): |
437 |
myfiles.append(self.settings["netboot/extra_files"]) |
438 |
|
439 |
try: |
440 |
- cmd(self.settings["controller_file"]+\ |
441 |
- " image " + list_bashify(myfiles),env=self.env) |
442 |
+ cmd([self.settings['controller_file'], 'image'] + myfiles, |
443 |
+ env=self.env) |
444 |
except CatalystError: |
445 |
self.unbind() |
446 |
raise CatalystError("netboot build aborting due to error.", |
447 |
@@ -116,7 +116,7 @@ class netboot(StageBase): |
448 |
def create_netboot_files(self): |
449 |
# finish it all up |
450 |
try: |
451 |
- cmd(self.settings["controller_file"]+" finish",env=self.env) |
452 |
+ cmd([self.settings['controller_file'], 'finish'], env=self.env) |
453 |
except CatalystError: |
454 |
self.unbind() |
455 |
raise CatalystError("netboot build aborting due to error.", |
456 |
diff --git a/catalyst/targets/netboot2.py b/catalyst/targets/netboot2.py |
457 |
index 568b791..da856ba 100644 |
458 |
--- a/catalyst/targets/netboot2.py |
459 |
+++ b/catalyst/targets/netboot2.py |
460 |
@@ -8,7 +8,7 @@ import shutil |
461 |
from stat import ST_UID, ST_GID, ST_MODE |
462 |
|
463 |
from catalyst import log |
464 |
-from catalyst.support import (CatalystError, normpath, cmd, list_bashify) |
465 |
+from catalyst.support import (CatalystError, normpath, cmd) |
466 |
from catalyst.fileops import ensure_dirs, clear_path |
467 |
|
468 |
from catalyst.base.stagebase import StageBase |
469 |
@@ -89,8 +89,8 @@ class netboot2(StageBase): |
470 |
myfiles.append(self.settings["netboot2/extra_files"]) |
471 |
|
472 |
try: |
473 |
- cmd(self.settings["controller_file"]+\ |
474 |
- " image " + list_bashify(myfiles),env=self.env) |
475 |
+ cmd([self.settings['controller_file'], 'image'] + |
476 |
+ myfiles, env=self.env) |
477 |
except CatalystError: |
478 |
self.unbind() |
479 |
raise CatalystError("Failed to copy files to image!", |
480 |
@@ -106,8 +106,9 @@ class netboot2(StageBase): |
481 |
if "netboot2/overlay" in self.settings: |
482 |
for x in self.settings["netboot2/overlay"]: |
483 |
if os.path.exists(x): |
484 |
- cmd("rsync -a "+x+"/ "+\ |
485 |
- self.settings["chroot_path"] + self.settings["merge_path"], env=self.env) |
486 |
+ cmd(['rsync', '-a', x + '/', |
487 |
+ self.settings['chroot_path'] + self.settings['merge_path']], |
488 |
+ env=self.env) |
489 |
self.resume.enable("setup_overlay") |
490 |
|
491 |
def move_kernels(self): |
492 |
@@ -115,8 +116,7 @@ class netboot2(StageBase): |
493 |
# no auto resume here as we always want the |
494 |
# freshest images moved |
495 |
try: |
496 |
- cmd(self.settings["controller_file"]+\ |
497 |
- " final",env=self.env) |
498 |
+ cmd([self.settings['controller_file'], 'final'], env=self.env) |
499 |
log.notice('Netboot Build Finished!') |
500 |
except CatalystError: |
501 |
self.unbind() |
502 |
diff --git a/catalyst/targets/snapshot.py b/catalyst/targets/snapshot.py |
503 |
index 196166a..7ba94b2 100644 |
504 |
--- a/catalyst/targets/snapshot.py |
505 |
+++ b/catalyst/targets/snapshot.py |
506 |
@@ -56,10 +56,16 @@ class snapshot(TargetBase, GenBase): |
507 |
mytmp=self.settings["tmp_path"] |
508 |
ensure_dirs(mytmp) |
509 |
|
510 |
- target_snapshot = self.settings["portdir"] + "/ " + mytmp + "/%s/" % self.settings["repo_name"] |
511 |
- cmd("rsync -a --no-o --no-g --delete --exclude /packages/ --exclude /distfiles/ " + |
512 |
- "--exclude /local/ --exclude CVS/ --exclude .svn --filter=H_**/files/digest-* " + |
513 |
- target_snapshot, env=self.env) |
514 |
+ cmd(['rsync', '-a', '--no-o', '--no-g', '--delete', |
515 |
+ '--exclude=/packages/', |
516 |
+ '--exclude=/distfiles/', |
517 |
+ '--exclude=/local/', |
518 |
+ '--exclude=CVS/', |
519 |
+ '--exclude=.svn', |
520 |
+ '--filter=H_**/files/digest-*', |
521 |
+ self.settings['portdir'] + '/', |
522 |
+ mytmp + '/' + self.settings['repo_name'] + '/'], |
523 |
+ env=self.env) |
524 |
|
525 |
log.notice('Compressing Portage snapshot tarball ...') |
526 |
compressor = CompressMap(self.settings["compress_definitions"], |
527 |
diff --git a/catalyst/targets/tinderbox.py b/catalyst/targets/tinderbox.py |
528 |
index f7895de..85a939f 100644 |
529 |
--- a/catalyst/targets/tinderbox.py |
530 |
+++ b/catalyst/targets/tinderbox.py |
531 |
@@ -5,7 +5,7 @@ Tinderbox target |
532 |
|
533 |
import os |
534 |
|
535 |
-from catalyst.support import cmd, list_bashify, CatalystError |
536 |
+from catalyst.support import cmd, CatalystError |
537 |
from catalyst.base.stagebase import StageBase |
538 |
|
539 |
|
540 |
@@ -24,8 +24,8 @@ class tinderbox(StageBase): |
541 |
# example call: "grp.sh run xmms vim sys-apps/gleep" |
542 |
try: |
543 |
if os.path.exists(self.settings["controller_file"]): |
544 |
- cmd(self.settings["controller_file"]+" run "+\ |
545 |
- list_bashify(self.settings["tinderbox/packages"]),env=self.env) |
546 |
+ cmd([self.settings['controller_file'], 'run'] + |
547 |
+ self.settings['tinderbox/packages'], env=self.env) |
548 |
|
549 |
except CatalystError: |
550 |
self.unbind() |
551 |
-- |
552 |
2.8.2 |