openGauss数据库源码解析(二)| openGauss开发快速入门(5)

2023年 10月 24日 81.6k 0

2.3 开发和编译
作为openGauss数据库开发者,在基于openGauss开源产品进行二次开发后,往往需要编译openGauss对所开发的功能的实现情况进行验证。本节向读者简要介绍openGauss的编译方法,详细的内容请参见openGauss官网(https://opengauss.org/zh/docs/1.1.0/docs/Compilationguide/Compilation.html)。
2.3.1 搭建开发环境
搭建开发环境之前需要在码云(https://gitee.com/)上完成注册Gitee账号、签署CLA协议(贡献者许可协议),详情请参见2.4.2社区环境准备。

  1. 在社区拉取个人分支
    (1) 进入docs(文档)或者openGauss-server(代码)仓库。此处以docs仓库举例。如图2-4所示。

图2-4 docs仓库
(2) 单击右上角“Forked”按钮,Fork(复刻)个人分支。如图2-5所示。

图2-5 Fork个人分支
2. 安装并配置Git环境
(1) 安装Git环境。
下载Git客户端并按默认设置安装,Git下载地址:https://git-scm.com/download/win,根据操作系统位数(32位/64位),下载安装相应的Git(命令行工具),也可以下载TortoiseGit(可视化工具)。
(2) 配置Git环境。
全局配置Git用户名。
git config --global user.name “Your Name”
"Your Name"为Gitee账号名称。您可以在Gitee个人主页获取。
全局配置Git邮箱。
git config --global user.email “email@example.com”
邮箱为注册的Gitee的主邮箱,可通过Gitee个人设置中的“多邮箱管理”获取。
生成ssh密钥。
ssh-keygen -t rsa -C “email@example.com”
cat ~/.ssh/id_rsa.pub
登录远程仓库网站Gitee账户https://gitee.com/profile/sshkeys并添加生成的公钥。
在本地创建openGauss-server文件夹,将远程仓库克隆至本地。
cd openGauss-server
git clone https://gitee.com/Your Name/openGauss-server.git
Your Name为全局配置的Git用户名。
设置本地工作目录的upstream源。
git remote add upstream https://gitee.com/opengauss/ openGauss-server.git
设置同步方式。
git remote set-url --push upstream no_push
3. 安装开发工具
openGauss内核开发以C/C++语言为主,本节以安装VScode(visual studio code)工具为例进行介绍。
(1) 登录https://code.visualstudio.com/download下载VScode软件。如图2-6所示。请根据操作系统选择相应的版本,本节以64位Windows操作系统为例。

图2-6 VScode下载页面
(2) 单击完成下载的软件执行安装,选择“我同意此协议”后单击“下一步”,如图2-7所示。

图2-7 安装初始页面
(3) 确认安装位置后单击“下一步”,如图2-8所示。

图2-8 确认安装位置
(4) 配置环境变量。
选中“添加到PATH(重启后生效)”复选框,勾选此选项后可不再配置环境变量直接使用,如图2-9所示。

图2-9 配置环境变量
(5) 单击“完成”,结束安装,如图2-10所示。

图2-10 安装完成
(6) 安装openGauss所需的开发语言,如图2-11所示。

图2-11 安装C/C++开发语言
4. 提交代码
修改完openGauss代码后需要将修改后的代码提交至开源社区,本节介绍如何提交代码。
(1) 将所有修改的文件添加到Git的缓存区。
git add .
(2) 提交缓存区到自己的远端仓库。
git commit -m “message”
(3) 提交修改至自己的远端仓库。
git push origin master
5. 提交合并需求
通过新建Pull Request提交合并需求至openGauss社区。社区上详细操作请参见“2.4.4 贡献代码和文档”。

2.3.2 搭建编译环境
本节介绍openGauss的编译环境要求。

  1. 操作系统环境要求
    X86架构:
    (1) CentOS 7.6。
    (2) openEuler 20.3LTS。
    ARM架构:
    (1) openEuler 20.3LTS。
    (2) 麒麟V10。
  2. 软件依赖要求
    openGauss的软件依赖要求如表2-8所示。
    依赖软件建议使用“1. 操作系统环境要求”中操作系统安装光盘或者源中的默认安装包。如果不存在默认安装包时,请参见表2-8查看软件对应的建议版本。
    表2-8 软件依赖要求
    所需软件 建议版本
    libaio-devel 建议版本:0.3.109-13
    flex 要求版本:2.5.31 以上
    bison 建议版本:2.7-4
    ncurses-devel 建议版本:5.9-13.20130511
    glibc-devel 建议版本:2.17-111
    patch 建议版本:2.7.1-10
    lsb_release 建议版本:4.1
    readline-devel 建议版本:7.0-13
    2.3.3 版本编译
    openGauss的编译过程和生成安装包的过程已经写成了一键式脚本build.sh,可以方便地通过build.sh脚本进行编译操作。也可以自行配置环境变量,通过命令进行编译。本节介绍openGauss编译需要满足的前提条件,编译的操作步骤等,编译流程如图2-12所示。

图2-12 编译流程图

  1. 编译前准备
    1) 代码下载
    本文以CentOS 7.6环境为例进行介绍。代码下载需要在本地安装并配置git。
    (1) 执行如下命令下载代码和开源第三方软件仓库等。
    [user@linux sda]$ git clone [git ssh address] openGauss-server
    [user@linux sda]$ git clone [git ssh address] openGauss-third_party
    [user@linux sda]$ # mkdir binarylibs
    上述命令中:
    [git ssh address]表示实际代码下载地址,可在openGauss社区获取这些地址。
    openGauss-server:openGauss的代码仓库。
    openGauss-third_party:openGauss依赖的开源第三方软件仓库。
    binarylibs:存放编译构建好的开源第三方软件的文件夹,用户可通过开源软件编译构建获取。开源软件编译构建耗时长,建议使用已完成编译构建、可直接下载的binarylibs(二进制库)。下载地址是“https://opengauss.obs.cn-south-1.myhuaweicloud.com/2.0.0/openGauss-third_party_binarylibs.tar.gz”,下载完毕后请解压,重命名文件夹为“binarylibs”。
    (2) 下载项进度均显示为100%时表示下载成功。
    2) (可选)开源软件编译构建
    openGauss的编译需要提前把所依赖的开源第三方软件进行编译和构建。这些开源第三方软件存放在代码openGauss-third_party代码仓中,用户下载完毕之后应使用git lfs pull命令获取代码仓中的大文件,并且用户通常只需要构建一次。若存在开源软件版本更新,则需要重新构建。
    由于此步骤耗时较长,使用openGauss-third_party编译构建出了一份binarylibs,用户可以直接下载获取。
    开源三方件编译前置软件要求如表2-9所示。
    表2-9 openGauss开源三方件编译前置软件要求
    所需软件 建议版本
    python3 建议版本:3.6
    python3-dev 建议版本:3
    setuptools 建议版本:36.6.1
    libaio-devel 建议版本:0.3.109-13
    flex 要求版本:2.5.31 以上
    ncurses-devel 建议版本:5.9-13.20130511
    lsb_release 建议版本:4.1
    pam-devl 建议版本:1.1.8-1.3.1
    ncurses-devel 建议版本:5.9-13.20130511
    libffi-dev 建议版本:3.1
    patch 建议版本:2.7.1-10
    golang 建议版本:1.13.3及以上
    autoconf 建议版本:2.69
    automake 建议版本:1.13.4
    byacc 建议版本:1.9
    cmake 建议版本:3.19.2
    diffutils 建议版本:3.7
    openssl-devel 建议版本:1.1.1
    libtool 建议版本:2.4.2及以上
    libtool-devel 建议版本:2.4.2及以上

