最近公司要開發新的產品,在本地搭建了一下服務端的開發環境,安裝centos5.5,安裝了一些編譯php需要的庫文件gd,libxml,zlib等等,n多操作后,再使用yum時發現如下錯誤:

[root@home ~]# yum update
Setting up Update Process
Setting up repositories
Segmentation fault

 

[root@home ~]# strace yum update

last lines of strace :

_llseek(6, 0, [0], SEEK_CUR) = 0
read(6, "<?xml version=\"1.0\" ?><repomd xm"..., 8192) = 3846
read(6, "", 4346) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++

 

google大神和百度大神了n次,基本都是一樣的解決方案(1、yum clean all 2、修改源 3、修改yum.conf),照此執行,但并不能解決我的問題,有點絕望,但上天不負有心人,找到了這個 http://bugs.centos.org/view.php?id=4702&nbn=1

給了我們(我和我的同事)一些啟發,原來是我們安裝的zlib1.2.5時指定了安裝目錄(./configure -prefix=/usr)對yum產生了影響,所以總結如下:

1、安裝完系統后,運行一次#yum update(yum產生了緩存) ,然后再安裝zlib1.2.5,之后如果不執行#yum clean all,則一直可以使用yum,不會報段錯誤

2、如果在執行yum前已經安裝了zlib1.2.5,則需要做如下處理

#cd /usr/lib

#ln -sf libz.so.1.2.3 libz.so

#ln -sf libz.so.1.2.3 libz.so.1

但此后zlib就使用了舊版本,在成功執行了yum后,還需要將軟連接更改

#cd /usr/lib

#ln -sf libz.so.1.2.5 libz.so

#ln -sf libz.so.1.2.5 libz.so.1

至此,問題解決了!