Linux之Mock使用方法

在进行编包的时候大多数人会使用rpmbuild命令在本机进行编译,这样可以使一些依赖及本地相关包的修改可以生效,但在开发过程中必须模拟用户的环境或是构建一个“干净的”环境(既没有任何其他依赖的改动,直接从yum下载构建一个纯用户环境),这样我们就需要mock命令来构建这样一个编译的纯环境来进行编译软件包。

1,安装mockmock的安装方法比较简单,请参照这篇文章即可。

2,mock使用方法mock编译过程最好不要用root身份,先建立一个普通的用户。

[root@test ~]# useradd mockbuilder [root@test ~]# usermod -a -G mock mockbuilder [root@test ~]# su - mockbuilder

使用内置的mock配置文件来进行编译

mock 的配置文件在/etc/mock/目录下,系统默认内置了fedora、epel-5、epel-6等系统的配置文件,通过查看这些.cfg的配置文件,可以了解到Mock的原理,即软件使用yum来下载一个最小化的系统,并放入chroot环境中。

下面以编译fedora 15 64位系统的软件包来举例(对应的配置文件为fedora-15-x86_64.cfg)

[root@test ~]# mock -r fedora-15-x86_64 init          #初始化,不需要加.cfg后缀[root@test ~]# mock -r fedora-15-x86_64 rebuild package-1.2-3.src.rpm   #开始编译过程

初始化以后的chroot环境位于:/var/lib/mock/fedora-19-x86_64/root目录下,可以用chroot命令切换此最小化环境。编译后的信息和软件包会保存在:/var/lib/mock/fedora-19-x86_64/result。

3,自定义配置文件来编译

要定义自己的配置文件,首先需要指定一个yum源(.xml文件),并且该yum源中必须含有sysbuild分组。这里先创建一个1.xml文件,指定sysbuild分组包含的软件包。然后根据1.xml生成repodata目录

在Yum源服务器上作些准备工作

[root@os1 os]# yum install createrepo[root@os1 os]# lsdrpms  Packages  repodata[root@os1 os]# mv repodata repodata-bak[root@os1 os]# vim 1.xml  内容如下:
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE comps PUBLIC "-//CentOS//DTD Comps info//EN" "comps.dtd">    sysbuild    sysbuild    true    falsebashbzip2coreutilscpiodiffutilsfindutilsgawkgccgcc-c++grepgzipinfomakepatchsedshadow-utilstarunziputil-linux-ngwhichcurlgitgnupgmakeshadow-utilsredhat-release-serverredhat-rpm-configrpm-build?    sysbuild    sysbuild    mock mini require    60      sysbuild

在Yum源服务器上使用1.xml创建repodata

[root@os1 os]# createrepo -g 1.xml ./     #在./下生成新的repodata目录[root@os1 os]# ls1.xml  drpms  Packages  repodata  repodata-bak

在Mock服务器上创建自己的配置文件

[root@test ~]# cd /etc/mock[root@test ~]# vim mock123.cfg   内容如下
config_opts['root'] = 'mock123-x86_64'config_opts['target_arch'] = 'x86_64'config_opts['chroot_setup_cmd'] = 'groupinstall sysbuild' #sysbuild要和1.xml文件定义的group标签中的name字段一致config_opts['dist'] = 'mock123'                         #only useful for --resultdir variable substconfig_opts['plugin_conf']['ccache_enable'] = Falseconfig_opts['yum.conf'] = """?[main]cachedir=/var/cache/yumdebuglevel=1logfile=/var/log/yum.logreposdir=/dev/nullretries=20obsoletes=1gpgcheck=0 assumeyes=1?[local]name=localbaseurl=http://localhost/x86_64/os    #填写repodata目录的上一级目录cost=2000enabled=1"""

拷贝过去的时候需要注意去掉注释,否则python会报SyntaxError: Non-ASCII的错误。

在Mock服务器上使用自己的配置文件进行编绎

[root@test ~]# su - mockbuilder[mockbuilder@test ~]# mock -r mock123 --init[mockbuilder@test ~]# mock -r mock123 --rebuild packages-1.2.3.src.rpm如果修改了/etc/mock/mock123.cfg文件,则需要重新初始化chroot环境[mockbuilder@test ~]# mock -r mock123 --clean all[mockbuilder@test ~]# mock -r mock123 --init
Linux之Mock使用方法

相关文章:

你感兴趣的文章:

标签云: