asterinas/tools/docker/Dockerfile

101 lines
3.1 KiB
Docker

# SPDX-License-Identifier: MPL-2.0
ARG BASE_VERSION
FROM asterinas/nix:${BASE_VERSION} AS build-base
SHELL ["/bin/bash", "-c"]
ARG DEBIAN_FRONTEND=noninteractive
#= Download dependency =====================================================
WORKDIR /opt/linux_binary_cache
RUN wget https://raw.githubusercontent.com/asterinas/linux_binary_cache/24db4ff/vmlinuz-6.16.0 \
-O vmlinuz
#= Download VDSO files =====================================================
WORKDIR /root
RUN git clone https://github.com/asterinas/linux_vdso.git && \
cd linux_vdso && \
git checkout 7489835
ENV VDSO_LIBRARY_DIR="/root/linux_vdso"
#= Build syscall test =========================================================
FROM build-base AS build-gvisor
# Install required packages for bazel
RUN apt update && apt install -y curl gnupg2 git \
python-is-python3 python3 python3-setuptools python3-pip \
build-essential crossbuild-essential-arm64 qemu-user-static \
openjdk-11-jdk-headless zip unzip \
apt-transport-https ca-certificates gnupg-agent \
software-properties-common \
pkg-config libffi-dev patch diffutils libssl-dev iptables kmod \
clang crossbuild-essential-amd64 erofs-utils busybox-static libbpf-dev \
iproute2 netcat-openbsd libnuma-dev libc6-dev-i386 golang-go
# Install bazel
RUN wget https://github.com/bazelbuild/bazelisk/releases/download/v1.27.0/bazelisk-amd64.deb && \
dpkg -i bazelisk-amd64.deb && \
rm bazelisk-amd64.deb
# Build the gvisor syscall test binaries
WORKDIR /root
RUN git clone -b release-20251215.0 --single-branch --depth 1 https://github.com/google/gvisor.git
WORKDIR /root/gvisor
RUN bazel build --test_tag_filters=native //test/syscalls/... && \
mkdir -p /root/syscall_test_bins && \
cp bazel-bin/test/syscalls/linux/*_test /root/syscall_test_bins
#= The final stages to produce the Asterinas development image ====================
FROM build-base
# Install all Asterinas dependent packages
RUN apt update && apt-get install -y --no-install-recommends \
bridge-utils \
clang-format `# formatting regression tests` \
cpio \
cpuid \
dosfstools \
exfatprogs \
file \
grub-efi-amd64-bin \
grub-efi-amd64-dbg \
iptables \
iproute2 \
jq \
net-tools \
openssh-server \
parted \
pkg-config \
socat \
strace \
sudo \
unzip \
vim \
zip
# Clean apt cache
RUN apt clean && rm -rf /var/lib/apt/lists/*
# Install sctrace
RUN ln -s /root/asterinas/tools/sctrace.sh /usr/local/bin/sctrace
# Set the `ASTER_SCML` env var to make sctrace easier to use for Asterinas developers.
# For more information, check out the README of sctrace.
RUN echo 'export ASTER_SCML=$(find /root/asterinas/book/src/kernel/linux-compatibility/ -name "*.scml")' >> /root/.bashrc
# Copy the gvisor syscall test binaries
COPY --from=build-gvisor /root/syscall_test_bins /root/syscall_test_bins
ENV GVISOR_PREBUILT_DIR=/root/syscall_test_bins
# Add the path of Asterinas tools
ENV PATH="/root/asterinas/target/bin:${PATH}"
VOLUME [ "/root/asterinas" ]
WORKDIR /root/asterinas