Skip to content

Commit 3ba0c13

Browse files
committed
[manylinux2014] Use a single Dockerfile for all images
This will ease adding new policies / platforms in the future (e.g. for PEP600 support with manylinux_2_24 images) using a single Dockerfile whatever the policy / platform.
1 parent 6f69932 commit 3ba0c13

10 files changed

+113
-111
lines changed

.travis.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,21 @@ env:
2020
jobs:
2121
include:
2222
- arch: amd64
23-
env: PLATFORM="x86_64"
23+
env: POLICY="manylinux2014" PLATFORM="x86_64"
2424
- arch: amd64
25-
env: PLATFORM="i686"
25+
env: POLICY="manylinux2014" PLATFORM="i686"
2626
- arch: arm64-graviton2
2727
virt: vm
2828
group: edge
29-
env: PLATFORM="aarch64"
29+
env: POLICY="manylinux2014" PLATFORM="aarch64"
3030
- arch: ppc64le
31-
env: PLATFORM="ppc64le"
31+
env: POLICY="manylinux2014" PLATFORM="ppc64le"
3232
- arch: s390x
33-
env: PLATFORM="s390x"
33+
env: POLICY="manylinux2014" PLATFORM="s390x"
3434

3535
script:
36-
- PLATFORM=$PLATFORM TRAVIS_COMMIT=$TRAVIS_COMMIT ./build.sh
36+
# The following scripts uses POLICY, PLATFORM and TRAVIS_COMMIT environment variables
37+
- ./build.sh
3738

3839
deploy:
3940
provider: script

build.sh

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,53 @@
11
#!/bin/bash
22

33
# Stop at any error, show all commands
4-
set -ex
4+
set -exuo pipefail
55

6+
# Export variable needed by 'docker build --build-arg'
7+
export POLICY
8+
export PLATFORM
69

7-
docker build --rm -t quay.io/pypa/manylinux2014_$PLATFORM:$TRAVIS_COMMIT -f docker/Dockerfile-$PLATFORM docker/
10+
# get docker default multiarch image prefix for PLATFORM
11+
if [ "${PLATFORM}" == "x86_64" ]; then
12+
MULTIARCH_PREFIX="amd64/"
13+
elif [ "${PLATFORM}" == "i686" ]; then
14+
MULTIARCH_PREFIX="i386/"
15+
elif [ "${PLATFORM}" == "aarch64" ]; then
16+
MULTIARCH_PREFIX="arm64v8/"
17+
elif [ "${PLATFORM}" == "ppc64le" ]; then
18+
MULTIARCH_PREFIX="ppc64le/"
19+
elif [ "${PLATFORM}" == "s390x" ]; then
20+
MULTIARCH_PREFIX="s390x/"
21+
else
22+
echo "Unsupported platform: '${PLATFORM}'"
23+
exit 1
24+
fi
25+
26+
# setup BASEIMAGE and its specific properties
27+
if [ "${POLICY}" == "manylinux2014" ]; then
28+
if [ "${PLATFORM}" == "s390x" ]; then
29+
BASEIMAGE="s390x/clefos:7"
30+
else
31+
BASEIMAGE="${MULTIARCH_PREFIX}centos:7"
32+
fi
33+
DEVTOOLSET_ROOTPATH="/opt/rh/devtoolset-9/root"
34+
PREPEND_PATH="${DEVTOOLSET_ROOTPATH}/usr/bin:"
35+
if [ "${PLATFORM}" == "i686" ]; then
36+
LD_LIBRARY_PATH_ARG="${DEVTOOLSET_ROOTPATH}/usr/lib:${DEVTOOLSET_ROOTPATH}/usr/lib/dyninst:/usr/local/lib"
37+
else
38+
LD_LIBRARY_PATH_ARG="${DEVTOOLSET_ROOTPATH}/usr/lib64:${DEVTOOLSET_ROOTPATH}/usr/lib:${DEVTOOLSET_ROOTPATH}/usr/lib64/dyninst:${DEVTOOLSET_ROOTPATH}/usr/lib/dyninst:/usr/local/lib64:/usr/local/lib"
39+
fi
40+
else
41+
echo "Unsupported policy: '${POLICY}'"
42+
exit 1
43+
fi
44+
export BASEIMAGE
45+
export DEVTOOLSET_ROOTPATH
46+
export PREPEND_PATH
47+
export LD_LIBRARY_PATH_ARG
48+
49+
docker build \
50+
--build-arg POLICY --build-arg PLATFORM --build-arg BASEIMAGE \
51+
--build-arg DEVTOOLSET_ROOTPATH --build-arg PREPEND_PATH --build-arg LD_LIBRARY_PATH_ARG \
52+
--rm -t quay.io/pypa/${POLICY}_${PLATFORM}:${TRAVIS_COMMIT} \
53+
-f docker/Dockerfile docker/

