源 RPM 與使用 rpm2cpio 和 cpio 解壓 RPM 有何不同?
我試圖了解 .srpm 又名“源 rpm”紅帽軟體包管理器軟體包的使用。
據我目前了解,.srpm 與標準 .rpm 的不同之處在於它提供原始碼並且在開發過程中常用。我很困惑為什麼這很有用,因為如果我執行
rpm2cpio ./myrpm-1.1-1.x86_64.rpm | cpio -idmv
,我仍然可以查看原始碼。據我了解,即使是標準 RPM 也會下拉包含原始碼的 .tar.gz/bz 文件,並最終建構它。您能否澄清一下源 RPM 有何不同以及我為什麼要使用一個?
我從未聽說過會拉下原始碼的 RPM。也許有一些這樣做,但我會說它們很少見。srpm 包包括原始碼和建構 rpm 包的說明。rpm 包已編譯程式碼,您可以執行這些程式碼,它們不包含原始碼。也有例外。例如:Perl、python、PHP 等不會像 C 或 C++ 程序那樣編譯成二進制。對於這些 rpm 包,源文件包括在內,因為它們是即時解釋或編譯的 (JIT)。所以沒有編譯的二進製文件,而是直接使用原始碼。
當你想建構 rpm 包時,你通常會下載一個 srpm 並安裝它。然後你進入安裝spec文件的rpmbuild/SPECS目錄。然後你執行:
rpmbuild -bb <package>.spec
這將建構 rpm(s)。一個 srpm 規範產生更多 rpm 包是很常見的:
<package>.rpm <package>-devel.rpm ...
建構的 rpm 包儲存在 rpmbuild/RPMS 中。然後您可以安裝 rpm 軟體包,這些軟體包會安裝您可以執行的實際程序。
從 rpm 包中解壓文件與安裝 rpm 包有很大不同。通過解封包件,您可以獲得封包件。您可能會嘗試從提取的封包件中執行程序,但它很有可能無法執行。安裝 rpm 包意味著 rpm 確保也安裝了該程序所需的所有庫。如果在安裝之前或之後需要任何其他操作,rpm 包中的腳本將確保它們將被執行。一些程序可能需要一個數據庫,需要在安裝時創建,另一個可能需要重新執行 ldconfig 以更新庫記憶體,另一個可能需要建構手冊等。如果您只是從 rpm 中提取文件,這些腳本將不會被執行。