西北亮 發表於 2023-9-9 00:00:00

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]
查看完整版本: Centos系统中用mock构建rpm的方法