# Alpine-based Zero-OS Initramfs Builder FROM alpine:3.22 # Set build arguments ARG TARGETARCH=amd64 ARG BUILDMODE=debug ARG MINIMAL_MODE=false ARG USER_UID=1000 ARG USER_GID=1000 ARG USERNAME=builder # Set environment variables ENV BUILDMODE=${BUILDMODE} ENV TARGETARCH=${TARGETARCH} ENV MINIMAL_MODE=${MINIMAL_MODE} ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # Install build dependencies RUN apk add --no-cache \ # Build tools build-base \ linux-headers \ cmake \ git \ wget \ curl \ cpio \ xz \ gzip \ bc \ perl \ python3 \ upx \ # Kernel build dependencies linux-lts-dev \ linux-lts \ elfutils-dev \ openssl-dev \ openssl-libs-static \ pkgconfig \ flex \ bison \ # Archive tools tar \ bzip2 \ unzip \ # Text processing sed \ grep \ findutils \ # JSON processing for GitHub API jq \ # Rustup for proper Rust musl builds rustup # Setup Rust toolchain for musl builds RUN rustup-init -y --default-toolchain stable && \ . ~/.cargo/env && \ rustup target add x86_64-unknown-linux-musl # Create directories RUN mkdir -p /build/initramfs /build/kernel /build/output /build/github /build/configs/zinit /mnt/zinit # Set working directory WORKDIR /build # Copy build scripts and configs COPY scripts/ /build/scripts/ COPY configs/ /build/configs/ # Make scripts executable RUN chmod +x /build/scripts/*.sh # Create build configuration RUN echo "BUILDMODE=${BUILDMODE}" > /build/build.conf && \ echo "TARGETARCH=${TARGETARCH}" >> /build/build.conf && \ echo "MINIMAL_MODE=${MINIMAL_MODE}" >> /build/build.conf && \ echo "INITRAMFS_ROOT=/build/initramfs" >> /build/build.conf && \ echo "KERNEL_DIR=/build/kernel" >> /build/build.conf && \ echo "OUTPUT_DIR=/build/output" >> /build/build.conf && \ echo "CONFIG_DIR=/build/configs" >> /build/build.conf # Create user with proper mapping RUN addgroup -g ${USER_GID} ${USERNAME} && \ adduser -u ${USER_UID} -G ${USERNAME} -D -s /bin/sh ${USERNAME} && \ mkdir -p /home/${USERNAME}/.cargo && \ chown -R ${USERNAME}:${USERNAME} /home/${USERNAME} # Switch to the mapped user USER ${USERNAME} # Set up Rust environment for the user RUN rustup-init -y --default-toolchain stable && \ . ~/.cargo/env && \ rustup target add x86_64-unknown-linux-musl # Set working directory and ensure permissions WORKDIR /build USER root RUN chown -R ${USERNAME}:${USERNAME} /build USER ${USERNAME} # Default command CMD ["/build/scripts/build-initramfs.sh"]