Skip to content

Commit 87a2c5a

Browse files
committed
manylinux2014
1 parent 783c247 commit 87a2c5a

16 files changed

+118
-776
lines changed

.travis.yml

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
language: c
2+
os: linux
3+
dist: bionic
24
sudo: required
3-
dist: trusty
45
services:
56
- docker
67

@@ -10,48 +11,27 @@ branches:
1011
except:
1112
- /^pyup-/
1213

13-
cache:
14-
directories:
15-
- $HOME/docker
16-
1714
env:
1815
global:
1916
# QUAY_USERNAME and QUAY_PASSWORD for docker image upload
2017
- secure: "lKaTzEL6UNiEfp+BWLOUILG9BMtjwEMpwt6Yag0cQGHix7qJ/ElZ0t3oFw6ZwuDmA5qceAXIdxHLUK9HGVI2MloLk8czGhjvtfJ4XhOxtEJRQ0VkDGPsKN4cfhB4ZjGo6GAPtNqStMyNiY7BZuTrZa7coDLCoUeYcOmTpi6pmd1rrkk725B9QCTuhFHbPhkuL2yu/Jk6WxkHJBKjmuZek+iQa7lRItgMrG0/319PXLvwIGGl00nLFy+Ly5Ciwzux4wuHLTySZQKu0H9FX81A7smM0FW/42kg3ckGa2qLxRw/Pi8Nm/aIk8LD0QXzI5N7HhFfidOTgDS8Mt1HgfxmTk4wUXZ/KvCCshqjimzMc/s9i9wPZX9UqqcfrpZkmwz8dzhm1bndN45ZOCy6xAYT6dzf8T4mLMDjVWSW4+DUoW4sYHRLVujjcMk7ybcwGV43VruPTJnc8XVAhT+VIMQkoPjhQmTOn8h82LRNGYtLa5RReCh9OPKVYB2Quz18FXMWgFt7A6VWudL0c7/8CusLvuo+pLcxt9pnV40rvu1YEohpEj8qR/qTSaDUBZM0J9SVf5zrZR80pZUnXkDF8nm+mcLOTley3YWipU19lCR7dzVyCAiQdVAuNPdnyem3Yk8enGkAJbfLd6eaIDs+p73D0JXh1Nx1px1movVLQH3ohIw="
2118
- secure: "w1614pomHLltkBhqWM2bOvbymFWIWKqSqqIBDvaNn9tbQScioItJoELBT7g7+cD7nyU7OvpQ1U2fk0xVkCeNvYU0xS1vP4o/VnZRpup7f7Tkiq+2rf4fjwYr3HHnJjwak1l9bsw6FkgzKaVvSdiUJHMVxiIuLd3fVozR7qjBBhTDxSlWGOpSgd+ttpgMZwU5zQjdaVQr1D7E8M0979ZnWMrNRyLiAUeHaPILS815b+ijgqR+i5nmu0/FTCGM9Ik4KIzIfWq8AdfPdbRiq8c+LrrTPfyKcIQJaHmfduYRM4LycGWwzkXFBNtLrJ7uFLG9RDVemOHuHOWIJX8qCUIV4XuESXxH3fUQr6r+yxquTJbzXxNtoaLa6tBOTQWKDrRjT4z9Mf9Im14F2V59EUDoQowHx5bjunOH5wg3ruYNKYYBFRYra5kx0CkKrqFBzyl8fTUEQLyx1HWTVUC1WTXEeD/aFKOSIxW5DxZr5W4LLlW2+Raa52ZzY28Q6AdueFQCRzoJ70/GsJRlSsBdWNOHN4gSp1cZuToLWY15y64QhAMVDpikB+V4hmkbceLiTqeWzTStNL1sa32RHr6i/9zeFZw1pMD1+eOg9x6fgODfh2sqr/zPbu2oONsHnc4D2jwsEax4o+Dv5QHLvK7jdyWUmu47a9QReoexXK60jZXs3CA="
2219

