搜索了一下網絡,發現解法大致有兩種: java
相互依賴的軟件包,使用rpm的--nodeps參數就搞定了.
rpm --nodeps -e gdm-2.24.1-4.fc10.i386 node
也就是說不檢查依賴。這樣的話,那些使用該軟件包的軟件在此以後可能就不能正常工做了。 sql
執行 編程
rpm -e 要刪除的rpm包名稱 api
而後根據輸出再在命令行後面跟上依賴包名稱 tomcat
rpm -e 要刪除的rpm包名稱 依賴的rpm包名稱 網絡
這種方法是我之前也常常使用的,好比用於刪除RHEL/CentOS中原裝的jdk jvm
下面演示這一步驟,比較煩,由於要刪除的依賴包實在太多,要複製粘貼n次 jsp
[root@localhost ~]# java -version ui
java version "1.6.0_22" OpenJDK Runtime Environment (IcedTea6 1.10.4) (rhel-1.24.1.10.4.el5-i386) OpenJDK Server VM (build 20.0-b11, mixed mode)
[root@localhost ~]# rpm -qa | grep jdk
java-1.6.0-openjdk-1.6.0.0-1.24.1.10.4.el5 java-1.6.0-openjdk-devel-1.6.0.0-1.24.1.10.4.el5
[root@localhost ~]# rpm -e java-1.6.0-openjdk-1.6.0.0-1.24.1.10.4.el5 java-1.6.0-openjdk-devel-1.6.0.0-1.24.1.10.4.el5
error: Failed dependencies: jre >= 1.5.0 is needed by (installed) openoffice.org-ure-3.1.1-19.5.el5_5.6.i386
[root@localhost ~]# rpm -e java-1.6.0-openjdk-1.6.0.0-1.24.1.10.4.el5 java-1.6.0-openjdk-devel-1.6.0.0-1.24.1.10.4.el5 openoffice.org-ure-3.1.1-19.5.el5_5.6.i386 error: Failed dependencies: libjvmaccessgcc3.so.3 is needed by (installed) openoffice.org-core-3.1.1-19.5.el5_5.6.i386 libjvmaccessgcc3.so.3(UDK_3.1) is needed by (installed) openoffice.org-core-3.1.1-19.5.el5_5.6.i386
太多輸出,省略
by (installed) openoffice.org-calc-3.1.1-19.5.el5_5.6.i386 openoffice.org-ure = 1:3.1.1-19.5.el5_5.6 is needed by (installed) openoffice.org-graphicfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-ure = 1:3.1.1-19.5.el5_5.6 is needed by (installed) openoffice.org-draw-3.1.1-19.5.el5_5.6.i386
[root@localhost ~]# 有太多軟件包須要刪除,此處再也不繼續
[root@localhost ~]#
編寫一個 force_remove_package.sh 的Bash腳本,內容以下:
其中,
1. 用 for 循環進行有限次嘗試 而不用 while true,那是爲了防止編程死循環,別由於輸入錯誤真的把系統裏面全部的包都給刪除了;
2. awk命令裏面的 $8,是通過嘗試出來的,由於 rpm -e 命令輸出的信息中包含有不少空格;
3. rpm -e 的錯誤輸出須要重定向到標準輸出,不然就不會獲得依賴包,而直接輸出在終端上了。
用它來刪除系統原裝的jdk,輸出以下:
[root@localhost setup]# ./force_remove_package.sh java-1.6.0-openjdk-1.6.0.0-1.24.1.10.4.el5 java-1.6.0-openjdk-devel-1.6.0.0-1.24.1.10.4.el5
1 openoffice.org-ure-3.1.1-19.5.el5_5.6.i386
2 openoffice.org-ure-3.1.1-19.5.el5_5.6.i386 openoffice.org-core-3.1.1-19.5.el5_5.6.i386 openoffice.org-writer-3.1.1-19.5.el5_5.6.i386 openoffice.org-impress-3.1.1-19.5.el5_5.6.i386 openoffice.org-math-3.1.1-19.5.el5_5.6.i386 openoffice.org-calc-3.1.1-19.5.el5_5.6.i386 openoffice.org-graphicfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-draw-3.1.1-19.5.el5_5.6.i386
3 openoffice.org-ure-3.1.1-19.5.el5_5.6.i386 openoffice.org-core-3.1.1-19.5.el5_5.6.i386 openoffice.org-writer-3.1.1-19.5.el5_5.6.i386 openoffice.org-impress-3.1.1-19.5.el5_5.6.i386 openoffice.org-math-3.1.1-19.5.el5_5.6.i386 openoffice.org-calc-3.1.1-19.5.el5_5.6.i386 openoffice.org-graphicfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-draw-3.1.1-19.5.el5_5.6.i386 openoffice.org-xsltfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-langpack-zh_TW-3.1.1-19.5.el5_5.6.i386 openoffice.org-langpack-zh_CN-3.1.1-19.5.el5_5.6.i386
4 openoffice.org-ure-3.1.1-19.5.el5_5.6.i386 openoffice.org-core-3.1.1-19.5.el5_5.6.i386 openoffice.org-writer-3.1.1-19.5.el5_5.6.i386 openoffice.org-impress-3.1.1-19.5.el5_5.6.i386 openoffice.org-math-3.1.1-19.5.el5_5.6.i386 openoffice.org-calc-3.1.1-19.5.el5_5.6.i386 openoffice.org-graphicfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-draw-3.1.1-19.5.el5_5.6.i386 openoffice.org-xsltfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-langpack-zh_TW-3.1.1-19.5.el5_5.6.i386 openoffice.org-langpack-zh_CN-3.1.1-19.5.el5_5.6.i386
[root@localhost setup]#
固然,還能夠繼續改進,以下:
這個改進主要是,
1. 對每次檢查時新增的依賴包進行檢查,若是沒有新增的依賴包($NEWDEPS),程序中止運行;
2. awk 輸出的 $8 也變成了 $6。其中原因如今尚未找到。
用它來刪除tomcat試試。
[root@localhost setup]# rpm -qa | grep tomcat
tomcat5-servlet-2.4-api-5.5.23-0jpp.22.el5_7
tomcat5-jsp-2.0-api-5.5.23-0jpp.22.el5_7
[root@localhost setup]# ./force_remove_package.sh tomcat5-servlet-2.4-api-5.5.23-0jpp.22.el5_7 tomcat5-jsp-2.0-api-5.5.23-0jpp.22.el5_7
1 hsqldb-1.8.0.9-1jpp.2.i386 bsf-2.3.0-11jpp.1.i386 bsf-2.3.0-11jpp.1.i386
2 bsh-1.3.0-9jpp.1.i386
3
[root@localhost setup]# rpm -qa | grep tomcat
[root@localhost setup]#
發現上面改進過的腳本仍是有問題的,在刪除帶有java的軟件包時會有問題
改用sed而不是awk
使用sed替換能準確的取得依賴的軟件包名稱。
[root@localhost setup]# rpm -qa | grep java
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
tzdata-java-2011l-4.el5
[root@localhost setup]#
[root@localhost setup]# ./force_remove_package.sh java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 tzdata-java-2011l-4.el5 1 xml-commons-apis-1.3.02-0.b2.7jpp.10.i386 xerces-j2-2.7.1-7jpp.2.el5_4.2.i386 xalan-j2-2.7.0-6jpp.1.i386 xml-commons-resolver-1.1-1jpp.12.i386 gjdoc-0.7.7-12.el5.i386 antlr-2.7.6-4jpp.2.i386 lucene-1.4.3-1jpp.16.i386 2 [root@localhost setup]# rpm -qa | grep java [root@localhost setup]#