Dockerfile-dhvirtualenv 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # A dockerfile which builds a docker image for building a debian package for
  2. # synapse. The distro to build for is passed as a docker build var.
  3. #
  4. # The default entrypoint expects the synapse source to be mounted as a
  5. # (read-only) volume at /synapse/source, and an output directory at /debs.
  6. #
  7. # A pair of environment variables (TARGET_USERID and TARGET_GROUPID) can be
  8. # passed to the docker container; if these are set, the build script will chown
  9. # the build products accordingly, to avoid ending up with things owned by root
  10. # in the host filesystem.
  11. # Get the distro we want to pull from as a dynamic build variable
  12. ARG distro=""
  13. ###
  14. ### Stage 0: build a dh-virtualenv
  15. ###
  16. FROM ${distro} as builder
  17. RUN apt-get update -qq -o Acquire::Languages=none
  18. RUN env DEBIAN_FRONTEND=noninteractive apt-get install \
  19. -yqq --no-install-recommends \
  20. build-essential \
  21. ca-certificates \
  22. devscripts \
  23. equivs \
  24. wget
  25. # fetch and unpack the package
  26. # TODO: Upgrade to 1.2.2 once xenial is dropped
  27. RUN mkdir /dh-virtualenv
  28. RUN wget -q -O /dh-virtualenv.tar.gz https://github.com/spotify/dh-virtualenv/archive/ac6e1b1.tar.gz
  29. RUN tar -xv --strip-components=1 -C /dh-virtualenv -f /dh-virtualenv.tar.gz
  30. # install its build deps. We do another apt-cache-update here, because we might
  31. # be using a stale cache from docker build.
  32. RUN apt-get update -qq -o Acquire::Languages=none \
  33. && cd /dh-virtualenv \
  34. && env DEBIAN_FRONTEND=noninteractive mk-build-deps -ri -t "apt-get -y --no-install-recommends"
  35. # build it
  36. RUN cd /dh-virtualenv && dpkg-buildpackage -us -uc -b
  37. ###
  38. ### Stage 1
  39. ###
  40. FROM ${distro}
  41. # Get the distro we want to pull from as a dynamic build variable
  42. # (We need to define it in each build stage)
  43. ARG distro=""
  44. ENV distro ${distro}
  45. # Python < 3.7 assumes LANG="C" means ASCII-only and throws on printing unicode
  46. # http://bugs.python.org/issue19846
  47. ENV LANG C.UTF-8
  48. # Install the build dependencies
  49. #
  50. # NB: keep this list in sync with the list of build-deps in debian/control
  51. # TODO: it would be nice to do that automatically.
  52. # TODO: Remove the dh-systemd stanza after dropping support for Ubuntu xenial
  53. # it's a transitional package on all other, more recent releases
  54. RUN apt-get update -qq -o Acquire::Languages=none \
  55. && env DEBIAN_FRONTEND=noninteractive apt-get install \
  56. -yqq --no-install-recommends -o Dpkg::Options::=--force-unsafe-io \
  57. build-essential \
  58. debhelper \
  59. devscripts \
  60. libsystemd-dev \
  61. lsb-release \
  62. pkg-config \
  63. python3-dev \
  64. python3-pip \
  65. python3-setuptools \
  66. python3-venv \
  67. sqlite3 \
  68. libpq-dev \
  69. xmlsec1 \
  70. && ( env DEBIAN_FRONTEND=noninteractive apt-get install \
  71. -yqq --no-install-recommends -o Dpkg::Options::=--force-unsafe-io \
  72. dh-systemd || true )
  73. COPY --from=builder /dh-virtualenv_1.2~dev-1_all.deb /
  74. # install dhvirtualenv. Update the apt cache again first, in case we got a
  75. # cached cache from docker the first time.
  76. RUN apt-get update -qq -o Acquire::Languages=none \
  77. && apt-get install -yq /dh-virtualenv_1.2~dev-1_all.deb
  78. WORKDIR /synapse/source
  79. ENTRYPOINT ["bash","/synapse/source/docker/build_debian.sh"]