部署YUM软件仓库
借助于YUM软件仓库,可以完成安装,卸载,自动升级rpm软件包等任务,能够自动查找并解决rpm包之间的依赖关系,而无需管理员逐个,手工的去安装每个rpm包,使管理员在维护Linux服务器时更加轻松自如。特别是在拥有大量Linux主机的本地网路中,构建一台"源"服务器时可以大大缓解软件安装,升级等对internet的依赖。
YUM 的前身是 YUP(Yellow dog Updater,Yellow dog Linux 的软件更新器),最初由 TSS 公司(Terra Soft Solutions,INC.)使用 Python 语言开发而成,后来由杜克大学(DUniversity)的 Linux 开发队伍进行改进,命名为 YUM(Yellow dog Updater,Modified)。
要成功使用
YUM
机制来更新系统和软件,需要有一个包含各种
rpm
安装包文件及其依
赖软件的软件仓库(
repository
),提供软件仓库的服务器也称为
“
源
”
服务器。在客户机中只
要正确指定软件仓库的地址等信息,就可以通过对应的
“
源
”
服务器来安装或更新软件。
准备网络安装源
YUM
软件仓库通常借助于
HTTP
或
FTP
协议来进行发布,这样可以面向网络中的所有
客户机提供软件源服务。为了便于客户机查询软件包,获取依赖关系等信息,在软件仓库中
需要提供仓库数据(
repodata
),其中收集了目录下所有
rpm
包的头部信息。
准备软件仓库目录
在
CentOS 7
系统的安装光盘中,已针对软件目录
Packages
建立好
repodata
数据,
因此只要简单地将整个光盘中的内容通过
HTTP
或
FTP
进行发布,就可以作为软件仓库了。
例如,可以创建
/var/ftp/centos7
目录,并确保有足够的可用空间(本例中建议大于
5GB
),
然后将
CentOS 7
光盘中的所有数据复制到该目录下。
[root@localhost ~]# mkdir -p /var/ftp/centos7
[root@localhost ~]#
cp -rf /media/cdrom/* /var/ftp/centos7
对于用户搜集的非
CentOS 7
光盘自带的更多其他软件包(必须包括存在依赖关系的所
有安装文件),除了准备相应的目录之外,还需要手动创建
repodata
数据文件,这就要用到
createrepo
工具(需要从
CentOS 7
光盘中安装)。例如,若已将作为源发布的其他
rpm
安
装包文件存放到
/var/ftp/other
目录下,则可执行以下操作为其创建
repodata
数据。
安装并启用 vsftpd 服务
[root@localhost ~]#
rpm -ivh /media/cdrom/Packages/vsftpd-3.0.2-21.el7.x86_64.rpm
[root@localhost ~]#
systemctl start vsftpd
[root@localhost ~]#
systemctl enable vsftpd
Created
symlink
from
/etc/systemd/system/multi-user.target.wants/vsftpd.service
to
/usr/lib/systemd/system/vsftpd.service.
访 问
ftp://192.168.4.254/centos7/
, 确 保 可 以 查 看 到 已 复 制 到 软 件 仓 库 目 录
/var/ftp/centos7
下的光盘数据;访问
ftp://192.168.4.254/other/
,可以查看非
CentOS 7
光
盘自带的其他软件包。
[root@localhost ~]#
ftp 192.168.4.254
……
//
省略登录信息
ftp>
cd centos7
250 Directory successfully changed.
ftp>
ls
……
//
省略部分信息
226 Directory send OK
配置软件仓库位置(客户端)
在客户机上需要指定至少一个可用的软件仓库,然后才能使用下一节将要介绍的
yum
工具来下载、安装软件包。
yum
工具使用的软件仓库信息存放在
/etc/yum.repos.d
目录下扩
展名为
“.repo”
的文件中。以上一小节的网络安装源为例,典型的仓库配置如下所示。
[root@localhost ~]#
vi /etc/yum.repos.d/centos7.repo
[base]
//
仓库类别
name=CentOS 7.3
//
仓库名称
(
说明
)
baseurl=ftp://192.168.4.254/centos7
//URL
访问路径
enabled=1
//
启用此软件仓库
gpgcheck=1
//
验证软件包的签名
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
//GPG
公钥文件的位置
[other]
name=Other RPM Packages
baseurl=ftp://192.168.4.254/other
enabled=1
gpgcheck=0
//
不验证软件包的签名
上述操作中,文件
centos7.repo
需要手动创建,
/etc/yum.repos.d
目录下若有其他未用
的
“*.repo”
文件建议将其删除。
“enabled=1”
为默认项,可以省略;
“gpgcheck”
和
“gpgkey”
两
行配置用来检查软件包的完整性,若无此要求则可以省略。
作为临时解决办法之一,实际上也可以使用本地文件夹作为软件仓库。例如,将
CentOS
7
光盘挂载到
/media/cdrom
目录下以后,可以参考以下操作来进行配置。当然,这种方式
仅限于在本机使用
[root@localhost ~]#
vi /etc/yum.repos.d/local.repo
[local]
name=CentOS 7.3
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
到这里
YUM
软件仓库的配置工作就算完成了,下一节将介绍
yum
命令的使用,通过
集中提供的软件仓库来管理客户机中的软件安装。
使用yum工具管理软件包
在
CentOS 7
服务器中,
yum
工具是最常用的
YUM
客户端工具,由默认安装的
yum-3.2.29- 40.el6.no arch 软件包提供。下面分别介绍如何使用
yum
工具来查询、安装、
升级及卸载软件包。
5.2.1 查询软件包
yum
工具的常见查询操作包括查询软件包列表、查询软件包的描述信息、查询指定的
软件包,分别可结合子命令
list
、
info
、
search
来实现。
1.yum list——查询软件包列表
直接执行
“yum list”
命令可以获得系统中的软件安装情况,也可以查询软件仓库中可用
的软件包列表,其中子命令
list
表示列表查看。
[root@localhost ~]#
yum list
已加载插件:
fastestmirror, langpacks
Loading mirror speeds from cached hostfile
已安装的软件包
//
已安装的软件包列表
GConf2.x86_64
3.2.6-8.el7
@anaconda
GeoIP.x86_64
1.5.0-11.el7
@anaconda
ModemManager.x86_64
1.6.0-2.el7
@anaconda
ModemManager-glib.x86_64
1.6.0-2.el7
@anaconda
……
//
省略部分信息
可安装的软件包
//
可用
(
未
安装
)
的软件包列表
389-ds-base.x86_64
1.3.5.10-11.el7
base
389-ds-base-libs.x86_64
1.3.5.10-11.el7
base
……
//
省略部分信息
若执行
“yum list installed”
命令,则表示只列出系统中已安装的软件包;若执行
“yum list
available”
命令,则表示只列出软件仓库中可用(尚未安装)的软件包;若执行
“yum list
updates”
命令,则表示只列出可以升级版本的软件包。
2.yum info——查询软件包的描述信息
当需要查看某个软件包的描述信息时,可以执行
“yum info
软件包名
”
,其中子命令
info
表示获取信息。例如,执行以下操作可以查看软件包
httpd
的信息。
[root@localhost ~]#
yum info httpd
已加载插件:
fastestmirror, langpacks
Loading mirror speeds from cached hostfile
可安装的软件包
名称
: httpd
架构
: x86_64
版本
: 2.4.6
发布
: 45.el7.centos
大小
: 2.7 M
源
: base
简介
: Apache HTTP Server
网址
: http://httpd.apache.org/
协议
: ASL 2.0
描述
: The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
.yum search——查询指定的软件包
当需要根据某个关键词来查找相关的软件包时,可以执行
“yum search
关键词
”
,默认
仅根据软件包名称和描述信息进行搜索;若执行
“yum search all
关键词
”
,可以扩大搜索范
围。例如,执行以下操作将搜索软件仓库并列出与
“httpd”
相关的软件包
[root@localhost ~]#
yum search all httpd
已加载插件:
fastestmirror, langpacks
Loading mirror speeds from cached hostfile
===============================
匹配:
httpd ================================
httpd-devel.x86_64 : Development interfaces for the Apache HTTP server
httpd-manual.noarch : Documentation for the Apache HTTP server
httpd-tools.x86_64 : Tools for use with the Apache HTTP Server
libmicrohttpd.x86_64 : Lightweight library for embedding a webserver in applications
httpd.x86_64 : Apache HTTP Server
mod_dav_svn.x86_64 : Apache httpd module for Subversion server
mod_fcgid.x86_64 : FastCGI interface module for Apache 2
mod_ssl.x86_64 : SSL/TLS module for the Apache HTTP Server
yum whatprovides——查询命令属于哪个软件包
在使用
Linux
操作系统过程中,经常遇到找不到某命令的现象。那这个命令需要安
装什么软件包之后才会出现呢?
yum whatprovides
就可以解决这个问题的,它可以查
找某个命令属于哪个软件包。
[root@localhost ~]#
yum whatprovides netstat
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.neusoft.edu.cn
* epel: mirrors.tuna.tsinghua.edu.cn
* extras: mirrors.163.com
* updates: mirrors.163.com
net-tools-2.0-0.24.20131004git.el7.x86_64 : Basic networking tools
Repo
: @base
Matched from:
Filename
: /usr/bin/netstat
注意:通过执行查询操作
“yum grouplist”“yum groupinfo
分组名称
”
可以获得
YUM
仓库中的软件分组信息。例如,执行
“yum groupinfo gnome-desktop”
命令后将列出软
件分组
安装、升级、卸载软件包
使用
yum
工具安装、升级软件包,分别通过子命令
install
、
update
来完成,操作对象
为指定的软件包名(可以有多个)。执行操作时会自动检查并解决软件包之间的依赖关系,
期间会提示用户按
Y
键确认安装或升级操作,若希望自动确认,可以在
yum
命令后添加
“-y”
选项。例如,执行以下操作将从软件仓库下载并安装
net-snmp
软件包,并自动解决其依赖
关系
[root@localhost ~]#
yum -y install net-snmp
…… //
省略部分信息
依赖关系解决
======================================================================
Package
架构
版本
源
大小
======================================================================
正在安装
:
net-snmp
x86_64
1:5.7.2-24.el7_2.1
base
321 K
为依赖而安装
:
net-snmp-agent-libs x86_64
1:5.7.2-24.el7_2.1
base
702 K
事务概要
======================================================================
安装
1
软件包
(+1
依赖软件包
)
总下载量:
1.0 M
安装大小:
2.9 M
Downloading packages:
(1/2): net-snmp-5.7.2-24.el7_2.1.x86_64.rpm
| 321 KB
00:00
(2/2): net-snmp-agent-libs-5.7.2-24.el7_2.1.x86_64.rpm| 702 KB
00:00
----------------------------------------------------------------------
总计
1.1 MB/s | 1.0 MB 00:00
…… //
省略部分信息
已安装
:
net-snmp.x86_64 1:5.7.2-24.el7_2.1
作为依赖被安装
:
net-snmp-agent-libs.x86_64 1:5.7.2-24.el7_2.1
完毕!
使用
yum
工具卸载软件包时,通过子命令
remove
来完成,卸载操作通过软件仓库也
可以完成。例如,执行以下操作将卸载
autofs
软件包,并自动解决其依赖关系。
[root@localhost ~]#
yum -y remove autofs
…… //
省略部分信息
Running transaction
正在删除
: ipa-client-4.4.0-12.el7.centos.x86_64
1/2
正在删除
: 1:autofs-5.0.7-56.el7.x86_64
2/2
验证中
: 1:autofs-5.0.7-56.el7.x86_64
1/2
验证中
: ipa-client-4.4.0-12.el7.centos.x86_64
2/2
删除
:
autofs.x86_64 1:5.0.7-56.el7
作为依赖被删除
:
ipa-client.x86_64 0:4.4.0-12.el7.centos
完毕
注意:使用
yum
工具管理软件包时,结合子命令
groupinstall
、
groupupdate
、
groupremove
可以针对软件分组进行安装、升级、卸载操作。例如,若执行
“yum -y groupremove
gnome-desktop”
命令,则会删除整个
Desktop
分组所包含的软件包。
NFS 共享存储服务
NFS 是一种基于
TCP/IP
传输的网络文件系统协议,最初由
Sun
公司开发。通过使用
NFS
协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负
载均衡群集来说,使用
NFS
协议来共享数据存储是比较常见的做法,
NFS
也是
NAS
存储
设备必然支持的一种协议。
下面将学习
NFS
共享服务的基本配置和访问方法。
使用 NFS 发布共享资源
NFS
服务的实现依赖于
RPC
(
Remote Process Call
,远端过程调用)机制,以完成远
程到本地的映射过程。在
CentOS 7
系统中,需要安装
nfs-utils
、
rpcbind
软件包来提供
NFS
共享服务,前者用于
NFS
共享发布和访问,后者用于
RPC
支持。
安装 nfs-utils、rpcbind 软件包
提供
RPC
支持的服务为
rpcbind
,提供
NFS
共享的服务为
nfs
,完成安装以后建议调
整这两个服务的自启动状态,以便每次开机后自动启用。手动加载
NFS
共享服务时,应该
先启动
rpcbind
,再启动
nfs
。
[root@localhost ~]#
yum -y install nfs-utils rpcbind
[root@localhost ~]#
systemctl enable nfs
[root@localhost ~]#
systemctl enable rpcbind
如果已经安装了
nfs-utils
软件包,则客户机也可以使用
showmount
查看
NFS
服务器
端共享了哪些目录,查询格式为
“showmount -e
服务器地址
”
。
[root@localhost ~]#
showmount -e 192.168.7.250
Export list for 192.168.7.250:
/opt/wwwroot 192.168.7.0/24
/var/ftp/pub 192.168.4.110,192.168.4.11
手动挂载 NFS 共享目录
以
root
用户身份执行
mount
操作,将
NFS
服务器共享的
/opt/wwwroot
目录挂载到本
地目录
/var/www/html
。与挂载本地文件系统不同的是,设备位置处应指出服务器地址。
[root@localhost ~]#
mount 192.168.7.250:/opt/wwwroot /var/www/html
[root@localhost ~]#
tail -1 /etc/mtab
//
确认挂载结果
192.168.7.250:/opt/wwwroot
/var/www/html
nfs4
rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=6
00,retrans=2,sec=sys,clientaddr=192.168.7.21,local_lock=none,addr=192.168.7.250 0 0
[root@localhost ~]#
vim /var/www/html/index.html
//
在客户机创建测试文件
Real Web Server Document
完成挂载以后,访问客户机的
/var/www/html
文件夹,实际上就相当于访问
NFS
服务器
中的
/opt/wwwroot
文件夹,其中的网络映射过程对于用户程序来说是透明的。例如,上述
操作中创建的
index.html
测试文件,会立刻出现在服务器的
/opt/wwwroot/
目录下。
. fstab 自动挂载设置
修改
/etc/fstab
配置文件,加入
NFS
共享目录的挂载设置。注意将文件系统类型设为
nfs
,挂载参数建议添加
_netdev
(设备需要网络);若添加
soft
、
intr
参数可以实现软挂载,
允许在网络中断时放弃挂载。这样客户机就可以在每次开机后自动挂载
NFS
共享资源了。
[root@localhost ~]#
vi /etc/fstab
…… //
省略部分信息
192.168.7.250
:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0
强制卸载 NFS
NFS
客户端与服务器端的耦合度是非常高的,如果客户端正在挂载使用,服务器端
NFS
服务突然间停掉了,那么在客户端就会出现执行
df -h
命令卡死的现象。这个时候使用
umount
命令是无法直接卸载的,需要加上
-lf
才能卸载。
当出现卡死现象时,要重新开一个终端,执行
cat /etc/rc.local
命令,查看挂载点。
然后使用
umount
命令卸载,其中
-l
表示解除正在繁忙的文件系统,
-f
表示强制
[root@localhost ~]# umount /mnt
umount. nfs: /mnt : device is busy
[root@localhost ~]# umount -lf /mnt
[root@localhost ~]# umount /mnt
umount. nfs: /mnt : device is busy
[root@localhost ~]# umount -lf /mnt