rpm詳解
-
rpm使用方法
-
rpm起源
-
rpm是什么
-
rpm命名格式
-
rpm優缺點
-
rpm獲取注意
-
rpm命令使用
rpm起源
由于在linux中安裝應用程序需要源碼包編譯安裝,對于非專業人員而言難度太大,因而出現一種將源碼編譯好的二進制程序,庫文件,配置文件,幫助文件等打包成一個或多個特定格式的程序包,而管理這類包的工具之一,則稱為rpm.
rpm是什么
rpm 是 reahat package manage,最開始由redhat公司在其rhel系統上提供的程序包管理器,但是由于rpm的使用十分的方便,因此現在rpm是rpm is package manager,成為linux中通用的程序包管理器之一.
rpm命名格式
首先我們先了解一下,此類程序包的命令方法.直接上實例更加明顯, php-5.4.16-21.el7.x86_64.rpm 格式為name-VERSION-rpm_release.os.arch.rpm name:程序的名稱,php VERSION:程序源碼包的版本號,5.4.16 rpm_release:rpm的發行號,21 os:操作系統版本,el7 arch:編譯此包的cpu架構,x86_64 注:arch中有noarch,其表示此包可在任何架構平臺上安裝; 對于用戶而言,程序能夠運行則足夠,但是對于某些需要在此程序上進行二次開發,或者添加額外組件的專業人員,那該怎么辦呢? 因此rpm有一個拆包的機制,將一個程序分為主包跟其子包來管理,一般用戶只需要安裝主程序就能穩定使用,專業人員根據自己需求去安裝其它子包.以下來看看哪些是子包, openssl-1.0.1e-34.el7.x86_64 openssl-devel-1.0.1e-34.el7.x86_64 openssl-libs-1.0.1e-34.el7.x86_64 子包格式為application-function-VERSION-rpm_release.os.arch.rpm function:該程序的某功能組件 常見的有:libs-->庫文件 utils-->工具程序 devel-->開發組件
rpm優缺點
優點
為了更好的管理程序包的安裝,卸載,更新和查詢等操作,rpm提供 1.rpm包的組成文件列表(每個rpm包所必有的) 2.rpm包安裝或卸載時的腳本信息 3.公共數據庫保存 程序包的名稱和版本 依賴關系 功能說明 安裝生成的各文件的文件路徑及校驗碼信息 等信息
缺點
1 rpm包都是在特定環境定制的,因此對安裝環境有所要求. 2 在linux中,各程序之間的依賴關系由作者所設計,但由于程序包多種多樣,其依賴關系則非常的復雜,如果安裝一個應用程序,它會需要很多其它程序,才能正常運行起來,在安裝中很常見.因此這在rpm中是個弊端.
rpm獲取注意
由于rpm包是源碼編譯再將其打包,則rpm包也隨處可見,任何人都能夠進行發布rpm包.我們所需注意的是 1.包的來源性 2.包的完整性
rpm命令使用
rpm作用有:安裝,卸載,更新,查詢,校驗常用功能
rpm RPM Package Manager rpm包管理器 rpm [options] PACKAGE_FILE ... 基本選項: --version:顯示RPM版本號 -v:顯示操作過程詳細信息 -vv:顯示更加詳細的信息
安裝格式: rpm {-i|--install} [install-options] PACKAGE_FILE ... -i:安裝 -h:hash,以#表示安裝進度 --force:強制安裝 --nodeps:不檢查包的依賴關系 --test:不安裝,簡單的檢查和報告可能的沖突 --replacepkgs:覆蓋安裝 example: 安裝rpm包,時會因依賴關系而無法安裝,若想忽略依賴關系安裝,則需使用--nodeps ]# rpm -ivh httpd-2.2.15-53.el6.centos.x86_64.rpm error: Failed dependencies: apr-util-ldap is needed by httpd-2.2.15-53.el6.centos.x86_64 httpd-tools = 2.2.15-53.el6.centos is needed by httpd-2.2.15-53.el6.centos.x86_64 libdb-4.7.so()(64bit) is needed by httpd-2.2.15-53.el6.centos.x86_64 libpcre.so.0()(64bit) is needed by httpd-2.2.15-53.el6.centos.x86_64 忽略依賴關系并安裝 ]# rpm -ivh --nodeps httpd-2.2.15-53.el6.centos.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:httpd-2.2.15-53.el6.centos ################################# [100%]
卸載格式: rpm {-e|--erase} {ERASE OPTIONS} PACKAGE_NAME ... -e:卸載 --nodeps:不檢查包的依賴關系 --test:測試卸載,跟-vv連用 --allmatches:刪除此包所有的版本 注:如果程序包的配置文件被修改過,卸載時,此文件通常不會被刪除,而是被重命名(加后綴.rpmsave)后留存. 還需要注意卸載時,不要加.rpm后綴,因為安裝完成之后,就不是以rpm結尾的包. 建議:盡量不要卸載程序,只要不啟用就可以,以免由依賴關系所引起不必要的麻煩. example: 卸載tcsh的rpm包 ]# rpm -e tcsh-6.17-24.el6.x86_64 ]#
更新格式: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... -U:升級或安裝(如果不存在舊文件,直接安裝最新包) -F:升級(如果舊文件不存在,則什么都不做) --oldpackage:降級到舊版本 --force:有沖突時強制升級 --nodeps:不檢查包的依賴關系 --test:不安裝,簡單的檢查和報告可能的沖突 注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,直接安裝新版本內核;同樣不要對python進行升級. (2) 如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供; example: (只是為做演示,是rpm的發行號更新) 1 舊版本httpd升級為新版本httpd ]# rpm -Uvh --nodeps --oldpackage httpd-2.2.15-53.el6.centos.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:httpd-2.2.15-55.el6.centos.2 ################################# [ 50%] Cleaning up / removing... 2:httpd-2.2.15-53.el6.centos ################################# [100%] 2 新版本降級到舊版本 ]# rpm -Uvh --nodeps --oldpackage httpd-2.2.15-53.el6.centos.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:httpd-2.2.15-53.el6.centos ################################# [ 50%] Cleaning up / removing... 2:httpd-2.2.15-55.el6.centos.2 ################################# [100%]
查詢格式: rpm {-q|--query} [select-options] [query-options] [PACKAGE_FILE ...] -q:是否安裝指定的程序包 select-options -a:查看所有已經安裝的包 -f:查看某個文件自己的安裝包,/path/to/file -p:查看沒有安裝的包 query-option --changelog:查看程序包的變化信息 -i,--info:查看包的詳細信息 -c:查看包的配置文件 -l:查看包安裝的文件列表 -d:查看包安裝的幫助文件列表 --dump:查看包文件列表元數據的詳細信息 --provides:查看包的capabilities --requires:查看包所依賴的capabilities --scripts:查看包安裝或卸載時執行的腳本 此類腳本有四種: preinstall:安裝過程開始之前執行的腳本 postinstall:安裝過程完成之后執行的腳本 preuninstall:卸載開始之前執行的腳本 postuninstall:卸載之后執行的腳本 Capabilities:即該包能夠提供的能力(例如:httpd能提供web server的能力) example: 1 查看httpd是否已經安裝 ]# rpm -q httpd httpd-2.2.15-55.el6.centos.2.x86_64 2 查看系統上所有以安裝的rpm包 ]# rpm -qa gcc-4.8.2-16.el7.x86_64 policycoreutils-2.2.5-11.el7.x86_64 cairomm-1.10.0-8.el7.x86_64 ... 3 查看安裝/usr/sbin/httpd的rpm包 ]# rpm -qf /usr/sbin/httpd httpd-2.2.15-55.el6.centos.2.x86_64 4 查看尚未安裝的包 ]# rpm -qp httpd-2.2.15-53.el6.centos.x86_64.rpm httpd-2.2.15-53.el6.centos.x86_64 5 查看httpd包的版本修改日志 ]# rpm -q --changelog httpd * Fri Nov 18 2016 Johnny Hughes <johnny@centos.org> - 2.2.15-54.2 - Roll in CentOS Branding 6 查看httpd包所安裝的所有文件清單 ]# rpm -ql httpd /etc/httpd/conf.d/welcome.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/logrotate.d/httpd ... 7 查看httpd包的詳細信息 ]# rpm -qi httpd Name : httpd Version : 2.2.15 Release : 55.el6.centos.2 Architecture: x86_64 ... The Apache HTTP Server is a powerful, efficient, and extensible web server. 8 查看httpd包提供的capabilities config(httpd) = 2.2.15-55.el6.centos.2 httpd-mmn = 20051115 httpd-suexec = 2.2.15-55.el6.centos.2 mod_actions.so()(64bit) ... webserver httpd = 2.2.15-55.el6.centos.2 httpd(x86-64) = 2.2.15-55.el6.centos.2 9 查詢httpd包所依賴的capabilities ]# rpm -q --requires httpd /bin/bash /bin/sh ... rtld(GNU_HASH) system-logos >= 7.92.1-1 rpmlib(PayloadIsXz) <= 5.2-1 10 查詢httpd包安裝及卸載時所執行的腳本 ]# rpm -q --scripts httpd preinstall scriptlet (using /bin/sh): # Add the "apache" user getent group apache >/dev/null || groupadd -g 48 -r apache ... preuninstall scriptlet (using /bin/sh): if [ $1 = 0 ]; then ... /sbin/service httpd condrestart >/dev/null 2>&1 || : 技巧使用: 一般當安裝出現缺少某庫時,可以使用-qf來查詢此庫由哪個程序包所提供,進而解決. 例如: 當安裝時出現缺少,liblogin.so.2庫時: # find / -name "liblogin.so.2"|xargs rpm -qf cyrus-sasl-plain-2.1.23-13.el6_3.1.x86_64
校驗格式: rpm {-V|--verify} [select-options] [verify-options] -V:檢查包安裝之后生成的文件是否發生了改變 如果沒有輸出結果,則 當有結果輸出時,則根據下面查詢對應原因: S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P caPabilities differ S:文件大小改變 M:文件權限和類型發生改變 5:MD5這一種指紋碼內容改變 D:設備主/次號改變 L:Link路徑改變 U:文件所屬人改變 G:文件所屬組改變 T:文件修改時間改變 p:文件的Capabilities發生改變 example: 在httpd所安裝的文件中添加一個數 echo 1 >> /etc/httpd/conf/httpd.conf 大小改變,MD5碼改變,文件修改時間改變 # rpm -V --nodeps httpd S.5....T. c /etc/httpd/conf/httpd.conf
包來源合法性驗證和完整性驗證: 獲取并導入信任的包制造者的公匙: 對于CentOS發行版其命令 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-# 導入公匙之后時,會進行自動驗證其完整性 也可手動驗證: rpm {-K|--checksig} PACKAGE_FILE...
數據庫重建: rpm的數據庫路徑:/var/lib/rpm/ 查詢通過此數據庫進行 centos 6 獲取幫助: man rpm centos 7 獲取幫助: man rpmdb rpm {--initdb|--rebuilddb}[--dbpath DIRECTORY] [--root DIRECTORY] --initdb:初始化數據庫;當前系統中無數據庫時,創建一個新的數據庫; --rebuildb:通過讀取當前系統已安裝的包,重新構建一個數據庫; --dbpath DIRECTORY:指定數據庫安裝路徑 --root DIRECTORY:指明所在根目錄 example: 在/tmp/rpm下創建一個數據庫 # rpm --initdb --dbpath /tmp/rpm # ls /tmp/rpm __db.001 __db.002 __db.003 __db.004 Packages 當數據庫損壞時,進入/tmp/rpm目錄下,執行以下命令 # rpm --rebuilddb # rpm --initdb
原創文章,作者:N25_sadan,如若轉載,請注明出處:http://www.www58058.com/64508