Centos系统中用mock构建rpm的方法
<p><span><strong>前言</strong></span></p>
<p>
在centos下执行<code>rpmbuild -ba package.spec</code>的时候,通常会要求系统也安装对应的依赖包,这样就会导致系统装上许多没用的软件包,占用空间。于是搜索了一下,发现可以通过<code>mock</code>命令来解决这个问题。</p>
<p>
<span><strong>构建方法</strong></span></p>
<p>
首先是安装<code>mock</code>,由于<code>mock</code>是在<code>epel</code>仓库里的,所以还需要先装<code>epel</code>仓库</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_745671">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">yum -y </code><code class="bash functions">install</code> <code class="bash plain">epel-release</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">yum -y </code><code class="bash functions">install</code> <code class="bash plain">mock</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
通常情况下使用<code>rpmbuild</code>会新开一个用户,比如<code>builder</code>,这样就不会污染系统环境。我们需要把<code>builder</code>用户加入<code>mock</code>用户组</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_780554">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">usermod</code> <code class="bash plain">-a -G mock builder</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<code>mock</code>下使用<code>rebuild</code>需要src.rpm文件,所以如果只有.spec文件的话,需要先生成src.rpm文件</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_298619">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">rpmbuild -bs package.spec</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
这样在SRPM目录下就会生成一个src.rpm文件了,然后就可以通过<code>mock</code>命令来<code>rebuild rpm</code>文件</p>
<p>
首先需要初始化<code>mock</code>环境,在/etc/mock文件夹下有各个环境的配置文件,比如centos 6就是epel-6-x86_64,初始化命令就是:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_425256">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">mock -r epel-6-x86_64 --init</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
初始化完毕之后就可以开始构建了</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_32006">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">mock -r epel-6-x86_64 rebuild package-1.1-1.src.rpm</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
构建完毕,<code>rpm</code>文件会存放在/var/lib/mock/epel-6-x86_64/result目录下。当然我们可以通过<code>–resultdir</code>参数来指定<code>rpm</code>文件的生成目录</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_717978">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">mock -r epel-6-x86_64 rebuild package-1.1-1.src.rpm --resultdir=</code><code class="bash plain">/home/builder/rpms</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
最后执行<code>clean</code>命令清理环境</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_421165">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">mock -r epel-6-x86_64 --clean</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><strong>总结</strong></span></p>
<p>
以上就是关于Centos下使用mock构建rpm的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。</p>
頁:
[1]