是否有一个工具可以将 RPM .spec 的依赖项安装到隔离环境中?我不会在系统上全局安装此类依赖项,而且由于我没有 root 权限,因此无法这样做。
原因
我想创建一个包A这取决于较新版本的乙(无法在系统上全局安装)。
我喜欢构建新版本的乙并安装构建工具乙将-devel
其放入隔离环境中,以提供构建所需的所有必要文件A。
解决方案
- 有什么工具可以做到这一点吗?
- 如果不是,那么当我尝试这样做时我应该注意什么
chroot
? - 这是不是一个不好的做法?
答案1
是的,该工具名为mock
它在 EPEL 中。
典型用法:
rpmbuild -bs mypackage.spec
mock -r epel-6-x86_64 mypackage-0.1-1.src.rpm
这实际上是构建 RPM 的首选方法,因为它将进程与系统隔离,从而不会引入意外的依赖关系。
您可以修改其中的文件/etc/mock
以使其引入您自己的包、私有仓库等,或者查看文档以获取有关如何手动将包添加到mock
chroot 环境的信息。
请注意,应将用户添加到mock
组才允许使用mock
。
并非巧合的是,koji
Red Hat 使用的构建服务器会调用mock
来构建每个单独的包。如果你必须构建一个很多由于一直以来都在使用软件包,因此可能值得研究设置一个koji
构建服务器。
答案2
我认为尝试在生产主机上构建软件包是一种不好的做法,尝试在没有 root 权限的情况下执行此操作比启动自己的构建机器更复杂。我通常会这样做。
- 在您的台式机/笔记本电脑上安装 VirtualBox 或类似工具
- 创建生产中使用的操作系统的 32/64 VM
- 安装常用的mock、rpmbuild等工具
- 在你的虚拟机上为软件包创建 RPM 以及两个架构的任何其他依赖项
- 测试后将 RPM 推送到你的内部仓库,以便分发到你的服务器
- 再次测试以确保引入了正确的依赖项
- 通过您的配置管理发布。
答案3
您想使用 mock。它允许您在 chroot 中构建 rpm