Skip to content

Commit fd82e29

Browse files
committed
Install binaries under $SWIFT_PREFIX/usr/bin instead of /usr/bin
This prevents some binaries from being unintentionally overwritten by the system package manager. Symbolic links are also placed in the old directory (`/usr/bin`) for compatibility.
1 parent fad056f commit fd82e29

File tree

27 files changed

+307
-71
lines changed

27 files changed

+307
-71
lines changed

6.0/amazonlinux/2/Dockerfile

+11-3
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,14 @@ ARG SWIFT_PLATFORM=amazonlinux2
3232
ARG SWIFT_BRANCH=swift-6.0.3-release
3333
ARG SWIFT_VERSION=swift-6.0.3-RELEASE
3434
ARG SWIFT_WEBROOT=https://download.swift.org
35+
ARG SWIFT_PREFIX=/opt/swift/6.0.3
3536

3637
ENV SWIFT_SIGNING_KEY=$SWIFT_SIGNING_KEY \
3738
SWIFT_PLATFORM=$SWIFT_PLATFORM \
3839
SWIFT_BRANCH=$SWIFT_BRANCH \
3940
SWIFT_VERSION=$SWIFT_VERSION \
40-
SWIFT_WEBROOT=$SWIFT_WEBROOT
41+
SWIFT_WEBROOT=$SWIFT_WEBROOT \
42+
SWIFT_PREFIX=$SWIFT_PREFIX
4143

4244
RUN set -e; \
4345
ARCH_NAME="$(rpm --eval '%{_arch}')"; \
@@ -61,9 +63,15 @@ RUN set -e; \
6163
&& gpg --batch --quiet --keyserver keyserver.ubuntu.com --recv-keys "$SWIFT_SIGNING_KEY" \
6264
&& gpg --batch --verify swift.tar.gz.sig swift.tar.gz \
6365
# - Unpack the toolchain, set libs permissions, and clean up.
64-
&& tar -xzf swift.tar.gz --directory / --strip-components=1 \
65-
&& chmod -R o+r /usr/lib/swift \
66+
&& mkdir -p $SWIFT_PREFIX \
67+
&& tar -xzf swift.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
68+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
69+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
70+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
6671
&& rm -rf "$GNUPGHOME" swift.tar.gz.sig swift.tar.gz
6772

73+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
74+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
75+
6876
# Print Installed Swift Version
6977
RUN swift --version

6.0/debian/12/Dockerfile

+11-3
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ ARG SWIFT_PLATFORM=debian12
3131
ARG SWIFT_BRANCH=swift-6.0.3-release
3232
ARG SWIFT_VERSION=swift-6.0.3-RELEASE
3333
ARG SWIFT_WEBROOT=https://download.swift.org
34+
ARG SWIFT_PREFIX=/opt/swift/6.0.3
3435

3536
ENV SWIFT_SIGNING_KEY=$SWIFT_SIGNING_KEY \
3637
SWIFT_PLATFORM=$SWIFT_PLATFORM \
3738
SWIFT_BRANCH=$SWIFT_BRANCH \
3839
SWIFT_VERSION=$SWIFT_VERSION \
39-
SWIFT_WEBROOT=$SWIFT_WEBROOT
40+
SWIFT_WEBROOT=$SWIFT_WEBROOT \
41+
SWIFT_PREFIX=$SWIFT_PREFIX
4042

4143
RUN set -e; \
4244
ARCH_NAME="$(dpkg --print-architecture)"; \
@@ -62,10 +64,16 @@ RUN set -e; \
6264
&& gpg --batch --quiet --keyserver keyserver.ubuntu.com --recv-keys "$SWIFT_SIGNING_KEY" \
6365
&& gpg --batch --verify swift.tar.gz.sig swift.tar.gz \
6466
# - Unpack the toolchain, set libs permissions, and clean up.
65-
&& tar -xzf swift.tar.gz --directory / --strip-components=1 \
66-
&& chmod -R o+r /usr/lib/swift \
67+
&& mkdir -p $SWIFT_PREFIX \
68+
&& tar -xzf swift.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
69+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
70+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
71+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
6772
&& rm -rf "$GNUPGHOME" swift.tar.gz.sig swift.tar.gz \
6873
&& apt-get purge --auto-remove -y curl gpg
6974

