第三方Yum源 和RPM 软件安装归纳和整理

Centos6.2使用第三方YUM源(EPEL,RPMForge,RPMFusion)
一,RPMForge安装

RPMForge是CentOS系统下的软件仓库,拥有4000多种的软件包,被CentOS社区认为是最安全也是最稳定的一个软件仓库。默认的CentOS源,软件太少了,可以添加额外的RpmForge。


安装RPMForge,实验环境 CentOS 6 32bit

1、确认系统是否安装了priority这个yum的插件,这个插件用来保证安装软件时候软件仓库先后次序,一般是默认先从官方base或者镜像安装,然 后从社区用户contribute的软件中安装,再从第三方软件仓库中安装。当然这个次序可以自己更改,为了安全和稳定还是依照这个次序吧….

因为官方提供的软件源,都是比较稳定和被推荐使用的。因此,官方源的顺序要高于第三方源的顺序。

   yum install yum-priorities

安装完以后查看 /etc/yum/pluginconf.d/priorities.conf 文件,确认文件中有这一行
   [main]
   enabled=1

2.编辑/etc/yum.repos.d/ 内的CentOS-Base.repo 档 并加入 下列行: priority=N 建议设定:

[base], [addons], [updates], [extras]几行中 ... priority=1

[centosplus],[contrib]几行中 ... priority=2
可以手动编辑 /etc/yum.repos.d/ 目录中后缀为.repos的文件来设置软件仓库的先后次序


3、现在开始安装rpmforge的软件仓库
   wget -c http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
   # 不知道什么架构的用 uname -i 或 getconf LONG_BIT 命令查看

较老版本   86-686  不是64位的

http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm

下载最新版本地址和各个版本的地址  : http://repoforge.org/use/  


[root@wubolu-centos installation]# rpm -K rpmforge-release-0.5.3-1.el6.rf.i686.rpm
rpmforge-release-0.5.2-2.el6.rf.i686.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#6b8d79e6)

安装DAG的PGP Key
   rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
   # centos 5\6 是使用这个GPL KEY

验证下载包的完整性
[root@wubolu-centos installation]# rpm -K rpmforge-release-0.5.3-1.el6.rf.i686.rpm
rpmforge-release-0.5.2-2.el6.rf.i686.rpm: (sha1) dsa sha1 md5 gpg OK

安装rpmforge
   rpm -i rpmforge-release-0.5.3-1.el6.rf.i686.rpm

二,如果既想获得 RHEL 的高质量、高性能、高可靠性,又需要方便易用(关键是免费)的软件包更新功能,那么 Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux)正好适合你。这个软件仓库里有很多非常常用的软件,而且是专门针对RHEL设计的,对RHEL标准yum源是一个很好的补充,完全免费使用,由Fedora项目维护,所以如果你使用的是RHEL,或者CentOS,Scientific等RHEL系的linux,可以非常放心的使用EPEL的yum源