23-
# use YAML aliases and anchors to avoid duplication in stages
24-
# c.f. https://github.com/travis-ci/travis-ci/issues/8295#issuecomment-454457787
25-
manylinux-build: &manylinux-build
26-
stage: "Build manylinux images"
27-
before_install:
28-
# Load cached docker images
29-
- if [[ -d $HOME/docker ]]; then ls $HOME/docker/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load"; fi
30-
script:
31-
- PLATFORM=$PLATFORM TRAVIS_COMMIT=$TRAVIS_COMMIT ./build.sh
32-
deploy:
33-
provider: script
34-
script: docker/deploy.sh
35-
on:
36-
branch: master
37-
repo: pypa/manylinux
38-
39-
jobs:
20+
matrix:
4021
include:
41-
- stage: "Patch glibc"
42-
env:
43-
- PLATFORM="x86_64"
44-
before_install:
45-
# Load cached docker images
46-
- if [[ -d $HOME/docker ]]; then ls $HOME/docker/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load"; fi
47-
script:
48-
- PLATFORM=$PLATFORM TRAVIS_COMMIT=$TRAVIS_COMMIT ./build.sh glibc_only
49-
before_cache:
50-
# Save tagged docker images
51-
- mkdir -p $HOME/docker && docker images -a --filter='dangling=false' --format '{{.Repository}}:{{.Tag}} {{.ID}}' | grep 'centos-with-vsyscall:latest' | xargs -n 2 -t sh -c 'test -e $HOME/docker/$1.tar.gz || docker save $0 | gzip -2 > $HOME/docker/$1.tar.gz'
52-
- <<: *manylinux-build
53-
env:
54-
- PLATFORM="x86_64"
55-
- <<: *manylinux-build
56-
env:
57-
- PLATFORM="i686"
22+
- arch: amd64
23+
env: PLATFORM="x86_64"
24+
- arch: amd64
25+
env: PLATFORM="i686"
26+
- arch: arm64
27+
env: PLATFORM="aarch64"
28+
29+
script:
30+
- PLATFORM=$PLATFORM TRAVIS_COMMIT=$TRAVIS_COMMIT ./build.sh
31+
32+
deploy:
33+
provider: script
34+
script: docker/deploy.sh
35+
on:
36+
branch: master
37+
repo: pypa/manylinux

build.sh

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,4 @@
44
set -ex
55

66

7-
if [ $PLATFORM == x86_64 ] || [ "$1" == "glibc_only" ]; then
8-
# Output something every 10 minutes or Travis kills the job
9-
while sleep 9m; do echo -n -e " \b"; done &
10-
docker build --rm -t centos-with-vsyscall:latest --cache-from centos-with-vsyscall:latest --target centos-with-vsyscall -f docker/glibc/Dockerfile docker/glibc/
11-
# Killing background sleep loop
12-
kill %1
13-
if [ "$1" == "glibc_only" ]; then
14-
exit 0
15-
fi
16-
docker build --rm -t quay.io/pypa/manylinux2010_centos-6-no-vsyscall --cache-from quay.io/pypa/manylinux2010_centos-6-no-vsyscall:latest --cache-from centos-with-vsyscall:latest -f docker/glibc/Dockerfile docker/glibc/
17-
fi
18-
19-
docker build --rm -t quay.io/pypa/manylinux2010_$PLATFORM:$TRAVIS_COMMIT -f docker/Dockerfile-$PLATFORM docker/
7+
docker build --rm -t quay.io/pypa/manylinux2014_$PLATFORM:$TRAVIS_COMMIT -f docker/Dockerfile-$PLATFORM docker/

docker/Dockerfile-aarch64

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
FROM arm64v8/centos:7
2+
LABEL maintainer="The ManyLinux project"
3+
4+
ENV AUDITWHEEL_ARCH aarch64
5+
ENV AUDITWHEEL_PLAT manylinux2014_$AUDITWHEEL_ARCH
6+
ENV LC_ALL en_US.UTF-8
7+
ENV LANG en_US.UTF-8
8+
ENV LANGUAGE en_US.UTF-8
9+
ENV DEVTOOLSET_ROOTPATH /opt/rh/devtoolset-8/root
10+
ENV PATH $DEVTOOLSET_ROOTPATH/usr/bin:$PATH
11+
ENV LD_LIBRARY_PATH $DEVTOOLSET_ROOTPATH/usr/lib64:$DEVTOOLSET_ROOTPATH/usr/lib:$DEVTOOLSET_ROOTPATH/usr/lib64/dyninst:$DEVTOOLSET_ROOTPATH/usr/lib/dyninst:/usr/local/lib64:/usr/local/lib
12+
ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig
13+
14+
COPY build_scripts /build_scripts
15+
RUN bash build_scripts/build.sh && rm -r build_scripts
16+
17+
ENV SSL_CERT_FILE=/opt/_internal/certs.pem
18+
19+
CMD ["/bin/bash"]

docker/Dockerfile-i686

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
1-
FROM i386/centos:6
1+
FROM i386/centos:7
22
LABEL maintainer="The ManyLinux project"
33

