您的位置:首页 > 运维架构 > Linux

CentOS 7 1511升级python到2.7.11后goagent引发的血案

2016-01-05 18:12 711 查看
今天通过yum update命令将自己的centos 7.1升级到了最新版本,centos 7-1511,

升级后python的版本是2.7.5-34.el7,运行goagent后会出现core文件,python直接挂掉,直觉认为是python版本老的缘故,

所以就直接下载了python 2.7.11的源码,一路编译,编译时指定了--prefix=/usr,所以直接替换掉了系统的python。

再次运行python proxy.py,会报错gevent,使用pip install gevent命令安装,(其实这时候已经有问题了,因为我是有gevent的)

再次运行python proxy.py,会把错cryptography,再通过命令pip install --upgrade cryptography,安装cryptography。

此时goagnet就ok了,可是血案刚刚开始......

此时执行yum update,会报一个经典的错误:No module named rpm,

我的解决思路很直接,找到rpm的centos7的源码(http://vault.centos.org/7.2.1511/os/Source/SPackages/rpm-4.11.3-17.el7.src.rpm),

然后编译并部分安装,

./configure --with-external-db "CPPFLAGS=-I/usr/include/libdb -I/usr/include/nss3 -I/usr/include/nspr4 -I/usr/include/python2.7"

会报错缺少magic.h,这是因为没有安装file-devel,

下载ftp://195.220.108.108/linux/centos/7.2.1511/os/x86_64/Packages/file-devel-5.11-31.el7.x86_64.rpm,

报错lua,因为没有安装lua-devel,

下再ftp://195.220.108.108/linux/centos/7.2.1511/os/x86_64/Packages/lua-devel-5.1.4-14.el7.x86_64.rpm

然后安装,再重新configure,

make

安装不用全部安装,只需要安装里面的python就可以了

cd python

python setup.py install

这样就解决了No module named rpm的问题。

继续yum update,报错:pycurl,这时候我意识到,pycurl我本来有的,只是在/usr/lib64/python2.7/site-packages目录下,

但是python会去找/usr/lib/python2.7/site-packages目录下,直接将pycurl-7.19.0-py2.7.egg-info和pycurl.so拷贝到此目录,问题解决。

我并没有去设置PYTHONPATH。

继续yum update,报错:sqlitecachec,_sqlitecache,同理从/usr/lib64/python2.7/site-packages目录拷贝到/usr/lib/python2.7/site-packages。

继续yum update,报错:xz compression not available,这个在我这里是库pyliblzma的原因,执行pip install pyliblzma,

或者只需要yum clean all && yum makecache就可以了,

如果不行,需要检查自己的/etc/yum.repo.d目录下,是不是有冗余或者冲突的配置文件,删除掉,然后再yum clean all && yum makecache。

=======================================================================================================

如果一开始就拷贝/usr/lib64/python2.7/site-packages下的rpm到/usr/lib/python2.7/site-packages是否就可以了呢?

直接替换掉系统的python版本还是太草率了,应该将python 2.7.11安装到/usr/local目录,只让goagent使用新版本的python。这样波及面会小很多。

===============================================

2016-2-27更新

事实证明,安装python2.7.11到/usr/local目录后,只需要拷贝gevent 和openssl就可以运行了~~

安装步骤如下:

./configure --prefix=/usr/local

make && make altinstall

cd /usr/loca/lib/python2.7/site-packages

cp -dpR /usr/lib64/python2.7/site-packages/gevent .

cp -dpR /usr/lib64/python2.7/site-packages/OpenSSL .

然后运行/usr/local/bin/python2.7 proxy.py

就搞定了~~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: