1- FROM alpine:3.20
1+ FROM alpine:3.20 AS remote-builder
22
33ENV LANG=C.UTF-8
44
@@ -10,24 +10,24 @@ RUN ALPINE_GLIBC_BASE_URL="https://github.com/sgerrand/alpine-pkg-glibc/releases
1010 ALPINE_GLIBC_I18N_PACKAGE_FILENAME="glibc-i18n-$ALPINE_GLIBC_PACKAGE_VERSION.apk" && \
1111 apk add --no-cache --virtual=.build-dependencies wget ca-certificates && \
1212 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" && \
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" && \
2222 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" && \
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" && \
2626 mv /etc/nsswitch.conf /etc/nsswitch.conf.bak && \
2727 apk add --no-cache --force-overwrite \
28- "$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
29- "$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
30- "$ALPINE_GLIBC_I18N_PACKAGE_FILENAME" && \
28+ "$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
29+ "$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
30+ "$ALPINE_GLIBC_I18N_PACKAGE_FILENAME" && \
3131 \
3232 mv /etc/nsswitch.conf.bak /etc/nsswitch.conf && \
3333 rm "/etc/apk/keys/sgerrand.rsa.pub" && \
@@ -39,6 +39,82 @@ RUN ALPINE_GLIBC_BASE_URL="https://github.com/sgerrand/alpine-pkg-glibc/releases
3939 rm "/root/.wget-hsts" && \
4040 apk del .build-dependencies && \
4141 rm \
42- "$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
43- "$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
44- "$ALPINE_GLIBC_I18N_PACKAGE_FILENAME"
42+ "$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
43+ "$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
44+ "$ALPINE_GLIBC_I18N_PACKAGE_FILENAME"
45+
46+
47+ # Stage 1: use docker-glibc-builder build glibc.tar.gz
48+ FROM ubuntu:22.04 AS builder
49+ LABEL 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
54+ RUN apt-get -q update \
55+ && apt-get -qy install \
56+ bison \
57+ build-essential \
58+ gawk \
59+ gettext \
60+ openssl \
61+ python3 \
62+ texinfo \
63+ wget
64+ COPY configparams /glibc-build/configparams
65+ COPY builder /builder
66+ RUN /builder
67+
68+ # Stage 2: use docker-alpine-abuild package apk and keys
69+ FROM alpine:3.20 AS packager
70+ ARG GLIBC_VERSION=2.39
71+ ARG ALPINE_VERSION=3.20
72+ ARG TARGETARCH
73+ RUN apk --no-cache add alpine-sdk coreutils cmake sudo bash \
74+ && adduser -G abuild -g "Alpine Package Builder" -s /bin/ash -D builder \
75+ && echo "builder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \
76+ && mkdir /packages \
77+ && chown builder:abuild /packages
78+ COPY ./abuilder /bin/
79+ USER builder
80+ 81+ RUN abuild-keygen -na && sudo cp /home/builder/.abuild/${PACKAGER}-*.rsa.pub /etc/apk/keys/
82+ WORKDIR /home/builder/package
83+ COPY --from=builder /glibc-bin-${GLIBC_VERSION}.tar.gz /home/builder/package/
84+ COPY . /home/builder/package/
85+
86+ ENV REPODEST=/packages
87+ RUN case "$TARGETARCH" in \
88+ amd64) export TARGET_ARCH="x86_64" ;; \
89+ arm64) export TARGET_ARCH="aarch64" ;; \
90+ *) echo "Unsupported architecture: $TARGETARCH" && exit 1 ;; \
91+ esac && \
92+ sed -i "s/^pkgver=.*/pkgver=${GLIBC_VERSION}/" APKBUILD && \
93+ sed -i "s/^arch=.*$/arch=\" ${TARGET_ARCH}\" /" APKBUILD && \
94+ abuild checksum && abuilder -r && cp /packages/builder/${TARGET_ARCH}/*.apk /tmp/
95+
96+ # Stage 3: apk add apk, build alpine-glibc
97+ FROM alpine:3.20
98+ ARG GLIBC_VERSION=2.39
99+ ARG TARGETARCH
100+ ENV GLIBC_VERSION=${GLIBC_VERSION}
101+ 102+
103+ RUN case "$TARGETARCH" in \
104+ amd64) export LD_LINUX_PATH="/lib/ld-linux-x86_64.so.2" ;; \
105+ arm64) export LD_LINUX_PATH="/lib/ld-linux-aarch64.so.1" ;; \
106+ *) 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} && \
115+ 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" ]
0 commit comments