Skip to content

Commit

Permalink
fix: injector build process (#3479)
Browse files Browse the repository at this point in the history
Signed-off-by: Austin Abro <[email protected]>
  • Loading branch information
AustinAbro321 authored Feb 10, 2025
1 parent 8be4420 commit 845032c
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 89 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build-rust-injector.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: "Build Rust Binary for x86_64 and arm64"
run: |
cd src/injector
make build-injector-linux
make injector-linux
cd target
mkdir -p ../dist
cp x86_64-unknown-linux-musl/release/zarf-injector ../dist/zarf-injector-amd64
Expand Down
3 changes: 0 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,6 @@ build-examples: ## Build all of the example packages

@test -s ./build/zarf-package-yolo-$(ARCH).tar.zst || $(ZARF_BIN) package create examples/yolo -o build -a $(ARCH) --confirm

build-injector-linux: ## Build the Zarf injector for AMD64 and ARM64
docker run --rm --user "$(id -u)":"$(id -g)" -v $$PWD/src/injector:/usr/src/zarf-injector -w /usr/src/zarf-injector rust:1.71.0-bookworm make build-injector-linux list-sizes

## NOTE: Requires an existing cluster or the env var APPLIANCE_MODE=true
.PHONY: test-e2e
test-e2e: test-e2e-without-cluster test-e2e-with-cluster ## Run all of the core Zarf CLI E2E tests (builds any deps that aren't present)
Expand Down
52 changes: 7 additions & 45 deletions src/injector/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,59 +10,21 @@ help: ## Display this help information
clean: ## Clean the build directory
rm -rf target

cross-injector-linux: cross-injector-amd cross-injector-arm

cross-injector-amd:
rustup target add x86_64-unknown-linux-musl
test -s x86_64-linux-musl-cross || curl https://zarf-public.s3-us-gov-west-1.amazonaws.com/pipelines/x86_64-linux-musl-cross.tgz | tar -xz
export PATH="$$PWD/x86_64-linux-musl-cross/bin:$$PATH"
export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=x86_64-linux-musl-cc

install-cross:
cargo install cross --git https://github.com/cross-rs/cross

injector-linux: cross-injector-amd cross-injector-arm

cross-injector-amd:
rustup target add x86_64-unknown-linux-musl
cross build --target x86_64-unknown-linux-musl --release


cross-injector-arm:
rustup target add aarch64-unknown-linux-musl
test -s aarch64-linux-musl-cross || curl https://zarf-public.s3-us-gov-west-1.amazonaws.com/pipelines/aarch64-linux-musl-cross.tgz | tar -xz
export PATH="$$PWD/aarch64-linux-musl-cross/bin:$$PATH"
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-musl-cc

cross build --target aarch64-unknown-linux-musl --release



build-injector-linux: build-injector-linux-amd build-injector-linux-arm ## Build the Zarf injector for AMD64 and ARM64

build-injector-linux-amd: ## Build the Zarf injector for AMD64
rustup target add x86_64-unknown-linux-musl

if [ "$(shell uname -m)" = "arm64" ] || [ "$(shell uname -m)" = "aarch64" ]; then \
test -s x86_64-linux-musl-cross || curl https://zarf-public.s3-us-gov-west-1.amazonaws.com/pipelines/x86_64-linux-musl-cross.tgz | tar -xz; \
export PATH="$$PWD/x86_64-linux-musl-cross/bin:$$PATH"; \
export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=x86_64-linux-musl-cc; \
cargo build --target x86_64-unknown-linux-musl --release; \
elif [ "$(shell uname -m)" = "x86_64" ]; then \
cargo build --target x86_64-unknown-linux-musl --release; \
fi

build-injector-linux-arm: ## Build the Zarf injector for ARM64
rustup target add aarch64-unknown-linux-musl

if [ "$(shell uname -m)" = "arm64" ] || [ "$(shell uname -m)" = "aarch64" ]; then \
cargo build --target aarch64-unknown-linux-musl --release; \
elif [ "$(shell uname -m)" = "x86_64" ]; then \
test -s aarch64-linux-musl-cross || curl https://zarf-public.s3-us-gov-west-1.amazonaws.com/pipelines/aarch64-linux-musl-cross.tgz | tar -xz; \
export PATH="$$PWD/aarch64-linux-musl-cross/bin:$$PATH"; \
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-musl-cc; \
cargo build --target aarch64-unknown-linux-musl --release; \
fi

list-sizes: ## List the sizes of the Zarf injector binaries
@echo '\n\033[0;36mSize of Zarf injector binaries:\033[0m\n'; \
du --si target/x86_64-unknown-linux-musl/release/zarf-injector; \
du --si target/aarch64-unknown-linux-musl/release/zarf-injector

build-with-docker: ## Build the Zarf injector using Docker
docker run --rm --user "$(id -u)":"$(id -g)" -v $$PWD:/usr/src/zarf-injector -w /usr/src/zarf-injector rust:1.71.0-bookworm make build-injector-linux
du -k target/x86_64-unknown-linux-musl/release/zarf-injector; \
du -k target/aarch64-unknown-linux-musl/release/zarf-injector
57 changes: 17 additions & 40 deletions src/injector/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,46 +24,33 @@ The `zarf-injector` binary serves 2 purposes during 'init'.

This enables a distro-agnostic way to inject real `registry:2` image into a running cluster, thereby enabling air-gapped deployments.

## Building in Docker (recommended)
# pre-req

```bash
make build-with-docker
```
* Install Rust using https://rustup.rs/
* Install cross with `make install-cross`
* Install Docker or Podman have it running

## Building on Debian-based Systems

Install [Rust](https://rustup.rs/) and `build-essential`.

Install build-essential
```bash
make build-injector-linux list-sizes
sudo apt-get update
sudo apt-get install build-essential
```

## Building on Debian-based Systems

Install [Rust](https://rustup.rs/) and `build-essential`.

Then build
```bash
make build-injector-linux list-sizes
make injector-linux list-sizes
```

## Building on Apple Silicon

* Install Cross
* Install Docker & have it running
* Rust must be installed via Rustup (Check `which rustc` if you're unsure)

```
cargo install cross --git https://github.com/cross-rs/cross
```
## Building on Apple Silicon

Whichever arch. of `musl` used, add to toolchain
```
rustup toolchain install --force-non-host stable-x86_64-unknown-linux-musl
```
Then build
```
cross build --target x86_64-unknown-linux-musl --release
cross build --target aarch64-unknown-linux-musl --release
make injector-linux list-sizes
```

This will build into `target/*--unknown-linux-musl/release`
Expand All @@ -79,17 +66,7 @@ make list-sizes
```

```sh
$ make build-with-docker
...

Size of Zarf injector binaries:

840k target/x86_64-unknown-linux-musl/release/zarf-injector
713k target/aarch64-unknown-linux-musl/release/zarf-injector
```

```sh
$ make build-with-docker
make injector-linux
...

Size of Zarf injector binaries:
Expand All @@ -102,11 +79,11 @@ Size of Zarf injector binaries:

Build your injector by following the steps above, or running one of the following:
```
make build-injector-linux
make injector-linux
## OR
## works on apple silicon
make cross-injector-linux
## OR
## works on apple silicon
make cross-injector-linux
```

Expand Down

0 comments on commit 845032c

Please sign in to comment.