@@ -30,37 +30,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
3030 && update-ca-certificates \
3131 && rm -rf /var/lib/apt/lists/*
3232
33- # Install cross-compiler for ARM64 if building for arm64 on an amd64 host
34- RUN if [ "$TARGETARCH" = "arm64" ] && [ "$BUILDARCH" = "amd64" ]; then \
35- dpkg --add-architecture arm64 && \
36- apt-get update && apt-get install -y --no-install-recommends \
37- gcc-aarch64-linux-gnu librbd-dev:arm64 librados-dev:arm64 libc6-dev:arm64; \
38- fi
39-
40- # Install cross-compiler for AMD64 if building for amd64 on an arm64 host
41- RUN if [ "$TARGETARCH" = "amd64" ] && [ "$BUILDARCH" = "arm64" ]; then \
42- apt update && \
43- apt-get install -y --no-install-recommends \
44- gcc-x86-64-linux-gnu; \
45- fi
4633
47- # Set compiler and linker flags based on target architecture
48- ENV CC= ""
49- ENV CGO_LDFLAGS= ""
34+ RUN --mount=type=cache, target=/root/.cache/go-build \
35+ --mount=type=cache,target=/go/pkg \
36+ CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags= "-s -w" -a -o libvirt-provider ./cmd/libvirt-provider/main.go
5037
51- RUN if [ "$TARGETARCH" != "$BUILDARCH" ] && [ "$TARGETARCH" = "arm64" ]; then \
52- export CC="/usr/bin/aarch64-linux-gnu-gcc" ; \
53- export CGO_LDFLAGS="-L/usr/lib/aarch64-linux-gnu -Wl,-lrados -Wl,-lrbd" ; \
54- elif [ "$TARGETARCH" != "$BUILDARCH" ] && [ "$TARGETARCH" = "amd64" ]; then \
55- export CC="/usr/bin/x86_64-linux-gnu-gcc" ; \
56- export CGO_LDFLAGS="-L/usr/lib/x86_64-linux-gnu -Wl,-lrados -Wl,-lrbd" ; \
57- else \
58- export CC="/usr/bin/gcc" ; \
59- export CGO_LDFLAGS="" ; \
60- fi && \
61- CGO_ENABLED=1 GOOS=$TARGETOS GOARCH=$TARGETARCH \
62- CC="$CC" CGO_LDFLAGS="$CGO_LDFLAGS" \
63- go build -ldflags="-s -w -linkmode=external" -o libvirt-provider ./cmd/libvirt-provider/main.go
6438
6539# Install irictl-machine
6640RUN --mount=type=cache,target=/root/.cache/go-build \
@@ -75,63 +49,8 @@ RUN if [ "$TARGETARCH" = "$BUILDARCH" ]; then \
7549 mv /go/bin/linux_$TARGETARCH/irictl-machine /workspace/irictl-machine; \
7650 fi
7751
78- # Since we're leveraging apt to pull in dependencies, we use `gcr.io/distroless/base` because it includes glibc.
79- FROM gcr.io/distroless/base-debian11 AS distroless-base
80-
81- # The distroless amd64 image has a target triplet of x86_64
82- FROM distroless-base AS distroless-amd64
83- ENV LIB_DIR_PREFIX=x86_64
84- ENV LIB_DIR_PREFIX_MINUS=x86-64
85- ENV LIB_DIR_SUFFIX_NUMBER=2
86- ENV LIB_DIR=lib64
87-
88- # The distroless arm64 image has a target triplet of aarch64
89- FROM distroless-base AS distroless-arm64
90- ENV LIB_DIR_PREFIX=aarch64
91- ENV LIB_DIR_PREFIX_MINUS=aarch64
92- ENV LIB_DIR_SUFFIX_NUMBER=1
93- ENV LIB_DIR=lib
94-
95- FROM busybox:1.37.0-uclibc AS busybox
96- FROM distroless-$TARGETARCH AS libvirt-provider
97- WORKDIR /
98- COPY --from=busybox /bin/sh /bin/sh
99- COPY --from=busybox /bin/mkdir /bin/mkdir
100- COPY --from=builder /lib/${LIB_DIR_PREFIX}-linux-gnu/librados.so.2 \
101- /lib/${LIB_DIR_PREFIX}-linux-gnu/librbd.so.1 \
102- /lib/${LIB_DIR_PREFIX}-linux-gnu/libc.so.6 \
103- /lib/${LIB_DIR_PREFIX}-linux-gnu/libfmt.so.9 \
104- /lib/${LIB_DIR_PREFIX}-linux-gnu/libstdc++.so.6 \
105- /lib/${LIB_DIR_PREFIX}-linux-gnu/libgcc_s.so.1 \
106- /lib/${LIB_DIR_PREFIX}-linux-gnu/libssl.so.3 \
107- /lib/${LIB_DIR_PREFIX}-linux-gnu/libcryptsetup.so.12 \
108- /lib/${LIB_DIR_PREFIX}-linux-gnu/libcrypto.so.3 \
109- /lib/${LIB_DIR_PREFIX}-linux-gnu/libresolv.so.2 \
110- /lib/${LIB_DIR_PREFIX}-linux-gnu/libboost_thread.so.1.74.0 \
111- /lib/${LIB_DIR_PREFIX}-linux-gnu/libboost_iostreams.so.1.74.0 \
112- /lib/${LIB_DIR_PREFIX}-linux-gnu/libblkid.so.1 \
113- /lib/${LIB_DIR_PREFIX}-linux-gnu/libudev.so.1 \
114- /lib/${LIB_DIR_PREFIX}-linux-gnu/libibverbs.so.1 \
115- /lib/${LIB_DIR_PREFIX}-linux-gnu/librdmacm.so.1 \
116- /lib/${LIB_DIR_PREFIX}-linux-gnu/libm.so.6 \
117- /lib/${LIB_DIR_PREFIX}-linux-gnu/libuuid.so.1 \
118- /lib/${LIB_DIR_PREFIX}-linux-gnu/libdevmapper.so.1.02.1 \
119- /lib/${LIB_DIR_PREFIX}-linux-gnu/libargon2.so.1 \
120- /lib/${LIB_DIR_PREFIX}-linux-gnu/libjson-c.so.5 \
121- /lib/${LIB_DIR_PREFIX}-linux-gnu/libz.so.1 \
122- /lib/${LIB_DIR_PREFIX}-linux-gnu/libbz2.so.1.0 \
123- /lib/${LIB_DIR_PREFIX}-linux-gnu/liblzma.so.5 \
124- /lib/${LIB_DIR_PREFIX}-linux-gnu/libzstd.so.1 \
125- /lib/${LIB_DIR_PREFIX}-linux-gnu/libnl-route-3.so.200 \
126- /lib/${LIB_DIR_PREFIX}-linux-gnu/libnl-3.so.200 \
127- /lib/${LIB_DIR_PREFIX}-linux-gnu/libselinux.so.1 \
128- /lib/${LIB_DIR_PREFIX}-linux-gnu/libpthread.so.0 \
129- /lib/${LIB_DIR_PREFIX}-linux-gnu/libpcre2-8.so.0 /lib/${LIB_DIR_PREFIX}-linux-gnu/
130- RUN mkdir -p /${LIB_DIR}
131- COPY --from=builder /${LIB_DIR}/ld-linux-${LIB_DIR_PREFIX_MINUS}.so.${LIB_DIR_SUFFIX_NUMBER} /${LIB_DIR}/
132- RUN mkdir -p /usr/lib/${LIB_DIR_PREFIX}-linux-gnu/ceph/
133- COPY --from=builder /usr/lib/${LIB_DIR_PREFIX}-linux-gnu/ceph/libceph-common.so.2 /usr/lib/${LIB_DIR_PREFIX}-linux-gnu/ceph
134- COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
52+
53+
13554
13655COPY --from=builder /workspace/libvirt-provider /libvirt-provider
13756COPY --from=builder /workspace/irictl-machine /irictl-machine
0 commit comments