Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
mo<g'|0 R-Uj\M> 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
US4X CJxB oSE'-8( 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
@p}H@#/u\ vE{QN<6T 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
%lEPFp --------------------------------------------------------------------------------
YIjBKh
c9DX 6V!yfps) 以下简要介绍RPM包的安装,删除和查询
E&]S No< uy 7)9w RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
V@T G"YF 2{ }5WH rpm命令的格式为:
:Im_=S[0 }|Cw]GW rpm [options] [packages]
awMm&8cIM +U@P+; 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
4dl?US[- ;`@DQvVZ: 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
DR^mT$ --------------------------------------------------------------------------------
H| IsjCc rt t?4 3Qn! ` RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
babDLaC@ ?T?%x(]I 以下为rpm --showrc命令显示的节选:
Xdw%Hw YjLPW@ 示例:
vPpbm IRXpk6| 此为部分显示结果
(z+[4l7 [root@localhost ~]# rpm --showrc
oM QH-\(} ARCHITECTURE AND OS:
Y`\zLX"_m build arch : i386
IjD:
hR@ compatible build archs: athlon i686 i586 i486 i386 noarch
[ *R8XXuL build os : Linux
z_r W1?| compatible build os's : linux
%k1*&2"1# install arch : athlon
C$M^<z install os : Linux
;I]TM#qGF compatible archs : athlon i686 i586 i486 i386 noarch
(w@|:0t^y[ compatible os's : linux
@v@'8E Q RPMRC VALUES:
'}LH,H:%G 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
(w4#?_ optflags : %{__global_cflags} -m32 -march=athlon
m[]pIXc( Features supported by rpmlib:
P?\rRB rpmlib(VersionedDependencies) = 3.0.3-1
cXtL3T+ PreReq:, Provides:, and Obsoletes: dependencies support versions.
Q
>)?_O( rpmlib(CompressedFileNames) = 3.0.4-1
1*G7Uh@K} file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
T3wR0, rpmlib(PayloadIsBzip2) = 3.0.5-1
,tmo6D6 2 package payload can be compressed using bzip2.
I0GL/a4s --------------------------------------------------------------------------------
Eq'YtqU kRZ( ! X*L<)=nh rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
rDm>Rm= cb|`)"<HN 示例:
K)@]vw/\ H;Z{R@kf [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
CM8WI~ Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
i8u9~F Preparing... ########################################### [100%]
G8f7N;D 1:lynx ########################################### [100%]
rTW1'@E --------------------------------------------------------------------------------
[ZDJs`h!` I3s'44 i1 C]bUXA 以下列出一些通用选项(可以用于所有模式):
'^lrGO6
z7 d<fS52~l --dbpath path
)Q FT$rmX 用path作为RPM数据库的路径。
l<GRM1^kU I\`:(V --ftpport prot
B3)#Ou2 用port作为FTP端口。
GsE?<3 |LiFX5!\ --ftpproxy host
s^js}9]p 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
9]7+fu DEqk9Exk` --help
Ay"x<JB{U2 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
Q]a5]:0 vWjK[5
M% --justdb
bbA+ZLZJn 只更新数据库;不改变任何文件。
_ 4Hf?m7z S3btx9y{ --pipe command
LP#CA^*S 用管道把rpm输出到commond。
8t0i
j rS)7D --quiet
[Z~>7ayF+) 仅显示错误信息。
Z*jhSy ely&'y! --rcfile filename
wp.'M?6`L 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
~O|j*T tJ2l_M^ --root dir
_mA[^G=gY 在dir目录内执行所有操作。
|'Ve75 W6u FSc730rM --version
P^VV8Z>\& 输出rpm版本号。
HgduH::\# "c1vW<; -vv
%D e<H* 输出调试信息。
\'BKI; qd!$ nr --------------------------------------------------------------------------------
QBai;p{ .:l78>f .Uha %~% 安装升级和刷新
aH,0+ | [C
P V5\2 安装或升级一个RPM包,install命令的语法为:
=xai 7iM U>ob)-tl rpm -i [install-options] package_file
\muyL? rpm --install [install-options] package_file
B~LB^
n(>@ ;(VJZ_ 示例:
M/Bn^A8@ pd>EUdbrp& [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
BU]9eF!>h package lynx-2.8.5-18 is already installed
@*A(#U8p3 [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
O_(J',++ --------------------------------------------------------------------------------
1B,RRHXn6 Kd7OnU Ca?pK_Y 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
AO>K
6{ _EjS(.e/= rpm -U [install-options] package_file
/`:5#O rpm --upgrade [install-options] package_file
O:p~L`o>> AkT_ZU> 示例:
m'z <d +% '0; 先安装旧版
g&riio7lx [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
T~`m'4"+c u+XZdV 再安装新版
-%%2Pz0I [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
N@;6/[8 r|?2 @VE 显示出新版本信息
[eG- &u [root@localhost ~]# rpm -q lynx
> YN<~z- lynx-2.8.5-18
b3y@!_'c @i6D&e= 说明:
.CwMxuW -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
vV8y_ kmo3<'j{ 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
-L1{0{Z --------------------------------------------------------------------------------
;Q?
Qwda N ?0V0B rs 7R5 F 刷新的语法是:
[$-y8`~( zx0{cNPK5 rpm -F [install-options] package_file
rf^1%Zo: 19;\:tN rpm --freshen [install-options] package_file
b.j\=c qo$<&'r 示例:
nyTfTn Ql
[= 从未安装过lynx包,使用-F选项,将无法升级。
1w1(FpQO. khW3z*e# [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
w9c [root@localhost ~]# rpm -q lynx
a2o+tR;H package lynx is not installed
L!-T`R8'c --------------------------------------------------------------------------------
9b()ck-\F# ,v>P05 =(.HO:# 安装和更新选项为:
2l8jw:=H M)Ogb'@# --allfiles
0&c12W|B<L 安装或更新所有文件。
YadyRUE @ ;rU# --badreloc
/v=MGX@r 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
A!goR-J] `')3} --excludedocs
5I t+ S+a 不安装任何文档文件。
O8 k$Uc 1_XdL?h#o --excludepath path
$I>.w4G} 不安装文件名以path开始的任何文件。
LGRX@nF# RUSBJsMB --force
^EM##Ss_ 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
k((_~<$2K v:s~Y -h,--hash
[ V/*{Z 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
tb{l(up/a ks
3<zW( --ignorearch
mi<V(M~p 即使二进制包用于不同的体系结果也进行安装。
b^6Ooc/-k }|AUV --ignoreos
%'k^aqFL 即使操作系统不匹配也安装二进制包。
oy#Qj3M8= wGLZzqgq --ignoresize
PL%_V ?z 安装前不检查磁盘的可用空间。
n uhKM.a{ RzFv``g --includedocs
~qco -b 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
Ol D]*=.cO J?u@' "u --nodeps
`?91Cw=` 不检查这个包是否依赖于其他包的存在。
{ p1#H` iHWl%]7sN --noorder
3%!d&j>v 安装之前,不为了满足依赖关系而对包进行重新排序。
GC#3{71 Z?CmD;W --noscripts
w*\)]bTs 不执行任何预安装或后安装脚本。
?IGT !' y`7BR?l --notriggers
yH@W6' . 不执行任何由包安装触发的脚本。
~48Uch\LG: $>]7NT P --oldpackage
7L? ~;;L$ 允许升级以用旧包替换新包。
&37QUdp+p 7p@qzE --percent
iK= {pd 当文件被解压时输出完成百分比的信息。
kImS'i{A vfcj,1 --prefix path
5e6]v2 k 把可重定位包的安装前缀设置为path。
@/E5$mX` u])N^AY"sj --replacefiles
50uNgLs 即使包替换了来自其他安装包的文件,也安装这些包。
/i"L@t)\t ~t.*B& A --replacepkgs
E@Q+[~H } 即使某些包已经被安装,也安装他们。
^MKvZ DOP 9ZeTS~i --test
~X*)gS-= 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
mp+
%@n.; 4}gqtw: --------------------------------------------------------------------------------
q.g<g u] L6J=m#Ld s+h`,gg9 查询
<Gr{h>b E[)`+:G] query命令的语法为:
Qf6Vj,~N uIiE,.Uu} rpm -q[information-options] [package-options]
K8ecSs}}J rpm --query[information-options] [package-options]
D42Bm&JocO B9&"/tT 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
A<ur20 --------------------------------------------------------------------------------
v\'Eo*4 Pp*|EW 1 WIa4!\Ky! 以下简单示演示一下包查询:
\|L ~#{a ^} %OqP 简单查询:
b$l@Z&[] +DY% Y
`0 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
%D)W~q-g Ze~^+ EE 示例:
soRt<