mirror of
https://github.com/freedomofpress/dangerzone.git
synced 2025-05-17 10:41:49 +02:00
Render the Dockerfile from a template and some params
Allow updating the Dockerfile from a template and some envs, so that it's easier to bump the dates in it.
This commit is contained in:
parent
fccfd510b7
commit
a8436bba98
5 changed files with 114 additions and 0 deletions
6
BUILD.md
6
BUILD.md
|
@ -515,3 +515,9 @@ poetry run .\install\windows\build-app.bat
|
||||||
```
|
```
|
||||||
|
|
||||||
When you're done you will have `dist\Dangerzone.msi`.
|
When you're done you will have `dist\Dangerzone.msi`.
|
||||||
|
|
||||||
|
## Updating the container image
|
||||||
|
|
||||||
|
The Dangezone container image is reproducible. This means that every time we
|
||||||
|
build it, the result will be bit-for-bit the same, with some minor exceptions.
|
||||||
|
Read more on how you can update it in `docs/developer/reproducibility.md`.
|
||||||
|
|
5
Dockerfile.env
Normal file
5
Dockerfile.env
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
DEBIAN_IMAGE_DATE=20250113
|
||||||
|
DEBIAN_ARCHIVE_DATE=20250114
|
||||||
|
GVISOR_ARCHIVE_DATE=20250106
|
||||||
|
H2ORESTART_CHECKSUM=8a5be77359695c14faaf33891d3eca6c9d73c1224599aab50a9d2ccc04640580
|
||||||
|
H2ORESTART_VERSION=v0.6.8
|
81
Dockerfile.in
Normal file
81
Dockerfile.in
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
# NOTE: Updating the packages to their latest versions requires bumping the
|
||||||
|
# Dockerfile args below. For more info about this file, read
|
||||||
|
# docs/developer/reproducibility.md.
|
||||||
|
|
||||||
|
ARG DEBIAN_IMAGE_DATE={{DEBIAN_IMAGE_DATE}}
|
||||||
|
|
||||||
|
FROM debian:bookworm-${DEBIAN_IMAGE_DATE}-slim
|
||||||
|
|
||||||
|
ARG GVISOR_ARCHIVE_DATE={{GVISOR_ARCHIVE_DATE}}
|
||||||
|
ARG DEBIAN_ARCHIVE_DATE={{DEBIAN_ARCHIVE_DATE}}
|
||||||
|
ARG H2ORESTART_CHECKSUM=8a5be77359695c14faaf33891d3eca6c9d73c1224599aab50a9d2ccc04640580
|
||||||
|
ARG H2ORESTART_VERSION=v0.6.8
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# The following way of installing packages is taken from
|
||||||
|
# https://github.com/reproducible-containers/repro-sources-list.sh/blob/master/Dockerfile.debian-12,
|
||||||
|
# and adapted to allow installing gVisor from each own repo as well.
|
||||||
|
RUN \
|
||||||
|
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||||
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||||
|
--mount=type=bind,source=./container/repro-sources-list.sh,target=/usr/local/bin/repro-sources-list.sh \
|
||||||
|
--mount=type=bind,source=./container/gvisor.key,target=/tmp/gvisor.key \
|
||||||
|
: "Hacky way to set a date for the Debian snapshot repos" && \
|
||||||
|
touch -d ${DEBIAN_ARCHIVE_DATE} /etc/apt/sources.list.d/debian.sources && \
|
||||||
|
touch -d ${DEBIAN_ARCHIVE_DATE} /etc/apt/sources.list && \
|
||||||
|
repro-sources-list.sh && \
|
||||||
|
: "Setup APT to install gVisor from its separate APT repo" && \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get upgrade -y && \
|
||||||
|
apt-get install -y --no-install-recommends apt-transport-https ca-certificates gnupg && \
|
||||||
|
gpg -o /usr/share/keyrings/gvisor-archive-keyring.gpg --dearmor /tmp/gvisor.key && \
|
||||||
|
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/gvisor-archive-keyring.gpg] https://storage.googleapis.com/gvisor/releases ${GVISOR_ARCHIVE_DATE} main" > /etc/apt/sources.list.d/gvisor.list && \
|
||||||
|
: "Install the necessary gVisor and Dangerzone dependencies" && \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
python3 python3-fitz libreoffice-nogui libreoffice-java-common \
|
||||||
|
python3 python3-magic default-jre-headless fonts-noto-cjk fonts-dejavu \
|
||||||
|
runsc unzip wget && \
|
||||||
|
: "Clean up for improving reproducibility (optional)" && \
|
||||||
|
rm -rf /var/cache/fontconfig/ && \
|
||||||
|
rm -rf /etc/ssl/certs/java/cacerts && \
|
||||||
|
rm -rf /var/log/* /var/cache/ldconfig/aux-cache
|
||||||
|
|
||||||
|
# Download H2ORestart from GitHub using a pinned version and hash. Note that
|
||||||
|
# it's available in Debian repos, but not in Bookworm yet.
|
||||||
|
RUN mkdir /libreoffice_ext && cd libreoffice_ext \
|
||||||
|
&& H2ORESTART_FILENAME=h2orestart.oxt \
|
||||||
|
&& wget https://github.com/ebandal/H2Orestart/releases/download/$H2ORESTART_VERSION/$H2ORESTART_FILENAME \
|
||||||
|
&& echo "$H2ORESTART_CHECKSUM $H2ORESTART_FILENAME" | sha256sum -c \
|
||||||
|
&& install -dm777 "/usr/lib/libreoffice/share/extensions/" \
|
||||||
|
&& rm /root/.wget-hsts
|
||||||
|
|
||||||
|
# Create an unprivileged user both for gVisor and for running Dangerzone.
|
||||||
|
RUN mkdir -p /opt/dangerzone/dangerzone && \
|
||||||
|
touch /opt/dangerzone/dangerzone/__init__.py && \
|
||||||
|
addgroup --gid 1000 dangerzone && \
|
||||||
|
adduser --uid 1000 --ingroup dangerzone --shell /bin/true \
|
||||||
|
--disabled-password --home /home/dangerzone dangerzone
|
||||||
|
|
||||||
|
COPY conversion/doc_to_pixels.py \
|
||||||
|
conversion/common.py \
|
||||||
|
conversion/errors.py \
|
||||||
|
conversion/__init__.py \
|
||||||
|
/opt/dangerzone/dangerzone/conversion
|
||||||
|
|
||||||
|
# Let the entrypoint script write the OCI config for the inner container under
|
||||||
|
# /config.json.
|
||||||
|
RUN touch /config.json
|
||||||
|
RUN chown dangerzone:dangerzone /config.json
|
||||||
|
|
||||||
|
# Switch to the dangerzone user for the rest of the script.
|
||||||
|
USER dangerzone
|
||||||
|
|
||||||
|
# Create a directory that will be used by gVisor as the place where it will
|
||||||
|
# store the state of its containers.
|
||||||
|
RUN mkdir /home/dangerzone/.containers
|
||||||
|
|
||||||
|
COPY container/entrypoint.py /
|
||||||
|
|
||||||
|
ENTRYPOINT ["/entrypoint.py"]
|
|
@ -14,6 +14,7 @@ Here is a list of tasks that should be done before issuing the release:
|
||||||
- [ ] Update `share/version.txt`
|
- [ ] Update `share/version.txt`
|
||||||
- [ ] Update the "Version" field in `install/linux/dangerzone.spec`
|
- [ ] Update the "Version" field in `install/linux/dangerzone.spec`
|
||||||
- [ ] Bump the Debian version by adding a new changelog entry in `debian/changelog`
|
- [ ] Bump the Debian version by adding a new changelog entry in `debian/changelog`
|
||||||
|
- [ ] Bump the dates in the `Dockerfile`
|
||||||
- [ ] Update screenshot in `README.md`, if necessary
|
- [ ] Update screenshot in `README.md`, if necessary
|
||||||
- [ ] CHANGELOG.md should be updated to include a list of all major changes since the last release
|
- [ ] CHANGELOG.md should be updated to include a list of all major changes since the last release
|
||||||
- [ ] A draft release should be created. Copy the release notes text from the template at [`docs/templates/release-notes`](https://github.com/freedomofpress/dangerzone/tree/main/docs/templates/)
|
- [ ] A draft release should be created. Copy the release notes text from the template at [`docs/templates/release-notes`](https://github.com/freedomofpress/dangerzone/tree/main/docs/templates/)
|
||||||
|
|
|
@ -88,3 +88,24 @@ Here are a few other obstacles that we need to overcome:
|
||||||
./diffoci diff podman://<new_image_tag> podman://<old_image_tag> \
|
./diffoci diff podman://<new_image_tag> podman://<old_image_tag> \
|
||||||
--ignore-timestamps --ignore-image-name --verbose
|
--ignore-timestamps --ignore-image-name --verbose
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Updating the image
|
||||||
|
|
||||||
|
The fact that our image is reproducible also means that it's frozen in time.
|
||||||
|
This means that rebuilding the image without updating our Dockerfile will not
|
||||||
|
receive security updates.
|
||||||
|
|
||||||
|
We list the necessary variables that make up our image in the `Dockerfile.env`
|
||||||
|
file. These are:
|
||||||
|
* `DEBIAN_IMAGE_DATE`: The date that the Debian container image was released
|
||||||
|
* `DEBIAN_ARCHIVE_DATE`: The Debian snapshot repo that we want to use
|
||||||
|
* `GVISOR_ARCHIVE_DATE`: The gVisor APT repo that we want to use
|
||||||
|
* `H2ORESTART_CHECKSUM`: The SHA-256 checksum of the H2ORestart plugin
|
||||||
|
* `H2ORESTART_VERSION`: The version of the H2ORestart plugin
|
||||||
|
|
||||||
|
If you bump these values in `Dockerfile.env`, you can create a new Dockerfile
|
||||||
|
with:
|
||||||
|
|
||||||
|
```
|
||||||
|
poetry run jinja2 Dockerfile.in Dockerfile.env > Dockerfile
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in a new issue