44
ENV AUDITWHEEL_ARCH i686
5-
ENV AUDITWHEEL_PLAT manylinux2010_$AUDITWHEEL_ARCH
5+
ENV AUDITWHEEL_PLAT manylinux2014_$AUDITWHEEL_ARCH
66
ENV LC_ALL en_US.UTF-8
77
ENV LANG en_US.UTF-8
88
ENV LANGUAGE en_US.UTF-8
9-
ENV DEVTOOLSET_ROOTPATH /opt/rh/devtoolset-7/root
10-
ENV PATH $DEVTOOLSET_ROOTPATH/usr/bin:$PATH
11-
ENV LD_LIBRARY_PATH $DEVTOOLSET_ROOTPATH/usr/lib:$DEVTOOLSET_ROOTPATH/usr/lib:$DEVTOOLSET_ROOTPATH/usr/lib/dyninst:/usr/local/lib
9+
ENV LD_LIBRARY_PATH /usr/local/lib64:/usr/local/lib
1210
ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig
1311

1412
# Set a base architecture of yum package to i386
1513
RUN echo "i386" > /etc/yum/vars/basearch
1614

17-
# To have linux32 command
15+
# To have linux32 command
1816
RUN yum -y update && \
1917
yum install -y util-linux-ng
2018

@@ -23,5 +21,4 @@ RUN linux32 bash build_scripts/build.sh && rm -r build_scripts
2321

2422
ENV SSL_CERT_FILE=/opt/_internal/certs.pem
2523

26-
ENTRYPOINT ["linux32"]
2724
CMD ["/bin/bash"]

docker/Dockerfile-x86_64

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
# See docker/glibc/
2-
FROM quay.io/pypa/manylinux2010_centos-6-no-vsyscall
1+
FROM centos:7
32
LABEL maintainer="The ManyLinux project"
43

54
ENV AUDITWHEEL_ARCH x86_64
6-
ENV AUDITWHEEL_PLAT manylinux2010_$AUDITWHEEL_ARCH
5+
ENV AUDITWHEEL_PLAT manylinux2014_$AUDITWHEEL_ARCH
76
ENV LC_ALL en_US.UTF-8
87
ENV LANG en_US.UTF-8
98
ENV LANGUAGE en_US.UTF-8

docker/build_scripts/build.sh

Lines changed: 41 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ MY_DIR=$(dirname "${BASH_SOURCE[0]}")
1010

1111
# Dependencies for compiling Python that we want to remove from
1212
# the final image after compiling Python
13-
PYTHON_COMPILE_DEPS="zlib-devel bzip2-devel expat-devel ncurses-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel"
13+
PYTHON_COMPILE_DEPS="zlib-devel bzip2-devel expat-devel ncurses-devel readline-devel tk-devel gdbm-devel libdb-devel libpcap-devel xz-devel openssl-devel keyutils-libs-devel krb5-devel libcom_err-devel libidn-devel curl-devel perl-devel"
1414

15-
# Libraries that are allowed as part of the manylinux2010 profile
16-
# Extract from PEP: https://www.python.org/dev/peps/pep-0571/#the-manylinux2010-policy
15+
# Libraries that are allowed as part of the manylinux2014 profile
16+
# Extract from PEP: https://www.python.org/dev/peps/pep-0599/#the-manylinux2014-policy
1717
# On RPM-based systems, they are provided by these packages:
1818
# Package: Libraries
1919
# glib2: libglib-2.0.so.0, libgthread-2.0.so.0, libgobject-2.0.so.0
20-
# glibc: libresolv.so.2, libutil.so.1, libnsl.so.1, librt.so.1, libcrypt.so.1, libpthread.so.0, libdl.so.2, libm.so.6, libc.so.6
20+
# glibc: libresolv.so.2, libutil.so.1, libnsl.so.1, librt.so.1, libpthread.so.0, libdl.so.2, libm.so.6, libc.so.6
2121
# libICE: libICE.so.6
2222
# libX11: libX11.so.6
2323
# libXext: libXext.so.6
@@ -28,18 +28,17 @@ PYTHON_COMPILE_DEPS="zlib-devel bzip2-devel expat-devel ncurses-devel readline-d
2828
#
2929
# PEP is missing the package for libSM.so.6 for RPM based system
3030
# Install development packages (except for libgcc which is provided by gcc install)
31-
MANYLINUX2010_DEPS="glibc-devel libstdc++-devel glib2-devel libX11-devel libXext-devel libXrender-devel mesa-libGL-devel libICE-devel libSM-devel"
31+
MANYLINUX_DEPS="glibc-devel libstdc++-devel glib2-devel libX11-devel libXext-devel libXrender-devel mesa-libGL-devel libICE-devel libSM-devel"
3232

