Move package compilation to separate dockerfile

This commit is contained in:
Robin Reckmann
2024-09-08 00:15:13 +09:00
parent 2ee1c06a71
commit 35266955bd
3 changed files with 132 additions and 30 deletions
+4 -29
View File
@@ -37,31 +37,6 @@ RUN apt-get -o Dpkg::Options::="--force-overwrite" install -yq \
/tmp/agnos/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb \
/tmp/agnos/libffi6_3.2.1-8_arm64.deb
# ################## #
# #### Compiler #### #
# ################## #
FROM agnos-base AS agnos-compiler
RUN apt-fast update && apt-fast install --no-install-recommends -yq checkinstall
# Individual compiling images
FROM agnos-compiler AS agnos-compiler-pyqt5
COPY ./userspace/compile-pyqt5.sh /tmp/agnos/
RUN /tmp/agnos/compile-pyqt5.sh
FROM agnos-compiler AS agnos-compiler-capnp
COPY ./userspace/compile-capnp.sh /tmp/agnos/
RUN /tmp/agnos/compile-capnp.sh
FROM agnos-compiler AS agnos-compiler-ffmpeg
COPY ./userspace/compile-ffmpeg.sh /tmp/agnos/
RUN /tmp/agnos/compile-ffmpeg.sh
FROM agnos-compiler AS agnos-compiler-qtwayland5
COPY ./userspace/compile-qtwayland5.sh /tmp/agnos/
COPY ./userspace/qtwayland/patch* /tmp/agnos/
RUN /tmp/agnos/compile-qtwayland5.sh
# ################### #
# ###### AGNOS ###### #
# ################### #
@@ -79,18 +54,18 @@ COPY ./userspace/compile-modemmanager.sh /tmp/agnos/
RUN /tmp/agnos/compile-modemmanager.sh
# Pre-compiled capnp (must be before python install)
COPY --from=agnos-compiler-capnp /tmp/capnproto.deb /tmp/capnproto.deb
COPY --from=agnos-compiler /tmp/capnproto.deb /tmp/capnproto.deb
RUN cd /tmp && apt-get -o Dpkg::Options::="--force-overwrite" install -yq ./capnproto.deb
# Use other pre-compiled packages
COPY --from=agnos-compiler-ffmpeg /tmp/ffmpeg.deb /tmp/ffmpeg.deb
COPY --from=agnos-compiler /tmp/ffmpeg.deb /tmp/ffmpeg.deb
RUN cd /tmp && apt-get -o Dpkg::Options::="--force-overwrite" install -yq ./ffmpeg.deb
ARG XDG_DATA_HOME="/usr/local"
ARG PATH="$XDG_DATA_HOME/.cargo/bin:$PATH"
# Use pre-compiled PyQt5 wheel
COPY --from=agnos-compiler-pyqt5 /tmp/PyQt5-5.15.9/PyQt5-5.15.9-cp38-abi3-manylinux_2_17_aarch64.whl /tmp/PyQt5-5.15.9-cp38-abi3-manylinux_2_17_aarch64.whl
COPY --from=agnos-compiler /tmp/PyQt5-5.15.9-cp38-abi3-manylinux_2_17_aarch64.whl /tmp/PyQt5-5.15.9-cp38-abi3-manylinux_2_17_aarch64.whl
RUN export MAKEFLAGS="-j$(nproc)" && \
source $XDG_DATA_HOME/venv/bin/activate && \
@@ -115,7 +90,7 @@ RUN source $XDG_DATA_HOME/venv/bin/activate && \
COPY ./userspace/install_extras.sh /tmp/agnos/
RUN /tmp/agnos/install_extras.sh
COPY --from=agnos-compiler-qtwayland5 /tmp/qtwayland5.deb /tmp/qtwayland5.deb
COPY --from=agnos-compiler /tmp/qtwayland5.deb /tmp/qtwayland5.deb
RUN cd /tmp && apt-get -o Dpkg::Options::="--force-overwrite" install -yq --allow-downgrades ./qtwayland5.deb
# Patched libeglSubDriverWayland with fixed nullptr deref in CommitBuffer
+117
View File
@@ -0,0 +1,117 @@
# check=error=true
FROM ubuntu:24.04 AS agnos-compiler
RUN rm /etc/apt/apt.conf.d/docker-clean
# Common packages
RUN apt-get update && apt-get install -yq --no-install-recommends \
build-essential \
ca-certificates \
clang \
curl \
checkinstall \
wget
#capnproto
FROM agnos-compiler AS agnos-compiler-capnp
RUN apt-get update && apt-get install -yq --no-install-recommends \
libc6-dev \
libssl-dev \
zlib1g-dev
COPY ./userspace/compile-capnp.sh /tmp/agnos/
RUN /tmp/agnos/compile-capnp.sh
# ffmpeg
FROM agnos-compiler AS agnos-compiler-ffmpeg
RUN apt-get update && apt-get install -yq --no-install-recommends \
libass-dev \
libfreetype6-dev \
libgnutls28-dev \
libmp3lame-dev \
libsdl2-dev \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
liblzma-dev \
rsync \
texinfo \
zlib1g-dev
COPY ./userspace/compile-ffmpeg.sh /tmp/agnos/
RUN /tmp/agnos/compile-ffmpeg.sh
# PyQt5
FROM agnos-compiler AS agnos-compiler-pyqt5
RUN apt-get update && apt-get install -yq --no-install-recommends \
libdbus-1-3 \
libgles-dev \
libglib2.0-dev \
libharfbuzz-dev \
libpcre2-dev \
libpng-dev \
libpulse-dev
COPY ./userspace/qtwayland/*.deb /tmp/agnos/
RUN apt-get -o Dpkg::Options::="--force-overwrite" install -yq \
/tmp/agnos/qt-5.12.8.deb \
/tmp/agnos/libwayland-1.9.0-1.deb \
/tmp/agnos/libicu66_66.1-2ubuntu2.1_arm64.deb \
/tmp/agnos/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb \
/tmp/agnos/libffi6_3.2.1-8_arm64.deb
COPY ./userspace/openpilot_python_dependencies.sh /tmp/agnos/
RUN /tmp/agnos/openpilot_python_dependencies.sh
COPY ./userspace/compile-pyqt5.sh /tmp/agnos/
RUN /tmp/agnos/compile-pyqt5.sh
# qtwayland5
FROM agnos-compiler AS agnos-compiler-qtwayland5
RUN dpkg --add-architecture armhf
RUN apt-get update && apt-get install -yq --no-install-recommends \
git \
pkg-config \
libc6:armhf \
libdbus-1-3 \
libegl-dev \
libexpat1:armhf \
libfontconfig-dev \
libfreetype6 \
libgles-dev \
libglib2.0-dev \
libharfbuzz-dev \
libpcre2-dev \
libwayland-dev \
libxcomposite-dev \
libxkbcommon-dev \
zlib1g-dev
COPY ./userspace/qtwayland/*.deb /tmp/agnos/
RUN apt-get -o Dpkg::Options::="--force-overwrite" install -yq \
/tmp/agnos/qt-5.12.8.deb \
/tmp/agnos/libwayland-1.9.0-1.deb \
/tmp/agnos/libicu66_66.1-2ubuntu2.1_arm64.deb \
/tmp/agnos/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb \
/tmp/agnos/libffi6_3.2.1-8_arm64.deb
COPY ./userspace/compile-qtwayland5.sh /tmp/agnos/
COPY ./userspace/qtwayland/patch* /tmp/agnos/
RUN /tmp/agnos/compile-qtwayland5.sh
# Gather packages
FROM agnos-compiler
COPY --from=agnos-compiler-capnp /tmp/capnproto.deb /tmp/
COPY --from=agnos-compiler-ffmpeg /tmp/ffmpeg.deb /tmp/
COPY --from=agnos-compiler-pyqt5 /tmp/PyQt5-5.15.9/PyQt5-5.15.9-cp38-abi3-manylinux_2_17_aarch64.whl /tmp/
COPY --from=agnos-compiler-qtwayland5 /tmp/qtwayland5.deb /tmp/
+11 -1
View File
@@ -55,8 +55,18 @@ if [ "$ARCH" = "x86_64" ]; then
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes > /dev/null
fi
# Check agnos-builder Dockerfile
export DOCKER_BUILDKIT=1
# Check agnos-compiler Dockerfile
docker build -f Dockerfile.compiler --check $DIR
# Build agnos-compiler docker
echo "Building agnos-compiler docker image"
docker build -f Dockerfile.compiler -t agnos-compiler $DIR
echo "Creating agnos-compiler container"
COMPILER_CONTAINER_ID=$(docker container create --entrypoint /bin/bash agnos-compiler:latest)
# Check agnos-builder Dockerfile
docker build -f Dockerfile.agnos --check $DIR
# Start agnos-builder docker build and create container