鲲鹏服务器 ARMV8架构Harbor-2.3.0编译部署

举报
养猫费裤子 发表于 2022/11/22 17:11:22 2022/11/22
【摘要】 在X86上部署的是Harbor2.3.0,在鲲鹏服务器测试环境上想部署Harbor发现只有1.10.2以下的资料。拉了Harbor源码跑了一遍之后发现2.X版本后Harbor引入spectral组件,spectral查看源码部署脚本和Dockerfile发现都是下载git上编译好的二进制文件,该文件是X86的,和ARM不兼容,导致2.3.0以上版本无法在鲲鹏服务器上运行。以下是编译spect...

在X86上部署的是Harbor2.3.0,在鲲鹏服务器测试环境上想部署Harbor发现只有1.10.2以下的资料。

拉了Harbor源码跑了一遍之后发现2.X版本后Harbor引入spectral组件,spectral查看源码部署脚本和Dockerfile发现都是下载git上编译好的二进制文件,该文件是X86的,和ARM不兼容,导致2.3.0以上版本无法在鲲鹏服务器上运行。

以下是编译spectral和部署harbor-V2.3.0版本过程,如果没有再引入新的组件同理可编译至2.6.1版本。

觉得编译麻烦的可以看这篇快速在线安装版本:https://bbs.huaweicloud.com/blogs/384259

一、安装docker-19.03.10

在线获取安装

