问题描述
为什么需要%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 :
是的,可以自动使用所有复制的文件(文档http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html)
就我而言,%files
可以这样重写
%files
/opt/MyCompany/MyProduct/*
它将从$RPM_BUILD_ROOT/opt/MyCompany/MyProduct
中获取文件,因此要使用star,我们需要省略$RPM_BUILD_ROOT
或%{buildroot}
的构建根(这是rpm搜索文件IIUC的默认路径)
解决方法
为什么需要%file,为什么不能通过列出自动创建它 $ RPM_BUILD_ROOT目录内容?
通常一个规范文件会创建多个(子)程序包-然后还会 multiple %files sections are needed。
即使存在一些自动%file 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