mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-14 11:57:44 +00:00
874378c052
* Fully qualified docker image names for the main Dockerfile and Complement related. * Fully qualified docker image names for Dockerfiles associated with building Debian release artifacts. This one is harder and is separate from the other commit in case it wasn't correct or was unwanted. I decided to do the expansion on the docker images in the Dockerfile itself, instead of the various source places that build which distribution that is selected, as it would have been more invasive with the scripts breaking up the string for tagging and such. This one is untested. * Changelog * Update docker/Dockerfile-workers * Update docker/complement/Dockerfile --------- Co-authored-by: reivilibre <olivier@librepush.net>
110 lines
3.9 KiB
Text
110 lines
3.9 KiB
Text
# A dockerfile which builds a docker image for building a debian package for
|
|
# synapse. The distro to build for is passed as a docker build var.
|
|
#
|
|
# The default entrypoint expects the synapse source to be mounted as a
|
|
# (read-only) volume at /synapse/source, and an output directory at /debs.
|
|
#
|
|
# A pair of environment variables (TARGET_USERID and TARGET_GROUPID) can be
|
|
# passed to the docker container; if these are set, the build script will chown
|
|
# the build products accordingly, to avoid ending up with things owned by root
|
|
# in the host filesystem.
|
|
|
|
# Get the distro we want to pull from as a dynamic build variable
|
|
ARG distro=""
|
|
|
|
###
|
|
### Stage 0: build a dh-virtualenv
|
|
###
|
|
|
|
# This is only really needed on focal, since other distributions we
|
|
# care about have a recent version of dh-virtualenv by default. Unfortunately,
|
|
# it looks like focal is going to be with us for a while.
|
|
#
|
|
# (focal doesn't have a dh-virtualenv package at all. There is a PPA at
|
|
# https://launchpad.net/~jyrki-pulliainen/+archive/ubuntu/dh-virtualenv, but
|
|
# it's not obviously easier to use that than to build our own.)
|
|
|
|
FROM docker.io/library/${distro} as builder
|
|
|
|
RUN apt-get update -qq -o Acquire::Languages=none
|
|
RUN env DEBIAN_FRONTEND=noninteractive apt-get install \
|
|
-yqq --no-install-recommends \
|
|
build-essential \
|
|
ca-certificates \
|
|
devscripts \
|
|
equivs \
|
|
wget
|
|
|
|
# fetch and unpack the package
|
|
# We are temporarily using a fork of dh-virtualenv due to an incompatibility with Python 3.11, which ships with
|
|
# Debian sid. TODO: Switch back to upstream once https://github.com/spotify/dh-virtualenv/pull/354 has merged.
|
|
RUN mkdir /dh-virtualenv
|
|
RUN wget -q -O /dh-virtualenv.tar.gz https://github.com/matrix-org/dh-virtualenv/archive/refs/tags/matrixorg-2023010302.tar.gz
|
|
RUN tar -xv --strip-components=1 -C /dh-virtualenv -f /dh-virtualenv.tar.gz
|
|
|
|
# install its build deps. We do another apt-cache-update here, because we might
|
|
# be using a stale cache from docker build.
|
|
RUN apt-get update -qq -o Acquire::Languages=none \
|
|
&& cd /dh-virtualenv \
|
|
&& env DEBIAN_FRONTEND=noninteractive mk-build-deps -ri -t "apt-get -y --no-install-recommends"
|
|
|
|
# Build it. Note that building the docs doesn't work due to differences in
|
|
# Sphinx APIs across versions/distros.
|
|
RUN cd /dh-virtualenv && DEB_BUILD_OPTIONS=nodoc dpkg-buildpackage -us -uc -b
|
|
|
|
###
|
|
### Stage 1
|
|
###
|
|
FROM docker.io/library/${distro}
|
|
|
|
# Get the distro we want to pull from as a dynamic build variable
|
|
# (We need to define it in each build stage)
|
|
ARG distro=""
|
|
ENV distro ${distro}
|
|
|
|
# Python < 3.7 assumes LANG="C" means ASCII-only and throws on printing unicode
|
|
# http://bugs.python.org/issue19846
|
|
ENV LANG C.UTF-8
|
|
|
|
# Install the build dependencies
|
|
#
|
|
# NB: keep this list in sync with the list of build-deps in debian/control
|
|
# TODO: it would be nice to do that automatically.
|
|
RUN apt-get update -qq -o Acquire::Languages=none \
|
|
&& env DEBIAN_FRONTEND=noninteractive apt-get install \
|
|
-yqq --no-install-recommends -o Dpkg::Options::=--force-unsafe-io \
|
|
build-essential \
|
|
curl \
|
|
debhelper \
|
|
devscripts \
|
|
libsystemd-dev \
|
|
lsb-release \
|
|
pkg-config \
|
|
python3-dev \
|
|
python3-pip \
|
|
python3-setuptools \
|
|
python3-venv \
|
|
sqlite3 \
|
|
libpq-dev \
|
|
libicu-dev \
|
|
pkg-config \
|
|
xmlsec1
|
|
|
|
# Install rust and ensure it's in the PATH
|
|
ENV RUSTUP_HOME=/rust
|
|
ENV CARGO_HOME=/cargo
|
|
ENV PATH=/cargo/bin:/rust/bin:$PATH
|
|
RUN mkdir /rust /cargo
|
|
|
|
RUN curl -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path --default-toolchain stable --profile minimal
|
|
|
|
|
|
COPY --from=builder /dh-virtualenv_1.2.2-1_all.deb /
|
|
|
|
# install dhvirtualenv. Update the apt cache again first, in case we got a
|
|
# cached cache from docker the first time.
|
|
RUN apt-get update -qq -o Acquire::Languages=none \
|
|
&& apt-get install -yq /dh-virtualenv_1.2.2-1_all.deb
|
|
|
|
WORKDIR /synapse/source
|
|
ENTRYPOINT ["bash","/synapse/source/docker/build_debian.sh"]
|