当前位置: 首页 > docker > 正文

pip install docker-registry 失败的解决方案

尝试搭建 Docker 本地仓库,基本环境:CentOS7下,使用 pip install docker-registry 的时候编译 M2Crypto 失败,几经周折,终于解决,下面总结一下。

CentOS7下的安装步骤:
$ sudo yum install -y python-devel libevent-devel python-pip gcc xz-devel
$ sudo pip install docker-registry
Collecting docker-registry
  Downloading docker-registry-0.9.1.tar.gz (46kB)
    100% |████████████████████████████████| 51kB 235kB/s
Collecting docker-registry-core<3,>=2 (from docker-registry)
  Downloading docker-registry-core-2.0.3.tar.gz
Collecting backports.lzma!=0.0.4,==0.0.3 (from docker-registry)
  Downloading backports.lzma-0.0.3.tar.gz
Collecting blinker==1.3 (from docker-registry)
  Downloading blinker-1.3.tar.gz (91kB)
    100% |████████████████████████████████| 92kB 348kB/s
Collecting Flask==0.10.1 (from docker-registry)
  Downloading Flask-0.10.1.tar.gz (544kB)
    100% |████████████████████████████████| 552kB 112kB/s
Collecting gevent==1.0.1 (from docker-registry)
  Downloading gevent-1.0.1.tar.gz (1.5MB)
    100% |████████████████████████████████| 1.5MB 76kB/s
Collecting gunicorn==19.1.1 (from docker-registry)
  Downloading gunicorn-19.1.1-py2.py3-none-any.whl (104kB)
    100% |████████████████████████████████| 112kB 108kB/s
Collecting PyYAML==3.11 (from docker-registry)
  Downloading PyYAML-3.11.zip (371kB)
    100% |████████████████████████████████| 378kB 76kB/s
Collecting requests==2.3.0 (from docker-registry)
  Downloading requests-2.3.0-py2.py3-none-any.whl (452kB)
    100% |████████████████████████████████| 460kB 61kB/s
Collecting M2Crypto==0.22.3 (from docker-registry)
  Downloading M2Crypto-0.22.3.tar.gz (74kB)
    100% |████████████████████████████████| 81kB 46kB/s
Collecting sqlalchemy==0.9.4 (from docker-registry)
  Downloading SQLAlchemy-0.9.4.tar.gz (4.5MB)
    100% |████████████████████████████████| 4.5MB 41kB/s
Collecting setuptools==5.8 (from docker-registry)
  Downloading setuptools-5.8-py2.py3-none-any.whl (528kB)
    100% |████████████████████████████████| 532kB 60kB/s
Collecting boto==2.34.0 (from docker-registry-core<3,>=2->docker-registry)
  Downloading boto-2.34.0-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 41kB/s
Collecting redis==2.10.3 (from docker-registry-core<3,>=2->docker-registry)
  Downloading redis-2.10.3.tar.gz (86kB)
    100% |████████████████████████████████| 92kB 51kB/s
Collecting simplejson==3.6.2 (from docker-registry-core<3,>=2->docker-registry)
  Downloading simplejson-3.6.2.tar.gz (73kB)
    100% |████████████████████████████████| 81kB 86kB/s
Collecting Werkzeug>=0.7 (from Flask==0.10.1->docker-registry)
  Downloading Werkzeug-0.11.15-py2.py3-none-any.whl (307kB)
    100% |████████████████████████████████| 317kB 40kB/s
Collecting Jinja2>=2.4 (from Flask==0.10.1->docker-registry)
  Downloading Jinja2-2.9.5-py2.py3-none-any.whl (340kB)
    100% |████████████████████████████████| 348kB 109kB/s
Collecting itsdangerous>=0.21 (from Flask==0.10.1->docker-registry)
  Downloading itsdangerous-0.24.tar.gz (46kB)
    100% |████████████████████████████████| 51kB 62kB/s
Collecting greenlet (from gevent==1.0.1->docker-registry)
  Downloading greenlet-0.4.12-cp27-cp27mu-manylinux1_x86_64.whl (41kB)
    100% |████████████████████████████████| 51kB 139kB/s
Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->Flask==0.10.1->docker-registry)
  Downloading MarkupSafe-1.0.tar.gz
Installing collected packages: boto, redis, setuptools, simplejson, docker-registry-core, backports.lzma, blinker, Werkzeug, MarkupSafe, Jinja2, itsdangerous, Flask, greenlet, gevent, gunicorn, PyYAML, requests, M2Crypto, sqlalchemy, docker-registry
  Running setup.py install for redis ... done
  Found existing installation: setuptools 0.9.8
    Uninstalling setuptools-0.9.8:
      Successfully uninstalled setuptools-0.9.8
  Running setup.py install for simplejson ... done
  Running setup.py install for docker-registry-core ... done
  Running setup.py install for backports.lzma ... done
  Running setup.py install for blinker ... done
  Running setup.py install for MarkupSafe ... done
  Running setup.py install for itsdangerous ... done
  Running setup.py install for Flask ... done
  Running setup.py install for gevent ... \

