## 22.3 YUM 線上升級機制
我們在本章一開始的地方談到過 [yum](../Text/index.html#intro_solution) 這玩意兒,這個 yum 是通過分析 RPM 的標頭數據后, 根據各軟件的相關性制作出屬性相依時的解決方案,然后可以自動處理軟件的相依屬性問題,以解決軟件安裝或移除與升級的問題。 詳細的 yum 服務器與用戶端之間的溝通,可以再回到前面的部分查閱一下[圖 22.1.1](../Text/index.html#fig22.1.1) 的說明。
由于 distribution 必須要先釋出軟件,然后將軟件放置于 yum 服務器上面,以提供用戶端來要求安裝與升級之用的。 因此我們想要使用 yum 的功能時,必須要先找到適合的 yum server 才行啊!而每個 yum server 可能都會提供許多不同的軟件功能,那就是我們之前談到的“軟件庫”啦!因此,你必須要前往 yum server 查詢到相關的軟件庫網址后,再繼續處理后續的設置事宜。
事實上 CentOS 在釋出軟件時已經制作出多部映射站臺 (mirror site) 提供全世界的軟件更新之用。 所以,理論上我們不需要處理任何設置值,只要能夠連上 Internet ,就可以使用 yum 啰!下面就讓我們來玩玩看吧!
### 22.3.1 利用 yum 進行查詢、安裝、升級與移除功能
yum 的使用真是非常簡單,就是通過 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 如何用在查詢上面了吧?那么實際來應用一下:
例題:利用 yum 的功能,找出以 pam 為開頭的軟件名稱有哪些?而其中尚未安裝的又有哪些?答:可以通過如下的方法來查詢:
```
[root@study ~]# yum list pam*
Installed Packages
pam.x86_64 1.1.8-12.el7 @anaconda
pam_krb5.x86_64 2.4.8-4.el7 @base
Available Packages <==下面則是“可升級”的或“未安裝”的
pam.i686 1.1.8-12.el7_1.1 updates
pam.x86_64 1.1.8-12.el7_1.1 updates
pam-devel.i686 1.1.8-12.el7_1.1 updates
pam-devel.x86_64 1.1.8-12.el7_1.1 updates
pam_krb5.i686 2.4.8-4.el7 base
pam_pkcs11.i686 0.6.2-18.el7 base
pam_pkcs11.x86_64 0.6.2-18.el7 base
```
如上所示,所以可升級者有 pam 這兩個軟件,完全沒有安裝的則是 pam-devel 等其他幾個軟件啰!
* 安裝/升級功能: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!
```
有沒有很高興啊!你不必知道軟件在哪里,你不必手動下載軟件,你也不必拿出原版光盤出來 mount 之后查詢再安裝!全部不需要,只要有了 yum 這個家伙,你的安裝、升級再也不是什么難事! 而且還能主動的進行軟件的屬性相依處理流程,如上所示,一口氣幫我們處理好了所有事情! 是不是很過癮啊!而且整個動作完全免費!夠酷吧!
* 移除功能:yum [remove] 軟件
那能不能用 yum 移除軟件呢?將剛剛的軟件移除看看,會出現啥狀況啊?
```
[root@study ~]# yum remove pam-devel
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!
```
連移除也這么簡單!看來,似乎不需要 rpm 這個指令也能夠快樂的安裝所有的軟件了! 雖然是如此,但是 yum 畢竟是架構在 rpm 上面所發展起來的,所以,鳥哥認為你還是得需要了解 rpm 才行!不要學了 yum 之后就將 rpm 的功能忘記了呢!切記切記!
### 22.3.2 yum 的配置文件
雖然 yum 是你的主機能夠連線上 Internet 就可以直接使用的,不過,由于 CentOS 的映射站臺可能會選錯, 舉例來說,我們在臺灣,但是 CentOS 的映射站臺卻選擇到了大陸北京或者是日本去,有沒有可能發生啊! 有啊!鳥哥教學方面就常常發生這樣的問題,要知道,我們連線到大陸或日本的速度是非常慢的呢!那怎辦? 當然就是手動的修改一下 yum 的配置文件就好啰!
在臺灣,CentOS 的映射站臺主要有高速網絡中心與義守大學,鳥哥近來比較偏好高速網絡中心, 似乎更新的速度比較快,而且連接臺灣學術網絡也非常快速哩!因此,鳥哥下面建議臺灣的朋友使用高速網絡中心的 ftp 主機資源來作為 yum 服務器來源喔!不過因為鳥哥也在崑大服務,崑大目前也加入了 CentOS 的映射站, 如果在昆山或臺南地區,也能夠選擇崑大的 FTP 喔!目前高速網絡中心與崑大對于 CentOS 所提供的相關網址如下:
* [http://ftp.twaren.net/Linux/CentOS/7/](http://ftp.twaren.net/Linux/CentOS/7/)
* [http://ftp.ksu.edu.tw/FTP/CentOS/7/](http://ftp.ksu.edu.tw/FTP/CentOS/7/)
如果你連接到上述的網址后,就會發現里面有一堆鏈接,那些鏈接就是這個 yum 服務器所提供的軟件庫了! 所以高速網絡中心也提供了 centosplus, cloud, extras, fasttrack, os, updates 等軟件庫,最好認的軟件庫就是 os (系統默認的軟件) 與 updates (軟件升級版本) 啰!由于鳥哥在我的測試用主機是利用 x86_64 的版本, 因此那個 os 再點進去就會得到如下的可提供安裝的網址:
* [http://ftp.ksu.edu.tw/FTP/CentOS/7/os/x86_64/](http://ftp.ksu.edu.tw/FTP/CentOS/7/os/x86_64/)
為什么在上述的網址內呢?有什么特色!最重要的特色就是那個“ repodata ”的目錄!該目錄就是分析 RPM 軟件后所產生的軟件屬性相依數據放置處!因此,當你要找軟件庫所在網址時, 最重要的就是該網址下面一定要有個名為 repodata 的目錄存在!那就是軟件庫的網址了! 其他的軟件庫正確網址,就請各位看倌自行尋找一下喔!現在讓我們修改配置文件吧!
```
[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 這個軟件庫內容而已,其他的軟件庫內容請自行查閱啰!上面的數據需要注意的是:
* [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 即可啊!
```
范例一:列出目前 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
```
### 22.3.3 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
```
你會發現系統上面的軟件大多是群組的方式一口氣來提供安裝的!還記全新安裝 CentOS 時, 不是可以選擇所需要的軟件嗎?而那些軟件不是利用 GNOME/KDE/X Window ... 之類的名稱存在嗎? 其實那就是軟件群組啰!如果你執行上述的指令后,在“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
mpich
....(以下省略)....
```
你會發現那就是一個科學運算、平行運算會用到的各種工具就是了!而下方則列出許多應該會在該群組安裝時被下載與安裝的軟件們! 讓我們直接來安裝看看!
```
[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"
```
你就會發現系統開始進行了一大堆軟件的安裝!那就是啦!這個 group 功能真是非常的方便呢!這個功能請一定要記下來,對你未來安裝軟件是非常有幫助的喔! ^_^
### 22.3.4 EPEL/ELRepo 外掛軟件以及自訂配置文件
鳥哥因為工作的關系,在 Linux 上面經常需要安裝第三方協力軟件,這包括 NetCDF 以及 MPICH 等等的軟件。現在由于平行處理的函數庫需求大增, 所以 MPICH 已經納入默認的 CentOS 7 軟件庫中。但是 NetCDF 這個軟件就沒有包含在里頭了~同時,Linux 上面還有個很棒的統計軟件,這個軟件名稱為“ R ”! 默認也是不在 CentOS 的軟件庫內~唉~那怎辦?要使用前一章介紹的 Tarball 去編譯與安裝嗎?這倒不需要~因為有很多我們好棒的網友提供預先編譯版本了!
在 Fedora 基金會里面發展了一個外加軟件計劃 (Extra Packages for Enterprise Linux, EPEL),這個計劃主要是針對 Red Hat Enterprise Linux 的版本來開發的, 剛剛好 CentOS 也是針對 RHEL 的版本來處理的嘛!所以也就能夠支持該軟件庫的相關軟件相依環境了。這個計劃的主網站在下面網頁:
* [https://fedoraproject.org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL)
而我們的 CentOS 7 主要可以使用的軟件倉庫網址為:
* [https://dl.fedoraproject.org/pub/epel/7/x86_64/](https://dl.fedoraproject.org/pub/epel/7/x86_64/)
除了上述的 Fedora 計劃所提供的額外軟件庫之外,其實社群里面也有朋友針對 CentOS 與 EPEL 的不足而提供的許多軟件倉庫喔! 下面鳥哥是列出當初鳥哥為了要處理 PCI passthrough 虛擬化而使用到的 ELRepo 這個軟件倉庫,若有其他的需求,你就得要自己搜尋了! 這個 ELRepo 軟件倉庫與提供給 CentOS 7.x 的網址如下:
* [http://elrepo.org/tiki/tiki-index.php](http://elrepo.org/tiki/tiki-index.php)
* [http://elrepo.org/linux/elrepo/el7/x86_64](http://elrepo.org/linux/elrepo/el7/x86_64)
* [http://elrepo.org/linux/kernel/el7/x86_64](http://elrepo.org/linux/kernel/el7/x86_64)
這個 ELRepo 的軟件庫跟其他軟件庫比較不同的地方在于這個軟件庫提供的數據大多是與核心、核心模塊與虛擬化相關軟件有關,例如 NVidia 的驅動程序也在里面咧! 尤其提供了最新的核心 (取名為 kernel-ml 的軟件名稱,其實就是最新的 Linux 核心啊!),如果你的系統像鳥哥的某些發展服務器一樣,那就有可能會使用到這個軟件庫喔!
好了!根據上面的說明,來玩一玩下面這個仿真案例看看:
問:我的系統上面想要通過上述的 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
```
這個設置功能在你沒有網絡但是卻需要解決很多軟件相依性的狀況時,相當好用啊!
### 22.3.5 全系統自動升級
我們可以手動選擇是否需要升級,那能不能讓系統自動升級,讓我們的系統隨時保持在最新的狀態呢? 當然可以啊!通過“ yum -y update ”來自動升級,那個 -y 很重要,因為可以自動回答 yes 來開始下載與安裝! 然后再通過 crontab 的功能來處理即可!假設我每天在臺灣時間 3:00am 網絡帶寬比較輕松的時候進行升級, 你可以這樣做的:
```
[root@study ~]# echo '10 1 * * * root /usr/bin/yum -y --enablerepo=epel update' > /etc/cron.d/yumupdate
[root@study ~]# vim /etc/crontab
```
從此你的系統就會自動升級啦!很棒吧!此外,你還是得要分析登錄文件與收集 root 的信件的, 因為如果升級的是核心軟件 (kernel),那么你還是得要重新開機才會讓安裝的軟件順利運行的! 所以還是得分析登錄文件,若有新核心安裝,就重新開機,否則就讓系統自動維持在最新較安全的環境吧! 真是輕松愉快的管理啊!
### 22.3.6 管理的抉擇:RPM 還是 Tarball
這一直是個有趣的問題:“如果我要升級的話,或者是全新安裝一個新的軟件, 那么該選擇 RPM 還是 Tarball 來安裝呢?”,事實上考慮的因素很多,不過鳥哥通常是這樣建議的:
1. 優先選擇原廠的 RPM 功能:
由于原廠釋出的軟件通常具有一段時間的維護期,舉例來說, RHEL 與 CentOS 每一個版本至少提供五年以上的更新期限。這對于我們的系統安全性來說,實在是非常好的選項! 何解?既然 yum 可以自動升級,加上原廠會持續維護軟件更新,那么我們的系統就能夠自己保持在軟件最新的狀態, 對于資安來說當然會比較好一些的! 此外,由于 RPM 與 yum 具有容易安裝/移除/升級等特點,且還提供查詢與驗證的功能,安裝時更有數碼簽章的保護, 讓你的軟件管理變的更輕松自在!因此,當然首選就是利用 RPM 來處理啦!
2. 選擇軟件官網釋出的 RPM 或者是提供的軟件庫網址:
不過,原廠并不會包山包海,因此某些特殊軟件你的原版廠商并不會提供的!舉例來說 CentOS 就沒有提供 NTFS 的相關模塊。此時你可以自行到官網去查閱,看看有沒有提供相對到你的系統的 RPM 文件, 如果有提供軟件庫網址,那就更好啦!可以修改 yum 配置文件來加入該軟件庫,就能夠自動安裝與升級該軟件! 你說方不方便啊!
3. 利用 Tarball 安裝特殊軟件:
某些特殊用途的軟件并不會特別幫你制作 RPM 文件的,此時建議你也不要妄想自行制作 SRPM 來轉成 RPM 啦! 因為你只有區區一部主機而已,若是你要管理相同的 100 部主機,那么將源代碼轉制作成 RPM 就有價值! 單機版的特殊軟件,例如學術網絡常會用到的 MPICH/PVM 等平行運算函數庫,這種軟件建議使用 tarball 來安裝即可, 不需要特別去搜尋 RPM 啰!
4. 用 Tarball 測試新版軟件:
某些時刻你可能需要使用到新版的某個軟件,但是原版廠商僅提供舊版軟件,舉例來說,我們的 CentOS 主要是定位于企業版,因此很多軟件的要求是“穩”而不是“新”,但你就是需要新軟件啊! 然后又擔心新軟件裝好后產生問題,回不到舊軟件,那就慘了!此時你可以用 tarball 安裝新軟件到 /usr/local 下面, 那么該軟件就能夠同時安裝兩個版本在系統上面了!而且大多數軟件安裝數種版本時還不會互相干擾的! 嘿嘿!用來作為測試新軟件是很不錯的呦!只是你就得要知道你使用的指令是新版軟件還是舊版軟件了!
所以說,RPM 與 Tarball 各有其優缺點,不過,如果有 RPM 的話,那么優先權還是在于 RPM 安裝上面,畢竟管理上比較便利,但是如果軟件的架構差異性太大, 或者是無法解決相依屬性的問題,那么與其花大把的時間與精力在解決屬性相依的問題上,還不如直接以 tarball 來安裝,輕松又愜意!
### 22.3.7 基礎服務管理:以 Apache 為例
我們在 17 章談到 systemd 的服務管理,那個時候僅使用 vsftpd 這個比較簡單的服務來做個說明,那是因為還沒有談到 yum 這個東東的緣故。 現在,我們已經處理好了網絡問題 (20 章的內容),這個 yum 也能夠順利的使用!那么有沒有其他的服務可以拿來做個測試呢?有的,我們就拿網站服務器來說明吧!
一般來說, WWW 網站服務器需要的有 WWW 服務器軟件 + 網頁程序語言 + 數據庫系統 + 程序語言與數據庫的鏈接軟件等等,在 CentOS 上面, 我們需要的軟件就有“ httpd + php + mariadb-server + php-mysql ”這些軟件。不過我們默認僅要啟用 httpd 而已,因此等一下雖然上面的軟件都要安裝, 不過僅有 httpd 默認要啟動而已喔!
另外,在默認的情況下,你無須修改服務的配置文件,都通過系統默認值來處理你的服務即可!那么有個江湖口訣你可以將它背下來~ 讓你在處理服務的時候就不會掉漆了~
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
```
在最后的測試中,進入圖形界面,打開你的瀏覽器,在網址列輸入“ http://localhost ”就會出現如下的畫面! 那就代表成功了!你的 Linux 已經是 Web server 啰!就是這么簡單!
圖22.3.1、服務創建的第五步驟,測試一下有沒有成功!
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