107 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.6 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 ${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
 | |
| RUN mkdir /dh-virtualenv
 | |
| RUN wget -q -O /dh-virtualenv.tar.gz https://github.com/spotify/dh-virtualenv/archive/refs/tags/1.2.2.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 ${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 \
 | |
|         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
 | |
| 
 | |
| 
 | |
| 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"]
 |