Skip to content

Offline Installation

Deploy Flex Video in air-gapped environments using the self-extracting installer.

Overview

The offline installer packages all Docker images into a single executable script that:

  • Extracts and loads Docker images
  • Creates configuration files
  • Sets up udev rules for camera hot-plug
  • Configures and starts services

Requirements

  • 64-bit Linux system (Raspberry Pi OS 64-bit, Debian, Ubuntu, etc.)
  • ARM64 or x86_64 architecture
  • Docker Engine 23.0 or newer with Docker Compose V2 (install guide)
  • Root access (sudo)
  • 2 GB free disk space for extraction

x86_64 Support (Experimental)

x86_64 installers are available for Intel (10th gen+) and AMD systems. This platform is currently experimental. Contact support@blackwire-ts.com for access and support.

Download

Download the installer from the Blackwire download portal:

  1. Visit flex.blackwire-ts.com in your web browser
  2. Authenticate with your credentials (MFA required)
  3. Click the download link in the upper right of the page
  4. Transfer the file to your target device via SSH, USB drive, or other method

Download via Web Browser

The download portal is protected by Cloudflare Access and requires multi-factor authentication. Downloads must be performed through a web browser—command-line tools like curl or wget will not work.

After downloading, make the installer executable:

# ARM64
chmod +x flex-video-installer-arm64.sh

# x86_64
chmod +x flex-video-installer-amd64.sh

Installation

Basic Install

# ARM64 (Raspberry Pi, NXP i.MX8, etc.)
sudo ./flex-video-installer-arm64.sh

# x86_64 (Intel/AMD)
sudo ./flex-video-installer-amd64.sh

This installs to /opt/flex by default.

Custom Directory

sudo ./flex-video-installer-arm64.sh -d /custom/path
# or
sudo ./flex-video-installer-amd64.sh -d /custom/path

Installation Steps

The installer performs these steps:

  1. Validates prerequisites - Checks Docker and disk space
  2. Extracts images - Unpacks Docker images from the archive
  3. Loads images - Imports images into Docker
  4. Creates configuration - Writes docker-compose.yml and .env
  5. Generates TLS certificate - Creates a self-signed certificate at /opt/flex/certs/ for HTTPS
  6. Sets up udev rules - Configures camera hot-plug
  7. Creates /video directory - For local file playback
  8. Starts services - Brings up all containers

Post-Installation

Verify Installation

# Check services
docker compose -f /opt/flex/docker-compose.yml ps

# Test API
curl -k https://<encoder-ip>:3539/flex/health

Access Web Interface

Open https://:8443 in your browser.

Self-Signed Certificate

The installer generates a self-signed TLS certificate. Your browser will show a certificate warning on first visit -- this is expected. Accept the warning to proceed.

Encoder IP

Replace <encoder-ip> with your encoder's IP address.

Installer Commands

The installer script doubles as a management tool. All commands require sudo.

Command Reference

Command Description
--help or -h Show help message with all options
--start Start Flex Video containers
--stop Stop Flex Video containers
--logs View container logs
--uninstall or -u Uninstall Flex Video (prompts to keep or remove data)
--reset-password Reset password (disables password authentication)

Installation Options

These flags are used during installation:

Option Description
-d DIR or --dir DIR Install to a custom directory (default: /opt/flex)
--swagger Enable Swagger UI API documentation (port 38081)
--no-swagger Disable Swagger UI (default, skips prompt)
--web-ui Enable the web UI (skips prompt)
--no-web-ui Disable the web UI (for OpenWrt/LuCI systems, skips prompt)
--skip-load Extract files only without loading Docker images

Examples

# Start services
sudo /opt/flex/flex-video-installer-*.sh --start

# Stop services
sudo /opt/flex/flex-video-installer-*.sh --stop

# View logs
sudo /opt/flex/flex-video-installer-*.sh --logs

# Check container status
cd /opt/flex && docker compose ps

Updating

Patch Updates (Safe)

Updates within the same major.minor version (e.g., 0.10.2 → 0.10.3) are safe to apply directly:

