背景&问题
项目原因,需要对一台机器做kerberos授权。
使用yum安装kerberos过程中,遇到一些问题:
yum命令报错
$ yum
There was a problem importing one of the Python modules required to run yum.The error leading to this problem was:
No module named yum
...
版本问题
安装yum的python module之后,使用yum安装软件,仍然有版本问题
xxx has missing requires of python
xxx has missing requires of /usr/bin/python
xxx has missing requires of python(abi) = ('0','2.6',None)
xxx has missing requires of python >= ('0','2.0',None)
...
相关知识
rpm是啥: 本意是Red-Hat Package Manager,但是其他Linux版本也支持,可以看成通用的Linux软件包管理的工具。
yum又是啥:Yellow dog Updater, Modified的缩写(不能见名知意),一顿百度之后,我简单理解成,yum是python实现的,基于rpm的一个易用封装(屏蔽了rpm的软件包依赖等细节)
分析、解决
所以回过头来分析遇到的问题:
yum不可用,是一个python问题;
而yum可用,yum安装报版本的错误,其实是通过yum/rpm安装的软件有版本问题;
通过和正常机器的比对,发现本台机器的python2.6,是野路子安装的,不是通过rpm安装。yum安装软件,找不到使用rpm安装的python,于是就有missing requires of python的问题。所以,通过rpm装一个python2.6,理论上就通了。
不过安装过程中,访问正常的rpm仓库(http://mirrors.ustc.edu.cn/centos/6/os/x86_64/Packages等),看到的python-2.6.6.rpm包,版本都是python-2.6.6-66.el6_8.x86_64,适合centos6.8以上,理由是其他版本的centos软件包不维护升级,有安全风险。而我们的服务器是centos6.3,不能使用这个包。
最终按照http://mirrors.ustc.edu.cn/centos/6.3/readme中的提示,找到了老版本的rpm包,安装了与centos6.3配套的python包,才解决了问题。
如下为查找、删除、安装rpm包命令
#rpm安装的python相关包
rpm -qa|grep python
#删除软件
rpm -ev xxx
#安装rpm包
rpm -Uvh xxx.rpm
...
收获
收获有二:
任何时候,定位问题最快的方式,还是拿完美环境和问题环境,做对比,找diff,diff的点,往往就是问题点。程序员的控制变量法,颠扑不破。
得搞懂各种概念,之前对rpm、yum只是大概了解,通过这次定位解决问题,有了更深入的了解。