1- FROM alpine:3.20 AS remote-builder
2-
3- ENV LANG=C.UTF-8
4-
5- # NOTE: Glibc 2.35 package is broken: https://github.com/sgerrand/alpine-pkg-glibc/issues/176, so we stick to 2.34 for now
6- RUN ALPINE_GLIBC_BASE_URL="https://github.com/sgerrand/alpine-pkg-glibc/releases/download" && \
7- ALPINE_GLIBC_PACKAGE_VERSION="2.34-r0" && \
8- ALPINE_GLIBC_BASE_PACKAGE_FILENAME="glibc-$ALPINE_GLIBC_PACKAGE_VERSION.apk" && \
9- ALPINE_GLIBC_BIN_PACKAGE_FILENAME="glibc-bin-$ALPINE_GLIBC_PACKAGE_VERSION.apk" && \
10- ALPINE_GLIBC_I18N_PACKAGE_FILENAME="glibc-i18n-$ALPINE_GLIBC_PACKAGE_VERSION.apk" && \
11- apk add --no-cache --virtual=.build-dependencies wget ca-certificates && \
12- echo \
13- "-----BEGIN PUBLIC KEY-----\
14- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApZ2u1KJKUu/fW4A25y9m\
15- y70AGEa/J3Wi5ibNVGNn1gT1r0VfgeWd0pUybS4UmcHdiNzxJPgoWQhV2SSW1JYu\
16- tOqKZF5QSN6X937PTUpNBjUvLtTQ1ve1fp39uf/lEXPpFpOPL88LKnDBgbh7wkCp\
17- m2KzLVGChf83MS0ShL6G9EQIAUxLm99VpgRjwqTQ/KfzGtpke1wqws4au0Ab4qPY\
18- KXvMLSPLUp7cfulWvhmZSegr5AdhNw5KNizPqCJT8ZrGvgHypXyiFvvAH5YRtSsc\
19- Zvo9GI2e2MaZyo9/lvb+LbLEJZKEQckqRj4P26gmASrZEPStwc+yqy1ShHLA0j6m\
20- 1QIDAQAB\
21- -----END PUBLIC KEY-----" | sed 's/ */\n /g' > "/etc/apk/keys/sgerrand.rsa.pub" && \
22- wget \
23- "$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
24- "$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
25- "$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_I18N_PACKAGE_FILENAME" && \
26- mv /etc/nsswitch.conf /etc/nsswitch.conf.bak && \
27- apk add --no-cache --force-overwrite \
28- "$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
29- "$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
30- "$ALPINE_GLIBC_I18N_PACKAGE_FILENAME" && \
31- \
32- mv /etc/nsswitch.conf.bak /etc/nsswitch.conf && \
33- rm "/etc/apk/keys/sgerrand.rsa.pub" && \
34- (/usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 "$LANG" || true) && \
35- echo "export LANG=$LANG" > /etc/profile.d/locale.sh && \
36- \
37- apk del glibc-i18n && \
38- \
39- rm "/root/.wget-hsts" && \
40- apk del .build-dependencies && \
41- rm \
42- "$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
43- "$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
44- "$ALPINE_GLIBC_I18N_PACKAGE_FILENAME"
45-
46-
471# Stage 1: use docker-glibc-builder build glibc.tar.gz
482FROM ubuntu:22.04 AS builder
493LABEL maintainer=
"Sasha Gerrand <[email protected] >" 50- ARG GLIBC_VERSION=2.39
51- ENV DEBIAN_FRONTEND=noninteractive \
52- GLIBC_VERSION=${GLIBC_VERSION} \
53- PREFIX_DIR=/usr/glibc-compat
544RUN apt-get -q update \
555 && apt-get -qy install \
566 bison \
@@ -61,15 +11,13 @@ RUN apt-get -q update \
6111 python3 \
6212 texinfo \
6313 wget
64- COPY configparams /glibc-build/configparams
14+ COPY configparams /glibc-build/configparams
6515COPY builder /builder
66- RUN /builder
16+ ARG GLIBC_VERSION=2.41
17+ RUN env PREFIX_DIR=/usr/glibc-compat /builder
6718
6819# Stage 2: use docker-alpine-abuild package apk and keys
6920FROM alpine:3.20 AS packager
70- ARG GLIBC_VERSION=2.39
71- ARG ALPINE_VERSION=3.20
72- ARG TARGETARCH
7321RUN apk --no-cache add alpine-sdk coreutils cmake sudo bash \
7422 && adduser -G abuild -g "Alpine Package Builder" -s /bin/ash -D builder \
7523 && echo "builder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \
@@ -79,42 +27,35 @@ COPY ./abuilder /bin/
7927USER builder
80288129RUN abuild-keygen -na && sudo cp /home/builder/.abuild/${PACKAGER}-*.rsa.pub /etc/apk/keys/
30+
8231WORKDIR /home/builder/package
83- COPY --from=builder /glibc-bin-${GLIBC_VERSION} .tar.gz /home/builder/package/
32+ COPY --from=builder /glibc-bin.tar.gz /home/builder/package/
8433COPY . /home/builder/package/
8534
86- ENV REPODEST=/packages
35+ ARG GLIBC_VERSION=2.41
36+ ARG TARGETARCH
8737RUN case "$TARGETARCH" in \
8838 amd64) export TARGET_ARCH="x86_64" ;; \
8939 arm64) export TARGET_ARCH="aarch64" ;; \
9040 *) echo "Unsupported architecture: $TARGETARCH" && exit 1 ;; \
9141 esac && \
9242 sed -i "s/^pkgver=.*/pkgver=${GLIBC_VERSION}/" APKBUILD && \
9343 sed -i "s/^arch=.*$/arch=\" ${TARGET_ARCH}\" /" APKBUILD && \
94- abuild checksum && abuilder -r && cp /packages/builder/${TARGET_ARCH}/*.apk /tmp/
44+ abuild checksum && \
45+ env REPODEST=/packages abuilder -r && \
46+ cp /packages/builder/${TARGET_ARCH}/*.apk /tmp/
9547
9648# Stage 3: apk add apk, build alpine-glibc
97- FROM alpine:3.20
98- ARG GLIBC_VERSION=2.39
49+ FROM alpine:3.21
50+ ARG GLIBC_VERSION=2.41
9951ARG TARGETARCH
100- ENV GLIBC_VERSION=${GLIBC_VERSION}
101- 102-
103- RUN case "$TARGETARCH" in \
52+ RUN --mount=from=packager,src=/tmp/,dst=/tmp/ \
53+ --mount=from=packager,src=/etc/apk/keys,dst=/etc/apk/keys/ \
54+ case "$TARGETARCH" in \
10455 amd64) export LD_LINUX_PATH="/lib/ld-linux-x86_64.so.2" ;; \
10556 arm64) export LD_LINUX_PATH="/lib/ld-linux-aarch64.so.1" ;; \
10657 *) echo "Unsupported architecture: $TARGETARCH" && exit 1 ;; \
107- esac
108-
109- # use the key used during the build process
110- COPY --from=packager /tmp/*.apk /tmp/
111- COPY --from=packager /home/builder/.abuild/${PACKAGER}-*.pub /etc/apk/keys/
112-
113- # install glibc APK
114- RUN apk add --no-cache gcompat && rm -rf ${LD_LINUX_PATH} && \
58+ esac && \
59+ apk add --no-cache gcompat && rm ${LD_LINUX_PATH} && \
11560 apk add --no-cache --force-overwrite /tmp/glibc-${GLIBC_VERSION}-*.apk && \
116- apk add --no-cache /tmp/glibc-bin-${GLIBC_VERSION}-*.apk && \
117- apk add --no-cache /tmp/glibc-i18n-${GLIBC_VERSION}-*.apk && \
118- rm -rf /tmp/*.apk
119-
120- CMD ["/bin/sh" ]
61+ apk add --no-cache /tmp/glibc-bin-${GLIBC_VERSION}-*.apk
0 commit comments