Skip to content

Commit fa7028f

Browse files
committed
refactor: Upgraded glibc to 2.41
1 parent 5ab2b8a commit fa7028f

File tree

5 files changed

+29
-90
lines changed

5 files changed

+29
-90
lines changed

.github/workflows/build-and-push.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@ jobs:
3030
with:
3131
pull: true
3232
push: true
33-
tags: frolvlad/alpine-glibc:latest,frolvlad/alpine-glibc:alpine-3.20_glibc-2.34,frolvlad/alpine-glibc:alpine-3_glibc-2.34,frolvlad/alpine-glibc:alpine-3.20,frolvlad/alpine-glibc:alpine-3,frolvlad/alpine-glibc:glibc-2.34
33+
tags: frolvlad/alpine-glibc:latest,frolvlad/alpine-glibc:alpine-3.20_glibc-2.41,frolvlad/alpine-glibc:alpine-3_glibc-2.41,frolvlad/alpine-glibc:alpine-3.20,frolvlad/alpine-glibc:alpine-3,frolvlad/alpine-glibc:glibc-2.41
3434
cache-from: type=registry,ref=frolvlad/alpine-glibc:latest
3535
cache-to: type=inline

APKBUILD

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
# Maintainer: Sasha Gerrand <[email protected]>
22

33
pkgname="glibc"
4-
pkgver="2.39"
4+
pkgver="2.41"
55
pkgrel="1"
66
pkgdesc="GNU C Library compatibility layer"
77
arch="aarch64"
88
url="https://github.com/sgerrand/alpine-pkg-glibc"
99
license="LGPL"
10-
source="./glibc-bin-$pkgver.tar.gz
10+
source="./glibc-bin.tar.gz
1111
ld.so.conf"
1212
subpackages="$pkgname-bin $pkgname-dev $pkgname-i18n"
1313
triggers="$pkgname-bin.trigger=/lib:/usr/lib:/usr/glibc-compat/lib"
1414

1515
package() {
16-
mkdir -p "$pkgdir/lib" "$pkgdir/usr/glibc-compat/lib/locale" "$pkgdir"/usr/glibc-compat/lib64 "$pkgdir"/etc
16+
mkdir -p "$pkgdir"/lib "$pkgdir"/usr/glibc-compat/lib/locale "$pkgdir"/usr/glibc-compat/lib64 "$pkgdir"/etc
1717
cp -a "$srcdir"/usr "$pkgdir"
1818
cp "$srcdir"/ld.so.conf "$pkgdir"/usr/glibc-compat/etc/ld.so.conf
1919
rm "$pkgdir"/usr/glibc-compat/etc/rpc
@@ -28,20 +28,20 @@ package() {
2828
# set up symbolic links based on architecture
2929
case "$arch" in
3030
x86_64)
31-
ln -s /usr/glibc-compat/lib/ld-linux-x86_64.so.2 ${pkgdir}/lib/ld-linux-x86_64.so.2
32-
ln -s /usr/glibc-compat/lib/ld-linux-x86_64.so.2 ${pkgdir}/usr/glibc-compat/lib64/ld-linux-x86_64.so.2
31+
ln -s /usr/glibc-compat/lib/ld-linux-x86_64.so.2 "$pkgdir"/lib/ld-linux-x86_64.so.2
32+
ln -s /usr/glibc-compat/lib/ld-linux-x86_64.so.2 "$pkgdir"/usr/glibc-compat/lib64/ld-linux-x86_64.so.2
3333
;;
3434
aarch64)
35-
ln -s /usr/glibc-compat/lib/ld-linux-aarch64.so.1 ${pkgdir}/lib/ld-linux-aarch64.so.1
36-
ln -s /usr/glibc-compat/lib/ld-linux-aarch64.so.1 ${pkgdir}/usr/glibc-compat/lib64/ld-linux-aarch64.so.1
35+
ln -s /usr/glibc-compat/lib/ld-linux-aarch64.so.1 "$pkgdir"/lib/ld-linux-aarch64.so.1
36+
ln -s /usr/glibc-compat/lib/ld-linux-aarch64.so.1 "$pkgdir"/usr/glibc-compat/lib64/ld-linux-aarch64.so.1
3737
;;
3838
*)
3939
echo "not support: $arch"
4040
exit 1
4141
;;
4242
esac
4343

44-
ln -s /usr/glibc-compat/etc/ld.so.cache ${pkgdir}/etc/ld.so.cache
44+
ln -s /usr/glibc-compat/etc/ld.so.cache "${pkgdir}"/etc/ld.so.cache
4545
}
4646

4747
bin() {

Dockerfile

Lines changed: 18 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,6 @@
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
482
FROM ubuntu:22.04 AS builder
493
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
544
RUN 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
6515
COPY 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
6920
FROM alpine:3.20 AS packager
70-
ARG GLIBC_VERSION=2.39
71-
ARG ALPINE_VERSION=3.20
72-
ARG TARGETARCH
7321
RUN 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/
7927
USER builder
8028
ENV PACKAGER="[email protected]"
8129
RUN abuild-keygen -na && sudo cp /home/builder/.abuild/${PACKAGER}-*.rsa.pub /etc/apk/keys/
30+
8231
WORKDIR /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/
8433
COPY . /home/builder/package/
8534

86-
ENV REPODEST=/packages
35+
ARG GLIBC_VERSION=2.41
36+
ARG TARGETARCH
8737
RUN 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
9951
ARG TARGETARCH
100-
ENV GLIBC_VERSION=${GLIBC_VERSION}
101-
ENV PACKAGER="[email protected]"
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

abuilder

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env ash
22

3-
set -e
3+
set -ex
44

55
main() {
66
RSA_FILE=$(ls /home/builder/.abuild/${PACKAGER}-*.rsa | head -n 1)

builder

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,8 @@ main() {
1919
--enable-multi-arch \
2020
--enable-stack-protector=strong
2121
make --jobs=4 && make install
22-
tar --dereference --hard-dereference -zcf "/glibc-bin-$version.tar.gz" "$prefix"
22+
tar --dereference --hard-dereference -zcf "/glibc-bin.tar.gz" "$prefix"
2323
} >&2
24-
25-
# [[ $STDOUT ]] && cat "/glibc-bin-$version.tar.gz"
2624
}
2725

2826
main "$@"

0 commit comments

Comments
 (0)