。。。
    copying M2Crypto/SSL/TwistedProtocolWrapper.py -> build/lib.linux-x86_64-2.7/M2Crypto/SSL
    running build_ext
    building 'M2Crypto.__m2crypto' extension
    swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c
    swig -python -I/usr/include/python2.7 -I/usr/include -I/usr/include/openssl -includeall -modern -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
    /usr/include/openssl/opensslconf.h:36: Error: CPP #error ""This openssl-devel package does not work your architecture?"". Use the -cpperraswarn option to continue swig processing.
    error: command 'swig' failed with exit status 1

    ----------------------------------------
  Rolling back uninstall of M2Crypto
Command "/usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-DVCV7q/M2Crypto/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-up6_JN-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-DVCV7q/M2Crypto/

开始以为是 openssl 版本的问题,尝试升级openssl版本,仍然无解,后来发现是M2Crypto的版本问题,从Log中可以找出真正原因,下面看下安装的log:

Collecting M2Crypto==0.22.3 (from docker-registry)
  Using cached M2Crypto-0.22.3.tar.gz
Collecting sqlalchemy==0.9.4 (from docker-registry)
  Using cached SQLAlchemy-0.9.4.tar.gz
Installing collected packages: M2Crypto, sqlalchemy, docker-registry
  Found existing installation: M2Crypto 0.21.1
    Uninstalling M2Crypto-0.21.1:
      Successfully uninstalled M2Crypto-0.21.1
  Running setup.py install for M2Crypto ... error
    Complete output from command /usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-DVCV7q/M2Crypto/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-up6_JN-record/install-record.txt --single-version-externally-managed --compile:

这里面M2Crypto需要的版本是 0.22.3,而我系统安装的是 M2Crypto-0.21.1,先是把我的老版本给uninstall了,但是新版本却没有安装成功。
于是尝试安装指定版本的 M2Crypto。
关键的时刻到了,安装指定版本的M2Crypto:

env SWIG_FEATURES="-cpperraswarn -includeall -D__`uname -m`__ -I/usr/include/openssl" pip install M2Crypto==0.22.3
相关日志:
Collecting M2Crypto==0.22.3
  Using cached M2Crypto-0.22.3.tar.gz
Installing collected packages: M2Crypto
  Running setup.py install for M2Crypto ... done
Successfully installed M2Crypto-0.22.3
install docker-registry

install docker-registry

然后重新执行安装docker-registry:

$ sudo pip install docker-registry
Collecting docker-registry
  Using cached docker-registry-0.9.1.tar.gz
Requirement already satisfied: docker-registry-core<3,>=2 in /usr/lib/python2.7/site-packages (from docker-registry)
Requirement already satisfied: backports.lzma!=0.0.4,==0.0.3 in /usr/lib64/python2.7/site-packages (from docker-registry)
Requirement already satisfied: blinker==1.3 in /usr/lib/python2.7/site-packages (from docker-registry)
Requirement already satisfied: Flask==0.10.1 in /usr/lib/python2.7/site-packages (from docker-registry)
Requirement already satisfied: gevent==1.0.1 in /usr/lib64/python2.7/site-packages (from docker-registry)
Requirement already satisfied: gunicorn==19.1.1 in /usr/lib/python2.7/site-packages (from docker-registry)
Requirement already satisfied: PyYAML==3.11 in /usr/lib64/python2.7/site-packages (from docker-registry)
Requirement already satisfied: requests==2.3.0 in /usr/lib/python2.7/site-packages (from docker-registry)
Requirement already satisfied: M2Crypto==0.22.3 in /usr/lib64/python2.7/site-packages (from docker-registry)
Collecting sqlalchemy==0.9.4 (from docker-registry)
  Using cached SQLAlchemy-0.9.4.tar.gz
Requirement already satisfied: setuptools==5.8 in /usr/lib/python2.7/site-packages (from docker-registry)
Requirement already satisfied: boto==2.34.0 in /usr/lib/python2.7/site-packages (from docker-registry-core<3,>=2->docker-registry)
Requirement already satisfied: redis==2.10.3 in /usr/lib/python2.7/site-packages (from docker-registry-core<3,>=2->docker-registry)
Requirement already satisfied: simplejson==3.6.2 in /usr/lib64/python2.7/site-packages (from docker-registry-core<3,>=2->docker-registry)
Requirement already satisfied: Werkzeug>=0.7 in /usr/lib/python2.7/site-packages (from Flask==0.10.1->docker-registry)
Requirement already satisfied: Jinja2>=2.4 in /usr/lib/python2.7/site-packages (from Flask==0.10.1->docker-registry)
Requirement already satisfied: itsdangerous>=0.21 in /usr/lib/python2.7/site-packages (from Flask==0.10.1->docker-registry)
Requirement already satisfied: greenlet in /usr/lib64/python2.7/site-packages (from gevent==1.0.1->docker-registry)
Requirement already satisfied: MarkupSafe>=0.23 in /usr/lib64/python2.7/site-packages (from Jinja2>=2.4->Flask==0.10.1->docker-registry)
Installing collected packages: sqlalchemy, docker-registry
  Running setup.py install for sqlalchemy ... done
  Running setup.py install for docker-registry ... done
Successfully installed docker-registry-0.9.1 sqlalchemy-0.9.4

终于搞定,pip install docker-registry 安装成功,下面就可以继续 Docker 本地仓库的搭建了。

本文固定链接: https://sudops.com/install-docker-registry-failed.html | 运维速度

该日志由 u2 于2017年03月13日发表在 docker 分类下,
原创文章转载请注明: pip install docker-registry 失败的解决方案 | 运维速度
关键字:

报歉!评论已关闭.