Skip to content

Commit 0785965

Browse files
authored
Add multi-arch support (#52)
Supports intel and arm64 (Apple)
1 parent e80ff0f commit 0785965

File tree

2 files changed

+50
-36
lines changed

2 files changed

+50
-36
lines changed

20/Dockerfile

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,16 @@ ENV NPM_CONFIG_LOGLEVEL=info
44
ENV NODE_VERSION=20.19.4
55

66
# gpg keys listed at https://github.com/nodejs/node
7-
RUN set -ex \
8-
&& apt-get update \
9-
&& apt-get install -y ca-certificates curl gnupg dirmngr xz-utils --no-install-recommends \
7+
RUN ARCH= OPENSSL_ARCH= && dpkgArch="$(dpkg --print-architecture)" \
8+
&& case "${dpkgArch##*-}" in \
9+
amd64) ARCH='x64' OPENSSL_ARCH='linux-x86_64';; \
10+
arm64) ARCH='arm64' OPENSSL_ARCH='linux-aarch64';; \
11+
*) echo "unsupported architecture"; exit 1 ;; \
12+
esac \
13+
&& set -ex \
14+
# libatomic1 for arm build
15+
&& apt-get update \
16+
&& apt-get install -y ca-certificates curl dirmngr gnupg libatomic1 xz-utils --no-install-recommends \
1017
&& rm -rf /var/lib/apt/lists/* \
1118
# use pre-existing gpg directory, see https://github.com/nodejs/docker-node/pull/1895#issuecomment-1550389150
1219
&& export GNUPGHOME="$(mktemp -d)" \
@@ -23,14 +30,14 @@ RUN set -ex \
2330
{ gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" && gpg --batch --fingerprint "$key"; } || \
2431
{ gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" && gpg --batch --fingerprint "$key"; } ; \
2532
done \
26-
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
33+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
2734
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
2835
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
2936
&& gpgconf --kill all \
3037
&& rm -rf "$GNUPGHOME" \
31-
&& grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
32-
&& tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
33-
&& rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
38+
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
39+
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 \
40+
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
3441
&& node --version \
3542
&& npm --version
3643

22/Dockerfile

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,41 @@ ENV NPM_CONFIG_LOGLEVEL=info
44
ENV NODE_VERSION=22.18.0
55

66
# gpg keys listed at https://github.com/nodejs/node
7-
RUN set -ex \
8-
&& apt-get update \
9-
&& apt-get install -y ca-certificates curl gnupg dirmngr xz-utils --no-install-recommends \
10-
&& rm -rf /var/lib/apt/lists/* \
11-
# use pre-existing gpg directory, see https://github.com/nodejs/docker-node/pull/1895#issuecomment-1550389150
12-
&& export GNUPGHOME="$(mktemp -d)" \
13-
&& for key in \
14-
5BE8A3F6C8A5C01D106C0AD820B1A390B168D356 \
15-
DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 \
16-
CC68F5A3106FF448322E48ED27F5E38D5B0A215F \
17-
8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
18-
890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 \
19-
C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C \
20-
108F52B48DB57BB0CC439B2997B01419BD92F80A \
21-
A363A499291CBBC940DD62E41F10027AF002F8B0 \
22-
; do \
23-
{ gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" && gpg --batch --fingerprint "$key"; } || \
24-
{ gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" && gpg --batch --fingerprint "$key"; } ; \
25-
done \
26-
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
27-
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
28-
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
29-
&& gpgconf --kill all \
30-
&& rm -rf "$GNUPGHOME" \
31-
&& grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
32-
&& tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
33-
&& rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
34-
&& node --version \
35-
&& npm --version
7+
RUN ARCH= OPENSSL_ARCH= && dpkgArch="$(dpkg --print-architecture)" \
8+
&& case "${dpkgArch##*-}" in \
9+
amd64) ARCH='x64' OPENSSL_ARCH='linux-x86_64';; \
10+
arm64) ARCH='arm64' OPENSSL_ARCH='linux-aarch64';; \
11+
*) echo "unsupported architecture"; exit 1 ;; \
12+
esac \
13+
&& set -ex \
14+
# libatomic1 for arm build
15+
&& apt-get update \
16+
&& apt-get install -y ca-certificates curl dirmngr gnupg libatomic1 xz-utils --no-install-recommends \
17+
&& rm -rf /var/lib/apt/lists/* \
18+
# use pre-existing gpg directory, see https://github.com/nodejs/docker-node/pull/1895#issuecomment-1550389150
19+
&& export GNUPGHOME="$(mktemp -d)" \
20+
&& for key in \
21+
5BE8A3F6C8A5C01D106C0AD820B1A390B168D356 \
22+
DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 \
23+
CC68F5A3106FF448322E48ED27F5E38D5B0A215F \
24+
8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
25+
890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 \
26+
C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C \
27+
108F52B48DB57BB0CC439B2997B01419BD92F80A \
28+
A363A499291CBBC940DD62E41F10027AF002F8B0 \
29+
; do \
30+
{ gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" && gpg --batch --fingerprint "$key"; } || \
31+
{ gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" && gpg --batch --fingerprint "$key"; } ; \
32+
done \
33+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
34+
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
35+
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
36+
&& gpgconf --kill all \
37+
&& rm -rf "$GNUPGHOME" \
38+
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
39+
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 \
40+
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
41+
&& node --version \
42+
&& npm --version
3643

3744
CMD [ "node" ]

0 commit comments

Comments
 (0)