Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
(AR-8 Zf(ucAhL 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
B8[H><)o\y jC;XY !d6 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
^$rt|] V^?+|8_( 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
183'1Z$KA --------------------------------------------------------------------------------
p&XbXg- "FG6R' VWbgusxJ 以下简要介绍RPM包的安装,删除和查询
)`;?%N\ M#
S:'WN RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
LH<--#K c#Ux{^ZE rpm命令的格式为:
<lv:mqV nLo:\I( rpm [options] [packages]
mN~;MR; C5;"mo- 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
I#$u(2.H CIYD'zR[2 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
=B;rj --------------------------------------------------------------------------------
?uh7m2l0D js k<N C{e:xGJK RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
uXK$5" Yxi.A$g 以下为rpm --showrc命令显示的节选:
)[%#HT 9)H~I/9Y 示例:
: @YZ6?hf i,b>&V/Y$ 此为部分显示结果
#(XP=PUj [root@localhost ~]# rpm --showrc
iCz,|;w% ARCHITECTURE AND OS:
=o+t_.)N build arch : i386
Lqwc:%Y:_ compatible build archs: athlon i686 i586 i486 i386 noarch
g($ y4~# build os : Linux
N2q'$o compatible build os's : linux
~-'nEA TE install arch : athlon
aD%")eP%& install os : Linux
X0P<ifIv compatible archs : athlon i686 i586 i486 i386 noarch
C]eb=rw$ compatible os's : linux
P#76ehR]K RPMRC VALUES:
Pf(z0o& 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
5 _] i==M optflags : %{__global_cflags} -m32 -march=athlon
ydoCoD
w Features supported by rpmlib:
u~a<Psp&| rpmlib(VersionedDependencies) = 3.0.3-1
'nW:2(J PreReq:, Provides:, and Obsoletes: dependencies support versions.
R},mq&f5 rpmlib(CompressedFileNames) = 3.0.4-1
2b3x|9o8 file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
Y }e$5 rpmlib(PayloadIsBzip2) = 3.0.5-1
Xj|j\2$ 0 package payload can be compressed using bzip2.
;QW)tv.y --------------------------------------------------------------------------------
3%k@,Vvt FnL~8otPF' |A0kbC. rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
3osAWSCEL okr'=iDg 示例:
/Xn I> ~TurYvf [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
&hqGGfVsd Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
ow]n)Te Preparing... ########################################### [100%]
8 I,(\<Xv 1:lynx ########################################### [100%]
<fN?=u+ --------------------------------------------------------------------------------
fa"eyBO50 E)>6}0P ]$KH78MTW 以下列出一些通用选项(可以用于所有模式):
/5zzzaj{ kw?RUt0-V --dbpath path
X~n Kuo 用path作为RPM数据库的路径。
[ub,&j^ 5E}0<& --ftpport prot
T>W(Caelq 用port作为FTP端口。
zBqr15 DF9Br
D0{ --ftpproxy host
ygT,I+7\ 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
saYn\o"m &Sc0l/ --help
,!bOzth2>K 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
>TK`s@jdSV [o>/2 --justdb
pE15[fJ` 只更新数据库;不改变任何文件。
M.H4ud `^|mNh --pipe command
$]Y' [pE@ 用管道把rpm输出到commond。
a08B8 7r*>?]y+ --quiet
AF **@iG 仅显示错误信息。
];j8vts& A\k-OP] --rcfile filename
lzl4pnj 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
n |.- :Zy AE^&hH0^ --root dir
m,]Tl;f 在dir目录内执行所有操作。
*)u_m h @{XN}tWDOp --version
(7-K4j` 输出rpm版本号。
QAcvv 0Hv #`}g?6VHo -vv
P,tN;c 输出调试信息。
$?I^Dk vT3LhN+1 --------------------------------------------------------------------------------
I8`.eqV Dt.OZ4w5 `M"b L|[R 安装升级和刷新
"eGS~-DVK r|rV1<d 安装或升级一个RPM包,install命令的语法为:
cCWOGd -hhE`Y rpm -i [install-options] package_file
/sJk[5!z rpm --install [install-options] package_file
Cg )#B+ %l3RM*zb 示例:
?mgr#UN <}B|4($ [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
5F&i/8Ib package lynx-2.8.5-18 is already installed
]P] lG- [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
c3oI\lU
--------------------------------------------------------------------------------
qY#*zx c|ZZ+2IYd _VR4|)1g 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
x{Gih1 zM[WbB+"m rpm -U [install-options] package_file
[o|]>(tk rpm --upgrade [install-options] package_file
^k u~m5v hFQC%N.' 示例:
Zad+)~@!tq | %6B#uy 先安装旧版
yf_<o [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
=fG(K!AQ XwlUkw"q 再安装新版
}R}tIC-: [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
HQ2in_' I~4`NV0 显示出新版本信息
bFJmXx& [root@localhost ~]# rpm -q lynx
"fz-h lynx-2.8.5-18
y~U+MtSf# o{>hOs
& 说明:
5)&e2V',y -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
vP&*(WfO) t"RgEH@ 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
X2sK<Qluql --------------------------------------------------------------------------------
zA( 2+e 7 APK@Oq gxt2Mq;q~} 刷新的语法是:
SHz& o[u eb.`Q+Gb rpm -F [install-options] package_file
{SK8Mdn *7!}[ v_ rpm --freshen [install-options] package_file
u%ih7v!r\ S2j7(T;~YB 示例:
tDIzn`$z B-M|}T 从未安装过lynx包,使用-F选项,将无法升级。
hhYo9jTHW |a^ydwb [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
hRc\&+#/ [root@localhost ~]# rpm -q lynx
Q Z9)uI package lynx is not installed
`.[hOQ7 --------------------------------------------------------------------------------
GlD@Ud>o) nJ2l$J< a$9UUH-| 安装和更新选项为:
h3O5DP6~ i_gS!1Z2 --allfiles
YXD1B`23 安装或更新所有文件。
Eb{TKz? SOP=
X-6f --badreloc
}3)$aI_ 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
KJ'MK~g HJ_xg6.x --excludedocs
?A2EuvQH] 不安装任何文档文件。
=X% D;2 ;Oe6SNquT --excludepath path
hM>xe8yE 不安装文件名以path开始的任何文件。
vuw1ycy) ?\^u},HnE| --force
|vEfE{ 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
paMw88*u *%8,G'"r? -h,--hash
%tQIKjsVaY 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
Mc@p~5!M -4GSGR'L&y --ignorearch
(S9"(\A 即使二进制包用于不同的体系结果也进行安装。
5{cAawU. qZ8lU --ignoreos
X
Phw0aV 即使操作系统不匹配也安装二进制包。
_$Z46wHmB Do2y7,jv --ignoresize
S"N@.n[ 安装前不检查磁盘的可用空间。
LU;ma((yy[ D(Xv shQ --includedocs
|mci-ZT 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
5|H?L@_9 vz@QGgQ9~2 --nodeps
~Bu~?ZJmd 不检查这个包是否依赖于其他包的存在。
X>*zA?: ugMJ}IGq --noorder
C'zMOR6c 安装之前,不为了满足依赖关系而对包进行重新排序。
ym ,S/Uz ]YOQIzkL4} --noscripts
>@ EQarD 不执行任何预安装或后安装脚本。
%J+$p\c '| Ag,x[ --notriggers
sy>P n 不执行任何由包安装触发的脚本。
q$EVd9aN q8[Nr3. --oldpackage
xES+m/?KlZ 允许升级以用旧包替换新包。
$ g1p! JTz1M~ --percent
@&h<jM{D 当文件被解压时输出完成百分比的信息。
0*tEuJ7 * z{D}L-& --prefix path
S6]D;c8GE 把可重定位包的安装前缀设置为path。
's&Vg09D, '*)!&4f --replacefiles
U?>zq!C&R 即使包替换了来自其他安装包的文件,也安装这些包。
V(w[`^I>~ ^P{'l^CVX --replacepkgs
*23 即使某些包已经被安装,也安装他们。
q)@.f. R`
X$@iM --test
.cu5h 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
9N'$Y*. d< CQv
[Od --------------------------------------------------------------------------------
-R&h?ec b_wb!_ %lV>Nc|iz= 查询
w)!(@}vd BE3~f6 ` query命令的语法为:
CTPn'P=\C );,#H`' rpm -q[information-options] [package-options]
fcV/co_S6 rpm --query[information-options] [package-options]
*w@>zkBl E]ZM`bex& 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
G&