@@ -22,10 +22,21 @@ ADD . .
22
22
RUN GOARCH=$(echo $TARGETPLATFORM | cut -f2 -d '/' ) GCE_PD_CSI_STAGING_VERSION=$STAGINGVERSION make gce-pd-driver
23
23
24
24
# 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/
29
40
30
41
# Since we're leveraging apt to pull in dependencies, we use `gcr.io/distroless/base` because it includes glibc.
31
42
FROM gcr.io/distroless/base-debian11 as distroless-base
@@ -40,68 +51,14 @@ ENV LIB_DIR_PREFIX aarch64
40
51
41
52
FROM distroless-$TARGETARCH as output-image
42
53
54
+ # Update the base image for debian
55
+ COPY --from=debian ["/dpkg/" , "/" ]
56
+
43
57
# Copy necessary dependencies into distroless base.
44
58
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/
103
59
104
60
# Copy NVME support required script and rules into distroless base.
61
+ COPY --from=debian /lib/udev/scsi_id /lib/udev_containerized/scsi_id
105
62
COPY deploy/kubernetes/udev/google_nvme_id /lib/udev_containerized/google_nvme_id
106
63
107
64
# Build stage used for validation of the output-image
0 commit comments