这个 yum 是透过分析 RPM 的标头资料后, 根据 各软件的相关性制作出属性相依时的解决方案,然后可以自动处理软件的相依属性问题,以解决软件 安装或移除与升级的问题。

利用 yum 进行查询、安装、升级与移除功能

  • 查询功能:yum [list|info|search|provides|whatprovides] 参数

如果想要查询利用 yum 来查询原版 distribution 所提供的软件,或已知某软件的名称,想知道该软件的功能, 可以利用 yum 相关的参数为:

[root@study ~]# yum [option] [查询工作项目] [相关参数] 
选项与参数:
[option]:主要的选项,包括有:
    -y :当 yum 要等待用户输入时,这个选项可以自动提供 yes 的响应;
    --installroot=/some/path :将该软件安装在 /some/path 而不使用默认路径
[查询工作项目] [相关参数]:这方面的参数有:
    search :搜寻某个软件名称或者是描述 (description) 的重要关键字;
    list :列出目前 yum 所管理的所有的软件名称与版本,有点类似 rpm -qa;
    info :同上,不过有点类似 rpm -qai 的执行结果;
    provides:从文件去搜寻软件!类似 rpm -qf 的功能!

范例一:搜寻磁盘阵列 (raid) 相关的软件有哪些? 
[root@study ~]# yum search raid
Loaded plugins: fastestmirror, langpacks      # yum 系统自己找出最近的 yum server
Loading mirror speeds from cached hostfile    # 找出速度最快的那一部 yum server
 * base: ftp.twaren.net                       # 底下三个软件库,且来源为该服务器!
 * extras: ftp.twaren.net
 * updates: ftp.twaren.net
....(前面省略)....
dmraid-events-logwatch.x86_64 : dmraid logwatch-based email reporting
dmraid-events.x86_64 : dmevent_tool (Device-mapper event tool) and DSO
iprutils.x86_64 : Utilities for the IBM Power Linux RAID adapters
mdadm.x86_64 : The mdadm program controls Linux md devices (software RAID arrays)
....(后面省略)....
# 在冒号 (:) 左边的是软件名称,右边的则是在 RPM 内的 name 设定 (软件名)
# 瞧!上面的结果,这不就是与 RAID 有关的软件吗?如果想了解 mdadm 的软件内容呢?

范例二:找出 mdadm 这个软件的功能为何
[root@study ~]# yum info mdadm
Installed Packages <==这说明该软件是已经安装的了
Name        : mdadm      <==这个软件的名称
Arch        : x86_64     <==这个软件的编译架构
Version     : 3.3.2      <==此软件的版本
Release     : 2.el7      <==释出的版本
Size        : 920 k      <==此软件的文件总容量
Repo        : installed  <==软件库回报说已安装的
From repo   : anaconda
Summary     : The mdadm program controls Linux md devices (software RAID arrays)
URL         : http://www.kernel.org/pub/linux/utils/raid/mdadm/
License     : GPLv2+
Description : The mdadm program is used to create, manage, and monitor Linux MD (software
            : RAID) devices.  As such, it provides similar functionality to the raidtools
            : package.  However, mdadm is a single program, and it can perform
            : almost all functions without a configuration file, though a configuration
            : file can be used to help with some common tasks.
# 不要跟我说,上面说些啥?自己找字典翻一翻吧!拜托拜托!

范例三:列出 yum 服务器上面提供的所有软件名称
[root@study ~]# yum list
Installed Packages   <==已安装软件
GConf2.x86_64                           3.2.6-8.el7                    @anaconda
LibRaw.x86_64                           0.14.8-5.el7.20120830git98d925 @base
ModemManager.x86_64                     1.1.0-6.git20130913.el7        @anaconda
....(中間省略)....
Available Packages   <==还可以安装的其他软件
389-ds-base.x86_64                      1.3.3.1-20.el7_1               updates
389-ds-base-devel.x86_64                1.3.3.1-20.el7_1               updates
389-ds-base-libs.x86_64                 1.3.3.1-20.el7_1               updates
....(底下省略)....
# 上面提供的意义为:『 软件名称   版本   在那个软件库内 』

范例四:列出目前服务器上可供本机进行升级的软件有哪些?
[root@study ~]# yum list updates  <==一定要是 updates 喔!
Updated Packages
NetworkManager.x86_64          1:1.0.0-16.git20150121.b4ea599c.el7_1       updates
NetworkManager-adsl.x86_64     1:1.0.0-16.git20150121.b4ea599c.el7_1       updates
....(底下省略)....
# 上面就列出在那个软件库内可以提供升级的软件与版本!