75+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
76+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
77+
7078
# Print Installed Swift Version
7179
RUN swift --version

6.0/fedora/39/Dockerfile

+11-3
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,14 @@ ARG SWIFT_PLATFORM=fedora39
2828
ARG SWIFT_BRANCH=swift-6.0.3-release
2929
ARG SWIFT_VERSION=swift-6.0.3-RELEASE
3030
ARG SWIFT_WEBROOT=https://download.swift.org
31+
ARG SWIFT_PREFIX=/opt/swift/6.0.3
3132

3233
ENV SWIFT_SIGNING_KEY=$SWIFT_SIGNING_KEY \
3334
SWIFT_PLATFORM=$SWIFT_PLATFORM \
3435
SWIFT_BRANCH=$SWIFT_BRANCH \
3536
SWIFT_VERSION=$SWIFT_VERSION \
36-
SWIFT_WEBROOT=$SWIFT_WEBROOT
37+
SWIFT_WEBROOT=$SWIFT_WEBROOT \
38+
SWIFT_PREFIX=$SWIFT_PREFIX
3739

3840
RUN set -e; \
3941
ARCH_NAME="$(rpm --eval '%{_arch}')"; \
@@ -57,9 +59,15 @@ RUN set -e; \
5759
&& gpg --batch --quiet --keyserver keyserver.ubuntu.com --recv-keys "$SWIFT_SIGNING_KEY" \
5860
&& gpg --batch --verify swift.tar.gz.sig swift.tar.gz \
5961
# - Unpack the toolchain, set libs permissions, and clean up.
60-
&& tar -xzf swift.tar.gz --directory / --strip-components=1 \
61-
&& chmod -R o+r /usr/lib/swift \
62+
&& mkdir -p $SWIFT_PREFIX \
63+
&& tar -xzf swift.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
64+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
65+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
66+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
6267
&& rm -rf "$GNUPGHOME" swift.tar.gz.sig swift.tar.gz
6368

69+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
70+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
71+
6472
# Print Installed Swift Version
6573
RUN swift --version

6.0/rhel-ubi/9/Dockerfile

+11-3
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@ ARG SWIFT_PLATFORM=ubi9
2626
ARG SWIFT_BRANCH=swift-6.0.3-release
2727
ARG SWIFT_VERSION=swift-6.0.3-RELEASE
2828
ARG SWIFT_WEBROOT=https://download.swift.org
29+
ARG SWIFT_PREFIX=/opt/swift/6.0.3
2930

3031
ENV SWIFT_SIGNING_KEY=$SWIFT_SIGNING_KEY \
3132
SWIFT_PLATFORM=$SWIFT_PLATFORM \
3233
SWIFT_BRANCH=$SWIFT_BRANCH \
3334
SWIFT_VERSION=$SWIFT_VERSION \
34-
SWIFT_WEBROOT=$SWIFT_WEBROOT
35+
SWIFT_WEBROOT=$SWIFT_WEBROOT \
36+
SWIFT_PREFIX=$SWIFT_PREFIX
3537

3638
RUN set -e; \
3739
ARCH_NAME="$(rpm --eval '%{_arch}')"; \
@@ -55,9 +57,15 @@ RUN set -e; \
5557
&& gpg --batch --quiet --keyserver keyserver.ubuntu.com --recv-keys "$SWIFT_SIGNING_KEY" \
5658
&& gpg --batch --verify swift.tar.gz.sig swift.tar.gz \
5759
# - Unpack the toolchain, set libs permissions, and clean up.
58-
&& tar -xzf swift.tar.gz --directory / --strip-components=1 \
59-
&& chmod -R o+r /usr/lib/swift \
60+
&& mkdir -p $SWIFT_PREFIX \
61+
&& tar -xzf swift.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
62+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
63+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
64+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
6065
&& rm -rf "$GNUPGHOME" swift.tar.gz.sig swift.tar.gz
6166

