信创改造项目.md
总控部署适配信创平台技术预研
背景
客户环境复杂,目前总控平台只适合ubuntu20.04,x86架构。需要研制出适合arm64架构的总控,让总控平台更具生存力。
解决方案
找到对应组件的可执行文件进行替换
适用场景
arm64的linux平台,例如:麒麟银河系列
##难点
其他服务的可执行文件都不支持arm架构,都需要找到对应的文件进行替换。
未知因素
引擎机器上的组件(envoy等)是不是也得替换?
Mysql改造-已完成
提取mysqld 和 mysql文件进行替换。操作步骤如下:
mysql安装目录部分文件替换
1
2
3
4wget https://obs.cn-north-4.myhuaweicloud.com/obs-mirror-ftp4/database/mysql-5.7.27-aarch64.tar.gz
tar -xvf mysql-5.7.27-aarch64.tar.gz -C /data/
cp -f /data/mysql-5.7.27-aarch64/bin/mysql /opt/mysql/bin/mysql
cp -f /data/mysql-5.7.27-aarch64/bin/mysqld /opt/mysql/bin/mysqld最后,正常执行安装脚本即可(/opt/mysql/hack/install.sh)
安装过程有报错误,但不影响安装。解决方式如下:
1
2mkdir -p /opt/mysql/share
cp -f /data/mysql-5.7.27-aarch64/share/english/errmsg.sys /opt/mysql/share/errmsg.sys
SC代码-已完成
util/common/cpuid.go中存在两个空方法体的函数,目前无法在arm64的linux环境中编译通过。
1 |
|
解决方案:
将util/common/cpuid_linux_amd64.s 替换,先达到可用,业务逻辑后续再补
SC所使用的系统命令
1 |
|
SC Makefile文件改造-已完成
新增适配目标机器的编译参数:GOARCH=arm64 GOOS=linux,新增部分代码如下:
1 |
|
其他代码服务-已完成
打包平台机器,编译参数增加:GOARCH=arm64 GOOS=linux
NSQ可执行文件改造-已完成
可执行文件(/opt/nsq/bin/nsqd,/opt/nsq/bin/nsqlookupd,版本nsqd v1.2.1),执行报错(格式不支持)。需要改造。
Dec 15 10:01:29 IC22-04-007 systemd[43186]: nsqlookupd.service: Failed to execute command: Exec format error
Dec 15 10:01:29 IC22-04-007 systemd[43186]: nsqlookupd.service: Failed at step EXEC spawning /opt/nsq/bin/nsqlookupd: Exec format error
解决方案:
https://github.com/nsqio/nsq/releases/
- 下载对应版本的压缩包,解压,将bin目录下的文件全部替换原有文件。
ETCD可执行文件改造-已完成
可执行文件(/opt/etcd/bin/etcd,版本etcd Version: 3.4.9),执行报错(格式不支持)。需要改造。
解决方案:
https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-arm64.tar.gz
- 下载压缩包,解压。替换原有的etcd。
- 在/opt/etcd/config/etcd.conf文件里面追加:ETCD_UNSUPPORTED_ARCH=arm64
1
2
3
4ETCD_OPTS="--name single \
...
"
ETCD_UNSUPPORTED_ARCH=arm64
Redis可执行文件改造-已完成
可执行文件(/opt/redis/bin/redis-server,版本Redis server v=6.2.10),执行报错(格式不支持)。需要改造。
解决方案:
https://download.redis.io/releases/
- 下载压缩包,上传至arm架构的linux服务器上。解压。然后 make。
- 将得到的redis-server 替换原有的文件即可。
Mongodb可执行文件改造-已完成
可执行文件(/opt/mongodb/bin/mongod,版本db version v5.0.9),执行报错(格式不支持)。需要改造。
Dec 15 10:30:44 IC22-04-007 systemd[46509]: mongod.service: Failed to execute command: Exec format error
Dec 15 10:30:44 IC22-04-007 systemd[46509]: mongod.service: Failed at step EXEC spawning /opt/mongodb/bin/mongod: Exec format error
解决方案:
https://www.mongodb.com/download-center/community/releases/archive
1.下载对应版本和架构的压缩包,解压,将bin目录下的 mongod,mongo替换原有的文件
api-gov 可执行文件改造-已完成
hyperscan 可执行文件改造-已完成
暂时将原有目录拷贝至目标机器
installer可执行文件改造-已完成
cd /root/code/installer && make release
sv可执行文件改造-已完成
1 |
|
引擎服务改造-待完成
Dam可执行文件改造 - 已完成
可以在本地交叉编译或在目标机器直接编译
/opt/dam/bin/dam -version
Kube-apiserver可执行文件改造 - 已完成
已在目标机器直接编译
https://github.com/kubernetes/kubernetes/archive/refs/tags/v1.23.4.tar.gz
make WHAT=cmd/kube-apiserver
webserver可执行文件改造-已完成
可以在本地交叉编译或在目标机器直接编译
/opt/webserver/bin/webserver
nuclei可执行文件改造-已完成
可以在本地交叉编译或在目标机器直接编译
/opt/nuclei/bin/nuclei
风险
如果整体集成测试出现单个组件问题,该如何解决?
SC的命令行依赖需要通过代码审计的方式识别
- 如果组件在代码的运行期中嵌入 执行某个 Ubuntu os 有而 kylin os 没有的命令,这种在构建和启动时很可能检查不出来,甚至只有在已经部署上经过测试才发现,应该由每个组件负责人全局检查代码。