mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-13 23:36:48 +00:00
Add prepared syscall test in docker container
This commit is contained in:
parent
f0f498e46a
commit
079b139298
@ -2,9 +2,13 @@ TESTS ?= open_test read_test statfs_test chmod_test
|
|||||||
|
|
||||||
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
|
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
|
||||||
CUR_DIR := $(patsubst %/,%,$(dir $(MKFILE_PATH)))
|
CUR_DIR := $(patsubst %/,%,$(dir $(MKFILE_PATH)))
|
||||||
BUILD_DIR := $(CUR_DIR)/../build
|
BUILD_DIR ?= $(CUR_DIR)/../build
|
||||||
SRC_DIR := $(BUILD_DIR)/gvisor_src
|
ifdef JINUX_PREBUILT_SYSCALL_TEST
|
||||||
BIN_DIR := $(BUILD_DIR)/syscall_test_bins
|
BIN_DIR := $(JINUX_PREBUILT_SYSCALL_TEST)
|
||||||
|
else
|
||||||
|
BIN_DIR := $(BUILD_DIR)/syscall_test_bins
|
||||||
|
SRC_DIR := $(BUILD_DIR)/gvisor_src
|
||||||
|
endif
|
||||||
INITRAMFS ?= $(CUR_DIR)/../build/initramfs
|
INITRAMFS ?= $(CUR_DIR)/../build/initramfs
|
||||||
TARGET_DIR := $(INITRAMFS)/opt/syscall_test
|
TARGET_DIR := $(INITRAMFS)/opt/syscall_test
|
||||||
RUN_BASH := $(CUR_DIR)/run_syscall_test.sh
|
RUN_BASH := $(CUR_DIR)/run_syscall_test.sh
|
||||||
@ -14,20 +18,25 @@ BLOCK_LIST := $(CUR_DIR)/blocklists
|
|||||||
|
|
||||||
all: $(TESTS)
|
all: $(TESTS)
|
||||||
|
|
||||||
$(SRC_DIR):
|
$(TESTS): $(BIN_DIR) $(TARGET_DIR)
|
||||||
|
@cp -f $</$@ $(TARGET_DIR)/tests
|
||||||
|
|
||||||
|
ifndef JINUX_PREBUILT_SYSCALL_TEST
|
||||||
|
$(BIN_DIR): $(SRC_DIR)
|
||||||
@if ! type bazel > /dev/null; then \
|
@if ! type bazel > /dev/null; then \
|
||||||
echo "bazel is not installed, please run $(CUR_DIR)/install_bazel.sh with sudo permission to install it."; \
|
echo "bazel is not installed, please run $(CUR_DIR)/install_bazel.sh with sudo permission to install it."; \
|
||||||
exit 1 ; \
|
exit 1; \
|
||||||
fi
|
fi
|
||||||
@rm -rf $@ && mkdir -p $@
|
|
||||||
@cd $@ && git clone -b 20200921.0 https://github.com/jinzhao-dev/gvisor.git .
|
|
||||||
|
|
||||||
$(BIN_DIR): $(SRC_DIR)
|
|
||||||
@rm -rf $@ && mkdir -p $@
|
@rm -rf $@ && mkdir -p $@
|
||||||
@cd $(SRC_DIR) && bazel build --test_tag_filters=native //test/syscalls/...
|
@cd $(SRC_DIR) && bazel build --test_tag_filters=native //test/syscalls/...
|
||||||
@cp $(SRC_DIR)/bazel-bin/test/syscalls/linux/*_test $@
|
@cp $(SRC_DIR)/bazel-bin/test/syscalls/linux/*_test $@
|
||||||
|
|
||||||
$(TARGET_DIR): $(RUN_BASH) $(BLOCK_LIST) $(BIN_DIR)
|
$(SRC_DIR):
|
||||||
|
@rm -rf $@ && mkdir -p $@
|
||||||
|
@cd $@ && git clone -b 20200921.0 https://github.com/jinzhao-dev/gvisor.git .
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(TARGET_DIR): $(RUN_BASH) $(BLOCK_LIST)
|
||||||
@rm -rf $@ && mkdir -p $@
|
@rm -rf $@ && mkdir -p $@
|
||||||
@# Prepare tests dir for test binaries
|
@# Prepare tests dir for test binaries
|
||||||
@mkdir $@/tests
|
@mkdir $@/tests
|
||||||
@ -36,8 +45,5 @@ $(TARGET_DIR): $(RUN_BASH) $(BLOCK_LIST) $(BIN_DIR)
|
|||||||
@# Copy bash script
|
@# Copy bash script
|
||||||
@cp -f $(RUN_BASH) $@
|
@cp -f $(RUN_BASH) $@
|
||||||
|
|
||||||
$(TESTS): $(TARGET_DIR)
|
|
||||||
@cp -f $(BIN_DIR)/$@ $(TARGET_DIR)/tests
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@rm -rf $(BIN_DIR) $(TARGET_DIR)
|
@rm -rf $(TARGET_DIR)
|
1
tools/docker/.gitignore
vendored
Normal file
1
tools/docker/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
bom/
|
@ -1,27 +1,47 @@
|
|||||||
FROM ubuntu:22.04
|
FROM ubuntu:22.04 as ubuntu-22.04-with-bazel
|
||||||
|
|
||||||
SHELL ["/bin/bash", "-c"]
|
SHELL ["/bin/bash", "-c"]
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Install all Bazel dependent packages
|
||||||
RUN apt update && apt-get install -y --no-install-recommends \
|
RUN apt update && apt-get install -y --no-install-recommends \
|
||||||
build-essential \
|
build-essential \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
git-core \
|
||||||
|
gnupg \
|
||||||
|
python-is-python3 \
|
||||||
|
python3-pip
|
||||||
|
|
||||||
|
# Install bazel, which is required by the system call test suite from Gvisor project
|
||||||
|
COPY bom/syscall_test/install_bazel.sh /tmp/
|
||||||
|
WORKDIR /tmp
|
||||||
|
RUN ./install_bazel.sh && rm -f /tmp/install_bazel.sh
|
||||||
|
|
||||||
|
FROM ubuntu-22.04-with-bazel as syscall_test
|
||||||
|
|
||||||
|
# Build the syscall test binaries
|
||||||
|
COPY bom/syscall_test /root/syscall_test
|
||||||
|
WORKDIR /root/syscall_test
|
||||||
|
RUN export BUILD_DIR=build && \
|
||||||
|
make ${BUILD_DIR}/syscall_test_bins
|
||||||
|
|
||||||
|
FROM ubuntu-22.04-with-bazel
|
||||||
|
|
||||||
|
# Install all Jinux dependent packages
|
||||||
|
RUN apt update && apt-get install -y --no-install-recommends \
|
||||||
cpio \
|
cpio \
|
||||||
cpuid \
|
cpuid \
|
||||||
curl \
|
|
||||||
file \
|
file \
|
||||||
g++ \
|
g++ \
|
||||||
gdb \
|
gdb \
|
||||||
git-core \
|
|
||||||
gnupg \
|
|
||||||
grub-common \
|
grub-common \
|
||||||
grub-pc \
|
grub-pc \
|
||||||
libssl-dev \
|
libssl-dev \
|
||||||
net-tools \
|
net-tools \
|
||||||
openssh-server \
|
openssh-server \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
python-is-python3 \
|
|
||||||
python3-pip \
|
|
||||||
qemu-system-x86 \
|
qemu-system-x86 \
|
||||||
strace \
|
strace \
|
||||||
sudo \
|
sudo \
|
||||||
@ -31,17 +51,14 @@ RUN apt update && apt-get install -y --no-install-recommends \
|
|||||||
xorriso \
|
xorriso \
|
||||||
zip
|
zip
|
||||||
|
|
||||||
# Install bazel, , which is required by the system call test suite from Gvisor project
|
|
||||||
RUN curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg \
|
|
||||||
&& mv bazel.gpg /etc/apt/trusted.gpg.d/ \
|
|
||||||
&& echo 'deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8' | tee /etc/apt/sources.list.d/bazel.list \
|
|
||||||
&& apt update \
|
|
||||||
&& apt install bazel=5.4.0 -y
|
|
||||||
|
|
||||||
# Clean apt cache
|
# Clean apt cache
|
||||||
RUN apt clean \
|
RUN apt clean \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Prepare the system call test suite
|
||||||
|
COPY --from=syscall_test /root/syscall_test/build/syscall_test_bins /root/syscall_test_bins
|
||||||
|
ENV JINUX_PREBUILT_SYSCALL_TEST=/root/syscall_test_bins
|
||||||
|
|
||||||
# Install Rust
|
# Install Rust
|
||||||
ENV PATH="/root/.cargo/bin:${PATH}"
|
ENV PATH="/root/.cargo/bin:${PATH}"
|
||||||
ARG JINUX_RUST_VERSION
|
ARG JINUX_RUST_VERSION
|
||||||
|
@ -7,10 +7,19 @@ CARGO_TOML_PATH=${SCRIPT_DIR}/../../Cargo.toml
|
|||||||
VERSION=$( grep -m1 -o '[0-9]\+\.[0-9]\+\.[0-9]\+' ${CARGO_TOML_PATH} | sed 's/[^0-9\.]//g' )
|
VERSION=$( grep -m1 -o '[0-9]\+\.[0-9]\+\.[0-9]\+' ${CARGO_TOML_PATH} | sed 's/[^0-9\.]//g' )
|
||||||
IMAGE_NAME=jinuxdev/jinux:${VERSION}
|
IMAGE_NAME=jinuxdev/jinux:${VERSION}
|
||||||
DOCKER_FILE=${SCRIPT_DIR}/Dockerfile.ubuntu22.04
|
DOCKER_FILE=${SCRIPT_DIR}/Dockerfile.ubuntu22.04
|
||||||
|
BOM_DIR=${SCRIPT_DIR}/bom
|
||||||
|
TOP_DIR=${SCRIPT_DIR}/../../
|
||||||
ARCH=linux/amd64
|
ARCH=linux/amd64
|
||||||
RUST_TOOLCHAIN_PATH=${SCRIPT_DIR}/../../rust-toolchain.toml
|
RUST_TOOLCHAIN_PATH=${SCRIPT_DIR}/../../rust-toolchain.toml
|
||||||
JINUX_RUST_VERSION=$( grep -m1 -o 'nightly-[0-9]\+-[0-9]\+-[0-9]\+' ${RUST_TOOLCHAIN_PATH} )
|
JINUX_RUST_VERSION=$( grep -m1 -o 'nightly-[0-9]\+-[0-9]\+-[0-9]\+' ${RUST_TOOLCHAIN_PATH} )
|
||||||
|
|
||||||
|
# Prpare the BOM (bill of materials) directory to copy files or dirs into the docker image.
|
||||||
|
# This is because the `docker build` can not access the parent directory of the context.
|
||||||
|
if [ ! -d ${BOM_DIR} ]; then
|
||||||
|
mkdir -p ${BOM_DIR}
|
||||||
|
cp -rf ${TOP_DIR}/regression/syscall_test ${BOM_DIR}/
|
||||||
|
fi
|
||||||
|
|
||||||
# Build docker
|
# Build docker
|
||||||
cd ${SCRIPT_DIR}
|
cd ${SCRIPT_DIR}
|
||||||
docker buildx build -f ${DOCKER_FILE} \
|
docker buildx build -f ${DOCKER_FILE} \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user