[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 指令驗證,發現已無重複的套件了!!!!
留言列表