openGauss基于银河麒麟操作系统(debian系列)(国防版)V10 源码编译步骤
# uname -a
Linux zxb-OpenStack-Nova 5.4.18-52-generic #41 SMP Wed Mar 2 15:24:07 CST 2022 aarch64 aarch64 aarch64 GNU/Linux
# openGauss master分支
https://gitee.com/opengauss/openGauss-server.git
# third-party 使用社区编译好的openEuler_arm对应的三方库二进制
https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/binarylibs/gcc10.3/openGauss-third_party_binarylibs_openEuler_arm.tar.gz
安装依赖
apt install flex bison libc-dev libreadline-dev libaio-dev
建头文件、库文件链接
头文件和库文件在对应的/usr/include/aarch64-linux-gnu/目录下,编译时候找不到默认位置,可以将这些目录下的文件夹建软链接指到/usr/include目录下。
## 备份下
cp -r /usr/include/ /usr/include_bak
mv /usr/lib64/ /usr/lib64_bak
## 库文件建软链接
ln -s /usr/lib/aarch64-linux-gnu/ /usr/lib64
## 头文件建软链接
ln -s /usr/include/aarch64-linux-gnu/sys /usr/include/sys
ln -s /usr/include/aarch64-linux-gnu/bits /usr/include/bits
ln -s /usr/include/aarch64-linux-gnu/gnu /usr/include/gnu
ln -s /usr/include/aarch64-linux-gnu/asm /usr/include/asm
系统关闭授权
kylin-sec系统默认开启了操作授权,很多命令需要手动输入Y来确认执行。尤其是在make -sj阶段,多进程并发执行,没法做手动确定。需要暂时关闭。
sudo setstatus softmode -p
导入环境变量
export CODE_BASE=/data/compile/openGauss-server
export BINARYLIBS=/data/compile/openGauss-third_party_binarylibs_openEuler_arm
export GAUSSHOME=$CODE_BASE/dest/
export GCC_PATH=$BINARYLIBS/buildtools/gcc10.3/
export CC=$GCC_PATH/gcc/bin/gcc
export CXX=$GCC_PATH/gcc/bin/g++
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$GCC_PATH/gcc/lib64:$GCC_PATH/isl/lib:$GCC_PATH/mpc/lib/:$GCC_PATH/mpfr/lib/:$GCC_PATH/gmp/lib/:$LD_LIBRARY_PATH
export PATH=$GAUSSHOME/bin:$GCC_PATH/gcc/bin:$PATH
修改源码
注释掉如下一行。高版本linux也定义了gettimeofday,和数据库的定义重复了。去掉数据库里面的函数定义。
注释掉下面文件 168 行 (extern int gettimeofday(struct timeval* tp, struct timezone* tzp);)
src/include/communication/commproxy_interface.h:168
编译源码
./configure --gcc-version=10.3.1 CC=g++ CFLAGS="-O2 -g3" --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-thread-safety --with-readline --without-zlib
make -sj8
make install -sj
初始化和启动数据库 (子用户执行)
## 初始化
gs_initdb -D ~/datanode/dn1 --nodename=node -w test@123
## 启动数据库
gs_ctl start -D ~/datanode/dn1
## 登录数据库
gsql -d postgres -p 5432 -r
问题记录
问题1:找不到 crt1.o 文件
解决方式:该库在/usr/lib/aarch64-linux-gnu/目录下,不在系统默认目录,可以建个软连接指向到 /usr/lib64 下
mv /usr/lib64/ /usr/lib64_bak
ln -s /usr/lib/aarch64-linux-gnu/ /usr/lib64
问题2:could not determine argument types
打开config.log,可以看到这里在找 sys/socket.h 头文件。
ls: 无法访问’/usr/include/sys/socket.h’: 没有那个文件或目录
但是系统上,这些目录在 /usr/include/aarch64-linux-gnu/sys 下。因此对头文件也建立软连接,指向到 /usr/include 下。除了sys外,还有bits gnu asm等目录。
ln -s /usr/include/aarch64-linux-gnu/sys /usr/include/sys
ln -s /usr/include/aarch64-linux-gnu/bits /usr/include/bits
ln -s /usr/include/aarch64-linux-gnu/gnu /usr/include/gnu
ln -s /usr/include/aarch64-linux-gnu/asm /usr/include/asm
问题3: gettimeofday重载错误
高版本linux也定义了gettimeofday,和数据库的定义重复了。去掉数据库里面的函数定义
注释掉:src/include/communication/commproxy_interface.h:168
其他问题
例如编译时候报错,/usr/bin/flex找不到,<libaio.h>头文件找不到等,都是缺少依赖库。
根据名称找到对应依赖下载安装即可。
apt install flex bison libc-dev libreadline-dev libaio-dev