From 52d269a66243913c1ac3d90a1b6622fe20558c66 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Tue, 24 Jun 2025 13:11:11 +0200 Subject: [PATCH 1/3] pkg(docker-cli): use "make dynbinary" instead of ./scripts/build/binary The "make dynbinary" target calls ./scripts/build/binary with the right options set, and does not use docker to build (so can be run as part of our deb/rpm build scripts. Co-authored-by: Sebastiaan van Stijn Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- pkg/docker-cli/deb/rules | 3 +-- pkg/docker-cli/rpm/docker-ce-cli.spec | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/docker-cli/deb/rules b/pkg/docker-cli/deb/rules index 63b597f1..4de2b724 100644 --- a/pkg/docker-cli/deb/rules +++ b/pkg/docker-cli/deb/rules @@ -9,8 +9,7 @@ override_dh_auto_build: mkdir -p /go/src/github.com/docker && \ ln -snf $(CURDIR)/cli /go/src/github.com/docker/cli && \ cd /go/src/github.com/docker/cli && \ - VERSION=$(VERSION) GITCOMMIT=$(REVISION) LDFLAGS='' GO_LINKMODE=dynamic ./scripts/build/binary && \ - DISABLE_WARN_OUTSIDE_CONTAINER=1 LDFLAGS='' make manpages shell-completion + make DISABLE_WARN_OUTSIDE_CONTAINER=1 VERSION=$(VERSION) GITCOMMIT=$(REVISION) LDFLAGS='' dynbinary manpages shell-completion override_dh_auto_test: ver="$$(cli/build/docker --version)"; \ diff --git a/pkg/docker-cli/rpm/docker-ce-cli.spec b/pkg/docker-cli/rpm/docker-ce-cli.spec index 5b508a60..7e6263ed 100644 --- a/pkg/docker-cli/rpm/docker-ce-cli.spec +++ b/pkg/docker-cli/rpm/docker-ce-cli.spec @@ -46,7 +46,7 @@ mkdir -p /go/src/github.com/docker rm -f /go/src/github.com/docker/cli ln -snf ${RPM_BUILD_DIR}/src/cli /go/src/github.com/docker/cli pushd /go/src/github.com/docker/cli -VERSION=%{_origversion} GITCOMMIT=%{_commit} GO_LINKMODE=dynamic ./scripts/build/binary && DISABLE_WARN_OUTSIDE_CONTAINER=1 make manpages shell-completion +make DISABLE_WARN_OUTSIDE_CONTAINER=1 VERSION=%{_origversion} GITCOMMIT=%{_commit} dynbinary manpages shell-completion popd %check From 6a086ea0e4608a75c0d4ed635d151acdf321b04c Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Tue, 24 Jun 2025 13:11:11 +0200 Subject: [PATCH 2/3] deb, rpm: use install -D where possible and consistently use "install -p" The "-D" option creates parent directories if missing; we can use it in most places, except for one where we're using wildcards, as installing multiple files requires the target directory to exist. "install -p" unlikely makes a big difference, as some files may have timestampsbased on checkout date or being generated, but it doesn't hurt doing either. Co-authored-by: Sebastiaan van Stijn Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- pkg/buildx/deb/rules | 2 +- pkg/compose/deb/rules | 2 +- pkg/containerd/deb/rules | 8 ++++---- pkg/containerd/rpm/containerd.spec | 6 +++--- pkg/credential-helpers/deb/rules | 4 ++-- pkg/docker-cli/deb/rules | 6 +++--- pkg/docker-cli/rpm/docker-ce-cli.spec | 14 +++++--------- pkg/docker-cli/scripts/pkg-deb-build.sh | 2 +- pkg/docker-engine/deb/rules | 16 ++++++++-------- pkg/docker-engine/rpm/docker-ce.spec | 4 ++-- pkg/sbom/deb/rules | 2 +- pkg/scan/deb/rules | 2 +- 12 files changed, 32 insertions(+), 36 deletions(-) diff --git a/pkg/buildx/deb/rules b/pkg/buildx/deb/rules index a2320825..b3969487 100644 --- a/pkg/buildx/deb/rules +++ b/pkg/buildx/deb/rules @@ -28,7 +28,7 @@ override_dh_dwz: @# https://packages.ubuntu.com/debhelper override_dh_auto_install: - install -D -m 0755 /usr/libexec/docker/cli-plugins/docker-buildx debian/docker-buildx-plugin/usr/libexec/docker/cli-plugins/docker-buildx + install -D -p -m 0755 /usr/libexec/docker/cli-plugins/docker-buildx debian/docker-buildx-plugin/usr/libexec/docker/cli-plugins/docker-buildx override_dh_installinit: dh_installinit diff --git a/pkg/compose/deb/rules b/pkg/compose/deb/rules index f3a2a591..d0a344d3 100644 --- a/pkg/compose/deb/rules +++ b/pkg/compose/deb/rules @@ -23,7 +23,7 @@ override_dh_dwz: @# https://packages.ubuntu.com/debhelper override_dh_auto_install: - install -D -m 0755 /usr/libexec/docker/cli-plugins/docker-compose debian/docker-compose-plugin/usr/libexec/docker/cli-plugins/docker-compose + install -D -p -m 0755 /usr/libexec/docker/cli-plugins/docker-compose debian/docker-compose-plugin/usr/libexec/docker/cli-plugins/docker-compose override_dh_installinit: dh_installinit diff --git a/pkg/containerd/deb/rules b/pkg/containerd/deb/rules index c211e224..5a139655 100755 --- a/pkg/containerd/deb/rules +++ b/pkg/containerd/deb/rules @@ -44,7 +44,7 @@ man: ## Create containerd man pages # copy the generated man pages instead of using "make install-man" to allow # dh_installman doing its magic install -d man - install -D -m 0644 /go/src/github.com/containerd/containerd/man/* man + install -D -p -m 0644 /go/src/github.com/containerd/containerd/man/* man # force packages to be built with xz compression, as Ubuntu 21.10 and up use # zstd compression, which is non-standard, and breaks 'dpkg-sig --verify' @@ -65,6 +65,6 @@ override_dh_systemd_start: override_dh_auto_install: binaries bin/runc man mkdir -p debian/containerd.io/usr/bin - install -D -m 0755 bin/* debian/containerd.io/usr/bin - install -D -m 0644 /common/containerd.service debian/containerd.io/lib/systemd/system/containerd.service - install -D -m 0644 /common/containerd.toml debian/containerd.io/etc/containerd/config.toml + install -D -p -m 0755 bin/* debian/containerd.io/usr/bin + install -D -p -m 0644 /common/containerd.service debian/containerd.io/lib/systemd/system/containerd.service + install -D -p -m 0644 /common/containerd.toml debian/containerd.io/etc/containerd/config.toml diff --git a/pkg/containerd/rpm/containerd.spec b/pkg/containerd/rpm/containerd.spec index 78d038a0..a9c3eb8f 100644 --- a/pkg/containerd/rpm/containerd.spec +++ b/pkg/containerd/rpm/containerd.spec @@ -110,9 +110,9 @@ GO111MODULE=auto make -C /go/src/github.com/opencontainers/runc BINDIR=%{_buildd %install cd %{_builddir} mkdir -p %{buildroot}%{_bindir} -install -D -m 0755 bin/* %{buildroot}%{_bindir} -install -D -m 0644 %{S:1} %{buildroot}%{_unitdir}/containerd.service -install -D -m 0644 %{S:2} %{buildroot}%{_sysconfdir}/containerd/config.toml +install -D -p -m 0755 bin/* %{buildroot}%{_bindir} +install -D -p -m 0644 %{S:1} %{buildroot}%{_unitdir}/containerd.service +install -D -p -m 0644 %{S:2} %{buildroot}%{_sysconfdir}/containerd/config.toml # install manpages, taking into account that not all sections may be present for i in $(seq 1 8); do diff --git a/pkg/credential-helpers/deb/rules b/pkg/credential-helpers/deb/rules index 53f47357..ff1f1e98 100644 --- a/pkg/credential-helpers/deb/rules +++ b/pkg/credential-helpers/deb/rules @@ -18,8 +18,8 @@ override_dh_dwz: @# https://packages.ubuntu.com/debhelper override_dh_auto_install: - install -D bin/docker-credential-secretservice debian/docker-credential-secretservice/usr/bin/docker-credential-secretservice - install -D bin/docker-credential-pass debian/docker-credential-pass/usr/bin/docker-credential-pass + install -D -p -m 0755 bin/docker-credential-secretservice debian/docker-credential-secretservice/usr/bin/docker-credential-secretservice + install -D -p -m 0755 bin/docker-credential-pass debian/docker-credential-pass/usr/bin/docker-credential-pass override_dh_auto_test: ver="$$(bin/docker-credential-secretservice version)"; \ diff --git a/pkg/docker-cli/deb/rules b/pkg/docker-cli/deb/rules index 4de2b724..e70333a8 100644 --- a/pkg/docker-cli/deb/rules +++ b/pkg/docker-cli/deb/rules @@ -25,9 +25,9 @@ override_dh_dwz: @# https://packages.ubuntu.com/debhelper override_dh_auto_install: - install -D -m 0644 cli/build/completion/fish/docker.fish debian/docker-ce-cli/usr/share/fish/vendor_completions.d/docker.fish - install -D -m 0644 cli/build/completion/zsh/_docker debian/docker-ce-cli/usr/share/zsh/vendor-completions/_docker - install -D -m 0755 cli/build/docker debian/docker-ce-cli/usr/bin/docker + install -D -p -m 0755 cli/build/docker debian/docker-ce-cli/usr/bin/docker + install -D -p -m 0644 cli/build/completion/fish/docker.fish debian/docker-ce-cli/usr/share/fish/vendor_completions.d/docker.fish + install -D -p -m 0644 cli/build/completion/zsh/_docker debian/docker-ce-cli/usr/share/zsh/vendor-completions/_docker override_dh_installinit: dh_installinit diff --git a/pkg/docker-cli/rpm/docker-ce-cli.spec b/pkg/docker-cli/rpm/docker-ce-cli.spec index 7e6263ed..e2589345 100644 --- a/pkg/docker-cli/rpm/docker-ce-cli.spec +++ b/pkg/docker-cli/rpm/docker-ce-cli.spec @@ -55,16 +55,12 @@ ver="$(cli/build/docker --version)"; \ %install # install binary -install -d ${RPM_BUILD_ROOT}%{_bindir} -install -p -m 755 cli/build/docker ${RPM_BUILD_ROOT}%{_bindir}/docker +install -D -p -m 755 cli/build/docker ${RPM_BUILD_ROOT}%{_bindir}/docker # add bash, zsh, and fish completions -install -d ${RPM_BUILD_ROOT}%{_datadir}/bash-completion/completions -install -d ${RPM_BUILD_ROOT}%{_datadir}/zsh/vendor-completions -install -d ${RPM_BUILD_ROOT}%{_datadir}/fish/vendor_completions.d -install -p -m 644 cli/build/completion/bash/docker ${RPM_BUILD_ROOT}%{_datadir}/bash-completion/completions/docker -install -p -m 644 cli/build/completion/zsh/_docker ${RPM_BUILD_ROOT}%{_datadir}/zsh/vendor-completions/_docker -install -p -m 644 cli/build/completion/fish/docker.fish ${RPM_BUILD_ROOT}%{_datadir}/fish/vendor_completions.d/docker.fish +install -D -p -m 644 cli/build/completion/bash/docker ${RPM_BUILD_ROOT}%{_datadir}/bash-completion/completions/docker +install -D -p -m 644 cli/build/completion/zsh/_docker ${RPM_BUILD_ROOT}%{_datadir}/zsh/vendor-completions/_docker +install -D -p -m 644 cli/build/completion/fish/docker.fish ${RPM_BUILD_ROOT}%{_datadir}/fish/vendor_completions.d/docker.fish # install man-pages for sec in $(seq 1 9); do @@ -77,7 +73,7 @@ done mkdir -p build-docs for cli_file in LICENSE MAINTAINERS NOTICE README.md; do - cp "cli/$cli_file" "build-docs/$cli_file" + install -D -p -m 644 "cli/$cli_file" "build-docs/$cli_file" done %files diff --git a/pkg/docker-cli/scripts/pkg-deb-build.sh b/pkg/docker-cli/scripts/pkg-deb-build.sh index 59e88616..66087cd1 100755 --- a/pkg/docker-cli/scripts/pkg-deb-build.sh +++ b/pkg/docker-cli/scripts/pkg-deb-build.sh @@ -67,6 +67,6 @@ mkdir -p "${pkgoutput}" set -x -chmod -x debian/control debian/docs debian/*.bash-completion debian/*.manpages +chmod -x debian/control debian/docs debian/*.manpages VERSION=${GENVER_VERSION} REVISION=${GENVER_COMMIT} dpkg-buildpackage $PKG_DEB_BUILDFLAGS --host-arch $(xx-info debian-arch) --target-arch $(xx-info debian-arch) cp /root/docker-* "${pkgoutput}"/ diff --git a/pkg/docker-engine/deb/rules b/pkg/docker-engine/deb/rules index 7a5cf59a..95fff1de 100755 --- a/pkg/docker-engine/deb/rules +++ b/pkg/docker-engine/deb/rules @@ -28,16 +28,16 @@ override_dh_dwz: @# https://packages.ubuntu.com/debhelper override_dh_auto_install: - install -D -m 0644 /common/systemd/docker.service debian/docker-ce/lib/systemd/system/docker.service - install -D -m 0644 /common/systemd/docker.socket debian/docker-ce/lib/systemd/system/docker.socket - install -D -m 0755 $(shell readlink -e engine/bundles/dynbinary-daemon/dockerd) debian/docker-ce/usr/bin/dockerd - install -D -m 0755 $(shell readlink -e engine/bundles/dynbinary-daemon/docker-proxy) debian/docker-ce/usr/bin/docker-proxy - install -D -m 0755 /usr/local/bin/docker-init debian/docker-ce/usr/libexec/docker/docker-init + install -D -p -m 0644 /common/systemd/docker.service debian/docker-ce/lib/systemd/system/docker.service + install -D -p -m 0644 /common/systemd/docker.socket debian/docker-ce/lib/systemd/system/docker.socket + install -D -p -m 0755 $(shell readlink -e engine/bundles/dynbinary-daemon/dockerd) debian/docker-ce/usr/bin/dockerd + install -D -p -m 0755 $(shell readlink -e engine/bundles/dynbinary-daemon/docker-proxy) debian/docker-ce/usr/bin/docker-proxy + install -D -p -m 0755 /usr/local/bin/docker-init debian/docker-ce/usr/libexec/docker/docker-init # docker-ce-rootless-extras install - install -D -m 0755 /usr/local/bin/rootlesskit debian/docker-ce-rootless-extras/usr/bin/rootlesskit - install -D -m 0755 engine/contrib/dockerd-rootless.sh debian/docker-ce-rootless-extras/usr/bin/dockerd-rootless.sh - install -D -m 0755 engine/contrib/dockerd-rootless-setuptool.sh debian/docker-ce-rootless-extras/usr/bin/dockerd-rootless-setuptool.sh + install -D -p -m 0755 /usr/local/bin/rootlesskit debian/docker-ce-rootless-extras/usr/bin/rootlesskit + install -D -p -m 0755 engine/contrib/dockerd-rootless.sh debian/docker-ce-rootless-extras/usr/bin/dockerd-rootless.sh + install -D -p -m 0755 engine/contrib/dockerd-rootless-setuptool.sh debian/docker-ce-rootless-extras/usr/bin/dockerd-rootless-setuptool.sh # TODO: how can we install vpnkit? override_dh_installinit: diff --git a/pkg/docker-engine/rpm/docker-ce.spec b/pkg/docker-engine/rpm/docker-ce.spec index d0dff700..25dfaeca 100644 --- a/pkg/docker-engine/rpm/docker-ce.spec +++ b/pkg/docker-engine/rpm/docker-ce.spec @@ -88,8 +88,8 @@ install -D -p -m 0755 $(readlink -f engine/bundles/dynbinary-daemon/docker-proxy install -D -p -m 0755 /usr/local/bin/docker-init ${RPM_BUILD_ROOT}%{_libexecdir}/docker/docker-init # install systemd scripts -install -D -m 0644 engine/contrib/init/systemd/docker.service ${RPM_BUILD_ROOT}%{_unitdir}/docker.service -install -D -m 0644 engine/contrib/init/systemd/docker.socket ${RPM_BUILD_ROOT}%{_unitdir}/docker.socket +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} mandir=%{_mandir} install diff --git a/pkg/sbom/deb/rules b/pkg/sbom/deb/rules index 9ffb368f..27099cf1 100644 --- a/pkg/sbom/deb/rules +++ b/pkg/sbom/deb/rules @@ -26,7 +26,7 @@ override_dh_dwz: @# https://packages.ubuntu.com/debhelper override_dh_auto_install: - install -D -m 0755 /usr/libexec/docker/cli-plugins/docker-sbom debian/docker-sbom-plugin/usr/libexec/docker/cli-plugins/docker-sbom + install -D -p -m 0755 /usr/libexec/docker/cli-plugins/docker-sbom debian/docker-sbom-plugin/usr/libexec/docker/cli-plugins/docker-sbom override_dh_installinit: dh_installinit diff --git a/pkg/scan/deb/rules b/pkg/scan/deb/rules index 5359b35b..a52f4d40 100644 --- a/pkg/scan/deb/rules +++ b/pkg/scan/deb/rules @@ -19,7 +19,7 @@ override_dh_strip: # Go has lots of problems with stripping, so just don't override_dh_auto_install: - install -D -m 0755 /usr/libexec/docker/cli-plugins/docker-scan debian/docker-scan-plugin/usr/libexec/docker/cli-plugins/docker-scan + install -D -p -m 0755 /usr/libexec/docker/cli-plugins/docker-scan debian/docker-scan-plugin/usr/libexec/docker/cli-plugins/docker-scan override_dh_installinit: dh_installinit From af62dc9b10a15a96e72f50b8cbe8c42315e7abdb Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Tue, 24 Jun 2025 13:11:11 +0200 Subject: [PATCH 3/3] pkg(docker-cli); stop using dh_bash-completion for bash completions The dh_bash-completion debhelper provides an easy way to install the shell-completion scripts for Bash. Unfortunately there is no stable equivalent yet for the other shells (zsh, fish, powershell), which resulted in two out of three shells requiring manual install. Given that the installation path for Bash is [well-documented][1], we can align Bash with the other shells to make this less confusing. This patch makes that change, and adds a code-comment to outline the reasoning (and possible future options) for future readers. [1]: https://github.com/scop/bash-completion/blob/79fd051907328c8c26372691f68d627c1f0e3916/README.md Co-authored-by: Sebastiaan van Stijn Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- .../deb/docker-ce-cli.bash-completion | 1 - pkg/docker-cli/deb/rules | 30 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) delete mode 100644 pkg/docker-cli/deb/docker-ce-cli.bash-completion diff --git a/pkg/docker-cli/deb/docker-ce-cli.bash-completion b/pkg/docker-cli/deb/docker-ce-cli.bash-completion deleted file mode 100644 index 009937f5..00000000 --- a/pkg/docker-cli/deb/docker-ce-cli.bash-completion +++ /dev/null @@ -1 +0,0 @@ -cli/contrib/completion/bash/docker diff --git a/pkg/docker-cli/deb/rules b/pkg/docker-cli/deb/rules index e70333a8..7da1468e 100644 --- a/pkg/docker-cli/deb/rules +++ b/pkg/docker-cli/deb/rules @@ -26,6 +26,36 @@ override_dh_dwz: override_dh_auto_install: install -D -p -m 0755 cli/build/docker debian/docker-ce-cli/usr/bin/docker + + # docker-ce-cli shell-completion + # + # We are manually installing bash completions instead of using the "dh_bash-completion" + # debhelper (see [1]); dh_bash-completion only supports bash, and none of the other shells, + # which meant that we had to install 2 out of 3 manually, which was confusing ("what about + # Bash?"). Given that locations to install these completion scripts are well-known, we + # can safely use the manual approach for installing them. + # + # In future, can consider using "dh_shell_completions" (see [2]), which supports bash, zsh + # and fish. However, "dh_shell_completions" is still really premature, and not available + # in stable releases. So, currently, adding it as build-dependency, especially since + # these are well-known, may not be a good choice, but we can revisit that in future + # if things mature in this area. + # + # Observant readers may notice that we don't include PowerShell completion in + # this list (even though Cobra provides them, and PowerShell *can* be installed + # oon Linux). The short story is that there's no well-defined location, nor + # a well-defined approach for this. + # + # The PowerShell maintainers (see [3]) considering that no completion scripts + # are needed for anything following the PowerShell specifications, and for + # anything else, PowerShell is capable enough to use zsh and bash completions. + # + # All of the above taken into account; it's fuzzy enough to just leave it as + # an exercise for the user to decide what to do. + # + # [1]: https://manpages.debian.org/bookworm/bash-completion/dh_bash-completion.1.en.html + # [2]: https://manpages.debian.org/testing/dh-shell-completions/dh_shell_completions.1.en.html + # [3]: https://github.com/PowerShell/PowerShell/issues/17582 install -D -p -m 0644 cli/build/completion/fish/docker.fish debian/docker-ce-cli/usr/share/fish/vendor_completions.d/docker.fish install -D -p -m 0644 cli/build/completion/zsh/_docker debian/docker-ce-cli/usr/share/zsh/vendor-completions/_docker