# Use the installer matching your architecture
sudo ./flex-video-installer-0.10.3-arm64.sh   # ARM64
sudo ./flex-video-installer-0.10.3-amd64.sh   # x86_64

The installer automatically:

  1. Detects the existing installation
  2. Stops running containers
  3. Loads new Docker images
  4. Cleans up old image versions
  5. Restarts containers (if they were running)
  6. Preserves configuration and data volumes

For updates across minor or major versions (e.g., 0.9.x → 0.10.x or 1.x.x), a clean install with volume preservation is recommended:

# 1. Uninstall but KEEP volumes when prompted
sudo /opt/flex/flex-video-installer-*.sh --uninstall
# Answer "N" to "Remove volume data?" prompt

# 2. Install new version
sudo ./flex-video-installer-NEW-VERSION-arm64.sh

This ensures:

  • Clean slate for container configuration
  • Data volumes (license, framegrabs, settings) are preserved
  • No conflicts from old configuration files

Version Compatibility

Update Type Example Method
Patch (0.9.0 → 0.9.1) Bug fixes Run installer directly
Minor (0.9.x → 0.10.x) New features Uninstall (keep volumes) + install
Major (0.x → 1.x) Breaking changes Uninstall (keep volumes) + install

Check Current Version

View your installed version at Settings in the web UI or via the API:

curl -k https://<encoder-ip>:3539/flex/health

Uninstallation

Full Uninstall

sudo /opt/flex/flex-video-installer-*.sh --uninstall

This removes:

  • All Flex Video Docker images
  • Installation directory
  • udev rules

Preserve Data

The uninstaller asks whether to remove Docker volumes. Choose "No" to preserve:

  • License data
  • Framegrabs
  • Settings

Configuration

Environment File

The installer creates /opt/flex/.env with auto-generated configuration and user-configurable settings:

# Hardware decoding (auto-configured by installer based on detected platform)
# Set to 'false' to enable hardware-accelerated decoding on supported platforms.
# Supported: Raspberry Pi, NXP i.MX8M Plus, Intel/AMD x86_64 (VAAPI)
FLEX_FORCE_SW_DECODERS=true

On supported platforms (Raspberry Pi, NXP i.MX8M Plus, Intel/AMD x86_64 with VAAPI), the installer automatically sets this to false and configures device passthrough. Avoid manually editing other auto-generated values.

Docker Compose

Edit /opt/flex/docker-compose.yml to customize:

  • Port mappings
  • Volume mounts
  • Resource limits
  • Hardware acceleration

Platform-Specific Notes

OpenWrt

On OpenWrt systems, the installer detects the platform and offers to skip the standalone Flex Manager web UI since the same interface is available through LuCI.

When prompted:

  • No (default) — Skips the web UI container, saving resources. Use LuCI to manage Flex Video.
  • Yes — Installs the web UI at https://<encoder-ip>:8443 alongside LuCI.

You can also set this via CLI flags:

# Skip the web UI (use LuCI)
sudo ./flex-video-installer-arm64.sh --no-web-ui

# Include the web UI
sudo ./flex-video-installer-arm64.sh --web-ui

The choice is saved and preserved across upgrades.

Raspberry Pi

Works out of the box. For camera support, ensure:

# Enable camera interface
sudo raspi-config
# Interface Options > Camera > Enable

NVIDIA Jetson

The installer automatically detects Jetson hardware (Orin, Xavier) and enables hardware-accelerated video encoding and decoding via V4L2. No additional configuration is required -- no nvidia-container-toolkit needed for video codecs.

Troubleshooting

Extraction Failed

# Check disk space
df -h

# Extract without loading images to inspect contents
sudo ./flex-video-installer-*.sh --skip-load

Docker Not Found

Install Docker following the official guide for your operating system:

See Requirements for details.

Images Won't Load

# Check Docker daemon
sudo systemctl status docker

# Check available memory
free -h

Services Won't Start

# Check logs
cd /opt/flex && docker compose logs

# Verify images loaded
docker images | grep blackwire