67+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
68+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
69+
6270
# Print Installed Swift Version
6371
RUN swift --version

6.0/ubuntu/20.04/Dockerfile

+11-3
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,14 @@ ARG SWIFT_PLATFORM=ubuntu20.04
3232
ARG SWIFT_BRANCH=swift-6.0.3-release
3333
ARG SWIFT_VERSION=swift-6.0.3-RELEASE
3434
ARG SWIFT_WEBROOT=https://download.swift.org
35+
ARG SWIFT_PREFIX=/opt/swift/6.0.3
3536

3637
ENV SWIFT_SIGNING_KEY=$SWIFT_SIGNING_KEY \
3738
SWIFT_PLATFORM=$SWIFT_PLATFORM \
3839
SWIFT_BRANCH=$SWIFT_BRANCH \
3940
SWIFT_VERSION=$SWIFT_VERSION \
40-
SWIFT_WEBROOT=$SWIFT_WEBROOT
41+
SWIFT_WEBROOT=$SWIFT_WEBROOT \
42+
SWIFT_PREFIX=$SWIFT_PREFIX
4143

4244
RUN set -e; \
4345
ARCH_NAME="$(dpkg --print-architecture)"; \
@@ -63,10 +65,16 @@ RUN set -e; \
6365
&& gpg --batch --quiet --keyserver keyserver.ubuntu.com --recv-keys "$SWIFT_SIGNING_KEY" \
6466
&& gpg --batch --verify swift.tar.gz.sig swift.tar.gz \
6567
# - Unpack the toolchain, set libs permissions, and clean up.
66-
&& tar -xzf swift.tar.gz --directory / --strip-components=1 \
67-
&& chmod -R o+r /usr/lib/swift \
68+
&& mkdir -p $SWIFT_PREFIX \
69+
&& tar -xzf swift.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
70+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
71+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
72+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
6873
&& rm -rf "$GNUPGHOME" swift.tar.gz.sig swift.tar.gz \
6974
&& apt-get purge --auto-remove -y curl
7075

76+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
77+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
78+
7179
# Print Installed Swift Version
7280
RUN swift --version

6.0/ubuntu/22.04/Dockerfile

+11-3
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@ ARG SWIFT_PLATFORM=ubuntu22.04
3333
ARG SWIFT_BRANCH=swift-6.0.3-release
3434
ARG SWIFT_VERSION=swift-6.0.3-RELEASE
3535
ARG SWIFT_WEBROOT=https://download.swift.org
36+
ARG SWIFT_PREFIX=/opt/swift/6.0.3
3637

3738
ENV SWIFT_SIGNING_KEY=$SWIFT_SIGNING_KEY \
3839
SWIFT_PLATFORM=$SWIFT_PLATFORM \
3940
SWIFT_BRANCH=$SWIFT_BRANCH \
4041
SWIFT_VERSION=$SWIFT_VERSION \
41-
SWIFT_WEBROOT=$SWIFT_WEBROOT
42+
SWIFT_WEBROOT=$SWIFT_WEBROOT \
43+
SWIFT_PREFIX=$SWIFT_PREFIX
4244

4345
RUN set -e; \
4446
ARCH_NAME="$(dpkg --print-architecture)"; \
@@ -64,10 +66,16 @@ RUN set -e; \
6466
&& gpg --batch --quiet --keyserver keyserver.ubuntu.com --recv-keys "$SWIFT_SIGNING_KEY" \
6567
&& gpg --batch --verify swift.tar.gz.sig swift.tar.gz \
6668
# - Unpack the toolchain, set libs permissions, and clean up.
67-
&& tar -xzf swift.tar.gz --directory / --strip-components=1 \
68-
&& chmod -R o+r /usr/lib/swift \
69+
&& mkdir -p $SWIFT_PREFIX \
70+
&& tar -xzf swift.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
71+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
72+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
73+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
6974
&& rm -rf "$GNUPGHOME" swift.tar.gz.sig swift.tar.gz \
7075
&& apt-get purge --auto-remove -y curl
7176

