Skip to content
Snippets Groups Projects
Dockerfile-dhvirtualenv 3.78 KiB
Newer Older
  • Learn to ignore specific revisions
  • # 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=""
    
    # 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
    
    # 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
    
    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 \
    
        # Required for building cffi from source.
        libffi-dev \
    
        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"]