RPM 包的安装虽然很方便和快捷,但是依赖性实在是很麻烦,尤其是库文件依赖,还要去 rpmfind 网站査找库文件到底属于哪个 RPM 包,从而导致 RPM 包的安装非常烦琐。那么,有没有可以自动解决依赖性、自动安装的方法呢?
答案是肯定的,yum 在线管理就可以自动处理 RPM 包的依赖性问题,从而大大简化 RPM 包的安装过程。但需要注意的是,首先,yum 安装的还是 RPM 包,其次,yum 安装是需要有可用的 yum 服务器存在的,当然这个 yum 服务器可以在网上,也可以使用光盘在本地搭建。
yum 可以方便地进行 RPM 包的安装、升级、査询和卸载,而且可以自动解决依赖性问题,非常方便和快捷。但是,一定要注意 yum 的卸载功能。yum 在卸载软件的同时会卸载这个软件的依赖包,但是如果卸载的依赖包是系统的必备软件包,就有可能导致系统崩溃。除非你确实知道 yum 在自动卸载时会卸载哪些软件包,否则最好不要执行 yum 卸载。
yum源搭建
yum 源既可以使用网络 yum 源,也可以使用本地光盘作为 yum 源。要使用网络 yum 源,你的主机必须是正常联网的。
当然,要使用 yum 进行 RPM 包安装,那么必须安装 yum 软件。查看命令如下:
[root@localhost ~]# rpm -qa | grep yum
yum-metadata-parser-1.1.2-16.el6.i686
yum-3.2.29-30.el6.centos.noarch
yum-utils-1.1.30-14.el6.noarch
yum-plugin-fastestmirror-1.1.30-14.el6.noarch
yum-plugin-security-1.1.30-14.el6.noarch
如果没有安装,则需要手工使用 RPM 包方式安装。
网络yum源服务器搭建
在主机网络正常的情况下,CentOS 的 yum 是可以直接使用的,不过我们需要了解一下 yum 源配置文件的内容。
yum 源配置文件保存在 /etc/yum.repos.d/ 目录中,文件的扩展名一定是"*.repo"。也就是说,yum 源配置 文件只要扩展名是"*.repo"就会生效。
[root@localhost ~]# ls /etc/yum.repos.d/
CentOS-Base.repo
CentOS-Media.repo
CentOS-Debuginfo.repo.bak、
CentOS-Vault.repo
这个目录中有 4 个 yum 源配置文件,默认情况下 CentOS-Base.repo 文件生效。我们打开这个文件看看,命令如下:
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/ CentOS-Base.repo
[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
…省略部分输出…
在 CentOS-Base.repo 文件中有 5 个 yum 源容器,这里只列出了 base 容器,其他容器和 base 容器类似。
我们解释一下 base 这个容器:
- [base]:容器名称,一定要放在[]中。
- name:容器说明,可以自己随便写。
- mirrorlist:镜像站点,这个可以注释掉。
- baseurl:我们的 yum 源服务器的地址。默认是 CentOS 官方的 yum 源服务器,是可以使用的。如果你觉得慢,则可以改成你喜欢的 yum 源地址。
- enabled:此容器是否生效,如果不写或写成 enabled 则表示此容器生效,写成 enable=0 则表示此容器不生效。
- gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效。
- gpgkey:数字证书的公钥文件保存位置。不用修改。
yum 源配置文件默认不需要进行任何修改就可以使用,只要网络可用就行。
以本地光盘作为 yum 源服务器
如果 Linux 主机不能联网,yum 就不能使用吗? yum 已经考虑到这个问题,所以在 /etc/yum.repos.d/ 目录下 还有一个 CentOS-Media.repo 文件,这个文件就是以本地光盘作为 yum 源服务器的模板文件,只需要进行简单的修改即可。
1) 放入 CentOS 安装光盘,并挂载光盘到指定位置。命令如下:
[root@localhost ~]# mkdir /mnt/cdrom
#创建cdrom目录,作为光盘的挂载点
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
mount: block device/dev/srO is write-protected, mounting read-only
#挂载光盘到/mnt/cdrom目录下
2) 修改其他几个 yum 源配置文件的扩展名,让它们失效,因为只有扩展名是"*.repo"的文件才能作为 yum 源配置文件。当然也可以删除其他几个 yum 源配置文件,但是如果删除了,当你又想用网络作为 yum 源时,就没有了参考文件,所以最好还是修改扩展名。 命令如下:
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mv CentOS-Base, repo CentOS-Base.repo.bak
[root@localhost yum.repos.d]#mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Vault.repo CentOS-Vault.repo.bak
3) 修改光盘 yum 源配置文件 CentOS-Media.repo,参照以下方修改:
[root@localhost yum.repos.d]# vim CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom
#地址为你自己的光盘挂载地址
#file:///media/cdrom/
#file:///media/cdrecorder/
#注释这两个的不存在地址
gpgcheck=1
enabled=1
#把enabled=0改为enabled=1, 让这个yum源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
配置完成,现在可以感受一下yum的便捷了。
um提供了查询、安装、升级和卸载软件包的命令,一一给大家介绍。
查询
査询yum源服务器上所有可安装的软件包列表
[root@localhost yum.repos.d]# yum list
#查询所有可用软件包列表
Installed Packages
#已经安装的软件包
ConsdeKit.i686 0.4.1-3.el6
@anaconda-CentOS-201207051201 J386/6.3
ConsdeKit-libs.i686 0.4.1-3.el6 @anaconda-CentOS-201207051201 J386/6.3
…省略部分输出…
Available Packages
#还可以安装的软件包
389-ds-base.i686 1.2.10.2-15.el6 c6-media
389-ds-base-devel.i686 1.2.10.2-15.el6 c6-media
#软件名 版本 所在位置(光盘)
…省略部分输出…
查询yum源服务器中是否包含某个软件包
[root@localhost yum.repos.d]# yum list 包名
#查询单个软件包
例如:
[root@localhost yum.repos.d]# yum list samba
Available Packages samba.i686 3.5.10-125.el6 c6-media
#搜索yum源服务器上所有和关键字相关的软件包
例如:
[root@localhost yum.repos.d]# yum search 关键字
#搜索yum服务器上所有和关键字相关的软件包
例如:
[root@localhost yum.repos.d]# yum search samba
#搜索服务器上所有和samba相关的软件包
========================N/S Matched:
samba =============================
samba-client.i686:Samba client programs
samba-common.i686:Files used by both Samba servers and clients
samba-doc.i686: Documentation for the Samba suite
…省略部分输出…
Name and summary matches only, use"search all" for everything.
查询指定软件包的信息
[root@localhost yum.repos.d]# yum info samba
#查询samba软件包的信息
Available Packages <-没有安装
Name : samba <-包名
Arch : i686 <-适合的硬件平台
Version : 3.5.10 <―版本
Release : 125.el6 <—发布版本
Size : 4.9M <—大小
Repo : c6-media <-在光盘上
…省略部分输出…
安装
[root@localhost yum.repos.d]# yum -y install 包名
选项:
- install:安装;
- -y:自动回答yes。如果不加 -y,那么每个安装的软件都需要手工回答yes;
例如:
[root@localhost yum jepos.d]#yum -y install gcc
#使用yum自动安装gcc
在讲 RPM 包安装时提到,gcc 是 C 语言的编译器,其依赖的软件包比较多,手工使用 RPM 包安装太麻烦了,所以使用 yum 安装。
yum 安装可以自动解决依赖性,而且安装速度也比源码包快得多。不过,yum 到底安装的还是 RPMS,所以 rpm 命令还是必须学习和使用的。
升级
[root@localhost yum.repos.d]# yum -y update 包名
#升级指定的软件包
选项:
- update:升级;
- -y:自动回答yes;
注意,在进行升级操作时,yum 源服务器中软件包的版本要比本机安装的软件包的版本高。
[root@localhost yum.repos.d]# yum -y update
#升级本机所有软件包
这条命令会升级系统中所有的软件包。不过我们的生产服务器是稳定优先的,所以这种全系统升级的情况并不多见。
卸载
再次强调一下,除非你确定卸载的软件的依赖包不会对系统产生影响,否则不要执行 yum 的卸载,因为很有可能在卸载软件包的同时卸载的依赖包也是很重要的系统文件,这就有可能导致系统崩溃。
卸载命令如下:
[root@localhost yum.repos.d]# yum remove 包名
#卸载指定的软件包
例如:
[root@localhost yum.repos.d]# yum remove samba
#卸载samba软件包
在安装 Linux 的过程中,在选择软件包的时候,如果选择了"现在自定义",就会看到 Linux 支持的许多软件组,比如编辑器、系统工具、开发工具等。那么,在系统安装完成后,是否可以利用 yum 安装这些软件组呢?
当然可以,只需要利用 yum 的软件组管理命令。
查询可以安装的软件组
[root@localhost ~]#yum grouplist
#查询可以安装的软件组
查询软件组中包含的软件
[root@localhost ~]#yum groupinfo 软件组名
#查询软件组中包含的软件
例如:
[root@localhost ~]#yum groupinfo "Web Server"
#查询软件组"Webserver"中包含的软件
安装软件组
[root@localhost ~]#yum groupinstall 软件组名
#安装指定软件组,组名可以由grouplis查询出来
例如:
[root@localhost ~]#yum groupinstall "Web Server"
#安装网页服务软件组
卸载软件组
[root@localhost ~]# yum groupremove 软件组名
#卸载指定软件组
软件组管理对于安装功能集中的软件集合非常方便。比如,在安装 Linux 的时候没有安装图形界面,但是后来发现需要图形界面的支持,这时可以手工安装图形界面软件组(X Window System 和 Desktop),就可以很方便地安装图形界面了。