我使用 Fedora 31,从事软件开发。我需要在许多方面使用代码来源RPM 包的时间相对较短。因此,我想简单地构建包,但大多数时候并不实际执行“安装”步骤。
有没有办法使用 RPM yum 或 DNF 来做到这一点?为了澄清,我想按照规范文件中指定的方式构建项目,以便运行二进制文件,但不是“安装”它;也就是说,我不希望将构建的文件实际复制到系统的文件系统结构中。
答案1
构建 RPM 不应将任何生成的二进制文件安装到您的系统上(至少我从未使用过观察到这种行为rpmbuild
)。尽管它通常需要安装 SRPM 以及构建包所需的任何构建依赖项。
如果您的目的是避免将 SRPM 软件包安装到系统中来获取每个项目的信息SOURCES
,SPEC
我建议mock
来自 RPM 人员。它应该可以在主要的 Fedora 存储库中找到:dnf install mock
mock
rpmbuild
是一个利用 chroot 直接从 SRPM 构建 RPM 的包装器。这样做的好处是不必在主系统上安装 SRPM 或任何构建依赖项,因为它们安装在 chroot 内。
它还可以直接从本地目录或源代码管理构建 SRPM。
答案2
%install
构建时的步骤实际上rpm
并不安装系统上的二进制文件,它会将二进制文件安装在 RPM_BUILD_ROOT 中,这只是 rpm 构建步骤之一。
您的工作流程可能如下所示:
rpm -i *.src.rpm
:安装源rpm。这只会解压 src.rpm 并将源文件、规范文件等放在 .rpm 下~/rpmbuild
。- 然后您可以
cd ~/rpmbuild/SPEC/
在哪里找到规范文件来构建rpm
文件。 - [可选]您可以对源代码、规范文件等进行一些修改
- 现在
rpm
使用构建包rpmbuild -ba the.spec
这里有更详细的解释:https://blog.packagecloud.io/eng/2015/04/20/working-with-source-rpms/。
笔记:如果你只是想重建一个源rpm,而不做任何改变,你可以随时尝试rpmbuild --rebuild the.src.rpm