范例五:列出提供passwd这个文件的软件有哪些
[root@study ~]# yum provides passwd
passwd-0.79-4.el7.x86_64 : An utility for setting or changing passwords using PAM
Repo        : base

passwd-0.79-4.el7.x86_64 : An utility for setting or changing passwords using PAM
Repo        : @anaconda
# 找到啦!就是上面的这个软件提供了passwd这个程序

  • 安装/升级功能:yum [install|update] 软件

既然可以查询,那么安装与升级呢?很简单啦!就利用 install 与 update 这两项工作来处理即可喔!

[root@study ~]# yum [option] [安装与升级的工作项目] [相关参数]
选项与参数:
    install :后面接要安装的软件!
    update :后面接要升级的软件,若要整个系统都升级,就直接 update 即可

范例一:将前一个练习找到的未安装的 pam-devel 安装起来
[root@study ~]# yum install pam-devel
Loaded plugins: fastestmirror, langpacks    # 首先的 5 行在找出最快的 yum server
Loading mirror speeds from cached hostfile
 * base: ftp.twaren.net
 * extras: ftp.twaren.net
 * updates: ftp.twaren.net
Resolving Dependencies                      # 接下来先处理『属性相依』的软件问题
--> Running transaction check
---> Package pam-devel.x86_64 0:1.1.8-12.el7_1.1 will be installed
--> Processing Dependency: pam(x86-64) = 1.1.8-12.el7_1.1 for package: pam-devel-
       1.1.8-12.el7_1.1.x86_64
--> Running transaction check
---> Package pam.x86_64 0:1.1.8-12.el7 will be updated 
---> Package pam.x86_64 0:1.1.8-12.el7_1.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved

# 由上面的检查发现到 pam 这个软件也需要同步升级,这样才能够安装新版 pam-devel 喔!
# 至于底下则是一个总结的表格显示!
==========================================================================================
 Package             Arch             Version                     Repository         Size
==========================================================================================
Installing:
 pam-devel           x86_64           1.1.8-12.el7_1.1            updates           183 k
Updating for dependencies:
 pam                 x86_64           1.1.8-12.el7_1.1            updates           714 k

Transaction Summary
==========================================================================================
Install  1 Package                          # 要安装的是一个软件
Upgrade             ( 1 Dependent package)  # 因为相依属性问题,需要额外加装一个软件!

Total size: 897 k
Total download size: 183 k                  # 总共需要下载的容量!
Is this ok [y/d/N]: y   # 你得要自己决定是否要下载与安装!当然是 y 啊!
Downloading packages:                       # 开始下载啰!
warning: /var/cache/yum/x86_64/7/updates/packages/pam-devel-1.1.8-12.el7_1.1.x86_64.rpm:
         Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for pam-devel-1.1.8-12.el7_1.1.x86_64.rpm is not installed
pam-devel-1.1.8-12.el7_1.1.x86_64.rpm                              | 183 kB  00:00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-1.1503.el7.centos.2.8.x86_64 (@anaconda)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Is this ok [y/N]: y  # 只有在第一次安裝才會出現這個項目『確定要安裝數位簽章』才能繼續!
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Updating   : pam-1.1.8-12.el7_1.1.x86_64                                            1/3
  Installing : pam-devel-1.1.8-12.el7_1.1.x86_64                                      2/3
  Cleanup    : pam-1.1.8-12.el7.x86_64                                                3/3
  Verifying  : pam-1.1.8-12.el7_1.1.x86_64                                            1/3
  Verifying  : pam-devel-1.1.8-12.el7_1.1.x86_64                                      2/3
  Verifying  : pam-1.1.8-12.el7.x86_64                                                3/3

Installed:
  pam-devel.x86_64 0:1.1.8-12.el7_1.1

Dependency Updated:
  pam.x86_64 0:1.1.8-12.el7_1.1

Complete!

  • 移除功能:yum [remove] 软件

那能不能用 yum 移除软件呢?将刚刚的软件移除看看,会出现啥状况啊?

[root@study ~]# yum remove pam-dev
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies <==同样的,先解决属性相依的问题
--> Running transaction check
---> Package pam-devel.x86_64 0:1.1.8-12.el7_1.1 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================================
 Package             Arch             Version                    Repository          Size
