Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix haproxy image build #3350

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion images/haproxy/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ RUN [ ! -f /usr/share/copyrights.tar.gz ] || tar -C / -xzvf /usr/share/copyright
# - bash (ldd is a bash script and debian-base removes bash)
# - procps (for `kill` which kind needs)
RUN apt update && \
apt install -y --no-install-recommends haproxy=2.2.\* \
apt install -y --no-install-recommends haproxy=2.6.\* \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't remember now why we had to stick on 2.2, I think that there was some behavior change we depended on it

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just switch back to the prevous debian version, we'll revisit later
cc: @BenTheElder

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doing that in #3351

procps bash

# copy in script for staging distro provided binary to distroless
Expand Down
33 changes: 22 additions & 11 deletions images/haproxy/stage-binary-and-deps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ file_to_package() {
# `dpkg-query --search $file-pattern` outputs lines with the format: "$package: $file-path"
# where $file-path belongs to $package
# https://manpages.debian.org/jessie/dpkg/dpkg-query.1.en.html
dpkg-query --search "$(realpath "${1}")" | cut -d':' -f1
(dpkg-query --search "$(realpath "${1}")" || true) | cut -d':' -f1
}

# package_to_copyright gives the path to the copyright file for the package $1
Expand All @@ -41,19 +41,30 @@ package_to_copyright() {
# stage_file stages the filepath $1 to $2, following symlinks
# and staging copyrights
stage_file() {
cp -a --parents "${1}" "${2}"
# /lib is a symlink to /usr/lib in debian 12, means we just stick to
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this seems the problem we have in images/local-path-helper

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't need to modify this file, we need to fix images/local-path-helper

# /usr/lib for all libraries to avoid separating symlinks with the actual binaries
from="${1}"
if [[ $from = /lib/* ]]; then
from="/usr$from"
fi
cp -a --parents "${from}" "${2}"

# recursively follow symlinks
if [[ -L "${1}" ]]; then
stage_file "$(cd "$(dirname "${1}")"; realpath -s "$(readlink "${1}")")" "${2}"
if [[ -L "${from}" ]]; then
stage_file "$(cd "$(dirname "${from}")"; realpath -s "$(readlink "${from}")")" "${2}"
fi
# get the package so we can stage package metadata as well
package="$(file_to_package "${1}")"
# stage the copyright for the file
cp -a --parents "$(package_to_copyright "${package}")" "${2}"
# stage the package status mimicking bazel
# https://github.com/bazelbuild/rules_docker/commit/f5432b813e0a11491cf2bf83ff1a923706b36420
# instead of parsing the control file, we can just get the actual package status with dpkg
dpkg -s "${package}" > "${2}/var/lib/dpkg/status.d/${package}"
package="$(file_to_package "${from}")"

# files like /usr/lib/x86_64-linux-gnu/libc.so.6 will return no package
if [[ "$package" != "" ]]; then
# stage the copyright for the file
cp -a --parents "$(package_to_copyright "${package}")" "${2}"
# stage the package status mimicking bazel
# https://github.com/bazelbuild/rules_docker/commit/f5432b813e0a11491cf2bf83ff1a923706b36420
# instead of parsing the control file, we can just get the actual package status with dpkg
dpkg -s "${package}" > "${2}/var/lib/dpkg/status.d/${package}"
fi
}

# binary_to_libraries identifies the library files needed by the binary $1 with ldd
Expand Down
Loading