You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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段动态生成文件列表

如果可选路径较多,或者需要更复杂的判断逻辑,可以在安装阶段动态生成打包清单:

  1. 在%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

# 其他固定打包的路径也可以追加到这个文件里
  1. 修改%files段引用生成的清单:
%files -f %{name}.files
# 其他没写到动态清单里的固定路径还是可以正常写在这里

关于%config(missingok)不生效的说明

这个参数仅作用于单个配置文件,生效场景是「打包时文件存在、安装后用户手动删除了该文件、后续升级时不抛出报错」,无法忽略打包阶段目录/文件本身不存在的情况,所以你之前的尝试没有效果。

内容的提问来源于stack exchange,提问作者Ramin Arabbagheri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:06:03