Skip to content

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]