RPM 规范文件:从文件列表中设置 %config 文件

RPM 规范文件:从文件列表中设置 %config 文件

SPEC 文件的示例片段:

...    
%install
unzip $RPM_SOURCE_DIR/APPLICATION-%{version}.zip -d %{buildroot}/
find %{buildroot} -type f ! -name "*.conf" | awk -F %{buildroot} '{print $2}' > filelist.txt
find %{buildroot} -type f -name "*.conf" | awk -F %{buildroot} '{print $2}' > configfilelist.txt


%files -f filelist.txt
...

对于常规文件,我可以使用 -f 选项加载生成的文件中的列表:

%files -f filelist.txt

我想以类似的方式应用文件列表。

%config(noreplace) xyz

有没有办法做到这一点?

答案1

添加一些awk字符串连接魔法,这应该可以工作。理由是,您现在只定义了一个要%files -f解析的文件。为了制作单个文件,我使用了 shell 重定向运算符进行追加,而不是强制写入。

我通过首先定义配置文件来交换您的指令顺序,但这可能没有必要。

...
%install
unzip $RPM_SOURCE_DIR/APPLICATION-%{version}.zip -d %{buildroot}/

# add prefix to all config files
find %{buildroot} -type f -name "*.conf" | awk -F '%{buildroot}' '{print "%config(noreplace)", $2}' > filelist.txt

# add the rest
find %{buildroot} -type f ! -name "*.conf" | awk -F %{buildroot} '{print $2}' >> filelist.txt

%files -f filelist.txt
...

如果您有想要指定的文档,您应该能够{print "%doc", $2}awk打印字符串执行相同的操作。

好问题,我非常赞同这些类型的逻辑技巧,因为它更适合 CI/CD,减少手动数据输入,并且模板的持久性更长。

相关内容