Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux RPM子包将不同的文件内容安装到同一文件位置_Linux_Apache_Rpm - Fatal编程技术网

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

Linux RPM子包将不同的文件内容安装到同一文件位置,linux,apache,rpm,Linux,Apache,Rpm,我有一个存储库,用于构建RPM以部署apache配置设置。到目前为止,我为两台不同的服务器提供了两种不同的回购协议。现在,我在构建中又添加了三种服务器类型,不想为了简单的配置更改而继续创建repo。配置设置类似,但略有不同。有些使用相同的文件,有些使用不同的文件,有些使用相同的文件但内容不同(如代理配置/证书定义等) 我开始考虑使用RPM子包功能。但是,我遇到了命名相同但内容略有不同的文件的问题。以下是我的等级库文件的示例: Summary: Installs http conf files.

我有一个存储库,用于构建RPM以部署apache配置设置。到目前为止,我为两台不同的服务器提供了两种不同的回购协议。现在,我在构建中又添加了三种服务器类型,不想为了简单的配置更改而继续创建repo。配置设置类似,但略有不同。有些使用相同的文件,有些使用不同的文件,有些使用相同的文件但内容不同(如代理配置/证书定义等)

我开始考虑使用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,apache) /etc/httpd/conf.d/ssl.conf
%config %attr(0440,apache,apache) /etc/httpd/conf/httpd.conf

%files srv2

%config %attr(0440,apache,apache) /etc/httpd/conf.d/apiproxy.conf
%config %attr(0440,apache,apache) /etc/httpd/conf.d/proxy.conf
%config %attr(0440,apache,apache) /etc/httpd/conf.d/rewrite.conf
%config %attr(0440,apache,apache) /etc/httpd/conf.d/ssl.conf
%config %attr(0440,apache,apache) /etc/httpd/conf/httpd.conf
这确实构建了两个rpm:web-conf-1.0-1.noarch.rpm和web-conf-srv2-1.0-1.noarch.rpm。但是,问题是位于同一位置的文件是相同的文件(如果它们应该是不同的)。prep部分显示了两个不同的源被卸载到srv1和srv2目录中。但是,当install部分从rpmbuild进程输出时,它只显示在处理两个不同的
%文件之前将cd放入srv2目录


在处理
%文件
部分之前,是否有办法强制
%安装
部分使用不同的目录?我做错了什么?子包不是这里的方法吗?

不是。这是不可能的。%files部分中的所有文件都来自同一个buildroot。因此,具有相同路径的两个文件必须具有相同的内容。

一般来说,RPM不能用作机器特定配置的打包。使用Ansible管理配置。