1 回答

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