在开始编译第三方库之前,请自行准备好gcc7.3。建议用已发布的编译好的第三方库中GCC(GNU compiler collection,GNU编译器集),并配置好环境变量。
在安装完表2-9开源软件编译前置要求中的软件后,请将python默认版本指向python3.x并执行如下操作。
(1) 执行如下命令进入内核依赖的开源第三方软件目录,进行开源第三方软件的编译和构建,产生相应的二进制程序或库文件。“/sda/openGauss-third_party”为开源第三方软件下载目录。
[user@linux sda]$ cd /sda/openGauss-third_party/build
[user@linux build]$ sh build_all.sh
(2) 用户执行以上命令之后,可以自动生成数据库编译所需的开源第三方软件,如果想单独的生成某个开源三方软件,可以进入对应的目录,执行build.sh脚本,如下所示即可编译生成openssl。
[user@linux sda]$ cd /sda/openGauss-third_party/dependency/openssl
[user@linux openssl]$ sh build.sh
(3) 执行上述脚本,最终编译构建出的结果会存放在openGauss-third_party同级的binarylibs目录。这些文件会在后面编译openGauss-server时使用到。
3) 编译脚本build.sh介绍
“openGauss-server/build.sh”是编译过程中的重要脚本工具。其集成了软件安装编译、产品安装包编译两种功能,可快速进行代码编译和打包。
详细参数选项如表2-10所示。
表2-10 build.sh功能选项介绍
功能选项 缺省值 参数 说明
-h 不使用此选项 - 帮助菜单
-m release [debug | release | memcheck] 选择编译目标版本。有三个目标版本可以选择:
release:生成release版本的二进制程序。此版本编译时,通过配置GCC(GNU compiler collection,GNU编译器集)高级优化选项,去除内核调试代码。此选项通常在生产环境或性能测试环境中使用
debug:表示生成debug版本的二进制程序。此版本编译时,增加了内核代码调试功能,一般用于开发自测环境
memcheck:表示生成memcheck版本的二进制程序。此版本编译时,在debug版本的基础上增加了ASAN功能,用于定位内存问题
-3rd ${代码路径}/binarylibs [binarylibs path] 指定binarylibs的路径,需绝对路径
-pkg 不使用此功能 - 将代码编译结果压缩封装成安装包
-nopt 不使用此功能 - 如果使用此功能,则对鲲鹏平台的相关CPU不进行优化

