需要帮助了解如何构建多个 RPM

Need help understanding how to build multiple RPMs

我一直在努力了解如何构建一个简单的 RPM。

我有以下存储库 https://github.com/integralist/simple-rpm,其中包含相关的 SPEC 文件,它可以很好地从 Docker 容器中生成 RPM。

但我遇到的问题是,考虑到我几乎被迫使用单个 ~/rpmbuild 目录来存放文件,因此了解如何构建多个 RPM。

最初我在 ~/testing-rpmbuild 中创建了一个测试 RPM 目录结构,当我 运行 命令 rpmbuild 它自动为我创建 ~/rpmbuild 然后开始失败我的规范文件(在 ~/testing-rpmbuild 中)引用了其他找不到的文件,因为 OS 似乎期望它在 ~/rpmbuild 中(这是空的,因为在那我没有意识到 OS 已经自动创建了 ~/rpmbuild 目录)。

所以最后我只是将所有文件从 ~/testing-rpmbuild 移动到 ~/rpmbuild 并且一切正常。但是我不确定当您被限制在一个 ~/rpmbuild 目录时,您应该如何构建多个不同的 RPM?

通常你会在一个干净的环境中使用 mock 到 运行 你的构建,这也会拉下并安装构建依赖项,让你的主机保持独立,这样你就有一个干净的构建目录并且不会在同一模拟会话中多次构建相同的 RPM。

Source

此处的不同之处在于您使用的是 Docker,它提供了与 mock(隔离的构建环境)相同的一些好处,但不提供基于构建依赖项的自动包安装。

您可以在 运行 时解析规范文件并安装依赖项,然后继续构建 RPM。

rpmbuild 默认以 ~/rpmbuild 为目标,当你 运行 容器时,你不需要切换到另一个目录,因为你正在构建一个包。

将您当前的工作目录挂载为一个卷然后基于它构建可能更有意义,例如:

FROM fedora:latest RUN yum -y install tree man man-pages make gcc rpm-build WORKDIR $HOME/rpmbuild ENTRYPOINT ["rpmbuild"] CMD ["-bb", "-v", "SPECS/*.spec"]

然后构建 RPM 运行 以下内容:

docker run -v $(pwd):/root/rpmbuild integralist/simplerpm

并且您应该在 运行 命令所在项目的当前目录中的 RPMS/* 中有 RPM。

此外,您可以使用 ~/.rpmrc 更改构建目录,方法如下:

topdir: /alternate/build/path

或在构建 rpm 时指定 --buildroot

Source