mirror of
https://github.com/domcyrus/rustnet.git
synced 2025-12-31 19:09:53 -06:00
* feat: add static musl binary builds for Linux (#103) * feat: add aarch64 static builds, clean up docs
62 lines
2.0 KiB
Docker
62 lines
2.0 KiB
Docker
# Dockerfile for building static musl-linked RustNet binary
|
|
#
|
|
# Usage (with eBPF - default, recommended):
|
|
# docker build -f Dockerfile.static -t rustnet-static .
|
|
# docker run --rm -v $(pwd)/dist:/dist rustnet-static cp /build/target/release/rustnet /dist/
|
|
#
|
|
# Usage (without eBPF - smaller binary, ~5.2MB vs ~6.5MB):
|
|
# docker build -f Dockerfile.static --build-arg FEATURES="--no-default-features" -t rustnet-static .
|
|
|
|
FROM rust:alpine
|
|
|
|
ARG FEATURES=""
|
|
|
|
# Install build dependencies
|
|
# - musl-dev: musl C library headers
|
|
# - libpcap-dev: libpcap headers and static library (/usr/lib/libpcap.a)
|
|
# - pkgconfig: for finding library paths
|
|
# - build-base: basic build tools (make, gcc, etc.)
|
|
# - perl: required by some build scripts (ring crate)
|
|
# - elfutils-dev: libelf for eBPF (includes static library)
|
|
# - zlib-dev/zlib-static: compression library
|
|
# - zstd-dev/zstd-static: Zstandard compression (required by elfutils 0.189+)
|
|
# - clang/llvm: for eBPF compilation
|
|
# - linux-headers: kernel headers for eBPF
|
|
RUN apk add --no-cache \
|
|
musl-dev \
|
|
libpcap-dev \
|
|
pkgconfig \
|
|
build-base \
|
|
perl \
|
|
elfutils-dev \
|
|
zlib-dev \
|
|
zlib-static \
|
|
zstd-dev \
|
|
zstd-static \
|
|
clang \
|
|
llvm \
|
|
linux-headers
|
|
|
|
# Add rustfmt for eBPF skeleton generation
|
|
RUN rustup component add rustfmt
|
|
|
|
WORKDIR /build
|
|
|
|
# Copy source code
|
|
COPY . .
|
|
|
|
# Configure static linking for zstd
|
|
# This fixes the elfutils 0.189+ undeclared dependency on zstd
|
|
# See: https://github.com/libbpf/bpftool/issues/152
|
|
RUN mkdir -p .cargo && printf '[target.x86_64-unknown-linux-musl]\nrustflags = ["-C", "link-arg=-l:libzstd.a"]\n' > .cargo/config.toml
|
|
|
|
# Build configuration:
|
|
# - In Alpine/musl, binaries are statically linked by default
|
|
# - FEATURES arg controls whether eBPF is included (default) or disabled
|
|
# - --release: Optimized build
|
|
RUN cargo build --release ${FEATURES}
|
|
|
|
# Verify the binary is statically linked
|
|
RUN file target/release/rustnet && \
|
|
ldd target/release/rustnet 2>&1 || echo "Binary is statically linked"
|