基于ARM架构的银河麒麟V10编译harbor V1.10.17

1,377 阅读3分钟

起因

公司需要进行产品的国产化改造,harbor与原有产品集成,但因为某些原因无法升级V2,在5月份的时候进行了ARM版本编译。

修改源码

官方源码地址

使用 git clone将代码下载至本地

git clone https://github.com/goharbor/harbor.git

前置准备(说明)

  1. 编译过程必须使用其他基础发行版,经测试发现银河麒麟V10SP1和SP3的版本编译成功后都无法运行,排查后发现问题可能与内核有关(未深入排查,但相同代码在Debian编译后,在麒麟系统可以使用)
  2. 在编译过程中尽量使用大陆境外区域的服务器,否则docker镜像及github拉取速度极慢或需要修改源码进行代理下载

建议使用Debian进行编译,本人编译采用Azure的香港区ARM架构的Debian11(毕竟白嫖还是香的)

修改photon镜像至4.0版本

如下命令在v1.10.17之后不需要执行,官方已升级photon至4.0版本

find ./ -type f|grep "Dockerfile$"|grep -v ".D"|xargs sed -i "s#photon:2.0#photon:4.0#g"
find ./ -type f|grep "Dockerfile$"|grep -v ".D"|xargs sed -i "s#photon:3.0#photon:4.0#g"

代码修改

首先修改Makefile,以声明当前要编译的版本,及打开基础依赖镜像构建

基础镜像:harbor构建的时候,会先进行基础构建,基础构建的包对harbor本身的业务代码是没有影响的,仅仅是基础依赖,若在开发迭代harbor的过程中进行了harbor代码修改,在x86上是无需进行构建基础镜像的,可以快速编译,打包。但当前编译ARM,基础镜像的架构是X86,与当前无法匹配,所以要重新进行编译基础镜像。

# 版本名称tag
VERSIONTAG=v1.10.17-arm64
# 基础镜像tag
BASEIMAGETAG=v1.10.17-arm64
# 软件包tag
PKGVERSIONTAG=v1.10.17-arm64
# 是否从dockerhub拉取基础镜像
PULL_BASE_FROM_DOCKERHUB=false

另外,在build_base_images操作下,将--pull参数取消,这样在本地编译好的base镜像才会被使用

image.png

修改make/photon/core/Dockerfile(该步骤可能无需修改)

- RUN chmod u+x /harbor/harbor_core
+ RUN chown -R harbor:harbor /harbor/ \
    && chmod u+x /harbor/harbor_core

修改make/photon/db/Dockerfile.base 替换所有的x86至arm架构

修改make/photon/db/rpm_builder.sh 替换所有的x86至arm架构

- x86_64
+ aarch64

harbor-arm仓库的redis目录下的文件全部替换更新至make/photon/redis/目录下

版本编译

编译逻辑解释:

  1. 先编译photon中可以运行的基础rpm包(新版本可能已升级至新版postgresql和redis)
  2. 进行基础依赖镜像编译
  3. 进行离线版本编译
  4. 打包镜像至tar.gz文件,与官方发布的离线包一致

修改部分文件的执行权限

chmod +x make/install.sh make/prepare make/photon/db/rpm_builder.sh make/photon/redis/rpm_builder.sh make/photon/registry/builder make/checkenv.sh

编译postgresql版本和redis版本

cd make/photon/db
./rpm_builder.sh

cd make/photon/redis
./rpm_builder.sh

进行基础依赖镜像编译

make build_base_images GOBUILDIMAGE=golang:1.17.9 COMPILETAG=compile_golangimage

进行版本离线编译打包

make package_offline GOBUILDIMAGE=golang:1.17.9 COMPILETAG=compile_golangimage

提取harbor目录内离线包tar.gz即可