Linux【8】-软件管理-2-安装(yum)

二、用yum管理软件包

YUM 是 Yellow dog Updater, Modified 的缩写,是由 Duke University 所发起的计划,目的就是为了解决 RPM 的依赖关系的问题,方便使用者进行软件的安装、升级等等工作。

yum 只是 为了解决 RPM 的依赖关系的问题,而不是一种其它的软件封装模式。RPM 仍然是 RHEL 和 CenOS 中的默认软件管理器。yum 可以视为 RPM 的一个前台工具。

其实 YUM 的工作原理并不复杂,每一个 RPM 软件包的头(header)里面 都会纪录该软件的依赖关系,那么如果可以将该头的内容纪录下来并且进行分析, 可以知道每个软件在安装之前需要额外安装哪些基础软件。也就是说,在服务器 上面先以分析工具将所有的 RPM 软件包进行分析,然后将该分析结果记录下来, 只要在进行安装或升级时先查询该记录文件,就可以知道所有依赖的软件。所以 YUM 的基本工作流程如下:

服务器端:在服务器上面存放了所有的 RPM 软件包,然后以相关的功能去 分析每个 RPM 文件的依赖性关系,将这些数据记录成文件存放在服务器的某特 定目录内。

客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文 件(可通过 WWW 或 FTP 方式),通过对服务器端下载的纪录数据进行分析,然 后取得所有相关的软件,一次全部下载下来进行安装。

如果没有安装 yum,就必须去下载,我们可以选择一个最快的 CentOS 官方 源(对于国内用户来说,一般是网易源,我们这里使用的就是是网易源),用下 载工具进行下载,我们需要下载这些包:

[root@localhost ~]# rpm –qa yum*
yum-plugin-security-1.1.30-14.el6.noarch # yum 安全插件包
yum-plugin-fastestmirror-1.1.30-14.el6.noarch# yum 最快镜像自选动择插件包
yum-metadata-parser-1.1.2-16.el6.x86_64 # yum 的元数据解析器
yum-utils-1.1.30-14.el6.noarch # yum 操作软件仓库和管理扩展包的工具集合
yum-3.2.29-30.el6.centos.noarch # yum 软件包
[root@localhost ~]#

用 wget 命令下载:

[root@localhost ~]# wget
http://mirrors.163.com/centos/6.3/os/x86_64/Packages/yum-3.2.29-
30.el6.centos.noarch.rpm
[root@localhost ~]# wget http://mirrors.163.com/centos/6.3/os/x86_64/Packages/yummetadata-parser-1.1.2-16.el6.x86_64.rpm

[root@localhost ~]# wget http://mirrors.163.com/centos/6.3/os/x86_64/Packages/yumutils-1.1.30-14.el6.noarch.rpm
[root@localhost ~]# wget http://mirrors.163.com/centos/6.3/os/x86_64/Packages/yumplugin-fastestmirror-1.1.30-14.el6.noarch.rpm

在下载完成后,用 rpm 进行安装:

[root@localhost ~]# rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm
[root@localhost ~]# rpm -ivh yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
[root@localhost ~]# rpm -ivh yum-3.2.29-30.el6.centos.noarch.rpm yum-pluginfastestmirror-1.1.30-14.el6.noarch.rpm
# 这两个软件包必须同时安装,否则会发生互依赖性问题
[root@localhost ~]# rpm -ivh yum-utils-1.1.30-14.el6.noarch.rpm

测试 yum

# yum clean all # 清除 yum 所有软件包缓存信息
# yum makecache #将服务器上的软件包信息缓存到本地,以提高搜索安装软件的速度
# yum install finger #安装一个名为“finger”命令,测试 yum 是否可用

当第一次使用 yum 或 yum 源有更新时,yum 会自动下载所有所需的 headers 放置于/var/cache/yum 目录下,所需时间可能较长。

命令 含义
yum clean all 清除缓存中旧的 rpm 头文件和包文件
yum makecache 建立新的缓存
yum list 列出所有升级源上的包
yum list available 列出资源库中所有可以安装或更新的 rpm 包
yum list updates 列出所有升级源上的可以更新包
yum list installed 列出已经安装的包
yum search <关键字> 搜索匹配特定字符的 rpm 包
yum info <软件包名> 列出资源库中特定的可以安装或更新以及已经安装的 rpm 包的信息
yum install <软件包名> 安装 rpm 包
yum update <软件包名> 更新 rpm 包
yum remove <软件包名> 卸载 rpm 包

三、yum 软件源