==========================================================================================
Removing:
 pam-devel           x86_64           1.1.8-12.el7_1.1           @updates           528 k

Transaction Summary
==========================================================================================
Remove  1 Package      # 还好!没有相依属性的问题,仅移除一个软件!

Installed size: 528 k
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : pam-devel-1.1.8-12.el7_1.1.x86_64                                      1/1
  Verifying  : pam-devel-1.1.8-12.el7_1.1.x86_64                                      1/1

Removed:
  pam-devel.x86_64 0:1.1.8-12.el7_1.1

Complete!

yum 的配置文件

CentOS 的映射站台最重要的特色就是那个『 repodata 』的目录!该目录就是 分析 RPM 软件后所产生的软件属性相依数据放置处!

配置文件

[root@study ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

上面的数据需 要注意的是:

  • [base]:代表软件库的名字!中括号一定要存在,里面的名称则可以随意取。但是不能有两个相同的软件库 名称, 否则 yum 会不晓得该到哪里去找软件库相关软件列表文件。
  • name:只是说明一下这个软件库的意义而已,重要性不高!
  • mirrorlist=:列出这个软件库可以使用的映射站台,如果不想使用,可以批注到这行;
  • baseurl=:这个最重要,因为后面接的就是软件库的实际网址! mirrorlist 是由 yum 程序自行去捉映像站 台, baseurl 则是指定固定的一个软件库网址!我们刚刚找到的网址放到这里来啦!
  • enable=1:就是让这个软件库被启动。如果不想启动可以使用 enable=0 喔!
  • gpgcheck=1:还记得 RPM 的数字签名吗?这就是指定是否需要查阅 RPM 文件内的数字签名!
  • gpgkey=:就是数字签名的公钥文件所在位置!使用默认值即可

修改的方式仅列出 base 这个软件库项目而已,其他的项目请您自行依照上述 的作法来处理即可!

[root@study ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/7/os/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates
baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/7/updates/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/7/extras/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# 默认情况下,软件仓库仅有这三个有启用!所以仅修改这三个软件库的 baseurl 而已喔!

接下来当然就是给它测试一下这些软件库是否正常的运作中啊!如何测试呢?再次使用

范例一:列出目前 yum server 所使用的软件库有哪些?
[root@study ~]# yum repolist all
repo id                              repo name                         status
C7.0.1406-base/x86_64                CentOS-7.0.1406 - Base            disabled
C7.0.1406-centosplus/x86_64          CentOS-7.0.1406 - CentOSPlus      disabled
C7.0.1406-extras/x86_64              CentOS-7.0.1406 - Extras          disabled
C7.0.1406-fasttrack/x86_64           CentOS-7.0.1406 - CentOSPlus      disabled
C7.0.1406-updates/x86_64             CentOS-7.0.1406 - Updates         disabled
base                                 CentOS-7 - Base                   enabled: 8,652
base-debuginfo/x86_64                CentOS-7 - Debuginfo              disabled
base-source/7                        CentOS-7 - Base Sources           disabled
centosplus/7/x86_64                  CentOS-7 - Plus                   disabled
centosplus-source/7                  CentOS-7 - Plus Sources           disabled
cr/7/x86_64                          CentOS-7 - cr                     disabled
extras                               CentOS-7 - Extras                 enabled:   181
extras-source/7                      CentOS-7 - Extras Sources         disabled
fasttrack/7/x86_64                   CentOS-7 - fasttrack              disabled
updates                              CentOS-7 - Updates                enabled: 1,302
updates-source/7                     CentOS-7 - Updates Sources        disabled
repolist: 10,135
# 上面最右边有写 enabled 才是有激活的!由于 /etc/yum.repos.d/ 
# 有多个配置文件,所以你会发现还有其他的软件库存在。

  • 修改软件库产生的问题与解决之道

由于我们是修改系统默认的配置文件,事实上,我们应该要在 /etc/yum.repos.d/ 底下新建一个文件, 该扩展名必须是 .repo 才行!但因为我们使用的是指定特定的映像站台,而不是其他软件开发商提供 的软件库, 因此才修改系统默认配置文件。但是可能由于使用的软件库版本有新旧之分,你得要知 道, yum 会先下载软件库的清单到本机的 /var/cache/yum 里面去!那我们修改了网址却没有修改软 件库名称 (中括号内的文字), 可能就会造成本机的列表与 yum 服务器的列表不同步,此时就会出 现无法更新的问题了!

很简单,就清除掉本机上面的旧数据即可!需要手动处理吗?不需要的, 透过 yum 的 clean 项目来处理即可!

[root@study ~]# yum clean [packages|headers|all]
选项与参数:
    packages:将已下载的软件文件删除
    headers :将下载的软件文件头删除
    all :将所有软件库数据都删除!

范例一:删除已下载过的所有软件库的相关数据 (含软件本身与列表) 
[root@study ~]# yum clean all

yum 的软件群组功能

透过 yum 来在线安装一个软件是非常的简单,但是,如果要安装的是一个大型项目呢? 举例来说, 鸟哥使用预设安装的方式安装了测试机,这部主机就只有 GNOME 这个窗口管理员, 那我如果想 要安装 KDE 呢?难道需要重新安装?当然不需要,透过 yum 的软件群组功能即可!来看看指令先:

[root@study ~]# yum [群组功能] [软件群组]
选项与参数:
    grouplist :列出所有可使用的『软件群组组』,例如 Development Tools 之类的;
    groupinfo :后面接 group_name,则可了解该 group 内含的所有软件名;
    groupinstall:这个好用!可以安装一整组的软件群组,相当的不错用!
    groupremove :移除某个软件群组;

范例一:查阅目前软件库与本机上面的可用与安装过的软件群组有哪些?
[root@study ~]# yum grouplist
Installed environment groups:            # 已经安装的系统环境软件群组
   Development and Creative Workstation
Available environment groups:            # 还可以安装的系统环境软件群组
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
Installed groups:                        # 已经安装的软件群组!
   Development Tools
Available Groups:                        # 还能额外安装的软件群组!
   Compatibility Libraries
   Console Internet Tools
   Graphical Administration Tools
   Legacy UNIX Compatibility
   Scientific Support
   Security Tools
   Smart Card Support
   System Administration Tools
   System Management
Done

在『Available Groups』底下应该会看到一个 『Scientific Support』的软件群组,想知道那是啥吗?就这样做:

[root@study ~]# yum groupinfo "Scientific Support"
Group: Scientific Support
 Group-Id: scientific
 Description: Tools for mathematical and scientific computations, and parallel computing.
 Optional Packages:
   atlas
   fftw
   fftw-devel
   fftw-static
   gnuplot
   gsl-devel
   lapack
....(以下省略)....

你会发现那就是一个科学运算、平行运算会用到的各种工具就是了!而下方则列出许多应该会在该群 组安装时被下载与安装的软件们! 让我们直接来安装看看!

[root@study ~]# yum groupinstall "Scientific Support"

正常情况下系统是会帮你安装好各项软件的。只是伤脑筋的是,刚刚好 Scientific Support 里面的软 件都是『可选择的』!而不是『主要的 (mandatory)』, 因此预设情况下,上面这些软件通通不会帮 你安装!!如果你想要安装上述的软件,可以使用 yum install atlas fftw .. 一个一个写进去安装~ 如 果想要让 groupinstall 预设安装好所有的 optional 软件呢?那就得要修改配置文件!更改选 groupinstall 选择的软件项目即可!如下所示:

[root@study ~]# vim /etc/yum.conf
.....(前面省略).....
distroverpkg=centos-release # 找到这一行,底下新增一行!
group_package_types=default, mandatory, optional
.....(底下省略).....

[root@study ~]# yum groupinstall "Scientific Support"

EPEL/ELRepo 外挂软件以及自定义配置文件

我的系统上面想要透过上述的 CentOS 7 的 EPEL 计划来安装 netcdf 以及 R 这两套软件,该如何处理?

  • 首先,你的系统应该要针对 epel 进行 yum 的配置文件处理,处理方式如下:
[root@study ~]# vim /etc/yum.repos.d/epel.repo
[epel]
name = epel packages
baseurl = https://dl.fedoraproject.org/pub/epel/7/x86_64/
gpgcheck = 0
enabled = 0

故意不要启动这个软件仓库,只是未来有需要的时候才进行安装,预设不要去找这个软件库!

  • 接下来使用这个软件库来进行安装 netcdf 与 R 的行为喔!
[root@study ~]# yum --enablerepo=epel install netcdf R

这样就可以安装起来了!未来你没有加上 --enablerepo=epel 时,这个 EPEL 的软件并不会更新喔!


  • 使用本机的原版光盘

万一你的主机并没有网络,但是你却有很多软件安装的需求~假设你的系统也都还没有任何升级的动 作过, 这个时候我能不能用本机的光盘来作为主要的软件来源呢?答案当然是可以啊!那要怎么做 呢? 很简单,将你的光盘挂载到某个目录,我们这里还是继续假设在 /mnt 好了,然后设定如下的 yum 配置文件:

[root@study ~]# vim /etc/yum.repos.d/cdrom.repo
[mycdrom]
name = mycdrom
baseurl = file:///mnt
gpgcheck = 0
enabled = 0

[root@study ~]# yum --enablerepo=mycdrom install software_name

全系统自动升级

透过『 yum -y update 』来自动升级,那个 -y 很重要,因为可以自动回答 yes 来开始 下载与安装! 然后再透过 crontab 的功能来处理即可!v

管理的抉择:RPM 还是 Tarball

这一直是个有趣的问题:『如果我要升级的话,或者是全新安装一个新的软件, 那么该选择 RPM 还 是 Tarball 来安装呢?』,事实上考虑的因素很多,

  1. 优先选择原厂的 RPM 功能:

由于原厂释出的软件通常具有一段时间的维护期,举例来说, RHEL 与 CentOS 每一个版本至少提供五年 以上的更新期限。

  1. 选择软件官网释出的 RPM 或者是提供的软件库网址:

不过,原厂并不会包山包海,因此某些特殊软件你的原版厂商并不会提供的!举例来说 CentOS 就没有提 供 NTFS 的相关模块。不过,原厂并不会包山包海,因此某些特殊软件你的原版厂商并不会提供的!举例来说 CentOS 就没有提 供 NTFS 的相关模块。此时你可以自行到官网去查阅,看看有没有提供相对到你的系统的 RPM 文件, 如 果有提供软件库网址,那就更好啦!可以修改 yum 配置文件来加入该软件库,就能够自动安装与升级该软 件!

  1. 利用 Tarball 安装特殊软件:

某些特殊用途的软件并不会特别帮你制作 RPM 文件的,

  1. 用 Tarball 测试新版软件:

所以说,RPM 与 Tarball 各有其优缺点,不过,如果有 RPM 的话,那么优先权还是在于 RPM 安 装上面,毕竟管理上比较便利,但是如果软件的架构差异性太大, 或者是无法解决相依属性的问题, 那么与其花大把的时间与精力在解决属性相依的问题上,还不如直接以 tarball 来安装。

基础服务管理:以 Apache 为例

  1. 安装: yum install (你的软件)
  2. 启动: systemctl start (你的软件)
  3. 开机启动: systemctl enable (你的软件)
  4. 防火墙: firewall-cmd --add-service="(你的服务)"; firewall-cmd --permanent --add-service="(你的服务)"
  5. 测试: 用软件去查阅你的服务正常与否~
# 0. 先检查一下有哪些软件没有安装或已安装~这个不太需要进行~单纯是鸟哥比较龟毛要先查看看而已!
[root@study ~]# rpm -q httpd php mariadb-server php-mysql
httpd-2.4.6-31.el7.centos.1.x86_64 # 只有这个安装好了,底下三个都没装!
package php is not installed
package mariadb-server is not installed
package php-mysql is not installed

# 1. 安装所需要的软件!
[root@study ~]# yum install httpd php mariadb-server php-mysql
# 当然,大前提是你的网络没问题!这样就可以直接在线安装或升级!
# 2. 3. 启动与开机启动,这两个步骤要记得一定得进行!
[root@study ~]# systemctl daemon-reload
[root@study ~]# systemctl start httpd
[root@study ~]# systemctl enable httpd
[root@study ~]# systemctl status httpd 
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running) since Wed 2015-09-09 16:52:04 CST; 9s ago
 Main PID: 8837 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─8837 /usr/sbin/httpd -DFOREGROUND

# 4. 防火墙
[root@study ~]# firewall-cmd --add-service="http"
[root@study ~]# firewall-cmd --permanent  --add-service="http"
[root@study ~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client ftp http https ssh   # 这个是否有启动才是重点!
  ports: 222/tcp 555/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="192.168.1.0/24" accept