在过去的几年中,我们的应用程序已打包到一个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
软件包吗?
此方法有任何弊端或风险吗?
谢谢
答案 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/*