一、大綱
查詢與校驗包:
rpm {-q|--query} [select-options] [query-options] rpm {-V|--verify} [select-options] [verify-options] rpm --import PUBKEY ... rpm {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE ...
安裝、升級和刪除包:
rpm {-i|--install} [install-options] PACKAGE_FILE ... rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--repackage] [--test] PACKAGE_NAME ...
其它使用方法:
rpm {--initdb|--rebuilddb} rpm {--addsign|--resign} PACKAGE_FILE ... rpm {--querytags|--showrc} rpm {--setperms|--setugids} PACKAGE_NAME ...
select選項
[PACKAGE_NAME] [-a,--all] [-f,--file FILE] [-g,--group GROUP] {-p,--package PACKAGE_FILE] [--fileid MD5] [--hdrid SHA1] [--pkgid MD5] [--tid TID] [--querybynumber HDRNUM] [--triggeredby PACKAGE_NAME] [--whatprovides CAPABILITY] [--whatrequires CAPABILITY]
query選項
[--changelog] [-c,--configfiles] [-d,--docfiles] [--dump] [--filesbypkg] [-i,--info] [--last] [-l,--list] [--provides] [--qf,--queryformat QUERYFMT] [-R,--requires] [--scripts] [-s,--state] [--triggers,--triggerscripts]
verify選項
[--nodeps] [--nofiles] [--noscripts] [--nodigest] [--nosignature] [--nolinkto] [--nomd5] [--nosize] [--nouser] [--nogroup] [--nomtime] [--nomode] [--nordev]
install選項
[--aid] [--allfiles] [--badreloc] [--excludepath OLDPATH] [--excludedocs] [--force] [-h,--hash] [--ignoresize] [--ignorearch] [--ignoreos] [--includedocs] [--justdb] [--nodeps] [--nodigest] [--nosignature] [--nosuggest] [--noorder] [--noscripts] [--notriggers] [--oldpackage] [--percent] [--prefix NEWPATH] [--relocate OLDPATH=NEWPATH] [--repackage] [--replacefiles] [--replacepkgs] [--test]
說明:
rpm是一個強有力的包管理工具,它可以用於建造、安裝、查詢、檢驗、更新和刪除個別的軟件包。文件包由文件的檔案組成且元數據過去常用於安裝和刪除存檔文件。元數據包括幫助角本、文件屬性和關於這個包的可描述性信息。包通常有兩個變體:二進制包,用於壓縮軟件的安裝;另一個是源程序包,包括原代碼和產生二進制包的的方法說明。
必須選擇下面的基本模式:Query, Verify, Signature Check, Install/Upgrade/Freshen, Uninstall, Initialize Database, Rebuild Database, Resign, Add Signature, Set Owners/Groups, Show Querytags, and Show Configuration。
二、一般選項
那些選項可以用於所有的不同的模式中。
-?, --help 正常情況下輸出使用方法。 --version 輸出包括目前所使用的rpm版本數據的單行。 --quiet 輸出盡可能少-正常情況下,如果有錯誤出現,僅輸出錯誤。 -v 輸出詳細信息-正常的常規的進程信息。 -vv 輸出很多的調試信息。 --rcfile FILELIST 第一個在FILELIST中由冒號區分的文件將被rpm作為配置信息讀出。在列表中的第一個文件必須存在,且tildes將被寫入到$HOME的值中。默認的FILELIST is /usr/lib/rpm/rpmrc:/usr/lib/rpm/redhat/rpmrc:~/.rpmrc。 --pipe CMD rmp到命令CMD的輸出管道。 --dbpath DIRECTORY 在DIRECTORY中數據庫而不是使用默認的路徑/var/lib/rpm。 --root DIRECTORY 使用文件系統樹為所有操作在DIRECTORY進行登錄(rooted)!注意這意味着在DIRECTORY內的數據庫將對所有的依賴的檢測和任何角本使用 (例如:在一個包中%post安裝了或%prep已經建立),將在一個chroot(2)之后運行並賦給DIRECTORY。
安裝和更新選項:
rpm安裝的通用命令如下:
Rpm升級的通用命令如下:
升級或安裝包文件通常是安裝一個新的版本。這同安裝一樣,不同之外僅在於在新包安裝之前別的版本的包已經被刪除。
這將會升級包,但條件是其早期的版本已經存在。PACKAGE_FILE被指定為一個ftp或http的URL,那么在安裝之前這個包將會被下載。參見FTP/HTTP選項。
--aid 在必要的時候為交易集增加暗示包。 --allfiles 安裝或升級所有的在包中不正確的文件,不管它們是否存在。 --badreloc 使用此選項,允許在所有的文件路徑中重新定位,不僅是那些包含在二進制包中重定位的hint(s)中的那些OLDPATH. --excludepath OLDPATH 不安裝那些名字在OLDPATH中的文件。 --excludedocs 不安裝那些文檔文件(那些man頁和texinfo文檔)。 --force 與使用—replacepkgs、--replacefiles和—oldpackage一樣。 -h, --hash 在被有效的解開時輸出50個信息符。使用-v|--verbose可以優選顯示。 --ignoresize 在安裝包之前不檢測mount的文件系統的空間是否夠。 --ignorearch 即使二進制包的結構和主機不符也進行安裝或升級。 --ignoreos 即使二進制文件名的操作系統與主機不符也允許進行升級和安裝。 --includedocs 安裝文檔,這是默認屬性。 --justdb 僅更新數據庫而不更新文件系統。 --nodigest 在讀時不檢驗包或包頭的摘要。 --nosignature 當讀時不檢測包或包頭的簽名。 --nodeps 在安裝或升級一個包之前不進行一個依賴性的檢測。 --nosuggest 不建議包提供一個不可少的信賴。 --noorder 不為安裝訂制包。正常情況下,包列表將已經訂制完畢。 --noscripts --nopre --nopost --nopreun --nopostun 不執行同名的角本。--noscripts選項與--nopre --nopost --nopreun –nopostun相同。並且關閉相應的%pre、%post,、%preun和%postun角本的執行。 --notriggers --notriggerin --notriggerun --notriggerpostun 不執行指定類型的觸發角本。--notriggers選項與--notriggerin --notriggerun –notriggerpostun含義相同。且關閉了相應的%triggerin、%triggerun和%triggerpostun角本。 --oldpackage 允許使用舊包替換或“升級”一個新的包。 --percent 在解包時輸出文件解包的百分比。 --prefix NEWPATH 對於可重定位的二進制包,翻譯在包重定位線索中以安裝前綴開頭的文件給NEWPATH.。 --relocate OLDPATH=NEWPATH 針對重定位的二進制包,翻譯在包重定位線索中以OLDPATH開頭的文件給NEWPATH。如果在包中的幾個OLDPATH被重新裝載,選項可以重復使用。 --repackage 在刪除之前重新打包文件。先前安裝的包將由宏%_repackage_name_fmt指定,且其創建目錄也由宏%_repackage_dir指定(默認值是/var/tmp)。 --replacefiles 安裝包,即使他們已經從別的地方已經安裝的包中替換了文件。 --replacepkgs 完全安裝包,即使其中的一些文件已經在系統中安裝完成。 --test 不安裝包,僅僅簡單檢測或報告潛在的沖突。
刪除選項:
刪除格式的rpm命令是:
[--repackage] [--test] PACKAGE_NAME ...
下面的選項也可以使用:
--allmatches 刪除所有那些包匹配PACKAGE_NAME的版本。如果PACKAGE_NAME有多個匹配,正常情況下將有一個錯誤說明。 --nodeps 在沒有安裝包之前,不檢測依賴關系。 --noscripts --nopreun --nopostun 不執行同名角本。--noscripts、--nopreun –nopostun含義相同。關閉%preun、%postun角本的響應。 --notriggers --notriggerun --notriggerpostun 不執行任何指定類型的觸發器角本。--notriggers、--notriggerun、 --notriggerpostun含義相同。同時關閉%triggerun、%triggerpostun角本響應。 --repackage 在刪除之前重新打包文件。先前安裝的包將由宏%_repackage_name_fmt指定,且其創建目錄也由宏%_repackage_dir指定(默認值是/var/tmp)。 --test 不真的卸載任何東西, 僅僅是經歷一下這個動作。與-vv選項聯合使用。
查詢選項:
rpm查詢選項的通用格式:
可以指定包信息被打印的格式,如果想做這些,可以使用下面的方式:
選項,后邊是格式字符串QUERYFMT。查詢格式是標准printf(3)的標准輸出版本。其格式由靜態字符串組成(應包括標准C字符,除了換行符、tables或其它特殊字符串)和printf(3)類型格式符。當rpm已經知道打印的類型后,無論如何,類型指定必須被忽略,且被頭標簽替代的部分將被打印,被符上{}字符。標簽名是一個固定的實例,這標簽名主要的RPMTAG_ portion也可以被忽略。
交替的輸出格式可以由帶:typetag標簽申請。通常,支持下面的類型:
:armor 外面包一層ASCII鍵值。 :base64 使用base64編碼二進制數據。 :date 使用strftime(3) "%c"格式。 :day 使用strftime(3) "%a %b %d %Y"格式。 :depflags 格式從屬標記。 :fflags 格式文件標記。 :hex 十六進制格式。 :octal 八進制格式。 :perms 文件許可格式。 :shescape 不能在角本單個引用。 :triggertype 顯示觸發器后綴
例如,僅僅輸出被查詢的包的名字,可以使用%{NAME}做為一個格式字符串。在兩列上輸出包名和分區信息,可以使用%-30{NAME}%{DISTRIBUTION}。當調用時使用--querytags 參數,Rpm輸出所有它所知道的標簽列表。
有兩個查詢的子集選項:包選擇和信息選擇。
包選擇選項:
PACKAGE_NAME 查詢名字為PACKAGE_NAME的被安裝的包。 -a, --all 查詢所有已經安裝過的包。 -f, --file FILE 查詢擁有文件FILE的包。 --fileid MD5 查詢包含一個給定的文件檢測符,也就是MD5文件內容目錄。 -g, --group GROUP 查詢組GROUP的包。 --hdrid SHA1 查詢包含給定的頭標識的包,也就是包含SHA1的不可變頭區的包。 -p, --package PACKAGE_FILE
查詢(卸載)的包PACKAGE_FILE。PACKAGE_FILE可以以ftp或http風格的URL指定,這種情況下包頭的實例將被下載和查詢。在rpm的內部的ftp和http支持參見FTP/HTTP選項。PACKAGE_FILE參數,如果不是一個二進制包,將被解釋為一個ASCII包的形式。可以存在注釋,以#開頭,且包說明文件的每一行都可以包括空白分隔的表達式。包括包含有遠程一組解釋的URL,將展開到作為附加的包PACKAGE_FILE參數賦值給查詢代替包說明的路徑下。
--pkgid MD5 查詢包,包括給定的包認證信息,也就是說是一個MD5摘要。 --querybynumber HDRNUM 直接查詢HDRNUMth數據庫入口,僅用於調試方式。 --specfile SPECFILE 直接分析和查詢SPECFILE,好象它就是一個包。雖然不是所有的信息(也就是說文件列表)都是有效的,允許rpm查詢的類型常被用做從specfile中摘要信息而不必寫specifle分析。 --tid TID 查詢給出TID的包事務認證。Unix時間戳當前被用作事務認證。所有內部有單個事務的被安裝或刪除的包都有一個簡單的認證。 --triggeredby PACKAGE_NAME 查詢由包PACKAGE_NAME觸發的包。 --whatprovides CAPABILITY 查詢所有提供CAPABILITY容量的包。 --whatrequires CAPABILITY 查詢所有正確功能的CAPABILITY的請求的包。
包查詢選項:
--changelog 顯示包改變的信息。 -c, --configfiles 只顯示配置文件(意味着-l)。 -d, --docfiles 只顯示出文件文件(意味着-l)。 --dump 向下面那樣備份文件: path、size、mtime、md5sum、mode、owner、group、isconfig、isdoc、rdev、symlink 此選項必須與-l, -c, -d中的一個配合使用。 --filesbypkg 在被選中的包中列出所有的文件。 -i, --info 顯示包信息,包括名稱、版本和說明。如果指定的顯示內容的話需要使用--queryformat選項。 --last Orders 以包安裝的順序來列出包內容,結果是最后一個安裝的包在最上層列出。 -l, --list 列出包中的文件。 --provides 列出包中規定的容量。 -R, --requires 列出這個包所依賴的包。 --scripts 列出部分包的指定角本作為安裝和卸載的信息。 -s, --state 列出在包中文件的狀態(意味着-l)文件的狀態包括正常、未安裝、替換。 --triggers, --triggerscripts 顯示觸發器角本,它包含在包中。
校驗選項:
格式如下:
校驗在包中已經安裝且在rpm數據庫中帶有來自於中的元數據存儲的文件比較信息在這些東西中,校驗比較大小、MD5數、許可、類型、擁有者及每個文件的組。所有明細信息都將顯示。沒有從包中安裝的文件,例如:使用—excludedocs選項將文件文檔文件沒有安裝,則文檔文件將被默認忽略。
包選擇選項與包查詢選項相同(包括象參數的包的說明文件)。別的選項的唯一校驗格式如下:
--nodeps 不校驗包的從屬部分。 --nodigest 在讀時不校驗包或頭的摘要。 --nofiles 不校驗包文件的屬性。 --noscripts 不執行%verifyscript角本(if any)。 --nosignature 當讀時不校驗包或頭的信號。 --nolinkto --nomd5 --nosize --nouser --nogroup --nomtime --nomode --nordev 不校驗相應文件的屬性。
輸出格式是一個8個字符的字符串,可能的屬性標記是:
c %config 配置文件。 d %doc 文檔文件。 g %ghost file (也就是說文件內容不沒有包含在包的有效負荷中)。 l %license license文件。 r %readme readme文件。 從后面跟着文件名的包頭中,8個字符每個都指出在數據庫中屬性記錄值文件屬性的比較結果。句號"."意味着測試通過,而"?"說明沒有不能執行(也就是說文件許不能讀)。無論怎樣,這些字符都指出了校驗測試沒有成功。 S 文件大小不同 M 模式不同(包括許可和文件類型) 5 MD5數不同 D 設置主要/較小的不匹配數 L readLink(2) 路徑不匹配 U 用戶所屬關系不同 G 組所屬關系不同 T mTime不同。
數字符號和摘要校驗:
rpm數字符號命令的格式是:
rpm {--checksig} [--nosignature] [--nodigest]
PACKAGE_FILE ...
--checksig選項檢查所有的包含在PACKAGE_FILE中的摘要和簽名,來確認包的完整性及來源。注意,無論包什么時候讀,簽名都要進行校驗,且--checksig對於校驗所有的與包相關的摘要和簽名都是很有用的。 在沒有公鑰的情況下,數字符號不能校驗。使用--import將一個ascii公鑰加到你的rpm數據庫中。導入的公鑰存在於頭中,且key回響管理是象一個包管理一樣正確執行。例如,所有當前輸入的公鑰可以由下面的式子列出: rpm -qa gpg-pubkey* 當導入時關於指定的公鑰的說明,能被查詢所顯示。,下面是關於Red Hat GPG/DSA key的顯示信息: rpm -qi gpg-pubkey-db42a60e 最后,公鑰可以在輸出后名象包一樣被刪除,下面是刪除Red Hat GPG/DSA key: rpm -e gpg-pubkey-db42a60e
包簽名:
--addsign和—resign選項產生和插入新的簽名給每一個指定的PACKAGE_FILE 包,用來代替所有存在的簽名。由於歷史的原因,有兩個選面,這兩者的行為沒有什么不同。 使用GPG簽名: 為了使用GPG為包做簽名,rmp必須被配置成運行GPG且可以找到有適當KEY的鍵環。默認情況下,rpm查找鍵環的方式與GPG方式相同。也就是$GNUPGHOME 環境變量。如果你的鍵環沒有定位到GPG預設的位置,那么你需要配置宏%_gpg_路徑到GPG鍵環指定的位置。 為了保證與舊版的GPG、PGP和rpm兼容,只有V3 OpenPGP簽名包被配置上了。DSA或者RSA的加密算法可以使用,但DSA是首選項。 如果你想要為你自己創建的包進行簽名,也需要創建自己的公鑰和私鑰對(參見GPG手冊)。你將也需要配置rpm宏。 %_signature 簽名類型。僅支持gpg與pgp方式。 %_gpg_name 你希望使用的給你的包進行簽名的鍵的“user”名。 例如,使用GPG使用類似於用戶"John Doe <jdoe@foo.com>;"從鍵環位置/etc/rpm/.gpg使用可執行的/usr/bin/gpg來為包簽名: %_signature gpg %_gpg_path /etc/rpm/.gpg %_gpg_name John Doe <jdoe@foo.com> %_gpgbin /usr/bin/gpg
在宏配置文件中使用上述的代碼。為每個系統配置使用/etc/rpm/macros和~/.rpmmacros為每個用戶進行配置。
重建數據庫選項:
重建數據的rpm命令的通用格式如下:
使用--initdb去創建一個新的數據庫,使用--rebuilddb去重建一個數據庫利用安裝的包頭索引。
SHOWRC
命令格式:
rpm --showrc
顯示所有在rpmrc和macros配置文件中設置的選項中使用的rpm值。
FTP/HTTP選項: Rpm能象FTP和/或HTTP客戶端那樣,所以包能從internet中進行查詢和安裝。安裝、更新和查詢包文件的操作可以作為一個ftp或http風格的URL指定。 ftp://USER:PASSWORD@HOST:PORT/path/to/package.rpm 如果忽略了:PASSWORD部分,將會提示輸入密碼(針對每個用戶/主機對)。如果用戶和密碼都忽略,ftp將使用匿名(anonymous)方式。實際上,ftp進行的是被動的傳輸。 Rpm允許在ftp的URLs中使用下面的選項: --ftpproxy HOST 主機HOST將做為所有傳輸的代理服務器,允許用戶穿過那些使用代理的系統的防火牆去ftp。這個選項也可以通過使用宏%_ftpproxy來配置。 --ftpport HOST ftp使用連接到ftp代理服務器的TCP PORT號來代替默認值。這個選項也可以由宏%_ftpport來指定。 Rpm允許以下面的格式使用http URLs: --httpproxy HOST 主機HOST將作為所有http傳輸的代理服務器。這個選項也可以由宏%_httpproxy指定。 --httpport PORT http使用連接到http代理服務器的TCP PORT號來代替默認值。這個選項也可以由宏%_httpport來指定。
三、后續說明
執行rpm構建:
rpm的構建模式目前使用/usr/bin/rpmbuild進行。雖然由 popt別名提供的兼容性已經足夠了,但還不是完美的。因此通過popt別名的兼容性目前正在被從rpm中刪除。安裝rpmbuild包,可參見rpmbuild(8)。在rpm(8)中可以找到所有的當前rpm構建的報有文檔。
如果你想繼續在命令行中使用rpmbuild,將下列的行加入到/etc/popt中:
rpm exec --bp rpmb -bp rpm exec --bc rpmb -bc rpm exec --bi rpmb -bi rpm exec --bl rpmb -bl rpm exec --ba rpmb -ba rpm exec --bb rpmb -bb rpm exec --bs rpmb -bs rpm exec --tp rpmb -tp rpm exec --tc rpmb -tc rpm exec --ti rpmb -ti rpm exec --tl rpmb -tl rpm exec --ta rpmb -ta rpm exec --tb rpmb -tb rpm exec --ts rpmb -ts rpm exec --rebuild rpmb --rebuild rpm exec --recompile rpmb --recompile rpm exec --clean rpmb --clean rpm exec --rmsource rpmb --rmsource rpm exec --rmspec rpmb --rmspec rpm exec --target rpmb --target rpm exec --short-circuit rpmb --short-circuit