RPM 软件源(Repositories)是一个目录,或是一个网站,包含了许多 RPM 软件包及其索引文件。类似 yum 之类的软件包管理工具可以在仓库中自动地定 位并获取正确的 RPM 软件包。这样,用户就不必手动搜索和安装新应用程序和 升级补丁了。只用一个命令,您就可以更新系统中所有软件,也可以根据指定搜 索目标来查找安装新软件。

有许多公司和社区提供 CentOS rpm 官方源,国内比较常用的有:

网易源:http://mirrors.163.com
搜狐源:http://mirrors.sohu.com/
中科大源:http://centos.ustc.edu.cn/
CentOS 源:http://mirror.centos.org

我们随时可以到 CentOS 或者 Fedora 的 Public Mirror List 中去查找最快 的 CentOS 或者 Fedora rpm 官方源:

CentOS:http://www.centos.org/modules/tinycontent/index.php?id=13

Fedora: http://mirrors.fedoraproject.org/publiclist/

一个软件源(Repositories)中可能会配置多个软件仓库(Repository)。 CentOS 默认自带 CentOS-Base.repo 源已经预先配置五个仓库(其中三个默认 启用,两个配置但未启用):

库名 内容
base 构成 CentOS 基本软件包,和光盘上内容相同,默认启用
updates Base 仓库中软件包的更新版本,默认启用
extras 一大批附加的软件包,默认启用
centosplus 针对 base 及 updates 软件库内的组件的更新。这些更新组件并不属于正式的发行,所以在扩展 CentOS 的功能同时牺牲了与先前版本兼容性。启用这个软件库会导致 CentOS 与正式版本有差别。默认情况下是不启用这个库的,用户应该明白这样做的后果才启用 centosplus。
contrib 这个软件库包含了 CentOS 用户贡献的组件,它们并不会与核心发行版本的组件重叠。这些组件并没有经过 CentOS 的开发者测试,亦未必会同步跟随 CentOS 正式版本的发行。默认情况下是不启用这个库的,用户应该明白这样做的后果才启用contrib。

官方源中去除了很多有版权争议的软件,而且安装的软件也不是最新的稳定 版。CentOS 自带的源中也找不到很多多媒体软件(如 mplayer)和开发软件(如 Eclipse),如果需要安装,必需先添加其他源,如 EPEL、RPMFusion 和 RepoForge 等第三方软件源。

有许多公司和社区为兼容 RHEL 的 Linux 发行版本提供第三方源,比较常用的有:

EPEL 源:https://fedoraproject.org/wiki/EPEL/zh-cn
RepoForge 源:http://repoforge.org/
RPMFusion 源:http://rpmfusion.org/
Remi 源:http://rpms.famillecollet.com/

[base]
#仓库名字
name=CentOS-$releasever – Base
#这个可以理解为仓库的描述,这个可以不写这一行
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
#库的地址
enable =1
# 是否启用这个库,1 是启用,0 是不启用,如果 enable 参数缺失,默认为启用
gpgcheck=1
#是否检查软件的 KEY,1 是启用,0 是不启用
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#KEY 文件路径

我们试着去配置一个第三方源,首先确认系统是否安装了 yum-priorities 这个 yum 的插件,这个插件是用来保证安装软件时候软件仓库先后次序,一般是默认 先从官方源安装,然后从第三方软件仓库中安装:

[root@localhost ~]# yum install yum-priorities
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
base | 3.7 kB 00:00
extras | 3.5 kB 00:00
google-chrome | 951 B 00:00
updates | 3.5 kB 00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package yum-plugin-priorities.noarch 0:1.1.30-14.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================
Package Arch Version Repository Size
===================================================================
Installing:
yum-plugin-priorities noarch 1.1.30-14.el6 base 22 k

Transaction Summary
===================================================================
=============
Install 1 Package(s)
Total download size: 22 k
Installed size: 28 k
Is this ok [y/N]: y
Downloading Packages:
yum-plugin-priorities-1.1.30-14.el6.noarch.rpm | 22 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
 Installing : yum-plugin-priorities-1.1.30-14.el6.noarch 1/1
 Verifying : yum-plugin-priorities-1.1.30-14.el6.noarch 1/1
Installed:
 yum-plugin-priorities.noarch 0:1.1.30-14.el6
Complete!

安装完以后查看 /etc/yum/pluginconf.d/priorities.conf 文件,确认文件中有 这三行:

[main]
enabled=1 #启用本插件
check_obsoletes=1 #防止一些已经废弃(obsoletes)的包的出现

来到 RepoForge 官方网站 http://repoforge.org/use/ ,根据所使用的 Linux 发行版本选择适合的 rpmforge 发行包,如果不知道你所使用的 CentOS 具体版 本可以通过如下命令查看:

[root@localhost ~]# cat /etc/centos-release #查看发行版本号
CentOS release 6.3 (Final)
[root@localhost ~]# uname –r #查看内核版本号和机器架构
2.6.32-279.19.1.el6.x86_64
[root@localhost ~]#

我们可以知道我们所使用的 Linux 发行版本为 CentOS 6.3(Final),内核版本 为 kernel 2.6.32-279.19.1.el6.x86_64,与 RHEL 6.3 兼容,因此我们选择 EL 6.0 x86_64 版本下载并安装。

[root@localhost ~]# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-
0.5.2-2.el6.rf.x86_64.rpm、
[root@localhost ~]# rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
warning: rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm: Header V3 DSA/SHA1 Signature,
key ID 6b8d79e6: NOKEY
Preparing... ########################################### [100%]
 1:rpmforge-release ########################################### [100%]
[root@localhost ~]#

[root@localhost yum.repos.d]# ls -l /etc/yum.repos.d/
总用量 36
-rw-r--r--. 1 root root 1926 12 月 26 23:13 CentOS-Base.repo
-rw-r--r--. 1 root root 637 6 月 26 2012 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 626 12 月 26 22:54 CentOS-Media.repo
-rw-r--r--. 1 root root 2593 12 月 26 22:54 CentOS-Vault.repo
-rw-r--r--. 1 root root 116 12 月 26 22:54 google-chrome.repo
-rw-r--r--. 1 root root 739 11 月 13 2010 mirrors-rpmforge
-rw-r--r--. 1 root root 717 11 月 13 2010 mirrors-rpmforge-extras
-rw-r--r--. 1 root root 728 11 月 13 2010 mirrors-rpmforge-testing
-rw-r--r--. 1 root root 1113 11 月 13 2010 rpmforge.repo

用文本编辑器打开/etc/yum.repos.d/rpmforge.repo,找到如下 rpmforge 仓库配 置部分,并在此部分最后添加“priority = 10”,表示该源的优先级较低:

### Name: RPMforge RPM Repository for RHEL 6 - dag
### URL: http://rpmforge.net/
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/rpmforge
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge

enabled = 1
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
priority = 10

优先级由 1 ~ 99 的 99 个数表示,1 的优先级最高。优先级小的源即使有 某软件的较新版本,如果优先级高的源中没有,在启用该插件的情况下,系统也 无法安装/升级到该较新版本。图形界面的 YUM 工具一般默认就已经包含了优 先级插件。

用 vim 打开 CentOS-Base.repo,找到如 base、updates 和 extra 仓库配置部分, 并在分别这些部分最后添加“priority = 1”:

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
priority = 1
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updat
es
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
priority = 1

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras

#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
priority = 1

然后来安装mplayer 这个软件来测试RepoForge这个第三方源是否配置好了:

[root@localhost ~]#yum install mplayer mplayer-gui mplayer-doc mplayer-skins mplayertools

四、讨论

4.1 安装32或64位版本

假如你要安装libjpeg的32位版本

1、查询具体的32位版本,然后安装

yum search libjpeg.i686
yum -y install libjpeg.i386

2、一劳永逸的方法,这么做会同时安装32和64位版本。

echo 'multilib_policy=all' >> /etc/yum.conf

4.2 centos yum安装nginx 提示 No package nginx available问题解决方法

问题原因:

nginx位于第三方的yum源里面,而不在centos官方yum源里面

解决方法:

安装epel(Extra Packages for Enterprise Linux)

a、去epel网站 http://fedoraproject.org/wiki/EPEL下载

b、我的系统是centos5.7,cpu是x86_64,所以我下载的是wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm 如果是centos6, 则应该下载 wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm c、安装epel

rpm -ivh epel-release-5-4.noarch.rpm

再次执行 yum install nginx,则会提示安装成功了 注:

epel的安装跟centos的系统版本、cpu硬件架构有关, 查看系统版本(lsb-release -a), 查看cpu硬件架构(arch)

epel它是RHEL 的 Fedora 软件仓库,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL,就像在 Fedora 上一样,可以通过 yum install package-name,随意安装软件。

4.3 yum安装出现No package vim available解决办法

我一般习惯性先去更新一下yum仓库:

yum -y update

再次运行安装,发现错误依旧,看来这种猜包名的方法不适用;所以接下来可以通过yum的查找参数来列出vim相关的包名:

yum search cuda-9-0

注:这里我犯了一个错误,用的是cuda-9.0怎么都没有搜索到

4.4 查看都安装了哪些源

yum repolist

或者

ls /etc/yum.repos.d/

参考资料:

个人公众号,比较懒,很少更新,可以在上面提问题:

更多精彩,请移步公众号阅读:

Sam avatar
About Sam
专注生物信息 专注转化医学