版本编译

openGauss的编译过程和生成安装包的过程已经写成了一个一键式的脚本build.sh,可以方便的通过脚本进行编译操作。也可以自己配置环境变量,通过命令进行编译。

本章节会介绍openGauss编译需要满足的前提条件,编译的操作步骤等,下图是对编译流程的大致概括,详细内容见下文。

版本编译 - 图1

编译前准备

代码下载

前提条件

已在本地安装并配置git和git-lfs。

操作步骤

  1. 执行如下命令下载代码和开源第三方软件仓库等,其中_[git ssh address]_表示实际代码下载地址,可在openGauss社区获取这些地址。

    1. [user@linux sda]$ git clone [git ssh address] openGauss-server
    2. [user@linux sda]$ git clone [git ssh address] openGauss-third_party
    3. [user@linux sda]$ # mkdir binarylibs 关于此注释步骤,请阅读说明

    版本编译 - 图2 说明:

  2. 下载项进度均显示为100%时表示下载成功。

开源软件编译构建

开源软件编译构建

openGauss的编译,需要提前把所依赖的开源第三方软件进行编译和构建。这些开源第三方软件存放在代码openGauss-third_party代码仓中,用户下载完毕之后应用git lfs pull获取代码仓中的大文件,并且用户通常只需要构建一次。若存在开源软件版本更新,则需要重新构建。

由于此步骤耗时较长,我们使用openGauss-third_party编译构建出了一份binarylibs,用户可以参考代码下载直接下载获取。

表 1 openGauss开源三方软件编译前置软件要求

所需软件

建议版本

python3

建议版本:3.6

python3-dev

建议版本:3

pam-devl

建议版本:1.1.8-1.3.1

ncurses-devel

建议版本:5.9-13.20130511

libffi-dev

建议版本:3.1

patch

建议版本:2.7.1-10

libtool

建议版本:2.4.2及以上

同时需要下载gcc8.2.0的源码包gcc-8.2.0.zip或者gcc-8.2.0.tar.gz,并将其拷贝至对应位置。例如,开源三方件下载目录为/sda/openGauss-third_party,则需要将gcc的源码包拷贝至/sda/openGauss-third_party/buildtools/gcc/路径下。在安装完表 1 openGauss开源三方件编译前置软件要求中的软件、gcc8.2.0的源码包下载并拷贝至对应的路径后,请将python默认版本指向python3.x并执行如下操作:

  1. 执行如下命令进入内核依赖的开源第三方软件目录,进行开源第三方软件的编译和构建,产生相应的二进制程序或库文件。/sda/openGauss-third_party为开源第三方软件下载目录。

    1. [user@linux sda]$ cd /sda/openGauss-third_party/build
    2. [user@linux build]$ sh build_all.sh
  2. 用户执行以上命令之后,可以自动生成数据库编译所需的开源第三方软件,如果想单独的生成某个开源三方软件,可以进入对应的目录,执行build.sh脚本,如:

    1. [user@linux sda]$ cd /sda/openGauss-third_party/dependency/openssl
    2. [user@linux openssl]$ sh build.sh

    即可编译生成openssl

    版本编译 - 图3 说明: 相关的报错日志可以查看对应的build目录下对应名字的log以及对应模块下的log,如dependency模块下的openssl的相关编译安装日志可以查看:

    • /sda/openGauss-third_party/build/dependency_build.log

    • /sda/openGauss-third_party/dependency/build/openssl_build.log

    • /sda/openGauss-third_party/dependency/openssl/build_openssl.log

编译构建结果

执行上述脚本,最终编译构建出的结果会存h放在openGauss-third_party同级的binarylibs目录。这些文件会在后面编译openGauss-server时使用到。

build.sh介绍

openGauss-server/build.sh是编译过程中的重要脚本工具。其集成了软件安装编译、产品安装包编译两种功能,可快速进行代码编译和打包。

详细参数选项如下表所示:

表 2 build.sh参数功能选项介绍。

功能选项

缺省值

参数

功能

-h

不使用此选项

-

帮助菜单。

-m

release

[debug | release | memcheck]

选择编译目标版本。

-3rd

${代码路径}/binarylibs

[binarylibs path]

指定binarylibs的路径,需绝对路径。

-pkg

不使用此功能

-

将代码编译结果压缩封装成安装包。

-nopt

不使用此功能

-

如果使用此功能,则对鲲鹏平台的相关CPU不进行优化。

版本编译 - 图4 说明:

  1. -m [debug | release | memcheck] 表示可选择三种目标版本:

    • release: 代表生成release版本的二进制程序,该版本编译时,配置GCC高级别优化选项,去除内核调试代码,通常用于生产环境或性能测试环境。

    • debug:代表生成debug版本的二进制程序,该版本编译时,增加内核代码调试功能,通常用于开发自测环境。

    • memcheck:代表生成memcheck版本的二进制程序,该版本编译时,在debug版本基础上新增ASAN功能,通常用于定位内存问题。

  2. -3rd [binarylibs path] 为binarylibs的路径。缺省情况下,会认为当前代码文件夹下存在binarylibs。因此如果将binarylibs移动到openGauss-server下,或在openGauss-server下创建了指向binarylibs的软链接,可不指定此选项。但需要注意其容易被git clean等操作删除。

  3. 此脚本每个参数选项都设置了缺省值,且数量并不多,依赖关系简单,因此使用时非常方便。如果用户需求值与缺省值不同,请根据实际情况进行设置。

