Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
!&Z*yH P~&O4['< 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
QyTh!QM~` fv:L\N1u 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
/#29Y^Z)= 8^i[j\Y;6 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
o\d |CE;> --------------------------------------------------------------------------------
QDP-E[ P;jlHZ 9?O ,Ie<'>hd 以下简要介绍RPM包的安装,删除和查询
MdLj,1_T e,^pMg~ RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
JL@F~U9 E`~i-kf rpm命令的格式为:
S45'j(S= sb'lZFSP~s rpm [options] [packages]
'HCnB]1 NOV.Bs{
yL 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
^Wf
S\M` Q<dba12 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
\{lE0j7}h --------------------------------------------------------------------------------
wtq,`'B /GyEV Cc '\@WN]
RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
#iiwD| cFw3Iw"JJ 以下为rpm --showrc命令显示的节选:
bea|?lK v C^>p5F 示例:
bZu$0IG iEe#aO"D! 此为部分显示结果
\`
&ej{ [root@localhost ~]# rpm --showrc
O
3G:0xF ARCHITECTURE AND OS:
k2pT1QZnt build arch : i386
3<+z46`? compatible build archs: athlon i686 i586 i486 i386 noarch
S3QaYq"v build os : Linux
!h?=Wv
==] compatible build os's : linux
(,shiK[5f install arch : athlon
V>AS%lXj install os : Linux
3\]~!;dI compatible archs : athlon i686 i586 i486 i386 noarch
sSNCosb compatible os's : linux
yYg RPMRC VALUES:
2HSb.&7-G macrofiles : /usr/lib/rpm/macros:/usr/lib/rpm/i386-linux/macros:/usr/lib/rpm/redhat/macros:/etc/rpm/macros.*:/etc/rpm/macros:/etc/rpm/i386-linux/macros:~/.rpmmacros
% oR>Uo optflags : %{__global_cflags} -m32 -march=athlon
} +1'{B"I Features supported by rpmlib:
CPVmF$A- rpmlib(VersionedDependencies) = 3.0.3-1
j|k@MfA PreReq:, Provides:, and Obsoletes: dependencies support versions.
(xbIUz. rpmlib(CompressedFileNames) = 3.0.4-1
CGkI\E file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
BK*z 4m rpmlib(PayloadIsBzip2) = 3.0.5-1
3h LqAj package payload can be compressed using bzip2.
L*9H#%3 --------------------------------------------------------------------------------
;HP#bx 0_Lm#fE U t|<FA# rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
l!/!?^8|f 86y%=! bS 示例:
",T`\8&@e wW^Zb [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
'Wtf>` Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
I.-v?1>, Preparing... ########################################### [100%]
[1Uz_HY["3 1:lynx ########################################### [100%]
_!%M% --------------------------------------------------------------------------------
&lq^dFP&Su 1g~y]iQ ?|lI Xz 以下列出一些通用选项(可以用于所有模式):
Ox~ 9_d ?d~]Wd !z --dbpath path
`On3/gU| 用path作为RPM数据库的路径。
'g~@"9'oe BKX9SL] --ftpport prot
\q,s?`+B 用port作为FTP端口。
vlu$!4I ,z G(u 1 --ftpproxy host
%Ci^*zb 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
L{<7.?{Y Xo8DEr --help
ol<lCp 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
nPOO3!<{ |by@ :@*y --justdb
5j`v`[B; 只更新数据库;不改变任何文件。
aHC%19UN ULIFSd Y --pipe command
_Z.cMYN 用管道把rpm输出到commond。
=hGJAU *i@T!O(1)M --quiet
MJ\r 4n 仅显示错误信息。
]L8q ~~q}cywBk --rcfile filename
hbfsHT 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
BGzO!s*@j cQn)^jx= --root dir
,T{oy:rB 在dir目录内执行所有操作。
L+t[&1cW &[~[~m| --version
)88nMH- 输出rpm版本号。
ul=7>";=| ;cLUnsB\ -vv
)2V@ p~k? 输出调试信息。
LABNj{=D! (u9Zk~)F --------------------------------------------------------------------------------
cgN>3cE M(2`2-/xh Vo >Xp 安装升级和刷新
S(w\Z C Nxi)Q$ 安装或升级一个RPM包,install命令的语法为:
hfv%,,e SX_4=^ rpm -i [install-options] package_file
3Oiy)f@{TF rpm --install [install-options] package_file
,E9d\+j ^/a*.cu 示例:
lkwh'@s. Ia7D F' [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
4|f}F package lynx-2.8.5-18 is already installed
N,|r1u 9X# [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
7=3O^=Q^Q --------------------------------------------------------------------------------
|7c`(. no|Gq>Xp x5F@ad9 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
?bI?GvSh Y`^o7'Z2^P rpm -U [install-options] package_file
K'Spbn!nC rpm --upgrade [install-options] package_file
d1bhJK s#P:6]Ar 示例:
iaRR5D- U&Ab#m; 先安装旧版
Y|RdzCM [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
O^NP0E /buWAX1 再安装新版
Ay%:@j(E [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
(}"S)#C QptOQ3! 显示出新版本信息
(Fqa][0 [root@localhost ~]# rpm -q lynx
1Z 6SI>p lynx-2.8.5-18
'=#5(O%pp aTClw<6} 说明:
h>W@U9 -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
SUu >6'LN S&01SX6 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
qpTm --------------------------------------------------------------------------------
&k+*3.X :o$@F-$k BKZ v9 刷新的语法是:
-l JYr/MSL tBv3~Of. rpm -F [install-options] package_file
fYn{QS? kwF] TO
S rpm --freshen [install-options] package_file
_:%U_U /RqhykgZ 示例:
Qc3?}os2 +5-fk>o 从未安装过lynx包,使用-F选项,将无法升级。
`p1DaV +V1}@6k
: [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
R,b59,&3/ [root@localhost ~]# rpm -q lynx
!-RwB@\ package lynx is not installed
$}4K`Iu --------------------------------------------------------------------------------
^6qjSfFW} nuxd S, XN(tcdCG 安装和更新选项为:
Y}/c
N\ 5qiI.) --allfiles
)-q\aX$]) 安装或更新所有文件。
%A2`&:ip $+TYvA'N --badreloc
z{M8Yf | 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
-ek1$y9) >-zkB)5<,# --excludedocs
>fbo
r'| 不安装任何文档文件。
Rn;VP:H M pw;r 25 --excludepath path
J&_3VKrN 不安装文件名以path开始的任何文件。
'z-D%sCA .?Auh2nr --force
z{' 6f@] 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
&M=3{[ Ju4.@ -h,--hash
6J"(xT 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
k{{hZ/om B5
&YL --ignorearch
!3?yG 即使二进制包用于不同的体系结果也进行安装。
,S0UY):( A Zd+> --ignoreos
:t%)5:@A 即使操作系统不匹配也安装二进制包。
1I
b_Kmb- .8x@IWJD --ignoresize
m\ ?\6Wk 安装前不检查磁盘的可用空间。
MISE C[/ ZqFUPHc --includedocs
Y!it!9 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
*k4+ioFnKE 4@mso+tk --nodeps
<uC<GDO 不检查这个包是否依赖于其他包的存在。
)\"I*Jwir h&P
{p _Y --noorder
xRB7lV* 安装之前,不为了满足依赖关系而对包进行重新排序。
@'Q%Jc( (s;zRb!4L --noscripts
58PKx5`D 不执行任何预安装或后安装脚本。
^1Yo-T(R Z>&K&ttJ --notriggers
LC76 Qi;|k 不执行任何由包安装触发的脚本。
.X^43
q {<r`5 --oldpackage
w0X$rl1 允许升级以用旧包替换新包。
Q<C@KBiVE )6g&v'dq --percent
t+J)dr 当文件被解压时输出完成百分比的信息。
p8_2y~! =<TO" --prefix path
u,\xok" 把可重定位包的安装前缀设置为path。
E::<;9 o:4CI --replacefiles
7fUi?41XA 即使包替换了来自其他安装包的文件,也安装这些包。
\DaLHC~ N:d
D*[QZ --replacepkgs
gn364U a 即使某些包已经被安装,也安装他们。
!}y8S'Yjw tgc@7 --test
O4n8MM|` 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
5qeT4|
Ol |fx#KNPf] --------------------------------------------------------------------------------
W;91H'`?H 1ZKz3)K E
$ <;@ 查询
jzQ9zy_ rpx0|{m query命令的语法为:
*TJ< O.dux5lfBd rpm -q[information-options] [package-options]
{rs6"X^ rpm --query[information-options] [package-options]
y{:]sHyG #DrZ`Aq 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
p?_'|#tz --------------------------------------------------------------------------------
.&Y,D-h}7| >c&4_?d&,A 'T6B_9GQ8 以下简单示演示一下包查询:
MM=W9# :~-)Sm+^ 简单查询:
C:WtCAm( A>H*`{} 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
{_": /A |+>%o.M&i 示例:
4V!1/w =ZFcxGo [root@localhost ~]# rpm -q lynx
6JUav."`~ lynx-2.8.5-18
[]^PJ --------------------------------------------------------------------------------
Wdei`u[ 'O!Z:-qE *pDXcURw 信息查询:
Vi Cg|1c v$qpcu#o rpm -qi packagename命令可以得到安装包的汇总信息。
fQ2!sV |`N$>9qN 示例:
eTLI/?|+N [root@localhost ~]# rpm -qi lynx
L#83f]vG Name : lynx Relocations: (not relocatable)
4`?sE*P@` Version : 2.8.5 Vendor: Red Hat, Inc.
zpBBnlq Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
?{y:s!! Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
PR48~K,? Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
&':UlzG Size : 4837340 License: GPL
_|Y.!ZRYP Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
'iMHAP;N Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> $8<j5%/ $M URL :
http://lynx.isc.org/ i{%z Summary : 一个基于文本的网页浏览器。
>w%d'e$ Description :
gOBj0P8s|} Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
P wt ?9I 图像,但是它支持框架、表格、以及多数其它 HTML
yVu^
> 标签。Lynx 优于图形化浏览器的地方是它的速度――
+?4*,8Tmmz Links 能够快速启动、退出、及显示网页。
6E)uu; 8 标识拥有者
#QJ4o_ --------------------------------------------------------------------------------
=B3!jir ="'rH.n # muqfSF 找出什么包拥有文件file:
FJ3:}r6 " f 4
Sw,A 示例:
iXr`0V :N+K^gI) [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
pw(U< ) lynx-2.8.5-18
c (_oK ? --------------------------------------------------------------------------------
a!hI${Xn Gdc~Lh E9 80yXJR 列表包中的文件:
.MzP}8^ iuH8g 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
Z!s>AgH9u ~#N.!e4 示例:
Fw_bY/WN{ $2 +$,: 此为部分显示结果
h~=\/vF [root@localhost ~]# rpm -ql lynx
UG^?a /etc/lynx-site.cfg
>? A `C!i /etc/lynx.cfg
EP*["fx /etc/lynx.cfg.cs
Y9I #Q /etc/lynx.cfg.ja
cfy/*| /etc/lynx.cfg.sk
?Uy*6YS /usr/bin/lynx
an[3vKb /usr/share/doc/lynx-2.8.5
i\DHIzGp[ /usr/share/doc/lynx-2.8.5/INSTALLATION
L(!!7B_, /usr/share/doc/lynx-2.8.5/README
.9[8H:Fe /usr/share/doc/lynx-2.8.5/docs
oE|u;o /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
}77=<N br /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
)W}/k$S /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
f@xfb
ie! /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
ixI5Xd< /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
rz%[o,s /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
9B?t3: /usr/share/doc/lynx-2.8.5/docs/CMU.announce
R1b
) /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
|<+|Du1 /usr/share/doc/lynx-2.8.5/docs/FM.announce
c|;|%"Mk /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
*F%ol;|Q /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
uYFcq /usr/share/doc/lynx-2.8.5/docs/README.TRST
1l`s1C /usr/share/doc/lynx-2.8.5/docs/README.chartrans
~XT
a= }T1Xds8w)t --------------------------------------------------------------------------------
^hYR5SX {p lmFV ]rX?n 列出包所提供的实际能力:
$=QGua V *l'$pJ X --provides选项的作用是列出这个包所提供的实际能力。
Rcx'a:k
r1az=$ 示例:
by:xD25 C4SD [root@localhost ~]# rpm -q --provides lynx
e5/DCz config(lynx) = 2.8.5-18
*a0I Z webclient
_ry En lynx = 2.8.5-18
@vYN7 --------------------------------------------------------------------------------
h
C`p<jp/ ~C*6V{Tj e#eO`bT 列出这个包所倚赖的任何包:
<"|<)BGeI q$2taG} -R,--requires选项的作用是列出这个包所依赖的任何包。
H1b%:KRVK *y\tns U 示例:
bHH}x"d[x d8q$&(]< [root@localhost ~]# rpm -qR lynx
fdEj#Ux<H /bin/sh
wqoN@d config(lynx) = 2.8.5-18
/a/uS3& indexhtml
}d*sWSPu( libc.so.6
/:L&uqA libc.so.6(GLIBC_2.0)
@_(@s*4W libc.so.6(GLIBC_2.1)
AJ1$$c libc.so.6(GLIBC_2.2)
XxU}|jTO# libc.so.6(GLIBC_2.3)
q\pc2Lh?^ libcrypto.so.4
{Ll8@'5 libncursesw.so.5
D
'_#?%3^ libssl.so.4
=Q0)t_z_ libz.so.1
]8cX#N,M rpmlib(CompressedFileNames) <= 3.0.4-1
6!=9V0G~ rpmlib(PayloadFilesHavePrefix) <= 4.0-1
/n}V7 --------------------------------------------------------------------------------
J-{E`ibGN eDZ3SIZ |;1:$E" 列出包中的配置文件
o;-!?uJ z+B -c,--configfiles选项的作用是列出包中的配置文件
RX|&