1. 程式人生 > >鳥哥的Linux私房菜讀書筆記--YUM線上升級機制

鳥哥的Linux私房菜讀書筆記--YUM線上升級機制

yum是透過分析rpm的標頭資料後,根據各軟體的相關性製作出屬性相依時的解決方案,然後可以自動處理軟體的相依屬性問題,以解決軟體安裝、移除、升級問題。由於 distribution 必須要先釋出軟體,然後將軟體放置於 yum 伺服器上面,以提供客戶端來要求安裝與升級之用的。 因此我們想要使用 yum 的功能時,必須要先找到適合的 yum server 才行啊!而每個 yum server 可能都會提供許多不同的軟體功能,那就是我們之前談到的『軟體庫』啦!因此,你必須要前往 yum server 查詢到相關的軟體庫網址後,再繼續處理後續的設定事宜。

1、利用yum進行查詢、安裝、升級、移除

<1>查詢

[[email protected] ~]# yum [option] [查詢工作專案] [相關引數]
選項與引數:
[option]:主要的選項,包括有:
 -y :當 yum 要等待使用者輸入時,這個選項可以自動提供 yes 的響應;
 --installroot=/some/path :將該軟體安裝在 /some/path 而不使用預設路徑
[查詢工作專案] [相關引數]:這方面的引數有:
 search :搜尋某個軟體名稱或者是描述 (description) 的重要關鍵字;
 list :列出目前 yum 所管理的所有的軟體名稱與版本,有點類似 rpm -qa;
 info :同上,不過有點類似 rpm -qai 的執行結果;
 provides:從檔案去搜尋軟體!類似 rpm -qf 的功能!
範例四:列出目前伺服器上可供本機進行升級的軟體有哪些?
[
[email protected]
 ~]# 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 這個檔案的軟體有哪些 [[email protected]
 ~]# 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 這個程式!

<2>安裝/升級

[[email protected] ~]# yum [option] [安裝與升級的工作專案] [相關引數]
選項與引數:
 install :後面接要安裝的軟體!
 update :後面接要升級的軟體,若要整個系統都升級,就直接 update 即可
範例一:將前一個練習找到的未安裝的 pam-devel 安裝起來
[[email protected] ~]# yum install pam-devel

<3>移除

[[email protected] ~]# yum remove 軟體名

2、yum的配置檔案

[[email protected] yum.repos.d]$ vi 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=:就是數字簽名的公鑰檔案所在位置!使用預設值即可

範例一:列出目前 yum server 所使用的軟體庫有哪些?
[[email protected] ~]# yum repolist all

<1>修改軟體庫產生的問題與解決方法

由於是修改系統預設的配置檔案,我們應該在/et/yum.repos.d/下建立新的副檔名為.repo的檔案,因為我們使用的是指定的映像站臺,而不是其他軟體開發商提供的軟體庫。因此才修改預設配置檔案,由於使用的軟體庫有新舊之分,yum會下載軟體庫的清單到本機的/var/cache/yum裡面,我們修改了網址卻沒有修改軟體庫名稱,可能導致本機列表與yum伺服器列表不同步,此時就會出現無法更新的問題。所以需要清除本機上的舊資料。

[[email protected] ~]# yum clean [packages|headers|all] 
選項與引數:
packages:將已下載的軟體檔案刪除
headers :將下載的軟體檔案頭刪除
all :將所有軟體庫資料都刪除!
範例一:刪除已下載過的所有軟體庫的相關資料 (含軟體本身與列表)
[[email protected] ~]# yum clean all

3、yum的軟體群組功能

[[email protected] ~]# yum [群組功能] [軟體群組]
選項與引數:
 grouplist :列出所有可使用的『軟體群組組』,例如 Development Tools 之類的;
 groupinfo :後面接 group_name,則可瞭解該 group 內含的所有軟體名;
 groupinstall:這個好用!可以安裝一整組的軟體群組,相當的不錯用!
 groupremove :移除某個軟體群組;
[[email protected] ~]# yum groupinfo "Scientific Support"    #查詢該群組內含軟體名

如果想要讓 groupinstall 預設安裝好所有的 optional 軟體呢?那就得要修改配置檔案!更改選groupinstall 選擇的軟體專案即可!

[[email protected] ~]# vim /etc/yum.conf
.....(前面省略).....
distroverpkg=centos-release # 找到這一行,底下新增一行!
group_package_types=default, mandatory, optional
[[email protected] ~]# yum groupinstall "Scientific Support"

5、全系統自動升級

透過『 yum -y update 』來自動升級,那個 -y 很重要,因為可以自動回答 yes 來開始下載與安裝! 然後再透過 crontab 的功能來處理即可!你可以這樣做的:

[email protected] ~]# echo '10 1 * * * root /usr/bin/yum -y --enablerepo=epel update' > 
/etc/cron.d/yumupdate
[[email protected] ~]# vim /etc/crontab

從此你的系統就會自動升級啦,此外,你還是得要分析登入檔與收集 root 的信件的, 因為如果升級的是核心軟體 (kernel),那麼你還是得要重新啟動才會讓安裝的軟體順利運作的! 所以還是得分析登入檔,若有新核心安裝,就重新啟動,否則就讓系統自動維持在最新較安全的環境

6、管理的選擇: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 來安裝,輕鬆又愜意!

7、基礎服務管理:以Apache為例

一般來說, 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. 先檢查一下有哪些軟體沒有安裝或已安裝~這個不太需要進行~單純是鳥哥比較龜毛要先檢視看而已!
[[email protected] ~]# 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. 安裝所需要的軟體!
[[email protected] ~]# yum install httpd php mariadb-server php-mysql
# 當然,大前提是你的網路沒問題!這樣就可以直接線上安裝或升級!
# 2. 3. 啟動與開機啟動,這兩個步驟要記得一定得進行!
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl start httpd
[[email protected] ~]# systemctl enable httpd
[[email protected] ~]# 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. 防火牆
[[email protected] ~]# firewall-cmd --add-service="http"
[[email protected] ~]# firewall-cmd --permanent --add-service="http"
[[email protected] ~]# 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 囉!就是這麼簡單