blob: ad79cda9261bf9e91c786f5537819ea02cb725ce (
plain) (
tree)
|
|
import argparse
import os
import tarfile
import contextlib
import hashlib
import base64
import io
stub = """#!/usr/bin/env python
info = {info}
data = "{data}"
import platform
import os
import sys
import tarfile
import contextlib
import io
import base64
def current_platform():
arch = platform.machine().upper()
if arch == 'AMD64':
arch = 'X86_64'
platf = platform.system().upper()
if platf.startswith('WIN'):
platf = 'WIN'
return (platf + '-' + arch).lower()
def extract_file(fname):
with contextlib.closing(tarfile.open(fileobj=io.BytesIO(base64.b64decode(data)))) as f:
return f.extractfile(fname).read()
fname = info[current_platform()]
my_path = os.path.realpath(os.path.abspath(__file__))
tmp_path = my_path + '.tmp'
with open(tmp_path, 'wb') as f:
f.write(extract_file(fname))
os.rename(tmp_path, my_path)
os.chmod(my_path, 0775)
os.execv(sys.argv[0], sys.argv)
"""
def gen_ub(output, data):
info = {}
binary = io.BytesIO()
with contextlib.closing(tarfile.open(mode='w:bz2', fileobj=binary, dereference=True)) as f:
for pl, path in data:
fname = os.path.basename(path)
pl = pl.split('-')
pl = pl[1] + '-' + pl[2]
info[pl] = fname
f.add(path, arcname=fname)
binary = binary.getvalue()
info['md5'] = hashlib.md5(binary).hexdigest()
with open(output, 'w') as f:
f.write(stub.format(info=info, data=base64.b64encode(binary)))
os.chmod(output, 0775)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--path', action='append')
parser.add_argument('--platform', action='append')
parser.add_argument('--output', action='store')
args = parser.parse_args()
gen_ub(args.output, zip(args.platform, args.path))
|