OpenYuanrong 是 OpenEuler 社区最近刚开源的一个分布式计算引擎,目前还没有发布正式版本。该项目主要分为三个部分:runtime(多语言运行时),datasystem(数据系统),functionsystem(函数系统)
目前编译适配和部署文档相对都比较潦草,本文尝试以官方教程为基础补充一些编译过程中的操作细节。该项目整体虽然是C++作为主要编程语言开发的,但是并没有使用 makefile 来组织整个项目的编译过程,其中的遍地开花的shell脚本令人眼花缭乱。
获取项目源码
创建一个空的文件夹用于存放项目源码,代码clone后建议修改代码权限以避免存在root权限的文件。
$ mkdir ~/openyuanrong
$ git clone -b master https://gitcode.com/openeuler/yuanrong-functionsystem.git openyuanrong/yuanrong-functionsystem
$ git clone -b master https://gitcode.com/openeuler/yuanrong-datasystem.git openyuanrong/yuanrong-datasystem
$ git clone -b master https://gitcode.com/openeuler/yuanrong.git openyuanrong/yuanrong
$ chown -R 1000:1000 openyuanrong下载代码后目录结构如下
$ tree -L 1 openyuanrong/
openyuanrong/
├── yuanrong-datasystem
├── yuanrong-functionsystem
└── yuanrong-runtime
4 directories, 0 files准备编译环境
因为 OpenYuanrong 是OpenEuler社区的开源软件,所以目前貌似只能支持在OpenEuler系统上编译该软件,同时还强制使用特定的操作系统版本,依赖特定的软件版本,存在较为复杂的耦合关系。
本文推荐在容器镜像中编译该软件,避免大量安装依赖的过程中污染系统的运行环境。在编译时推荐使用16U48GX86架构的机器,且编译后的代码和程序占用大约25GB磁盘,要预先准备好足够的资源。内存使用量通常是核心数的2.5倍,即 MEM = CPU x 2.5 GB/Core
此处推荐使用容器镜像:openeuler/openeuler:22.03-lts-sp4 其他版本的系统镜像容易出现版本不兼容。下载软件编译镜像,通过绑定文件夹的形式启动容器,同时建议以UID=1000的用户权限启动容器。
docker pull openeuler/openeuler:22.03-lts-sp4
docker run -it --rm \
--name make-yuanrong \
--hostname make-yuanrong \
-w /home/yuanrong \
-u yuanrong \
-v $(pwd)/openyuanrong:/home/yuanrong/openyuanrong \
openeuler/openeuler:22.03-lts-sp4 /bin/bash在镜像内使用开发者文档提供的编译环境安装命令安装编译基础软件。这套安装脚本有概率会损坏yum和python环境,谨慎考虑在宿主机上安装。此处需要保持良好的网络链接,无需连接国际互联网。
yum install -y wget
wget https://openyuanrong.obs.cn-southwest-2.myhuaweicloud.com/build_tools/openeuler_22.03_LTS/check_tools.sh
wget https://openyuanrong.obs.cn-southwest-2.myhuaweicloud.com/build_tools/openeuler_22.03_LTS/install_tools.sh
bash install_tools.sh
source /etc/profile.d/buildtools.sh安装完成时会有如下提示:
==========================================
Tool Version
------------------------------------------
Java 1.8.0_382
Maven 3.9.11
Go go1.21.4
Bazel 6.5.0
Python 3.9 3.9.11
Python 3.10 3.10.2
Python 3.11 3.11.4
Ninja OK (via ninja-build)
protoc 3.14.0
CMake 3.22.0
GCC 10.3.1
glibc 2.34
Doxygen 1.9.2
==========================================
Build environment is ready.
Run: source /etc/profile.d/*.sh to load in current shell.编译OpenYuanrong
编译yuanrong-dayasystem数据系统
启动数据系统的编译(在哪个目录下启动这个脚本都可以)
cd ~/openyuanrong
bash yuanrong-datasystem/build.sh -X off编译完成后可以看到如下编译产物
$ tree yuanrong-datasystem/output/
yuanrong-datasystem/output/
├── openyuanrong_datasystem-0.5.0-cp310-cp310-manylinux_2_34_x86_64.whl
└── yr-datasystem-v0.5.0.tar.gz
0 directories, 2 files没有指定版本号时编译脚本自动使用了0.5.0版本号,版本号是从代码仓内的文件中获取的,也是绝了。
编译yuanrong-functionsystem函数系统
拷贝数据系统编译产物到函数系统的文件夹中,为函数系统的编译提供数据系统的SDK,其中数据系统编译。
cd ~/openyuanrong
mkdir -p yuanrong-functionsystem/vendor/src
cp -a yuanrong-datasystem/output/yr-datasystem-v0.0.0.tar.gz yuanrong-functionsystem/vendor/src/yr-datasystem.tar.gz使用内置的脚本可以实现系统编译依赖下载、源码编译和产物打包等功能。
bash run.sh build -v 0.0.1 -j 16-j:JOB_NUM,编译并发度,设置程序编译时使用的CPU核心数量。默认值为:OS核心数-v:VERSION,编译版本号,设置程序编译是程序中记录的版本号。默认值为:0.0.0
bash run.sh pack -v 0.0.1-v:VERSION,编译版本号,设置程序编译是程序中记录的版本号。默认值为:0.0.0
编译yuanrong-runtime多语言运行时
未完待续

华为自己yy的需求组成的混合产物罢了
这个究竟是什么东西 还是没有搞明白