Setting up a drone for the first time? Follow Set up your drone. This page is the reference behind it.
skycore activate connects an installed drone to SkyHub with the one-time token from the dashboard. It sets up the VPN, logs in to the container registry, and starts the drone’s services.

Usage

Activation must run as root (sudo). There is no STAGE environment variable any more. sudo drops environment variables, so the stage is always an argument or the recorded value.

Services

To list the services the installed release defines:
Old service names still work, so a list saved by an older release does not break activation: A name the release does not define is skipped with a warning. If none of the requested services exist, activation stops and prints the available ones. See Microservices & Container Profiles for what each container runs.

What activation does

1

Checks, before the token is used

Works out the stage, checks it runs as root, and checks that curl, jq and docker are installed and Docker is running. It makes sure WireGuard can run. On a kernel without the WireGuard module, such as every Jetson, it builds the userspace client wireguard-go once. If any check fails, the token is not used.
2

Calls SkyHub with the token

Prints Activating this vehicle on the <stage> environment and sends the token to SkyHub’s activation API. This uses up the token. The answer carries the VPN settings, the registry login and the compose file location.
3

Joins the VPN

Saves the VPN settings to /etc/wireguard/wg0.conf, then enables and starts wg-quick@wg0. SkyHub reaches the drone over this tunnel; the dashboard sees it online through rosbridge on port 9090. If ufw is active, activation adds one rule, ufw allow in on wg0 comment skycore-vpn. If an iptables policy drops inbound traffic, it prints a loud FIREWALL: warning instead.
4

Logs in to the container registry

Logs Docker in to the registry the activation answer names.
5

Records the activation

Writes /home/skycore/skycore.conf. This happens before the steps that can still fail. If one of them fails, sudo skycore update finishes the job without a new token.
6

Installs the compose file

Downloads the stage’s compose file to /home/skycore/docker-compose.yml and checks it first: it must parse, every image must be pinned to a tag other than latest or to a digest, and every image must exist in the registry. The previous file is kept as docker-compose.yml.prev.
7

Starts the services

Pulls the images and starts the requested services. If the same services are already running from another compose file, it stops and names them instead of starting a second set.
8

Finishes

Adds the user who ran sudo to the docker group, prints Drone activation is complete. and the status block.

The configuration file

Activation writes /home/skycore/skycore.conf. Only root can read it, because it holds the token.
Later commands add compose_source (where the compose file came from) and last_update. Every command reads the stage from here, so --stage is only needed once. To change which services up starts, edit the services: line as root, then run sudo skycore down and sudo skycore up. Activating again needs a new token, because each token works once.

Managing services

up

Starts the services listed in skycore.conf:
Use it after a reboot or after down. It needs an activated drone and a compose file. Without one it says Run 'sudo skycore activate --stage dev|prod --token <token>' first or run 'sudo skycore update' to fetch it.

down

Stops all SkyCore containers:

status

Shows the version, stage, activation, the compose file and where it came from, each image with its revision label, and each container’s state:
Run it with sudo. Without it, stage and activated read (cannot read /home/skycore/skycore.conf - run with sudo). Containers that are not running, or that keep restarting, are listed under warnings: with the docker logs command to look at them.

update

Updates the skycore CLI, then the compose file and containers, when they changed:
Containers are pulled and restarted only when the compose file changed or a container is not on the image the compose file names. When nothing changed it prints Already up to date - nothing was changed.

version

Prints the installed SkyCore version:

Troubleshooting

Every message activation and the service commands print, with its fix, is in Set up your drone → Troubleshooting.