【问题标题】:Why use %files directive in RPM spec file and how to automate file listing in that section?为什么在 RPM 规范文件中使用 %files 指令以及如何在该部分中自动列出文件?
【发布时间】:2020-10-06 07:02:50
【问题描述】:

为什么需要%files 以及为什么不能通过列出$RPM_BUILD_ROOT 目录内容来自动创建它?
例如,在那个规范文件中,我必须在脚本中使用一些修改,为我构建一个 RPM 包。我必须将cd 插入~/RPM/SOURCES,然后将find .echo 每行插入.spec 文件以设置%files 部分。它可以由工具使用与我在后台执行的相同技术自动完成,但来自$RPM_BUILD_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 http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html
就我而言,%files 可以改写成这样

%files
/opt/MyCompany/MyProduct/*

它将从$RPM_BUILD_ROOT/opt/MyCompany/MyProduct 获取文件,因此要使用星号,我们需要省略构建根目录,即$RPM_BUILD_ROOT%{buildroot}(这是 rpm 搜索文件 IIUC 的默认路径)

【问题讨论】:

  • 我不知道哪个是最强的设计决策或历史顺序,但这里有一些潜在的原因:拆分包,不同的包会有不同的 %files 指令,使用 %doc 等来更改文件的方式被处理,放置%ghost文件的地方,来自行为不佳的安装脚本的临时构建文件等。
  • @DanielH 所以你的意思是没有办法自动化它?
  • 特别是由于最后一点关于行为不佳的安装脚本,您可能实际上想要至少不检查,并且您不能完全 如果您有文档、配置文件或 ghost 文件,或者如果您需要更改属性等,则将其自动化。但我认为有一些方法可以使用通配符,因此您不需要完全列出所有内容确定你不想。

标签: rpmbuild


【解决方案1】:

为什么需要 %files 以及为什么不能通过列表自动创建 $RPM_BUILD_ROOT 目录内容?

一个规范文件构建通常会创建多个(子)包 - 然后也 multiple %files sections are needed.

即使存在 一些 自动 %files section generators, nb 有 %files -f option, 一般来说,无法自动拆分文件。

值得一提的是,大多数软件包维护者并不维护软件 源代码,但只是打包“上游”版本。如果 %files 部分 相当手动维护(与通配符模式相比), 包维护者的一切都在控制之中,因为他是 通知软件安装布局的变化(例如,当一个新的 文件出现在/usr/bin 新版本中,rpmbuild 开始抱怨 有一个新的“未打包”文件,见下文)。

该工具可以使用与我在 后台但来自 $RPM_BUILD_ROOT 目录而不是?

您甚至不必手动运行find。只要 %install 创建 $RPM_BUILD_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

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 2020-09-09
    • 2016-02-10
    • 2017-10-10
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    相关资源
    最近更新 更多