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

时间:2015-04-07 21:34:00

标签: linux centos rpm centos7

我在linux上提出了一个集中式日志记录服务器。在这一点上,我正在努力巩固,使事情更容易加载到另一台机器上。我希望有一个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中。我安装这些的原因而不仅仅是yum安装它们是因为我需要在" ./ configure --enable-example"中调用配置。所以我有源在我的机器上安装了所有这些程序,然后我将它们备份并尝试将该文件用作源。任何能够指出我正确方向的想法或任何人都将不胜感激。

1 个答案:

答案 0 :(得分:15)

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

从在线最高RPM书籍的Using %setup in a Multi-source Spec File部分我们发现:

  

出于本示例的目的,我们的spec文件将包含以下三个源标记:[1]

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

解压第一个来源并不难;所需要的只是使用%setup而没有选项:

%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,g-w,o-w .
     

...

     

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

%setup -a 1
     

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

%setup -T -a 1
     

接下来,我们需要确保不删除顶级目录。否则,我们刚刚解压缩的第一个源文件将会消失。这意味着我们需要包含-D选项以防止这种情况发生。添加这个最终选项,并在我们的%prep脚本中包含现在完整的宏,我们现在有:

%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,g-w,o-w .
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,g-w,o-w .
     

到目前为止,这么好。让我们包含最后一个源文件,但是有了这个,我们会说它需要在cdplayer-1.0的子目录中解压缩,称为数据库。在这种情况下我们可以使用%setup吗?

     

如果source-two.tgz创建了数据库子目录,我们可以。如果没有,那么就必须手工完成。出于我们的示例的目的,假设source-two.tgz未创建为包含数据库子目录,因此我们必须自己完成。这是我们现在的%prep脚本:

%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,g-w,o-w .
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脚本的末尾。