EPEL(http://fedoraproject.org/wiki/EPEL) 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL,就像在 Fedora 上一样,可以通过 yum install package-name,随意安装软件。

1.如果你使用的是RHEL6.x,CentOS6.x,Scientific6.x等6.x的RHEL系linux的话,执行:

[root@test ~]# rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/i386/epel-release-6-8.noarch.rpm(被更新)

2.如果你使用的是5.x系列的,执行:

[root@test ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

3.如果你使用的是4.x系列的,执行:

[root@test ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/4/i386/epel-release-4-10.noarch.rpm

其实上面安装的那个包就是在你系统/etc/yum.repos.d/下释放了2个yum源的repo文件而已:

/etc/yum.repos.d/epel.repo          正式版,所有的软件都是稳定可以信赖的

/etc/yum.repos.d/epel-testing.repo  测试版

但是默认情况下,只有正式版是有效状态的,如果你想试试测试版的话,需要修改/etc/yum.repos.d/epel-testing.repo,把enabled=0改成enabled=1即可。
另外,如果你要使用yumdownloader来下载src.rpm包的话,需要把epel.repo里[epel-source]域下的enabled=0也改成enabled=1即可。
当然了,如果你暂时不想使用EPEL的yum源的话,把对应文件里的enabled=1改成enabled=0就行了,如果你完全不需要了,那就直接卸载掉:
[root@test ~]# rpm -e epel-release
注意:上面安装的rpm包,如果官方升级了的话,链接也就变了,自己去 官方确认。

导入key:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

2 、默认会在/etc/yum.repos.d/ 下创建epel.repo 和epel-testing.repo 两个配置文件,epel.repo 的内容如下:

[epel]
name=Extra Packages for Enterprise Linux 6 �C $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 �C $basearch �C Debug
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 6 �C $basearch �C Source
#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

如果想使用比较新的软件,可以启用[epel-testing] 源,把里面的enabled=0 改成enabled=1 就可以。
3、yum安装nginx测试看看:
yum install nginx
三   rpm 包 管理 详解
在linux世界里流行两种包管理方式,分别是redhat系的rpm和debian系的deb。其中rpm的使用更为广泛,我打算接下来分多章详细介绍一下rpm的包管理机制。
包管理是操作系统用来维护各组件版本的一种方式,对于软件发行者来说,将自己的程序制作成标准的rpm格式也会使得程序的安装、升级和卸载变得非常容易。 因此linux下几乎所有流行的程序都有rpm格式的包,有些是发行者自己打包,也有些第三方提供rpm包,例如redhat发行版里的rpm都是 redhat自己打包,他们定期打patch,升级并且维护包之间的依赖关系,他们制作的rpm包是最可以信任的。除此之外, http://dag.wieers.com/rpm/这个网站也提供很多较新的rpm包,在redhat官方找不到的包很多在这里都可以找到。
在网上搜索rpm包最常用的方式是通过 rpmfind.net进行搜索,它会提供各个发行版下的各个版本的包下载。注意一定要找到正确的发行版下对应的包,由于依赖底层库和库版本的不同,不同版本的发行版的包最好不要混装。
今天先介绍rpm的安装,基本的安装命令如下
rpm -ivh xxxxxxx.rpm
i代表安装,e代表卸载,v代表显示安装过程,h代表显示#号样式的进度
下面看一个简单的例子

[leconte@localhost soft]$ sudo rpm -ivh enca-1.9-4.el5.rf.i386.rpm

warning: enca-1.9-4.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6

Preparing... ########################################### [100%]

1:enca                   ########################################### [100%]

rpm包这样就装上了,但是很多时候没有这么顺利,由于rpm包之间可能存在依赖关系,在依赖关系无法满足的情况下默认是没法继续安装的;再比如某个包已 经安装过,如果想再装一次,也是无法继续的。这种情况下可以通过一些参数来强制执行,但是强制执行的后果可能是装的程序无法正常使用,因为它依赖的包你系 统并没有提供。

安装时常用的参数如下:
--test 测试安装,并不真实安装而仅仅是测试能否安装。
--nodeps 忽略依赖关系强行安装
--force 强制替换现有版本
--noscripts 仅安装文件不执行附加脚本

下面演示一个强行安装的例子

[leconte@localhost soft]$ sudo rpm -ivh awstats-6.9-1.noarch.rpm

error: Failed dependencies:

perl(LWP::UserAgent) is needed by awstats-6.9-1.noarch

[leconte@localhost soft]$ sudo rpm -ivh awstats-6.9-1.noarch.rpm --nodeps

Preparing... ########################################### [100%]

1:awstats                ########################################### [100%]

awstats依赖的PERL模块LWP::UserAgent并没有装,因此默认是无法安装的,但是通过nodeps可以强制安装,而LWP::UserAgent可以通过cpan去后续安装。也就是说,如果你明白你在做什么,那么强制安装并不可怕。
需要注意的是,rpm包的安装和卸载都需要在系统的rpm数据库里保存信息,因此需要root权限。
本节接着介绍rpm的查询功能,查询是我们最常用的功能,例如查询一个包里包含哪些文件、一个文件属于哪个包、以及包之间的依赖关系等等。
rpm的-q参 数是用来进行查询的,需要明确的是rpm既可以对安装在系统上的包进行查询,也可以对一个未安装的rpm包进行查询。当一个rpm包安装到系统上之后,安 装信息通常会保存在本地的/var/lib/rpm/目录下,数据会以berkeley DB的方式保存。查看/var/lib/rpm/Packages文件的类型可以验证这一点。

[leconte@localhost rpm]$ file/var/lib/rpm/Packages

/var/lib/rpm/Packages: Berkeley DB (Hash, version 8, native byte-order)

这种情况下的查询其实就是对bdb的读访问。而对一个未安装的rpm包进行查询,则是通过解读rpm包本身而获取信息,这一点是首先需要明确的。

下面我就简单罗列一下rpm最常用的几个查询功能
1.rpm -qa 用来查询系统安装的所有包,a代表all
2.rpm -ql [包名] 用来查询某个包里的文件列表,例如查询包passwd里包含的内容

[leconte@localhost rpm]$ rpm -ql passwd

/etc /pam.d / passwd
/usr /bin / passwd
/usr /share /man /man1 /passwd.1.gz

3.rpm -qi [包名] 用来查询包信息,其中包含包的介绍,作者,打包日期等重要信息。
4.rpm -qf [文件名] 用来查询一个文件所属的rpm包,例如:

[leconte@localhost rpm]$ rpm -qf /etc/passwd

setup-2.5.58-4.el5

系统配置文件/etc/passwd是属于setup这个包的。
5.rpm -qV [包名] 用来验证某个包中安装的各文件的状态,如果当前文件的大小、md5和安装时数据库里保存的信息不一致,该命令则会将不一致的文件列出来。该命令对于系统出问题的情况下的故障排查很有帮助。

上面是几个最常用的查询命令,都是针对查询系统rpm包情况的。如果要查询未安装的rpm包则只需要加上p参数和包路径即可。例如查询包perl-Git-1.5.5.6-4.el5.i386.rpm的信息:

[leconte@localhost soft]$ rpm -qip perl-Git-1.5.5.6-4.el5.i386.rpm

warning: perl-Git-1.5.5.6-4.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6

Name: perl-GitRelocations: (not relocatable)

Version: 1.5.5.6Vendor: Fedora Project

Release: 4.el5Build Date: 2009年06月19日 星期五 21时28分05秒

Install Date: (not installed)               Build Host: xenbuilder2.fedora.redhat.com

Group: Development/LibrariesSource RPM: git-1.5.5.6-4.el5.src.rpm

Size: 24878License: GPL

Signature: DSA/SHA1, 2009年06月20日 星期六 04时07分18秒, Key ID 119cc036217521f6

Packager: Fedora Project

URL: http://kernel.org/pub/software/scm/git/

Summary: Perl interface to Git

Description :
Perl interface to Git.
rpm包之间会维持依赖关系,这是包管理系统的特色。我们都经历过安装一个包而因为依赖缺失而装不上的情况。后来yum的出现能一定程度解决这个问题,但我们仍然有必要了解rpm依赖关系背后的细节。
自己打过rpm包的人都知道,在包的spec配置文件往往要明确写出此包所依赖的包名或文件名,同时也可能需要明确写出此包所提供的内容。这个内容可能是 动态库也可能是其他一些名字,并不一定是文件名。各个包之间正是依靠这些内容来建立依赖关系的,每个包都提供一些内容同时依赖一些别的内容,整个系统就在 这样一种相互依赖中形成了。

在看具体的例子之前先介绍几个指令:
rpm -qR [包名] 可以用来查询指定包所依赖的内容
rpm -q �Cprovides [包名] 可以用来查询指定包所提供的内容
rpm -q �Cwhatprovides [内容] 可以用来查询哪个包提供了指定内容
rpm -q �Cwhatrequires [内容] 可以用来查看哪些包依赖于指定内容

例如我们以time这个包为例进行查询,结果如下:

[leconte@localhost soft]$ rpm -qR time

/bin / sh
/bin / sh
/sbin /install-info
libc.so.6
libc.so.6 (GLIBC_2.0 )
libc.so.6 (GLIBC_2.1 )
libc.so.6 (GLIBC_2.3.4 )

rpmlib(CompressedFileNames)<= 3.0.4-1

rpmlib(PayloadFilesHavePrefix)<= 4.0-1

rtld (GNU_HASH )
可见,time这个包如果要安装,上述内容必须已经存在,否则将会提示依赖缺失而无法安装。我们以列表中的/bin/sh为例进行反查,可以看到系统中哪个包提供了/bin/sh

[leconte@localhost soft]$ rpm -q --whatprovides "/bin/sh"

bash-3.2-24.el5

很明显,bash这个包提供了/bin/sh,正是由于bash的安装才满足了time的安装需求。
time依赖于bash等包,同时它也提供了一些内容,有可能被别的包依赖:

[leconte@localhost soft]$ rpm -q --provides time

time = 1.7-27.2.2

[leconte@localhost soft]$ rpm -q --whatrequires 'time'

no package requires time
不幸的是系统中并没有包依赖于time,因为它本身属于较上层的包。
对于一些底层内容就会有很多包依赖它,例如之前碰到的/bin/sh:

[leconte@localhost soft]$ rpm -q --whatrequires '/bin/sh'

bash-3.2-24.el5
bash-3.2-24.el5
info-4.8-14.el5
ncurses-5.5-24.20060715
libxml2-2.6.26-2.1.2.7
readline-5.1-1.1
......................省略n行
由于篇幅所限就不全列举出来了,这种依赖关系应该可以一目了然了。

和上节类似,rpm -qR和rpm -q �Cprovides这两个查询指令同样可以加上-p参数应用到一个未安装的rpm包,例如

[leconte@localhost soft]$ rpm -qp --provides enca-1.9-4.el5.rf.i386.rpm

warning: enca-1.9-4.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6

libenca.so.0
enca = 1.9-4.el5.rf
可以看到,enca这个rpm包提供了动态库libenca.so.0和enca本身。
通过使用本节这四条依赖关系查询指令基本可以了解到系统上众多rpm包之间的耦合关系,明确了这一点,我们对rpm的理解也就更深了一步。
介绍完了rpm包的安装和查询,本节接着来介绍rpm包的卸载和升级,这样以来rpm包的“增删改查”就都涉及到了。
rpm包的卸载和升级的指令如下:

rpm -e [包名] 用来卸载一个rpm包
rpm -U [包文件] 用来升级一个现有的rpm

需要注意的是,如果要卸载的rpm包中的内容被别的rpm包依赖,那么则无法卸载,例如

[leconte@localhost ~]$ rpm -e php-common

error: Failed dependencies:

php-common = 5.2.9-4 is needed by (installed) php-pdo-5.2.9-4.i386

php-common = 5.2.9-4 is needed by (installed) php-bcmath-5.2.9-4.i386

php-common = 5.2.9-4 is needed by (installed) php-curl-5.2.9-4.i386

php-common = 5.2.9-4 is needed by (installed) php-dba-5.2.9-4.i386

php-common由于被 php-pdo等包依赖而无法单独卸载,php-pdo和php-common可以利用上节介绍过的依赖关系查询指令查到:

[leconte@localhost ~]$ rpm -qR php-pdo

config (php-pdo ) = 5.2.9-4
libc.so.6
libc.so.6 (GLIBC_2.0 )
libc.so.6 (GLIBC_2.1.3 )
libc.so.6 (GLIBC_2.3 )
libc.so.6 (GLIBC_2.4 )
librt.so.1
libsqlite3.so.0
php-common = 5.2.9-4
..............

[leconte@localhost ~]$ rpm -q --whatrequires php-common

php-pdo-5.2.9-4
php-bcmath-5.2.9-4
php-curl-5.2.9-4
php-dba-5.2.9-4
php-gd-5.2.9-4
...............
这种情况下想要卸载php-common,只能将它依赖的所有包全部卸载掉。更暴力的方式是指定-nodeps忽略依赖关系限制,但是这样造成的后果就是php-pdo等包将无法正常使用,因此这种方式一般不推荐。
rpm包的升级指的是rpm包的版本升级,这种情况下实际内部执行的动作分两步,即先安装新版本然后卸载老版本。此外,rpm也可以进行包的降级,只需要指定�Coldpackages参数即可。
值得注意的是在卸载和升级的过程中, 包中的配置文件会被妥善处理,rpm会根据一系列规则决定配置文件是否保留,即使被替换,旧的配置文件也会被重命名后保存起来,你之前对配置文件做过的修改不会因为rpm包的升级而丢失。

你可能感兴趣的:(rpm,EPEL,第三方源,prmforge)