Linux RPM子软件包将不同的文件内容安装到相同的文件位置

问题描述

我有一个可以构建RPM来部署apache配置设置的存储库。到目前为止,我为两个不同的服务器有两个不同的存储库。现在,我要在构建中添加另外三种服务器类型,并且不想继续为简单的配置更改创建存储库。配置设置相似,但略有不同。有些使用相同的文件,有些使用不同的文件,有些使用相同的文件但内容不同(例如代理配置/证书定义/等)。

我开始研究使用RPM子包功能。但是,我遇到了文件命名相同但内容稍有不同的问题。这是我的规格文件的示例:

Summary: Installs http conf files.
Name: web-conf
Version: 1.0
Release: 1
SOURCE0 : %{name}-%{version}-%{release}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildArch: noarch

%description

%Summary

%package srv2
Summary: Installs srv2 http conf files.
SOURCE1 : %{name}-srv2-%{version}-%{release}.tar.gz
%description srv2

%Summary

%prep

%setup -q -c -n "srv1"
%setup -c -T -b 1 -n "srv2"

%build
# Empty section.

%install
rm -rf %{buildroot}

mkdir -p %{buildroot}

# in builddir

/bin/cp -Ra * %{buildroot}

%clean

/bin/rm -rf %{buildroot}

%files

%config %attr(0440,apache,apache) /etc/httpd/conf.d/rewrite.conf
%config %attr(0440,apache) /etc/httpd/conf.d/ssl.conf
%config %attr(0440,apache) /etc/httpd/conf/httpd.conf

%files srv2

%config %attr(0440,apache) /etc/httpd/conf.d/apiproxy.conf
%config %attr(0440,apache) /etc/httpd/conf.d/proxy.conf
%config %attr(0440,apache) /etc/httpd/conf/httpd.conf

这确实构建了两个RPM:web-conf-1.0-1.noarch.rpm和web-conf-srv2-1.0-1.noarch.rpm。但是,问题在于,位于相同位置的文件是相同的文件(假设它们是不同的)。准备部分显示了两个不同的源,它们已解压缩到srv1和srv2目录中。但是,当rpmbuild过程中的install部分输出时,它只显示在对两个不同的%files部分进行处理之前将cd放入srv2目录。

是否有一种方法可以强制%install节在处理%files节之前使用不同的目录?我究竟做错了什么?子包不是到这里去的方式吗?

解决方法

不。无法完成。 %files部分中的所有文件均来自同一buildroot。因此,具有相同路径的两个文件必须具有相同的内容。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...