docker/Dockerfile

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# default to latest supported policy, x86_64
2+
ARG BASEIMAGE=amd64/centos:7
3+
ARG POLICY=manylinux2014
4+
ARG PLATFORM=x86_64
5+
ARG DEVTOOLSET_ROOTPATH=
6+
ARG LD_LIBRARY_PATH_ARG=
7+
ARG PREPEND_PATH=
8+
9+
FROM $BASEIMAGE
10+
ARG POLICY
11+
ARG PLATFORM
12+
ARG DEVTOOLSET_ROOTPATH
13+
ARG LD_LIBRARY_PATH_ARG
14+
ARG PREPEND_PATH
15+
LABEL maintainer="The ManyLinux project"
16+
17+
ENV AUDITWHEEL_ARCH=${PLATFORM} AUDITWHEEL_PLAT=${POLICY}_${PLATFORM}
18+
ENV LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8
19+
ENV DEVTOOLSET_ROOTPATH=${DEVTOOLSET_ROOTPATH}
20+
ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH_ARG}
21+
ENV PATH=${PREPEND_PATH}${PATH}
22+
ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
23+
24+
# setup entrypoint, this will wrap commands with `linux32` with i686 images
25+
COPY build_scripts/install-entrypoint.sh /build_scripts/install-entrypoint.sh
26+
RUN bash /build_scripts/install-entrypoint.sh && rm -rf build_scripts
27+
COPY entrypoint.sh /opt/manylinux/entrypoint.sh
28+
ENTRYPOINT ["/opt/manylinux/entrypoint.sh"]
29+
30+
COPY build_scripts /build_scripts
31+
RUN /opt/manylinux/entrypoint.sh bash build_scripts/build.sh && rm -rf build_scripts
32+
33+
ENV SSL_CERT_FILE=/opt/_internal/certs.pem
34+
35+
CMD ["/bin/bash"]

docker/Dockerfile-aarch64

Lines changed: 0 additions & 19 deletions
This file was deleted.

docker/Dockerfile-i686

Lines changed: 0 additions & 27 deletions
This file was deleted.

docker/Dockerfile-ppc64le

Lines changed: 0 additions & 19 deletions
This file was deleted.

docker/Dockerfile-s390x

Lines changed: 0 additions & 19 deletions
This file was deleted.

docker/Dockerfile-x86_64

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/bin/bash
2+
# Install entrypoint:
3+
# make sure yum is configured correctly and linux32 is available on i686
4+
5+
# Stop at any error, show all commands
6+
set -exuo pipefail
7+
8+
if [ "${AUDITWHEEL_PLAT}" == "manylinux2014_i686" ]; then
9+
echo "i386" > /etc/yum/vars/basearch
10+
yum -y update
11+
yum install -y util-linux-ng
12+
yum clean all
13+
rm -rf /var/cache/yum
14+
fi

docker/entrypoint.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/bin/bash
2+
3+
set -eu
4+
5+
if [ "${AUDITWHEEL_ARCH}" == "i686" ]; then
6+
linux32 "$@"
7+
else
8+
exec "$@"
9+
fi

0 commit comments

Comments
 (0)