1 回答
TA贡献1840条经验 获得超5个赞
一种可能的不同方法来考虑。
如果您想要的包可以通过您正在使用的 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 通道。
添加回答
举报