软件安装编译

软件安装编译即将代码编译生成软件,并将软件安装到机器上。提供一键式编译脚本build.sh进行操作,也可以自己配置环境变量手动操作。两种方式将在本章节的一键式脚本操作步骤、手动编译操作步骤中进行讲解。

前提条件

一键式脚本编译

  1. 执行如下命令进入到软件代码编译脚本目录。

    1. [user@linux sda]$ cd /sda/openGauss-server
  2. 执行如下命令,编译安装openGauss。

    1. [user@linux openGauss-server]$ sh build.sh -m [debug | release | memcheck] -3rd [binarylibs path]

    例如:

    1. sh build.sh # 编译安装release版本的openGauss。需代码目录下有binarylibs或者其软链接,否则将会失败。
    2. sh build.sh -m debug -3rd /sdc/binarylibs # 编译安装debug版本的openGauss
  3. 显示如下内容,表示编译成功。

    1. make compile sucessfully!
    • 编译后软件安装路径为:/sda/openGauss-server/dest
    • 编译后的二进制放置路径为:/sda/openGauss-server/dest/bin
    • 编译日志为:make_compile.log

手动编译

  1. 执行如下命令进入到软件代码目录。

    1. [user@linux sda]$ cd /sda/openGauss-server
  2. 执行脚本获取自己系统的版本

    1. [user@linux openGauss-server]$ sh src/get_PlatForm_str.sh

    版本编译 - 图5 说明: - 显示的结果表示openGauss当前支持的操作系统,openGauss支持的操作系统为centos7.6_x86_64、openeuler_aarch64。 - 如果结果显示为 Failed 或者其他版本,表示openGauss不支持当前操作系统。

  3. 配置环境变量,根据自己的代码下载位置补充两处”____“,将步骤2获取到的结果替换下面的***

    1. export CODE_BASE=________ # openGauss-server的路径
    2. export BINARYLIBS=________ # binarylibs的路径
    3. export GAUSSHOME=$CODE_BASE/dest/
    4. export GCC_PATH=$BINARYLIBS/buildtools/***/gcc8.2/
    5. export CC=$GCC_PATH/gcc/bin/gcc
    6. export CXX=$GCC_PATH/gcc/bin/g++
    7. 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
    8. export PATH=$GAUSSHOME/bin:$GCC_PATH/gcc/bin:$PATH
  4. 选择版本进行configure。

    debug版:

    1. ./configure --gcc-version=8.2.0 CC=g++ CFLAGS='-O0' --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-debug --enable-cassert --enable-thread-safety --without-readline --without-zlib

    release版:

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

    memcheck版:

    1. ./configure --gcc-version=8.2.0 CC=g++ CFLAGS='-O0' --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-debug --enable-cassert --enable-thread-safety --without-readline --without-zlib --enable-memory-check

    版本编译 - 图6 说明:

    1. [debug | release | memcheck] 表示可选择三种目标版本,三种目标版本如下所示:

      • release: 代表生成release版本的二进制程序,该版本编译时,配置GCC高级别优化选项,去除内核调试代码,通常用于生产环境或性能测试环境。

      • debug:代表生成debug版本的二进制程序,该版本编译时,增加内核代码调试功能,通常用于开发自测环境。

      • memcheck:代表生成memcheck版本的二进制程序,该版本编译时,在debug版本基础上新增ASAN功能,通常用于定位内存问题。

    2. 在ARM平台上,CFLAGS需要添加 -D__USE_NUMA 。

    3. 在ARMv8.1或者更高的平台上(例如鲲鹏920),CFLAGS需要添加 -D__ARM_LSE 。

    4. 若将binarylibs移动到openGauss-server下,或在openGauss-server下创建了指向binarylibs的软链接,可不指定–3rd参数。但这样做的话需要注意其容易被git clean等操作删除。

  5. 执行如下命令,编译安装。

    1. [user@linux openGauss-server]$ make -sj
    2. [user@linux openGauss-server]$ make install -sj
  6. 显示如下内容,表示编译安装成功。

    1. openGauss installation complete.
    • 编译后软件安装路径为:$GAUSSHOME
    • 编译后的二进制放置路径为:$GAUSSHOME/bin

产品安装包编译

安装包编译即将代码编译生成软件安装包,安装包的编译打包过程也集成在build.sh之中。

前提条件

操作步骤

  1. 执行如下命令进入到代码目录。

    1. [user@linux sda]$ cd /sda/openGauss-server
  2. 执行如下命令编译出openGauss产品安装包。

    1. [user@linux openGauss-server]$ sh build.sh -m [debug | release | memcheck] -3rd [binarylibs path] -pkg

    例如:

    1. sh build.sh -pkg # 生成release版本的openGauss安装包。需代码目录下有binarylibs或者其软链接,否则将会失败。
    2. sh build.sh -m debug -3rd /sdc/binarylibs -pkg # 生成debug版本的openGauss安装包

    本操作和软件安装编译相比,同样会经历的一键式编译最终生成软件的过程与将软件封装成安装包的过程。对比 build.sh介绍 的使用命令可发现,此处仅增加了一个 ‘-pkg’ 功能选项。

  3. 显示如下内容,表示安装包编译成功。

    1. success!
    • 生成的安装包会存放在./package目录下。
    • 编译日志为:make_compile.log
    • 安装包打包日志为:./package/make_package.log