rpmbuild报目录缺失:如何让spec文件配置的打包目录可选?
解决方案
你可以通过两种常用方案实现目录的可选打包,存在时自动纳入,不存在时跳过:
方案1:使用rpm内置%exists宏做条件判断
直接在%files段用条件检测目标目录是否存在,符合条件才加入打包清单:
%defattr(-,%karaf_user,%karaf_group,-) # 其他固定打包的路径正常写在这里 %if %{exists %{buildroot}%{_karaf_path}/etc/scripts} %{_karaf_path}/etc/scripts # 如果需要打包目录下的所有内容而非目录本身,改成 %{_karaf_path}/etc/scripts/* %endif
注意检测路径要带上%{buildroot}前缀,否则会检测构建机根目录下的路径,导致判断失效。
方案2:%install段动态生成文件列表
如果可选路径较多,或者需要更复杂的判断逻辑,可以在安装阶段动态生成打包清单:
- 在
%install段末尾添加如下逻辑:
# 初始化文件列表,写入默认权限配置 echo "%defattr(-,%{karaf_user},%{karaf_group},-)" > %{name}.files # 判断目录是否存在,存在则写入列表 if [ -d "%{buildroot}%{_karaf_path}/etc/scripts" ]; then echo "%{_karaf_path}/etc/scripts" >> %{name}.files fi # 其他固定打包的路径也可以追加到这个文件里
- 修改
%files段引用生成的清单:
%files -f %{name}.files # 其他没写到动态清单里的固定路径还是可以正常写在这里
关于%config(missingok)不生效的说明
这个参数仅作用于单个配置文件,生效场景是「打包时文件存在、安装后用户手动删除了该文件、后续升级时不抛出报错」,无法忽略打包阶段目录/文件本身不存在的情况,所以你之前的尝试没有效果。
内容的提问来源于stack exchange,提问作者Ramin Arabbagheri
相关产品推荐
相关产品推荐

