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

rpmbuild中如何将目录及其文件定义为源文件?

解决rpmbuild读取SOURCES/mydir下所有文件的问题

先纠正你原来的两处错误

  • 你用%{S:3}、%{S:4}完全不对,Source编号从0开始:Source0对应%{S:0},Source1对应%{S:1},你根本没配置Source3、Source4,自然找不到文件。
  • 当你在spec里写Source1: mydir/x1.txt时,rpmbuild会把该文件复制到%{_sourcedir}(即你的/home/mrv/rpmbuild/SOURCES/)根目录,不会保留mydir子目录结构,所以x1.txt直接在SOURCES下,不是SOURCES/mydir下,这也是报错的核心原因。

两种实用解决方法

方法1:打包整个mydir作为单个Source(推荐)

这种方式不用逐个列文件,维护起来更省心:

  1. 先把mydir目录打包成压缩包:
    tar czf mydir.tar.gz mydir/
    
  2. 将压缩包放到SOURCES目录,然后在spec里配置:
    Source1: mydir.tar.gz
    
  3. 在%prep阶段解压这个压缩包:
    %prep
    %setup -q  # 若有其他Source包的解压逻辑,按需调整
    %setup -q -n . -a 1  # 把Source1的压缩包解压到当前工作目录
    
  4. %install阶段直接使用解压后的mydir文件:
    %install
    install -m 0644 mydir/*.txt %{buildroot}/%{_datadir}/your_app_target_path/
    

方法2:直接引用SOURCES目录下的mydir文件

如果不想打包,直接用%{_sourcedir}变量(对应SOURCES目录的绝对路径),配合通配符批量引用文件:

%install
install -m 0644 %{_sourcedir}/mydir/*.txt %{buildroot}/%{_datadir}/your_app_target_path/

这种方式无需逐个配置Source条目,直接匹配mydir下所有符合规则的文件,简单高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:40:49