107 lines
3.7 KiB
Plaintext
107 lines
3.7 KiB
Plaintext
# 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}
|
|
|
|
# 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"]
|