我有一堆工具(nagios、munin、puppet 等)安装在我的所有服务器上。我正在构建本地 yum 存储库。我知道大多数人只是将所有 rpm 转储到一个文件夹中(分解为正确的路径),然后在目录中运行 createrepo。但是,如果您必须更新 rpm 会发生什么?
我问是因为我要把每个软件都放到它自己的文件夹中。
示例一,将所有包放在一个文件夹中(custom_software)
/admin/software/custom_software/5.4/i386
/admin/software/custom_software/5.4/x86_64
/admin/software/custom_software/4.6/i386
/admin/software/custom_software/4.6/x86_64
我在想什么...
/admin/software/custom_software/nagios/5.4/i386
/admin/software/custom_software/nagios/5.4/x86_64
/admin/software/custom_software/nagios/4.6/i386
/admin/software/custom_software/nagios/4.6/x86_64
/admin/software/custom_software/puppet/5.4/i386
/admin/software/custom_software/puppet/5.4/x86_64
/admin/software/custom_software/puppet/4.6/i386
/admin/software/custom_software/puppet/4.6/x86_64
这样,如果我必须更新到最新版本的 puppet,我可以相应地保存管理文件。如果我将它们放入一个大文件夹中,我将不知道哪些 rpm 属于哪个软件。说得通?
createrepo
我相信对于您支持的每个不同版本,您都需要一个单独的存储库,其中包含由 生成的数据。这样你就有了一个 yum 通过你的 .repo 文件知道的目录。您提出的第一个方法将允许您这样做。使用第二种方法,您最终不得不为您维护的每个包创建存储库数据,这似乎是一场噩梦,因为您必须为每个包拥有存储库数据。
此外,我不会在您的存储库中构建(这是我能想到的通过软件将其分离的唯一原因)。
rpmdev-setuptree
使用(在包中提供)设置您的构建环境rpmdevtools
,构建 rpm 并将它们从构建结构复制/移动到您的存储库结构(/<root_repo>/<release>/<arch>/<RPMS/SRPMS>
),然后通过createrepo
(或createrepo --update .
)在发布(5.4 / 4.6)目录中生成存储库数据.我认为将它们全部放入一个文件夹中效果很好。当你有一个新版本的包时,把它扔进去,然后使用 yum-utils 包中的“repomanage”删除旧版本。
混合使用两者:创建不同类型的 Repos 并将相关的 rpm 放入其中。
对于每个 repo,我们使用一个包含最新 rpm 的“staging”-variant。如果这些在测试机器上测试良好,那么这些 rpm 将进入实时存储库。
分段 rpm 可以自动化。
我将所有内容都集中到一个目录中。当更新出来时,我将 RPM 移到目录中并删除旧的。然后我跑
createrepo -v --update /PATH/TO/REPO
。