wget https://download.docker.com/linux/static/stable/aarch64/docker-19.03.10.tgz
tar zxf docker-19.03.10.tgz
cp docker/* /usr/bin

配置docker.service启动文件

编辑docker.service文件

vim /usr/lib/systemd/system/docker.service

添加以下内容
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

启动Docker服务进程。

systemctl start docker

查看安装情况,验证是否安装成功。

docker version

二、安装ARM版本的docker-compose-1.22.0

mkdir -p /opt/tools/installed/docker-compose/bin
# 下载
cd /opt/tools/installed/docker-compose/bin
wget https://github.com/ubiquiti/docker-compose-aarch64/releases/download/1.22.0/docker-compose-Linux-aarch64
ln -s docker-compose-Linux-aarch64 docker-compose
chmod u+x docker-compose-Linux-aarch64

更新环境配置

vim /etc/profile
将下面的代码插入到最后一行,并保存退出

DOCKER_COMPOSE_HOME=/opt/tools/installed/docker-compose
PATH=$DOCKER_COMPOSE_HOME/bin:$PATH
export DOCKER_COMPOS

刷新环境变量

source /etc/profile

查看安装情况,验证是否安装成功.

docker-compose -v

Buildx安装

第一步、下载并安装命令

mkdir -pv ~/.docker/cli-plugins/
wget -O ~/.docker/cli-plugins/docker-buildx \
    https://github.com/docker/buildx/releases/download/v0.5.1/buildx-v0.5.1.linux-arm64
chmod a+x ~/.docker/cli-plugins/docker-buildx 

第二步、设置 experimental 参数

vim ~/.docker/config.json # 如果没有的该文件就创建下

{
    "experimental": "enabled"
}

三、编译spectral:

1、环境准备:

1、1安装node:
cd /usr/local/src
wget https://nodejs.org/download/release/v16.0.0/node-v16.0.0-linux-arm64.tar.gz
tar -zxvf node-v10.16.0-linux-arm64.tar.gz
1、2安装yarn:
cd /usr/local/src
wget https://github.com/yarnpkg/yarn/releases/download/v1.22.19/yarn-v1.22.19.tar.gz
tar -xvf yarn-v1.22.19.tar.gz
1.3更新环境配置

vim /etc/profile

将下面的代码插入到最后一行,并保存退出

export PATH=$PATH:/usr/local/src/yarn-v1.22.19/bin:/usr/local/src/node-v16.0.0-linux-arm64/bin

刷新环境配置

source /etc/profile

2、编译ARM版本的spectral:

git clone https://github.com/stoplightio/spectral.git
#切换到harbor依赖的版本,我这是harborV2.3.0,需要spectralv5.9.1
git checkout -b v5.9.1 v5.9.1
cd spectral
yarn
yarn build
yarn workspace @stoplight/spectral-cli pkg . --public --targets node16-linux-arm64 --output ./binaries/spectral

编译完成后在路径

四、编译Redis-5.0.4-2

编译redis-5.0.4-2.aarch64.rpm文件

通过YUM源安装GCC相关软件。
yum -y install gcc gcc-c++ gcc-gfortran.aarch64 libgcc.aarch64 make cmake libtool autoconf automake ant wget git vim

解决-fsigned-char问题(修改gcc)。

  1. 寻找gcc所在路径(一般位于“/usr/bin/gcc”)。
    command -v gcc
  2. 更改原gcc文件的名字(例如改成gcc-impl)。
    mv /usr/bin/gcc /usr/bin/gcc-impl
  3. 新建gcc文件。
    vi /usr/bin/gcc
    填入如下内容保存。
    #! /bin/sh
    /usr/bin/gcc-impl -fsigned-char “$@”
  4. 给gcc文件添加执行权限。
    chmod +x /usr/bin/gcc
  5. 确认GCC是否可用。
    gcc --version

解决-fsigned-char问题(修改g++)。

  1. 寻找g++所在路径(一般位于“/usr/bin/g++”)。
    command -v g++
  2. 更改原g++文件的名字(例如改成g+±impl)。
    mv /usr/bin/g++ /usr/bin/g+±impl
  3. 新建g++文件。
    vi /usr/bin/g++
    填入如下内容保存。
    #! /bin/sh
    /usr/bin/g+±impl -fsigned-char “$@”
  4. 给g++文件添加执行权限。
    chmod +x /usr/bin/g++
  5. 确认g++是否可用。
    g++ --version

步骤1 安装rpmbuild工具。
yum install rpmdevtools
步骤2 创建编译rpm包所需的目录。
mkdir -p ~/rpmbuild/{SOURCES,SPECS}
步骤3 下载redis 5.0.4源码tar包,并放入到的SOURCES目录中。
cd ~/rpmbuild/SOURCES
wget http://download.redis.io/releases/redis-5.0.4.tar.gz
步骤4 进入SPECS路径下,新建spec文件。
cd ~/rpmbuild/SPECS
vi redis.spec
输入i使得文本处于可插入状态,将下述spec文件内容拷贝进redis.spec中,然后按esc
后输入:wq保存退出。

Name: redis
Version: 5.0.4
Release: 2
Summary: A persistent key-value database
License: BSD and MIT
URL: https://redis.io
Source: http://download.redis.io/releases/%{name}-%{version}.tar.gz

%description
Redis is an advanced key-value store. It is often referred to as a dattructure server since keys can contain
strings, hashes
,lists, sets anorted sets.

%prep
%autosetup
sed -i 's/daemonize no/daemonize yes/g' redis.conf
sed -i 's#usr/local#usr#g' ./utils/redis_init_script
sed -i 's#/${REDISPORT}##g' ./utils/redis_init_script

%build
make

%install
%make_install PREFIX=%{buildroot}%{_prefix}
mkdir -p %{buildroot}%{_unitdir}
install -pDm640 %{name}.conf %{buildroot}%{_sysconfdir}/%{name}.conf

%files
%{_bindir}/%{name}-*
%attr(0755, redis, root) %config(noreplace) %{_sysconfdir}/%{name}.conf

%changelog
* Fri Jul 24 2020 -5.0.4-2
- Add service
* Tue Jul 21 2020 -5.0.4-1
- Package init

进入到“rpmbuild/SPECS”路径下执行编译rpm包。
rpmbuild -ba --target=aarch64 redis.spec

编译完成的rpm安装包在“~/rpmbuild/RPMS”目录下。

2)在centos上编译成功的redis-5.0.4-2.aarch64.rpm放在 make/photon/redis目录下。然后修改基础镜像文件Dockerfile.base。

cp ~/rpmbuild/RPMS/aarch64/redis-5.0.4-2.aarch64.rpm make/photon/redis/
vim make/photon/redis/Dockerfile.base
FROM photon:4.0

COPY redis-5.0.4-2.aarch64.rpm /home/
RUN tdnf install -y createrepo_c sudo \
   && createrepo_c /home/ \
   && echo -e "[ph3]\nname=ph3\nbaseurl=file:///home/\ngpgcheck=0\nenabled=1" > /etc/yum.repos.d/ph3.repo \
   && sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/photon-updates.repo \
   && tdnf install -y redis \
   && sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/photon-updates.repo \
   && rm -rf /home/* /etc/yum.repo.d/ph3.repo

五、安装harbor-2.3.0版本

git clone https://github.com/goharbor/harbor-arm.git
cd harbor-arm && make download

刷新配置

make prepare_arm_data
make pre_update

Compile harbor 组件和修改配置内的版本号:

make compile COMPILETAG=compile_golangimage
sed -i ‘s#:dev-arm#:v2.3.0#g’ make/photon/prepare/version

build harbor arm版本镜像:

make build GOBUILDTAGS=“include_oss include_gcs” BUILDBIN=true NOTARYFLAG=true TRIVYFLAG=true CHARTFLAG=true GEN_TLS=true PULL_BASE_FROM_DOCKERHUB=false

安装harbor

cd src/github.com/goharbor/harbor/make
cp harbor.yml.tmpl harbor.yml

配置harbor域名或相关配置,我这关闭https注释相关配置

vim harbor.yml

hostname: 190.XXX.123.97
···
https:
  # https port for harbor, default is 443
  #port: 443
  # The path of cert and key files for nginx
  #certificate: /your/certificate/path
  #private_key: /your/private/key/path

执行安装
sh install.sh
image.png

导出离线安装包(可选)

make package_offline GOBUILDTAGS=“include_oss include_gcs” BUILDBIN=true NOTARYFLAG=true TRIVYFLAG=true CHARTFLAG=true GEN_TLS=true PULL_BASE_FROM_DOCKERHUB=false

完成后会在当前目录下生成harbor_offline_installer_xxx.tgz离线安装包,解压执行安装脚本即可部署harbor
tar -xvf harbor_offline_installer_xxx.tgz && cd harbor
sh install.sh

浏览器输入IP就能访问harbor了
image.png

至此教程结束

参考文档:

Docker安装:https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/Docker/kunpengdocker_03_0004.html
docker-compose安装:https://github.com/ubiquiti/docker-compose-aarch64/releases/tag/1.22.0
Redis安装:https://ic-openlabs.huawei.com/chat/download/Redis 5.0.4 移植指南(CentOS 7.6 & openEuler 20.03).pdf
harbor安装:https://blog.51cto.com/u_7075695/5214498#harborarm__6

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。