- 如果能夠將軟件預先在相同的硬件與操作系統上編譯好才發佈的話,不就能夠讓相同的 Linux發行版有完全一致的軟件版本嗎?
- 如果再加上簡易的安裝、刪除、管理等功能的話,軟件管理就會簡易得多。
- 有這種東西嗎?
- RPM與YUM
22.1軟件管理器簡介
- 前一章提到以源碼方式安裝軟件,也就是用廠商發佈的Tarball來安裝
- 每次安裝軟件都要檢測
- 操作系統環境、設置編譯參數、實際的編譯,
- 最後還要安裝軟件到特定位置
- 如果我的Linux系統與廠商的系統一模一樣,那麼廠商的系統上面編譯出來的執行文件,自然也就可在我的系統上運行
- 廠商先在它們的系統上面編譯好用戶所需軟件
- 然後將這個編譯好的可執行的軟件直接發佈給用戶來安裝,
- 由於我們本來就使用廠商的Linux發行版
- 所以系統(硬件與操作系統)是一樣的
- 那麼使用廠商提供的編譯過的可執行文件就沒有問題
- 如果在安裝時候還可以加上ー些與這些程序相關的信息,將它建立成爲數據庫,不就可安裝、反安裝、升級與驗證
- Linux上至少就有兩種這方面的軟件管理器,RPM與 Debian的dpkg
- Centos以RPM爲主,但也不能不知道dpkg
22.1.1 Linux界的兩大主流:RPM與DPKG
- 自由軟件的蓬勃發展,加上大型UNX-ike主機的強大性能,很多軟件開發者將他們的軟件用Tarball發佈
- Linux發展起來後,一些企業或社區將這些軟件收集起來製作成爲 Linux.發行版以便大家使用。
- 但後來發現到,這些 Linux發行版的軟件管理實在傷腦筋,軟件有漏洞時,又該如何修補?
- 用Tarball A的方式來管理嗎?又常常不曉得到底我們安裝過了哪些程序?因此,一些社區與企業就開始思考 Linux的軟件管理方式。
- Linux開發商先在固定的硬件平合與操作系統平合上面將需要安裝或升級的軟件編譯好,然後將這個軟件的所有相關文件打包成爲一個特殊格式的文件,在這個軟件安裝文件內還包含了預先檢測系統與依賴軟件的腳本,並提供記錄該軟件提供的所有文件信息等,最終將這個
軟件安裝文件發佈。 - 客戶端獲取這個文件後,只需通過特定的命令來安裝,那麼該文件就會依照內部的腳本來檢測依賴的輔助軟件是否存在,若安裝的環境符合需求,那就會開始安裝,安裝完成後還會將該軟件的信息寫入軟件管理機制中,以便未來可進行升級、刪除
- 目前Linux界軟件安裝方式最常見的有兩種
- dpkg
- 最早是由 Debian Linux社區所開發,通過dpkg的機制, Debian提供的軟件就能夠簡單地進行安裝,同時還能提供安裝後的軟件信息,非常不錯。只要是衍生於 Debian的 Linux發行版大多使用dpkg這個機制來管理軟件,包括B2D、 Ubuntu等。
- RPM
- 最早由Red Hat開發,後來實在很好用,因此很多發行版就使用這個機制來作爲軟件安裝的管理方式。
- 包括 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)等。
- 用的是Centos系統。
- 所以:使用的軟件管理機制爲RPMM,
- 而用來作爲在線升級的方式則爲YUM。
- 下面看看RPM與YUM的相關說明。
22.1.2 RPM與SRPM
- Redhat Package Manager
- RPM是以一種數據庫記錄的方式來將你要的軟件安裝到你的Linux系統
- 的一套軟件管理機制。
-
你要安裝的軟件先編譯過
- 打包成爲RPM機制的文件
- 通過打包好的軟件裏面默認的數據庫
- 記錄這個軟件要安裝的時候必須具備的依賴屬性軟件
-
安裝時,RPM會先依照軟件裏面的數據查詢Linux主機的依賴屬性軟件是否滿足,滿足安裝,不滿足則不安裝
-
安裝時就將該軟件的信息整個寫入RPM的數據庫,以便未來查詢、驗證與反安裝。
-
1.由於已經編譯完成並且打包完畢,所以軟件傳輸與安裝上很方便
-
2.軟件信息都記錄在Linux主機的數據庫上,方便查詢、升級與反安裝,但這RPM文件是已經打包好的數據,裏面的數據已經都
【編譯完成了,所以,該軟件安裝文件幾乎只能安裝在原本默認的硬件與操作系統版本中。你的主機系統環境必須要與當初建立這個軟件安裝文件的主機環境相同才行。 -
rp- pppoe這個ADSL撥號軟件,必須要在ppp這個軟件存在的環境下才能安裝
-
如果你的主機沒有ppp這個軟件,那麼抱歉,除非你先安裝ppp
-
否則rp-ppoe就是不讓你安裝的(當然你可以強制安裝,但是通常都會有點問題發生)。
- 不同Linux發行版所發佈的RPM文件,不能用在其他的Linux發行版上。
- Red Hat發佈的RPM文件,通常無法直接在SUSE上面安裝。
- 相同Linux發行版的不同版本之間也無法互通,
- Centos6.x的RPM文件就無法直接用在 Centos7.x。
1.軟件安裝的環境必須與打包時的環境需求一致或相當
2.需要滿足軟件的依賴屬性需求
3.反安裝時要特別小心,最底層的軟件不可先刪除,否則可能造成整個系統的問題
- Centos6.x的RPM文件就無法直接用在 Centos7.x。
- 如果要安裝其他 Linux發行版提供的RPM軟件包時?
- 還有SRPM。
- Source RPM,
- 也就是這個RPM文件裏面含源代碼
- SRPM所提供的軟件內容【並沒有經過編譯),它提供的是源代碼。
- SRPM的擴展名是***.src.rpm
- SRPM提供的是源代碼,那麼爲什麼不用 Tarball直接來安裝?
- SRPM雖然是源代碼,但仍有該軟件所需要的依賴性軟件及所有RPM文件所提供的數據
- 與RPM不同,它也提供參數配置文件(就是configure與makefile)。
- 所以,如果下載SRPM,那麼安裝該軟件時,必須要先將該軟件以RPM管理的方式編譯,此時SRPM會被編譯成爲RPM文件然後將編譯完成的RPM文件安裝到 Linux系統
- 通常一個軟件在發佈的時候,都會同時發佈該軟件的RPM與SRPM。
- RPM文件必須要在相同的Lnux環境下才能夠安裝,而SRPM既然是源代碼的格式,自然就可修改SRPM內的參數配置文件,然後重新編譯產生能適合我們 Linux的RPM文件,就可以將該軟件安裝到我們的系統中,而不必與原作者打包的 Linux環境相同
22.1.3 i386、i586、i686、 noarch、X86_64
- 每一次更新版本就需要有一個版本的信息,又分主版本跟次版本。
- 主版本爲3,在主版本的架構下修改部分源代碼內容,而發佈一個新的版本,就是次版本。就是11,所以版本名就爲3.11
- 發佈版本次數
- 通常就是編譯的次數。
- 那麼爲何要重複編譯?
- 同一版的軟件中,由於有某些bug或安全上的顧慮,
- 必須要進行小幅度patch或重設一些編譯參數,
- 設置完成後重新編譯並打包成RPM文件,
- 就有不同的打包數出現
- 操作硬件平臺
- RPM可以適用在不同的操作平合上,
- 不同的平臺設置的參數還是有所差異性。
- 高級的CPU來優化參數的設置,
- 這樣才能夠用高級CPU所帶來的硬件加速,
- i386、i586、i686、X86_64、 noarch等版本的文件出現
- 2015年爲止,就算是舊的個人計算機,堪用與能用的設備大概都至少是 Intel Core2以上等級的計算機,大多數都是64位系統。
- 因此目前entos7僅推出x86_64的軟件版本,並沒有提供i686以下級別的軟件。
- 如果你的系統還是很老舊的機器,那纔有可能不支持64位的 Linux系統。
- 目前僅存的軟件版本大概也只剩下i686及x8664還有不分版本的 noarch而已i386只有在某些很特別的軟件上纔看到。
受惠於目前X86系統的支持方面,新的CPU都能夠執行舊型CPU所支持的軟件,也就是說硬件方面都可以向下兼容的,因此最低級別的i386軟件可以安裝在所有的x86硬件平臺上面,不論是32位還是64位,
- 目前硬件大多是64位的,因此你可以在該硬件上面
安裝x8664或386級別的RPM軟件。但在你的舊型主機,例如 Pentium I/ Pentium432位機器上面,就不能夠安裝x8664的軟件。
- 只要選擇i686版本來安裝在你的x86硬件上面就肯定沒問題。
- 但如果強調性能的話,還是選擇搭配你硬件的RPM文件吧!畢竟該軟件纔有針對你的CPU硬件平臺進行過參數優化的編譯嘛。