import os
import re
-import md5
import random
+try:
+ from hashlib import md5 as md5
+except ImportError:
+ from md5 import md5
+
from config import config
def quote(cmd):
return re.sub("([\"\\\\$`])", r"\\\1", cmd)
-
-def command(cmd, user = None):
+
+def command(cmd, user = None, nostdin=""):
if user == None:
user = config.builder_user
- return "%s sudo chroot %s su - %s -c \"export LC_ALL=C; %s\"" \
- % (config.sudo_chroot_wrapper, config.chroot, user, quote(cmd))
-
+ if nostdin:
+ nostdin = "exec < /dev/null; "
+ return "%s sudo chroot %s su - %s -c \"export LC_ALL=C; %s %s\"" \
+ % (config.sudo_chroot_wrapper, config.chroot, user, nostdin, quote(cmd))
+
def command_sh(cmd):
- return "%s sudo chroot %s /bin/sh -c \"export LC_ALL=C; %s\"" \
+ return "%s sudo chroot %s /bin/sh -c \"export LC_ALL=C; exec < /dev/null; %s\"" \
% (config.sudo_chroot_wrapper, config.chroot, quote(cmd))
def popen(cmd, user = "builder", mode = "r"):
f = os.popen(command(cmd, user), mode)
return f
-
+
def run(cmd, user = "builder", logfile = None, logstdout = None):
- c = command(cmd, user)
+ c = command(cmd, user, nostdin=True)
if logfile != None:
if logstdout != None:
c = "%s 2>&1 | /usr/bin/tee -a %s" % (c, logfile)
else:
c = "%s >> %s 2>&1" % (c, logfile)
f = os.popen(c)
- for l in f:
- if logstdout != None:
+ if logstdout != None:
+ for l in f:
logstdout.write(l)
r = f.close()
if r == None:
return r
def cp(file, outfile, user="builder", rm=False):
- m = md5.new()
+ m = md5()
m.update(str(random.sample(xrange(100000), 500)))
digest = m.hexdigest()
if rp == None:
return 0
else:
- return r
+ return rp