Release Flavors
Every release builds two install packages from the same source. You choose a flavor by downloading the matching tarball. There is no runtime flag that switches between them.<hash> is the first eight characters of the source commit the release was built from. Both tarballs in a release share the same hash.
The two flavors differ in what infrastructure they bring with them:
- The on-premises flavor installs the supporting infrastructure itself: Flannel for cluster networking, MetalLB for load balancing, the local persistent-volume provisioner for storage, MySQL, and MinIO for object storage.
-
The EKS flavor leaves that to AWS. It expects the VPC CNI, an Elastic Load Balancer, the EBS CSI driver, Amazon RDS, and Amazon S3. In their place it adds Cluster Autoscaler and External Secrets Operator, both installed by default, plus cert-manager (optional) and the
lilt-aws-envTerraform module (optional).
ENABLE_CERT_MANAGER=true, and the Terraform module is only used if you provision your infrastructure with it. Every component the installer runs has a toggle of its own, so anything in the list can be turned off — see Component flags.
The EKS tarball is the only one that contains the Terraform module. If you plan to provision AWS infrastructure with Terraform, download the EKS flavor. See Provision AWS infrastructure with Terraform.
Download the Package
LILT gives you an S3 release URI for your version, in the forms3://<bucket>/lilt-enterprise-<version>/. The bucket is chosen per release when it is published, so use the URI LILT gives you rather than assuming one. Current releases are published to lilt-self-managed-releases; releases from before the move are in lilt-enterprise-releases.
This is LILT’s distribution bucket, which is where you download from. It is unrelated to the S3 bucket LILT runs on. That one lives in your own account, is named
<PREFIX>-s3 by the Terraform module, and is set with S3_BUCKET in install.env.Verify the Package
Each tarball is published with a.md5 sidecar that holds the checksum of the local file. The consolidated documentation/md5sum.txt covers every artifact in the release.
Verify the tarball you downloaded:
md5sum -c md5sum.txt from the directory that holds the release tree. The file lists paths relative to the release prefix.
Extract the Package
install-lilt-eks.sh:
What the Package Contains
Seed Your Container Registry
The cluster pulls LILT images from a registry that you control.install_scripts/seed-registry.sh copies the release’s images from the release tree, or straight from S3, into that registry. This is the step an air-gapped install depends on, and it is the longest step in the whole process.
The script reads documentation/image_map.tsv and documentation/image_list.txt from the release, so it always seeds exactly the images that release needs.
Point It at the Release
--release takes either the S3 release prefix or a release directory you already downloaded. Both hold the same images; they differ in how much disk you need.
Prefer the S3 form unless the machine has no route to S3. It needs room for the largest single image rather than the entire bundle, and it is the same URI you already have.
--release points at the release, which contains documentation/ and docker_images/. It is not the extracted installer tarball, which contains the install scripts and charts.
Preview, Then Push
Without--apply the script reports a plan and copies nothing. Run this first:
PUSH or, if your registry already holds that tag, HAVE. When the plan looks right, add --apply:
Add
--path if you set the REGISTRY_PATH_* variables in install.env. It defaults to empty, which matches the plain-ECR layout where those variables are also empty. Set one and not the other and the install pulls from a path nothing was pushed to.install.env with ENABLE_SEED_REGISTRY, SEED_REGISTRY_RELEASE, SEED_REGISTRY_TARGET, and SEED_REGISTRY_APPLY, which lets the installer run it as part of an unattended install.
The script skips images your registry already has, so a re-run after a failure resumes rather than starting over.
Sizing the Staging Directory
seed-registry.sh stages each image on local disk before it pushes. A release moves roughly 180 GB in total, and the largest single image is about 47 GB.
Amazon ECR
Amazon ECR does not create a repository when you push to one that does not exist.seed-registry.sh creates each repository before its first push, which needs the ecr:CreateRepository permission. If your repositories are provisioned separately, set SEED_REGISTRY_CREATE_REPOS=false.
Let the Cluster Pull
Seeding puts the images in your registry. The cluster still has to authenticate to pull them, and LILT relies on node-level authentication for that rather than on per-namespace pull secrets. On EKS with ECR this is already handled: the LILT Terraform module attaches theAmazonEC2ContainerRegistryReadOnly policy to the node role, so every node can pull from the account’s registry with no further configuration. If you provision your own cluster, grant the node role the same access. See Install on an existing EKS cluster.
For a registry that cannot authenticate at the node level, configure the credential the way your runtime expects before you install. A pod that cannot pull sits in ImagePullBackOff, which names the image but not the missing credential.
Next Steps
- Install System (AWS EKS) — configure and run the EKS install.
- Provision AWS infrastructure with Terraform — create the cluster, database, and IAM roles with the
lilt-aws-envmodule. - Install on an existing EKS cluster — use infrastructure you provisioned yourself.
- Install System (Amazon Linux 2023 or Rocky 8/9) — the on-premises flavor.

