← All notes
2026-03-19·6 min read

Installing Ansible AWX 24.6.1 Offline on Rocky Linux 9 (Air-Gapped)

ansibleawxkubernetesminikuberocky-linuxair-gapped

Scope

  • Ansible AWX 24.6.1 on Minikube (single-node Kubernetes v1.30.0)
  • Target OS: Rocky Linux 9.x / RHEL 9.x / AlmaLinux 9.x (x86_64)
  • Fully air-gapped installation — no internet required on the destination server
  • Scripts available at: github.com/gvargassv/awx-offline-installer

Components Installed

Component Version
AWX 24.6.1
AWX Operator 2.19.1
Kubernetes v1.30.0
Minikube latest
Docker CE 27.x
PostgreSQL 15
Redis 7

Requirements

Machine with internet access (bundle preparation)

  • Any OS with Docker installed (Linux, macOS, Windows WSL2)
  • ~15 GB of free disk space
  • Internet access

Destination server (air-gapped)

Resource Minimum Recommended
CPU 4 vCPUs 4+ vCPUs
RAM 8 GB 16 GB
Free disk 40 GB 60+ GB
OS Rocky Linux 9.x / RHEL 9.x / AlmaLinux 9.x (x86_64)

Solution

The installation is handled by two scripts from the repository:

Script Where to run What it does
scripts/01-prepare-bundle.sh Machine with internet Downloads images, RPMs, and binaries
scripts/02-install-awx.sh Air-gapped server Installs Docker, Minikube, K8s, and AWX

Step 1: Clone the repository (machine with internet)

git clone https://github.com/gvargassv/awx-offline-installer.git
cd awx-offline-installer

Step 2: Generate the offline bundle

Run 01-prepare-bundle.sh on any machine with Docker and internet access. This script downloads everything needed for the offline installation:

  • Docker CE RPMs for Rocky/RHEL 9 x86_64
  • Minikube and kubectl binaries
  • All container images (AWX, AWX Operator, AWX EE, PostgreSQL, Redis, Kubernetes system images)
  • AWX Operator manifests and Kustomize configuration
sudo bash scripts/01-prepare-bundle.sh

The process takes approximately 15–30 minutes depending on your connection speed. On completion, it generates a single compressed file:

awx-offline-bundle.tar.gz   (~5–6 GB)

Step 3: Transfer the bundle to the destination server

Via SCP over an internal network:

scp awx-offline-bundle.tar.gz root@<SERVER_IP>:/root/

Or via USB/removable media:

cp awx-offline-bundle.tar.gz /media/usb/

Step 4: Extract the bundle on the server

cd /root
tar xzf awx-offline-bundle.tar.gz
cd awx-offline-bundle

Step 5: Run the installer (no internet required)

Run 02-install-awx.sh on the destination server. This script performs the following automatically:

  1. Validates system requirements (CPU, RAM, disk)
  2. Sets SELinux to permissive and disables firewalld
  3. Installs Docker CE from the local RPMs
  4. Copies Minikube and kubectl to /usr/local/bin/
  5. Loads all container images into Docker
  6. Starts the Minikube cluster
  7. Loads AWX images into the Minikube registry
  8. Deploys the AWX Operator and AWX Custom Resource
  9. Creates systemd services for persistence across reboots
  10. Displays access credentials on completion
sudo bash scripts/02-install-awx.sh

Optional parameters:

sudo bash scripts/02-install-awx.sh --cpus 4 --memory 12g --disk 50g
Option Default Description
--cpus N Auto-detect CPUs allocated to Minikube
--memory NNg Auto-calculate RAM allocated to Minikube
--disk NNg 40g Minikube virtual disk size
--skip-docker false Skip Docker installation

Installation time: approximately 10–20 minutes.


Step 6: Confirm successful deployment

The installer displays a summary on completion:

╔══════════════════════════════════════════════════════════════════════╗
║     ✔  AWX INSTALLATION COMPLETED                                    ║
╠══════════════════════════════════════════════════════════════════════╣
║  URL (NodePort):    http://192.168.49.2:30080                        ║
║  URL (Forward):     http://10.0.0.50:8080                            ║
║  Username:          admin                                            ║
║  Password:          xK9m2pL7qR4w                                     ║
╚══════════════════════════════════════════════════════════════════════╝

Verification

Check pod status

kubectl get pods -n awx

Expected output when fully deployed:

NAME                                              READY   STATUS
awx-operator-controller-manager-xxx              2/2     Running
awx-postgres-15-0                                1/1     Running
awx-task-xxx                                     4/4     Running
awx-web-xxx                                      3/3     Running

Retrieve the admin password

kubectl get secret awx-admin-password -n awx \
  -o jsonpath='{.data.password}' | base64 -d ; echo

Reference Commands

# Pod status
kubectl get pods -n awx

# Services
kubectl get svc -n awx

# Minikube cluster status
minikube status

# AWX web logs
kubectl logs -f deploy/awx-web -n awx -c awx-web

# AWX task logs
kubectl logs -f deploy/awx-task -n awx -c awx-task

# Restart AWX web
kubectl rollout restart deploy/awx-web -n awx

Notes

  • The full installation log is saved to /var/log/awx-offline-install.log
  • Two systemd services are created automatically:
    • minikube.service — starts the Minikube cluster on boot
    • awx-portforward.service — exposes AWX on port 8080 of the host
  • AWX is accessible via two URLs:
    • NodePort http://<MINIKUBE_IP>:30080 — direct cluster access
    • Port Forward http://<SERVER_IP>:8080 — accessible from the network