Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
+nJ}+|@K ni%^w(J3Q 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
;"Ot\:0 @
K@~4! 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
pY8+;w
EI ?erDP8 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
2lp.Td`{ --------------------------------------------------------------------------------
HNh=igu Rdnd| "9WP^[ 以下简要介绍RPM包的安装,删除和查询
^<% w'*gR uxh4nyE RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
k*M{?4 DdSUB rpm命令的格式为:
RhQOl9 |LNXu rpm [options] [packages]
G^2"\4R]p S0yPg9v 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
(nE$};c<b2 ZVGw@3 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
$%t{O[( --------------------------------------------------------------------------------
fi?[ e?|c@ %pwm34 MfL q
h RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
^k)f oD kW,yZ.?f 以下为rpm --showrc命令显示的节选:
e.HN%LrhS <0kRky$ 示例:
(g4g-"rc +5({~2Lzvp 此为部分显示结果
^mz_T+UOe [root@localhost ~]# rpm --showrc
gj'ar ARCHITECTURE AND OS:
8\a)}k~4 build arch : i386
-8pHjry'q compatible build archs: athlon i686 i586 i486 i386 noarch
sztnRX_ build os : Linux
Mys;Il" compatible build os's : linux
hCo&SRC/5 install arch : athlon
JI*ikco- install os : Linux
yNDyh compatible archs : athlon i686 i586 i486 i386 noarch
lN1zfM compatible os's : linux
uY;/3?k& RPMRC VALUES:
/kJ*WA?J 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
M>]%Iu optflags : %{__global_cflags} -m32 -march=athlon
\JyWKET::_ Features supported by rpmlib:
5#fLGXP rpmlib(VersionedDependencies) = 3.0.3-1
=x^I 5Pn PreReq:, Provides:, and Obsoletes: dependencies support versions.
6*LU+U=` rpmlib(CompressedFileNames) = 3.0.4-1
qq?>ulu*W file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
rmhCuY?f rpmlib(PayloadIsBzip2) = 3.0.5-1
n!N;WL3k package payload can be compressed using bzip2.
NFa
; --------------------------------------------------------------------------------
*U8#'Uan QyN~Crwo w{r->Phe rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
)5&m:R9 vEgJmHv; 示例:
FSBCk J-QQ!qa0 [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
X,q=JS Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
pGcc6q1
Preparing... ########################################### [100%]
7"[lWC!As5 1:lynx ########################################### [100%]
m9q%l_ --------------------------------------------------------------------------------
6?a(@<k_ (Dn-vY' ag+ML1#) 以下列出一些通用选项(可以用于所有模式):
-e)bq:T Y7jD:P --dbpath path
(la 用path作为RPM数据库的路径。
S m1bDa\!= Dr2h- --ftpport prot
_cJ{fYwYU 用port作为FTP端口。
E8j9@BHU[r f,-|"_5; --ftpproxy host
I;|Aiu* 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
yf8UfB#a T4#knSIlh --help
1uH\Bn]p? 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
I|ULf ,AD| u_pP --justdb
M\<!m^~ 只更新数据库;不改变任何文件。
HaC3y[ LJ0 B`WfJ2*2 --pipe command
q#778 用管道把rpm输出到commond。
pvM8PlYo]` yk5P/H) --quiet
y,r`8 仅显示错误信息。
y$&a(S] 6X jUb --rcfile filename
-j$l@2g 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
Mu (Y6 {xykf7zp --root dir
z84W{!
P 在dir目录内执行所有操作。
h1kPsgzR N Hh
--version
M!hby31 输出rpm版本号。
(G"qIw
g:6yvEu$ - -vv
^&<*$Ai~ 输出调试信息。
%1<p1u'r?# lcP@5ZW --------------------------------------------------------------------------------
S]o ?dmMGm0T9 .;F+ QP0 安装升级和刷新
0!VLPA: 2(rZ@Wl 安装或升级一个RPM包,install命令的语法为:
]q3Kd{B 7E5Dz7 rpm -i [install-options] package_file
T7T!v rpm --install [install-options] package_file
<F3sQAe
2at?9{b 示例:
*~cs8<.!1 xh6x
B|Z [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
VoyH: package lynx-2.8.5-18 is already installed
M"vcF5q [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
c6uKKh> --------------------------------------------------------------------------------
}F`Tp8/&j 6C0_. =7# Wu4Nq+ 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
"[?/I3{E ?xo,)`` rpm -U [install-options] package_file
i]-gO rpm --upgrade [install-options] package_file
Z+dR(9otH3 5muW*7 示例:
CU;nrd " z-gwNE{ 先安装旧版
OT&E)eR [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
YKg[k:F RsD`9>6) 再安装新版
sKuTG93sr@ [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
9v
F2aLPk ,1[??Y 显示出新版本信息
5Hm!5:ZB [root@localhost ~]# rpm -q lynx
9aU:[]w lynx-2.8.5-18
QO7:iSZJ by
U\I5 说明:
?iLd5 Z -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
,?`1ve_K< u#M)i30j 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
$.N~AA~0 --------------------------------------------------------------------------------
H|)1T-% \zI&n &T 4ufLP DH 刷新的语法是:
q-G|@6O #VV.[N rpm -F [install-options] package_file
zn
?;>Bl ^!<7#kX rpm --freshen [install-options] package_file
3N"&P@/0x jDX<iX%e 示例:
]k:m2$le 8T)zB6ng 从未安装过lynx包,使用-F选项,将无法升级。
W|#ev*'F euhZ4+ [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
1D[P\r- [root@localhost ~]# rpm -q lynx
T{<@MK%],d package lynx is not installed
_0*>I1F~ --------------------------------------------------------------------------------
B-~&6D, p},Fwbl .G_3blE; 安装和更新选项为:
SO<m(o)G2 0Ad~!Y+1 --allfiles
^CPfo/! 安装或更新所有文件。
M91lV(Z K~8tN,~& --badreloc
>NRz*h # 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
/plUzy2Yu ]kkBgjQbS --excludedocs
8KtgSash 不安装任何文档文件。
G\+nWvV7 L{LU@.;1 --excludepath path
ING_:XpnJ 不安装文件名以path开始的任何文件。
MXF"F:-Kn P"x-7>c>Y
--force
}#G"!/ZA0: 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
bez'[Y{ R5eB,FN -h,--hash
(Q5@MfK` 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
T#n1@FgC 3EVC8ue
--ignorearch
0BCGJFZ{ 即使二进制包用于不同的体系结果也进行安装。
OJsd[l3xR <i'u96 --ignoreos
),]2`w&k 即使操作系统不匹配也安装二进制包。
H@MFj>~ [-t> G!) --ignoresize
vaRwhE: 安装前不检查磁盘的可用空间。
dA}
72D? MpA;cw]cI/ --includedocs
zg7l>9Sc 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
'n[+r}3 Ejms)JK+ --nodeps
I\upnEKKzZ 不检查这个包是否依赖于其他包的存在。
vA;F]epr! ~$4.Mf,u --noorder
Z SRRlkU 安装之前,不为了满足依赖关系而对包进行重新排序。
"P'&+dH8 e:J'&r& 1 --noscripts
hO/5>Zv? 不执行任何预安装或后安装脚本。
k&A7alw ZjZh z` --notriggers
`_1(Q9Q 不执行任何由包安装触发的脚本。
M7DLs;sD FGwnESCC --oldpackage
:5S |x/ 允许升级以用旧包替换新包。
4`6c28K0? N<06sRg# --percent
V(2,\+ t 当文件被解压时输出完成百分比的信息。
Y#lk!#\Y GwQZf| --prefix path
*NW QmC~ 把可重定位包的安装前缀设置为path。
;4G\]%c)E{ Fi'M"^:r{ --replacefiles
z]c,}Q 即使包替换了来自其他安装包的文件,也安装这些包。
O wA~( (9}eF)+O --replacepkgs
@yt2_ 即使某些包已经被安装,也安装他们。
nU&NopD+*G b6nZ55 h --test
yQZ/,KX 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
^m_^ #*$_S@ --------------------------------------------------------------------------------
{^cF(7p 3e%l8@R@ eA?uny
f2r 查询
-R&E