chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
# =============================================================================
|
||||
# Dockerfile.linux_x64_glibc228
|
||||
# Purpose: Ubuntu 18.10 gcc-9 + glibc 2.28 + CMake 3.30.0 + PyBind11 build environment
|
||||
# Warning: ubuntu:18.10 is EOL; use only for glibc 2.28 compatibility testing.
|
||||
# =============================================================================
|
||||
|
||||
# Use official Ubuntu 18.10 (Cosmic Cuttlefish)
|
||||
# glibc version: 2.28 (confirmed via `ldd --version`)
|
||||
FROM ubuntu:18.10
|
||||
|
||||
# Replace Ubuntu mirror with old-releases.ubuntu.com for older glibc compatibility
|
||||
RUN sed -i 's|http://\(.*\)/ubuntu|http://old-releases.ubuntu.com/ubuntu|g' /etc/apt/sources.list && \
|
||||
sed -i 's|http://security.ubuntu.com/ubuntu|http://old-releases.ubuntu.com/ubuntu|g' /etc/apt/sources.list
|
||||
|
||||
# Add Ubuntu 20.04 (focal) repo for GCC 9 ONLY
|
||||
RUN echo "deb http://archive.ubuntu.com/ubuntu/ focal main universe" >> /etc/apt/sources.list && \
|
||||
echo "deb http://security.ubuntu.com/ubuntu/ focal-security main universe" >> /etc/apt/sources.list
|
||||
|
||||
# Prevent interactive prompts & set non-root user
|
||||
ENV DEBIAN_FRONTEND=noninteractive \
|
||||
TZ=Etc/UTC
|
||||
|
||||
# Create non-root user for safety (optional but recommended)
|
||||
RUN useradd -m -u 1000 builder && \
|
||||
mkdir -p /workspace && chown builder:builder /workspace
|
||||
|
||||
# Install base system dependencies
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
gcc-9 g++-9 \
|
||||
ninja-build git curl ca-certificates vim wget lcov gnupg clang-format-18\
|
||||
rsync lsb-release \
|
||||
uuid-dev zlib1g-dev libssl-dev libffi-dev \
|
||||
pybind11-dev && \
|
||||
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 \
|
||||
--slave /usr/bin/g++ g++ /usr/bin/g++-9 && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install Miniforge (Conda) as root, then assign to builder
|
||||
ENV MINIFORGE_VERSION="latest"
|
||||
ENV MINIFORGE_HOME="/opt/miniforge3"
|
||||
|
||||
RUN curl -sSL "https://github.com/conda-forge/miniforge/releases/${MINIFORGE_VERSION}/download/Miniforge3-Linux-x86_64.sh" -o miniforge.sh && \
|
||||
bash miniforge.sh -b -p ${MINIFORGE_HOME} && \
|
||||
rm miniforge.sh && \
|
||||
chown -R builder:builder ${MINIFORGE_HOME}
|
||||
|
||||
# Switch to non-root user
|
||||
USER builder
|
||||
ENV PATH="${MINIFORGE_HOME}/bin:${PATH}"
|
||||
WORKDIR /workspace
|
||||
|
||||
# Create conda envs for supported Python versions
|
||||
RUN conda create -n py310 python=3.10 -y && \
|
||||
conda create -n py311 python=3.11 -y && \
|
||||
conda create -n py312 python=3.12 -y
|
||||
RUN conda clean --all -f -y
|
||||
|
||||
# Install CMake 3.30.0 from Kitware official binary
|
||||
# Ref: https://github.com/Kitware/CMake/releases/tag/v3.30.0
|
||||
RUN mkdir -p /tmp/cmake && cd /tmp/cmake && \
|
||||
curl -sSL -o cmake.tar.gz \
|
||||
"https://github.com/Kitware/CMake/releases/download/v3.30.0/cmake-3.30.0-linux-x86_64.tar.gz" && \
|
||||
tar -xzf cmake.tar.gz --strip-components=1 -C /tmp/cmake && \
|
||||
mkdir -p /home/builder/.local && \
|
||||
mv * /home/builder/.local/ && \
|
||||
chown -R builder:builder /home/builder/.local && \
|
||||
rm -rf /tmp/cmake
|
||||
|
||||
# Add CMake to PATH
|
||||
ENV PATH="/home/builder/.local/bin:${PATH}"
|
||||
|
||||
# Verify installations
|
||||
RUN cmake --version && \
|
||||
conda info && \
|
||||
conda env list && \
|
||||
python --version && \
|
||||
gcc --version && \
|
||||
ldd --version | head -n1
|
||||
|
||||
# Final setup
|
||||
WORKDIR /workspace
|
||||
Reference in New Issue
Block a user