Linux下軟件包管理之RPM初始化
簡單定義:rpm是linux下的一種包文件,現在用的全稱叫RPM Package Manager,以前叫Redhat Package Manager。
它是一種安裝很方便的包,目前也有很多linux下的軟件都以rpm格式發佈。但它不是相當於windows中的exe文件,它的安裝必須是要通過命令的(就算是rpm包的管理程序,在安裝是也是通過命令方式的)rpm包有兩種,二進制包(Binary)以及源代碼包(Source)兩種。二進制包可以直接安裝在計算機中,而源代碼包將會由RPM自動編譯、安裝。源代碼包經常以src.rpm作爲後綴名。
1、 軟件包的組成部分:
1)二進制程序:如:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
2)程序的運行依賴的庫文件
如:/lib,/usr/lib,/usr/local/bin,
2、rpm軟件包管理工具包含的文件清單
a)文件清單:
b)文件放置路徑:
c)提供的功能說明
d)依賴關係
e)數據庫:
3、安裝程序的方式:
a)通用二進制格式
b)軟件包管理器
c)軟件包管理器的前端工具
d)源代碼編譯
lips:
Linux下的rpm包都是經過編譯的 ,而編譯程序本身依賴CPU對其編譯的軟件進行優化,有些軟件包依賴於平臺比如64bit、32bitCPU。
4、rpm包組成格式相關說明
RPM:打包、安裝、查詢、升級、卸載、數據庫管理(重建)
1)源程序:name-version.tar.{gz|bz|xz}
2)版本號:major.minor.release
3)升級:在哪一個版本號上面進行升級
4)如:bash-4.3.1.tzr.xz
5)RPM包:name-version-release-arch.rpm
6)髮型號用於標識RPM包本身的發行號,可包含所適用的操作系統
7)arch:主機架構平臺
lips:I686、X86_64 ADM64 noarch不依賴於平臺
8)RPM分包:
主包:核心包
分包:支包
Bind
Bind--level
9)OS:安裝程序
lips:Linux軟件包相關下載鏈接:
http://mirros.sohu.com 搜狐鏡像站點
http://mirrors.163.com/ 網易鏡像站點
5、軟件包安裝來源可靠性和安全性建議
RPM包有驗證機制:來源的合法性、軟件包的完整性
1)、首選光盤上存在的話還是建議用光盤上面的安裝包
2)、其次是EPEL,下載下來最好還是要校驗下
3)、對來源的合法性是通過公鑰加密或者說是非對稱加密來驗證的,通常使用GPG來實現。
4)、GPG是PGP的開源實現;PGP是一種技術實現。
5)、非對稱加密:一般有兩個祕鑰,Ppublic公鑰和S secret私鑰
6)、一般來講使用公鑰加密的只能使用與之配對的私鑰解密,反之亦然
7)、公鑰是從私鑰中提取出來的,你只要有私鑰,從公鑰中可以把私鑰提取出來。
8)、非對稱加密執行的速度非常慢,所以通常不會用來所數據加密,做數字簽名或祕鑰交換的。
私鑰加密特徵碼,只能用公鑰解密,反之亦然
9)只要能解密出來就能驗證是合法的啦
10)散列值:單項算法,對比散列值
11)能解密出來說明軟件包的來源是合法的,
12)只要是同樣的加密算法,計算出來hash碼,進行對比匹配即可。
6、紅帽簽名,提供了公鑰,RedHat系列官方公鑰
lips:安裝前的準備步驟:
1)、查看當前系統相關信息:
# lsb_release -a # uname -a
2)、RHEL6的公鑰信息保存在/etc/pki/rpm-gpg/
# ls /etc/pki/rpm-gpg/ -l
3)、導入公鑰驗證信息
#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
4)、複製光盤軟件到本地
#cp zip-3.0-1.el6.x86_64.rpm /test #cd /test
5、檢查簽名,驗證軟件包來源合法性
rpm -K zip-3.0-1.el6.x86_64.rpm
校驗驗證相關小貼士lips:
# rpm -K --nodigest zip-3.0-1.el6.x86_64.rpm //不檢驗單項的相關內容(sda1,md5)
# rpm -K --nosignature zip-3.0-1.el6.x86_64.rpm //不檢驗簽名信息(gpg,dsa)
手把手教你學軟件包安裝:
從光盤複製軟件包到本地安裝
# mount /dev/cdrom /media/cdrom/ //掛載光盤 # cd /media/cdrom/Packages/ //切換到光盤軟件包所在目錄 #ls # cp zip-3.0-1.el6.x86_64.rpm /test/ //複製相關軟件包到本地test目錄下 # cp zip-3.0-1.el6.x86_64.rpm /test/ //執行安裝 # rpm -K zip-3.0-1.el6.x86_64.rpm //執行公鑰校驗軟件包來源信息的合法性 # rpm -ivh /test/zip-3.0-1.el6.x86_64.rpm //執行安裝
-i --install 安裝路徑
-v -vv -vvv詳細信息,V字越多信息越詳細
-h hash碼,也就是警號#顯示安裝進度,一個警號2%,總共是50個#。
Linux rpm軟件包安裝前的小插曲
LipsRPM包具體細節的組成:
1)要安裝的文件
2)要執行的腳本 (pre安裝前、post安裝後、prenu卸載前、postun卸載後)
# rpm -ivh --test bind-chroot-9.8.2-0.17.rc1.el6.x86_64.rpm
依賴關係lips:
定義:一個RPM 包中的應用程序,有時除了自身所帶的附加文件保證其正常以外,還需要其它特定版本文件,這就是軟件包的依賴關係;依賴關係並不是Linux特有的,Windows操作系統中也是同樣存在的;比如我們在Windows系統中運行3D遊戲,在安裝的時候,他可能會提示,要安裝Direct 9 ;Linux和Windows原理是差不多的。
RPM依賴的東西叫capacity中文意爲能力。
rpm的一些基本選項:
--nodepends忽略依賴關係,與--replacepkgs(重裝)搭配使用
--replacepkgs重裝軟件包
重裝軟件包 --replacegks
# rpm -qa |grep ^zip # rpm -ivvvh --replacepkgs zip-3.0-1.el6.x86_64.rpm
--force無視衝突
卸載
-e 後面跟軟件包名 e----> erase 擦除之意
lips:擦除、抹除之意,只有別的軟件或相關進程依賴於某個軟件時才提示不能卸載,如果此軟件依賴於其他相關軟件和進程的話卸載是任何相關提示信息的。
升級
-F:old-->new,無old,則不new
-U old --->無old,安裝new
-vh也是常用的組合選項,以顯示詳細信息的方式安裝
關於內核的lips
注意:內核不應該升級安裝,內核允許多版本並存,多疑可以內核;如果測試一段時間新內核很穩定的話可以直接卸載舊內核,不過還是建議備份哦!升級之後即使新內核不穩定或者無法啓動再啓用新內核即可;不影響公司正常業務的開展!這是大家要注意的事項哦!
查詢
查詢:rpm -q |--query包名
# rpm -q zip
#rpm -qa //查詢系統中所有已安裝的軟件包 # rpm -qi zip //查詢zip軟件包的相關信息
lips:
rpm包單項加密,所謂單項加密就是提取數據的指紋信息。
特點:1)如果原數據一樣,結果一定會一樣;
2)雪崩效應,如果原數據有一點點不同,結果就大大不同;初始條件的微 小改變會引起結果的巨大改變。
單項加密會提取數據的特徵碼,如果,兩次提取不一樣呢?
官方:提取rpm特徵碼,附加在光盤裏面,使用自己的私鑰加密。
關於對驗證簽名的簡單lips:
1)用官方的公鑰解密這段加密的特徵碼;得到可靠的官方提供的特徵碼;
2)單項加密不可逆,自己再使用同樣的方法提取特徵碼,並比較和解密出來的特徵碼是否一致;
RPM -ql 軟件包名 用於顯示RPM包安裝完成之後在系統上生生成了哪些文件。
# rpm -ql zip
查詢rpm包安裝生成的文件清單:
rpm -ql 包名
查詢某文件是由哪個RPM包生成的
格式:rpm -qf 文件路徑
# rpm -qf /etc/inittab
查詢此軟件包生成的配置文件
格式:rpm -qc 包名
查詢包安裝生成的幫助文檔
格式:rpm -qd 包名
查詢此軟件包內置的腳本
格式:rpm -q --scripts 包名
四個腳本
preinstall安裝前腳本
postinstall安裝後腳本
preuninstall卸載前腳本
postuninstall卸載後腳本
linux RPM包的一些基本擴展
查詢尚未安裝的包的相關信息
格式:rpm -qpi 軟件包全名
# rpm -qpi bind-9.8.2-0.17.rc1.el6.x86_64.rpm
校驗,前面已經寫過,這裏介紹其他的校驗方法
定義:檢查rpm包安裝生成的文件有沒有被非法改變過。
格式:-Vpkgname
# rpm -V zip
# rpm -ql zip 查看此文件生成了哪些文件 # rpm -ql zip # echo "i love linux" >> /usr/share/doc/zip-3.0/algorith.txt # rpm -V zip
-V選項信息的基本說明
S | 表示size大小之意 | L | Readlink路徑不匹配 |
M | 表示權限爲改變 | U | 屬主改變 |
5 | Md5特徵碼之意 | G | 屬組改變 |
D | 主次設備號不匹配 | T | 最近一次的修改時間 |
Rpm包數據庫
# ls /var/lib/rpm/ -l //RPM數據庫文所在路徑
RPM數據庫重建
RPM數據庫在使用過程中出現丟失或者損壞的情況下需要重建數據庫,以保證系統中RPM軟件包的正常運行。
#rebuild initdb //重新初始化丟失了的庫
rebuilddb重建,無論事先是否存在
#rpm –rebuilddb //在rpm數據庫已破壞且不能安裝軟件包的時候使用
至此,linux RPM軟件的基本管理暫且寫到此處,難免會有錯誤和遺漏之處,請大家多提出意見和建議,謝謝。