一種可能的不同方法來考慮。
如果您想要的包可以通過您正在使用的 Linux 發行版的標準包管理器進行安裝,您可以構建一個元包,該包在安裝時將強制安裝所有組件。(元數據包本身不直接包含任何軟件,但它列出了包管理器在安裝它時需要滿足的一些依賴項。)
如果您還在包含您的元包的 http 服務器上設置了一個存儲庫,并將客戶端上的包管理器配置為指向它,那么如果您稍后決定在所有客戶端計算機上更新標準軟件套件中包含的包列表,您需要做的就是將元數據包的新版本發布到存儲庫,并讓客戶端計算機重新運行其操作系統的軟件更新程序。對于元數據包中列出的各個軟件組件,軟件更新將以普通方式獲取對這些組件的任何更新,前提是元數據包中的依賴信息未指定確切的版本(您可以使元數據包依賴于>=
某個版本號).
這是根據這種方法在跨大量機器(包括計算集群的節點)建立和維護通用軟件平臺方面運行良好的經驗——盡管在標準包存儲庫中沒有所需軟件組件的情況下,然后有必要在本地為它構建一個包并將其發布到您的存儲庫;然后可以將其作為要求添加到您的元包中。
以上是籠統的說法,但以本經驗所基于的具體示例為例,如果客戶端機器運行 CentOS,那么您將創建一個元 RPM,它依賴于標準存儲庫(例如 base 和 EPEL)中的包以及任何您需要在本地構建的其他 RPM,將其發布到 http 服務器上的存儲庫并用于createrepo
構建必要的存儲庫元數據,并/etc/yum.repo.d
在客戶端上創建一個配置文件以指向您的存儲庫并運行yum install <your_meta_package>
. 客戶端上的任何后續yum update
操作都會獲取您推送到存儲庫的任何更改。http 服務器本身只是提供靜態內容,因此不需要特殊配置。
對于 Ubuntu 等,你可以做類似的事情,但使用 deb 包和 APT。
值得一提的是,以上內容針對的是一個相當同構的環境,其中所有客戶端機器都使用相同的操作系統。如果您想迎合更加異構的環境,那么另一種方法是使用 conda。您可以類似地維護一個包含元包的 conda 通道。