77+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
78+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
79+
7280
# Print Installed Swift Version
7381
RUN swift --version

6.0/ubuntu/24.04/Dockerfile

+11-3
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@ ARG SWIFT_PLATFORM=ubuntu24.04
3333
ARG SWIFT_BRANCH=swift-6.0.3-release
3434
ARG SWIFT_VERSION=swift-6.0.3-RELEASE
3535
ARG SWIFT_WEBROOT=https://download.swift.org
36+
ARG SWIFT_PREFIX=/opt/swift/6.0.3
3637

3738
ENV SWIFT_SIGNING_KEY=$SWIFT_SIGNING_KEY \
3839
SWIFT_PLATFORM=$SWIFT_PLATFORM \
3940
SWIFT_BRANCH=$SWIFT_BRANCH \
4041
SWIFT_VERSION=$SWIFT_VERSION \
41-
SWIFT_WEBROOT=$SWIFT_WEBROOT
42+
SWIFT_WEBROOT=$SWIFT_WEBROOT \
43+
SWIFT_PREFIX=$SWIFT_PREFIX
4244

4345
RUN set -e; \
4446
ARCH_NAME="$(dpkg --print-architecture)"; \
@@ -64,10 +66,16 @@ RUN set -e; \
6466
&& gpg --batch --quiet --keyserver keyserver.ubuntu.com --recv-keys "$SWIFT_SIGNING_KEY" \
6567
&& gpg --batch --verify swift.tar.gz.sig swift.tar.gz \
6668
# - Unpack the toolchain, set libs permissions, and clean up.
67-
&& tar -xzf swift.tar.gz --directory / --strip-components=1 \
68-
&& chmod -R o+r /usr/lib/swift \
69+
&& mkdir -p $SWIFT_PREFIX \
70+
&& tar -xzf swift.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
71+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
72+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
73+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
6974
&& rm -rf "$GNUPGHOME" swift.tar.gz.sig swift.tar.gz \
7075
&& apt-get purge --auto-remove -y curl
7176

77+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
78+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
79+
7280
# Print Installed Swift Version
7381
RUN swift --version

nightly-6.1/amazonlinux/2/Dockerfile

+12-3
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,16 @@ RUN yum -y install \
3333
ARG SWIFT_SIGNING_KEY=E813C892820A6FA13755B268F167DF1ACF9CE069
3434
ARG SWIFT_PLATFORM=amazonlinux
3535
ARG OS_MAJOR_VER=2
36+
ARG SWIFT_VERSION=6.1
3637
ARG SWIFT_WEBROOT=https://download.swift.org/swift-6.1-branch
38+
ARG SWIFT_PREFIX=/opt/swift/${SWIFT_VERSION}
3739

3840
ENV SWIFT_SIGNING_KEY=$SWIFT_SIGNING_KEY \
3941
SWIFT_PLATFORM=$SWIFT_PLATFORM \
4042
OS_MAJOR_VER=$OS_MAJOR_VER \
4143
OS_VER=$SWIFT_PLATFORM$OS_MAJOR_VER \
42-
SWIFT_WEBROOT="$SWIFT_WEBROOT/$SWIFT_PLATFORM$OS_MAJOR_VER"
44+
SWIFT_WEBROOT="$SWIFT_WEBROOT/$SWIFT_PLATFORM$OS_MAJOR_VER" \
45+
SWIFT_PREFIX=$SWIFT_PREFIX
4346

4447
RUN echo "${SWIFT_WEBROOT}/latest-build.yml"
4548

