NebulaGraph2.0如何在Linux aarch64系统下离线编译

需求:需要在ARM架构下离线编译NG2.0版本,经过查阅资料未能解决,整理了编译步骤如下:
1》git clone https://github.com/vesoft-inc/nebula.git

2》cd nebula && ./build_dmp.sh (安装依赖这步可省略)

3》source ~/.bashrc (这步可省略)

4》mkdir build && cd build

5》cmake … 生成makefile

6》make 编译(时间比较长)

7》make install 安装Nebula Graph如果不指定 默认安装目录:/usr/local/nebula

8》cd /usr/local/nebula 中有4个文件夹:bin etc scripts share

9》进入 etc目录并修改默认配置文件 将default文件复制一份 改名去掉default 然后修改对应的IP等

10》启动NebulaGraph服务 ./scripts/nebula.service start all
查看服务状态 ./scripts/nebula.service status all

11》连接 ./bin/nebula -u=user -p=password

但是,离线环境下,编译失败,特恳请官方大佬出一个离线环境下对NG2.0的编译安装教程

我们还没正式发版支持,不过最新的 master 是支持的,顺便我仔细看了下你拉错代码了,是这个

git clone https://github.com/vesoft-inc/nebula-graph.git

nebula 对应的是 v1.x 版本,nebula-graph 这个仓库是 v2.x 版本, 你再试试应该就可以了

我写的那个编译流程的确是1.x的,实际编译我用的是2.0的,也就是您发的这个git地址,现在问题是离线条件下编译报错,内网限制,有离线编译NG2.0的吗 :smile:

  1. 机器环境准备如下:
  2. 编译过程出错:
  3. 错误详情:

目前,2.0 版本还没有 AArch64 环境下离线编译的相关文档。你大致可以按照下面的操作试一下:

  • 找一台可以访问公网的机器:
    • 下载 nebula-{graph,common,storage} 三个 repo
    • 根据编译环境的 GCC 和 glibc 版本选择“合适”的 third-party 安装包,地址前缀为:https://oss-cdn.nebula-graph.com.cn/third-party/2.0/ ;后缀为包名,类似 vesoft-third-party-2.0-aarch64-libc-2.17-gcc-10.1.0-abi-11.sh。其中,glibc 的可选版本为 2.{17,23,27,28,31,32},GCC 可选版本为 7.5.0, 8.3.0, 9.{1,2,3}.0, 10.1.0。需要确保编译环境的 GCC 和 glibc 版本大于等于 third party 包名中的版本。
  • 将下载的 repo 和 third party 安装包拷贝至目标机器,然后在目标机器上:
    • cd nebula-graph && mkdir modules && cd modules && ln -s /absolute/path/to/nebula-common common && ln -s /absolute/path/to/nebula-storage storage && cd …
    • sudo bash path/to/vesoft-third-party-xxx.sh
    • mkdir build && cd build
    • cmake -DENABLE_BUILD_STORAGE=ON …
4 个赞

好的,谢谢,我先按您说的尝试一下

元数据服务和存储服务需要编译 http://github.com/vesoft-inc/nebula-storage

您好,是这两个服务也得在ARM下编译吗

graph,storage看你跑在什么机器上,就要用编译到对应平台。common不用自己处理,编译脚本会自动和graph,storage一起编译

common 不需要单独编译


这个是什么问题,我先把.sh文件安装了 然后创建build文件夹,进行cmake编译 这个是什么问题

三个点是什么意思?你打错了吧

三个点去掉了,报找不到CMakeLists.txt文件,然后我copy到build文件夹下,继续执行,如下图所示:


结果报错了,如下图:

是不是我哪里执行的不对呢,请教您 :handshake:


看到了几个问题:

  1. 之前你拷贝过 CMakeLists.txt 到 build 目录且执行了 cmake,这会导致当前 build 目录已经是无效状态(需要清空 build 目录之后重新 cmake)
  2. 你的编译器设置有问题,CMake 没有检测到正确版本的 g++
  3. 你的 nebula-common 似乎不是 master 最新代码,请重新检查三个 repo 的版本信息。

您提到的:
第1个问题,我这边每次编译是按照这个做的,截图中没有体现,事实上我已经清空了
第2个问题,这个编译器设置有问题,具体如何设置
目前是按照离线升级方式做的,具体做法如下:



第3个问题,代码是已经在有公网的机器上git pull到仓库最新的了,这个是确定的

Nebula Graph 用的是 g++,并不是 gcc(请了解两者的区别)
nebula-common 可以确认不是最新的,其他两个请再次确认。

刚重新升级了一下common,应该是刚不久大佬提交的代码,其他graph和storage是最新的:
image
image
image
继续编译执行,还是报那个错:

:joy:
貌似还是旧的啊。vim modules/common/cmake/nebula/ThirdPartyConfig.cmake,你对比一下这个文件和 github上面的最新版,尤其第77行。