close
CentOS 5.2 安裝在 x86_64 的機器上一陣子後,開始安裝/移除套件時發現:有些 RPM 會出現因重複無法移除的問題。像這樣:

[root@JNT2 ~]# rpm -e kudzu-devel

error: "kudzu-devel" specifies multiple packages



解決的方式是透過 yum,它可以指定套件的架構版本。就上述而言,問題是出在於系統安裝了兩套 kudzu-devel,分別是 kudzu-devel.i386 與 kudzu-devel.x86_64,我的系統是 x86_64 的架構,所以移除掉重複的 i386 版本,應不致對系統造成影響。



因為我不會用 sed/awk也不會寫程式,所以我的笨作法是:先列出系統安裝的所有 RPM,再排序以便找出重複的套件名稱。排序指令 sort 有一個 -u 的參數,可以在發現重複的項目時,只列出其中一個,利用此功能,我作成兩個檔案:一個有重複的套件名、一個沒有,再用 diff 進行比對,抓出重複的套件刪除之。



一、列出所有 rpm、排序後存成 sort 檔:

rpm -qa| sort > sort





二、列出所有 rpm、排序後過濾掉重複的套件名,存成 sortu 檔

rpm -qa| sort -u  > sortu





三、比對這 sort 與 sortu 檔,挑出 diff 產生的開頭 < 字元 (也可能是 > 字元,視你 diff 時先輸入的檔名而定),即可找出套件名,然後我將之存成 rmduprpm 檔:

diff sort sortu | grep ^\< > rmduprpm





四、接下來只要處理 rmduprpm 檔即可,我的目的是這樣:

yum -y remove <套件名稱>.i386

(不加入 -y 的好處是,在一個一個套件刪的時侯,你可以人工確認一下是不是 i386,不知道 -y 是幹嘛的,man 一下 yum 吧)



是可以用文書編輯軟體,作成這樣的檔:

yum -y remove audit-libs-1.6.5-9.el5.i386

yum -y remove bzip2-devel-1.0.3-4.el5_2.i386

yum -y remove bzip2-libs-1.0.3-4.el5_2.i386

yum -y remove cdparanoia-libs-alpha9.8-27.2.i386

yum -y remove compat-glibc-2.3.4-2.26.i386

<略>



然後直接執行。(變更檔案為可執行:chomd u+x rmduprpm;然後執行 ./rmduprpm 就行了)

記得一定要加上 i386,不然就會連你要用的 x86_64 的檔也一起刪了,事情就大條了。



不過這樣作感覺很笨,所以我請傑森大法好幫我寫程式(用 php)來作:



[root@JNT2 tmp]# vi rmduprpm.php

<?

$f = file("rmduprpm");    <== rmduprpm 是比對後列出來重複的套件的那個檔案名稱

foreach($f AS $v){



$rpm = str_replace("< ","",trim($v));  <=== 去掉開頭的 < 字元

$cmd = 'yum -y remove '.$rpm.'.i386';  <=== 利用 yum 移除重複套件中,屬於 i386 的那些。

echo $cmd."\n";

//exec($cmd);   <== 程式測試確認無誤,就可以把這行註解 // 拿掉,正式執行了~~~



}

?>



完成後,以 php 執行該檔即可。



先用 rpm 來看看重複的檔案 (這裡舉 wireless-tools 為例):

[root@JNT2 tmp]# rpm -qa | grep wireless-tools

wireless-tools-28-2.el5

wireless-tools-28-2.el5

[root@JNT2 tmp]#



以 php 執行上面寫好的那個程式,移除重複的檔案 (此處僅挑三個套件為例):

[root@JNT2 tmp]# php nica.php

yum -y remove valgrind-3.2.1-6.el5.i386

yum -y remove wireless-tools-28-2.el5.i386

yum -y remove xorg-x11-xtrans-devel-1.0.1-1.1.fc6.i386

[root@JNT2 tmp]# rpm -qa | grep wireless-tools

wireless-tools-28-2.el5

[root@JNT2 tmp]#



之後再以同樣的 rpm 指令驗證,發現已無重複的套件了!!!!

arrow
arrow
    全站熱搜

    nicaliu 發表在 痞客邦 留言(0) 人氣()