该脚本中的每个选项都有一个默认值。选项数量少,依赖简单。因此,该脚本易于使用。如果实际需要的参数值与默认值不同,请根据实际情况配置。
2. 软件安装编译
软件安装编译即将代码编译生成软件,并将软件安装到机器上。openGauss提供一键式编译脚本build.sh进行操作,也可以自己配置环境变量手动操作。两种方式将在本章节的一键式脚本操作步骤、手动编译操作步骤中进行讲解。
1) 前提条件
(1) 已按照搭建编译环境的要求准备好相关软硬件,并且已经下载了代码。
(2) 已完成开源软件编译构建,并将gcc7.3按已发布的编译好的第三方库目录结构放置在output目录中。
(3) 了解 build.sh脚本的参数选项和功能。
(4) 代码环境干净,没有以前编译生成的文件。
2)产品安装包编译
安装包编译即将代码编译生成软件安装包,安装包的编译打包过程集成在build.sh之中。
(1) 执行如下命令进入到软件代码编译脚本目录。
[user@linux sda]$ cd /sda/openGauss-server
(2) 执行如下命令,编译安装openGauss。
[user@linux openGauss-server]$ sh build.sh -m [debug | release | memcheck] -3rd [binarylibs path] –pkg
例如:
sh build.sh -pkg # 编译安装release版本的openGauss安装包。需代码目录下有binarylibs或者其软链接,否则将会失败。
sh build.sh -m debug -3rd /sdc/binarylibs -pkg # 编译安装debug版本的openGauss安装包。
(3) 显示如下内容,表示安装包编译成功。
success!
生成的安装包存放在“./output”目录下,编译日志为“./build/script/makemppdb_pkg.log”,安装包打包日志为“./build/script/make_package.log”。
3) 手动编译
(1) 执行如下命令进入到软件代码编译脚本目录。
[user@linux sda]$ cd /sda/openGauss-server
(2) 执行脚本获取当前操作系统版本。
[user@linux openGauss-server]$ sh src/get_PlatForm_str.sh
如果结果显示为Failed或者其他版本,表示openGauss不支持当前操作系统。
(3) 配置环境变量,根据自己的代码下载位置补充两处"____",将步骤2获取到的结果替换下面的***。
export CODE_BASE=________ # openGauss-server的路径
export BINARYLIBS=________ # binarylibs的路径
export GAUSSHOME=CODEBASE/dest/exportGCCPATH=CODE_BASE/dest/
export GCC_PATH=CODEB​ASE/dest/exportGCCP​ATH=BINARYLIBS/buildtools/***/gcc7.3/
export CC=GCCPATH/gcc/bin/gccexportCXX=GCC_PATH/gcc/bin/gcc
export CXX=GCCP​ATH/gcc/bin/gccexportCXX=GCC_PATH/gcc/bin/g++
export LD_LIBRARY_PATH=GAUSSHOME/lib:GAUSSHOME/lib:GAUSSHOME/lib:GCC_PATH/gcc/lib64:GCCPATH/isl/lib:GCC_PATH/isl/lib:GCCP​ATH/isl/lib:GCC_PATH/mpc/lib/:GCCPATH/mpfr/lib/:GCC_PATH/mpfr/lib/:GCCP​ATH/mpfr/lib/:GCC_PATH/gmp/lib/:LDLIBRARYPATHexportPATH=LD_LIBRARY_PATH
export PATH=LDL​IBRARYP​ATHexportPATH=GAUSSHOME/bin:GCCPATH/gcc/bin:GCC_PATH/gcc/bin:GCCP​ATH/gcc/bin:PATH
(4) 选择版本进行configure。
debug版本:代表生成debug版本的二进制程序,该版本编译时,增加内核代码调试功能,通常用于开发自测环境。
./configure --gcc-version=7.3.0 CC=g++ CFLAGS=’-O0’ --prefix=GAUSSHOME−−3rd=GAUSSHOME --3rd=GAUSSHOME−−3rd=BINARYLIBS --enable-debug --enable-cassert --enable-thread-safety --without-readline --without-zlib
release版本:代表生成release版本的二进制程序,该版本编译时,配置GCC高级别优化选项,去除内核调试代码,通常用于生产环境或性能测试环境。
./configure --gcc-version=7.3.0 CC=g++ CFLAGS="-O2 -g3" --prefix=GAUSSHOME−−3rd=GAUSSHOME --3rd=GAUSSHOME−−3rd=BINARYLIBS --enable-thread-safety --without-readline --without-zlib
memcheck版本:代表生成memcheck版本的二进制程序,该版本编译时,在debug版本基础上新增ASAN(addresssanitizer,地址消毒剂。一个开源编程工具,它可以检测内存损坏错误)功能,通常用于定位内存问题。
./configure --gcc-version=7.3.0 CC=g++ CFLAGS=’-O0’ --prefix=GAUSSHOME−−3rd=GAUSSHOME --3rd=GAUSSHOME−−3rd=BINARYLIBS --enable-debug --enable-cassert --enable-thread-safety --without-readline --without-zlib --enable-memory-check

在ARM平台上,“CFLAGS”参数需要添加“-D__USE_NUMA”参数。在ARMv8.1或者更高的平台上(例如鲲鹏920),“CFLAGS”参数需要添加“-D__ARM_LSE”参数。
若将binarylibs移动到openGauss-server下,或在openGauss-server下创建了指向binarylibs的软链接,可不指定“–3rd”参数。但这样做的话需要注意其容易被git clean等操作删除。
(5) 执行如下命令编译安装。
[user@linux openGauss-server]$ make -sj[user@linux openGauss-server]$ make install -sj
(6) 显示如下内容,表示编译安装成功。
openGauss installation complete.
编译后软件安装路径为:GAUSSHOME,编译后的二进制放置路径为:GAUSSHOME/bin。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论