91 lines
3.9 KiB
Docker
91 lines
3.9 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# FreeBSD headers and libraries used only as a cross-compilation sysroot.
|
|
FROM rockylinux:9 AS freebsd-sysroot
|
|
ARG FREEBSD_RELEASE=15.1-RELEASE
|
|
ARG FREEBSD_MIRROR=https://download.freebsd.org/releases/amd64/amd64
|
|
RUN dnf -y install --allowerasing ca-certificates coreutils curl tar xz \
|
|
&& dnf clean all \
|
|
&& rm -rf /var/cache/dnf
|
|
WORKDIR /tmp/freebsd
|
|
RUN set -eux; \
|
|
url="${FREEBSD_MIRROR}/${FREEBSD_RELEASE}"; \
|
|
curl -fsSL "${url}/base.txz" -o base.txz; \
|
|
curl -fsSL "${url}/MANIFEST" -o MANIFEST; \
|
|
expected="$(awk '$1 == "base.txz" { print $2; exit }' MANIFEST)"; \
|
|
test -n "$expected"; \
|
|
echo "$expected base.txz" | sha256sum -c -; \
|
|
mkdir -p /freebsd-sysroot; \
|
|
tar -xJf base.txz -C /freebsd-sysroot ./lib ./usr/include ./usr/lib
|
|
|
|
FROM rockylinux:9
|
|
|
|
ARG RUST_TOOLCHAIN=stable
|
|
ARG FREEBSD_RUST_TOOLCHAIN=1.88.0
|
|
ARG NFPM_VERSION=2.47.0
|
|
ARG NFPM_RPM_SHA256=5ad3287a0b1d0c068e556bd84965a9866ab6451ef861506a3c09b8971ca5326f
|
|
ARG APTLY_VERSION=1.6.3
|
|
ARG APTLY_ZIP_SHA256=535ed24eb706bc25a316b59d709a7e74e10165f2ffab8552097ba7e4816a3e7e
|
|
|
|
RUN dnf -y install --allowerasing \
|
|
bash binutils ca-certificates clang cmake coreutils createrepo_c curl file findutils \
|
|
gcc gcc-c++ git gnupg2 gzip libarchive lld llvm make openssl pkgconf-pkg-config \
|
|
python3 python3.11 rpm rsync shadow-utils sqlite-devel tar unzip xz bzip2 zstd \
|
|
&& dnf clean all \
|
|
&& rm -rf /var/cache/dnf
|
|
|
|
RUN set -eux; \
|
|
curl -fsSL -o /tmp/nfpm.rpm \
|
|
"https://github.com/goreleaser/nfpm/releases/download/v${NFPM_VERSION}/nfpm-${NFPM_VERSION}-1.x86_64.rpm"; \
|
|
echo "${NFPM_RPM_SHA256} /tmp/nfpm.rpm" | sha256sum -c -; \
|
|
rpm -Uvh /tmp/nfpm.rpm; \
|
|
rm -f /tmp/nfpm.rpm; \
|
|
nfpm --version
|
|
|
|
RUN set -eux; \
|
|
curl -fsSL -o /tmp/aptly.zip \
|
|
"https://github.com/aptly-dev/aptly/releases/download/v${APTLY_VERSION}/aptly_${APTLY_VERSION}_linux_amd64.zip"; \
|
|
echo "${APTLY_ZIP_SHA256} /tmp/aptly.zip" | sha256sum -c -; \
|
|
mkdir -p /tmp/aptly; \
|
|
unzip -q /tmp/aptly.zip -d /tmp/aptly; \
|
|
install -m 0755 "$(find /tmp/aptly -type f -name aptly | head -n1)" /usr/local/bin/aptly; \
|
|
rm -rf /tmp/aptly /tmp/aptly.zip; \
|
|
aptly version
|
|
|
|
ENV RUSTUP_HOME=/opt/rustup \
|
|
CARGO_HOME=/opt/cargo \
|
|
RUST_PROXY_PYTHON=/usr/bin/python3.11 \
|
|
PATH=/opt/cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
|
|
RUN set -eux; \
|
|
curl --proto '=https' --tlsv1.2 -fsSL https://sh.rustup.rs -o /tmp/rustup-init.sh; \
|
|
sh /tmp/rustup-init.sh -y --no-modify-path --profile minimal --default-toolchain "${RUST_TOOLCHAIN}" --component rustfmt --component clippy; \
|
|
rm -f /tmp/rustup-init.sh; \
|
|
rustup toolchain install "${FREEBSD_RUST_TOOLCHAIN}" --profile minimal; \
|
|
rustup target add --toolchain "${FREEBSD_RUST_TOOLCHAIN}" x86_64-unknown-freebsd; \
|
|
rustc --version; \
|
|
cargo --version; \
|
|
rustc "+${FREEBSD_RUST_TOOLCHAIN}" --version
|
|
|
|
COPY --from=freebsd-sysroot /freebsd-sysroot /opt/freebsd-sysroot
|
|
|
|
ENV FREEBSD_RUST_TOOLCHAIN=${FREEBSD_RUST_TOOLCHAIN} \
|
|
CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_LINKER=clang \
|
|
CC_x86_64_unknown_freebsd=clang \
|
|
CXX_x86_64_unknown_freebsd=clang++ \
|
|
AR_x86_64_unknown_freebsd=llvm-ar \
|
|
RANLIB_x86_64_unknown_freebsd=llvm-ranlib \
|
|
CFLAGS_x86_64_unknown_freebsd="--target=x86_64-unknown-freebsd15.1 --sysroot=/opt/freebsd-sysroot" \
|
|
CXXFLAGS_x86_64_unknown_freebsd="--target=x86_64-unknown-freebsd15.1 --sysroot=/opt/freebsd-sysroot" \
|
|
CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_RUSTFLAGS="-C link-arg=--target=x86_64-unknown-freebsd15.1 -C link-arg=--sysroot=/opt/freebsd-sysroot -C link-arg=-fuse-ld=lld"
|
|
|
|
# Registry/git/target cache is persistent, while rustup/toolchains stay in the image.
|
|
ENV CARGO_HOME=/var/lib/package-builder/cargo
|
|
|
|
COPY scripts/ /opt/rust-package-builder/scripts/
|
|
COPY opnsense/ /opt/rust-package-builder/opnsense/
|
|
RUN chmod 0755 /opt/rust-package-builder/scripts/*.sh /opt/rust-package-builder/scripts/*.py
|
|
|
|
VOLUME ["/var/lib/package-builder"]
|
|
ENTRYPOINT ["/opt/rust-package-builder/scripts/entrypoint.sh"]
|