当需要构建自己的rpm软件包时,CentOS系统提供的mock工具可以非常方便地进行代码构建。使用mock可以自动构建并测试rpm包,从而简化了构建软件包的流程,减少了构建错误。
以下是在CentOS系统中使用mock构建rpm的步骤:
1. 安装mock
在CentOS系统上,可以通过以下命令安装mock:
sudo yum install mock
2. 创建mock配置文件
在/etc/mock
目录下创建一个配置文件,命名为<distro>-<release>-<arch>.cfg
。例如,为CentOS 7 x86_64创建一个配置文件:
sudo vim /etc/mock/epel-7-x86_64.cfg
使用以下内容填充文件:
# /etc/mock/epel-7-x86_64.cfg
#
# This is a mock config file. See the mock man-page for more info,
# or look at /etc/mock/site-defaults.cfg for more examples.
#
config_opts['root'] = 'epel-7-x86_64'
config_opts['target_arch'] = 'x86_64'
config_opts['legal_host_arches'] = ('x86_64',)
config_opts['chroothome'] = '/var/lib/mock'
config_opts['cache_topdir'] = '/var/cache/mock'
config_opts['cleanup_on_exit'] = False
config_opts['rpmbuild_timeout'] = 7200
config_opts['macros']['%_disable_source_fetch'] = 1
config_opts['package_manager'] = 'yum'
config_opts['yum.conf'] = '[main]\nkeepcache=1\n[epel]\nname=Extra Packages for Enterprise Linux 7 - $basearch\n#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch\nmirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch\nenabled=1\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7\n'
config_opts['dist'] = 'epel-7'
config_opts['releasever'] = '7'
config_opts['build_requires'] += ['gcc', 'make']
这个例子配置了mock用于构建和测试rpm软件包的基本设置,设定了构建环境,配置了mock使用的yum源。
3. 准备源代码并打包
将要打包的源代码放在一个独立的目录下,例如 /home/myproject
下。将代码打包为一个tar.gz压缩包:
cd /home/myproject
tar czf myproject-1.0.tar.gz *
4. 创建SPEC文件
在rpmbuild环境中,需要一个.spec
文件描述要构建的软件包,包括软件包版本、依赖项、文件清单等。可以使用以下命令创建样板:
cd /home/myproject
mock -r epel-7-x86_64 --spec=/usr/share/doc/mock/examples/example.spec --sources=myproject-1.0.tar.gz --dnf install dependency1 dependency2
其中example.spec
是一个mock提供的示例.spec
文件,--sources
指定了打包的源代码文件,--dnf install
指定了需要在构建环境中安装的依赖项。
构建软件包前,需要编辑.spec
文件,设置软件包名称、版本、作者等其他信息。
5. 指定mock配置文件并构建
使用以下命令来构建rpm软件包:
cd /home/myproject
mock -r epel-7-x86_64 --resultdir=./rpmresult myproject-1.0.tar.gz
其中,-r epel-7-x86_64
指定使用哪个mock配置文件进行构建,--resultdir
指定rpm软件包构建结果的输出目录。
6. 查看构建结果
rpm软件包的构建结果将存储在了./rpmresult
目录下,包括.src.rpm
和构建好的.rpm
文件。
示例:
假设我们要构建的软件包名称是myproject
,版本号是1.0
,依赖项为gcc
和make
。
在/etc/mock/
目录下创建mock配置文件,为epel-7-x86_64.cfg
,内容为:
config_opts['root'] = 'epel-7-x86_64'
config_opts['target_arch'] = 'x86_64'
config_opts['legal_host_arches'] = ('x86_64',)
config_opts['chroothome'] = '/var/lib/mock'
config_opts['cache_topdir'] = '/var/cache/mock'
config_opts['cleanup_on_exit'] = False
config_opts['rpmbuild_timeout'] = 7200
config_opts['macros']['%_disable_source_fetch'] = 1
config_opts['package_manager'] = 'yum'
config_opts['yum.conf'] = '[main]\nkeepcache=1\n[epel]\nname=Extra Packages for Enterprise Linux 7 - $basearch\n#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch\nmirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch\nenabled=1\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7\n'
config_opts['dist'] = 'epel-7'
config_opts['releasever'] = '7'
config_opts['build_requires'] += ['gcc', 'make']
下载并打包myproject
的源代码:
cd /home/myproject
tar czf myproject-1.0.tar.gz *
使用mock
命令生成.spec
文件:
mock -r epel-7-x86_64 --spec=/usr/share/doc/mock/examples/example.spec --sources=myproject-1.0.tar.gz --dnf install gcc make
打开myproject.spec
文件,并编辑软件包名称、版本、作者等其他信息。
使用mock构建rpm包:
mock -r epel-7-x86_64 --resultdir=./rpmresult myproject-1.0.tar.gz
查看构建结果,输出目录为./rpmresult
:
myproject-1.0-1.el7.src.rpm
myproject-1.0-1.el7.x86_64.rpm
这里生成了一个.src.rpm
源文件和一个.rpm
二进制文件,你可以使用rpm
命令来安装.rpm
软件包,例如:
sudo rpm -ivh ./rpmresult/myproject-1.0-1.el7.x86_64.rpm