云服务器用了一段时间,今天发现yum用不了了,使用yum时提示如下错误
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax
由于是云服务器提供了快照,理论上可以通过回滚还原,但快照间隔时间有点长,其间又装了无数内容,所以只能选择修复yum。
通过搜索问题得知由于yum依赖python2,此错误是python3不兼容导致。所以我下载了python2源码(python2.7和python2.5都尝试过)并进行了安装、创建了python的软连接、修改了/usr/bin/python,但运行时依旧如下报错
No module named yum
Please install a package which provides this module, or verify that the module is installed correctly.
再次搜索,其间装了各种版本python2始终不行,最后只有重装yum。但网上方案有些比较坑,除了删除yum相关内容还要删除python相关内容,其实完全没有必要。通过rpm -qa|grep yum和rpm -qa|grep python可以查看已安装内容,yum的只有三个还比较少,但python相关就很多了,所以最好先只卸载rpm:
rpm -qa | grep yum | xargs rpm -e –nodeps
然后通过cat /etc/redhat-release查看linux版本,去http://mirrors.163.com/centos/X/os/x86_64/Packages/下载yum包
1、yum-\*.rpm
2、yum-metadata-parser-\*.rpm
3、yum-plugin-fastestmirror-\*.rpm
但安装时可能会有类似rpm >= 0:4.11.3-22 is needed by yum-3.4.3-154.el7.centos.noarch的报错,那就按照提示下载相应rpm-*.rpm的包进行安装,推荐先普通安装,如果显示已经安装过,再通过--force强制覆盖安装
安装后尝试运行yum指令,还是No module named yum的报错,于是再安装python包,下载
1 python-*.rpm
2 python-libs-*.rpm
安装时又提示libcrypto.so.10(OPENSSL_1.0.2)(64bit) is needed,于是再去下载
1 openssl-*.rpm
2 openssl-libs-*.rpm
安装完后yum就能正常使用了(我是装了两次,第二次强制安装才正常,即使有效包已经存在但并不会生效,一定要强制覆盖安装)
总结:包存在情况一定要强制覆盖安装才能使包生效