debian源码包编译-编译arm64平台的软件包

这周我做了很多本地化适配工作。 虽然主要是拿到源码并在本地化平台上编译,难度不算太大,但还是想总结一下。

国内平台采用arm64v8 CPU芯片,因此无法使用传统软件厂商提供的x86架构二进制软件包,需要在arm64v8 CPU服务器上重新编译源代码。

构建 debian deb 包

在 x86 上创建 debian deb 包相对简单。 流程描述如下:

# 下面假设要编译curl的deb包
# 安装gcc、make等编译链工具
$ apt-get update && apt-get install -y build-essential
# 安装编译curl依赖的那些软件包
$ apt-get build-dep curl
# 创建编译目录
$ mkdir -p ~/build && cd ~/build
# 下载构建curl deb包的源码
$ apt source curl
# 切换到构建目录
$ cd curl-7.52.1/
# 执行dpkg-buildpackage命令构建deb包,该条命令执行完毕后,在上一层目录下就会生成deb包
$ dpkg-buildpackage -us -uc -b

复制

对于apt源中带有源码包的软件包debian源码包编译,与之前基本相同。

但是有些软件厂商不提供apt源码或者apt源码中没有对应CPU架构的软件包,而只提供软件的deb包,比如mysql。 这时需要手动下载源deb包,并从源deb包中创建与CPU架构对应的deb包。 流程描述如下:

# 安装gcc、make等编译链工具
$ apt-get update && apt-get install -y build-essential
# 下载mysql-community的source包
$ curl -O -L 'https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-source_5.7.27-1debian9_amd64.deb'
# 安装source deb包
$ dpkg -i mysql-community-source_5.7.27-1debian9_amd64.deb
# 创建编译目录
$ mkdir -p ~/build && cd ~/build
# 将source deb包里的内容拷贝到构建目录
$ cp /usr/src/mysql/* ~/build/
# 解压mysql原始的源码
$ tar -xf mysql-community_5.7.27.orig.tar.gz
# 解压构建deb包的debian目录
$ tar -xf mysql-community_5.7.27-1debian9.debian.tar.xz -C mysql-5.7.27/
# 切换到deb包构建目录
$ cd mysql-5.7.27/
# 检查编译deb包依赖的那些软件包是否都安装好了,如果没有安装好,先用apt-get install安装一下
$ grep 'Build-Depends' debian/control
# 执行dpkg-buildpackage命令构建deb包,该条命令执行完毕后,在上一层目录下就会生成deb包
$ dpkg-buildpackage -us -uc -b

复制

debian源码包编译-编译arm64平台的软件包

可以看到debian源码包编译,过程与x86下创建deb包类似,只不过需要手动下载源deb包,手动规划deb包的创建目录,编译时手动安装依赖包。

构建arm64v8的deb包后,将其安装到arm64v8的基础docker镜像中。 生成了arm64v8平台下可用的docker镜像。 参考Dockerfile如下:

FROM arm64v8/debian:9
COPY curl_7.52.1-5+deb9u9_aarm64.deb /tmp/curl_7.52.1-5+deb9u9_aarm64.deb
RUN dpkg -i /tmp/curl_7.52.1-5+deb9u9_aarm64.deb
...

复制

debian源码包编译-编译arm64平台的软件包

构建CentOS/RHEL rpm包

在x86上构建CentOS/RHEL的rpm包也比较简单。 流程描述如下:

# 下面假设要编译curl的rpm包
# 安装gcc、make等编译链工具
$ yum groupinstall -y 'Development tools'
# 安装编译curl依赖的那些软件包
$ yum-builddep -y curl
# 下载构建curl rpm包的源码包
$ yumdownloader --source curl
# 安装构建curl rpm包的源码包
$ rpm -ivh curl-7.29.0-54.el7.src.rpm
# 使用rpmbuild命令构建rpm包,该条命令执行完毕后,在~/rpmbuild/RPMS/x86_64目录下就生成了rpm包
$ cd ~/rpmbuild/SPECS/
$ rpmbuild -bb ./curl.spec

复制

debian源码包编译-编译arm64平台的软件包

对于yum源中有源码包的软件包,基本上和以前一样。

但有些软件厂商不提供yum源或者yum源中没有对应CPU架构的包。 他们只提供rpm包的软件,比如mysql。 这时需要手动下载源rpm包,并从源rpm包中创建与CPU架构对应的rpm包。 流程描述如下:

# 安装gcc、make等编译链工具
$ yum groupinstall -y 'Development tools'
$ curl -O -L 'https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-5.7.27-1.el7.src.rpm'
# 安装编译mysql-community依赖的那些软件包
$ yum-builddep -y ./mysql-community-5.7.27-1.el7.src.rpm
# 安装构建curl rpm包的源码包
$ rpm -ivh ./mysql-community-5.7.27-1.el7.src.rpm
# 使用rpmbuild命令构建rpm包,该条命令执行完毕后,在~/rpmbuild/RPMS/x86_64目录下就生成了rpm包
$ cd ~/rpmbuild/SPECS/
$ rpmbuild -bb ./mysql.spec

复制

可以看到,过程与x86下创建yum包类似,只不过需要手动下载源rpm包,并根据下载的源rpm包安装编译依赖包。

构建arm64v8 rpm包后,将其安装到arm64v8基础docker镜像中。 生成了可以在arm64v8平台下使用的docker镜像。 参考Dockerfile如下:

FROM arm64v8/centos:7
COPY curl-7.29.0-54.el7.aarm64.rpm /tmp/curl-7.29.0-54.el7.aarm64.rpm
RUN dpkg -i /tmp/curl-7.29.0-54.el7.aarm64.rpm
...

复制

编译障碍

现在arm64v8平台还不是很流行。 编译过程中可能会遇到各种编译错误。 这时候你可以在Google上搜索一下编译错误信息。 通常你可以找到解决办法。 一般需要修改源码才能编译通过,或者修改编译参数才能通过。 这里涉及到工作细节,不再赘述。

参考

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 debian源码包编译-编译arm64平台的软件包 https://www.wkzy.net/game/189996.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务