mock知识点——bootstrap chroot
0 前言
本文翻译自mock官方文档:https://rpm-software-management.github.io/mock/Feature-bootstrap
本文实验环境:
CPU :龙芯3A5000(loongarch64架构)
操作系统 :Loongnix Server 8.4
mock版本 :3.5(拉取上游源码编译)
这个功能从mock 1.4.1版本开始引入。
1 Bootstrap chroot
在Bootstrap出现之前,mock调用主机的dnf --installroot
命令将目标架构的软件包安装到设置的目标目录中。大多数情况下,这样可以正常工作,但是当新的RPM功能被引入时,这样做可能会存在问题。例如:Soft dependencies或者Rich dependencies(富依赖)。当你在EL6主机上试图安装带有富依赖性的Fedora rawhide软件包时,rpm会执行失败,而你对此没有什么解决方法。当然你可以将你的编译机升级到Fedora rawhide,但当编译机是关键基础设施的一部分时,这往往是不可能的。
为了解决这类问题,我们引入了Boostrap chroot。这里的我们指的是提出这个想法的Igor Gnatenko和实现这个功能的Michael Cullen。
Bootstrap chroot意味着我们首先为目标平台创建很小的、临时的chroot,然后从临时的chroot中调用DNF/YUM。例如:当你在RHEL7上,你想为Fedora-26-x86_64
建立一个软件包;mock会首先创建一个名为Fedora-26-x86_64-bootstrap
的chroot,并且在其中安装DNF和rpm(fc26版本)。然后从fedora-26-x86_64-bootstrap
中调用DNF来安装所有需要的软件包到最终的fedora-26-x86_64 chroot
。
这个解决方案的缺点是在/var/lib/mock中需要更多的存储空间,构建速度会稍慢一点。但是如果你没有禁用了yum_cache和root_cache插件的话,你几乎不会注意到这些。
这个方案的优点是你可以使用稳定版本的操作系统为最新本本的操作系统构建软件包。 反之亦然。
这个功能是默认启用的。如果你想禁用它,你应该在你的配置文件中设置:
config_opts['use_bootstrap'] = False
2 在本地仓库中使用bootstrap
boostrap chroot功能中可以使用file://方式的本地仓库。但是,你需要避免使用挂载与/tmp、/dev 等位置的仓库,因为它们可能会被systemd-nspawn
重新挂载。
3 译者注
Soft dependencies:不太理解这个
Rich dependencies:不同系统上依赖项有差异。之前遇到过同样的包,Fedora的依赖比CentOS的多。译者推测