-
Notifications
You must be signed in to change notification settings - Fork 225
[WIP] Manylinux2010 #279
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP] Manylinux2010 #279
Changes from all commits
7f4765e
2f42b3c
27e7332
55f670c
54b3c84
dcd4acf
8f868fb
50f4eac
0a6c6ee
55b3514
87886d4
2664c85
67ef9a0
05098c8
2ec5c38
e075849
24082fe
0a31334
e05c365
c39783f
ca7a542
2011765
ca12203
931aa02
f2f22d3
5b12bfe
f5792ce
daa1a5f
4b59d3a
db3b9d3
3d899ab
20db20d
356df2d
f6fc85a
39892a0
bbfe5a4
6765234
0ad07d5
bc2ee54
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -10,20 +10,25 @@ MY_DIR=$(dirname "${BASH_SOURCE[0]}") | |
|
||
# Dependencies for compiling Python that we want to remove from | ||
# the final image after compiling Python | ||
# GPG installed to verify signatures on Python source tarballs. | ||
PYTHON_COMPILE_DEPS="zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gpg libffi-devel" | ||
|
||
# Libraries that are allowed as part of the manylinux1 profile | ||
MANYLINUX1_DEPS="glibc-devel libstdc++-devel glib2-devel libX11-devel libXext-devel libXrender-devel mesa-libGL-devel libICE-devel libSM-devel ncurses-devel" | ||
|
||
# Centos 5 is EOL and is no longer available from the usual mirrors, so switch | ||
# to http://vault.centos.org | ||
# From: https://github.com/rust-lang/rust/pull/41045 | ||
# The location for version 5 was also removed, so now only the specific release | ||
# (5.11) can be referenced. | ||
sed -i 's/enabled=1/enabled=0/' /etc/yum/pluginconf.d/fastestmirror.conf | ||
sed -i 's/mirrorlist/#mirrorlist/' /etc/yum.repos.d/*.repo | ||
sed -i 's/#\(baseurl.*\)mirror.centos.org\/centos\/$releasever/\1vault.centos.org\/5.11/' /etc/yum.repos.d/*.repo | ||
PYTHON_COMPILE_DEPS="zlib-devel bzip2-devel expat-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel" | ||
|
||
# Libraries that are allowed as part of the manylinux2010 profile | ||
# Extract from PEP: https://www.python.org/dev/peps/pep-0571/#the-manylinux2010-policy | ||
# On RPM-based systems, they are provided by these packages: | ||
# Package: Libraries | ||
# glib2: libglib-2.0.so.0, libgthread-2.0.so.0, libgobject-2.0.so.0 | ||
# 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 | ||
# libICE: libICE.so.6 | ||
# libX11: libX11.so.6 | ||
# libXext: libXext.so.6 | ||
# libXrender: libXrender.so.1 | ||
# libgcc: libgcc_s.so.1 | ||
# libstdc++: libstdc++.so.6 | ||
# mesa: libGL.so.1 | ||
# | ||
# PEP is missing the package for libSM.so.6 for RPM based system | ||
# Install development packages (except for libgcc which is provided by gcc install) | ||
MANYLINUX2010_DEPS="glibc-devel libstdc++-devel glib2-devel libX11-devel libXext-devel libXrender-devel mesa-libGL-devel libICE-devel libSM-devel" | ||
mayeut marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
# Get build utilities | ||
source $MY_DIR/build_utils.sh | ||
|
@@ -41,39 +46,27 @@ echo "multilib_policy=best" >> /etc/yum.conf | |
# Decided not to clean at this point: https://github.com/pypa/manylinux/pull/129 | ||
yum -y update | ||
|
||
# EPEL support | ||
yum -y install wget | ||
# https://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm | ||
cp $MY_DIR/epel-release-5-4.noarch.rpm . | ||
check_sha256sum epel-release-5-4.noarch.rpm $EPEL_RPM_HASH | ||
|
||
# Dev toolset (for LLVM and other projects requiring C++11 support) | ||
wget -q http://people.centos.org/tru/devtools-2/devtools-2.repo | ||
check_sha256sum devtools-2.repo $DEVTOOLS_HASH | ||
mv devtools-2.repo /etc/yum.repos.d/devtools-2.repo | ||
rpm -Uvh --replacepkgs epel-release-5*.rpm | ||
rm -f epel-release-5*.rpm | ||
|
||
# from now on, we shall only use curl to retrieve files | ||
yum -y erase wget | ||
# Software collection (for devtoolset-8) and EPEL support (for cmake28 & yasm) | ||
yum -y install centos-release-scl https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm | ||
|
||
# Development tools and libraries | ||
yum -y install \ | ||
automake \ | ||
bison \ | ||
bzip2 \ | ||
cmake28 \ | ||
devtoolset-2-binutils \ | ||
devtoolset-2-gcc \ | ||
devtoolset-2-gcc-c++ \ | ||
devtoolset-2-gcc-gfortran \ | ||
devtoolset-8-binutils \ | ||
devtoolset-8-gcc \ | ||
devtoolset-8-gcc-c++ \ | ||
devtoolset-8-gcc-gfortran \ | ||
diffutils \ | ||
expat-devel \ | ||
gettext \ | ||
kernel-devel-`uname -r` \ | ||
file \ | ||
kernel-devel-`uname -r` \ | ||
libffi-devel \ | ||
make \ | ||
patch \ | ||
perl-devel \ | ||
unzip \ | ||
which \ | ||
yasm \ | ||
|
@@ -147,18 +140,39 @@ rm -rf patchelf.tar.gz patchelf-$PATCHELF_VERSION | |
|
||
ln -s $PY36_BIN/auditwheel /usr/local/bin/auditwheel | ||
|
||
# HACK: The newly compiled and installed curl messes with the system's | ||
# py2.6 installation, on which yum depends. Work around it by | ||
# rewiring libcurl.so specifically for yum. /usr/local/bin/ has higher | ||
# priority on the PATH than /usr/bin/ | ||
cat <<'EOF' > /usr/local/bin/yum && chmod +x /usr/local/bin/yum | ||
#!/bin/bash | ||
if [ "x$(arch)" != xi686 ]; then | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This test should probably be more specific? So that it fails hard with other arch's like arm32. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
LD_PRELOAD=/usr/lib64/libcurl.so.4 | ||
else | ||
LD_PRELOAD=/usr/lib/libcurl.so.4 | ||
fi | ||
export LD_PRELOAD | ||
/usr/bin/yum "$@" | ||
EOF | ||
# the above might not shadow the real yum just yet, so call hash to be | ||
# sure: | ||
type yum | ||
hash yum | ||
|
||
|
||
# Clean up development headers and other unnecessary stuff for | ||
# final image | ||
yum -y erase \ | ||
avahi \ | ||
bitstream-vera-fonts \ | ||
freetype \ | ||
gettext \ | ||
gtk2 \ | ||
hicolor-icon-theme \ | ||
libX11 \ | ||
wireless-tools \ | ||
${PYTHON_COMPILE_DEPS} > /dev/null 2>&1 | ||
yum -y install ${MANYLINUX1_DEPS} | ||
${PYTHON_COMPILE_DEPS} > /dev/null 2>&1 | ||
yum -y install ${MANYLINUX2010_DEPS} | ||
yum -y clean all > /dev/null 2>&1 | ||
yum list installed | ||
|
||
|
@@ -180,7 +194,7 @@ find /opt/_internal -depth \ | |
for PYTHON in /opt/python/*/bin/python; do | ||
# Smoke test to make sure that our Pythons work, and do indeed detect as | ||
# being manylinux compatible: | ||
$PYTHON $MY_DIR/manylinux1-check.py | ||
$PYTHON $MY_DIR/manylinux-check.py | ||
# Make sure that SSL cert checking works | ||
$PYTHON $MY_DIR/ssl-check.py | ||
done | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
# Logic copied from PEP 513 | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should this file be named There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure it should be, that just another thing to change on the next update. I'd rather keep it that as it is. |
||
def is_manylinux1_compatible(): | ||
def is_manylinux2010_compatible(): | ||
# Only Linux, and only x86-64 / i686 | ||
from distutils.util import get_platform | ||
if get_platform() not in ["linux-x86_64", "linux-i686"]: | ||
|
@@ -14,8 +14,8 @@ def is_manylinux1_compatible(): | |
# Fall through to heuristic check below | ||
pass | ||
|
||
# Check glibc version. CentOS 5 uses glibc 2.5. | ||
return have_compatible_glibc(2, 5) | ||
# Check glibc version. CentOS 6 uses glibc 2.12. | ||
return have_compatible_glibc(2, 12) | ||
|
||
def have_compatible_glibc(major, minimum_minor): | ||
import ctypes | ||
|
@@ -45,9 +45,9 @@ def have_compatible_glibc(major, minimum_minor): | |
return True | ||
|
||
import sys | ||
if is_manylinux1_compatible(): | ||
print("%s is manylinux1 compatible" % (sys.executable,)) | ||
if is_manylinux2010_compatible(): | ||
print("%s is manylinux2010 compatible" % (sys.executable,)) | ||
sys.exit(0) | ||
else: | ||
print("%s is NOT manylinux1 compatible" % (sys.executable,)) | ||
print("%s is NOT manylinux2010 compatible" % (sys.executable,)) | ||
sys.exit(1) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
#!/bin/bash | ||
docker login -u $QUAY_USERNAME -p $QUAY_PASSWORD quay.io | ||
tag="quay.io/pypa/manylinux1_$PLATFORM" | ||
tag="quay.io/pypa/manylinux2010_$PLATFORM" | ||
docker tag ${tag}:${TRAVIS_COMMIT} ${tag}:latest | ||
docker push ${tag}:latest |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
FROM centos:6 as centos-with-vsyscall | ||
|
||
COPY ./build_scripts /build_scripts | ||
RUN bash /build_scripts/rebuild-glibc-without-vsyscall.sh | ||
|
||
FROM centos:6 | ||
LABEL maintainer="The Manylinux project" | ||
|
||
COPY --from=centos-with-vsyscall /rpms /rpms | ||
|
||
RUN yum -y install /rpms/* && rm -rf /rpms |
Uh oh!
There was an error while loading. Please reload this page.