误删 site-packages 从来导致 YUM 无法使用的修复方法

Nov 26th, 2009 | Filed under Journal

在客户的服务器上面折腾 trac ,但 PySqlite2 一直编译出错,于是想删掉 PySqlite2 通过其它方式安装。

很自然的想输入如下命令:

#> rm -rf /usr/lib/python2.4/site-packages/PySqlite2

天太冷,没想到手一抖,变成了:

#> rm -rf /usr/lib/python2.4/site-packages/ PySqlite2

于是悲剧就这样发生了,site-packages 瞬间消失… 😥

Centos 中很多重要服务都会依赖 Python,这个白痴的手误虽然不至于摧毁整个系统,但某些服务显然是不能用了,比如 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

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.4.3 (#1, Sep  3 2009, 15:37:12)
    [GCC 4.1.2 20080704 (Red Hat 4.1.2-46)]

    If you cannot solve this problem yourself, please go to
    the yum faq at:
    http://wiki.linux.duke.edu/YumFaq

那么首先要做的是修复 Yum 服务,Yum 修复后,就可以更方便的重装一些被损坏的 package。

嗯,幸运的是,rpm 命令并没有受到影响!

访问 Centos 官网:http://mirror.centos.org/centos-5/5.4/os/i386/CentOS/(32位系统,64位请移步到 …/os/x86_64/CentOS/),下载对应版本的相关 rpm 包,重新安装即可。

注意 Centos 版本号,如果不知道,可以通过如下命令得到:

#> cat /etc/issue
CentOS release 5.4 (Final)
Kernel \r on an \m

一番尝试之后,发现有 N 个 package 需要重新安装,这里就不写尝试过程,直接把结果做成了 shell script,运行即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
 
URL=http://mirror.centos.org/centos-5/5.4/os/i386/CentOS/
for package in \
        python-2.4.3-27.el5.i386.rpm \
        python-devel-2.4.3-27.el5.i386.rpm \
        python-elementtree-1.2.6-5.i386.rpm \
        python-iniparse-0.2.3-4.el5.noarch.rpm \
        python-setuptools-0.6c5-2.el5.noarch.rpm \
        python-sqlite-1.1.7-1.2.1.i386.rpm \
        python-urlgrabber-3.1.0-5.el5.noarch.rpm \
        rpm-python-4.4.2.3-18.el5.i386.rpm \
        yum-3.2.22-20.el5.centos.noarch.rpm \
        yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm \
do 
    rpm -Uvh --replacepkgs $URL$package
done

注意 rpm 命令,必须要追加 –replacepkgs 参数,强制其重新安装,否则 rpm 会报告说 package 已安装。

如果仍然无法运行 Yum,则运行 Python,import yum,查询下缺少什么东西。

#> python
Python 2.4.3 (#1, Sep  3 2009, 15:37:12)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import yum

如果仍有 package 缺失,import yum,会提示相关的错误,查找对应的 rpm,装上即可,重复此过程,直到 yum 正常。

Yum 修复完毕之后,运行:

yum update

更新一下刚刚重新安装上去的 rpm。

除了 Yum,很可能还有其它的服务受到牵连(比如 sqlite 和 php 等),索性把所有和 Python 有关系的 package 都重装一下。

1
2
3
4
#!/bin/bash
 
packages=`yum list installed | grep python | awk '{print $1}'`
yum reinstall $packages

嗯,差不多就是这样了,继续装 trac … 这玩意真难装。
:mrgreen:

  1. Bill He
    Jan 17th, 2010 at 18:29
    Reply | Quote | #1

    误删 site-packages 从来导致 YUM 无法使用的修复方法 我试过 不知道是不是包下错了 我的服务器用的是AMD 3000+ 64bit的处理器 我先是按照你说的方法做 后来再 python imprt yum 是下错了包吗?我下的都是i386的

    急阿!我的qq是如邮箱所示 因为看到是隐藏的属性 我就间接告诉你啦

    能帮下忙吗?

  2. Bill He
    Jan 17th, 2010 at 18:30
    Reply | Quote | #2

    我试过了 问题依旧哦 急啊!

  3. Verdana Mu
    Jan 17th, 2010 at 19:05
    Reply | Quote | #3

    下载 x86_64 目录下面的 rpm 包。

Comments are closed.