Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
5F{NPKaQ XBE+O7 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
yrOWC ?!=yp# 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
:DTKZ9>2D ?El8:zt? | 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
_FXvJ}~m --------------------------------------------------------------------------------
?IR]y-r ,U+y)w]ar /E F0~iy 以下简要介绍RPM包的安装,删除和查询
U|QLc Tf/jd 3> RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
&<}vs`W F+mn d,3 rpm命令的格式为:
jj2 [Zh/h +;uP)
"Q/L rpm [options] [packages]
qjQR0MC 1zwk0={x-% 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
'\8gY((7 k%|7H,7 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
%UDz4?zx --------------------------------------------------------------------------------
o2 XKD0n^L[ QOA7#H-m9 RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
36mp+}R# !"~x.LX\ 以下为rpm --showrc命令显示的节选:
(jbHV.]P9 d[mmwgSR?I 示例:
v?e@`;-
< F?#^wm5TZ 此为部分显示结果
ru#,pJ=O( [root@localhost ~]# rpm --showrc
p4QQ5O$; ARCHITECTURE AND OS:
-FRMal4Pg0 build arch : i386
|[apLQ6 compatible build archs: athlon i686 i586 i486 i386 noarch
~NT2QY5!K build os : Linux
eT33&:n4 compatible build os's : linux
ZbVo<p5* ] install arch : athlon
[=k$Q
(.3 install os : Linux
f]Jn\7j4 compatible archs : athlon i686 i586 i486 i386 noarch
THC7e>P4 compatible os's : linux
G`H4#@] RPMRC VALUES:
Fk(nf9M% 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
_L}k. optflags : %{__global_cflags} -m32 -march=athlon
to-DXT. Features supported by rpmlib:
`@%hz%8Y rpmlib(VersionedDependencies) = 3.0.3-1
"Sm'TZx PreReq:, Provides:, and Obsoletes: dependencies support versions.
xNlxi rpmlib(CompressedFileNames) = 3.0.4-1
8S*3W3HY file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
4&b*|"Iw rpmlib(PayloadIsBzip2) = 3.0.5-1
kr ,&aP<, package payload can be compressed using bzip2.
g=*'kj7c3 --------------------------------------------------------------------------------
.SZ ZT0Z E,u/^V9x h9<*+T rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
6Ih8~Hu g{|F<2rd[m 示例:
7i-G5%w7 \ZN> 7?Vs [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
^pgVU&-~]/ Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
n~ w.\939@ Preparing... ########################################### [100%]
}7?n\I+n" 1:lynx ########################################### [100%]
Rq`B'G9|c --------------------------------------------------------------------------------
P1cI]rriW ?|4Y(0N -|F(qf 以下列出一些通用选项(可以用于所有模式):
>\f'Q Q 4FwtC"G3 --dbpath path
7]\_7L|>] 用path作为RPM数据库的路径。
h 8Shf" jEK{QOq0 --ftpport prot
h{ xq 用port作为FTP端口。
f/"?(7F }Pi}?
41! --ftpproxy host
M N-j$-y} 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
iO$Z?Dyg9 95cIdF 6m --help
c+dmA(JC 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
=:neGqd\_E >)`yG'[ --justdb
#bIUO2yVo 只更新数据库;不改变任何文件。
LVHIQ9 eMT}"u8$A --pipe command
JSp V2c5Q 用管道把rpm输出到commond。
J}zN]|bz 6KH&-ffd --quiet
lftT55Tki 仅显示错误信息。
AFM Ip^F dd?ZQ:n --rcfile filename
^9_4#Ep( 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
tJ3Hg8; "}|&eBH^< --root dir
L0^rw|Z%' 在dir目录内执行所有操作。
Nw3K@Ge b=87k --version
9nGS"E l{ 输出rpm版本号。
G q&[T: )t?_3'W -vv
BYuoeN! 输出调试信息。
^RIDC/B=V6 ,ma4bqRMc --------------------------------------------------------------------------------
!tuN_ rlRRGJ\l ;\mTm;]G 安装升级和刷新
%DQ!#Nl* `4Db( ~ 安装或升级一个RPM包,install命令的语法为:
{zNFp#z mMt~4(5 rpm -i [install-options] package_file
(Ts#^qC rpm --install [install-options] package_file
5~!&x@ rl__3q 示例:
;o#wK>pk%M 506AvD [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
B5R/GV package lynx-2.8.5-18 is already installed
<>l! [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
g&]n:qx --------------------------------------------------------------------------------
-a+oQP]O x<=<Lx0B; Lb=4\ _ 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
]r&dWF paYvYK-K? rpm -U [install-options] package_file
WHk rd8 rpm --upgrade [install-options] package_file
wJ>.I<F6B ^J-"8% 示例:
^U;r>[T9h f53WDI6 先安装旧版
35}]U= [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
ZHN}:W/p -~+Y0\%E 再安装新版
?S2!'L [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
M/x*d4b_ i
w(4!,4~ 显示出新版本信息
b^dBX [root@localhost ~]# rpm -q lynx
w8KVs\/ lynx-2.8.5-18
nW"ml$ sry`EkS 说明:
A<*G; -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
w~|z0;hC * .P3fVlZ 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
Jc9BZ`~i --------------------------------------------------------------------------------
3:B4; ?ISv|QpC %CaF-m=Pq 刷新的语法是:
X"fSM
# K/A1g.$ rpm -F [install-options] package_file
fa#5pys U#gv ~)\k rpm --freshen [install-options] package_file
d>bS) wM0P#+bA\ 示例:
L9bIdiB7 p6*|)}T_% 从未安装过lynx包,使用-F选项,将无法升级。
Kc#42C;t/ /9k}Ip [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
JQO%-=t [root@localhost ~]# rpm -q lynx
.NX>d@
Kc package lynx is not installed
'kE^oX_ --------------------------------------------------------------------------------
~'u %66 TM*<hC
1k39KO@ 安装和更新选项为:
Z.{r%W{2 ,]cb3nP --allfiles
-MTO=#5z 安装或更新所有文件。
r4wnfy zKf.jpF^ --badreloc
D Kng.P 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
)an,-EIX% V+dFL9 --excludedocs
g|
M@/Dl 不安装任何文档文件。
^hIKDc!.m EwuBL6kN --excludepath path
eT ZQ[qMp 不安装文件名以path开始的任何文件。
ATq-&1hs K4|{[YpPB --force
Ng;Fhv+ 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
ufc_m4PN *p>1s!i -h,--hash
vkg."G:= 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
L\/YS;Y ANWUo}j --ignorearch
6u-aV 即使二进制包用于不同的体系结果也进行安装。
M
hJ;)( EVE<LF? --ignoreos
}29Cm$p 即使操作系统不匹配也安装二进制包。
N^U<;O?YDW r<XlIi --ignoresize
I]B[H6 安装前不检查磁盘的可用空间。
i#1~<U cd?a rIV5 --includedocs
L|pJ\~ 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
QU%'z/dip fNZ:l=L3): --nodeps
vp#r:+= 不检查这个包是否依赖于其他包的存在。
eF%IX v:w $l{7 --noorder
=^D{ZZw{ 安装之前,不为了满足依赖关系而对包进行重新排序。
OK1f Y`$z n?z^"vv$i --noscripts
AfOq?V 不执行任何预安装或后安装脚本。
u*C"d1v= `<x|<ey --notriggers
VjhwafYC 不执行任何由包安装触发的脚本。
|&xjuBC H,5##@X --oldpackage
?ybX&V 允许升级以用旧包替换新包。
BH$+{rZ8t %\n&iRwDF --percent
j"Vb8} 当文件被解压时输出完成百分比的信息。
9CW8l0 YkqauyV^ --prefix path
@Tl!A1y? 把可重定位包的安装前缀设置为path。
D |BP]j}6 |0A:0'uA! --replacefiles
#Ies
yNKZ 即使包替换了来自其他安装包的文件,也安装这些包。
9e xHR&>{ Q`4]\)Dp --replacepkgs
c-, 6k 即使某些包已经被安装,也安装他们。
/qalj\ud nM,5KHU4a --test
DZ9qIc}Y 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
TV&4m5 D_MNF=7 --------------------------------------------------------------------------------
O&c~7tM% avI @N0(%o& 查询
}bxx]rDl `+go|
5N2 query命令的语法为:
bAl0z)p GP/Gv rpm -q[information-options] [package-options]
;zl/ rpm --query[information-options] [package-options]
FII>6c R.+yVO2 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
{<_9QAS --------------------------------------------------------------------------------
>RMp`HxDf bk#t+tuk }hjJt,m 以下简单示演示一下包查询:
:/
yR 4{1.[##]o 简单查询:
;PrL)! ^"N sb & 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
1q[vNP=g& +^6v%z 示例:
:i24@V~){ P=jbr"5Q: [root@localhost ~]# rpm -q lynx
U2(|/M+ lynx-2.8.5-18
V,@Y, --------------------------------------------------------------------------------
?8LRd5LH {lhdropd D|Tv`47ntu 信息查询:
!"Q8KV `Y`QxU!d% rpm -qi packagename命令可以得到安装包的汇总信息。
pd rF/U+ A-dL_3 示例:
H#joc0?P [root@localhost ~]# rpm -qi lynx
@e/40l|X Name : lynx Relocations: (not relocatable)
G)E#wh_S^ Version : 2.8.5 Vendor: Red Hat, Inc.
Y}C~&Ph