Linux程序包管理之RPM
RPM概念
rpm是什么
RPM 是Ret Hat Package Manager(RPM軟件包管理器)的縮寫,遵循GPL協議,可以運行在各種Linux上,公認的行業標準。
rpm干什么
對于終端用戶來說
簡化了Linux系統的安裝、卸裝、更新和升級的過程,用命令完成對于開發者來說
RPM允許把軟件編碼包裝成源代碼和程序包提供給用戶,過程簡單,減輕了發行軟件新版本所帶來的負擔。
管理用途
可以安裝、刪除、升級、刷新和管理RPM軟件包 通過RPM軟件管理包能知道軟件包包含哪些文件,以及系統中的某個文件屬于哪個包 可以查詢系統中的RPM軟件包是否安裝并查詢其安裝的版本 開發者可以把自己的程序打包為RPM包并發布 軟件包簽名GPG和MD5的導入、驗證和簽名發布 依賴性的檢查,查看是否有RPM軟件包由于不兼容而擾亂系統
rpm包命名格式
程序包的構建過程
源代碼–>目標二進制格式–>把(二進制程序,庫文件,配置文件,幫助文件)組織成為一個或幾個包文件
程序包管理類型
deblan: dpt(命令dpkg) 程序包以“.deb”為后綴 redhat: redhat package manager:rpm(命令rpm) 程序包以“.rpm””為后綴 Su.S.E: rpm包,(命令rpm) 與redhat的rpm包的路徑格式不兼容 Gentoo:ports ArchLinux: 輕量級Linux
程序包依賴關系
包之間:可能存在依賴關系,甚至循環依賴 x,y,z x–>y,z y–>a,b,c c–>D 安裝某個主包,必須安裝主包依賴的副包 解決依賴關系,使用rpm前端工具
程序包前段工具
yum:rhel系列上 rpm包管理器的前端工具 agt-get(apt-cache):deb包管理器的前端工具 zypper:suse的rpm管理器前段工具 dnf: Fedora 22+系統上rpm包管理器的前端工具
獲取程序包途徑
(1)系統發行版的光盤或官方的文件服務器(或鏡像站點) http://mirrors.aliyun.com/ http://mirrors.sohu.com http://mirrors.163.com (2)項目的官方站點 http://www.zabbix.com (3)第三方組織 社區組織維護 Fedora-EPEL: Rpmforge:RHEL推薦,包很全 (4)搜索引擎:不安全 http://pkgs.org http://rpmfind.net/ http://rpm.pbone.net/ http://sourceforge.net/ (5)自已動手,豐衣足食 建議:對網上下載的程序包進行md5校驗,檢查其完整性,合法性 來源合法性: 程序包的完整性;
rpm管理
rpm命令
rpm [OPTIONS] [PACKAGE_FILE] 安裝:-i,–install 升級:-U,–update,–freshen 卸載:-e,–erase 查詢:-q 校驗:-V 數據庫維護:–builddb,–initdb
安裝:
rpm {-i|–install} [install-options] PACKAGE_FILE… rpm -ivh PACKAGE_FILE.. GENERAL OPTIONS: -v:詳細信息 -VV:更詳細的輸出 [install-options]: -h:hash marks 輸出進度條;每個#表示2%的進度 –test:測試安裝,檢查并報告依賴關系及沖突消息,并不真正安裝程序 –nodeps:忽略依賴關系,強制安裝 ,但程序不一定能使用 不建議 –replacepkgs重新安裝 —replacefiles 重新安裝,忽略重復文件 –nosignature:不檢查報名簽名信息,不檢查來源合法性 –nodigest:不檢查包的完整性信息 (校驗 MD5) –justdb:更新數據庫,但不重新安裝 –noscripts 不執行全部程序包腳本 注意:rpm可以自帶腳本 腳本分四類:(特定的腳本的參數,可以單獨選擇) preinstall:安裝過程開始之前運行的腳本,%pre –nopre postinstall:安裝過程完成之后運行的腳本 $post –nopost preuninstall:卸載過程真正開始前運行的腳本 $preun –nopreun postuninstall:卸載過程中運行的腳本 $postun –nopreun
升級:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE.. rpm {-F|-freshen} [install-options] PACKAGE_FILE.. [PTIONS] -U:有舊版本升級或原程序不存在執行安裝 -F:只執行升級 rpm -Uvh PACKAGE_FILE.. rpm -Fvh PACKAGE_FILE. [install-options]: –oldpackage:降級安裝舊版本 –force:強制;新版本的程序包不滿足老版本的依賴關系 ,強制安裝或強制升級,忽略依賴關系,也可配合rpm -ivh選項 注意: (1)不要對內核kernel做升級操作 linux支持多內核并存,因此,直接安裝新版本內核即可 (2)如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重名命為(FILEname.rpmnew)后提供
卸載:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts][–notriggers] [–test] PACKAGE_NAME … –allmatches:卸載所有匹配指定名稱的程序包的各版本 –nodeps:強制忽略依賴關系 –test:測試卸載:dry run模式
查詢
rpm {-q|–query} [select-options] [query-options] PACKAGE_NAME … select-options: PACKAGE_NAME :查詢指定程序包是否安裝及安裝信息 -a:所有已安裝的程序包列表 -f:查詢指定的文件由那個程序包安裝 -g:查詢指定包組中包含哪些包 -p:對未安裝的程序包執行查詢操作; –whatprovides CAPABILITY:查詢指定的CAPABILITY由那個程序包提供; –whatrequires CAPABILITY:查詢指定的CAPABILITY被那個程序包所依賴; query-options: –changelog:查詢rpm包的changlog -l:rpm包生成的所有文件列表 -i:查詢程序包相關的信息,版本號,大小,所屬包組等等 -c:查詢指定的程序包提供的配置文件 -d:查詢指定的程序包提供的幫助文檔 –provides:列出指定的程序包提供的所有的CAPABILITY. 在確定–whatprovides CAPABILITY -R:查詢指定程序包的依賴關系 –scripts:查詢指定程序包自帶的腳本片段 哪個包所依賴 rpm2cpio 包文件|cpio –itv 預覽包內文件 rpm2cpio 包文件|cpio –id “ *.conf” 釋放包內文件 用法: -ql ,-qd,-qc,-qi,-qa PACKAGE_NAME -qp{i,c,d,f} PACKAGE_FILE :未安裝程序的詳細信息
校驗
rpm {-V|–verify} [select-options] [verify-options] 程序名 只要改變服務下的任意文件,使用-V校驗,都可看到修改信息
例:修改httpd的配置文件,校驗httpd服務
將httpd中的某個文件改動一點點就會查詢到。
顯示信息的含義: S file Size differs 文件大小 M Mode differs (includes permissions and file type) 權限 5 digest (formerly MD5 sum) differs MD5 D Device major/minor number mismatc 主次設備號不配備 L readLink(2) path mismatch 路徑不匹配 U User ownership differs 屬主匹配 G Group ownership differs 屬組比匹配 T mTime differs 時間戳改變 P caPabilities differ
數據庫重建
rpm管理器數據庫路徑:/var/lib/rpm/ 該目錄嚴重保護,全額備份 查詢操作:通過此處的數據庫進行; NAME rpmdb – RPM Database Tool SYNOPSIS rpm {–initdb|–rebuilddb} [-v] [–dbpath DIRECTORY] [–root DIRECTORY] –initdb:初始化數據庫,當前無任何數據庫可初始化創建一個新的,當前有時,不執行任何操作 –rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建(不管如何,直接重建)
例如:
程序包來源合法性和完整性驗證:
來源合法性驗證:RSA 完整性驗證:SHA256 公鑰加密: 對稱加密:加密、解密使用同一密鑰; 非對稱加密:密鑰是成對兒的 public key: 公鑰,公開所有人 secret key: 私鑰, 不能公開 獲取并導入信任的包制作者的公鑰: rpm -K|checksig rpmfile 檢查包的完整性和簽名 rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 CentOS 7發行版光盤提供: RPM-GPG-KEY-CentOS-7 rpm -qa gpg-pubkey 對于Centos發行版來說:rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-centos-7 驗正: (1)安裝此組織簽名的程序時,會自動執行驗證 (2)手動驗證:rpm- k PACEAGE-FILE
實例演示:
查看當前安裝軟件包的RPM數據庫
查詢單個軟件包
查詢所有軟件包
利用本地centos iso光盤裝rpm軟件包
思路: 確定需要什么包-->掛載centos.iso鏡像光盤-->進入到光盤內-->查找某包-->安裝某包-->卸載某包
這里以安裝tree為例
1.只讀掛載:mount -r /dev/cdrom /media 2.進入光盤內部:cd /media/ 3.查看要掛載包的版本:ls |grep tree
4.安裝:rpm -ivh 版本
包來源合法性及完整性驗證
1.導入檢查公鑰:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 2.驗證:
安裝此包會自動驗證
手動驗證:rpm -K
原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/60356
知識整理的非常贊,而且符合闡述知識點,并對知識點進行驗證的方式來總結,值得大家學習。