Skip to content

Commit

Permalink
deb,rpm: include dockerd man-page in docker-ce package
Browse files Browse the repository at this point in the history
When splitting the docker CLI from the moby/moby repository, the dockerd
documentation and man-pages were moved to the CLI repository. This was a
bit of a bad choice, as now the documentation and code lived in separate
repositories, but when the CLI and dockerd packages were split, the man
page for dockerd ended up in the CLI package.

Starting with [moby@d6e9b5f], the dockerd man-page has been reintegrated
into the moby repository, which means that we can build the man-page
from that repository, and remove it from the CLI repository.

This patch updates the packing to do so:

Before this patch;

    dpkg-deb -c docker-ce_0.0.0~20250124134141.b8879a4-1~ubuntu.24.04~noble_arm64.deb | grep -E '^-'
    -rw-r--r-- root/root       642 2025-01-24 14:29 ./etc/default/docker
    -rwxr-xr-x root/root      2946 2025-01-24 14:29 ./etc/init.d/docker
    -rwxr-xr-x root/root   2741336 2025-01-24 19:54 ./usr/bin/docker-proxy
    -rw-r--r-- root/root      1727 2025-01-24 14:29 ./usr/lib/systemd/system/docker.service
    -rw-r--r-- root/root       295 2025-01-24 14:29 ./usr/lib/systemd/system/docker.socket
    -rwxr-xr-x root/root    604336 2025-01-24 19:54 ./usr/libexec/docker/docker-init
    -rw-r--r-- root/root      2248 2025-01-24 14:29 ./usr/share/doc/docker-ce/README.md
    -rw-r--r-- root/root       168 2025-01-24 19:54 ./usr/share/doc/docker-ce/changelog.Debian.gz

    rpm -qpl ./docker-ce-0.0.0~20250124134141.b8879a4-0.fc41.aarch64.rpm
    /etc/docker
    /usr/bin/docker-proxy
    /usr/bin/dockerd
    /usr/lib/systemd/system/docker.service
    /usr/lib/systemd/system/docker.socket
    /usr/libexec/docker/docker-init

With this patch:

    dpkg-deb -c docker-ce_0.0.0~20250124134141.b8879a4-1~ubuntu.24.04~noble_arm64.deb | grep -E '^-'
    -rw-r--r-- root/root       642 2025-01-24 14:29 ./etc/default/docker
    -rwxr-xr-x root/root      2946 2025-01-24 14:29 ./etc/init.d/docker
    -rwxr-xr-x root/root   2741336 2025-01-24 20:55 ./usr/bin/docker-proxy
    -rwxr-xr-x root/root  79458592 2025-01-24 20:55 ./usr/bin/dockerd
    -rw-r--r-- root/root      1727 2025-01-24 14:29 ./usr/lib/systemd/system/docker.service
    -rw-r--r-- root/root       295 2025-01-24 14:29 ./usr/lib/systemd/system/docker.socket
    -rwxr-xr-x root/root    604336 2025-01-24 20:55 ./usr/libexec/docker/docker-init
    -rw-r--r-- root/root      2248 2025-01-24 14:29 ./usr/share/doc/docker-ce/README.md
    -rw-r--r-- root/root       166 2025-01-24 20:55 ./usr/share/doc/docker-ce/changelog.Debian.gz
    -rw-r--r-- root/root      6561 2025-01-24 20:55 ./usr/share/man/man8/dockerd.8.gz

    rpm -qpl ./docker-ce-0.0.0~20250124134141.b8879a4-0.fc41.aarch64.rpm
    /etc/docker
    /usr/bin/docker-proxy
    /usr/bin/dockerd
    /usr/lib/systemd/system/docker.service
    /usr/lib/systemd/system/docker.socket
    /usr/libexec/docker/docker-init
    /usr/share/man/man8/dockerd.8.gz