@@ -56,10 +59,16 @@ RUN set -e; \
5659
&& curl -fSsL https://swift.org/keys/all-keys.asc | gpg --import - \
5760
&& gpg --batch --verify latest_toolchain.tar.gz.sig latest_toolchain.tar.gz \
5861
# - Unpack the toolchain, set libs permissions, and clean up.
59-
&& tar -xzf latest_toolchain.tar.gz --directory / --strip-components=1 \
60-
&& chmod -R o+r /usr/lib/swift \
62+
&& mkdir -p $SWIFT_PREFIX \
63+
&& tar -xzf latest_toolchain.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
64+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
65+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
66+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
6167
&& rm -rf "$GNUPGHOME" latest_toolchain.tar.gz.sig latest_toolchain.tar.gz \
6268

69+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
70+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
71+
6372
# Print Installed Swift Version
6473
RUN swift --version
6574

nightly-6.1/amazonlinux/2/buildx/Dockerfile

+11-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ RUN yum -y install \
3232
ARG SWIFT_SIGNING_KEY=E813C892820A6FA13755B268F167DF1ACF9CE069
3333
ARG SWIFT_PLATFORM=amazonlinux
3434
ARG OS_MAJOR_VER=2
35+
ARG SWIFT_VERSION=6.1
3536
ARG SWIFT_WEBROOT=https://download.swift.org/swift-6.1-branch
37+
ARG SWIFT_PREFIX=/opt/swift/${SWIFT_VERSION}
3638

3739
# This is a small trick to enable if/else for arm64 and amd64.
3840
# Because of https://bugs.swift.org/browse/SR-14872 we need adjust tar options.
@@ -46,6 +48,7 @@ FROM base-$TARGETARCH AS final
4648

4749
ARG OS_VER=$SWIFT_PLATFORM$OS_MAJOR_VER$OS_ARCH_SUFFIX
4850
ARG PLATFORM_WEBROOT="$SWIFT_WEBROOT/$SWIFT_PLATFORM$OS_MAJOR_VER$OS_ARCH_SUFFIX"
51+
ENV SWIFT_PREFIX=$SWIFT_PREFIX
4952

5053
RUN echo "${PLATFORM_WEBROOT}/latest-build.yml"
5154

@@ -62,10 +65,16 @@ RUN set -e; \
6265
&& curl -fSsL https://swift.org/keys/all-keys.asc | gpg --import - \
6366
&& gpg --batch --verify latest_toolchain.tar.gz.sig latest_toolchain.tar.gz \
6467
# - Unpack the toolchain, set libs permissions, and clean up.
65-
&& tar -xzf latest_toolchain.tar.gz --directory / --strip-components=1 \
66-
&& chmod -R o+r /usr/lib/swift \
68+
&& mkdir -p $SWIFT_PREFIX \
69+
&& tar -xzf latest_toolchain.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
70+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
71+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
72+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
6773
&& rm -rf "$GNUPGHOME" latest_toolchain.tar.gz.sig latest_toolchain.tar.gz \
6874

75+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
76+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
77+
6978
# Print Installed Swift Version
7079
RUN swift --version
7180

nightly-6.1/rhel-ubi/9/Dockerfile

+12-3
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,16 @@ RUN yum install -y \
2626
ARG SWIFT_SIGNING_KEY=E813C892820A6FA13755B268F167DF1ACF9CE069
2727
ARG SWIFT_PLATFORM=ubi
2828
ARG OS_MAJOR_VER=9
29+
ARG SWIFT_VERSION=6.1
2930
ARG SWIFT_WEBROOT=https://download.swift.org/swift-6.1-branch
31+
ARG SWIFT_PREFIX=/opt/swift/${SWIFT_VERSION}
3032

3133
ENV SWIFT_SIGNING_KEY=$SWIFT_SIGNING_KEY \
3234
SWIFT_PLATFORM=$SWIFT_PLATFORM \
3335
OS_MAJOR_VER=$OS_MAJOR_VER \
3436
OS_VER=$SWIFT_PLATFORM$OS_MAJOR_VER \
35-
SWIFT_WEBROOT="$SWIFT_WEBROOT/$SWIFT_PLATFORM$OS_MAJOR_VER"
37+
SWIFT_WEBROOT="$SWIFT_WEBROOT/$SWIFT_PLATFORM$OS_MAJOR_VER" \
38+
SWIFT_PREFIX=$SWIFT_PREFIX
3639

