了解的说pk23-10有什么方法平刷?

Copyright & 1998 - 2018 Tencent. All Rights Reservedpk565/10平刷不加倍教程现在市场上什么项目最火!!_百度知道
pk565/10平刷不加倍教程现在市场上什么项目最火!!
pk565/10平刷不加倍教程现在市场上什么项目最火!!柚子还有另外一个很雅致的名字叫“文旦“。据传说,在清朝皇宫里,就有专人采集柚子的花,用来提炼香精制成美容的油脂,给妃子们化妆的时候使用。
我有更好的答案
输=入-玩 357966.n&shye&shyt
放分多的愉乐成就是这儿,
采纳率:50%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。搜狐视频娱乐播报
娱乐大视野
影展·影评
剧评·策划
视听·演出
what's hot
剧评·策划
影视 音乐 经纪公司:010-
sohuentpr@vip.sohu.com
稿件 图片 媒体合作:010-
newspaper@vip.sohu.com
新闻热线:010-游戏服务器
按数量购买
请选择游戏
请选择游戏
请选择游戏区
请选择游戏区
请选择游戏服
请选择游戏服
请选择阵营
请输入正确的QQ号码。
请选择面值
请选择面值
价格&0元9.8折特惠
请选择游戏面值。
请选择游戏名称
请选择面值
请选择面值
请选择充值类型
请选择充值类型
请输入正确的手机号码。
广东广州移动
价&格:0元新用户享受9.8折
请先输入手机号码
将在10分钟内回复您的问题
请输入QQ号码!
请输入微信号!
请输入有效的网址
可为您验证是否为5173官方网址或5173官方合作网址。
真客服QQ号后不带字母、下划线等其他符号,任何以邮箱为主显示的一定为假客服。
咨询/建议/投诉
数据读取中....
5173通行证专线:3
寄售交易专线:3
担保交易专线:3
帐号交易专线:3
点卡交易专线:3
手游交易专线:3
代练交易专线:3
人工服务:3 请按0
注意:以上电话只能接听,如接到以上电话号码来电均为诈骗
友情合作:
选择游戏:
您的5173帐号在另一地点登录,您已被迫下线。
为保障您的帐户资金安全,请立即修改登录密码如有疑问,请
提供您最近浏览的3种商品,对比信息
输入可疑网址,立马验证真假,防钓鱼。
如果您不喜欢新版,可点此返回到旧版。。
关注5173微信
自日后,低版本的浏览器或系统将无法进行登陆,请及时升级您的版本。鳥哥的 Linux 私房菜
底下尚未更新
第二十二章、軟體安裝 RPM, SRPM 與 YUM
最近更新日期:
雖然使用原始碼進行軟體編譯可以具有客製化的設定,但對於 Linux distribution 的發佈商來說,則有軟體管理不易的問題,
畢竟不是每個人都會進行原始碼編譯的。如果能夠將軟體預先在相同的硬體與作業系統上面編譯好才發佈的話,
不就能夠讓相同的 distribution 具有完全一致的軟體版本嗎?如果再加上簡易的安裝/移除/管理等機制的話,
對於軟體控管就會簡易的多。有這種東西嗎?有的,那就是 RPM 與 YUM 這兩個好用的咚咚。
既然這麼好用,我們當然不能錯過學習機會囉!趕緊來參詳參詳!
22.1 軟體管理員簡介
在前一章我們提到以原始碼的方式來安裝軟體,也就是利用廠商釋出的 Tarball
來進行軟體的安裝。不過,你應該很容易發現,那就是每次安裝軟體都需要偵測作業系統與環境、設定編譯參數、實際的編譯、
最後還要依據個人喜好的方式來安裝軟體到定位。這過程是真的很麻煩的,而且對於不熟整個系統的朋友來說,還真是累人啊!
那有沒有想過,如果我的 Linux 系統與廠商的系統一模一樣,那麼在廠商的系統上面編譯出來的執行檔,
自然也就可以在我的系統上面跑囉!也就是說,廠商先在他們的系統上面編譯好了我們使用者所需要的軟體,
然後將這個編譯好的可執行的軟體直接釋出給使用者來安裝,如此一來,由於我們本來就使用廠商的
Linux distribution ,所以當然系統 (硬體與作業系統) 是一樣的,那麼使用廠商提供的編譯過的可執行檔就沒有問題啦!
說的比較白話一些,那就是利用類似 Windows
的安裝方式,由程式開發者直接在已知的系統上面編譯好,再將該程式直接給使用者來安裝,如此而已。
那麼如果在安裝的時候還可以加上一些與這些程式相關的資訊,將他建立成為資料庫,那不就可以進行安裝、反安裝、
升級與驗證等等的相關功能囉 (類似 Windows 底下的『新增移除程式』)?確實如此,在 Linux
上面至少就有兩種常見的這方面的軟體管理員,分別是 RPM 與 Debian 的 dpkg 。我們的 CentOS
主要是以 RPM 為主,但也不能不知道 dpkg 啦!所以底下就來約略介紹一下這兩個玩意兒。
22.1.1 Linux 界的兩大主流: RPM 與 DPKG
由於自由軟體的蓬勃發展,加上大型 Unix-Like 主機的強大效能,讓很多軟體開發者將他們的軟體使用 Tarball 來釋出。
後來 Linux 發展起來後,由一些企業或社群將這些軟體收集起來製作成為 distributions
以發佈這好用的 Linux 作業系統。但後來發現到,這些 distribution 的軟體管理實在傷腦筋,
如果軟體有漏洞時,又該如何修補呢?使用 tarball 的方式來管理嗎?又常常不曉得到底我們安裝過了哪些程式?
因此,一些社群與企業就開始思考 Linux 的軟體管理方式。
如同剛剛談過的方式,Linux 開發商先在固定的硬體平台與作業系統平台上面將需要安裝或升級的軟體編譯好,
然後將這個軟體的所有相關檔案打包成為一個特殊格式的檔案,在這個軟體檔案內還包含了預先偵測系統與相依軟體的腳本,
並提供記載該軟體提供的所有檔案資訊等。最終將這個軟體檔案釋出。用戶端取得這個檔案後,只要透過特定的指令來安裝,
那麼該軟體檔案就會依照內部的腳本來偵測相依的前驅軟體是否存在,若安裝的環境符合需求,那就會開始安裝,
安裝完成後還會將該軟體的資訊寫入軟體管理機制中,以達成未來可以進行升級、移除等動作呢。
目前在 Linux 界軟體安裝方式最常見的有兩種,分別是:
這個機制最早是由 Debian Linux 社群所開發出來的,透過 dpkg 的機制, Debian
提供的軟體就能夠簡單的安裝起來,同時還能提供安裝後的軟體資訊,實在非常不錯。
只要是衍生於 Debian 的其他 Linux distributions 大多使用 dpkg 這個機制來管理軟體的,
包括 B2D, Ubuntu 等等。
這個機制最早是由 Red Hat 這家公司開發出來的,後來實在很好用,因此很多 distributions
就使用這個機制來作為軟體安裝的管理方式。包括 Fedora, CentOS, SuSE 等等知名的開發商都是用這咚咚。
如前所述,不論 dpkg/rpm 這些機制或多或少都會有軟體屬性相依的問題,那該如何解決呢?
其實前面不是談到過每個軟體檔案都有提供相依屬性的檢查嗎?那麼如果我們將相依屬性的資料做成列表,
等到實際軟體安裝時,若發生有相依屬性的軟體狀況時,例如安裝 A 需要先安裝 B 與 C ,而安裝 B 則需要安裝
D 與 E 時,那麼當你要安裝 A ,透過相依屬性列表,管理機制自動去取得 B, C, D, E 來同時安裝,
不就解決了屬性相依的問題嗎?
沒錯!您真聰明!目前新的 Linux 開發商都有提供這樣的『線上升級』機制,透過這個機制,
原版光碟就只有第一次安裝時需要用到而已,其他時候只要有網路,你就能夠取得原本開發商所提供的任何軟體了呢!
在 dpkg 管理機制上就開發出 APT 的線上升級機制,RPM 則依開發商的不同,有 Red Hat 系統的 yum ,
SuSE 系統的 Yast Online Update (YOU) 等。
Red Hat/FedoraRPMrpm, rpmbuildYUM (yum)
Debian/UbuntuDPKGdpkgAPT (apt-get)
我們這裡使用的是 CentOS 系統嘛!所以說:使用的軟體管理機制為 RPM
機制,而用來作為線上升級的方式則為 yum !底下就讓我們來談談 RPM 與 YUM
的相關說明吧!
22.1.2 什麼是 RPM 與 SRPM
RPM 全名是『 RedHat Package Manager 』簡稱則為
RPM 啦!顧名思義,當初這個軟體管理的機制是由 Red Hat 這家公司發展出來的。
RPM 是以一種資料庫記錄的方式來將你所需要的軟體安裝到你的 Linux 系統的一套管理機制。
他最大的特點就是將你要安裝的軟體先編譯過,
並且打包成為 RPM 機制的包裝檔案,透過包裝好的軟體裡頭預設的資料庫記錄,
記錄這個軟體要安裝的時候必須具備的相依屬性軟體,當安裝在你的 Linux 主機時,
RPM 會先依照軟體裡頭的資料查詢 Linux 主機的相依屬性軟體是否滿足,
若滿足則予以安裝,若不滿足則不予安裝。那麼安裝的時候就將該軟體的資訊整個寫入
RPM 的資料庫中,以便未來的查詢、驗證與反安裝!這樣一來的優點是:
由於已經編譯完成並且打包完畢,所以軟體傳輸與安裝上很方便 (不需要再重新編譯);
由於軟體的資訊都已經記錄在 Linux 主機的資料庫上,很方便查詢、升級與反安裝
但是這也造成些許的困擾。由於 RPM 檔案是已經包裝好的資料,也就是說,
裡面的資料已經都『編譯完成』了!所以,該軟體檔案幾乎只能安裝在原本預設的硬體與作業系統版本中。
也就是說,你的主機系統環境必須要與當初建立這個軟體檔案的主機環境相同才行!
舉例來說,rp-pppoe 這個 ADSL 撥接軟體,他必須要在 ppp 這個軟體存在的環境下才能進行安裝!如果你的主機並沒有
ppp 這個軟體,那麼很抱歉,除非你先安裝 ppp 否則 rp-pppoe 就是不讓你安裝的
(當然你可以強制安裝,但是通常都會有點問題發生就是了!)。
所以,通常不同的 distribution 所釋出的 RPM 檔案,並不能用在其他的
distributions 上。舉例來說,Red Hat 釋出的 RPM 檔案,通常無法直接在 SuSE
上面進行安裝的。更有甚者,相同 distribution 的不同版本之間也無法互通,例如 CentOS 6.x 的 RPM
檔案就無法直接套用在 CentOS 7.x !因此,這樣可以發現這些軟體管理機制的問題是:
軟體檔案安裝的環境必須與打包時的環境需求一致或相當;
需要滿足軟體的相依屬性需求;
反安裝時需要特別小心,最底層的軟體不可先移除,否則可能造成整個系統的問題!
那怎麼辦?如果我真的想要安裝其他 distributions 提供的好用的 RPM 軟體檔案時?
呵呵!還好,還有 SRPM 這個東西!SRPM 是什麼呢?顧名思義,他是
Source RPM 的意思,也就是這個 RPM 檔案裡面含有原始碼哩!特別注意的是,這個
SRPM 所提供的軟體內容『並沒有經過編譯』,
它提供的是原始碼喔!
通常 SRPM 的副檔名是以 ***.src.rpm 這種格式來命名的。不過,既然 SRPM
提供的是原始碼,那麼為什麼我們不使用 Tarball 直接來安裝就好了?這是因為 SRPM 雖然內容是原始碼,
但是他仍然含有該軟體所需要的相依性軟體說明、以及所有 RPM 檔案所提供的資料。同時,他與 RPM
不同的是,他也提供了參數設定檔 (就是 configure 與 makefile)。所以,如果我們下載的是
SRPM ,那麼要安裝該軟體時,你就必須要:
先將該軟體以 RPM 管理的方式編譯,此時 SRPM 會被編譯成為 RPM 檔案;
然後將編譯完成的 RPM 檔案安裝到 Linux 系統當中
怪了,怎麼 SRPM 這麼麻煩吶!還要重新編譯一次,那麼我們直接使用 RPM
來安裝不就好了?通常一個軟體在釋出的時候,都會同時釋出該軟體的
RPM 與 SRPM 。我們現在知道 RPM 檔案必須要在相同的 Linux 環境下才能夠安裝,而 SRPM
既然是原始碼的格式,自然我們就可以透過修改 SRPM 內的參數設定檔,然後重新編譯產生能適合我們
Linux 環境的 RPM 檔案,如此一來,不就可以將該軟體安裝到我們的系統當中,而不必與原作者打包的
Linux 環境相同了?這就是 SRPM 的用處了!
RPMxxx.rpm可已編譯不可
SRPMxxx.src.rpm不可未編譯之原始碼可
為何說 CentOS 是『社群維護的企業版』呢? Red Hat 公司的 RHEL 釋出後,連帶會將 SRPM 釋出。
社群的朋友就將這些 SRPM 收集起來並重新編譯成為所需要的軟體,再重複釋出成為 CentOS,所以才能號稱與
Red Hat 的 RHEL 企業版同步啊!真要感謝 SRPM 哩!如果你想要理解 CentOS 是如何編譯一支程式的,
也能夠透過學習 SRPM 內含的編譯參數,來學習的啊!
22.1.3 什麼是 i386, i586, i686, noarch, x86_64
從上面的說明,現在我們知道 RPM 與 SRPM 的格式分別為:
xxxxxxxxx.rpm
&==RPM 的格式,已經經過編譯且包裝完成的 rpm 檔案;
xxxxx.src.rpm
&==SRPM的格式,包含未編譯的原始碼資訊。
那麼我們怎麼知道這個軟體的版本、適用的平台、編譯釋出的次數呢?只要透過檔名就可以知道了!例如
rp-pppoe-3.11-5.el7.x86_64.rpm
這的檔案的意義為:
rp-pppoe -
.el7.x86_64
軟體的版本資訊 釋出的次數 適合的硬體平台 副檔名
除了後面適合的硬體平台與副檔名外,主要是以『-』來隔開各個部分,這樣子可以很清楚的發現該軟體的名稱、
版本資訊、打包次數與操作的硬體平台!好了,來談一談每個不同的地方吧:
軟體名稱:
當然就是每一個軟體的名稱了!上面的範例就是 rp-pppoe 。
版本資訊:
每一次更新版本就需要有一個版本的資訊,否則如何知道這一版是新是舊?這裡通常又分為主版本跟次版本。以上面為例,主版本為
3 ,在主版本的架構下更動部分原始碼內容,而釋出一個新的版本,就是次版本啦!以上面為例,就是 11 囉!所以版本名就為 3.11
釋出版本次數:
通常就是編譯的次數啦!那麼為何需要重複的編譯呢?這是由於同一版的軟體中,可能由於有某些
bug 或者是安全上的顧慮,所以必須要進行小幅度的 patch 或重設一些編譯參數。
設定完成之後重新編譯並打包成 RPM 檔案!因此就有不同的打包數出現了!
操作硬體平台:
這是個很好玩的地方,由於 RPM 可以適用在不同的操作平台上,但是不同的平台設定的參數還是有所差異性!
並且,我們可以針對比較高階的 CPU 來進行最佳化參數的設定,這樣才能夠使用高階 CPU 所帶來的硬體加速功能。
所以就有所謂的 i386, i586, i686, x86_64 與 noarch 等的檔案名稱出現了!
幾乎適用於所有的 x86 平台,不論是舊的 Pentium 或者是新的 Intel Core 2 與
K8 系列的 CPU 等等,都可以正常的工作!那個 i 指的是 Intel 相容的 CPU 的意思,至於 386
不用說,就是 CPU 的等級啦!
就是針對 586 等級的電腦進行最佳化編譯。那是哪些 CPU 呢?包括 Pentium 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU
(socket 7 插腳) 等等的 CPU 都算是這個等級;
在 Pentium II 以後的 Intel 系列 CPU ,及 K7 以後等級的 CPU 都屬於這個 686 等級!
由於目前市面上幾乎僅剩 P-II 以後等級的硬體平台,因此很多 distributions 都直接釋出這種等級的 RPM 檔案。
針對 64 位元的 CPU 進行最佳化編譯設定,包括 Intel 的 Core 2 以上等級 CPU ,以及 AMD 的 Athlon64
以後等級的 CPU ,都屬於這一類型的硬體平台。
就是沒有任何硬體等級上的限制。一般來說,這種類型的 RPM 檔案,裡面應該沒有 binary program 存在,
較常出現的就是屬於 shell script 方面的軟體。
截至目前為止 (2015),就算是舊的個人電腦系統,堪用與能用的設備大概都至少是 Intel Core 2 以上等級的電腦主機,泰半都是 64 位元的系統了!
因此目前 CentOS 7 僅推出 x86_64 的軟體版本,並沒有提供 i686 以下等級的軟體了!如果你的系統還是很老舊的機器,
那才有可能不支援 64 位元的 Linux 系統。此外,目前僅存的軟體版本大概也只剩下 i686 及 x86_64 還有不分版本的 noarch 而已,
i386 只有在某些很特別的軟體上才看到的到啦!
受惠於目前 x86 系統的支援方面,新的 CPU 都能夠執行舊型 CPU 所支援的軟體,也就是說硬體方面都可以向下相容的,
因此最低等級的 i386 軟體可以安裝在所有的 x86 硬體平台上面,不論是 32
位元還是 64 位元。但是反過來說就不行了。舉例來說,目前硬體大多是 64 位元的等級,因此你可以在該硬體上面安裝
x86_64 或 i386 等級的 RPM 軟體。但在你的舊型主機,例如 P-III/P-4 32 位元機器上面,就不能夠安裝 x86_64 的軟體!
根據上面的說明,其實我們只要選擇 i686 版本來安裝在你的 x86 硬體上面就肯定沒問題。但是如果強調效能的話,
還是選擇搭配你的硬體的 RPM 檔案吧!畢竟該軟體才有針對你的 CPU 硬體平台進行過參數最佳化的編譯嘛!
22.1.4 RPM 的優點
由於 RPM 是透過預先編譯並打包成為 RPM 檔案格式後,再加以安裝的一種方式,並且還能夠進行資料庫的記載。
所以 RPM 有以下的優點:
RPM 內含已經編譯過的程式與設定檔等資料,可以讓使用者免除重新編譯的困擾;
RPM 在被安裝之前,會先檢查系統的硬碟容量、作業系統版本等,可避免檔案被錯誤安裝;
RPM 檔案本身提供軟體版本資訊、相依屬性軟體名稱、軟體用途說明、軟體所含檔案等資訊,便於瞭解軟體;
RPM 管理的方式使用資料庫記錄 RPM 檔案的相關參數,便於升級、移除、查詢與驗證。
為什麼 RPM 在使用上很方便呢?我們前面提過, RPM 這個軟體管理員所處理的軟體,是由軟體提供者在特定的
Linux 作業平台上面將該軟體編譯完成並且打包好。那使用者只要拿到這個打包好的軟體,
然後將裡頭的檔案放置到應該要擺放的目錄,不就完成安裝囉?對啦!就是這樣!
但是有沒有想過,我們在前一章裡面提過的,有些軟體是有相關性的,例如要安裝網路卡驅動程式,就得要有
kernel source 與 gcc 及 make
等軟體。那麼我們的 RPM 軟體是否一定可以安裝完成呢?如果該軟體安裝之後,卻找不到他相關的前驅軟體,
那不是挺麻煩的嗎?因為安裝好的軟體也無法使用啊!
為了解決這種具有相關性的軟體之間的問題 (就是所謂的軟體相依屬性),RPM
就在提供打包的軟體時,同時加入一些訊息登錄的功能,這些訊息包括軟體的版本、
打包軟體者、相依屬性的其他軟體、本軟體的功能說明、本軟體的所有檔案記錄等等,然後在
Linux 系統上面亦建立一個 RPM 軟體資料庫,如此一來,當你要安裝某個以
RPM 型態提供的軟體時,在安裝的過程中, RPM 會去檢驗一下資料庫裡面是否已經存在相關的軟體了,
如果資料庫顯示不存在,那麼這個 RPM 檔案『預設』就不能安裝。呵呵!沒有錯,這個就是 RPM
類型的檔案最為人所詬病的『軟體的屬性相依』問題啦!
22.1.5 RPM 屬性相依的克服方式: YUM 線上升級
為了重複利用既有的軟體功能,因此很多軟體都會以函式庫的方式釋出部分功能,以方便其他軟體的呼叫應用,
例如 PAM 模組的驗證功能。此外,為了節省使用者的資料量,目前的 distributions 在釋出軟體時,
都會將軟體的內容分為一般使用與開發使用 (development) 兩大類。所以你才會常常看到有類似
pam-x.x.rpm 與 pam-devel-x.x.rpm 之類的檔名啊!而預設情況下,大部分的 software-devel-x.x.rpm
都不會安裝,因為終端用戶大部分不會去開發軟體嘛!
因為有上述的現象,因此 RPM 軟體檔案就會有所謂的屬性相依的問題產生 (其實所有的軟體管理幾乎都有這方面的情況存在)。
那有沒有辦法解決啊?前面不是談到 RPM 軟體檔案內部會記錄相依屬性的資料嗎?那想一想,要是我將這些相依屬性的軟體先列表,
在有要安裝軟體需求的時候,先到這個列表去找,同時與系統內已安裝的軟體相比較,沒安裝到的相依軟體就一口氣同時安裝起來,
那不就解決了相依屬性的問題了嗎?有沒有這種機制啊?有啊!那就是 YUM 機制的由來!
CentOS (1)先將釋出的軟體放置到 YUM 伺服器內,然後(2)分析這些軟體的相依屬性問題,將軟體內的記錄資訊寫下來 (header)。
然後再將這些資訊分析後記錄成軟體相關性的清單列表。這些列表資料與軟體所在的本機或網路位置可以稱呼為容器或軟體倉庫或軟體庫 (repository)。
當用戶端有軟體安裝的需求時,用戶端主機會主動的向網路上面的 yum 伺服器的軟體庫網址下載清單列表,
然後透過清單列表的資料與本機 RPM 資料庫已存在的軟體資料相比較,就能夠一口氣安裝所有需要的具有相依屬性的軟體了。
整個流程可以簡單的如下圖說明:
圖22.1.1、YUM 使用的流程示意圖
所以軟體倉庫內的清單會記載每個檔案的相依屬性關係,以及所有檔案的網路位置 (URL)!由於記錄了詳細的軟體網路位置,
所以有需要的時候,當然就會自動的從網路下載該軟體囉!
當用戶端有升級、安裝的需求時, yum 會向軟體庫要求清單的更新,等到清單更新到本機的 /var/cache/yum 裡面後,
等一下更新時就會用這個本機清單與本機的 RPM 資料庫進行比較,這樣就知道該下載什麼軟體。接下來 yum 會跑到軟體庫伺服器
(yum server) 下載所需要的軟體 (因為有記錄軟體所在的網址),然後再透過 RPM 的機制開始安裝軟體啦!這就是整個流程!
談到最後,還是需要動到 RPM 的啦!所以下個小節就讓我們來談談 RPM 這咚咚吧!
為什麼要做出『軟體庫』呢?由於 yum 伺服器提供的 RPM 檔案內容可能有所差異,舉例來說,原廠釋出的資料有
(1)原版資料; (2)更新資料 (update); (3)特殊資料 (例如第三方協力軟體,或某些特殊功能的軟體)。
這些軟體檔案基本上不會放置到一起,那如何分辨這些軟體功能呢?就用『軟體庫』的概念來處理的啦!
不同的『軟體庫』網址,可以放置不同的功能的軟體之意!
22.2 RPM 軟體管理程式: rpm
RPM 的使用其實不難,只要使用 rpm 這個指令即可!鳥哥最喜歡的就是
rpm 指令的查詢功能了,可以讓我很輕易的就知道某個系統有沒有安裝鳥哥要的軟體呢!此外,
我們最好還是得要知道一下,到底 RPM 類型的檔案他們是將軟體的相關檔案放置在哪裡呢?還有,我們說的那個 RPM
的資料庫又是放置在哪裡呢?
Tips 事實上,下一小節要講的 yum 就可以直接用來進行安裝的動作,基本上 rpm 這個指令真的就只剩下查詢與檢驗的功能囉!
所以,查詢與檢驗還是要學的,至於安裝,透過 yum 就好了!
22.2.1 RPM 預設安裝的路徑
一般來說,RPM 類型的檔案在安裝的時候,會先去讀取檔案內記載的設定參數內容,然後將該資料用來比對
Linux 系統的環境,以找出是否有屬性相依的軟體尚未安裝的問題。例如 Openssh 這個連線軟體需要透過
Openssl 這個加密軟體的幫忙,所以得先安裝 openssl 才能裝 openssh 的意思。那你的環境如果沒有 openssl ,
你就無法安裝 openssh 的意思啦。
若環境檢查合格了,那麼 RPM 檔案就開始被安裝到你的 Linux 系統上。安裝完畢後,該軟體相關的資訊就會被寫入
/var/lib/rpm/ 目錄下的資料庫檔案中了。
上面這個目錄內的資料很重要喔!因為未來如果我們有任何軟體升級的需求,版本之間的比較就是來自於這個資料庫,
而如果你想要查詢系統已經安裝的軟體,也是從這裡查詢的!同時,目前的 RPM 也提供數位簽章資訊,
這些數位簽章也是在這個目錄內記錄的呢!所以說,這個目錄得要注意不要被刪除了啊!
那麼軟體內的檔案到底是放置到哪裡去啊?當然與檔案系統有關對吧!我們在談過每個目錄的意義,
這裡再次的強調囉:
一些設定檔放置的目錄,例如 /etc/crontab
一些可執行檔案
一些程式使用的動態函式庫
/usr/share/doc
一些基本的軟體使用手冊與說明檔
/usr/share/man
一些 man page 檔案
好了,底下我們就來針對每個 RPM 的相關指令來進行說明囉!
22.2.2 RPM 安裝 (install)
因為安裝軟體是 root 的工作,因此你得要是 root 的身份才能夠操作 rpm 這指令的。
用 rpm 來安裝很簡單啦!假設我要安裝一個檔名為 rp-pppoe-3.11-5.el7.x86_64.rpm 的檔案,那麼我可以這樣:(假設原版光碟已經放在 /mnt 底下了)
[root@study ~]# rpm -i /mnt/Packages/rp-pppoe-3.11-5.el7.x86_64.rpm
不過,這樣的參數其實無法顯示安裝的進度,所以,通常我們會這樣下達安裝指令:
[root@study ~]# rpm -ivh package_name
選項與參數:
-i :install 的意思
-v :察看更細部的安裝資訊畫面
-h :以安裝資訊列顯示安裝進度
範例一:安裝原版光碟上的 rp-pppoe 軟體
[root@study ~]# rpm -ivh /mnt/Packages/rp-pppoe-3.11-5.el7.x86_64.rpm
Preparing...
################################# [100%]
Updating / installing...
1:rp-pppoe-3.11-5.el7
################################# [100%]
範例二、一口氣安裝兩個以上的軟體時:
[root@study ~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm
# 後面直接接上許多的軟體檔案!
範例三、直接由網路上面的某個檔案安裝,以網址來安裝:
[root@study ~]# rpm -ivh http://website.name/path/pkgname.rpm
另外,如果我們在安裝的過程當中發現問題,或者已經知道會發生的問題,
而還是『執意』要安裝這個軟體時,可以使用如下的參數『強制』安裝上去:
rpm 安裝時常用的選項與參數說明
使用時機:當發生軟體屬性相依問題而無法安裝,但你執意安裝時
軟體會有相依性的原因是因為彼此會使用到對方的機制或功能,如果強制安裝而不考慮軟體的屬性相依,
則可能會造成該軟體的無法正常使用!
--replacefiles
使用時機:
如果在安裝的過程當中出現了『某個檔案已經被安裝在你的系統上面』的資訊,又或許出現版本不合的訊息 (confilcting files)
時,可以使用這個參數來直接覆蓋檔案。
覆蓋的動作是無法復原的!所以,你必須要很清楚的知道被覆蓋的檔案是真的可以被覆蓋喔!否則會欲哭無淚!
--replacepkgs
使用時機:
重新安裝某個已經安裝過的軟體!如果你要安裝一堆 RPM 軟體檔案時,可以使用 rpm -ivh *.rpm ,但若某些軟體已經安裝過了,
此時系統會出現『某軟體已安裝』的資訊,導致無法繼續安裝。此時可使用這個選項來重複安裝喔!
使用時機:這個參數其實就是 --replacefiles 與 --replacepkgs 的綜合體!
使用時機:
想要測試一下該軟體是否可以被安裝到使用者的 Linux 環境當中,可找出是否有屬性相依的問題。範例為:
rpm -ivh pkgname.i386.rpm --test
使用時機:
由於 RPM 資料庫破損或者是某些緣故產生錯誤時,可使用這個選項來更新軟體在資料庫內的相關資訊。
--nosignature
使用時機:
想要略過數位簽章的檢查時,可以使用這個選項。
--prefix 新路徑
使用時機:
要將軟體安裝到其他非正規目錄時。舉例來說,你想要將某軟體安裝到 /usr/local 而非正規的 /bin, /etc 等目錄,
就可以使用『 --prefix /usr/local 』來處理了。
--noscripts
使用時機:不想讓該軟體在安裝過程中自行執行某些系統指令。
RPM 的優點除了可以將檔案放置到定位之外,還可以自動執行一些前置作業的指令,例如資料庫的初始化。
如果你不想要讓 RPM 幫你自動執行這一類型的指令,就加上他吧!
一般來說,rpm 的安裝選項與參數大約就是這些了。通常鳥哥建議直接使用 -ivh 就好了,
如果安裝的過程中發現問題,一個一個去將問題找出來,盡量不要使用『
暴力安裝法 』,就是透過 --force 去強制安裝!
因為可能會發生很多不可預期的問題呢!除非你很清楚的知道使用上面的參數後,安裝的結果是你預期的!
在沒有網路的前提下,你想要安裝一個名為 pam-devel 的軟體,你手邊只有原版光碟,該如何是好?
你可以透過掛載原版光碟來進行資料的查詢與安裝。請將原版光碟放入光碟機,底下我們嘗試將光碟掛載到 /mnt 當中,
並據以處理軟體的下載囉:
掛載光碟,使用: mount /dev/sr0 /mnt
找出檔案的實際路徑:find /mnt -name 'pam-devel*'
測試此軟體是否具有相依性: rpm -ivh pam-devel... --test
直接安裝: rpm -ivh pam-devel...
卸載光碟: umount /mnt
在鳥哥的系統中,剛好這個軟體並沒有屬性相依的問題,因此最後一個步驟可以順利的進行下去呢!
22.2.3 RPM 升級與更新 (upgrade/freshen)
使用 RPM 來升級真是太簡單了!就以 -Uvh 或 -Fvh 來升級即可,而 -Uvh 與 -Fvh 可以用的選項與參數,跟 install
是一樣的。不過, -U 與 -F 的意義還是不太一樣的,基本的差別是這樣的:
後面接的軟體即使沒有安裝過,則系統將予以直接安裝;
若後面接的軟體有安裝過舊版,則系統自動更新至新版;
如果後面接的軟體並未安裝到你的 Linux 系統上,則該軟體不會被安裝;亦即只有已安裝至你
Linux 系統內的軟體會被『升級』!
由上面的說明來看,如果你想要大量的升級系統舊版本的軟體時,使用 -Fvh
則是比較好的作法,因為沒有安裝的軟體才不會被不小心安裝進系統中。但是需要注意的是,如果你使用的是 -Fvh
,偏偏你的機器上尚無這一個軟體,那麼很抱歉,該軟體並不會被安裝在你的 Linux 主機上面,所以請重新以 ivh
來安裝吧!
早期沒有 yum 的環境底下,同時網路頻寬也很糟糕的狀況下,通常有的朋友在進行整個作業系統的舊版軟體修補時,喜歡這麼進行:
先到各發展商的 errata 網站或者是國內的 FTP 映像站捉下來最新的 RPM 檔案;
使用 -Fvh 來將你的系統內曾安裝過的軟體進行修補與升級!(真是方便呀!)
所以,在不曉得 yum 功能的情況下,你依舊可以到 CentOS 的映設站台下載 updates 資料,然後利用上述的方法來一口氣升級!
當然囉,升級也是可以利用 --nodeps/--force 等等的參數啦!
不過,現在既然有 yum 的機制在,這個笨方法當然也就不再需要了!
22.2.4 RPM 查詢 (query)
RPM 在查詢的時候,其實查詢的地方是在 /var/lib/rpm/
這個目錄下的資料庫檔案啦!另外, RPM 也可以查詢未安裝的 RPM 檔案內的資訊喔!那如何去查詢呢?
我們先來談談可用的選項有哪些?
[root@study ~]# rpm -qa
&==已安裝軟體
[root@study ~]# rpm -q[licdR] 已安裝的軟體名稱
&==已安裝軟體
[root@study ~]# rpm -qf 存在於系統上面的某個檔名
&==已安裝軟體
[root@study ~]# rpm -qp[licdR] 未安裝的某個檔案名稱
&==查閱RPM檔案
選項與參數:
查詢已安裝軟體的資訊:
:僅查詢,後面接的軟體名稱是否有安裝;
-qa :列出所有的,已經安裝在本機 Linux 系統上面的所有軟體名稱;
-qi :列出該軟體的詳細資訊 (information),包含開發商、版本與說明等;
-ql :列出該軟體所有的檔案與目錄所在完整檔名 (list);
-qc :列出該軟體的所有設定檔 (找出在 /etc/ 底下的檔名而已)
-qd :列出該軟體的所有說明檔 (找出與 man 有關的檔案而已)
-qR :列出與該軟體有關的相依軟體所含的檔案 (Required 的意思)
-qf :由後面接的檔案名稱,找出該檔案屬於哪一個已安裝的軟體;
-q --scripts:列出是否含有安裝後需要執行的腳本檔,可用以 debug 喔!
查詢某個 RPM 檔案內含有的資訊:
-qp[icdlR]:注意 -qp 後面接的所有參數以上面的說明一致。但用途僅在於找出
某個 RPM 檔案內的資訊,而非已安裝的軟體資訊!注意!
在查詢的部分,所有的參數之前都需要加上 -q 才是所謂的查詢!查詢主要分為兩部分,
一個是查已安裝到系統上面的的軟體資訊,這部份的資訊都是由 /var/lib/rpm/ 所提供。另一個則是查某個 rpm 檔案內容,
等於是由 RPM 檔案內找出一些要寫入資料庫內的資訊就是了,這部份就得要使用 -qp (p 是 package 的意思)。
那就來看看幾個簡單的範例吧!
範例一:找出你的 Linux 是否有安裝 logrotate 這個軟體?
[root@study ~]# rpm -q logrotate
logrotate-3.8.6-4.el7.x86_64
[root@study ~]# rpm -q logrotating
package logrotating is not installed
# 注意到,系統會去找是否有安裝後面接的軟體名稱。注意,不必要加上版本喔!
# 至於顯示的結果,一看就知道有沒有安裝啦!
範例二:列出上題當中,屬於該軟體所提供的所有目錄與檔案:
[root@study ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf
....(以下省略)....
# 可以看出該軟體到底提供了多少的檔案與目錄,也可以追蹤軟體的資料。
範例三:列出 logrotate 這個軟體的相關說明資料:
[root@study ~]# rpm -qi logrotate
: logrotate
# 軟體名稱
# 軟體的版本
# 釋出的版本
Architecture: x86_64
# 編譯時所針對的硬體等級
Install Date: Mon 04 May :36 PM CST
# 這個軟體安裝到本系統的時間
: System Environment/Base
# 軟體是放再哪一個軟體群組中
# 軟體的大小
# 釋出的授權方式
: RSA/SHA256, Fri 04 Jul :56 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM
: logrotate-3.8.6-4.el7.src.rpm
# 這就是 SRPM 的檔名
Build Date
: Tue 10 Jun :02 AM CST
# 軟體編譯打包的時間
Build Host
: worker1.bsys.centos.org
# 在哪一部主機上面編譯的
Relocations : (not relocatable)
: CentOS BuildSystem &http://bugs.centos.org&
: https://fedorahosted.org/logrotate/
: Rotates, compresses, removes and mails system log files
Description :
# 這個是詳細的描述!
The logrotate utility is designed to simplify the administration of
log files on a system which generates a lot of log files.
allows for the automatic rotation compression, removal and mailing of
log files.
Logrotate can be set to handle a log file daily, weekly,
monthly or when the log file gets to a certain size.
logrotate runs as a daily cron job.
Install the logrotate package if you need a utility to deal with the
log files on your system.
# 列出該軟體的 information (資訊),裡面的資訊可多著呢,包括了軟體名稱、
# 版本、開發商、SRPM檔案名稱、打包次數、簡單說明資訊、軟體打包者、
# 安裝日期等等!如果想要詳細的知道該軟體的資料,用這個參數來瞭解一下
範例四:分別僅找出 logrotate 的設定檔與說明檔
[root@study ~]# rpm -qc logrotate
[root@study ~]# rpm -qd logrotate
範例五:若要成功安裝 logrotate ,他還需要什麼檔案的幫忙?
[root@study ~]# rpm -qR logrotate
config(logrotate) = 3.8.6-4.el7
coreutils &= 5.92
....(以下省略)....
# 由這裡看起來,呵呵~還需要很多檔案的支援才行喔!
範例六:由上面的範例五,找出 /bin/sh 是那個軟體提供的?
[root@study ~]# rpm -qf /bin/sh
bash-4.2.46-12.el7.x86_64
# 這個參數後面接的可是『檔案』吶!不像前面都是接軟體喔!
# 這個功能在查詢系統的某個檔案屬於哪一個軟體所有的。
範例七:假設我有下載一個 RPM 檔案,想要知道該檔案的需求檔案,該如何?
[root@study ~]# rpm -qpR filename.i386.rpm
# 加上 -qpR ,找出該檔案需求的資料!
常見的查詢就是這些了!要特別說明的是,在查詢本機上面的 RPM 軟體相關資訊時,
不需要加上版本的名稱,只要加上軟體名稱即可!因為他會由 /var/lib/rpm 這個資料庫裡面去查詢,
所以我們可以不需要加上版本名稱。但是查詢某個 RPM 檔案就不同了,我們必須要列出整個檔案的完整檔名才行~
這一點朋友們常常會搞錯。底下我們就來做幾個簡單的練習吧!
我想要知道我的系統當中,以 c 開頭的軟體有幾個,如何實做?
我的 WWW 伺服器為 Apache ,我知道他使用的 RPM 軟體檔名為 httpd 。現在,我想要知道這個軟體的所有設定檔放置在何處,可以怎麼作?
承上題,如果查出來的設定檔案已經被我改過,但是我忘記了曾經修改過哪些地方,所以想要直接重新安裝一次該軟體,該如何作?
如果我誤砍了某個重要檔案,例如 /etc/crontab,偏偏不曉得他屬於哪一個軟體,該怎麼辦?
rpm -qa | grep ^c | wc -l
rpm -qc httpd
假設該軟體在網路上的網址為:http://web.site.name/path/httpd-x.x.xx.i386.rpm
則我可以這樣做:
rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm --replacepkgs
雖然已經沒有這個檔案了,不過沒有關係,因為 RPM 有記錄在 /var/lib/rpm 當中的資料庫啊!所以直接下達:
rpm -qf /etc/crontab
就可以知道是那個軟體囉!重新安裝一次該軟體即可!
22.2.5 RPM 驗證與數位簽章 (Verify/signature)
驗證 (Verify) 的功能主要在於提供系統管理員一個有用的管理機制!作用的方式是『使用
/var/lib/rpm 底下的資料庫內容來比對目前 Linux
系統的環境下的所有軟體檔案 』也就是說,當你有資料不小心遺失,
或者是因為你誤殺了某個軟體的檔案,或者是不小心不知道修改到某一個軟體的檔案內容,
就用這個簡單的方法來驗證一下原本的檔案系統吧!好讓你瞭解這一陣子到底是修改到哪些檔案資料了!驗證的方式很簡單:
[root@study ~]# rpm -Va
[root@study ~]# rpm -V
已安裝的軟體名稱
[root@study ~]# rpm -Vp 某個 RPM 檔案的檔名
[root@study ~]# rpm -Vf 在系統上面的某個檔案
選項與參數:
:後面加的是軟體名稱,若該軟體所含的檔案被更動過,才會列出來;
-Va :列出目前系統上面所有可能被更動過的檔案;
-Vp :後面加的是檔案名稱,列出該軟體內可能被更動過的檔案;
-Vf :列出某個檔案是否被更動過~
範例一:列出你的 Linux 內的 logrotate 這個軟體是否被更動過?
[root@study ~]# rpm -V logrotate
# 如果沒有出現任何訊息,恭喜你,該軟體所提供的檔案沒有被更動過。
# 如果有出現任何訊息,才是有出現狀況啊!
範例二:查詢一下,你的 /etc/crontab 是否有被更動過?
[root@study ~]# rpm -Vf /etc/crontab
c /etc/crontab
# 瞧!因為有被更動過,所以會列出被更動過的資訊類型!
好了,那麼我怎麼知道到底我的檔案被更動過的內容是什麼?例如上面的範例二。呵呵!簡單的說明一下吧!
例如,我們檢查一下 logrotate 這個軟體:
[root@study ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf
/etc/logrotate.d
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.8.6
/usr/share/doc/logrotate-3.8.6/CHANGES
/usr/share/doc/logrotate-3.8.6/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate.status
# 呵呵!共有 10 個檔案啊!請修改 /etc/logrotate.conf 內的 rotate 變成 5
[root@study ~]# rpm -V logrotate
c /etc/logrotate.conf
你會發現在檔名之前有個 c ,然後就是一堆奇怪的文字了。那個 c 代表的是 configuration ,
就是設定檔的意思。至於最前面的幾個資訊是:
S :(file Size differs) 檔案的容量大小是否被改變
M :(Mode differs) 檔案的類型或檔案的屬性 (rwx) 是否被改變?如是否可執行等參數已被改變
5 :(MD5 sum differs) MD5 這一種指紋碼的內容已經不同
D :(Device major/minor number mis-match) 裝置的主/次代碼已經改變
L :(readLink(2) path mis-match) Link 路徑已被改變
U :(User ownership differs) 檔案的所屬人已被改變
G :(Group ownership differs) 檔案的所屬群組已被改變
T :(mTime differs) 檔案的建立時間已被改變
P :(caPabilities differ) 功能已經被改變
所以,如果當一個設定檔所有的資訊都被更動過,那麼他的顯示就會是:
SM5DLUGTP c filename
至於那個 c 代表的是『 Config file 』的意思,也就是檔案的類型,檔案類型有底下這幾類:
c :設定檔 (config file)
d :文件資料檔 (documentation)
g :鬼檔案~通常是該檔案不被某個軟體所包含,較少發生!(ghost file)
l :授權檔案 (license file)
r :讀我檔案 (read me)
經過驗證的功能,你就可以知道那個檔案被更動過。那麼如果該檔案的變更是『預期中的』,
那麼就沒有什麼大問題,但是如果該檔案是『非預期的』,那麼是否被入侵了呢?呵呵!得注意注意囉!
一般來說,設定檔 (configure) 被更動過是很正常的,萬一你的 binary program 被更動過呢?
那就得要特別特別小心啊!
雖說家醜不可外揚,不過有件事情還是跟大家分享一下的好。鳥哥之前的主機曾經由於安裝一套軟體,導致被攻擊成為跳板。
會發現的原因是系統中只要出現 *.patch 的副檔名時,使用 ls -l 就是顯示不出來該檔名 (該檔名確實存在)。
找了好久,用了好多工具都找不出問題,最終利用 rpm -Va 找出來,原來好多 binary program 被更動過,連 init
都被惡搞!此時,趕緊重新安裝 Linux 並移除那套軟體,之後就比較正常了。所以說,這個 rpm -Va 是個好功能喔!
數位簽章 (digital signature)
談完了軟體的驗證後,不知道你有沒有發現一個問題,那就是,驗證只能驗證軟體內的資訊與 /var/lib/rpm/
裡面的資料庫資訊而已,如果該軟體檔案所提供的資料本身就有問題,那你使用驗證的手段也無法確定該軟體的正確性啊!
那如何解決呢?在 Tarball 與檔案的驗證方面,我們可以使用前一章談到的 md5 指紋碼來檢查,
不過,連指紋碼也可能會被竄改的嘛!那怎辦?沒關係,我們可以透過數位簽章來檢驗軟體的來源的!
就像你自己的簽名一樣,我們的軟體開發商原廠所推出的軟體也會有一個廠商自己的簽章系統!
只是這個簽章被數位化了而已。廠商可以數位簽章系統產生一個專屬於該軟體的簽章,並將該簽章的公鑰 (public key) 釋出。
當你要安裝一個 RPM 檔案時:
首先你必須要先安裝原廠釋出的公鑰檔案;
實際安裝原廠的 RPM 軟體時, rpm 指令會去讀取 RPM 檔案的簽章資訊,與本機系統內的簽章資訊比對,
若簽章相同則予以安裝,若找不到相關的簽章資訊時,則給予警告並且停止安裝喔。
我們 CentOS 使用的數位簽章系統為 GNU 計畫的 GnuPG (GNU Privacy Guard, GPG)()。
GPG 可以透過雜湊運算,算出獨一無二的專屬金鑰系統或者是數位簽章系統,有興趣的朋友可以參考文末的延伸閱讀,
去瞭解一下 GPG 加密的機制喔!這裡我們僅簡單的說明數位簽章在 RPM 檔案上的應用而已。
而根據上面的說明,我們也會知道首先必須要安裝原廠釋出的 GPG 數位簽章的公鑰檔案啊!CentOS 的數位簽章位於:
[root@study ~]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
-rw-r--r--. 1 root root 1690 Apr
1 06:27 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@study ~]# cat /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQINBFOn/0sBEADLDyZ+DQHkcTHDQSE0a0B2iYAEXwpPvs67cJ4tmhe/iMOyVMh9
....(中間省略)....
-----END PGP PUBLIC KEY BLOCK-----
從上面的輸出,你會知道該數位簽章碼其實僅是一個亂數而已,這個亂數對於數位簽章有意義而已,
我們看不懂啦!那麼這個檔案如何安裝呢?透過底下的方式來安裝即可喔!
[root@study ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
由於不同版本 GPG 金鑰檔案放置的位置可能不同,不過檔名大多是以 GPG-KEY 來說明的,
因此你可以簡單的使用 locate 或 find 來找尋,如以下的方式來搜尋即可:
[root@study ~]# locate GPG-KEY
[root@study ~]# find /etc -name '*GPG-KEY*'
那安裝完成之後,這個金鑰的內容會以什麼方式呈現呢?基本上都是使用 pubkey 作為軟體的名稱的!
那我們先列出金鑰軟體名稱後,再以 -qi 的方式來查詢看看該軟體的資訊為何:
[root@study ~]# rpm -qa | grep pubkey
gpg-pubkey-f4a80eb5-53a7ff4b
[root@study ~]# rpm -qi gpg-pubkey-f4a80eb5-53a7ff4b
: gpg-pubkey
: f4a80eb5
: 53a7ff4b
Architecture: (none)
Install Date: Fri 04 Sep :46 AM CST
: Public Keys
Source RPM
Build Date
: Mon 23 Jun :55 PM CST
Build Host
: localhost
Relocations : (not relocatable)
: CentOS-7 Key (CentOS 7 Official Signing Key) &security@centos.org&
: gpg(CentOS-7 Key (CentOS 7 Official Signing Key) &security@centos.org&)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.11.1 (NSS-3)
....(底下省略)....
重點就是最後面出現的那一串亂碼啦!那可是作為數位簽章非常重要的一環哩!
如果你忘記加上數位簽章,很可能很多原版軟體就不能讓你安裝囉~除非你利用 rpm 時選擇略過數位簽章的選項。
22.2.6 RPM 反安裝與重建資料庫 (erase/rebuilddb)
反安裝就是將軟體解除安裝啦!要注意的是,『解安裝的過程一定要由最上層往下解除』,以
rp-pppoe 為例,這一個軟體主要是依據 ppp 這個軟體來安裝的,所以當你要解除
ppp 的時候,就必須要先解除 rp-pppoe 才行!否則就會發生結構上的問題啦!這個可以由建築物來說明,
如果你要拆除五、六樓,那麼當然要由六樓拆起,否則先拆的是第五樓時,那麼上面的樓層難道會懸空?
移除的選項很簡單,就透過 -e 即可移除。不過,很常發生軟體屬性相依導致無法移除某些軟體的問題!
我們以底下的例子來說明:
# 1. 找出與 pam 有關的軟體名稱,並嘗試移除 pam 這個軟體:
[root@study ~]# rpm -qa | grep pam
fprintd-pam-0.5.0-4.0.el7_0.x86_64
pam-1.1.8-12.el7.x86_64
gnome-keyring-pam-3.8.2-10.el7.x86_64
pam-devel-1.1.8-12.el7.x86_64
pam_krb5-2.4.8-4.el7.x86_64
[root@study ~]# rpm -e pam
error: Failed dependencies:
&==這裡提到的是相依性的問題
libpam.so.0()(64bit) is needed by (installed) systemd-libs-208-20.el7.x86_64
libpam.so.0()(64bit) is needed by (installed) libpwquality-1.2.3-4.el7.x86_64
....(以下省略)....
# 2. 若僅移除 pam-devel 這個之前範例安裝上的軟體呢?
[root@study ~]# rpm -e pam-devel
&==不會出現任何訊息!
[root@study ~]# rpm -q pam-devel
package pam-devel is not installed
從範例一我們知道 pam 所提供的函式庫是讓非常多其他軟體使用的,因此你不能移除 pam
,除非將其他相依軟體一口氣也全部移除!你當然也能加 --nodeps 來強制移除,
不過,如此一來所有會用到 pam 函式庫的軟體,都將成為無法運作的程式,我想,你的主機也只好準備停機休假了吧!
至於範例二中,由於 pam-devel 是依附於 pam 的開發工具,你可以單獨安裝與單獨移除啦!
由於 RPM 檔案常常會安裝/移除/升級等,某些動作或許可能會導致 RPM 資料庫 /var/lib/rpm/
內的檔案破損。果真如此的話,那你該如何是好?別擔心,我們可以使用 --rebuilddb 這個選項來重建一下資料庫喔!
作法如下:
[root@study ~]# rpm --rebuilddb
&==重建資料庫
22.3 YUM 線上升級機制
我們在本章一開始的地方談到過
這玩意兒,這個 yum 是透過分析 RPM 的標頭資料後,
根據各軟體的相關性製作出屬性相依時的解決方案,然後可以自動處理軟體的相依屬性問題,以解決軟體安裝或移除與升級的問題。
詳細的 yum 伺服器與用戶端之間的溝通,可以再回到前面的部分查閱一下 的說明。
由於 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 而不使用預設路徑
[查詢工作項目] [相關參數]:這方面的參數有:
:搜尋某個軟體名稱或者是描述 (description) 的重要關鍵字;
:列出目前 yum 所管理的所有的軟體名稱與版本,有點類似 rpm -qa;
:同上,不過有點類似 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
&==這說明該軟體是已經安裝的了
&==這個軟體的名稱
&==這個軟體的編譯架構
&==此軟體的版本
&==釋出的版本
&==此軟體的檔案總容量
: installed
&==軟體庫回報說已安裝的
: anaconda
: The mdadm program controls Linux md devices (software RAID arrays)
: http://www.kernel.org/pub/linux/utils/raid/mdadm/
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
LibRaw.x86_64
0.14.8-5.el7.git98d925 @base
ModemManager.x86_64
1.1.0-6.git.el7
....(中間省略)....
Available Packages
&==還可以安裝的其他軟體
389-ds-base.x86_64
1.3.3.1-20.el7_1
389-ds-base-devel.x86_64
1.3.3.1-20.el7_1
389-ds-base-libs.x86_64
1.3.3.1-20.el7_1
....(底下省略)....
# 上面提供的意義為:『 軟體名稱
在那個軟體庫內 』
範例四:列出目前伺服器上可供本機進行升級的軟體有哪些?
[root@study ~]# yum list updates
&==一定要是 updates 喔!
Updated Packages
NetworkManager.x86_64
1:1.0.0-16.gitea599c.el7_1
NetworkManager-adsl.x86_64
1:1.0.0-16.gitea599c.el7_1
....(底下省略)....
# 上面就列出在那個軟體庫內可以提供升級的軟體與版本!
範例五:列出提供 passwd 這個檔案的軟體有哪些
[root@study ~]# yum provides passwd
passwd-0.79-4.el7.x86_64 : An utility for setting or changing passwords using PAM
passwd-0.79-4.el7.x86_64 : An utility for setting or changing passwords using PAM
: @anaconda
# 找到啦!就是上面的這個軟體提供了 passwd 這個程式!
透過上面的查詢,你應該大致知道 yum 如何用在查詢上面了吧?那麼實際來應用一下:
利用 yum 的功能,找出以 pam 為開頭的軟體名稱有哪些?而其中尚未安裝的又有哪些?
可以透過如下的方法來查詢:
[root@study ~]# yum list pam*
Installed Packages
pam.x86_64
1.1.8-12.el7
pam_krb5.x86_64
2.4.8-4.el7
Available Packages &==底下則是『可升級』的或『未安裝』的
1.1.8-12.el7_1.1
pam.x86_64
1.1.8-12.el7_1.1
pam-devel.i686
1.1.8-12.el7_1.1
pam-devel.x86_64
1.1.8-12.el7_1.1
pam_krb5.i686
2.4.8-4.el7
pam_pkcs11.i686
0.6.2-18.el7
pam_pkcs11.x86_64
0.6.2-18.el7
如上所示,所以可升級者有 pam 這兩個軟體,完全沒有安裝的則是 pam-devel 等其他幾個軟體囉!
安裝/升級功能:yum [install|update] 軟體
既然可以查詢,那麼安裝與升級呢?很簡單啦!就利用 install 與 update 這兩項工作來處理即可喔!
[root@study ~]# yum [option] [安裝與升級的工作項目] [相關參數]
選項與參數:
install :後面接要安裝的軟體!
:後面接要升級的軟體,若要整個系統都升級,就直接 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 喔!
# 至於底下則是一個總結的表格顯示!
==========================================================================================
Repository
==========================================================================================
Installing:
1.1.8-12.el7_1.1
Updating for dependencies:
1.1.8-12.el7_1.1
Transaction Summary
==========================================================================================
# 要安裝的是一個軟體
( 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
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
: "CentOS-7 Key (CentOS 7 Official Signing Key) &security@centos.org&"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
: centos-release-7-1.1503.el7.centos.2.8.x86_64 (@anaconda)
: /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.
: pam-1.1.8-12.el7_1.1.x86_64
Installing : pam-devel-1.1.8-12.el7_1.1.x86_64
: pam-1.1.8-12.el7.x86_64
: pam-1.1.8-12.el7_1.1.x86_64
: pam-devel-1.1.8-12.el7_1.1.x86_64
: pam-1.1.8-12.el7.x86_64
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
有沒有很高興啊!你不必知道軟體在哪裡,你不必手動下載軟體,你也不必拿出原版光碟出來 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
==========================================================================================
Repository
==========================================================================================
1.1.8-12.el7_1.1
Transaction Summary
==========================================================================================
# 還好!沒有相依屬性的問題,僅移除一個軟體!
Installed size: 528 k
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
: pam-devel-1.1.8-12.el7_1.1.x86_64
: pam-devel-1.1.8-12.el7_1.1.x86_64
pam-devel.x86_64 0:1.1.8-12.el7_1.1
連移除也這麼簡單!看來,似乎不需要 rpm 這個指令也能夠快樂的安裝所有的軟體了!
雖然是如此,但是 yum 畢竟是架構在 rpm 上面所發展起來的,所以,鳥哥認為你還是得需要瞭解 rpm
才行!不要學了 yum 之後就將 rpm 的功能忘記了呢!切記切記!
22.3.2 yum 的設定檔
雖然 yum 是你的主機能夠連線上 Internet 就可以直接使用的,不過,由於 CentOS 的映射站台可能會選錯,
舉例來說,我們在台灣,但是 CentOS 的映射站台卻選擇到了大陸北京或者是日本去,有沒有可能發生啊!
有啊!鳥哥教學方面就常常發生這樣的問題,要知道,我們連線到大陸或日本的速度是非常慢的呢!那怎辦?
當然就是手動的修改一下 yum 的設定檔就好囉!
在台灣,CentOS 的映射站台主要有高速網路中心與義守大學,鳥哥近來比較偏好高速網路中心,
似乎更新的速度比較快,而且連接台灣學術網路也非常快速哩!因此,鳥哥底下建議台灣的朋友使用高速網路中心的
ftp 主機資源來作為 yum 伺服器來源喔!不過因為鳥哥也在崑大服務,崑大目前也加入了 CentOS 的映射站,
如果在崑山或台南地區,也能夠選擇崑大的 FTP 喔!目前高速網路中心與崑大對於 CentOS
所提供的相關網址如下:
如果你連接到上述的網址後,就會發現裡面有一堆連結,那些連結就是這個 yum 伺服器所提供的軟體庫了!
所以高速網路中心也提供了 centosplus, cloud, extras, fasttrack, os, updates 等軟體庫,最好認的軟體庫就是
os (系統預設的軟體) 與 updates (軟體升級版本) 囉!由於鳥哥在我的測試用主機是利用 x86_64 的版本,
因此那個 os 再點進去就會得到如下的可提供安裝的網址:
為什麼在上述的網址內呢?有什麼特色!最重要的特色就是那個『 repodata
』的目錄!該目錄就是分析 RPM 軟體後所產生的軟體屬性相依資料放置處!因此,當你要找軟體庫所在網址時,
最重要的就是該網址底下一定要有個名為 repodata 的目錄存在!那就是軟體庫的網址了!
其他的軟體庫正確網址,就請各位看倌自行尋找一下喔!現在讓我們修改設定檔吧!
[root@study ~]# vim /etc/yum.repos.d/CentOS-Base.repo
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
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
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
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
C7.0.1406-base/x86_64
CentOS-7.0.1406 - Base
C7.0.1406-centosplus/x86_64
CentOS-7.0.1406 - CentOSPlus
C7.0.1406-extras/x86_64
CentOS-7.0.1406 - Extras
C7.0.1406-fasttrack/x86_64
CentOS-7.0.1406 - CentOSPlus
C7.0.1406-updates/x86_64
CentOS-7.0.1406 - Updates
CentOS-7 - Base
enabled: 8,652
base-debuginfo/x86_64
CentOS-7 - Debuginfo
base-source/7
CentOS-7 - Base Sources
centosplus/7/x86_64
CentOS-7 - Plus
centosplus-source/7
CentOS-7 - Plus Sources
cr/7/x86_64
CentOS-7 - cr
CentOS-7 - Extras
extras-source/7
CentOS-7 - Extras Sources
fasttrack/7/x86_64
CentOS-7 - fasttrack
CentOS-7 - Updates
enabled: 1,302
updates-source/7
CentOS-7 - Updates Sources
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 :將下載的軟體檔頭刪除
:將所有軟體庫資料都刪除!
範例一:刪除已下載過的所有軟體庫的相關資料 (含軟體本身與清單)
[root@study ~]# yum clean all
22.3.3 yum 的軟體群組功能
透過 yum 來線上安裝一個軟體是非常的簡單,但是,如果要安裝的是一個大型專案呢?
舉例來說,鳥哥使用預設安裝的方式安裝了測試機,這部主機就只有 GNOME 這個視窗管理員,
那我如果想要安裝 KDE 呢?難道需要重新安裝?當然不需要,透過 yum的軟體群組功能即可!
來看看指令先:
[root@study ~]# yum [群組功能] [軟體群組]
選項與參數:
:列出所有可使用的『軟體群組組』,例如 Development Tools 之類的;
:後面接 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
你會發現系統上面的軟體大多是群組的方式一口氣來提供安裝的!還記全新安裝 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:
fftw-devel
fftw-static
....(以下省略)....
你會發現那就是一個科學運算、平行運算會用到的各種工具就是了!而下方則列出許多應該會在該群組安裝時被下載與安裝的軟體們!
讓我們直接來安裝看看!
[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 的版本來處理的嘛!所以也就能夠支援該軟體庫的相關軟體相依環境了。這個計畫的主網站在底下網頁:
而我們的 CentOS 7 主要可以使用的軟體倉庫網址為:
除了上述的 Fedora 計畫所提供的額外軟體庫之外,其實社群裡面也有朋友針對 CentOS 與 EPEL 的不足而提供的許多軟體倉庫喔!
底下鳥哥是列出當初鳥哥為了要處理 PCI passthrough 虛擬化而使用到的 ELRepo 這個軟體倉庫,若有其他的需求,你就得要自己搜尋了!
這個 ELRepo 軟體倉庫與提供給 CentOS 7.x 的網址如下:
這個 ELRepo 的軟體庫跟其他軟體庫比較不同的地方在於這個軟體庫提供的資料大多是與核心、核心模組與虛擬化相關軟體有關,例如 NVidia 的驅動程式也在裡面咧!
尤其提供了最新的核心 (取名為 kernel-ml 的軟體名稱,其實就是最新的 Linux 核心啊!),如果你的系統像鳥哥的某些發展伺服器一樣,那就有可能會使用到這個軟體庫喔!
好了!根據上面的說明,來玩一玩底下這個模擬案例看看:
我的系統上面想要透過上述的 CentOS 7 的 EPEL 計畫來安裝 netcdf 以及 R 這兩套軟體,該如何處理?
首先,你的系統應該要針對 epel 進行 yum 的設定檔處理,處理方式如下:
[root@study ~]# vim /etc/yum.repos.d/epel.repo
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
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 來安裝呢?』,事實上考慮的因素很多,不過鳥哥通常是這樣建議的:
優先選擇原廠的 RPM 功能:
由於原廠釋出的軟體通常具有一段時間的維護期,舉例來說, RHEL 與 CentOS
每一個版本至少提供五年以上的更新期限。這對於我們的系統安全性來說,實在是非常好的選項!
何解?既然 yum 可以自動升級,加上原廠會持續維護軟體更新,那麼我們的系統就能夠自己保持在軟體最新的狀態,
對於資安來說當然會比較好一些的!
此外,由於 RPM 與 yum 具有容易安裝/移除/升級等特點,且還提供查詢與驗證的功能,安裝時更有數位簽章的保護,
讓你的軟體管理變的更輕鬆自在!因此,當然首選就是利用 RPM 來處理啦!
選擇軟體官網釋出的 RPM 或者是提供的軟體庫網址:
不過,原廠並不會包山包海,因此某些特殊軟體你的原版廠商並不會提供的!舉例來說 CentOS
就沒有提供 NTFS 的相關模組。此時你可以自行到官網去查閱,看看有沒有提供相對到你的系統的 RPM 檔案,
如果有提供軟體庫網址,那就更好啦!可以修改 yum 設定檔來加入該軟體庫,就能夠自動安裝與升級該軟體!
你說方不方便啊!
利用 Tarball 安裝特殊軟體:
某些特殊用途的軟體並不會特別幫你製作 RPM 檔案的,此時建議你也不要妄想自行製作 SRPM 來轉成 RPM 啦!
因為你只有區區一部主機而已,若是你要管理相同的 100 部主機,那麼將原始碼轉製作成 RPM 就有價值!
單機版的特殊軟體,例如學術網路常會用到的 MPICH/PVM 等平行運算函式庫,這種軟體建議使用 tarball 來安裝即可,
不需要特別去搜尋 RPM 囉!
用 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 預設要啟動而已喔!
另外,在預設的情況下,你無須修改服務的設定檔,都透過系統預設值來處理你的服務即可!那麼有個江湖口訣你可以將它背下來~
讓你在處理服務的時候就不會掉漆了~
安裝: 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. enabled)
Active: active (running) since Wed
16:52:04 CST; 9s ago
Main PID: 8837 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic:
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
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、服務建立的第五步驟,測試一下有沒有成功!
22.4 SRPM 的使用 : rpmbuild (Optional)
談完了 RPM 類型的軟體之後,再來我們談一談包含了 Source code 的 SRPM 該如何使用呢?假如今天我們由網路上面下載了一個
SRPM 的檔案,該如何安裝他?又,如果我想要修改這個 SRPM 裡面原始碼的相關設定值,又該如何訂正與重新編譯呢?
此外,最需要注意的是,新版的 rpm 已經將 RPM 與 SRPM 的指令分開了,SRPM 使用的是 rpmbuild
這個指令,而不是 rpm 喔!
22.4.1 利用預設值安裝 SRPM 檔案 (--rebuid/--recompile)
假設我下載了一個 SRPM 的檔案,又不想要修訂這個檔案內的原始碼與相關的設定值,
那麼我可以直接編譯並安裝嗎?當然可以!利用 rpmbuild 配合選項即可。選項主要有底下兩個:
這個選項會將後面的 SRPM 進行『編譯』與『打包』的動作,最後會產生
RPM 的檔案,但是產生的 RPM 檔案並沒有安裝到系統上。當你使用 --rebuild 的時候,最後通常會發現一行字體:
Wrote: /root/rpmbuild/RPMS/x86_64/pkgname.x86_64.rpm
這個就是編譯完成的 RPM 檔案囉!這個檔案就可以用來安裝啦!安裝的時候請加絕對路徑來安裝即可!
--recompile
這個動作會直接的『編譯』『打包』並且『安裝』囉!請注意,
rebuild 僅『編譯並打包』而已,而 recompile 不但進行編譯跟打包,還同時進行『安裝』了!
不過,要注意的是,這兩個選項都沒有修改過 SRPM 內的設定值,僅是透過再次編譯來產生 RPM 可安裝軟體檔案而已。
一般來說,如果編譯的動作順利的話,那麼編譯過程所產生的中間暫存檔都會被自動刪除,如果發生任何錯誤,
則該中間檔案會被保留在系統上,等待使用者的除錯動作!
下載正確的 CentOS 版本中,
在 updates 軟體庫當中的 ntp 軟體 SRPM,請下載最新的那個版本即可,然後進行編譯的行為。
目前 (2015/09) 最新的版本為:ntp-4.2.6p5-19.el7.centos.1.src.rpm 這一個,所以我是這樣作的:
先下載軟體:wget http://vault.centos.org/7.1.1503/updates/Source/SPackages/ntp-4.2.6p5-19.el7.centos.1.src.rpm
再嘗試直接編譯看看:rpmbuild --rebuild ntp-4.2.6p5-19.el7.centos.1.src.rpm
上面的動作會告訴我還有一堆相依軟體沒有安裝~所以我得要安裝起來才行:
yum install libcap-devel openssl-devel libedit-devel pps-tools-devel autogen autogen-libopts-devel
再次嘗試編譯的行為:rpmbuild --rebuild ntp-4.2.6p5-19.el7.centos.1.src.rpm
最終的軟體就會被放置到: /root/rpmbuild/RPMS/x86_64/ntp-4.2.6p5-19.el7.centos.1.x86_64.rpm
上面的測試案例是將一個 SRPM 檔案抓下來之後,依據你的系統重新進行編譯。一般來說,因為該編譯可能會依據你的系統硬體而最佳化,
所以可能效能會好一些些,但是...人類根本感受不到那種效能優化的效果~所以並不建議你這麼作。此外,
這種情況也很能發生在你從不同的 Linux distribution 所下載的 SRPM 拿來想要安裝在你的系統上,這樣作才算是有點意義。
一般來說,如果你有需要用到 SRPM 的檔案,大部分的原因就是...你需要重新修改裡面的某些設定,讓軟體加入某些特殊功能等等的。
所以囉,此時就得要將 SRPM 拆開,編輯一下編譯設定檔,然後再予以重新編譯啦!下個小節我們來玩玩修改設定的方式!
22.4.2 SRPM 使用的路徑與需要的軟體
SRPM 既然含有 source code ,那麼其中必定有設定檔囉,所以首先我們必需要知道,這個
SRPM 在進行編譯的時候會使用到哪些目錄呢?這樣一來才能夠來修改嘛!
不過從 CentOS 6.x 開始 (當然包含我們的 CentOS 7.x 囉),因為每個用戶應該都有能力自己安裝自己的軟體,因此 SRPM
安裝、設定、編譯、最終結果所使用的目錄都與操作者的家目錄有關~鳥哥假設你用 root 的身份來進行 SRPM 的操作,
那麼你應該就會使用到下列的目錄喔:
/root/rpmbuild/SPECS
這個目錄當中放置的是該軟體的設定檔,例如這個軟體的資訊參數、設定項目等等都放置在這裡;
/root/rpmbuild/SOURCES
這個目錄當中放置的是該軟體的原始檔 (*.tar.gz 的檔案) 以及 config 這個設定檔;
/root/rpmbuild/BUILD
在編譯的過程中,有些暫存的資料都會放置在這個目錄當中;
/root/rpmbuild/RPMS
經過編譯之後,並且順利的編譯成功之後,將打包完成的檔案放置在這個目錄當中。裡頭有包含了
x86_64, noarch.... 等等的次目錄。
/root/rpmbuild/SRPMS
與 RPMS 內相似的,這裡放置的就是 SRPM 封裝的檔案囉!有時候你想要將你的軟體用 SRPM 的方式釋出時,
你的 SRPM 檔案就會放置在這個目錄中了。
早期要使用 SRPM 時,必須是 root 的身份才能夠使用編譯行為,同時原始碼都會被放置到 /usr/src/redhat/ 目錄內喔!
跟目前放置到 /~username/rpmbuild/ 的情況不太一樣!
此外,在編譯的過程當中,可能會發生不明的錯誤,或者是設定的錯誤,這個時候就會在
/tmp 底下產生一個相對應的錯誤檔,你可以根據該錯誤檔進行除錯的工作呢!
等到所有的問題都解決之後,也編譯成功了,那麼剛剛解壓縮之後

我要回帖

更多关于 北京pk杀号最准的方法 的文章

 

随机推荐