summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/download_headless.py22
-rwxr-xr-xscripts/install_api.py156
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))