Before you start
You need:- A SkyHub account. Sign up at skyhub.ai/register, confirm your email and log in.
- The drone’s computer. An NVIDIA Jetson, such as a Jetson Orin Nano, running JetPack 6 or newer (Ubuntu 22.04 or 24.04). Other 64-bit Ubuntu or Debian computers (arm64 or x86-64) work too, but hardware video encoding needs a Jetson. Is the drive still blank? Flash it first.
- A terminal on the drone. Use a keyboard and screen, or SSH in from your laptop.
- A user with sudo rights. Run the commands as your normal user. The installer asks for your password once, at the start.
- Internet on the drone. The installer downloads SkyCore, Docker and the drone’s containers. Keep the drone connected until the last step.
Network requirements (for firewalls and locked-down networks)
Network requirements (for firewalls and locked-down networks)
wg0, port 9090. If ufw is on, activation opens this for you.1. Install SkyCore
On the drone, open a terminal and paste this command:- downloads SkyCore and installs it as the
skycorecommand, - installs what is missing: Docker, the AWS CLI and a few system packages (anything already there is left alone),
- runs nine checks and prints the drone’s status.
[⋯] are progress and [!] are warnings. Only a red [✖] or Error: line means something failed. If you get one, find it under Troubleshooting.2. Add the drone in the dashboard
Open the Add Vehicle dialog
Describe the drone
Copy the activation token
3. Activate the drone
On the drone, run this. Replace<token> with the number you copied, without the angle brackets:
prod) in step 1, so you do not need to type it again. The command the installer printed, with --stage prod, does the same thing.
Activation:
- checks that Docker and the VPN can work before it uses your token,
- registers the drone with SkyHub and connects it to the SkyHub VPN,
- downloads and starts the drone’s services,
skyhubandmavproxy.
[✔] Drone activation is complete. and the drone’s status.
4. Check that it is online
On the drone, run:activated: yesmeans the token was accepted.runningnext to each service means the drone is up.
mavproxy shows restarting and a warning. That is expected. It runs once the flight controller is connected.Update SkyCore
To get the latest SkyCore and containers, run:Start over or remove SkyCore
Repair an install
Repair an install
Stop and start the drone's services
Stop and start the drone's services
Activate again with a new token
Activate again with a new token
- In the dashboard’s vehicle list, delete the old vehicle.
- Add it again as in step 2 and copy the new token.
- Run
sudo skycore activate --token <new-token>on the drone.
Remove SkyCore from a board
Remove SkyCore from a board
/usr/local/bin/skycore,/usr/local/bin/sc.sh,/usr/local/bin/skycore_cli.pyand/usr/local/share/skycore//home/skycore/skycore.conf(holds the stage and the activation token) and/home/skycore/docker-compose.yml/etc/wireguard/wg0.conf(the VPN settings)- on a Jetson:
/usr/local/bin/wireguard-goand/etc/systemd/system/wg-quick@wg0.service.d/override.conf /etc/udev/rules.d/99-tty-permissions.rulesor99-usb-permissions.rules(serial port access for the flight controller)
ufw rule skycore-vpn, if activation added one.Troubleshooting
Find the message you see, then follow the fix. If a command fails, the first red[✖] or Error: line is the one that matters.
During install
Say which environment this vehicle belongs to: add --stage dev or --stage prod
Say which environment this vehicle belongs to: add --stage dev or --stage prod
Error: Say which environment this vehicle belongs to: add --stage dev or --stage prod (no stage is recorded in /home/skycore/skycore.conf).The command was missing --stage prod. Copy the whole install command, including the end.--stage must be dev or prod
--stage must be dev or prod
Error: --stage must be dev or prod, not '...'. There is a typo after --stage. Use --stage prod.This needs root / Could not obtain root
This needs root / Could not obtain root
Error: This needs root. Install sudo, or run it as root. or Error: Could not obtain root.Your user cannot use sudo, or the password was wrong. Log in as a user with sudo rights and run the command again.Could not download https://skyhub.ai/sc.tar.gz
Could not download https://skyhub.ai/sc.tar.gz
skyhub.ai. Then run the install command again.dpkg-query not found - the installer supports Debian/Ubuntu (JetPack) only
dpkg-query not found - the installer supports Debian/Ubuntu (JetPack) only
Could not install required packages - refusing to continue
Could not install required packages - refusing to continue
apt-get could not install packages SkyCore needs. Read the apt error printed just above it. Often another update is still running in the background: wait a few minutes, then run the install command again.Refusing to install ...: on this Jetson apt would also install linux-image-...
Refusing to install ...: on this Jetson apt would also install linux-image-...
Could not install Docker Engine (or the docker compose v2 plugin) - refusing to continue
Could not install Docker Engine (or the docker compose v2 plugin) - refusing to continue
download.docker.com and its apt mirrors, then run the install command again.docker daemon not reachable and could not be started
docker daemon not reachable and could not be started
[!] Continuing without the aws CLI
[!] Continuing without the aws CLI
skycore update cannot refresh its access to the container images. Run the install command again later to retry.Error: The install failed - see above.
Error: The install failed - see above.
[✖] line and look it up on this page.During activation
Activating this vehicle on the prod environment, the token is not used yet: fix the cause and run the same command again with the same token.This script must be run as root
This script must be run as root
sudo in front: sudo skycore activate --token <token>.No drone token provided. Use --token parameter to specify the token.
No drone token provided. Use --token parameter to specify the token.
sudo skycore activate --token <token>.No stage given and none recorded in /home/skycore/skycore.conf.
No stage given and none recorded in /home/skycore/skycore.conf.
--stage prod to the activate command.... is required for activation but is not installed - run: sudo skycore install
... is required for activation but is not installed - run: sudo skycore install
curl, jq or docker) is missing. Run the install command again, then activate. Your token is not used yet.The docker daemon is not reachable - check: systemctl status docker
The docker daemon is not reachable - check: systemctl status docker
sudo systemctl status docker, then activate again. Your token is not used yet.WireGuard is not usable - the vehicle cannot join the VPN
WireGuard is not usable - the vehicle cannot join the VPN
go.dev and git.zx2c4.com, then activate again. Your token is not used yet.The activation request failed: ... error: 406
The activation request failed: ... error: 406
The activation request failed: ... error: 500
The activation request failed: ... error: 500
The activation request failed: Could not resolve host / timed out
The activation request failed: Could not resolve host / timed out
skyhub.ai. See Network requirements.Failed to start WireGuard service / VPN connection failed to establish
Failed to start WireGuard service / VPN connection failed to establish
Invalid WireGuard configuration file
Invalid WireGuard configuration file
docker login to ... failed
docker login to ... failed
The activation has been recorded ... Fix the problem and run: sudo skycore update
The activation has been recorded ... Fix the problem and run: sudo skycore update
These services are already running from another compose file
These services are already running from another compose file
mavproxy containers on one serial port, so nothing was started. Stop the old ones with docker compose -f <that file> down, using the file the message names. Then run sudo skycore update. You do not need a new token.Drone not online
Activated, but the dashboard shows Offline
Activated, but the dashboard shows Offline
wg0, port 9090. A firewall on the drone can block that.If activation printed ufw is active and the rule for wg0 could not be added, run:FIREWALL: box about iptables INPUT policy DROP, allow wg0 and make the rule permanent:sudo systemctl status wg-quick@wg0.mavproxy keeps exiting and restarting
mavproxy keeps exiting and restarting
mavproxy talks to the flight controller. With no flight controller connected it restarts in a loop. Connect the flight controller and it settles.... is exited, not running
... is exited, not running
sudo skycore up. If it stops again, the message shows the docker logs command for that container.stage / activated: (cannot read /home/skycore/skycore.conf - run with sudo)
stage / activated: (cannot read /home/skycore/skycore.conf - run with sudo)
sudo skycore status.During update
No stage given and none recorded
No stage given and none recorded
This vehicle is activated on ...; update cannot move it to ...
This vehicle is activated on ...; update cannot move it to ...
--stage that differs from the drone’s. Leave --stage off: sudo skycore update. To move a drone to another environment, activate it again with a token from that environment.Registry login failed: VPN is down, cannot refresh registry credentials
Registry login failed: VPN is down, cannot refresh registry credentials
sudo systemctl status wg-quick@wg0, then run the update again.Registry login skipped: the aws CLI is not installed
Registry login skipped: the aws CLI is not installed
Nothing was updated: no release could be downloaded
Nothing was updated: no release could be downloaded
skyhub.ai. Check its internet connection and run the update again. Nothing on the drone was changed.sudo skycore status and the first red line you saw.
Advanced
You do not need these to set up a drone.Install and activate in one command
Install and activate in one command
--token to the install command:Development environment (--stage dev)
Development environment (--stage dev)
--stage says which SkyHub environment the drone belongs to: prod for everyone, dev for ID Robots development. There is no default. The stage is saved in /home/skycore/skycore.conf and later commands read it from there.A dev drone needs a token from the development environment:install and update never move an activated drone to another stage. To move it, activate again with --stage and a token from the other environment.Choose which services run (--services)
Choose which services run (--services)
skyhub and mavproxy. To pick services, pass a comma-separated list when you activate:/home/skycore/skycore.conf and sudo skycore up starts the same services. Old names are translated: drone-mavros, core, ws_proxy, ws-proxy and gamepad become skyhub, and camera-proxy and slam are skipped. See Microservices & Container Profiles.Try a pre-release (SKYCORE_ARCHIVE_URL)
Try a pre-release (SKYCORE_ARCHIVE_URL)
update at its archive. Use an https:// URL, or an s3://bucket/key URL (fetched with the AWS CLI):archive:). The next plain sudo skycore update goes back to the published release.Flash or clone a drive
Flash or clone a drive
All installer commands and options
All installer commands and options

