ubuntu18.04_x86_64系统----openGauss数据库编译指导

2021-04-20 shirley_zhengx

openGauss数据库编译指导

openGauss数据库的编译需要依赖许多三方库,在社区 openGauss-third_party 仓库中存放了主要的依赖,首先依赖特定的gcc版本编译完三方库后,就可使用已编译好的三方库来编译数据库。

1.环境描述

针对X86平台Ubuntu系统下openGauss二进制安装包的编译作出指导,平台信息描述如下:

1.1.平台信息

架构 x86_64 (通过uname -p命令查看)
CPU Intel(R) Xeon(R) Gold 6266C CPU @ 3.00GHz (通过lscpu命令查看)
硬盘 40 + 100 (通过lscpu命令查)
内存 48G (通过lscpu命令查看)
OS Ubuntu18.04.5 LTS (通过ls-release -a命令查看)

1.2.编译版本

openGauss-third-party 社区仓库下载最新源码
openGauss-server 社区仓库master分支

1.3.系统目录软链接

软链接1:ln -s /usr/lib/x86_64-linux-gnu /usr/lib64/

软链接2:ln -s /usr/lib64 /lib64

2.编译三方库

针对 centosopenEuler操作系统已经提供了编译好的二进制三方库,可直接使用社区提供的编译好的文件openGauss-third_party_binarylibs.tar.gz

针对Ubuntu操作系统,社区不提供编译好的三方库二进制文件,需用户自己编译,也可使用博客中已编译好的三方库二进制文件openGauss-third_party_binarylibs.tar.gz。基于Ubuntu系统的三方库编译步骤如下:

2.1.编译步骤概述

(1) 编译 gcccmake
(2) 下载三方库源码,修改脚本增加Ubuntu平台信息
(3) 在openGauss-third_party/build 下,运行 sh build_all.sh ,即可进行全量三方库的编译。
编译顺序为 opensslbuildtoolsplatformdependency
(4) 编译完成后,编译结果在 openGauss-third_party/output 目录下。

2.2.依赖库

2.2.1 依赖安装

依赖库 Ubuntu对应安装版本
libaio apt install libaio-dev
ncurses apt install libncurses5-dev
pam apt install libpam0g-dev
libffi apt install libffi-dev
libtool apt install libtool
openssl apt install openssl
rpm2cpio apt install rpm2cpio
flex apt install flex
bison apt install bison

2.2.2 特殊依赖

(1) gcc (推荐使用 7.3.0 版本)

gcc编译请参照:[gcc编译指导](/zh/post/xingchen/gcc_compile/)

