這是一個規範問題關於何時使用打包軟體以及何時自行建置和安裝它。
我什麼時候應該從作業系統發行版提供的軟體包中安裝軟體,而不是自己從原始碼建置和安裝它?什麼時候從原始碼構建更好?
答案1
您應該使用您的發行版的軟體包,除非您有充分的理由不這樣做。使用該發行版的軟體包可以為您帶來重要的好處:
- 安裝和卸載軟體包並使其保持最新的工作量更少。
- 打包系統將自動安裝軟體的依賴項,並使其保持最新。
- 發行版會自動為您提供安全性更新,因此您不必追蹤它們或擔心丟失它們。
- 打包系統將以您的發行版的首選方式進行配置。例如,在基於 apt 的系統上,Apache 附帶安裝在 /etc/apache2/*-enabled 中的符號鏈接,以及使用它們來啟用或停用 Apache 功能的工具(a2enconf、a2enmod 等)。雖然最初這可能需要您花更多的時間來學習,但從長遠來看,如果您使用發行版的本機工具和做事方式,您的生活會更輕鬆,您的配置也會更好地整合。
如果您需要使用比您的發行版提供的更新版本的某些軟體,或啟用必須編譯的功能,您可以從社群儲存庫中找到該軟體包的更多最新版本或功能豐富的版本。 Remi 的倉庫是一個眾所周知的例子,除此之外,它提供了比 RHEL/CentOS 附帶的版本更新得多的 PHP 版本。使用社群儲存庫可以讓您獲得作業系統儲存庫的許多優勢,但也存在作者發布惡意軟體的風險,然後您可以以完全權限將其安裝到您的系統上。您必須根據具體情況自行做出風險/回報判斷。
如果這些替代方案都不適合您,您將需要從原始程式碼編譯。當從原始碼編譯軟體時,建議的路線是創建您自己的二進制包。建立自己的軟體包使您能夠:
- 使用您的發行版的套件管理系統進行分發、安裝、依賴項管理、報告、升級、降級和刪除。
- 將建置工具和開發庫限制在單一建置主機上(而不是將它們安裝在所有測試和生產伺服器上)。
- 依照常見的發布路徑,先在測試環境中部署軟體包,然後再在生產環境中部署相同的軟體包。
因為這使得你是包維護者,您將需要訂閱相關的安全郵件列表,這樣您就不會錯過任何嚴重的錯誤和安全性更新。
如果您最終安裝了本地建置的軟體而不打包它,GNU 儲存可以幫助保持其井井有條,並使其更容易乾淨地卸載。
答案2
我喜歡安德魯的回應。
我想指出一個具體內容,以補充安德魯關於“更好的整合”的評論。如果您從原始程式碼安裝應用程式(未來專案的依賴項),然後嘗試從二進位檔案(例如 deb 或 rpm 套件)安裝程式包,則該套件可能無法識別已安裝的依賴項。如果您從 RPM 或 DEB 軟體包安裝了初始依賴項應用程序,則未來的軟體包將知道它已安裝。使用相同的打包方法(例如,yum、pip、rpm 等)是最佳實踐。從源安裝是另一種方法。所以安德魯所說的輕鬆是一個認真的考慮。
我想補充一點,「創建您自己的二進制包」有一個好處是記錄安裝過程。從來源檔案安裝沒有日誌記錄的好處。