Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
M]%!n3Fb m!FM+kge 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
iXr`0V Ivd[U`=Q 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
/ze_{{o rFt ,36# 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
!."%M^J --------------------------------------------------------------------------------
;f\R$u- !ch[I#&J- Vsm%h^]d 以下简要介绍RPM包的安装,删除和查询
"63zc1 q\z=z$VR RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
v4Fnh`{ 79<9}<T rpm命令的格式为:
$_I%1 !h`cXY~w rpm [options] [packages]
_{Fdw K~fDv i 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
s%S_K \(
Gf+ 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
],fwZd[t --------------------------------------------------------------------------------
~#N.!e4 LB64W ;#h W?4&lC^G RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
V5(tf' 5~kW-x 以下为rpm --showrc命令显示的节选:
7E\K!v_ jl 30\M7 示例:
sJjl)Qs)T >? A `C!i 此为部分显示结果
w#gU1yu [root@localhost ~]# rpm --showrc
=ihoVA:| ARCHITECTURE AND OS:
8KGv?^M
6W build arch : i386
I/e2, compatible build archs: athlon i686 i586 i486 i386 noarch
k:+)$[t7 build os : Linux
uP%;QBb compatible build os's : linux
]Gi+Z1q install arch : athlon
E&T'U2 install os : Linux
;#6<bV compatible archs : athlon i686 i586 i486 i386 noarch
j
44bF/ compatible os's : linux
nIN%<3U2 RPMRC VALUES:
YiQeI|{oN 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
[M8qU$&?] optflags : %{__global_cflags} -m32 -march=athlon
#%=vy\r Features supported by rpmlib:
e{rHO,#A> rpmlib(VersionedDependencies) = 3.0.3-1
8wH41v67F PreReq:, Provides:, and Obsoletes: dependencies support versions.
zDGg\cPj9 rpmlib(CompressedFileNames) = 3.0.4-1
\3js} file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
\4`saM /x rpmlib(PayloadIsBzip2) = 3.0.5-1
7}iewtdy, package payload can be compressed using bzip2.
J!TK*\a2 --------------------------------------------------------------------------------
B3g82dm {TxVRpiP{Z :vgh
KI rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
JK'_P}[]I R1b
) 示例:
tr9_bl&z y uK5 r [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
w Ycz\uV Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
< 4EB|@E Preparing... ########################################### [100%]
*F%ol;|Q 1:lynx ########################################### [100%]
&:e}4/G --------------------------------------------------------------------------------
D0E"YEo\nv 6UzT]" LR; j
O5:{% 以下列出一些通用选项(可以用于所有模式):
2'UFHiK n\8[G[M --dbpath path
@qr3v>3X< 用path作为RPM数据库的路径。
E't G5,/m lo]B5_en --ftpport prot
~"<VUJ=Ly: 用port作为FTP端口。
p?`|CE@h7 L_zmU_zD --ftpproxy host
[Yahxw} 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
j5VRv$P lWyP[>* --help
2I(@aB+ 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
@,>=X:7 xfF&$K" --justdb
X%R^)zKV 只更新数据库;不改变任何文件。
NE>JtTF< {'K;aJ'\ --pipe command
=R24h 用管道把rpm输出到commond。
w2C!>fJ]1 Mpl,}Q!c --quiet
]JCB^)tM 仅显示错误信息。
@2Y]p.$q ZX5A%`<M --rcfile filename
9{^B
Tc
用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
:7PSZc:xE XL&eJ --root dir
ka9v2tE\ 在dir目录内执行所有操作。
U=cWvr65 )}9}"jrDlx --version
3=L1H ZH 输出rpm版本号。
F>_lp,G mX_Uhpw?t -vv
~9/nx|%D 输出调试信息。
t-|=weNy 'JKvy(n> --------------------------------------------------------------------------------
f}9`iN=k q D>Y}Z! A`U 2HC 安装升级和刷新
XJ1nhE [j+0EVwB 安装或升级一个RPM包,install命令的语法为:
+so o2cb @LMV ? rpm -i [install-options] package_file
E_I6 rpm --install [install-options] package_file
yar IR| _2n/vF;I+_ 示例:
d?qO`-
~$ $Qc%9p
@i [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
)Jjw}}$}Y package lynx-2.8.5-18 is already installed
pS)X\Xyw [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
)mZy>45 --------------------------------------------------------------------------------
Z
7ZMu :V1ZeNw *Lk&@(
为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
~)CU m[:oM Yiw^@T\H` rpm -U [install-options] package_file
7X3l&J2C4l rpm --upgrade [install-options] package_file
7a.#F]` owVUL~ 示例:
] j?Fk$C |0pBBDw 先安装旧版
UY& W] [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
xupdjT%4 ?[fl$EG 再安装新版
Z5^UF2`Q [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
|2]WA'q x=r6vOj 显示出新版本信息
uRcuy/CY [root@localhost ~]# rpm -q lynx
.BTT*vL- lynx-2.8.5-18
F"0jr7 =,;3z/k% 说明:
`2~Ea_Z -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
\Nn%*?f xF>w r
r 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
w`Aw+[24 --------------------------------------------------------------------------------
Q-%=ZW Z tZ2iSc j%<@uiu 刷新的语法是:
3~09)0"!d
pq5H{ rpm -F [install-options] package_file
CxN@g' }pZnWK+ rpm --freshen [install-options] package_file
(I 0t*Se -Z&{$J 示例:
+|w~j#j9` aRKG)0= 从未安装过lynx包,使用-F选项,将无法升级。
1{glRY' ,<WykeC [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
lMf5F8 [root@localhost ~]# rpm -q lynx
cG"<*Xi < package lynx is not installed
s-DL=MD --------------------------------------------------------------------------------
vK>^#b3 ]
:#IZ0# Mj;'vm7#' 安装和更新选项为:
G7{:d ?S7:KnU>K --allfiles
<NsT[r~C 安装或更新所有文件。
Nfvg[c R20GjWy= --badreloc
KD*4n'm!> 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
bg. KkJMrR {v'Fg --excludedocs
! \Kh\ 不安装任何文档文件。
71ybZ 0 LBi>D`] --excludepath path
JKbB, 不安装文件名以path开始的任何文件。
*zht(~% Pz!yIj --force
zNs8\ 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
X~4:sJ\P= 8jx1W9=`9[ -h,--hash
6 Izv& 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
PKG
,4v = DKCy h` --ignorearch
h--!pE+ 即使二进制包用于不同的体系结果也进行安装。
?wY.B gJv^v`X --ignoreos
{vlh,0~ 即使操作系统不匹配也安装二进制包。
Oz7v
hOU :!\./z8v --ignoresize
'gH#\he[Dh 安装前不检查磁盘的可用空间。
i kiy>W8 $KFWV2P --includedocs
aN3{\^ 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
{q4"x5| fX|,s2-FW --nodeps
l.)!jWY 不检查这个包是否依赖于其他包的存在。
6K0*?j{;" jO.E#Ei}~ --noorder
nClU5 安装之前,不为了满足依赖关系而对包进行重新排序。
Agf!6kh >D aS*r --noscripts
2p ,6=8^v 不执行任何预安装或后安装脚本。
Vs{sB*: /q]@|5I --notriggers
Or|LyQU 不执行任何由包安装触发的脚本。
9hzU@m (*gpa:Sc --oldpackage
L+CSF ] 允许升级以用旧包替换新包。
)HE yTHLtJ > `M\xt --percent
S>Y?QQ3#wp 当文件被解压时输出完成百分比的信息。
+[DVD gk`.8o --prefix path
ugP R)tDfM 把可重定位包的安装前缀设置为path。
?A>-_B *k$&Hcr$ --replacefiles
U7=Z.*/62 即使包替换了来自其他安装包的文件,也安装这些包。
_Pal)re]U eL!6}y}W --replacepkgs
df\>-Hl 即使某些包已经被安装,也安装他们。
c6|&?}F jL1UPN --test
\O~P
!` 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
B~rK3BS =;T[2:JUu --------------------------------------------------------------------------------
J-c7ZcTt V5w^Le_^ W&#Nk5d 查询
lHXH03 zYsGI<4 query命令的语法为:
~K`blW47 ovO^uWz` rpm -q[information-options] [package-options]
yhmW-#+^e rpm --query[information-options] [package-options]
'r
CR8>k E~Nr4vq 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
Y8T.RS0 --------------------------------------------------------------------------------
6qf`P!7d]M ER+[gT1CQ uy~j$ lrn 以下简单示演示一下包查询:
v\C+G[MV7 Mt`.|N;y! 简单查询:
b"b!&u S]m[$)U%@ 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
~Ua0pS? gy.;
"W 示例:
7Jk.U=vY KhvCkQMI@ [root@localhost ~]# rpm -q lynx
x1h!_^(QfF lynx-2.8.5-18
fBmx +7 --------------------------------------------------------------------------------
#s%$kYp 1 XRkqMq% Jt"Wtr 信息查询:
C&gJP7 UF XJ+sm^`vOf rpm -qi packagename命令可以得到安装包的汇总信息。
P+a&R<Dj4 RB2u1]l 示例:
zZ63
P [root@localhost ~]# rpm -qi lynx
T5)?6i-N Name : lynx Relocations: (not relocatable)
dWA7U6c< Version : 2.8.5 Vendor: Red Hat, Inc.
"cx" d: Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
m" GrpE3 Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
Y/gCtSF Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
2S3F]fG0 Size : 4837340 License: GPL
B!0[LlF+ Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
zFIbCv8 Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> M-_)CR URL :
http://lynx.isc.org/ CAO$Zt Summary : 一个基于文本的网页浏览器。
r|+Zni] Description :
"$_ypgRrSR Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
1mqFnVkf&+ 图像,但是它支持框架、表格、以及多数其它 HTML
b,wO^07-3^ 标签。Lynx 优于图形化浏览器的地方是它的速度――
jBM>Pe^`3 Links 能够快速启动、退出、及显示网页。
$8)/4P?OL 标识拥有者
#@G2n@Hj --------------------------------------------------------------------------------
}V{,
kK iVRz cP,jC(<N 找出什么包拥有文件file:
W7 $yE},z &oBJY'1 示例:
r\zK>GVm_ EifYK [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
jp|wc,]! lynx-2.8.5-18
@Hzsud --------------------------------------------------------------------------------
'CvZiW[_r {ib`mC^ <[Vr(.A 列表包中的文件:
w jF\> @)}U\= 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
HDYf^mcW kI]1J 示例:
n~LR=o BLRrHaX0 此为部分显示结果
!u"Hf7/ [root@localhost ~]# rpm -ql lynx
Y+E@afsKs /etc/lynx-site.cfg
$[d}g /etc/lynx.cfg
8cHZBM7' /etc/lynx.cfg.cs
iZUBw /etc/lynx.cfg.ja
;8!D8o(+ /etc/lynx.cfg.sk
+=O:z *O /usr/bin/lynx
GC~::m~ /usr/share/doc/lynx-2.8.5
h W-[omr0 /usr/share/doc/lynx-2.8.5/INSTALLATION
P VPwYmte /usr/share/doc/lynx-2.8.5/README
2
UgjH /usr/share/doc/lynx-2.8.5/docs
F~:5/-zs /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
*+G K?Ga /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
V}( "8L /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
S9.jc@#.` /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
,F1$Of/'@\ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
,xiRP$hGhh /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
"H({kmR /usr/share/doc/lynx-2.8.5/docs/CMU.announce
x-"7{@lz
/usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
r=vE0;7 /usr/share/doc/lynx-2.8.5/docs/FM.announce
2b<0g@~X /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
z}5XLa^ /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
Y9Pb /usr/share/doc/lynx-2.8.5/docs/README.TRST
!vU[V,~
/usr/share/doc/lynx-2.8.5/docs/README.chartrans
|D\ ukml ,?}TSJKC --------------------------------------------------------------------------------
4P.ry|2 Sdn]
f4 ."2V:;; 列出包所提供的实际能力:
~DSle 3
,{%[/#~6 --provides选项的作用是列出这个包所提供的实际能力。
@{bf]Oc !"wIb.j}0 示例:
F>&8b^v bn Ruf*aF( [root@localhost ~]# rpm -q --provides lynx
_*+M'3&= config(lynx) = 2.8.5-18
pG
(8VteH webclient
?VJ Fp^Ra lynx = 2.8.5-18
)TLDNpH?J --------------------------------------------------------------------------------
uJ%ql5XDV V; ChrmE vK$W)(Z 列出这个包所倚赖的任何包:
dCinbAQ d00r&Mc -R,--requires选项的作用是列出这个包所依赖的任何包。
$HaM,
Oh;i
z\\MLyS 示例:
4)`{ L$ Aam2Y,B [root@localhost ~]# rpm -qR lynx
I?1^\s#L /bin/sh
% $J^dF_0 config(lynx) = 2.8.5-18
\d6A<(!=v indexhtml
{BF$N#7 libc.so.6
Dd*C?6 libc.so.6(GLIBC_2.0)
D =3NI libc.so.6(GLIBC_2.1)
R_-.:n%.z libc.so.6(GLIBC_2.2)
8.vD]hO libc.so.6(GLIBC_2.3)
^*ZO@GNL libcrypto.so.4
uQ{M<%K libncursesw.so.5
J^u{7K, libssl.so.4
H.YntFtD' libz.so.1
[ [Z*n/tr rpmlib(CompressedFileNames) <= 3.0.4-1
$+Xohtt rpmlib(PayloadFilesHavePrefix) <= 4.0-1
J~~WV<6 --------------------------------------------------------------------------------
Alrk3I3{ zfS`@{;F`| H#f
FU 列出包中的配置文件
,i'>+Ix< 4kIy4x'* -c,--configfiles选项的作用是列出包中的配置文件
OH&&d=~ (*#S%4(YX 示例:
#
TvY*D, 0Rj_l:d= [root@localhost ~]# rpm -qc lynx
V-VR+ Ndz /etc/lynx-site.cfg
QqRL>.)W /etc/lynx.cfg
W &*0F~ /etc/lynx.cfg.cs
ZM\Z2L]n /etc/lynx.cfg.ja
WzF/wzR /etc/lynx.cfg.sk
iZ&