Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
?M$.+V{a D,m]CK' 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
FK6[>(QO y@]_+2Vo 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
YW-usvl& JgG$?n\ 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
|yvQ[U~PQ --------------------------------------------------------------------------------
d[r#-h>dS mCRt8rY; #1J &7F1 以下简要介绍RPM包的安装,删除和查询
,?PTcQF YX%[ipgB RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
UsgK rMXN[,|v rpm命令的格式为:
ADZ};:] 7ByTnYe~S rpm [options] [packages]
Qg^cf<X{i _a_7,bk5 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
aGK?x1_ h
a|C&G 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
r$5i Wu --------------------------------------------------------------------------------
hp8%.V$f |}23>l7 yphS'AG RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
ekI2icD pqUCqo!m\ 以下为rpm --showrc命令显示的节选:
iM2W] yPM3a7-Bm 示例:
L93l0eEt ag$Vgl 此为部分显示结果
F1 iGMf-8 [root@localhost ~]# rpm --showrc
'iy*^A `Y ARCHITECTURE AND OS:
0ph{ build arch : i386
]'5;|xc9$/ compatible build archs: athlon i686 i586 i486 i386 noarch
|4
v0:ETb$ build os : Linux
-yR.<KnL compatible build os's : linux
rX*H)3F install arch : athlon
CQZgMY1{ install os : Linux
ktnuNsp compatible archs : athlon i686 i586 i486 i386 noarch
ay1YOfa* compatible os's : linux
V I,ACj RPMRC VALUES:
<Gav5Rc 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
<$6QDfa# optflags : %{__global_cflags} -m32 -march=athlon
p7);uF^O% Features supported by rpmlib:
~CVe yk< ( rpmlib(VersionedDependencies) = 3.0.3-1
nM\eDNK PreReq:, Provides:, and Obsoletes: dependencies support versions.
9 Yx]=n rpmlib(CompressedFileNames) = 3.0.4-1
;WgJ<&33 file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
0~HKiH- rpmlib(PayloadIsBzip2) = 3.0.5-1
KQcs3F@t
package payload can be compressed using bzip2.
lAzjN~V --------------------------------------------------------------------------------
|UP `B| J\J?yo 6 @)-sTgn rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
!l_lo`) Ad:TYpLD 示例:
.P.z B}0= tyfTU5"x [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
1mfs4 Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
{*[\'!d--. Preparing... ########################################### [100%]
V~S0hqW[ 1:lynx ########################################### [100%]
%Rz&lh/ --------------------------------------------------------------------------------
aaKN^fi& HQ|MhM/" klQC2drS 以下列出一些通用选项(可以用于所有模式):
iS&l8@2a )>b.; --dbpath path
jAy^J(+ 用path作为RPM数据库的路径。
ak->ML z ?[r --ftpport prot
BJgW,huLy 用port作为FTP端口。
}K1JU`Lz T|6jGZS^|W --ftpproxy host
{D?50Q 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
bKj%s@x PlF87j ( --help
8i|w(5m; 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
|l&vkRrN -:Fe7c --justdb
SF}<{x_ 只更新数据库;不改变任何文件。
U7doU' V/ i:rFQ8I --pipe command
)'/|) 用管道把rpm输出到commond。
umF
Z?a \\{J'j>{f --quiet
RletL) 仅显示错误信息。
<EPj$:: "VkTY|a --rcfile filename
L f"i
! 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
QU%I43 Ct2j ZqCDo --root dir
#O$ 在dir目录内执行所有操作。
AX?fuDLs I8+~ &V} --version
[cTe54n 输出rpm版本号。
%STliJ !O.[PH(,* -vv
-RO7
'm0 输出调试信息。
r|PFw6 /&CmO>^e --------------------------------------------------------------------------------
d)@<W1; G P:FSprP gzjR6uz 安装升级和刷新
rgSOS-ox K TsgJ\W 安装或升级一个RPM包,install命令的语法为:
7SlsnhpW +Vo}F rpm -i [install-options] package_file
qOSg!aft{Q rpm --install [install-options] package_file
J8M$k/"X Zm"{V iv] 示例:
%honO@$ q(zJ%Gv) [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
%VzKqh package lynx-2.8.5-18 is already installed
fLSXPvm [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
,*&G1|_6 --------------------------------------------------------------------------------
R+nMy=I%8
)LJnLo+ Tn eq6> 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
?lbH02P{v !/^-;o7 rpm -U [install-options] package_file
(RUT{)p[ rpm --upgrade [install-options] package_file
b
B x? N[<H7_/3 示例:
4q'B<7{Q G0`h % 先安装旧版
#l4)HV [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
Kx.X 7R MZpK~c1` 再安装新版
aM@z^<Ub [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
lqowG!3H S#-wl2z 显示出新版本信息
%'xb%`t [root@localhost ~]# rpm -q lynx
Y 2Q=rj lynx-2.8.5-18
*?z0$Kz<,[ _(d.!qGz 说明:
}w/;){gu -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
Iq# ZhAk -pU|hSW*b 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
'zEI;v --------------------------------------------------------------------------------
(]RM6i7 7}GK%H-u 5aBAr 刷新的语法是:
CW)Z[<d8 Ul_M3"Z rpm -F [install-options] package_file
9U {y1} \":?xh_H rpm --freshen [install-options] package_file
E]J:~H'Er gP-nluq 示例:
6vp *9 n4R2^gXAw 从未安装过lynx包,使用-F选项,将无法升级。
t4qej ;Og&FFs' [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
0x11
vr! [root@localhost ~]# rpm -q lynx
'=E3[0W package lynx is not installed
uk9g<<3T --------------------------------------------------------------------------------
Zes+/.sA}] yJsH=5A \XF}?*8 安装和更新选项为:
K.%U k-E{d04-2 --allfiles
d'*]ns 安装或更新所有文件。
`:wvh( tM,%^){p$ --badreloc
'JdkUhq1V 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
~"lJ'&J} v[TYc:L= --excludedocs
~1*A 不安装任何文档文件。
`gpQW~*R-; ExSO|g]% --excludepath path
Q \]Xm> 不安装文件名以path开始的任何文件。
5tv<8~:K @ct+7v~ --force
- ZW3 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
.c^
ggy% l;"Ab?P\
-h,--hash
*9 Q^5;y 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
[EY`am8[ nRb^<cZf --ignorearch
BPqGJ7@ 即使二进制包用于不同的体系结果也进行安装。
[ U8$HQ+x G~wF nl% --ignoreos
16X@^j_ 即使操作系统不匹配也安装二进制包。
>r)X:K+I v8/6wy? --ignoresize
`W `0Fwu9 安装前不检查磁盘的可用空间。
Q<6P. PTya ?X9]HlH --includedocs
Cs@ +r 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
6al=Cwf #.5vC5 --nodeps
y/? &pKH^ 不检查这个包是否依赖于其他包的存在。
SQWafD J4tcQ --noorder
>p])it[q&$ 安装之前,不为了满足依赖关系而对包进行重新排序。
6P`)%zj z *9FlV --noscripts
DjCx~@ 不执行任何预安装或后安装脚本。
.mL#6P!d3^ U@Tj B --notriggers
-$<O\5cAQ 不执行任何由包安装触发的脚本。
~|Z'l%<Os s?3i)Ymr --oldpackage
!umEyd@ " 允许升级以用旧包替换新包。
64j|}wJ$ .5> 20\b2 --percent
,WWj-X|+= 当文件被解压时输出完成百分比的信息。
K{cbn1\,H ?@R")$ --prefix path
YCy2 2@C 把可重定位包的安装前缀设置为path。
PoShQR< =l942p --replacefiles
c 5`US 即使包替换了来自其他安装包的文件,也安装这些包。
!OcENV ~V)?>)T --replacepkgs
XD-^w_ 即使某些包已经被安装,也安装他们。
X6RQqen3: zz_[S{v!# --test
-DO&