3333
# Get build utilities
3434
source $MY_DIR/build_utils.sh
3535

36-
# Prerequisite for architecture
37-
case $AUDITWHEEL_ARCH in
38-
x86_64)
39-
# See https://unix.stackexchange.com/questions/41784/can-yum-express-a-preference-for-x86-64-over-i386-packages
40-
echo "multilib_policy=best" >> /etc/yum.conf
41-
;;
42-
esac
36+
# See https://unix.stackexchange.com/questions/41784/can-yum-express-a-preference-for-x86-64-over-i386-packages
37+
echo "multilib_policy=best" >> /etc/yum.conf
38+
# Error out if requested packages do not exist
39+
echo "skip_missing_names_on_install=False" >> /etc/yum.conf
40+
# Make sure that locale will not be removed
41+
sed -i '/^override_install_langs=/d' /etc/yum.conf
4342

4443
# https://hub.docker.com/_/centos/
4544
# "Additionally, images with minor version tags that correspond to install
@@ -51,62 +50,48 @@ esac
5150
# Decided not to clean at this point: https://github.com/pypa/manylinux/pull/129
5251
yum -y update
5352

54-
# EPEL support (for cmake28 & yasm)
55-
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
56-
57-
case $AUDITWHEEL_ARCH in
58-
x86_64)
59-
# Install devtoolset-8
60-
yum -y install centos-release-scl
61-
yum -y install \
62-
devtoolset-8-binutils \
63-
devtoolset-8-gcc \
64-
devtoolset-8-gcc-c++ \
65-
devtoolset-8-gcc-gfortran \
66-
;;
67-
i686)
68-
# Install devtoolset-7 (binutils, gcc, gcc-c++, gcc-gfortran)
69-
devtoolset7s=(
70-
"devtoolset-7-runtime-7.1-4.el6.i686.rpm"
71-
"devtoolset-7-binutils-2.28-11.el6.i686.rpm"
72-
"devtoolset-7-gcc-7.3.1-5.10.el6.i686.rpm"
73-
"devtoolset-7-libstdc++-devel-7.3.1-5.10.el6.i686.rpm"
74-
"devtoolset-7-gcc-c++-7.3.1-5.10.el6.i686.rpm"
75-
"devtoolset-7-libquadmath-devel-7.3.1-5.10.el6.i686.rpm"
76-
"devtoolset-7-gcc-gfortran-7.3.1-5.10.el6.i686.rpm"
77-
)
78-
for rpm in "${devtoolset7s[@]}"; do
79-
yum install -y "https://www.repo.cloudlinux.com/cloudlinux/6.10/sclo/devtoolset-7/i386/$rpm"
80-
done
81-
;;
82-
esac
53+
# upgrading glibc-common can end with removal on en_US.UTF-8 locale
54+
localedef -i en_US -f UTF-8 en_US.UTF-8
55+
56+
DEVTOOLSET8_TOOLCHAIN_DEPS="devtoolset-8-binutils devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-gcc-gfortran"
57+
DEFAULT_TOOLCHAIN_DEPS="gcc gcc-c++ gcc-gfortran"
58+
if [ "${AUDITWHEEL_ARCH}" == "x86_64" ]; then
59+
# Software collection (for devtoolset-8)
60+
yum -y install centos-release-scl-rh
61+
# EPEL support (for yasm)
62+
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
63+
YASM=yasm
64+
TOOLCHAIN_DEPS=${DEVTOOLSET8_TOOLCHAIN_DEPS}
65+
elif [ "${AUDITWHEEL_ARCH}" == "aarch64" ]; then
66+
# Software collection (for devtoolset-8)
67+
yum -y install centos-release-scl-rh
68+
TOOLCHAIN_DEPS=${DEVTOOLSET8_TOOLCHAIN_DEPS}
69+
elif [ "${AUDITWHEEL_ARCH}" == "i686" ]; then
70+
# No yasm, no devtoolset-8 on i686
71+
TOOLCHAIN_DEPS=${DEFAULT_TOOLCHAIN_DEPS}
72+
fi
8373

