diff options
| author | KyleMiles <krm504@nyu.edu> | 2022-01-27 22:43:28 -0500 |
|---|---|---|
| committer | KyleMiles <krm504@nyu.edu> | 2022-01-28 00:24:06 -0500 |
| commit | 6812c973c9fa9b4ad642ab81856c05f87bd6fcc4 (patch) | |
| tree | dace4156d03148bcaf02df138ab4e0d93e61bc6f /scripts | |
| parent | 519c9db22367f2659d1a54599fab47e6313be06e (diff) | |
Format All Files
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/download_headless.py | 22 | ||||
| -rwxr-xr-x | scripts/install_api.py | 156 |
2 files changed, 94 insertions, 84 deletions
diff --git a/scripts/download_headless.py b/scripts/download_headless.py index fbd1a2a3..116fe87c 100755 --- a/scripts/download_headless.py +++ b/scripts/download_headless.py @@ -9,12 +9,15 @@ import zipfile import logging from pathlib import Path + class DownloadException(Exception): - pass + pass + -url='https://master.binary.ninja/headless-download' +url = 'https://master.binary.ninja/headless-download' min_download = 8192 + def get_system_license_path() -> Path: """Returns the default path to the Binary Ninja license.dat on the current platform @@ -44,7 +47,7 @@ def get_serial_from_license(path: str) -> str: raise ValueError(f'No "Headless" license in {path}') -def download_headless(serial: str, output_path: str=None, dev: bool=False) -> str: +def download_headless(serial: str, output_path: str = None, dev: bool = False) -> str: """Downloads the headless Binary Ninja installation binaries. :param serial: Serial number for verification @@ -71,13 +74,18 @@ def download_headless(serial: str, output_path: str=None, dev: bool=False) -> st f.write(content.content) return output_path + def install_zip(zippath: str, installpath: str, clean: bool): with zipfile.ZipFile(zippath, 'r') as zip_ref: zip_ref.extractall(installpath) if clean: os.unlink(zippath) -def download_and_install(serial: str=None, downloaddir: str=None, dev: bool=False, clean: bool=False, install: bool=False, installdir: str='/usr/local/bin'): + +def download_and_install( + serial: str = None, downloaddir: str = None, dev: bool = False, clean: bool = False, install: bool = False, + installdir: str = '/usr/local/bin' +): env_lic = 'BN_HEADLESS_LICENSE' if serial is None: if env_lic in os.environ: @@ -101,7 +109,9 @@ if __name__ == '__main__': parser.add_argument('--output', default=None, help='path to write the file to (defaults to current directory)') parser.add_argument('-q', '--quiet', default=False, action='store_true', help='Don\'t show any output') parser.add_argument('-i', '--install', default=False, action='store_true', help='Install after downloading') - parser.add_argument('-d', '--dir', default='/usr/local/bin', help='Install into provided directory used only when \'-i\' is specified') + parser.add_argument( + '-d', '--dir', default='/usr/local/bin', help='Install into provided directory used only when \'-i\' is specified' + ) parser.add_argument('-c', '--clean', default=False, action='store_true', help='Delete zip file after installation.') args = parser.parse_args() @@ -112,4 +122,4 @@ if __name__ == '__main__': download_and_install(args.serial, args.output, args.dev, args.clean, args.install, args.dir) except Exception as e: logging.critical(e) - sys.exit(1)
\ No newline at end of file + sys.exit(1) diff --git a/scripts/install_api.py b/scripts/install_api.py index 9532f02b..fddf0478 100755 --- a/scripts/install_api.py +++ b/scripts/install_api.py @@ -8,119 +8,119 @@ import os from site import check_enableusersite # Handle both normal environments and virtualenvs -try: - from site import getusersitepackages, getsitepackages +try: + from site import getusersitepackages, getsitepackages except ImportError: - from sysconfig import get_path - getsitepackages = lambda: get_path('purelib') - getusersitepackages = getsitepackages + from sysconfig import get_path + getsitepackages = lambda: get_path('purelib') + getusersitepackages = getsitepackages # Hacky command line parsing to accept a silent-install -s flag like linux-setup.sh: INTERACTIVE = True if '-s' in sys.argv[1:]: - INTERACTIVE = False + INTERACTIVE = False INSTALL_VENV = False if '-v' in sys.argv[1:]: - if os.environ.get('VIRTUAL_ENV'): - INSTALL_VENV = True - else: - print("Error: venv installation requested without an active python3 venv.") - sys.exit(1) - + if os.environ.get('VIRTUAL_ENV'): + INSTALL_VENV = True + else: + print("Error: venv installation requested without an active python3 venv.") + sys.exit(1) + try: - import binaryninja - import binaryninjaui #To better detect if migrating from a version without UI plugin support - if '-u' in sys.argv[1:]: - #Uninstall mode - userpth = os.path.join(getusersitepackages(), 'binaryninja.pth') - if os.path.exists(userpth): - print(f"Removing {userpth}") - os.unlink(userpth) - sitepth = os.path.join(getsitepackages()[0], 'binaryninja.pth') - if os.path.exists(sitepth): - print(f"Removing {sitepth}") - try: - os.unlink(sitepth) - except: - print("Unable to unlink, please re-run with appropriate permissions.") - sys.exit(0) - print("Binary Ninja API already in the path") - sys.exit(1) + import binaryninja + import binaryninjaui #To better detect if migrating from a version without UI plugin support + if '-u' in sys.argv[1:]: + #Uninstall mode + userpth = os.path.join(getusersitepackages(), 'binaryninja.pth') + if os.path.exists(userpth): + print(f"Removing {userpth}") + os.unlink(userpth) + sitepth = os.path.join(getsitepackages()[0], 'binaryninja.pth') + if os.path.exists(sitepth): + print(f"Removing {sitepth}") + try: + os.unlink(sitepth) + except: + print("Unable to unlink, please re-run with appropriate permissions.") + sys.exit(0) + print("Binary Ninja API already in the path") + sys.exit(1) except ImportError: - pass + pass if '-u' in sys.argv[1:]: - print("Uninstall specified, but binaryninja not in the current path") - sys.exit(1) + print("Uninstall specified, but binaryninja not in the current path") + sys.exit(1) dir_name = os.path.dirname(os.path.abspath(__file__)) api_path = os.path.abspath(os.path.join(dir_name, "..", "python")) if (os.path.isdir(api_path)): - print(f"Found install folder of {api_path}") + print(f"Found install folder of {api_path}") else: - print("Failed to find installed python expected at {}".format(api_path)) - sys.exit(1) + print("Failed to find installed python expected at {}".format(api_path)) + sys.exit(1) def validate_path(path): - try: - os.stat(path) - except OSError: - return False + try: + os.stat(path) + except OSError: + return False - old_path = sys.path - sys.path.append(path) + old_path = sys.path + sys.path.append(path) - try: - from binaryninja import core_version - print("Found Binary Ninja core version: {}".format(core_version())) - except ImportError: - sys.path = old_path - return False + try: + from binaryninja import core_version + print("Found Binary Ninja core version: {}".format(core_version())) + except ImportError: + sys.path = old_path + return False - return True + return True while not validate_path(api_path): - print("\nBinary Ninja not found.") - if not INTERACTIVE: - print("Non-interactive mode selected, failing.") - sys.exit(-1) + print("\nBinary Ninja not found.") + if not INTERACTIVE: + print("Non-interactive mode selected, failing.") + sys.exit(-1) - print("Please provide the path to Binary Ninja's install directory: \n [{}] : ".format(api_path)) - new_path = sys.stdin.readline().strip() - if len(new_path) == 0: - print("\nInvalid path") - continue + print("Please provide the path to Binary Ninja's install directory: \n [{}] : ".format(api_path)) + new_path = sys.stdin.readline().strip() + if len(new_path) == 0: + print("\nInvalid path") + continue - if not new_path.endswith('python'): - new_path = os.path.join(new_path, 'python') + if not new_path.endswith('python'): + new_path = os.path.join(new_path, 'python') - api_path = new_path + api_path = new_path -if ( len(sys.argv) > 1 and sys.argv[1].lower() == "root" ): - #write to root site - install_path = getsitepackages()[0] - if not os.access(install_path, os.W_OK): - print("Root install specified but cannot write to {}".format(install_path)) - sys.exit(1) +if (len(sys.argv) > 1 and sys.argv[1].lower() == "root"): + #write to root site + install_path = getsitepackages()[0] + if not os.access(install_path, os.W_OK): + print("Root install specified but cannot write to {}".format(install_path)) + sys.exit(1) elif INSTALL_VENV: - install_path = getsitepackages()[0] + install_path = getsitepackages()[0] else: - if check_enableusersite(): - install_path = getusersitepackages() - if not os.path.exists(install_path): - os.makedirs(install_path) - else: - print("Warning, trying to write to user site packages, but check_enableusersite fails.") - sys.exit(1) + if check_enableusersite(): + install_path = getusersitepackages() + if not os.path.exists(install_path): + os.makedirs(install_path) + else: + print("Warning, trying to write to user site packages, but check_enableusersite fails.") + sys.exit(1) binaryninja_pth_path = os.path.join(install_path, 'binaryninja.pth') with open(binaryninja_pth_path, 'wb') as pth_file: - pth_file.write((api_path+"\n").encode('charmap')) - if sys.version_info.major < 3 or (sys.version_info.major == 3 and sys.version_info.minor < 10): - pth_file.write((api_path+sys.version[0]+"\n").encode('charmap')) #support for python2/3 QT bindings + pth_file.write((api_path + "\n").encode('charmap')) + if sys.version_info.major < 3 or (sys.version_info.major == 3 and sys.version_info.minor < 10): + pth_file.write((api_path + sys.version[0] + "\n").encode('charmap')) #support for python2/3 QT bindings print("Binary Ninja API installed using {}".format(binaryninja_pth_path)) |
