云原生应用构建:基于OpenShift
上QQ阅读APP看书,第一时间看更新

2.8 如何在异构环境重新编译RPM

在前文中我们已经提到,有的RPM包与运行环境有关,有的无关。如果一个RPM依赖于某一个版本的运行环境(Linux版本或处理器架构),我们如何让这个RPM在其他的环境中运行?这会涉及异构环境下的RPM重新编译。

Mock是一个用于构建RPM包的工具(就像Docker启动一个build的环境一样,摆脱对编译环境Linux版本的限制)。它可以为不同的架构、Linux版本构建RPM软件包。在RHEL系统上使用Mock,需要启用“Extra Packages for Enterprise Linux”(EPEL)存储库。

针对RPM包,Mock最常见的用例之一是创建原始的构建环境。通过指定/etc/mock目录下不同的配置文件,模拟使用不同的构建环境。

查看mock配置文件,如图2-25所示。

我们以epel-7-x86_64.cfg为例,查看其中关于架构的描述,具体如下所示,可以看到是x86_64和Red Hat Linux发行版7的信息。

图2-25 查看mock配置文件


[root@master mock]# cat epel-7-x86_64.cfg  |grep -i arch
config_opts['target_arch'] = 'x86_64'
config_opts['legal_host_arches'] = ('x86_64',)
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=updates
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-7&arch=x86_64
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=extras
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=sclo-rh
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=testing-epel7&arch=x86_64
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-7&arch=x86_64

使用epel-7-x86_64配置来构建SRPM,如图2-26所示。

图2-26 使用epel-7-x86_64构建SRPM

使用epel-6-x86_64配置来构建二进制RPM,如图2-27所示。

查看构建好的二进制RPM cello-1.0-1.el6.x86_64.rpm,如图2-28所示。

安装cello-1.0-1.el6.x86_64.rpm,如图2-29所示。

查看构建好的二进制RPM cello-1.0-1.el7.x86_64.rpm,并进行安装验证,如图2-30所示。

图2-27 使用epel-6-x86_64构建二进制RPM

图2-28 查看构建好的二进制RPM

图2-29 安装构建好的二进制RPM

图2-30 查看构建好的二进制RPM

至此,在异构环境下重新编译二进制RPM成功。