3740
RUN echo "${SWIFT_WEBROOT}/latest-build.yml"
3841

@@ -49,10 +52,16 @@ RUN set -e; \
4952
&& curl -fL https://swift.org/keys/all-keys.asc | gpg --import - \
5053
&& gpg --batch --verify latest_toolchain.tar.gz.sig latest_toolchain.tar.gz \
5154
# - Unpack the toolchain, set libs permissions, and clean up.
52-
&& tar -xzf latest_toolchain.tar.gz --directory / --strip-components=1 \
53-
&& chmod -R o+r /usr/lib/swift \
55+
&& mkdir -p $SWIFT_PREFIX \
56+
&& tar -xzf latest_toolchain.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
57+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
58+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
59+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
5460
&& rm -rf "$GNUPGHOME" latest_toolchain.tar.gz.sig latest_toolchain.tar.gz
5561

62+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
63+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
64+
5665
# Print Installed Swift Version
5766
RUN swift --version
5867

nightly-6.1/rhel-ubi/9/buildx/Dockerfile

+11-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ RUN yum install -y \
2525
ARG SWIFT_SIGNING_KEY=E813C892820A6FA13755B268F167DF1ACF9CE069
2626
ARG SWIFT_PLATFORM=ubi
2727
ARG OS_MAJOR_VER=9
28+
ARG SWIFT_VERSION=6.1
2829
ARG SWIFT_WEBROOT=https://download.swift.org/swift-6.1-branch
30+
ARG SWIFT_PREFIX=/opt/swift/${SWIFT_VERSION}
2931

3032
# This is a small trick to enable if/else for arm64 and amd64.
3133
# Because of https://bugs.swift.org/browse/SR-14872 we need adjust tar options.
@@ -39,6 +41,7 @@ FROM base-$TARGETARCH AS final
3941

4042
ARG OS_VER=$SWIFT_PLATFORM$OS_MAJOR_VER$OS_ARCH_SUFFIX
4143
ARG PLATFORM_WEBROOT="$SWIFT_WEBROOT/$SWIFT_PLATFORM$OS_MAJOR_VER$OS_ARCH_SUFFIX"
44+
ENV SWIFT_PREFIX=$SWIFT_PREFIX
4245

4346
RUN echo "${PLATFORM_WEBROOT}/latest-build.yml"
4447

@@ -55,10 +58,16 @@ RUN set -e; \
5558
&& curl -fSsL https://swift.org/keys/all-keys.asc | gpg --import - \
5659
&& gpg --batch --verify latest_toolchain.tar.gz.sig latest_toolchain.tar.gz \
5760
# - Unpack the toolchain, set libs permissions, and clean up.
58-
&& tar -xzf latest_toolchain.tar.gz --directory / --strip-components=1 \
59-
&& chmod -R o+r /usr/lib/swift \
61+
&& mkdir -p $SWIFT_PREFIX \
62+
&& tar -xzf latest_toolchain.tar.gz --directory $SWIFT_PREFIX --strip-components=1 \
63+
&& chmod -R o+r $SWIFT_PREFIX/usr/lib/swift \
64+
# This is a compatibility workaround for those who expect `swift` to be in `/usr/bin/`.
65+
&& ln -sf $SWIFT_PREFIX/usr/bin/* /usr/bin/ \
6066
&& rm -rf "$GNUPGHOME" latest_toolchain.tar.gz.sig latest_toolchain.tar.gz \
6167

68+
ENV PATH="${SWIFT_PREFIX}/usr/bin:${PATH}"
69+
ENV LD_LIBRARY_PATH="${SWIFT_PREFIX}/usr/lib/swift/linux"
70+
6271
# Print Installed Swift Version
6372
RUN swift --version
6473

0 commit comments

Comments
 (0)