directory which contains a Makefile and a Dockerfile (plus some accessory
scripts) enabling production of images based on:
- Debian (currently, `debian:bullseye-slim`)
- Fedora (currently, `fedora:36`)
- Alpine (currently, `alpine:3.16`)
With a `cd` to `dev/docker`, running `make dev.debian` or `make dev-gui.fedora`,
for instance, allows choosing either the Debian command-line based image,
or the Fedora GUI-based image. In total, there are 9 variants.
Note: until recently, Frama-C Docker images were based on `alpine:3.13`.
The new version of Alpine can cause behavior differences, for instance,
[CI pipelines based on the image may require a few changes](https://git.frama-c.com/pub/open-source-case-studies/-/commit/7169be755db6c7a57ad7ac4556b6b786e3951ed8)<sup>1</sup>.
<sup>1</sup> Details for the interested: Frama-C's [open-source-case-studies](https://git.frama-c.com/pub/open-source-case-studies)
repository had a CI pipeline based on the Alpine image, with `opam` as default
user. A [vulnerability in Git](https://github.blog/2022-04-12-git-security-vulnerability-announced/)
imposed changes related to permissions of `.git` folders. Since Gitlab's
Docker-based runners run as `root`, but Frama-C's Docker image does not,
this broke the existing pipeline, requiring a small patch to fix it.
If you set up a similar Gitlab-based CI, you may need a similar patch when
using the new Frama-C Docker images.
# Custom images for custom plug-ins
Advanced users (mainly, plug-in developers) may want to create Docker images
with their own distribution of Frama-C, including e.g. external plug-ins.
For instance, if you want to build an image with
[MetAcsl](https://git.frama-c.com/pub/meta/), you can do as follows:
- Internalize MetAcsl in the `src/plugins` directory of your Frama-C git clone,
by copying it there;
- Run `dev/make-distrib.sh` to produce a .tar.gz archive of your current
Frama-C directory (including, in this case, MetAcsl);
- Put the generated `frama-c-*.tar.gz` file inside directory `dev/docker`;
-`cd dev/docker` and then run:
make custom.<distro> FRAMAC_ARCHIVE=frama-c-<version>.tar.gz
Where `frama-c-<version>.tar.gz` is the name of the .tar.gz archive
generated by `dev/make-distrib.sh`. You can, of course, choose any of the