Skip to content

Build Prerequisites

In order to build EKS Distro, you will need to make sure several things are installed and configured.

Region Environment Variables

The build uses the new convention setting region with the AWS_REGION environment variable. Some older utilities such as v1 of the AWS CLI use the environment variable AWS_DEFAULT_REGION. To be safe, set and export both to the same value:

1
2
export AWS_REGION=us-west-2
export AWS_DEFAULT_REGION="${AWS_REGION}"

Go Proxy Settings

If you are using an HTTP proxy like you might if you are on a corporate VPN, you may need to set and export GOPROXY:

1
export GOPROXY=direct

Amazon ECR

If you are building container images and uploading or downloading from ECR, you will need to configure buildctl to get registry credentials. While you could periodically use the AWS CLI and run aws ecr get-login to populate credentials into your ~/.docker/config.json, it is much easier to use the ECR Credential Helper. To get up and running easily, you can use the custom Docker config file provided in this repo. After installing the ECR credential helper, make sure you have AWS credentials configured in one the usual ways, and set the Docker config to the supplied example:

1
2
3
4
5
6
cat ./development/config.json
{
  "credsStore": "ecr-login"
}
# enables ecr push/pull
export DOCKER_CONFIG=$(pwd)/development

To create all the required ECR repositories for EKS Distro, run the /development/ecr/ecr-command.sh create-all-private-repositories script.

Qemu

In order to build and run multi-architecture containers, you will need to install Qemu. On AmazonLinux2, this can be installed with the qemu-user-static package, and then updating your host's binfmt_misc configuration.

GNU Tar

If you are on a Mac, you will need to brew install coreutils to get GNU tar.

Build Options

The default target for make files uses buildkit to build containers. The alternative to this is building and pushing containers with Docker.

buildkitd

The default target for make files builds with buildkit. You can install the latest buildkit client from the GitHub releases page. To run a buildkit server locally, you can use docker-compose.

1
2
3
4
docker-compose -f development/buildkit-compose.yaml up -d
docker-compose -f development/buildkit-compose.yaml logs buildkitd
export BUILDKIT_HOST="tcp://127.0.0.1:1234"
buildctl debug workers

Note: If you notice that RUN commands in image builds that require network access are failing, your network may be blocking DNS lookups to Google DNS IPs (8.8.8.8 and 8.8.4.4). If you see the log message from the buildkit server:

1
"No non-localhost DNS nameservers are left in resolv.conf. Using default external servers: [nameserver 8.8.8.8 nameserver 8.8.4.4]

Try adding your local nameservers and search domains to the development/buildkitd.toml file and the dns and dns_search, and volume sections of the development/buildkit-compose.yaml, and run docker-compose up -d. If you are on macOS, you can run the following command to find your nameservers and search domains.

1
scutil --dns

Build with Docker

If you don't want to use buildkit, you will need to install Docker to build containers. Use the docker target for make files.