rpm.spec文件中的多个tar(源文件)文件

我已经想出了一个Linux上的集中式日志logging服务器。 在这一点上,我正在尝试整合以使其他的机器更容易加载。 我想有一个RPM,将一次安装多个程序。 我正在使用CentOS 7服务器。 我正在寻找打包到rpm的程序将是:

eventlog 2.12 libdbi 0.9.0 freetds 0.91 libdbi-drivers 0.9.0 json-c syslog-ng 3.5.6 

我一直在做很多的RPM阅读,只是很难理解如何将多个源文件合并到一个RPM中。 我的来源安装这些,而不是只是百胜安装他们的原因是因为我需要在“./configure – 启用示例”中调用的configuration。 所以我有源代码在我的机器上安装了所有这些程序,然后我tarred他们备份,并试图使用该文件作为来源。 任何想法或任何人可以指出我在正确的方向将不胜感激。

您可以根据需要列出尽可能多的Source行,并在需要匹配的spec文件中包含尽可能多的%setup宏调用。

从在线最大RPM书籍的“多来源规范文件”部分的使用%设置中,我们找到:

就本例而言,我们的spec文件将有以下三个源标签:[1]

  source: source-zero.tar.gz source1: source-one.tar.gz source2: source-two.tar.gz 

解开第一个源头并不难; 所有这一切都需要使用%设置没有选项:

 %setup 

这产生了以下一组命令:

 cd /usr/src/redhat/BUILD rm -rf cdplayer-1.0 gzip -dc /usr/src/redhat/SOURCES/source-zero.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi cd cdplayer-1.0 cd /usr/src/redhat/BUILD/cdplayer-1.0 chown -R root.root . chmod -R a+rX,gw,ow . 

….

现在我们添加第二个源文件。 事情在这里变得更有意思了。 首先,我们需要确定我们正在谈论哪个源标签(以及哪个源文件)。 因此,我们需要使用-a或-b选项,具体取决于源归档的特征。 对于这个例子,假设-a是我们想要的选项。 添加该选项,加上“1”指向source1标签中指定的源文件,我们有:

 %setup -a 1 

由于我们已经看到,使用-a或-b选项会导致重复的解包,因此我们需要通过添加-T选项来禁用默认的解包:

 %setup -T -a 1 

接下来,我们需要确保顶层目录不被删除。 否则,我们刚刚解包的第一个源文件将不复存在。 这意味着我们需要包含-D选项来防止这种情况的发生。 添加这个最后的选项,并在我们的%准备脚本中包括现在完整的宏,我们现在有:

 %setup %setup -T -D -a 1 

这将导致以下命令:

 cd /usr/src/redhat/BUILD rm -rf cdplayer-1.0 gzip -dc /usr/src/redhat/SOURCES/source-zero.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi cd cdplayer-1.0 cd /usr/src/redhat/BUILD/cdplayer-1.0 chown -R root.root . chmod -R a+rX,gw,ow . cd /usr/src/redhat/BUILD cd cdplayer-1.0 gzip -dc /usr/src/redhat/SOURCES/source-one.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi cd /usr/src/redhat/BUILD/cdplayer-1.0 chown -R root.root . chmod -R a+rX,gw,ow . 

到现在为止还挺好。 让我们包含最后一个源文件,但是用这个文件,我们会说它需要在cdplayer-1.0的一个名为database的子目录中解压缩。 在这种情况下,我们可以使用%setup吗?

我们可以,如果source-two.tgz创建了数据库子目录。 如果不是的话,那就有必要手工做。 就我们的例子而言,假设source-two.tgz没有被创建为包含数据库子目录,所以我们必须自己做。 这里是我们的%准备脚本现在:

 %setup %setup -T -D -a 1 mkdir database cd database gzip -dc /usr/src/redhat/SOURCES/source-two.tar.gz | tar -xvvf - 

这是最终的脚本:

 cd /usr/src/redhat/BUILD rm -rf cdplayer-1.0 gzip -dc /usr/src/redhat/SOURCES/source-zero.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi cd cdplayer-1.0 cd /usr/src/redhat/BUILD/cdplayer-1.0 chown -R root.root . chmod -R a+rX,gw,ow . cd /usr/src/redhat/BUILD cd cdplayer-1.0 gzip -dc /usr/src/redhat/SOURCES/source-one.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi mkdir database cd database gzip -dc /usr/src/redhat/SOURCES/source-two.tar.gz | tar -xvvf - 

我们添加的三个用于解包最后一组源代码的命令被添加到%prep脚本的末尾。