Packages K3s and Juno into a self-contained bundle for deployment on machines with no internet access. The bundle includes all container images, Helm charts, Git repositories, and an Ansible-based installer — everything needed to bring up a fully operational Juno cluster offline.
# On build machine (internet required)
git clone https://github.com/juno-fx/Airgap-Bundler.git
cd Airgap-Bundler
make build
# Transfer to target
rsync -avz --progress bundles/genesis-*.tar.gz user@target:/opt/
# On target machine
cd /opt
tar -xzf genesis-*.tar.gz
cd genesis-*/
sudo ./install.sh \
--public-ip 192.168.1.10 \
--genesis-host juno.example.com \
--basic-auth-email admin@example.com \
--basic-auth-password yourpassword \
--titan-owner adminuser \
--titan-uid 1000| Tool | Version | Purpose |
|---|---|---|
| Docker | Latest | Pull and save container images |
| Helm | Latest | Pull ingress-nginx and gpu-operator Helm charts |
| Git | Latest | Clone deployment repositories |
| curl | Latest | Download K3s airgap images and Juno installer |
| Internet | Outbound HTTPS | GitHub, Docker Hub, registry.k8s.io, ghcr.io, quay.io, nvcr.io |
| Requirement | Detail |
|---|---|
| OS | Ubuntu 22+, Debian 12/13, RHEL/Rocky 9/10, AlmaLinux 10 (x86_64) |
| Docker | Latest (CE) |
| CPU | 8 cores minimum |
| RAM | 16GB minimum |
| Disk | 75GB minimum |
| Network | No internet required |
| Access | sudo |
git clone https://github.com/juno-fx/Airgap-Bundler.git
cd Airgap-Bundler
# 1. Configure versions (see Configuration section below)
# 2. Add/remove images (see Configuration section below)
make buildOutput: bundles/genesis-<GENESIS_VERSION>-orion-<ORION_VERSION>.tar.gz
Edit the top of build-bundle.sh:
GENESIS_VERSION="3.0.2"
ORION_VERSION="3.1.0"Edit images.txt before building. One Docker image reference per line:
docker.io/myorg/myimage:v1.0
quay.io/myorg/otherapp:latest
# Lines starting with # are ignored
Each image is saved as a separate tar file in the images/ directory of the bundle. K3s auto-imports all tars from this directory on startup.
genesis-3.0.2-orion-3.1.0/
├── images/ # Container image tar files
│ ├── k3s-airgap-images-amd64.tar # K3s system images
│ └── *.tar # One tar per image in images.txt
├── helm-charts/ # Helm chart packages
├── git-repos/ # Bare git repositories
│ ├── Genesis-Deployment.git
│ ├── Orion-Deployment.git
│ ├── Terra-Official-Plugins.git
│ └── Juno-Bootstrap.git
├── docker/ # Docker service image tars
│ └── *.tar # Git server image
├── registries.yaml # K3s embedded registry config
├── docker-compose.yaml # Git server
├── install.sh # Main installer
├── values.yaml # Ansible values
├── juno-oneclick.tar.gz # Singularity container with Ansible
└── debug.sh # Debug script
rsync -avz --progress bundles/genesis-*.tar.gz user@target:/opt/cd /opt
tar -xzf genesis-*.tar.gz
cd genesis-*/
sudo ./install.sh \
--public-ip 192.168.1.10 \
--genesis-host juno.example.com \
--basic-auth-email admin@example.com \
--basic-auth-password yourpassword \
--titan-owner adminuser \
--titan-uid 1000The installer will:
- Load Docker images for the Git server
- Start the Git server via Docker Compose
- Create
/etc/rancher/k3s/config.yamlwithembedded-registry: true - Copy
registries.yamlto/etc/rancher/k3s/ - Copy all image tars to the K3s auto-import directory
- Run Ansible to install K3s and deploy Juno
sudo k3s kubectl get nodes
sudo k3s kubectl get pods -A
sudo k3s ctr images lssudo ./debug.shShare the resulting debug.log with Juno support.
Quick checks:
sudo systemctl status k3s
cat /etc/rancher/k3s/config.yaml
cat /etc/rancher/k3s/registries.yamlAfter installation completes, the installer prints fully rendered URLs. Use these to configure ArgoCD application sources in the UI.
Git Repositories (port 8080):
| Repository | Version | URL |
|---|---|---|
| Genesis-Deployment | v3.0.2 | http://<GIT_SERVER_IP>:8080/git/Genesis-Deployment.git |
| Orion-Deployment | v3.1.1 | http://<GIT_SERVER_IP>:8080/git/Orion-Deployment.git |
| Terra-Official-Plugins | main | http://<GIT_SERVER_IP>:8080/git/Terra-Official-Plugins.git |
Helm Repository (port 8081): http://<GIT_SERVER_IP>:8081
| Chart | Version |
|---|---|
| ingress-nginx | 4.12.1 |
| gpu-operator | v25.10.1 |
| Resource | Description |
|---|---|
| K3s Airgap Installation | Official K3s docs for air-gapped installs |
| K3s Image Auto-Loading | How K3s auto-imports image tars from the images directory on startup |
| K3s Embedded Registry | How the K3s embedded registry mirror works |
| TinyGit | Lightweight Git server used to serve Juno repositories |