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

时间:2015-07-17 20:36:46

标签: rpmbuild

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

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

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

最初我在~/testing-rpmbuild内创建了一个测试RPM目录结构,当我运行rpmbuild命令时,它会自动为我创建~/rpmbuild,然后开始失败,因为我的spec文件(这是在~/testing-rpmbuild)引用了其他无法找到的文件,因为操作系统似乎希望它在~/rpmbuild内(这是空的,因为那时我没有意识到操作系统已经自动创建了~/rpmbuild目录。

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

1 个答案:

答案 0 :(得分:1)

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

Source

这里的不同之处在于你使用的是Docker,它提供了一些与mock相同的好处(一个独立的构建环境),但是没有提供基于构建依赖性的自动包安装。

您可以解析spec文件并在运行时安装依赖项,然后继续构建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