Mission Control’s Flash Tool shows this install command for your board. See Install paths for the recommended flow per board class.
Quick install
SSH into your companion computer and run:/opt/ados/, writes config to /etc/ados/, registers the systemd units, and fetches the prebuilt Rust service binaries into /opt/ados/bin/. systemd is the supported process manager on Linux.
Setup wizard
On a fresh interactive install with none of the identity flags set, the installer opens a setup wizard in the terminal. After a welcome screen it walks seven screens. Each one shows the detected default, and Esc goes back a step:- Role: pick the node profile (
drone,ground_station,workstationorcompute). - Hardware: a scan of the hardware categories that matter for that profile, each marked found or not detected.
- Features: a checklist of optional components, such as the World Engine extension.
- Wi-Fi: join a Wi-Fi network (including a hidden one), so the wired cable can be unplugged afterwards.
- Name: the node’s hostname, which is also its
.localmDNS name. - Pairing: an optional Mission Control pairing code. This screen appears only for
droneandground_station. - Review: confirm the answers and install, or jump back to change one.
--yes, --non-interactive, --json or --quiet, or when no terminal is attached.
What the installer does
1
Detect the board
Matches the board via an optional
/etc/ados/board_override, the device-tree compatible string and model, then /proc/cpuinfo, falling back to generic-arm64 or generic-x86_64. There is no --board flag. See HAL and tiers.2
Install system packages
Installs Python and the board-specific packages, including the RTL8812EU driver for WFB-ng unless you pass
--no-rtl-driver. Uses apt on Debian and Ubuntu. On a base OS without Python 3.11 the installer downloads a self-contained CPython 3.11.3
Create the runtime
Builds a Python virtual environment at
/opt/ados/venv/ for the Python-backed services, and fetches the prebuilt Rust service binaries (supervisor, MAVLink router, control front, cloud relay, video, radio, logging store and the rest) into /opt/ados/bin/.4
Generate device identity
Creates a 12-hex device id at
/etc/ados/device-id. Pairing and mDNS use it.5
Write the config
Creates
/etc/ados/config.yaml with defaults for your board and records the profile and release channel in /etc/ados/profile.conf.6
Install the systemd units
Installs the unit files and enables the ones your profile runs. See Systemd services.
7
Start the agent
Starts
ados-supervisor, which brings up the units for your profile: the MAVLink proxy, the HTTP front and API, video when a camera is present, and the rest.Install with pairing
If you have a pairing code from Mission Control, pass it during install:Upgrade an existing installation
ados update, which re-runs the installer in upgrade mode. Both keep /etc/ados/config.yaml, the device id and pairing state. See Update Drone Agent.
Installer flags
The bootstrap passes everything afterbash -s -- straight to the installer. The parser rejects an unrecognised flag and aborts before touching the box, so a mistyped flag fails the install instead of being ignored.
Notes on specific flags:
--channel <edge|stable>: release channel, defaultedge(tip of main).stableinstalls the signed release named by--version <X.Y.Z>and is remembered for later upgrades.--ref <commit>requires--channel edge. With--channel stableit is refused with exit code 2 before any download, because a stable release addresses a version, not a commit.--display <auto|none|id>: auto-detect (ground station default), opt out, or a display id the board profile declares. An undeclared id is rejected.--wifi-pass-file <path>: file whose first line is the password for--wifi-ssid; keeps the secret off the command line. Omit it for an open network. The join never touches the interface your SSH session uses.--profileacceptsground_station; use that spelling in scripts.
Unattended install
A fully unattended provisioning run looks like this:Install from source
For contributors who want to change the agent code:Install on macOS
macOS gets a rootless, per-userworkstation node. Run the same bootstrap without sudo; the script refuses a root run with exit code 2. There is no prebuilt macOS installer, so the Mac path builds the installer from source (it installs the Rust toolchain first if needed) and defaults to --profile workstation.
$HOME/.ados, including the plugin host, which runs each extension as its own LaunchAgent in ~/Library/LaunchAgents. The World Engine extension is installed by default, as on any workstation. A macOS node has no systemd, no WFB radio and no GPIO.
Uninstall
--purge to remove config and identity as well:
ados uninstall removes the LaunchAgents, and --purge also removes ~/.ados.
Directory layout after install
Verify the installation
ados shows the dashboard URL, service state, MAVLink state, video state, network addresses and remote access state. Open the dashboard URL in a browser to finish first-run setup.
Requirements
Next steps
Dashboard
Open the browser dashboard and finish first-run setup.
Pairing
Pair the node with Mission Control.
Update Drone Agent
Keep the agent current.