Given that the dockerd man-page was previously packaged as part of docker-ce-cli,
we need to add a "Replaces:" condition to the package, to prevent dpkg from
detecting it as a conflict when an older version of the docker-ce-cli package
was installed that contains the manpage;

    Unpacking docker-ce (5:0.0.0~20250124134141.b8879a4-1~raspbian.12~bookworm) ...
    dpkg: error processing archive ./deb/debbuild/raspbian-bookworm/docker-ce_0.0.0~20250124134141.b8879a4-1~raspbian.12~bookworm_armhf.deb (--install):
    trying to overwrite '/usr/share/man/man8/dockerd.8.gz', which is also in package docker-ce-cli 5:0.0.0~20250124134141.b8879a4-1~raspbian.12~bookworm

From the [Debian manual][1]

> 7.6.1. Overwriting files in other packages
>
> It is usually an error for a package to contain files which are on the
> system in another package. However, if the overwriting package declares
> that it Replaces the one containing the file being overwritten, then dpkg
> will replace the file from the old package with that from the new. The
> file will no longer be listed as “owned” by the old package and will be
> taken over by the new package.

[1]: https://www.debian.org/doc/debian-policy/ch-relationships.html
[moby@d6e9b5f]: moby/moby@d6e9b5f

Signed-off-by: Sebastiaan van Stijn <[email protected]>
  • Loading branch information
thaJeztah committed Jan 27, 2025
1 parent e755876 commit e9aaf34
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 1 deletion.
3 changes: 2 additions & 1 deletion deb/common/control
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ Suggests: cgroupfs-mount | cgroup-lite
Conflicts: docker (<< 1.5~),
docker-engine,
docker.io
Replaces: docker-engine
Replaces: docker-engine,
docker-ce-cli (<= 5:27)
Description: Docker: the open-source application container engine
Docker is a product for you to build, ship and run any application as a
lightweight container
Expand Down
1 change: 1 addition & 0 deletions deb/common/docker-ce.manpages
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
engine/man/man*/*
3 changes: 3 additions & 0 deletions deb/common/rules
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ override_dh_auto_build:
cd engine && TMP_GOPATH="/go" hack/dockerfile/install/install.sh tini
cd engine && TMP_GOPATH="/go" hack/dockerfile/install/install.sh rootlesskit dynamic

# build man-pages
make -C engine/man

# Build the CLI
make -C /go/src/github.com/docker/cli DISABLE_WARN_OUTSIDE_CONTAINER=1 VERSION=$(VERSION) GITCOMMIT=$(CLI_GITCOMMIT) LDFLAGS='' dynbinary manpages shell-completion

Expand Down
7 changes: 7 additions & 0 deletions rpm/SPECS/docker-ce.spec
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ TMP_GOPATH="/go" hack/dockerfile/install/install.sh tini
VERSION=%{_origversion} PRODUCT=docker hack/make.sh dynbinary
popd

# build man-pages
make -C ${RPM_BUILD_DIR}/src/engine/man

%check
ver="$(engine/bundles/dynbinary-daemon/dockerd --version)"; \
test "$ver" = "Docker version %{_origversion}, build %{_gitcommit_engine}" && echo "PASS: daemon version OK" || (echo "FAIL: daemon version ($ver) did not match" && exit 1)
Expand All @@ -85,6 +88,9 @@ install -D -p -m 0755 /usr/local/bin/docker-init ${RPM_BUILD_ROOT}%{_libexecdir}
install -D -p -m 0644 engine/contrib/init/systemd/docker.service ${RPM_BUILD_ROOT}%{_unitdir}/docker.service
install -D -p -m 0644 engine/contrib/init/systemd/docker.socket ${RPM_BUILD_ROOT}%{_unitdir}/docker.socket

# install manpages
make -C ${RPM_BUILD_DIR}/src/engine/man DESTDIR=${RPM_BUILD_ROOT} prefix=%{_mandir} install

# create the config directory
mkdir -p ${RPM_BUILD_ROOT}/etc/docker

Expand All @@ -94,6 +100,7 @@ mkdir -p ${RPM_BUILD_ROOT}/etc/docker
%{_libexecdir}/docker/docker-init
%{_unitdir}/docker.service
%{_unitdir}/docker.socket
%{_mandir}/man*/*
%dir /etc/docker

%post
Expand Down

0 comments on commit e9aaf34

Please sign in to comment.