Management Interface: client_updates¶
This command, and its sub-commands, implement a method of downloading and re-hosting Binary Ninja Ultimate updates for the Enterprise server to distribute to clients.
This is most useful in an offline deployment, but also nice in situations where you are switching versions often and your server is faster than ours.
Note
By default, Binary Ninja is configured to update directly from Vector 35's servers. Clients that wish to use the Enterprise server instead will need to set updates.useEnterpriseServer in their settings.
Typical Usage¶
Re-hosting client updates is a two-step process. First, you download the update bundles from us. Then, you deploy them to the Enterprise server.
Downloading Updates from Vector 35¶
Download updates from the official Binary Ninja update servers with manage_server client_updates download. These will be placed into a directory named client_updates by default, but you can point it at any directory with manage_server client_updates download --update-folder path/to/updates/folder. If this directory already exists, it will verify the files within without re-downloading and download any that are corrupted or missing.
If you only want to download the latest client updates, pass the --latest-only flag. This will download only the latest versions of the stable and dev channel updates for the platform(s) you've selected.
Syncing Updates to the Enterprise Server¶
Upload the updates you've downloaded to your Enterprise server with manage_server client_updates sync. By default, this assumes there is a local directory named client_updates, but you can point it at any directory with manage_server client_updates sync --update-folder path/to/updates/folder.
This command streams the updates from this directory into the running Enterprise server, which stores them in its object store alongside the rest of the server data. The update directory should contain all updates, not just those you were missing: anything on the server that is no longer in the directory is removed at the end of the sync. Update files that are already on the server are not uploaded again.
To see what a sync would change before committing to it, pass --dry-run. This lists every file that would be uploaded or removed without modifying the server. rm --dry-run does the same for removal.
Note
The Enterprise server must be running for sync and rm. Because the updates live in the object store, they are included in backups and survive server upgrades.
Command Help¶
Manage Enterprise client update files
Usage: manage_server client_updates [OPTIONS] <COMMAND>
Commands:
download Download Enterprise client updates from the official Binary Ninja update servers
sync Sync client updates from downloaded files (requires server to be running)
rm Remove client updates from server (requires server to be running)
help Print this message or the help of the given subcommand(s)
Options:
--swarm[=<STACK_NAME>] Operate in docker swarm mode [env: ENTERPRISE_STACK_NAME=]
--registry-host <HOSTNAME> Hostname of custom registry [env: ENTERPRISE_REGISTRY_HOST=] [default: registry.enterprise.binary.ninja]
--registry-username <USER> Username for custom registry [env: ENTERPRISE_REGISTRY_USERNAME=]
--registry-password <PASSWORD> Password for custom registry [env: ENTERPRISE_REGISTRY_PASSWORD=]
--docker-host <HOST> Overrides the default Docker/Podman Unix socket [env: DOCKER_HOST=]
--container-engine <ENGINE> Container engine to use for deployments (docker or podman) [env: ENTERPRISE_CONTAINER_ENGINE=] [default: docker] [possible values: docker, podman]
-l, --license-file <license-file> Path to Binary Ninja license file [env: ENTERPRISE_SERVER_LICENSE_FILE=] [default: ./license.dat]
-b, --license-bundle <license-bundle> Local path to Enterprise client floating license bundle [env: ENTERPRISE_SERVER_LICENSE_BUNDLE_FILE=] [default: ./license-bundle.b64]
--uid <uid> User ID used for data and tasks (defaults to current User ID) [env: ENTERPRISE_SERVER_UID=]
--gid <gid> Group ID used for data and tasks (defaults to current Group ID) [env: ENTERPRISE_SERVER_GID=]
-h, --help Print help
Database Options:
--db-name <NAME> Name of database to use [env: ENTERPRISE_DATABASE_NAME=] [default: binaryninja_enterprise]
--db-host <HOSTNAME> Name of host to use when connecting to database [env: ENTERPRISE_DATABASE_HOST=] [default: database]
--db-port <PORT> The port to use when connecting to database [env: ENTERPRISE_DATABASE_PORT=] [default: 5432]
--db-user <USERNAME> The user to use when connecting to database [env: ENTERPRISE_DATABASE_USER=] [default: binaryninja_enterprise]
--db-password-file <FILE> Path to file containing password to authenticate with the database [env: ENTERPRISE_DATABASE_PASSWORD_FILE=] [default: ./secrets/db_password]
Key-Value Store Options:
--redis-url <URL> URL to use when connecting to message broker [env: ENTERPRISE_KV_STORE_URL=] [default: redis://redis:6379]
Object Store Options:
--object-store-bucket-name <BUCKET> Object store bucket name (must be between 3 and 63 characters, only using lowercase letters, numbers, dot, and hyphen) [env: ENTERPRISE_OBJECT_STORE_BUCKET_NAME=] [default: binaryninja-enterprise]
--object-store-endpoint-url <URL> Object store endpoint URL [env: ENTERPRISE_OBJECT_STORE_URL=] [default: https://object-store:8333]
--object-store-access-key-file <FILE> Path to file containing the access key ID to use when authenticating with the object store [env: ENTERPRISE_OBJECT_STORE_ACCESS_KEY_FILE=] [default: ./secrets/object_store_access_key_id]
--object-store-secret-key-file <FILE> Path to file containing the secret access key to use when authenticating with the object store [env: ENTERPRISE_OBJECT_STORE_SECRET_KEY_FILE=] [default: ./secrets/object_store_secret_access_key]
--object-store-volume-size <MB> Maximum volume size in MB (only used for the bundled object store) [env: ENTERPRISE_OBJECT_STORE_VOLUME_SIZE=] [default: 30000]
--object-store-max-volumes <COUNT> Maximum volume count (only used for the bundled object store) [env: ENTERPRISE_OBJECT_STORE_MAX_VOLUMES=] [default: 32]
download Sub-Command¶
Download Enterprise client updates from the official Binary Ninja update servers
Usage: manage_server client_updates download [OPTIONS]
Options:
-f, --update-folder <update-folder> Local path to Enterprise client update folder [default: client_updates]
--swarm[=<STACK_NAME>] Operate in docker swarm mode [env: ENTERPRISE_STACK_NAME=]
-m, --min-version <min-version> Minimum version of updates to be downloaded (latest stable version will always be downloaded) [default: 6.0.10601]
--registry-host <HOSTNAME> Hostname of custom registry [env: ENTERPRISE_REGISTRY_HOST=] [default: registry.enterprise.binary.ninja]
--latest-only Only download files for the latest stable and dev versions
--registry-username <USER> Username for custom registry [env: ENTERPRISE_REGISTRY_USERNAME=]
--platforms <platforms>... Platforms to download updates for [default: linux,win64,macosx] [possible values: linux, macosx, win64]
--registry-password <PASSWORD> Password for custom registry [env: ENTERPRISE_REGISTRY_PASSWORD=]
--docker-host <HOST> Overrides the default Docker/Podman Unix socket [env: DOCKER_HOST=]
--legacy-format Download updates in a format compatible with clients older than 3.0.3246. This will take much more disk space.
--container-engine <ENGINE> Container engine to use for deployments (docker or podman) [env: ENTERPRISE_CONTAINER_ENGINE=] [default: docker] [possible values: docker, podman]
-l, --license-file <license-file> Path to Binary Ninja license file [env: ENTERPRISE_SERVER_LICENSE_FILE=] [default: ./license.dat]
-b, --license-bundle <license-bundle> Local path to Enterprise client floating license bundle [env: ENTERPRISE_SERVER_LICENSE_BUNDLE_FILE=] [default: ./license-bundle.b64]
--uid <uid> User ID used for data and tasks (defaults to current User ID) [env: ENTERPRISE_SERVER_UID=]
--gid <gid> Group ID used for data and tasks (defaults to current Group ID) [env: ENTERPRISE_SERVER_GID=]
-h, --help Print help
Database Options:
--db-name <NAME> Name of database to use [env: ENTERPRISE_DATABASE_NAME=] [default: binaryninja_enterprise]
--db-host <HOSTNAME> Name of host to use when connecting to database [env: ENTERPRISE_DATABASE_HOST=] [default: database]
--db-port <PORT> The port to use when connecting to database [env: ENTERPRISE_DATABASE_PORT=] [default: 5432]
--db-user <USERNAME> The user to use when connecting to database [env: ENTERPRISE_DATABASE_USER=] [default: binaryninja_enterprise]
--db-password-file <FILE> Path to file containing password to authenticate with the database [env: ENTERPRISE_DATABASE_PASSWORD_FILE=] [default: ./secrets/db_password]
Key-Value Store Options:
--redis-url <URL> URL to use when connecting to message broker [env: ENTERPRISE_KV_STORE_URL=] [default: redis://redis:6379]
Object Store Options:
--object-store-bucket-name <BUCKET> Object store bucket name (must be between 3 and 63 characters, only using lowercase letters, numbers, dot, and hyphen) [env: ENTERPRISE_OBJECT_STORE_BUCKET_NAME=] [default: binaryninja-enterprise]
--object-store-endpoint-url <URL> Object store endpoint URL [env: ENTERPRISE_OBJECT_STORE_URL=] [default: https://object-store:8333]
--object-store-access-key-file <FILE> Path to file containing the access key ID to use when authenticating with the object store [env: ENTERPRISE_OBJECT_STORE_ACCESS_KEY_FILE=] [default: ./secrets/object_store_access_key_id]
--object-store-secret-key-file <FILE> Path to file containing the secret access key to use when authenticating with the object store [env: ENTERPRISE_OBJECT_STORE_SECRET_KEY_FILE=] [default: ./secrets/object_store_secret_access_key]
--object-store-volume-size <MB> Maximum volume size in MB (only used for the bundled object store) [env: ENTERPRISE_OBJECT_STORE_VOLUME_SIZE=] [default: 30000]
--object-store-max-volumes <COUNT> Maximum volume count (only used for the bundled object store) [env: ENTERPRISE_OBJECT_STORE_MAX_VOLUMES=] [default: 32]
sync Sub-Command¶
Sync client updates from downloaded files (requires server to be running)
Usage: manage_server client_updates sync [OPTIONS]
Options:
-f, --update-folder <update-folder> Path to folder containing client update files [default: client_updates]
--swarm[=<STACK_NAME>] Operate in docker swarm mode [env: ENTERPRISE_STACK_NAME=]
--dry-run Report which files would be uploaded and removed without changing the server
--registry-host <HOSTNAME> Hostname of custom registry [env: ENTERPRISE_REGISTRY_HOST=] [default: registry.enterprise.binary.ninja]
--registry-username <USER> Username for custom registry [env: ENTERPRISE_REGISTRY_USERNAME=]
--registry-password <PASSWORD> Password for custom registry [env: ENTERPRISE_REGISTRY_PASSWORD=]
--docker-host <HOST> Overrides the default Docker/Podman Unix socket [env: DOCKER_HOST=]
--container-engine <ENGINE> Container engine to use for deployments (docker or podman) [env: ENTERPRISE_CONTAINER_ENGINE=] [default: docker] [possible values: docker, podman]
-l, --license-file <license-file> Path to Binary Ninja license file [env: ENTERPRISE_SERVER_LICENSE_FILE=] [default: ./license.dat]
-b, --license-bundle <license-bundle> Local path to Enterprise client floating license bundle [env: ENTERPRISE_SERVER_LICENSE_BUNDLE_FILE=] [default: ./license-bundle.b64]
--uid <uid> User ID used for data and tasks (defaults to current User ID) [env: ENTERPRISE_SERVER_UID=]
--gid <gid> Group ID used for data and tasks (defaults to current Group ID) [env: ENTERPRISE_SERVER_GID=]
-h, --help Print help
Database Options:
--db-name <NAME> Name of database to use [env: ENTERPRISE_DATABASE_NAME=] [default: binaryninja_enterprise]
--db-host <HOSTNAME> Name of host to use when connecting to database [env: ENTERPRISE_DATABASE_HOST=] [default: database]
--db-port <PORT> The port to use when connecting to database [env: ENTERPRISE_DATABASE_PORT=] [default: 5432]
--db-user <USERNAME> The user to use when connecting to database [env: ENTERPRISE_DATABASE_USER=] [default: binaryninja_enterprise]
--db-password-file <FILE> Path to file containing password to authenticate with the database [env: ENTERPRISE_DATABASE_PASSWORD_FILE=] [default: ./secrets/db_password]
Key-Value Store Options:
--redis-url <URL> URL to use when connecting to message broker [env: ENTERPRISE_KV_STORE_URL=] [default: redis://redis:6379]
Object Store Options:
--object-store-bucket-name <BUCKET> Object store bucket name (must be between 3 and 63 characters, only using lowercase letters, numbers, dot, and hyphen) [env: ENTERPRISE_OBJECT_STORE_BUCKET_NAME=] [default: binaryninja-enterprise]
--object-store-endpoint-url <URL> Object store endpoint URL [env: ENTERPRISE_OBJECT_STORE_URL=] [default: https://object-store:8333]
--object-store-access-key-file <FILE> Path to file containing the access key ID to use when authenticating with the object store [env: ENTERPRISE_OBJECT_STORE_ACCESS_KEY_FILE=] [default: ./secrets/object_store_access_key_id]
--object-store-secret-key-file <FILE> Path to file containing the secret access key to use when authenticating with the object store [env: ENTERPRISE_OBJECT_STORE_SECRET_KEY_FILE=] [default: ./secrets/object_store_secret_access_key]
--object-store-volume-size <MB> Maximum volume size in MB (only used for the bundled object store) [env: ENTERPRISE_OBJECT_STORE_VOLUME_SIZE=] [default: 30000]
--object-store-max-volumes <COUNT> Maximum volume count (only used for the bundled object store) [env: ENTERPRISE_OBJECT_STORE_MAX_VOLUMES=] [default: 32]
rm Sub-Command¶
Remove client updates from server (requires server to be running)
Usage: manage_server client_updates rm [OPTIONS]
Options:
--swarm[=<STACK_NAME>] Operate in docker swarm mode [env: ENTERPRISE_STACK_NAME=]
-y, --yes Assume 'yes' for removal confirmation [aliases: --force, --force-yes]
--dry-run Report which files would be removed without changing the server
--registry-host <HOSTNAME> Hostname of custom registry [env: ENTERPRISE_REGISTRY_HOST=] [default: registry.enterprise.binary.ninja]
--registry-username <USER> Username for custom registry [env: ENTERPRISE_REGISTRY_USERNAME=]
--registry-password <PASSWORD> Password for custom registry [env: ENTERPRISE_REGISTRY_PASSWORD=]
--docker-host <HOST> Overrides the default Docker/Podman Unix socket [env: DOCKER_HOST=]
--container-engine <ENGINE> Container engine to use for deployments (docker or podman) [env: ENTERPRISE_CONTAINER_ENGINE=] [default: docker] [possible values: docker, podman]
-l, --license-file <license-file> Path to Binary Ninja license file [env: ENTERPRISE_SERVER_LICENSE_FILE=] [default: ./license.dat]
-b, --license-bundle <license-bundle> Local path to Enterprise client floating license bundle [env: ENTERPRISE_SERVER_LICENSE_BUNDLE_FILE=] [default: ./license-bundle.b64]
--uid <uid> User ID used for data and tasks (defaults to current User ID) [env: ENTERPRISE_SERVER_UID=]
--gid <gid> Group ID used for data and tasks (defaults to current Group ID) [env: ENTERPRISE_SERVER_GID=]
-h, --help Print help
Database Options:
--db-name <NAME> Name of database to use [env: ENTERPRISE_DATABASE_NAME=] [default: binaryninja_enterprise]
--db-host <HOSTNAME> Name of host to use when connecting to database [env: ENTERPRISE_DATABASE_HOST=] [default: database]
--db-port <PORT> The port to use when connecting to database [env: ENTERPRISE_DATABASE_PORT=] [default: 5432]
--db-user <USERNAME> The user to use when connecting to database [env: ENTERPRISE_DATABASE_USER=] [default: binaryninja_enterprise]
--db-password-file <FILE> Path to file containing password to authenticate with the database [env: ENTERPRISE_DATABASE_PASSWORD_FILE=] [default: ./secrets/db_password]
Key-Value Store Options:
--redis-url <URL> URL to use when connecting to message broker [env: ENTERPRISE_KV_STORE_URL=] [default: redis://redis:6379]
Object Store Options:
--object-store-bucket-name <BUCKET> Object store bucket name (must be between 3 and 63 characters, only using lowercase letters, numbers, dot, and hyphen) [env: ENTERPRISE_OBJECT_STORE_BUCKET_NAME=] [default: binaryninja-enterprise]
--object-store-endpoint-url <URL> Object store endpoint URL [env: ENTERPRISE_OBJECT_STORE_URL=] [default: https://object-store:8333]
--object-store-access-key-file <FILE> Path to file containing the access key ID to use when authenticating with the object store [env: ENTERPRISE_OBJECT_STORE_ACCESS_KEY_FILE=] [default: ./secrets/object_store_access_key_id]
--object-store-secret-key-file <FILE> Path to file containing the secret access key to use when authenticating with the object store [env: ENTERPRISE_OBJECT_STORE_SECRET_KEY_FILE=] [default: ./secrets/object_store_secret_access_key]
--object-store-volume-size <MB> Maximum volume size in MB (only used for the bundled object store) [env: ENTERPRISE_OBJECT_STORE_VOLUME_SIZE=] [default: 30000]
--object-store-max-volumes <COUNT> Maximum volume count (only used for the bundled object store) [env: ENTERPRISE_OBJECT_STORE_MAX_VOLUMES=] [default: 32]