Skip to content

Commit 4472438

Browse files
committed
Update debian image and automate dependency installation
1 parent 9cb6caf commit 4472438

File tree

1 file changed

+19
-62
lines changed

1 file changed

+19
-62
lines changed

Dockerfile

+19-62
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,21 @@ ADD . .
2222
RUN GOARCH=$(echo $TARGETPLATFORM | cut -f2 -d '/') GCE_PD_CSI_STAGING_VERSION=$STAGINGVERSION make gce-pd-driver
2323

2424
# Start from Kubernetes Debian base.
25-
FROM gke.gcr.io/debian-base:bullseye-v1.4.3-gke.5 as debian
26-
# Install necessary dependencies
27-
# google_nvme_id script depends on the following packages: nvme-cli, xxd, bash
28-
RUN clean-install util-linux e2fsprogs mount ca-certificates udev xfsprogs nvme-cli xxd bash
25+
26+
FROM gke.gcr.io/debian-base:bookworm-v1.0.3-gke.0 as debian
27+
28+
ARG PKGS="util-linux e2fsprogs mount ca-certificates udev xfsprogs nvme-cli xxd bash"
29+
RUN cd /tmp \
30+
&& apt-get update \
31+
&& apt-get download $(apt-cache depends --recurse -i $PKGS | grep '^\w') \
32+
&& mkdir -p /dpkg/var/lib/dpkg/status.d/ \
33+
&& for deb in *.deb; do \
34+
package_name=$(dpkg-deb -I ${deb} | awk '/^ Package: .*$/ {print $2}'); \
35+
dpkg --ctrl-tarfile $deb | tar -Oxf - ./control > /dpkg/var/lib/dpkg/status.d/${package_name}; \
36+
dpkg --extract $deb /dpkg || exit 10; \
37+
done \
38+
&& find /dpkg/ -type d -empty -delete \
39+
&& rm -r /dpkg/usr/share/doc/
2940

3041
# Since we're leveraging apt to pull in dependencies, we use `gcr.io/distroless/base` because it includes glibc.
3142
FROM gcr.io/distroless/base-debian11 as distroless-base
@@ -40,68 +51,14 @@ ENV LIB_DIR_PREFIX aarch64
4051

4152
FROM distroless-$TARGETARCH as output-image
4253

54+
# Update the base image for debian
55+
COPY --from=debian ["/dpkg/", "/"]
56+
4357
# Copy necessary dependencies into distroless base.
4458
COPY --from=builder /go/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/bin/gce-pd-csi-driver /gce-pd-csi-driver
45-
COPY --from=debian /etc/mke2fs.conf /etc/mke2fs.conf
46-
COPY --from=debian /lib/udev/scsi_id /lib/udev_containerized/scsi_id
47-
COPY --from=debian /bin/mount /bin/mount
48-
COPY --from=debian /bin/umount /bin/umount
49-
COPY --from=debian /sbin/blkid /sbin/blkid
50-
COPY --from=debian /sbin/blockdev /sbin/blockdev
51-
COPY --from=debian /sbin/dumpe2fs /sbin/dumpe2fs
52-
COPY --from=debian /sbin/e* /sbin/
53-
COPY --from=debian /sbin/e2fsck /sbin/e2fsck
54-
COPY --from=debian /sbin/fsck /sbin/fsck
55-
COPY --from=debian /sbin/fsck* /sbin/
56-
COPY --from=debian /sbin/fsck.xfs /sbin/fsck.xfs
57-
COPY --from=debian /sbin/mke2fs /sbin/mke2fs
58-
COPY --from=debian /sbin/mkfs* /sbin/
59-
COPY --from=debian /sbin/resize2fs /sbin/resize2fs
60-
COPY --from=debian /sbin/xfs_repair /sbin/xfs_repair
61-
COPY --from=debian /usr/include/xfs /usr/include/xfs
62-
COPY --from=debian /usr/lib/xfsprogs/xfs* /usr/lib/xfsprogs/
63-
COPY --from=debian /usr/sbin/xfs* /usr/sbin/
64-
# Add dependencies for /lib/udev_containerized/google_nvme_id script
65-
COPY --from=debian /usr/sbin/nvme /usr/sbin/nvme
66-
COPY --from=debian /usr/bin/xxd /usr/bin/xxd
67-
COPY --from=debian /bin/bash /bin/bash
68-
COPY --from=debian /bin/date /bin/date
69-
COPY --from=debian /bin/grep /bin/grep
70-
COPY --from=debian /bin/sed /bin/sed
71-
COPY --from=debian /bin/ln /bin/ln
72-
COPY --from=debian /bin/udevadm /bin/udevadm
73-
74-
# Copy shared libraries into distroless base.
75-
COPY --from=debian /lib/${LIB_DIR_PREFIX}-linux-gnu/libpcre.so.3 \
76-
/lib/${LIB_DIR_PREFIX}-linux-gnu/libselinux.so.1 \
77-
/lib/${LIB_DIR_PREFIX}-linux-gnu/libtinfo.so.6 \
78-
/lib/${LIB_DIR_PREFIX}-linux-gnu/libe2p.so.2 \
79-
/lib/${LIB_DIR_PREFIX}-linux-gnu/libcom_err.so.2 \
80-
/lib/${LIB_DIR_PREFIX}-linux-gnu/libdevmapper.so.1.02.1 \
81-
/lib/${LIB_DIR_PREFIX}-linux-gnu/libext2fs.so.2 \
82-
/lib/${LIB_DIR_PREFIX}-linux-gnu/libgcc_s.so.1 \
83-
/lib/${LIB_DIR_PREFIX}-linux-gnu/liblzma.so.5 \
84-
/lib/${LIB_DIR_PREFIX}-linux-gnu/libreadline.so.8 \
85-
/lib/${LIB_DIR_PREFIX}-linux-gnu/libz.so.1 /lib/${LIB_DIR_PREFIX}-linux-gnu/
86-
87-
COPY --from=debian /usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libblkid.so.1 \
88-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libbsd.so.0 \
89-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libinih.so.1 \
90-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libmount.so.1 \
91-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libudev.so.1 \
92-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libuuid.so.1 \
93-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libacl.so.1 \
94-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libattr.so.1 \
95-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libedit.so.2 \
96-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libicudata.so.67 \
97-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libicui18n.so.67 \
98-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libicuuc.so.67 \
99-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libkmod.so.2 \
100-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libmd.so.0 \
101-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libpcre2-8.so.0 \
102-
/usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libstdc++.so.6 /usr/lib/${LIB_DIR_PREFIX}-linux-gnu/
10359

10460
# Copy NVME support required script and rules into distroless base.
61+
COPY --from=debian /lib/udev/scsi_id /lib/udev_containerized/scsi_id
10562
COPY deploy/kubernetes/udev/google_nvme_id /lib/udev_containerized/google_nvme_id
10663

10764
# Build stage used for validation of the output-image

0 commit comments

Comments
 (0)