(2) cmake (cmake推荐 >=3.16(如果系统中的cmake版本>=3.16则直接使用系统自带cmake即可)
下载源码:https://github.com/Kitware/CMake/releases
解压源码:tar cmake-3.18.5.tar.gz
编译安装:../configure prefix=/usr/local/cmake318 (prefix为安装路径)
make -j && make install -j
导入环境变量:

    export CMAKE_PATH=/usr/local/cmake318 

    export LD_LIBRARY_PATH=$CMAKE_PATH/lib:$LD_LIBRARY_PATH

    export PATH=$CMAKE_PATH/bin:$PATH

(3) python
安装:apt install python3
Tips: 确保python命令链接的Python版本是python3,通过python –version确定,如果不是python3,可通过软链接修改:ln -s /usr/bin/python3.7 /usr/bin/python,修改之后再次通过python –version确定python版本

2.2.3 其它依赖

(1) jemalloc 依赖 autoconf : apt install autoconf
(2) libthrift 依赖 pkg-config : apt install pkg-config
(3) etcd 依赖 golang : apt install golang
(4) pljava 依赖 libkrb5-dev: apt install libkrb5-dev

2.3.源码脚本修改

(1) 修改 openGauss-third_party/build/get_PlatForm_str.sh 增加新的平台,如下图

$kernel信息可以通过命令获取:

lsb_release -d | awk -F ' ' '{print $2}'| tr A-Z a-z

(2) 在以下三方依赖中, 在其build.py文件中增加ubuntu平台信息。

openGauss-third_party/dependency/fio/build.py
openGauss-third_party/dependency/iperf /build.py
openGauss-third_party/dependency/jemalloc/build.py
openGauss-third_party/dependency/kerberos/build.py
openGauss-third_party/dependency/libcgroup/build.py
openGauss-third_party/dependency/libedit/build.py
openGauss-third_party/dependency/nanomsg /build.py
openGauss-third_party/dependency/numactl/build.py
openGauss-third_party/dependency/openssl/build.py
openGauss-third_party/dependency/protobuf/build.py

在build.py/binary_parse函数中增加平台信息:

elif platform_str == 'ubuntu18.04_x86_64':
            binary_list.append(platform_str)

以下错误信息均是由于未增加平台信息引起:

Failed
[Error] the plat form is not supported!
[ERROR] Not supported platform type

(4) 在ubuntu系统中对三方库的特殊修改

/openGauss-third_party/dependency/masstree/build.sh修改rename命令

```
$PLATFORM = "$(bash $(pwd)/../../build/get_PlatForm_str.sh"
If [ "$PLATFORM"x = "ubuntu18.04_x86_64"x ];then
    rename 's/\.cc/\.cpp/' $MASSTREE_MEGRED_SOURCES_DIR/*.cc
else
    rename ".cc" ".cpp" $MASSTREE_MEGRED_SOURCES_DIR/*.cc
fi 
```

/openGauss-third_party/dependency/snappy/build.sh修改mv命令

```
LIB_PATH=install_comm/lib64
if [ -d "$LIB_PATH" ];then
mv install_comm/lib64 install_comm/lib
fi
```

/openGauss-third_party/dependency/zstd/build.sh修改mv命令

LIB_PATH=../../../../install_comm/lib64
if [ -d "$LIB_PATH" ];then
    mv  ../../../../install_comm/lib64/libzstd* ../../../../install_comm/lib/
fi

/openGauss-third_party/dependency/parquet/build.sh修改mv命令

LIB_PATH=${LOCAL_DIR}/install_comm/lib64
if [ -d "$LIB_PATH" ]; then
    mv ${LOCAL_DIR}/install_comm/lib64 ${LOCAL_DIR}/install_comm/lib
fi

openGauss-third_party/dependency/protobuf/build.py中的build_component函数,修改mv_cmd变量,如下图。

2.4.三方库编译及结果

(1) 进入到openGauss-third_party/build目录,运行 sh build_all.sh,全量编译三方库。 如果在编译dependency过程中,某一三方库编译有错误,可进入某一个三方库中单独编译,解决错误后,可以在dependency/build/build_dependency.sh中注释掉已经编译好的三方库,只编译还未编译成功的库,分组单独进行编译。

编译dependency

cd openGauss-third_party/dependency/build/
sh build_dependency.sh

(2) 编译结果在 openGauss-third_party/output 之中。

将编译好的 gmp mpfr mpc isl gcc 目录拷贝到openGauss-third_party/output/buildtools/${platform}/gcc7.3下,output目录即为完整的三方库二级制。将output目录拷贝出去,重命名为binarylibs,便可以使用它进行数据库编译。

Tips: 对于学生,不建议自己编译三方库,可直接使用提供的三方库二进制包,ubuntu三方库二进制包可在博客第5节中下载。

3.编译数据库

以下介绍如何进行openGauss在ubuntu系统上编译

3.1.准备openGauss-server源码以及代码修改

(1) 进入openGauss-server/src/get_PlatForm_str,添加ubuntu平台信息,如下图。

Tips: 如果三方库要自己编译,请保持openGauss-third_party/build/get_PlatForm_str.shopenGauss-server/src/get_PlatForm_str的平台信息一致。

(2) 进入openGauss-server/src/gausskernel/Makefile,修改代码,如下图。

(3) 进入openGauss-server/build/script/mpp_package.sh,添加ubuntu信息。

if [ X"$kernel" == X"centos" ]; then
    dist_version="CentOS"
elif [ X"$kernel" == X"openeuler" ]; then
    dist_version="openEuler"
elif [ X"$kernel" == X"euleros" ]; then
    dist_version="EulerOS"
elif [ X"$kernel" == X"kylin" ]; then
    dist_version="Kylin"
elif [ X"$kernel" == X"ubuntu" ]; then
    dist_version="Ubuntu"
else
    echo "We only support openEuler(aarch64), EulerOS(aarch64), CentOS, Kylin(aarch64) and Ubuntu(x86) platform."
    echo "Kernel is $kernel"
    exit 1
fi

(4) 进入openGauss-server/build/script/package_opengauss.sh,添加Ubuntu信息。 同(3)添加信息一样

3.2.依赖库

建议使用从列出的操作系统安装盘或安装源中获取的以下依赖软件的默认安装包进行安装。如果不存在以下软件,请参考推荐的软件版本。

依赖库 Ubuntu对应版本
libaio 0.3.110.-5ubuntu0.1
ncurses apt install libncurses5-dev 版本6.1-1ubuntu1.18.04
glibc 2.27-3ubuntu1.3
flex flex2.6.1
bison bison3.5.3
patch 2.7.6
lsb_release 9.20170808ubuntu1
lsb_release 9.20170808ubuntu1
cmake 3.16以上版本

查看版本方式:

    apt list | grep libaio-dev
    flex –version
    bison --version
    patch --version
    apt list | grep lsb
    glibc:ldd --version

Tips: flex2.6.1和bison3.5.3 版本对应,数据库编译才能成功

3.2.环境变量

将自己的opengauss源码包和binarylibs路径放入环境变量文件gauss_env,内容如下:

导入环境变量:

export CODE_BASE=/usr2/compile/openGauss-server
export BINARYLIBS=/usr2/compile/binarylibs
export GAUSSHOME=$CODE_BASE/dest/
export GCC_PATH=$BINARYLIBS/buildtools/ubuntu18.04_x86_64/gcc7.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

Tips: 环境变量里面一定要写export,即使echo $GCC_PATH存在,也要写export才能真正导入路径

参数说明: CODE_BASE 为openGauss-server源码目录; BINARYLIBS 为第一步编译好的三方库二进制目录; GAUSSHOME 为编译完成的目标文件路径; GCC_PATH 二进制中,GCC编译结果存放的路径,在三方库buildtools/ubuntu18.04_x86_64/目录下;

3.3.数据库编译与打包

3.3.1 手动编译

(1) 导入3.2节环境变量
(2) 选择一个版本进行配置

debug版本:
./configure --gcc-version=7.3.0 CC=g++ CFLAGS='-O0' --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-debug --enable-cassert --enable-thread-safety --without-zlib

release版本:

./configure --gcc-version=7.3.0 CC=g++ CFLAGS="-O2 -g3" --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-thread-safety --with-readline --without-zlib

(3) make -sj && make install –sj

3.3.2 一键编译

无需导入环境变量

sh build.sh -m release -3rd /usr2/compile/binarylibs

3.3.1 二进制打包

无需导入环境变量

sh build.sh -m release -3rd /usr3/zxgauss/binarylibs -pkg (参数-pkg表示打包)

打包之后的结果在openGauss-server/output目录下,如下图:

在openGauss-server/output目录下,主要tar包如下图:

Tips: 三方库和数据库编译过程中出现的问题请参考:编译问题解决

4.安装数据库

以下介绍如何进行openGauss在ubuntu系统上安装

4.1.编译安装

(1) 切换到普通用户omm,导入3.2节环境变量
(2) 选择一个版本进行配置

debug版本:
./configure --gcc-version=7.3.0 CC=g++ CFLAGS='-O0' --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-debug --enable-cassert --enable-thread-safety --without-zlib

release版本:

./configure --gcc-version=7.3.0 CC=g++ CFLAGS="-O2 -g3" --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-thread-safety --with-readline --without-zlib

(3) make -sj && make install –sj

(4) 初始化数据库

mkdir $data/dn1  (其中$data指数据目录)

gs_initdb $data/dn1 --nodename single_node -w "opengauss@123"

(5) 启动数据库

gaussdb -D $data/dn1 &

Tips:端口默认安装时5432,如果启动端口占用,在$data/dn1/postgresql.conf下文件中修改port参数。或者使用如下命令,指定端口启动:

gaussdb -D $data/dn1 & -p 12345

(6) 连接数据库

gsql -d postgres -p 12345 -r

4.2.OM安装

(1) 下载OM包,放到指定目录$ompackage中,其中$ompackage是用户自建目录,将OM安装包放入该目录下。OM安装包可自己编译打包出包,或者可直接使用提供的OM安装包,OM安装包可在博客第5节中下载。

mkdir -p $ompackage
tar -zvf openGauss-2.0.0-Ubuntu-64bit-all.tar.gz
chmod 755 -R $ompackage

(2) 准备xml文件,可参照官网安装文档:https://opengauss.org/zh/docs/2.0.0/docs/installation/%E5%88%9B%E5%BB%BAXML%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html

(3) 在root用户下进入$ompackage/script目录下

(4) 执行预安装

gs_preinstall -U omm -G omm -X clusterconfig.xml --sep-env-file=/usr/env

Tips"--sep-env-file"参数是分离环境变量,目录可自定义。

(5) 切换到omm,导入环境变量

su - omm
source /usr/env

(6) 执行安装

gs_install -X clusterconfig.xml

Tips:如有问题,安装细节请参照官网:https://opengauss.org/zh/docs/2.0.0/docs/installation/%E5%AE%89%E8%A3%85openGauss.html

5.下载链接

针对ubuntu18.04_x86_64系统,提供二进制包如下:

三方库二进制包: https://opengauss-beta.obs.cn-north-4.myhuaweicloud.com/binarylibs/binarylibs.tar.gz

OM安装包:https://opengauss-beta.obs.cn-north-4.myhuaweicloud.com/binarylibs/openGauss-2.0.0-Ubuntu-64bit-all.tar.gz

JDBC二进制包:https://opengauss-beta.obs.cn-north-4.myhuaweicloud.com/binarylibs/openGauss-2.0.0-JDBC.tar.gz

ODBC二进制包:https://opengauss-beta.obs.cn-north-4.myhuaweicloud.com/binarylibs/GaussDB-Kernel-V500R001C20-UBUNTU-64bit-Odbc.tar.gz

Notice:提供的基于ubuntu系统的二进制文件包仅供于学习和使用,不推荐直接用于生产环境

【免责声明】本文仅代表作者本人观点,与本网站无关。本网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文仅供读者参考,由此产生的所有法律责任均由读者本人承担。