Install from an offline bundle

Install Red Hat Edge Manager on an air-gapped Red Hat Enterprise Linux host by using the bundle you prepared in Prepare an offline installation bundle.

Before you begin

Procedure

  1. Extract the bundle into a working directory:
    mkdir ~/rhem-bundle
    tar -xzf ~/rhem-bundle.tar.gz -C ~/rhem-bundle
  2. Start a local container registry on the target host. Quadlet services pull images at startup; on an air-gapped host those pulls must come from a local registry. The bundle includes docker.io/library/registry:2.

    Load the registry image into Podman local storage:

    skopeo copy \
        "dir:$HOME/rhem-bundle/images/library/registry:2" \
        "containers-storage:docker.io/library/registry:2"

    Create the registry data directory and start the registry container:

    mkdir -p ~/registry-data
    podman run -d --name local-registry \
        --network=host \
        --security-opt label=disable \
        -v ~/registry-data:/var/lib/registry \
        --restart=always \
        docker.io/library/registry:2

    Verify the registry is ready:

    curl http://localhost:5000/v2/
    Note

    --network=host avoids port-forwarding issues with rootless Podman on Red Hat Enterprise Linux 9. Use --security-opt label=disable in place of the :z volume flag when --network=host is set.

  3. Import bundled images into the local registry:
    cd ~/rhem-bundle
    ./import.sh

    By default, import.sh targets localhost:5000. To use a different registry address:

    ./import.sh --registry <host>:<port>

    Verify the images are available:

    curl http://localhost:5000/v2/_catalog
  4. Install the flightctl-services RPM and dependencies from the bundle:
    cd ~/rhem-bundle
    ./install-rpms.sh
  5. Configure registry redirection so Podman pulls from your local registry instead of upstream registries. Edit /etc/containers/registries.conf and add mirror entries for each source registry. Set <registry_host>:<registry_port> to localhost:5000:
    [[registry]]
    prefix = "quay.io"
    location = "<registry_host>:<registry_port>"
    insecure = true
    
    [[registry]]
    prefix = "docker.io"
    location = "<registry_host>:<registry_port>"
    insecure = true
    
    [[registry]]
    prefix = "registry.redhat.io"
    location = "<registry_host>:<registry_port>"
    insecure = true
    Important

    The insecure = true flag is required when the registry serves plain HTTP. If your registry uses TLS, remove this flag and ensure its CA certificate is trusted on the target system.

  6. Configure Red Hat Edge Manager before you start services. Create or edit /etc/flightctl/service-config.yaml with at minimum:
    global:
      baseDomain: <baseDomain>
      generateCertificates: builtin
      auth:
        type: oidc

    Replace <baseDomain> with the fully qualified domain name clients use to reach the host (not a raw IP address). Set auth.type to oidc to use the built-in PAM OIDC issuer installed with flightctl-services. For DNS, TLS, and certificate planning, see Planning DNS and TLS for the standalone gateway.

  7. Enable and start services:
    sudo systemctl enable --now flightctl.target
    sudo systemctl list-units 'flightctl-*.service'
    sudo podman ps
  8. Complete Configure authentication credentials to create administrator accounts.
  9. Install the Flight Control CLI if the bundle includes flightctl-cli RPMs:
    sudo dnf install -y flightctl-cli

    This command uses the repository metadata that install-rpms.sh configured from the bundle.

Results

  • sudo systemctl status flightctl.target reports active services.
  • Required flightctl-* services are active, including flightctl-gateway.service when your release ships the standalone HTTPS gateway.
  • When the CLI is installed, it reports a version:
    flightctl version
  • The web UI is reachable at https://<baseDomain>/ on port 443.
  • The API responds through the gateway:
    curl -k -o /dev/null -w '%{http_code}\n' https://<baseDomain>/api/v1/fleets

The Prometheus and Grafana container images are not included in the standard bundle. If you need the observability stack, mirror those images separately and include the observability RPM in the bundle. See Installing the observability stack in disconnected environments.

For upgrades, build a new bundle for the target release and Upgrading the Red Hat Edge Manager RPM installation.

For installation errors, see Troubleshooting offline RPM installation.