mock知识点 1——基础介绍(一般看这篇就够用了)
0 前言
本文翻译自mock官方文档:https://rpm-software-management.github.io/mock/
本文会在原文基础上做一定的改动,包括但不限于实验示例。
本文实验环境:
CPU :龙芯3A5000(loongarch64架构)
操作系统 :Loongnix Server 8.4
mock版本 :3.5(拉取上游源码编译)
1 mock 简介
Mock是一个rpm格式的软件包构建工具,它可以为与主机不同版本的Fedora、RHEL、Mageia系统构建软件包。Mock会创建一个chroot环境并在其中构建软件包。它唯一的任务就是可靠的安装实现一个chroot,然后在该chroot中尝试构建软件包。
$ mock -r fedora-35-x86_64 package.src.rpm
...
Finish: rpmbuild packagei-1.98-1.fc35.src.rpm
Finish: build phase for package-1.98-1.fc35.src.rpm
INFO: Done(package.src.rpm) Config(fedora-35-x86_64) 2 minutes 14 seconds
INFO: Results and/or logs in: /var/lib/mock/fedora-35-x86_64/result
$ ls /var/lib/mock/fedora-35-x86_64/result
build.log package-1.98-1.fc35.noarch.rpm package-1.98-1.fc35.src.rpm hw_info.log installed_pkgs.log root.log state.log
$ mock -r centos-stream+epel-9-s390x package.src.rpm
...
$ mock -r alma+epel-8-x86_64 package.src.rpm
...
Mock还提供了一个编译多个包的命令(--chain
),可以构建相互依赖的软件包。
如果源码配置管理(SCM)中存在mock-scm
包,Mock能够从中编译SRPM,然后将SRPM构建为RPM。具体可以查看–scm-enable。
1.1 mock的特点
- Mock 对rpmbuild命令进行了封装,它试图简化编包中的一些步骤,这是一些本身就很无趣(复杂)的步骤。
- Mock 在一个由少量软件包组成的chroot环境中运行 rpmbuild。
- Mock 可以帮助你找到缺少的 BuildRequires - 如果缺少软件包需要的依赖,那么构建就会失败。
- Mock 可以为多种系统和架构构建软件包,其中一些主机和目标的组合可能需要额外的配置,这取决于你的主机平台。
- Mock可以为特定的使用RPM的操作系统准备一个全新的构建/开发环境。
- Mock需要在root权限下执行一些任务,因此恶意的RPM会使你的系统处于危险之中。Mock对于未知的RPM是不安全的。如果你想从不被信任的来源构建软件包,那么请使用一些调用Mock的包构建环境,如OBS、Copr或在虚拟机中运行Mock。
- Mock既不是容器也不是虚拟机。Mock做了一些隔离,但它并不打算完全隔离。
- Mock可以帮助你在buildroot中打开一个shell来检索工件,或运行用于调试构建的命令。它并不打算在那里运行任何生产或开发应用程序。对于这种目的,你可以使用podman或Flatpak。
2 mock安装
2.1 安装仓库中mock
在Loongnix Server 8.4系统中,infra仓库和epel仓库中均有mock相关软件包,其中infra仓库中mock版本为2.8。epel仓库中mock版本为2.9。此处以高版本为例,epel仓库需要先安装loongnix-release-epel
:
[huangyang@bogon testmodule]$ sudo yum install loongnix-release-epel
......
[huangyang@bogon testmodule]$ sudo yum install mock
......
这样就安装成功了。
2.2 mock最新版本编译
根据mock已知,目前(2023年2月)最新版的mock已经到了3.5版本了,且每个版本都有一定的功能更新改动。为了使用到最新的功能,我们可以自己找mock新版本srpm(在rpmfind网站查找),然后编译。mock是与架构无关的软件包,可以直接编译通过。
wget https://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/source/tree/Packages/m/mock-3.5-2.fc38.src.rpm
wget https://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/source/tree/Packages/m/mock-core-configs-38.1-1.fc38.src.rpm
下载然后编译这两个软件包之后,安装就可以了。相较于2.1中的方法,这样安装的mock包里面缺少
Loongnix Server系统的配置文件。
3 mock配置
mock软件包安装完成后,其相关配置位于/etc/mock
目录下(与Loongnix Server相关的两个配置文件为:/etc/mock/loongnix-8-loongarch64.cfg
和/etc/mock/templates/loongnix-8.tpl
)。
mock环境中使用的源与本机系统使用的源(/etc/yum.repos.d/
)不同,它的默认源在/etc/mock/templates/loongnix-8.tpl
中单独配置。
3.1 添加mock账户
在使用mock时,需要先将账户添加到mock组,否则会出现权限问题。添加到mock组之后,还需要切换组信息。最后可以通过groups
查看当前用户所属组信息。
[huangyang@bogon ~]$ sudo usermod -a -G mock huangyang
[huangyang@bogon ~]$ newgrp
[huangyang@bogon ~]$ groups
huangyang mock
3.2 初始化
在使用mock命令之前,需要先进行初始化。初始化时可通过使用--rootdir
参数来重新指定位置(默认在/var/lib/mock/
目录下)。
[huangyang@bogon ~]$ mock -r loongnix-8-loongarch64 --init
INFO: mock.py version 3.5 starting (python version = 3.6.8, NVR = mock-3.5-2.lns8)...
Start(bootstrap): init plugins
INFO: selinux disabled
Finish(bootstrap): init plugins
Start: init plugins
......
Mock Version: 3.5
INFO: Mock Version: 3.5
Finish: chroot init
Finish: run
如果编译之前想要清除之前的mock初始化信息,可以使用:
[huangyang@bogon ~]$ mock -r loongnix-8-loongarch64 --clean
INFO: mock.py version 3.5 starting (python version = 3.6.8, NVR = mock-3.5-2.lns8)...
Start(bootstrap): init plugins
INFO: selinux disabled
Finish(bootstrap): init plugins
Start: init plugins
......
Start: clean chroot
Finish: clean chroot
Finish: run
[huangyang@bogon ~]$ sudo rm -rf /var/cache/mock/* /var/lib/mock/* /home/huangyang/rootdir/
因为重新指定了rootdir,所以需要把重新指定的目录也删除掉。
3.3 编译软件包
编译软件包时不需要sudo权限。下面这条命令是从本地已有的srpm包重新编译rpm和srpm包,如果是其他编译方式,可以参考mock --help信息。
mock -r loongnix-8-loongarch64 rebuild /home/huangyang/Fedora34-rubygem-srpm/rubygem-asciidoctor-2.0.12-1.fc34.src.rpm --rootdir=/home/huangyang/rootdir/ --resultdir=/home/huangyang/result/
4 修改记录
2023年2月27日 14:49:55:修改3.1和3.2内容。添加当前用户到mock组之后,需要切换组信息。然后整个mock操作都不需要用到sudo权限。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App