这个 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 来安装呢?』,事实上考虑的因素很多,
- 优先选择原厂的 RPM 功能:
由于原厂释出的软件通常具有一段时间的维护期,举例来说, RHEL 与 CentOS 每一个版本至少提供五年 以上的更新期限。
- 选择软件官网释出的 RPM 或者是提供的软件库网址:
不过,原厂并不会包山包海,因此某些特殊软件你的原版厂商并不会提供的!举例来说 CentOS 就没有提 供 NTFS 的相关模块。不过,原厂并不会包山包海,因此某些特殊软件你的原版厂商并不会提供的!举例来说 CentOS 就没有提 供 NTFS 的相关模块。此时你可以自行到官网去查阅,看看有没有提供相对到你的系统的 RPM 文件, 如 果有提供软件库网址,那就更好啦!可以修改 yum 配置文件来加入该软件库,就能够自动安装与升级该软 件!
- 利用 Tarball 安装特殊软件:
某些特殊用途的软件并不会特别帮你制作 RPM 文件的,
- 用 Tarball 测试新版软件:
所以说,RPM 与 Tarball 各有其优缺点,不过,如果有 RPM 的话,那么优先权还是在于 RPM 安 装上面,毕竟管理上比较便利,但是如果软件的架构差异性太大, 或者是无法解决相依属性的问题, 那么与其花大把的时间与精力在解决属性相依的问题上,还不如直接以 tarball 来安装。
基础服务管理:以 Apache 为例
- 安装: yum install (你的软件)
- 启动: systemctl start (你的软件)
- 开机启动: systemctl enable (你的软件)
- 防火墙: firewall-cmd --add-service="(你的服务)"; firewall-cmd --permanent --add-service="(你的服务)"
- 测试: 用软件去查阅你的服务正常与否~
# 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