创建RPM更新时更改文件成员

时间:2019-01-26 09:54:35

标签: rpmbuild rpm-spec

在过去的几年中,我们的应用程序已打包到一个rpm文件中,并带有通常编号的更新。现在,出于产品管理的目的,我想将一些文件分成第二个RPM。

从老%files文件的.spec部分删除文件并将它们添加到新的.spec文件中的正确方法是

例如,我们现在有myApp.rpm的来源:

/usr/local/myApp
+ bin/ {bunch of files here}
+ config/ {bunch of files here}
+ branding/

因此,当前的规范文件在其%files指令中列出了上面的所有内容。

要将branding分成单独的rpm而不弄乱包装?例如。

myApp.spec

Name: myApp
%install
  {make directories, copy everything but branding}
%files
/%{_prefix}/myApp
/%{_prefix}/myApp/bin/*
/%{_prefix}/myApp/config/*

branding.spec

Name: myApp_branding
Requires: myApp
%install
   {copy branding to rpm tree}
%files
/%{_prefix}/myApp/branding/*

升级现有安装后,品牌文件的软件包成员身份现在将成为myApp_branding软件包吗?

此方法有任何弊端或风险吗?

谢谢

1 个答案:

答案 0 :(得分:0)

不,不建议这样做。

请记住,每个项目只有一个.spec文件就足够了,您可以使用%package主体项来获得其他rpm软件包。例如,在元信息之后添加以下代码。即在%prep%build项之前

%package branding
Summary: Branding for myApp
Requires: myApp
%description branding
branding files for myApp

之后,是的,您可以为每个软件包使用多个'%files'部分。喜欢

%files
/%{_prefix}/myApp/bin/*
/%{_prefix}/myApp/config/*

%files branding
/%{_prefix}/myApp/branding/*

如您所见,我在%files主节中省略了/%{_prefix}/myApp行。实际上,当您选择一个父目录时,它会自动包括其所有子目录,而当子包尝试再次包含子目录时,它将在构建时导致重复错误。如果您想使用/%{_prefix}/myApp,那么%exclude可以为您提供帮助。见

%files
/%{_prefix}/myApp/*
%exclude /%{_prefix}/myApp/branding/*

%files branding
/%{_prefix}/myApp/branding/*