#!/usr/bin/env python3 import sys import os import subprocess env = os.environ.copy() args = sys.argv[1:] targettype = args.pop(0) if targettype == "user": qemuargs = os.environ.get("QEMU_OPTIONS", "").split() if not os.path.exists(qemuargs[0]): # ensure qemu args has a valid absolute path for i in os.environ.get("PATH", "").split(":"): if os.path.exists(os.path.join(i, qemuargs[0])): qemuargs[0] = os.path.join(i, qemuargs[0]) break sysroot = os.environ.get("QEMU_SYSROOT", None) if not sysroot: sys.exit(-1) libpaths = [sysroot + "/usr/lib", sysroot + "/lib"] if args[0] == "env": args.pop(0) if len(args) == 0: args = ["env"] else: # process options while args[0].startswith("-"): opt = args.pop(0).lstrip("-") if "i" in opt: env.clear() # process environment vars while "=" in args[0]: key, val = args.pop(0).split("=", 1) if key == "LD_LIBRARY_PATH": libpaths += val.split(":") else: env[key] = val if args[0] == "cp": # ignore copies, the filesystem is the same sys.exit(0) qemuargs += ["-L", sysroot] qemuargs += ["-E", "LD_LIBRARY_PATH={}".format(":".join(libpaths))] command = qemuargs + args elif targettype == "ssh": host = os.environ.get("SSH_HOST", None) user = os.environ.get("SSH_HOST_USER", None) port = os.environ.get("SSH_HOST_PORT", None) command = ["ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no"] if port: command += ["-p", str(port)] if not host: sys.exit(-1) command += ["{}@{}".format(user, host) if user else host] # wrap and replace quotes for correct transformation on ssh wrapped = " ".join(["'{0}'".format(i.replace("'", r"'\''")) for i in ["cd", os.getcwd()]]) + "; " wrapped += " ".join(["'{0}'".format(i.replace("'", r"'\''")) for i in args]) command += ["sh", "-c", "\"{}\"".format(wrapped)] else: sys.exit(-1) try: r = subprocess.run(command, timeout = 1800, env = env) sys.exit(r.returncode) except subprocess.TimeoutExpired: sys.exit(-1)