我一直在努力了解如何构建一个简单的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的?
答案 0 :(得分:1)
通常你会使用mock
在一个干净的环境中运行你的构建,这个环境也会下拉并安装构建依赖项,让你的主机独立,这样你就可以拥有一个干净的构建目录而且不会#39 ; t在同一个模拟会话中多次构建相同的RPM。
这里的不同之处在于你使用的是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
。