我正在编写一些RPM安装YUM回购configuration文件的各种内部YUM仓库,与EPEL回购RPM相同的结构和概念。
我们将有多个具有同等回购的环境,所以我们使用yum优先级插件来确保在部署序列(即QA)中较早的环境回收优先于那些晚些时候(即生产)的环境回收。 我们还复制了我们在内部镜像上使用的CentOS版本。 我们已经完成了所有这些工作,包括发布这些repoconfigurationRPM,但是还有一个特殊情况,那就是我需要一些build议来处理devise问题。
那就是:CentOS base repoconfiguration文件/etc/yum.repos.d/CentOS-Base.repo是由centos-release RPM拥有的,所以我不能在没有replace这个系统RPM的情况下在我自己的RPM里覆盖这个,我不想这样做。 但是,我需要对此文件进行一些更改,以便与上述devise一起使用。 在每个回购部分,
我需要改变这些行:
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
为了这些路线:
mirrorlist=http://mirrorlist.MYCOMPANY.com/?platform=centos&release=$releasever&arch=$basearch&repo=os #baseurl=http://mirror.MYCOMPANY.com/centos/$releasever/os/$basearch/
priority=2
我目前正在创build一个安装了/etc/yum.repos.d/CentOS-Base-pr.repo的RPM,然后在%post中将现有的CentOS-Base.repo重命名为CentOS-Base.repo.orig,然后将新的CentOS-Base-pr.repo重新命名为CentOS-Base.repo。 在%postun中,它反转这个来恢复原来的文件。 我觉得这是有效的,但是有点混乱。
我想要做的是安装没有文件,但运行一个sed脚本来对%post中的原始CentOS-Base.repo文件进行这些更改,并运行另一个sed脚本来反转%postun中的更改。 这使我能够以同样的方式处理我们所有自定义回购的安装/卸载,并为现有回购和新回购提供一致的结果。
我不知道的是 – 当你试图将这种types的configuration“调整”到由其他RPM安装的现有文件时,这是一个有效或推荐的方法吗?
在我得到这个效果的答案之前,我们使用Chef来进行类似于这个的大多数RPMconfiguration,但是不希望在这种情况下使用它,因为我们不希望在repo config中有特殊情况只是这一个实例,我们正试图使用RPM封装其他地方RPM中的“繁重”安装/升级逻辑。 我们希望我们自己的软件像其他开源软件一样运行,因为它可以安装和运行,而不依赖Chef进行基本的安装,Chef仅用于定制(即Chef如何configurationnginx或tomcat)。
预先感谢您的任何build议…
如果你喜欢,可以自己使用脚本或embedded在rpm中的脚本。 我喜欢使用空的或元转的创build自己的虚拟组或做某些任务的想法。 在这种情况下,我会担心一个后来的centos-release包会把我的改变吹走。 如果您的软件包中包含您需要的文件,并且使用--replacefiles选项安装,那么跟踪此操作似乎会更容易一些。