Day 1: Zeus Comes Online
Unboxing a Jetson Orin Nano, flashing JetPack, and getting ten services running in a single evening. The foundation of Project Olympus.
There’s a moment when you plug in a new piece of hardware and the LED blinks for the first time. It’s not doing anything useful yet — it’s just… alive. That moment hit different tonight.
Meet Zeus: an NVIDIA Jetson Orin Nano Super. Tiny board. Serious power. 1024 CUDA cores, 40 Tensor cores, 8GB of unified memory, and enough compute to make me question why I ever paid for cloud GPUs.
The Flash
Getting JetPack 6.x onto the board was surprisingly smooth. NVIDIA’s SDK Manager walked me through flashing the NVMe — I went with the Kingston NV3 1TB because fast storage matters when you’re going to run a dozen containerized services simultaneously.
# Post-flash sanity check
jetson_release
# JetPack 6.1 | L4T 36.4.0 | Ubuntu 22.04 | CUDA 12.6
First boot, SSH in, and we’re cooking.
The Storage Layer
The OS lives on the NVMe, but media needs room to breathe. I mounted an 8TB Seagate HDD at /media/storage — this is where Jellyfin, downloads, and everything media-related will live.
sudo mkfs.ext4 /dev/sda1
sudo mkdir -p /media/storage
sudo mount /dev/sda1 /media/storage
# Added to fstab for persistence
Simple. Reliable. None of that NAS-over-network latency — just a drive bolted directly to the machine.
Bringing Up the Stack
Here’s where the evening got intense. I wanted the full media automation pipeline running before I went to sleep. That means:
- qBittorrent — torrent client, tunneled through Gluetun (WireGuard VPN)
- Jackett — indexer proxy, so searches hit multiple sources
- Jellyfin — media server for streaming to any device
- Prowlarr — indexer manager that feeds Sonarr and Radarr
- Sonarr — TV show automation
- Radarr — movie automation
- FlareSolverr — Cloudflare bypass for indexers that need it
Every service runs in Docker, ARM64-native where possible. Some images needed to be pulled from alternative registries (the Jetson ecosystem is getting better but it’s still not x86). A few required building from source.
# docker-compose excerpt
services:
gluetun:
image: qmcgaw/gluetun
cap_add:
- NET_ADMIN
environment:
- VPN_SERVICE_PROVIDER=custom
- VPN_TYPE=wireguard
ports:
- 8080:8080 # qBittorrent WebUI
qbittorrent:
image: linuxserver/qbittorrent
network_mode: "service:gluetun"
volumes:
- /media/storage/downloads:/downloads
The VPN routing took the longest to get right. Gluetun handles the WireGuard tunnel, and qBittorrent’s traffic goes through it — but Sonarr and Radarr need to talk to qBittorrent through the Gluetun container’s network. Getting the port mappings and network modes correct was a solid hour of trial and error.
The Moment It All Clicked
At around 11 PM, I added a movie through Radarr’s web UI. Within seconds, Prowlarr searched the indexers, found a release, sent it to qBittorrent (through the VPN tunnel), and the download started. A few minutes later, Radarr moved the completed file to the Jellyfin library, and I could stream it from my phone.
Fully automated. Fully local. Zero cloud dependencies.
I sat there watching the download progress bar for way longer than I should have. Not because I needed to — because I built this, and it worked.
What’s Next
Zeus is running, but it’s just infrastructure right now. The real project — the AI layer, the IoT integration, the ambient intelligence — that all comes next. This was Day 1: getting the foundation right.
Tomorrow, I start building Athena.
Hardware used: NVIDIA Jetson Orin Nano Super (8GB), Kingston NV3 1TB NVMe, Seagate 8TB HDD, running JetPack 6.1 on Ubuntu 22.04.