| from urllib2 import urlopen |
from urllib2 import urlopen |
| from ClientForm import ParseResponse |
from ClientForm import ParseResponse |
| |
|
| |
|
| debug=0 |
debug=0 |
| clean=1 |
clean=1 |
| dont_build=0 |
dont_build=0 |
| if verbose==1: |
if verbose==1: |
| print myoutput |
print myoutput |
| |
|
| def clean(text): |
def cleantext(text): |
| """clean a string of passwords, etc. to make it suitable for logging""" |
"""clean a string of passwords, etc. to make it suitable for logging""" |
| result = string.replace(text,passwd,"XXXXXXXX") |
result = string.replace(text,passwd,"XXXXXXXX") |
| return result |
return result |
| |
|
| def runcmd(cmd, kinfo=None, outfile=None, append=False, infile=None): |
def runcmd(cmd, kinfo=None, outfile=None, append=False, infile=None): |
| """run the specified command, with the optional input and output documents""" |
"""run the specified command, with the optional input and output documents""" |
| log(" \_ running " + clean(cmd), kinfo) |
log(" \_ running " + cleantext(cmd), kinfo) |
| |
|
| p4obj = popen2.Popen4(cmd) |
p4obj = popen2.Popen4(cmd) |
| |
|
| digest = md.hexdigest() |
digest = md.hexdigest() |
| return digest |
return digest |
| |
|
| def krn_querymgr(command,kinfo): |
def krn_querymgr(command,kinfo,extra=""): |
| """queries the build host manager with a variety of commands, such as checkout, checkin, etc.""" |
"""queries the build host manager with a variety of commands, such as checkout, checkin, etc.""" |
| version=krn_localversion(kinfo) |
version=krn_localversion(kinfo) |
| log("querying distribution site manager with command '%s' (kernel version=%s)" % (command,version),kinfo) |
log("querying distribution site manager with command '%s' (kernel version=%s)" % (command,version),kinfo) |
| result=getoutput("wget --quiet --output-document=- \"%s/manager.php?cmd=%s&host=%s&pass=%s&build=%s&version=%s\"" % (msite,command,host,passwd,kinfo["name"],version)) |
result=getoutput("wget --quiet --output-document=- \"%s/manager.php?cmd=%s&host=%s&pass=%s&build=%s&version=%s%s\"" % (msite,command,host,passwd,kinfo["name"],version,extra)) |
| log(" \_ result: '"+result+"'",kinfo) |
log(" \_ result: '"+result+"'",kinfo) |
| return result=="1" |
return result=="1" |
| |
|
| |
def krn_modulesenabled(kinfo): |
| |
"""Checks the source to see if modules are enabled""" |
| |
output=getoutput("""awk -F '=' '/^CONFIG_MODULES/{v=$2} END { printf("%s\\n", v) }' """ + kinfo["workdir"] + """.config | sed "s/ //g" """) |
| |
if (output=='y'): |
| |
result=True |
| |
else: |
| |
result=False |
| |
return result |
| |
|
| def krn_localversion(kinfo): |
def krn_localversion(kinfo): |
| """Checks the version of the local source tree specified in kinfo""" |
"""Checks the version of the local source tree specified in kinfo""" |
| version=getoutput("""awk -F '=' '/^VERSION/{v=$2} /^PATCHLEVEL/{p=$2} /^SUBLEVEL/{s=$2} /^EXTRAVERSION/{e=$2} END { printf("%s.%s.%s%s\\n", v, p, s, e) }' """ + kinfo["workdir"] + """/Makefile | sed "s/ //g" """) |
version=getoutput("""awk -F '=' '/^VERSION/{v=$2} /^PATCHLEVEL/{p=$2} /^SUBLEVEL/{s=$2} /^EXTRAVERSION/{e=$2} END { printf("%s.%s.%s%s\\n", v, p, s, e) }' """ + kinfo["workdir"] + """/Makefile | sed "s/ //g" """) |
| gkb_getsource(kinfo) |
gkb_getsource(kinfo) |
| |
|
| # go into the work directory |
# go into the work directory |
| chdir(workdir, kinfo) |
#chdir(workdir, kinfo) |
| |
|
| # archive the clean source for later uploading |
# archive the clean source for later uploading |
| log("archiving source to " + kinfo["mastertree"] + ".tar.bz2", kinfo) |
#log("archiving source to " + kinfo["mastertree"] + ".tar.bz2", kinfo) |
| runcmd("tar cjf " + kinfo["mastertree"] + ".tar.bz2 " + kinfo["mastertree"], kinfo) |
#runcmd("tar cjf " + kinfo["mastertree"] + ".tar.bz2 " + kinfo["mastertree"], kinfo) |
| |
|
| # now we'll go into the tree's work dir |
# now we'll go into the tree's work dir |
| chdir(kinfo["workdir"],kinfo) |
chdir(kinfo["workdir"],kinfo) |
| # the binary is not there, inform user and bail out with error |
# the binary is not there, inform user and bail out with error |
| raise BuildError("%s is not present, assuming build failure and exiting. See log for details." % kbinloc) |
raise BuildError("%s is not present, assuming build failure and exiting. See log for details." % kbinloc) |
| |
|
| |
if krn_modulesenabled(kinfo): |
| # now that we know he binary built, let's continue |
# now that we know he binary built, let's continue |
| if dont_build==0: |
if dont_build==0: |
| gkb_runmake("modules",kinfo, premake, makeopts) |
gkb_runmake("modules",kinfo, premake, makeopts) |
| # **Note** : we prepend the INSTALL_MOD_PATH to the makeopts inline instead |
# **Note** : we prepend the INSTALL_MOD_PATH to the makeopts inline instead |
| # of globally as it is only needed in this target |
# of globally as it is only needed in this target |
| gkb_runmake("modules_install", kinfo, premake, "INSTALL_MOD_PATH=%s %s" % (mybindir, makeopts)) |
gkb_runmake("modules_install", kinfo, premake, "INSTALL_MOD_PATH=%s %s" % (mybindir, makeopts)) |
| |
else: |
| |
log("skipping make modules (disabled in .config)",kinfo) |
| |
|
| # compress and upload source archive |
# compress and upload source archive |
| chdir(kinfo["workdir"]+"/..",kinfo) |
chdir(kinfo["workdir"]+"/..",kinfo) |
| krn_upload(archive_name,"kernel",myversion,kinfo) |
krn_upload(archive_name,"kernel",myversion,kinfo) |
| krn_querymgr("checkin",kinfo) |
krn_querymgr("checkin",kinfo) |
| |
|
| if (os.fork() == 0): |
if os.fork() == 0: |
| #in child |
#in child |
| |
try: |
| |
# sync the source to make sure we are up to date ... |
| |
log("re-fetching latest source",kinfo) |
| |
gkb_getsource(kinfo) |
| |
|
| |
# go into the work directory |
| |
chdir(workdir, kinfo) |
| |
|
| |
# archive the clean source for later uploading |
| |
log("archiving source to " + kinfo["mastertree"] + ".tar.bz2", kinfo) |
| |
runcmd("tar cjf " + kinfo["mastertree"] + ".tar.bz2 " + kinfo["mastertree"], kinfo) |
| |
|
| krn_upload(workdir + "/" + kinfo["mastertree"] + ".tar.bz2", "source", myversion, kinfo) |
krn_upload(workdir + "/" + kinfo["mastertree"] + ".tar.bz2", "source", myversion, kinfo) |
| |
finally: |
| sys.exit(0) |
sys.exit(0) |
| |
|
| except BuildError, e: |
except BuildError, e: |
| log(e.message, kinfo) |
log(e.message, kinfo) |
| krn_querymgr("checkin",kinfo) |
krn_querymgr("checkin",kinfo,"&failed=%s" % krn_localversion(kinfo)) |
| except: |
except: |
| krn_querymgr("checkin",kinfo) |
krn_querymgr("checkin",kinfo,"&failed=%s" % krn_localversion(kinfo)) |
| raise |
raise |
| |
|
| def krn_build26(kinfo): |
def krn_build26(kinfo): |
| def gkb_runmake(command, kinfo, premake, makeopts): |
def gkb_runmake(command, kinfo, premake, makeopts): |
| """Supporting method for build() ... a stub to run a make target and auto log it, given make target (command) and name (kernel name)""" |
"""Supporting method for build() ... a stub to run a make target and auto log it, given make target (command) and name (kernel name)""" |
| log("running make %s" % command,kinfo) |
log("running make %s" % command,kinfo) |
| |
|
| |
# check to see if we need to run a simple make |
| |
# for some reason 2.2 kernels can't handle premake, makeopts, etc. |
| |
localversion = krn_localversion(kinfo) |
| |
|
| |
if (string.find(localversion,"2.2") == 0): |
| |
if runcmd("%s make %s" % (premake,command), kinfo, "%s/%s/make-%s.log" % (logdir, kinfo["name"], command)): |
| |
raise BuildError("unable to run make %s, aborting." % command) |
| |
else: |
| if runcmd("%s make %s %s" % (premake, makeopts, command), kinfo, "%s/%s/make-%s.log" % (logdir, kinfo["name"], command)): |
if runcmd("%s make %s %s" % (premake, makeopts, command), kinfo, "%s/%s/make-%s.log" % (logdir, kinfo["name"], command)): |
| raise BuildError("unable to run make %s, aborting." % command) |
raise BuildError("unable to run make %s, aborting." % command) |
| |
|
| print response.info() # headers |
print response.info() # headers |
| print response.read() # body |
print response.read() # body |
| |
|
| log("response: " + response.read(),kinfo) |
log(" \_ response: " + response.read(),kinfo) |
| |
|
| response.close() |
response.close() |
| |
|