Rpmbuild 为什么在RPM规范文件中使用%files指令,以及如何在该部分中自动列出文件?

Rpmbuild 为什么在RPM规范文件中使用%files指令,以及如何在该部分中自动列出文件?,rpmbuild,Rpmbuild,为什么需要%文件,为什么不能通过列出$RPM\u BUILD\u ROOT目录内容自动创建文件? 例如,在该规范文件中,我必须在脚本中使用一些修改,为我构建一个RPM包。我必须将cd放入~/RPM/SOURCES,然后在其中查找。,并将每一行回送到.spec文件以设置%files部分。它可以由工具使用与我在后台相同的技术自动完成,但可以从$RPM\u BUILD\u ROOT目录中执行 %install mkdir -p $RPM_BUILD_ROOT/opt/MyCompany/MyProdu

为什么需要
%文件
,为什么不能通过列出
$RPM\u BUILD\u ROOT
目录内容自动创建文件?
例如,在该规范文件中,我必须在脚本中使用一些修改,为我构建一个RPM包。我必须将
cd
放入
~/RPM/SOURCES
,然后
在其中查找。
,并
将每一行回送到
.spec
文件以设置
%files
部分。它可以由工具使用与我在后台相同的技术自动完成,但可以从
$RPM\u BUILD\u ROOT
目录中执行

%install
mkdir -p $RPM_BUILD_ROOT/opt/MyCompany/MyProduct/
cp -rf -- ~/RPM/SOURCES/* $RPM_BUILD_ROOT/opt/MyCompany/MyProduct/

%files
/opt/MyCompany/MyProduct/file_1
/opt/MyCompany/MyProduct/file_2
/opt/MyCompany/MyProduct/file_3
... - a lot of lines here
/opt/MyCompany/MyProduct/file_100000
UPD
是,可以自动使用所有复制的文件(Doc)
在我的例子中,
%文件可以这样重写

%files
/opt/MyCompany/MyProduct/*
它将从
$RPM\u BUILD\u ROOT/opt/MyCompany/MyProduct
获取文件,因此要使用star,我们需要省略BUILD ROOT,即
$RPM\u BUILD\u ROOT
%{buildroot}
(这是RPM搜索文件的默认路径)

为什么需要%文件,为什么不能通过列出自动创建 $RPM\u生成\u根目录内容

一个等级库文件构建通常会创建多个(子)包,然后

即使存在一些自动%文件 , 注意,这里有 , 一般来说,无法自动分割文件

值得一提的是,大多数软件包维护人员并不维护软件 源代码,但只打包“上游”版本。如果%files节 而不是手动维护(与通配符模式相反),则 软件包维护人员可以更好地控制一切,因为他是 通知有关软件安装布局的更改(例如,当出现新的 文件出现在新版本的
/usr/bin
中,rpmbuild开始抱怨 有一个新的“未打包”文件,请参见下文)

它可以通过工具自动完成,使用与我在 但是从$RPM\u BUILD\u根目录开始

%install
mkdir -p $RPM_BUILD_ROOT/opt/MyCompany/MyProduct/
cp -rf -- ~/RPM/SOURCES/* $RPM_BUILD_ROOT/opt/MyCompany/MyProduct/

%files
/opt/MyCompany/MyProduct/file_1
/opt/MyCompany/MyProduct/file_2
/opt/MyCompany/MyProduct/file_3
... - a lot of lines here
/opt/MyCompany/MyProduct/file_100000
您甚至不必手动运行
find
。只要%install创建 $RPM\u BUILD\u ROOT中的文件,如果在%files中未提及它们,则会收到报告 例如:

$ rpmbuild -bb *.spec
...
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/user/rpmbuild/BUILDROOT/test-1-1.x86_64
error: Installed (but unpackaged) file(s) found:
   /usr/bin/not-packaged

RPM build errors:
    Installed (but unpackaged) file(s) found:
   /usr/bin/not-packaged

我不知道哪些是最强大的设计决策或历史顺序,但以下是一些潜在的原因:在不同的包具有不同的
%files
指令的情况下拆分包,使用
%doc
等来更改文件的处理方式,放置
%ghost
文件的地方,从行为不良的安装脚本等临时生成文件@DanielH那么你的意思是没有办法自动生成?特别是因为关于行为不良的安装脚本的最后一点,你可能不想在没有检查的情况下真正生成文件,如果你有文档、配置文件或重影文件,你就无法完全自动生成,或者,如果您需要更改属性等,但我认为有一些方法可以使用通配符,这样,如果您确定不想,就不需要完整列出所有内容。