Linux知識掃盲: 什麼是 RPM 與 SRPM

  什麼是 RPM 與 SRPM

  RPM 全名是『 RedHat Package Manager 』簡稱則爲 RPM 啦!顧名思義,當初這個套件管理的程序是由 Red Hat 這家公司發展出來的,但其實在很多的其它套件也有相類似的套件管理程序。不過由於 RPM 使用上很方便,所以就成了目前最熱門的套件管理程序啦!

  那麼什麼是 RPM 呢?說的簡單一點, RPM 是以一種數據庫記錄的方式來將你所需要的套件安裝到你的 Linux 主機的一套管理程序。他最大的特點就是將您要安裝的套件先編譯過( 如果需要的話 )並且打包好了,透過包裝好的套件裏頭預設的數據庫記錄,記錄這個套件要安裝的時候必須要的相依屬性模塊( 就是你的 Linux 主機需要先存在的幾個必須的套件 ),當安裝在你的 Linux 主機時, RPM 會先依照套件裏頭的紀錄數據查詢 Linux 主機的相依屬性套件是否滿足,若滿足則予以安裝,若不滿足則不予安裝。那麼安裝的時候就將該套件的信息整個寫入 RPM 的數據庫中,以便未來的查詢、驗證與反安裝!這樣一來的優點是:

  1. 由於已經編譯完成並且打包完畢,所以安裝上很方便( 不需要再重新編譯 );

  2. 由於套件的信息都已經記錄在 Linux 主機的數據庫上,很方便查詢、升級與反安裝;

  但是這也造成很大的困擾,由於 RPM 程序是已經包裝好的數據,也就是說,裏面的數據已經都『編譯完成』了!所以,安裝的時候一定需要當初安裝時的主機環境才能安裝,也就是說,當初建立這個套件的安裝環境必須也要在你的主機上面出現才行!例如 rp-pppoe 這個 ADSL 撥接套件,他必須要在 ppp 這個套件存在的環境下才能進行安裝!如果你的主機並沒有 ppp 這個套件,那麼很抱歉,除非您先安裝 ppp 否則 rp-pppoe 就是不讓你安裝的( 當然您可以強制安裝,但是通常都會有點問題發生就是了! )。所以,通常不同的 distribution 所釋出的 RPM 檔案,並不能用在其它的 distributions 裏面,舉例來說, Red Hat 釋出的 RPM 檔案,通常無法直接在 Mandrake 上面進行安裝的,更有甚者,不同版本之間也無法互通,例如 Mandrake 9.0 的 RPM 檔案就無法直接套用在 8.2 上面!因此,這樣可以發現他的缺點是:

  1. 安裝的環境必須與打包時的環境需求一致或相當;

  2. 需要滿足套件的相依屬性需求;

  3. 反安裝時需要特別小心,最底層的套件不可先移除,否則可能造成整個系統的問題!

  那怎麼辦?呵呵!還好,還有 SRPM 這個東西! SRPM 是什麼呢?顧名思義,他是 Source RPM 的意思,也就是這個 RPM 檔案裏面含有原始碼( Source Code )哩!特別注意的是,這個 SRPM 所提供的套件內容『並沒有經過編譯』,他提供的是原始碼喔!通常 SRPM 的附檔名是以 ***.src.rpm 這種格式來命名的。不過,既然 SRPM 提供的是原始碼,那麼爲什麼我們不使用 Tarball 直接來安裝就好了?!這是因爲 SRPM 雖然內容是原始碼,但是他仍然含有該套件所需要的相依性套件說明、以及所有 RPM 檔案所提供的數據,同時,他與 RPM 不同的是,他也提供了參數設定檔( 就是 configure 與 makefile 啦! )。所以,如果我們下載的是 SRPM ,那麼要安裝該套件時,RPM 套件管理員將會(1)先將該套件以 RPM 管理的方式編譯,(2)然後將編譯完成的 RPM 檔案安裝到 Linux 系統當中。與 RPM 檔案相比, SRPM 多了一個重新編譯的動作,而且 SRPM 編譯完成會產生 RPM 檔案。

  怪了,怎麼 SRPM 這麼麻煩吶!還要重新編譯一次,那麼我們直接使用 RPM 來安裝不就好了!?通常一個套件在釋出的時候,都會同時釋出該套件的 RPM 與 SRPM 。我們現在知道 RPM 檔案必須要在相同的 Linux 環境下才能夠安裝,而 SRPM 既然是原始碼的格式,自然我們就可以透過修改 SRPM 內的參數設定檔,然後重新編譯產生能適合我們 Linux 環境的 RPM 檔案,如此一來,不就可以將該套件安裝到我們的系統當中,而不必與原作者打包的 Linux 環境相同了?這就是 SRPM 的用處了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章