mock 构建 RPM 的核心是环境干净、依赖可控、结果可复现,全程在 chroot 中按配置文件定义的发行版和源执行拉取、安装与编译。

直接用 mock 构建 RPM,核心是“环境干净、依赖可控、结果可复现”。它不依赖你本机装了什么,只按配置文件定义的发行版和源来拉取、安装、编译,整个过程锁在 chroot 里。
明确目标环境并配置 mock
mock 必须知道你要为哪个系统打包。比如目标是 CentOS 7 x86_64,就得用对应配置文件(如 /etc/mock/centos-7-x86_64.cfg),关键项包括:
-
target_arch 设为
x86_64 -
dist 或 releasever 明确设为
7 - yum.conf 或 dnf.conf 指向可信镜像源(如阿里云、清华源),避免默认官方源不可达或慢
- 若用私有仓库,把 baseurl 改成你的内网地址,并确保 GPG key 已导入或
gpgcheck=0(仅限可信内网)
准备构建输入:SPEC + 源码/SRPM
mock 本身不写代码,只执行构建逻辑。你需要提前准备好:
- 一个符合规范的 .spec 文件,包含
BuildRequires(编译依赖)、%build、%install等段落 - 源码包(如
myapp-2.1.tar.gz)或 SRPM(如myapp-2.1-1.src.rpm),放在当前目录或~/rpmbuild/SOURCES/ - 补丁、模板等辅助文件也放进 SOURCES,spec 中用
%patch0或%install -m644 conf.tpl %{buildroot}/etc/myapp/conf引用
执行构建并调试问题
常用命令组合简洁但参数关键:
- 初始化环境:
mock -r centos-7-x86_64 --init - 构建 SRPM:
mock -r centos-7-x86_64 --rebuild myapp-2.1-1.src.rpm - 指定输出目录,避免混入默认路径:
--resultdir /tmp/rpms - 构建失败时保留环境调试:
--no-clean,再进沙盒:mock -r centos-7-x86_64 --shell,手动查日志、试命令 - 验证产物:
rpm -qpR /tmp/rpms/myapp-2.1-1.el7.x86_64.rpm看运行依赖是否合理
接入自动化与日常维护
mock 天然适合 CI/CD 流程:
- 把
.cfg和.spec一起纳入 Git 仓库,保证环境定义版本化 - CI 脚本中先确保用户已加入
mock组:usermod -aG mock jenkins - 构建完成后自动上传 RPM 到私有仓库(如 Nexus),再运行
createrepo_c /path/to/repo更新索引,下游就能yum install - 定期清理缓存防磁盘满:
mock -r centos-7-x86_64 --scrub=chroot,cache











