mongo/buildscripts/antithesis/base_images/workload/Dockerfile
Daniel Moody b4486819a4 SERVER-105429 make poetry requrements file (#36472)
GitOrigin-RevId: c16188de078d8819b30184e34ca87baed6cf57c2
2025-05-23 19:30:39 +00:00

97 lines
2.8 KiB
Docker

FROM ubuntu:22.04
EXPOSE 27017
EXPOSE 27018
EXPOSE 27019
RUN mkdir -p /scripts
RUN mkdir -p /var/log/mongodb
RUN apt-get update
# Install mongo dependencies
RUN apt-get install -y curl
# Install git
RUN apt-get install -y git
# Set up Python
RUN apt-get install -y python3.10 python3-pip python3.10-venv
RUN ln -f $(which python3.10) /usr/bin/python
RUN ln -f $(which python3.10) /usr/bin/python3
RUN python -m pip install --upgrade pip wheel
# Ensure the symbolizer is present (llvm)
ARG LLVM_VERSION=12
RUN apt-get install -y llvm-${LLVM_VERSION}
# Ensure that libc debugsymbols are on the machine
RUN apt-get install -y libc6-dbg
# Copy TSAN suppressions
COPY tsan.suppressions /etc/tsan.suppressions
# Sanitizer options from build args. We append certain extra options like the symbolizer path,
# which is dependent on the image's LLVM version.
ARG ASAN_OPTIONS
ARG EXTENDED_ASAN_OPTIONS="${ASAN_OPTIONS}:external_symbolizer_path=/usr/lib/llvm-${LLVM_VERSION}/bin/llvm-symbolizer"
ENV ASAN_OPTIONS="${ASAN_OPTIONS:+${EXTENDED_ASAN_OPTIONS}}"
ARG UBSAN_OPTIONS
ARG EXTENDED_UBSAN_OPTIONS="${UBSAN_OPTIONS}:external_symbolizer_path=/usr/lib/llvm-${LLVM_VERSION}/bin/llvm-symbolizer"
ENV UBSAN_OPTIONS="${UBSAN_OPTIONS:+${EXTENDED_UBSAN_OPTIONS}}"
# Also append suppressions path for TSAN
ARG TSAN_OPTIONS
ARG EXTENDED_TSAN_OPTIONS="${TSAN_OPTIONS}:external_symbolizer_path=/usr/lib/llvm-${LLVM_VERSION}/bin/llvm-symbolizer:suppressions=/etc/tsan.suppressions"
ENV TSAN_OPTIONS="${TSAN_OPTIONS:+${EXTENDED_TSAN_OPTIONS}}"
# -------------------
# Everything above this line should be common image setup
# copy the mongo binary -- make sure it is executable
COPY bin/mongo /usr/bin
RUN chmod +x /usr/bin/mongo
# Copy libraries
COPY lib/* /usr/lib/
COPY libvoidstar.so /usr/lib/libvoidstar.so
RUN /usr/bin/mongo --version
# Copy the QA directory
COPY QA /QA
# Initialize the jstestfuzz repository
WORKDIR /jstestfuzz
COPY jstestfuzz /jstestfuzz
# Install jstestfuzz deps
RUN ./src/scripts/npm_run.sh jstestfuzz -- --help
# Initialize the MongoDB repository
WORKDIR /mongo
# Copy mongodb python deps first
COPY src/pyproject.toml src/poetry.lock src/poetry_requirements.txt ./
# Install mongodb python deps with poetry
RUN python -m pip install -r poetry_requirements.txt
RUN python -m poetry install --no-root --sync
# Add the poetry venv to the $PATH so that it's activated by default
# (We use a symlink because the path to the poetry venv is unknown & generated at runtime)
RUN ln -s $(dirname $(dirname $(poetry run which python))) /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# copy mongo
COPY src /mongo
WORKDIR /mongo
# create symlinks to complete setup
RUN ln -s /jstestfuzz /mongo/jstestfuzz
RUN ln -s /QA /mongo/jstests/qa_tests
RUN ln -s /mongo/src/mongo/db/modules/enterprise /mongo/jstests/enterprise_tests