Quick Start
Provision a fresh Raspberry Pi 5 into a working Intern device. The provisioning script installs all dependencies, registers systemd services, brings up a Wi-Fi access point for pairing, and starts the captive portal.
Prerequisites
- Raspberry Pi 5 (4 GB RAM minimum)
- Fresh Raspberry Pi OS Bookworm 64-bit flashed to a 64 GB+ microSD
- Wired internet or pre-configured Wi-Fi for the initial download
- Root access (
sudo)
The script targets linux/arm64 only. Pi 4 and earlier are not supported.
Install
SSH into the Pi (or open a terminal on the device) and run:
curl -fsSL \
-H "Cache-Control: no-cache" -H "Pragma: no-cache" \
https://cdn.autonomous.ai/intern/setup.sh \
| sudo bash
The script runs ~10 stages and takes 5–10 minutes on a fresh Pi 5.
What it installs
| Stage | What happens |
|---|---|
| Locale | Ensures C.UTF-8 |
| Prerequisites | hostapd, dnsmasq, nginx, wpa_supplicant, xvfb, chromium, Node.js 22, jq, curl, nscd |
| Pi 5 stability | Disables IPv6, disables Wi-Fi power-save |
| SPI | Enables dtparam=spi=on in /boot/firmware/config.txt for the LED ring (reboot required) |
| OTA metadata | Fetches build URLs from GCS (or OTA_METADATA_URL) |
| Binaries | Installs /usr/local/bin/intern-server and /usr/local/bin/bootstrap-server |
| OpenClaw | intern-server openclaw install (npm global), seeds /root/openclaw/, registers openclaw.service |
| Nginx | Reverse-proxies /api/ → 127.0.0.1:5000, serves the React SPA from /usr/share/nginx/html/setup |
| Wi-Fi AP | Broadcasts Intern-XXXX (last 4 of Pi serial), open SSID, DHCP 192.168.100.50-150, gateway 192.168.100.1 |
Optional environment overrides
AP_BAND=5 # 2.4 or 5 GHz (default 5)
AP_CHANNEL=36 # 6 for 2.4 GHz, 36+ for 5 GHz
COUNTRY_CODE=US
OPENCLAW_VERSION=latest # npm version tag
OPENCLAW_HOME=/root/openclaw
OTA_METADATA_URL=<url> # override OTA source
Example:
COUNTRY_CODE=US AP_BAND=2.4 AP_CHANNEL=6 \
curl -fsSL https://cdn.autonomous.ai/intern/setup.sh | sudo bash
Verify
After the script finishes and the device reboots:
systemctl status intern bootstrap openclaw nginx --no-pager
All four units should be active (running).
Live logs:
journalctl -u intern -f
journalctl -u openclaw -f
journalctl -u bootstrap -f
The device also writes verbose logs to /var/log/intern.log at slog DEBUG level.
What's next
The device is now broadcasting Intern-XXXX but has no Wi-Fi credentials, no channel tokens, and no LLM key. Continue with Pairing & Wi-Fi to walk through the captive portal.
Troubleshooting
| Symptom | Likely cause |
|---|---|
| LED stays red after setup | Inspect /var/log/intern.log; usually a missing OTA binary or unreachable GCS |
No Intern-XXXX SSID | hostapd failed to bind — check journalctl -u hostapd |
openclaw.service flapping | npm install incomplete — re-run intern-server openclaw install |
| SPI / LED ring not working | dtparam=spi=on requires a reboot after first install |