sudo/docker
Todd C. Miller 7ed7b4536f Add Kerberos V build and test to CI. 2023-10-31 09:54:57 -06:00
..
debian Add Kerberos V build and test to CI. 2023-10-31 09:54:57 -06:00
fedora Add Kerberos V build and test to CI. 2023-10-31 09:54:57 -06:00
ubuntu Add Kerberos V build and test to CI. 2023-10-31 09:54:57 -06:00
README Fix typo and avoid a codespell false positive. 2021-10-10 14:14:56 -06:00

README

Container images are stored in https://hub.docker.com/repositories as
user sudoproject.  Build images are named based on the distro and use
the tag to differentiate between different versions and architectures.
There should always be a "latest" tag (or manifest).

When creating a new Dockerfile, use one of the Debian or Fedora files
as a template.  The examples below use podman rather than docker but it
should be possible to them interchangeably.

To build Debian containers for both amd64 and i386 (others only have amd64):

    podman build --arch amd64 --pull -t sudoproject/debian:latest.amd64 \
	docker/debian/latest
    podman build --arch 386 --pull -t sudoproject/debian:latest.i386 \
	docker/debian/latest

Then push it to dockerhub (may need to run "podman login" first):
    podman push sudoproject/debian:latest.amd64
    podman push sudoproject/debian:latest.i386

Multi-arch containers are supported by creating a manifest, e.g.:
    podman manifest create sudoproject/debian:latest
    podman manifest add sudoproject/debian:latest \
	sudoproject/debian:latest.amd64
    podman manifest add sudoproject/debian:latest \
	sudoproject/debian:latest.i386

Finally push the manifest to dockerhub:
    podman push sudoproject/debian:latest

When building bleeding edge images it is possible that the seccomp
filter will be out of date with respect to system calls.  It may
be necessary to pass podman the --security-opt=seccomp=unconfined
option in this case.

Note that memory sanitizer uses ptrace which is not allowed for
non-root containers by default.  This will cause a failure when
running the tests if sudo is configured with --enable-sanitizer.
The simplest solution is to run the container with the SYS_PTRACE
capability.  E.g.
    podman run -it --cap-add SYS_PTRACE ...

Alternately, disable leak sanitizer by setting
    ASAN_OPTIONS=detect_leaks=0
in the environment of the container doing "make check".