8474
# Development tools and libraries
8575
yum -y install \
8676
automake \
8777
bison \
8878
bzip2 \
89-
cmake28 \
79+
${TOOLCHAIN_DEPS} \
9080
diffutils \
9181
gettext \
9282
file \
93-
kernel-devel-`uname -r` \
83+
kernel-devel \
9484
libffi-devel \
9585
make \
9686
patch \
9787
unzip \
9888
which \
99-
yasm \
89+
${YASM} \
10090
${PYTHON_COMPILE_DEPS}
10191

102-
# Install a git we link against system OpenSSL/Curl
103-
yum -y install openssl-devel keyutils-libs-devel krb5-devel libcom_err-devel libidn-devel curl-devel perl-devel
92+
# Install git
10493
build_git $GIT_ROOT $GIT_HASH
10594
git version
106-
yum -y erase openssl-devel keyutils-libs-devel krb5-devel libcom_err-devel libidn-devel curl-devel perl-devel
107-
108-
# Build an OpenSSL for Pythons. We'll delete this at the end.
109-
build_openssl $OPENSSL_ROOT $OPENSSL_HASH
11095

11196
# Install newest autoconf
11297
build_autoconf $AUTOCONF_ROOT $AUTOCONF_HASH
@@ -155,8 +140,6 @@ ln -s $($PY37_BIN/python -c 'import certifi; print(certifi.where())') \
155140
# Dockerfiles:
156141
export SSL_CERT_FILE=/opt/_internal/certs.pem
157142

158-
# Now we can delete our built OpenSSL headers/static libs since we've linked everything we need
159-
rm -rf /usr/local/ssl
160143

161144
# Install patchelf (latest with unreleased bug fixes)
162145
curl -fsSL -o patchelf.tar.gz https://github.com/NixOS/patchelf/archive/$PATCHELF_VERSION.tar.gz
@@ -179,7 +162,7 @@ yum -y erase \
179162
libX11 \
180163
wireless-tools \
181164
${PYTHON_COMPILE_DEPS} > /dev/null 2>&1
182-
yum -y install ${MANYLINUX2010_DEPS}
165+
yum -y install ${MANYLINUX_DEPS}
183166
yum -y clean all > /dev/null 2>&1
184167
yum list installed
185168

@@ -211,9 +194,11 @@ find /opt/_internal -depth \
211194
# Fix libc headers to remain compatible with C99 compilers.
212195
find /usr/include/ -type f -exec sed -i 's/\bextern _*inline_*\b/extern __inline __attribute__ ((__gnu_inline__))/g' {} +
213196

214-
# remove useless things that have been installed by devtoolset
215-
rm -rf $DEVTOOLSET_ROOTPATH/usr/share/man
216-
find $DEVTOOLSET_ROOTPATH/usr/share/locale -mindepth 1 -maxdepth 1 -not \( -name 'en*' -or -name 'locale.alias' \) | xargs rm -rf
197+
if [ "${DEVTOOLSET_ROOTPATH:-}" != "" ]; then
198+
# remove useless things that have been installed by devtoolset
199+
rm -rf $DEVTOOLSET_ROOTPATH/usr/share/man
200+
find $DEVTOOLSET_ROOTPATH/usr/share/locale -mindepth 1 -maxdepth 1 -not \( -name 'en*' -or -name 'locale.alias' \) | xargs rm -rf
201+
fi
217202
rm -rf /usr/share/backgrounds
218203
# if we updated glibc, we need to strip locales again...
219204
localedef --list-archive | grep -v -i ^en_US.utf8 | xargs localedef --delete-from-archive

docker/build_scripts/build_env.sh

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,7 @@
22

33
PYTHON_DOWNLOAD_URL=https://www.python.org/ftp/python
44
# of the form <maj>.<min>.<rev> or <maj>.<min>.<rev>rc<n>
5-
CPYTHON_VERSIONS="2.7.17 3.4.10 3.5.7 3.6.9 3.7.5 3.8.0"
6-
7-
# openssl version to build, with expected sha256 hash of .tar.gz
8-
# archive.
9-
OPENSSL_ROOT=openssl-1.0.2t
10-
OPENSSL_HASH=14cb464efe7ac6b54799b34456bd69558a749a4931ecfd9cf9f71d7881cac7bc
11-
OPENSSL_DOWNLOAD_URL=https://www.openssl.org/source
5+
CPYTHON_VERSIONS="3.5.7 3.6.9 3.7.5 3.8.0"
126

137
PATCHELF_VERSION=0.10
148
PATCHELF_HASH=b3cb6bdedcef5607ce34a350cf0b182eb979f8f7bc31eae55a93a70a3f020d13

0 commit comments

Comments
 (0)