Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
uaghB,i'n A\ARjSdb 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
RwKnNIp Cq8.^=}_ 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
8! eYax
[GQn1ZLc 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
i&mcM_g32 --------------------------------------------------------------------------------
USd7gOq( +a3H1 tt~ ^E~F,]dV= 以下简要介绍RPM包的安装,删除和查询
rf?%- X(V M`V<` RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
Z<D8{&AjS {z#!3a rpm命令的格式为:
Q~k5 }n8 K}|zKTh:? rpm [options] [packages]
ES,T[ OFe-e(c1 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
@*e5(@R =$mPReA3v 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
<qGxkV
--------------------------------------------------------------------------------
Fz11/sKz sg` (yrN-M4~t RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
VOJA}$ cYmgJBG 以下为rpm --showrc命令显示的节选:
#{_iNr a9 (vP<} 示例:
iq^F?$gFk }TQa<;Q 此为部分显示结果
Upw`|$1S [root@localhost ~]# rpm --showrc
0\zY?UUww ARCHITECTURE AND OS:
)DB\du build arch : i386
"w&IO}j;= compatible build archs: athlon i686 i586 i486 i386 noarch
Oh# z zo build os : Linux
a\-AGG{2/X compatible build os's : linux
:A7\eN5 install arch : athlon
+[vIocu install os : Linux
,>!%KYD/f compatible archs : athlon i686 i586 i486 i386 noarch
JAx0(MZO compatible os's : linux
x52#md-Z RPMRC VALUES:
fHK.q({Qc 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
&R5zt]4d& optflags : %{__global_cflags} -m32 -march=athlon
rMWJ Features supported by rpmlib:
.Ht;xq rpmlib(VersionedDependencies) = 3.0.3-1
,I6li7V PreReq:, Provides:, and Obsoletes: dependencies support versions.
^XX_ qC'1 rpmlib(CompressedFileNames) = 3.0.4-1
@eJ6UML" file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
w**~k]In rpmlib(PayloadIsBzip2) = 3.0.5-1
3D;?X@ package payload can be compressed using bzip2.
mqtX7rej --------------------------------------------------------------------------------
]f{3_M[ -w"$[XP 4mjlat(d rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
\&_pI2X po\(O8#5U 示例:
"%}24t% _?>x{![ [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
8
XQo Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
{oSdVRI Preparing... ########################################### [100%]
p$=Z0p4%LL 1:lynx ########################################### [100%]
KFgq3snH --------------------------------------------------------------------------------
YdDP;,
DA VBUrtx: iGPrWe@. 以下列出一些通用选项(可以用于所有模式):
OxQ 5P;O &V|kv"Wwj --dbpath path
w_h{6Kc< 用path作为RPM数据库的路径。
cgnMoBIc LLc^SP j --ftpport prot
oN2#Jh%dH 用port作为FTP端口。
xkC M*5: GKc? --ftpproxy host
7KesfH? 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
u*f`\vs /WGD7\G'8 --help
|LW5dtQ 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
[tT_ z<e` yh2)Pc[ --justdb
S B~opN 只更新数据库;不改变任何文件。
zLgc j(; ku4Gc6f#gG --pipe command
+e^CL#Gs 用管道把rpm输出到commond。
E{0e5. { Qr\eT} --quiet
zo1T`"Y 仅显示错误信息。
inY_cn? 0W0GSDx --rcfile filename
3!
#|hI>f 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
;A4qE W egK~w8`W% --root dir
4E2#krE% 在dir目录内执行所有操作。
(gnN</% Atb`Q'Yrw --version
DKJ_g.]X 输出rpm版本号。
b@c(Nv XV/7K" -vv
_aYhW{wW 输出调试信息。
0SU v 5c p>,D F9W` --------------------------------------------------------------------------------
|sI@m@ No"i6R+ ul3~!9F5F 安装升级和刷新
0C;Js\>3] 8 :WN@ 安装或升级一个RPM包,install命令的语法为:
)ut$644R Fv7]1EO. rpm -i [install-options] package_file
=igTY1|af rpm --install [install-options] package_file
^vxx]Hji *^%+PQ 示例:
]0&X[? &\I<j\F2/ [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
m.rV1#AI package lynx-2.8.5-18 is already installed
i}:hmy' [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
[(2^oTSRaq --------------------------------------------------------------------------------
fP:]s@$ dG7d}0Ou' 2 431v@ 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
qdLzB RP$h;0EQG rpm -U [install-options] package_file
%%|p J%}Q> rpm --upgrade [install-options] package_file
Td,d9M 4qQE9fxdY 示例:
"b402"& /Yb8= eM 先安装旧版
tmOy"mq67 [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
*xJ ]e. `v@Z|rv, 再安装新版
gyq6LRb
[root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
CuK>1_Dq T_!F I29 显示出新版本信息
cHt4L]n8n [root@localhost ~]# rpm -q lynx
Oe
x
lynx-2.8.5-18
]h~F%
i9Beap/t$ 说明:
BdMd\1eMw -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
H#7=s{u 6/#+#T 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
'%4fQ%ID} --------------------------------------------------------------------------------
*=O]^|]2 9+MW13? t
#Kucde 刷新的语法是:
KB^8Z@(+ F53
.g/[ rpm -F [install-options] package_file
g0"xG}d <p
CD> rpm --freshen [install-options] package_file
jI'?7@32` 0ETT@/)]z 示例:
w&f>VB~,1 CVvl &on 从未安装过lynx包,使用-F选项,将无法升级。
W4$aX5ow$ S !#5 [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
4i.&geXA. [root@localhost ~]# rpm -q lynx
@54$IhhT~ package lynx is not installed
x&^Xgi? --------------------------------------------------------------------------------
M*bsA/Z Y[vP]7- 2+I5VPf 安装和更新选项为:
O'B3s y +,,dsL --allfiles
xOPQ~J|z 安装或更新所有文件。
;~DrsQb GApvRR+Z --badreloc
pY-!NoES 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
Zyr|J!VF n-SO201[* --excludedocs
QVRQUd 不安装任何文档文件。
#'O9Hn({ :%33m'EV} --excludepath path
H{yBDxw 不安装文件名以path开始的任何文件。
"!(@MfjT VRgckh
m --force
n|? sNM<J3 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
(SQGl!Lai0 *Gv:N6 -h,--hash
|EdEV*.ej 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
n:B){'S %z.V$2 --ignorearch
<m^a
?q^ 即使二进制包用于不同的体系结果也进行安装。
*1!'ZfT; w)* H&8h@ --ignoreos
0FE_><e 即使操作系统不匹配也安装二进制包。
43y@9P0 `jR8RDD --ignoresize
\D'mo 安装前不检查磁盘的可用空间。
</
"Wh4>C rXzq: --includedocs
!~RK2d 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
kCEo */, _.R]K$U --nodeps
M:(.aEe 不检查这个包是否依赖于其他包的存在。
Nt_sV7zzb A$7K5 --noorder
J"<
h#@` 安装之前,不为了满足依赖关系而对包进行重新排序。
FeS
,TQ4j Nt]nwae>A --noscripts
^t71${w## 不执行任何预安装或后安装脚本。
GIkeZV{4} Ct?xTFb --notriggers
[O'aka
Q 不执行任何由包安装触发的脚本。
Y@k=m )zE _-H,S)kI` --oldpackage
Vt \g9-[ 允许升级以用旧包替换新包。
?Fl O,|
9{geU9&Z --percent
U[Sh){4j 当文件被解压时输出完成百分比的信息。
<+r~?X_ }6pr.-J --prefix path
qc.TYp 把可重定位包的安装前缀设置为path。
5(\/ b<# 'AWWdz --replacefiles
]b>XN8y. 即使包替换了来自其他安装包的文件,也安装这些包。
g18zo~LZ Nxl#] --replacepkgs
:-U&_%#w 即使某些包已经被安装,也安装他们。
=bP<cC=3b Y@q9 --test
oiR9NB&< 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
(pM&eow} THX% z
` --------------------------------------------------------------------------------
op2Zf?Bx{+ },}g](!m t~dK\>L 查询
h+!R)q8M kI04<! query命令的语法为:
Het>G{ 6C<GYzzo rpm -q[information-options] [package-options]
Avyer/{ rpm --query[information-options] [package-options]
K$GQc" a%a0/!U[ 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
>dgq2ok!u --------------------------------------------------------------------------------
zsd<0^
p\{ _qk&W_u \(=xc2 以下简单示演示一下包查询:
v9,cL.0& |;(P+Q4lB 简单查询:
+t*I{X( pRxVsOb 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
~*\ *8U@7 "Xwsu8~ 示例:
7rbw_m`12- 'byTM?Sp{ [root@localhost ~]# rpm -q lynx
=
=Q*|L-g lynx-2.8.5-18
9 `bLQd --------------------------------------------------------------------------------
P0_Ymn=&