使用以下方法创建 RPM 规范文件时,可以转储可用/定义的宏:
rpm --showrc
或者 rpm --eval %dump
或者%dump
在规范文件本身中包含内置宏并检查 RPM 构建过程的输出(构建输出包含宏定义)。
在任何一种情况下,某些行都以“-14”或“-11”为前缀。没有两者的行似乎是多行定义的主体。
此输出中的“-14”(或不太常见的“-11”)有什么意义?更重要的是,我有兴趣知道记录在哪里。
示例输出:
-14: __autoconf autoconf
-14: __autoheader autoheader
-14: __automake automake
-11= _target_cpu x86_64
-11= _target_os linux
Run Code Online (Sandbox Code Playgroud)
参考:
由于文件冲突,我安装失败。我只在 Red Hat Linux 7 上遇到这个问题。相同的规范文件适用于 Ubuntu 和其他 Linux 发行版。
我试图把回音上%pre
,%post
,%preun
和%postun
部分,但我从来没有达到过的消息。我%dump
在规范文件的开头尝试过,它也没有打印任何内容。如何跟踪规范文件的执行?
%files
%defattr(-,root,root,-)
@CPACK_PACKAGING_INSTALL_PREFIX@/sbin/MyExe
@CPACK_PACKAGING_INSTALL_PREFIX@/share/doc/@CPACK_PACKAGE_FILE_NAME@/myconf.conf
@CPACK_PACKAGING_INSTALL_PREFIX@/share/doc/@CPACK_PACKAGE_FILE_NAME@/README
%if @IS_RHEL7@
/etc/systemd/system/myoverride.conf
%endif
Run Code Online (Sandbox Code Playgroud)
安装过程中出错:
Preparing packages...
file /etc/systemd/system/myoverride.conf from install of mypackage-5.0.1.x86_64 conflicts with file from package mypackage-4.11.1.x86_64
file /usr/sbin/myexe from install of mypackage-5.0.1.x86_64 conflicts with file from package mypackage-4.11.1.x86_64
Run Code Online (Sandbox Code Playgroud) 最近 CentOS 从 7.5 升级到 7.6,现在其中一个软件包升级到更新版本,我还没有准备好使用。我打算改为构建和支持此软件包的旧版本。
我想知道是否有办法提取或查看(甚至可能是版本化的)原始规范文件,从中构建 CentOS 软件包。是否有用于构建官方 EPEL 包的规范文件的源代码存储库?
作为这个问题的后续,如果我对这些调试功能不感兴趣怎么办 - 如何简单地阻止安装这些 build-id 文件(调试信息包?)?最终我不关心(至少在不久的将来)支持客户端调试。另一方面,在同一台机器上安装不同的客户端 Redhat 产品(包)时,我需要克服已知的“build-id 文件夹冲突”。如何才能做到这一点?
这是我的理解,%dir
如果我有的话
%files
%dir /foo/bar
Run Code Online (Sandbox Code Playgroud)
我现在不必单独列出/foo/bar
. 然而,当我在 OBS 中构建 RPM 时,我得到了,
error: Installed (but unpackaged) file(s) found:
/foo/bar/baz
/foo/bar/quz
Run Code Online (Sandbox Code Playgroud)
什么可能导致这种情况?