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(推荐)
这种方式不用逐个列文件,维护起来更省心:
- 先把mydir目录打包成压缩包:
tar czf mydir.tar.gz mydir/ - 将压缩包放到SOURCES目录,然后在spec里配置:
Source1: mydir.tar.gz - 在
%prep阶段解压这个压缩包:%prep %setup -q # 若有其他Source包的解压逻辑,按需调整 %setup -q -n . -a 1 # 把Source1的压缩包解压到当前工作目录 %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
相关产品推荐
相关产品推荐

