01

介质下载

opengauss-openGauss-server-v2.0.0.tar.gz(openGauss源码包)

下载地址:

https://gitee.com/opengauss/openGauss-server/repository/archive/v2.0.0?ref=v2.0.0&sha=78689da92cdc811cad2458dc213d007e96864062&format=tar.gz&captcha_type=yunpian

opengauss-openGauss-third_party-2.0.0.zip(openGauss-server依赖的所有三方库的源码包)

下载地址:

https://gitee.com/opengauss/openGauss-third_party/repository/archive/v2.0.0.zip?ref=v2.0.0&sha=3a38c6c134e5b2e39d0557d575ec04302a83584a&format=zip&captcha_type=yunpian

openGauss-third_party_binarylibs.tar.gz(openGauss-server依赖的所有三方库的介质包)

下载地址:

https://opengauss.obs.cn-south-1.myhuaweicloud.com/2.0.0/openGauss-third_party_binarylibs.tar.gz

说明:此文档参考以下官方编译文档链接编写

https://opengauss.org/zh/docs/2.0.0/docs/Compilationguide/%E7%89%88%E6%9C%AC%E7%BC%96%E8%AF%91.html

02

注意事项

当前生成的均是64位的可执行程序。

03

环境信息

基本硬件:

CPU(s):4

model name:Phytium,FT-1500A

磁盘信息:

/dev/mapper/klas-root:46G(容量)

内存信息:

MemTotal:8288512kb

此次编译在飞腾麒麟V10下进行,机器详细信息如下:

Linux localhost.localdomain 4.19.90-vhulk2001.1.0.0026.ns7.15.aarch64 #1 SMP Sun Apr 19 22:34:29 CST 2020 aarch64 aarch64 aarch64 GNU/Linux

NAME="Kylin Linux Advanced Server"

VERSION="V10 (Azalea)"

ID="kylin"

ID_LIKE="fedora"

VARIANT="Server"

VARIANT_ID="server"

VERSION_ID="V10"

PRETTY_NAME="Kylin Linux Advanced Server V10 (Azalea)"

ANSI_COLOR="0;31"

CPE_NAME="cpe:/o:kylin:enterprise_linux:V10:GA:server"

HOME_URL="https://www.kylinos.cn/"

BUG_REPORT_URL="https://bugzilla.kylinos.cn/bugzilla/"

KYLIN_BUGZILLA_PRODUCT="Kylin Linux Advanced Server 10"

KYLIN_BUGZILLA_PRODUCT_VERSION=V10

KYLIN_SUPPORT_PRODUCT="Kylin Linux Advanced Server"

KYLIN_SUPPORT_PRODUCT_VERSION="V10"

04

介质编译

4.1  openGauss-third_party

这个仓库用来编译openGauss依赖的所有开源三方软件。

有四个目录

a. build目录包括可以构建我们所依赖的所有第三方的脚本。

b. buildtools包括用于编译这些opensources和openGauss服务器的构建工具。

c. dependency包括openGauss服务器的所有依赖的开源组件。

d. platform包括openjdk等开源软件。

4.1.1. 相关依赖

以下列举了编译openGauss的软件要求。

(cmake,gcc,python必须要装,其他的尽量装,没有全部装完也可尝试进行编译)

libaio-devel

ncurses-devel

pam-devel

libffi-devel

libtool

libtool-devel

libtool-ltdl

python-devel

openssl-devel

lsb_release(kylin-phytium中介质包名为neokylin-lsb)

bison

cmake

gcc

说明:cmake,gcc有严格的版本要求,cmake版本大于3.16.5,gcc版本必须为7.3.0。

python3请自行编译,并设置好环境变量,此处不做说明。cmake,gcc安装后续单独描述。其他相关依赖请用yum install进行安装。如果受限于网络问题,请挂载Kylin iso进行安装。

安装cmake和gcc之前,请先安装好python3以及以上描述的软件。

4.1.2. 安装cmake

cmake选择的版本为cmake-3.17.1,安装路径为/home/opengauss/3rd/cmake(此后相关依赖都安装在/home/opengauss/3rd下)。安装步骤如下:

tar –zxvf cmake-3.17.1.tar.gz./bootstrap --prefix=/home/opengauss/3rd/cmake-3.17.1make –j4make install

4.1.3.  安装gcc

gcc安装需要依赖gmp、mpfr、mpc,版本分别选择gmp-6.2.0、mpfr-4.0.2、 mpc-1.1.0。安装步骤如下:

gmp

tar –zxvf gmp-6.2.0.tar.gzcd gmp-6.2.0./configure --prefix=/home/opengauss/3rd/gmp-6.2.0 --build=x86 CFLAGS=-fPICmake –j4make install

mpfr

tar –zxvf mpfr-4.0.2.tar.gzcd mpfr-4.0.2./configure --prefix=/home/opengauss/3rd/mpfr-4.0.2 --with-gmp=/home/opengauss/3rd/gmp-6.2.0make –j4make install

mpc

tar –zxvf mpc-1.1.0.tar.gzcd mpc-1.1.0./configure --prefix=/home/opengauss/3rd/mpc-1.1.0 --with-gmp=/home/opengauss/3rd/gmp-6.2.0 --with-mpfr=/home/opengauss/3rd/mpfr-4.0.2make –j4make install

gcc

tar –zxvf gcc-7.3.0cd gcc-7.3.0export LD_LIBRARY_PATH=/home/opengauss/3rd/gmp-6.2.0/lib:/home/opengauss/3rd/mpfr-4.0.2/lib:/home/opengauss/3rd/mpc-1.1.0/lib:$LD_LIBRARY_PATH./configure --prefix=/home/opengauss/3rd/gcc-7.3.0--with-gmp=/home/opengauss/3rd/gmp-6.2.0 --with-mpfr=/home/opengauss/3rd/mpfr-4.0.2 --with-mpc=/home/opengauss/3rd/mpc-1.1.0make –j4make install

4.1.4 编译openGauss-third_party

将opengauss-openGauss-third_party-2.0.0.zip放到目录/home/opengauss下,解压。

cd openGauss-third_party

默认编译命令会并发执行编译,会占用很大内存,如果内存不够,那么使用find . -name "*.sh" | xargs grep "make" | grep j查找到所有的make语句,然后把-sj或者-sj${cpus_num} 或者 –sj 8 这样的字符删除,改为单线程执行。或者根据机器本身的核数以及内存大小自行修改。

设置环境变量:

export CMAKEROOT=/home/opengauss/3rd/cmake-3.17.1export GCC_PATH=/home/opengauss/3rd/gcc-7.3.0export CC=$GCC_PATH/bin/gccexport CXX=$GCC_PATH/bin/g++exportLD_LIBRARY_PATH=$GCC_PATH/lib64:/home/opengauss/3rd/mpc-1.1.0/lib:/home/opengauss/3rd/mpfr-4.0.2/lib:/home/opengauss/3rd/gmp-6.2.0/lib:$CMAKEROOT/lib:$LD_LIBRARY_PATHexport PATH=$CMAKEROOT/bin:$PATH

编译步骤如下:

cd /home/opengauss/openGauss-third_party/buildsh build_all.sh

编完以后,会将结果输出到/home/opengauss/openGauss-third_party/output中。

/home/opengauss/openGauss-third_party/output即为openGauss-server依赖的三方介质目录。

4.2 openGauss-server

这个仓库用来编译gaussdb二进制执行文件。

4.2.1 相关依赖

以下列举了编译openGauss的软件要求。

建议使用从操作系统安装盘或安装源中获取的以下依赖软件的默认安装包进行安装。如果不存在以下软件,请参考推荐的软件版本。(没有全部安装完也可尝试进行编译)

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

readline-devel

7.0-13

4.2.2 编译openGauss-server

将opengauss-openGauss-server-v2.0.0.tar.gz放到目录/home/opengauss,解压。

cd openGauss-server

默认编译命令会并发执行编译,会占用很大内存,如果内存不够,那么使用find . -name "*.sh" | xargs grep "make" | grep j查找到所有的make语句,然后把-sj或者-sj${cpus_num} 或者 –sj 8 这样的字符删除,改为单线程执行。或者根据机器本身的核数以及内存大小自行修改。

设置环境变量:

export CODE_BASE=`pwd`export BINARYLIBS=`pwd`/../openGauss-third_party/outputexport GAUSSHOME=$CODE_BASE/destexport GCC_PATH=/home/opengauss/3rd/gcc-7.3.0export CC=$GCC_PATH/bin/gccexport CXX=$GCC_PATH/bin/g++export LD_LIBRARY_PATH=$GCC_PATH/lib64:/home/opengauss/3rd/mpc-1.1.0/lib:/home/opengauss/3rd/mpfr-4.0.2/lib:/home/opengauss/3rd/gmp-6.2.0/lib:$LD_LIBRARY_PATHexport PATH=$GCC_PATH/bin:$PATH

编译步骤如下:

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

编译过程中会报很多错误,依次解决完以后,编译结果会输出到$GAUSSHOME目录下。

4.2.3 错误解决

将openGauss-third_party_binarylibs.tar.gz放到目录/home/opengauss。

cd /home/opengauss

tar –zxvf openGauss-third_party_binarylibs.tar.gz

编译出错的大部分原因,是4.2.4步骤中编译好的3rd缺少一些动态库和头文件,主要有两种解决方案:

1.cd openGauss-third_party/dependency,进入对应的库目录,参照README.md,进行编译,编译完的结果会输出到openGauss-third_party/output/dependency/kylin_aarch64

2.直接拷贝openGauss-third_party_binarylibs/dependency/openeuler_aarch64目录下对应的库到openGauss-third_party/output/dependency/kylin_aarch64(该方式存在一个问题,有些库直接拷贝过来用不了,缺一些函数符号)

说明:为避免后续步骤出错,建议选择第一种方案。

以下进行错误分析及解决:

1. ../../../../../src/include/access/obs/obs_am.h:33:10: 致命错误:eSDKOBS.h:没有那个文件或目录

问题原因:openGauss-third_party/output中缺少libobs库。

解决办法:openGauss-third_party/dependency中没有libobs源码,选择第二种解决方案。

cp -r openGauss-third_party_binarylibs/dependency/openeuler_aarch64/libobs openGauss-third_party/output/dependency/kylin_aarch64

2. ../../../../src/include/gs_policy/gs_string.h:32:10: 致命错误:boost/functional/hash.hpp:没有那个文件或目录

问题原因:openGauss-third_party/output中缺少boost库。

解决办法:openGauss-third_party/dependency中有boost源码。但是编译流程较为复杂。同时经验证,openGauss-third_party_binarylibs下的boost库能正常使用。因此选择第二种解决方案。

cp -r openGauss-third_party_binarylibs/dependency/openeuler_aarch64/boost openGauss-third_party/output/dependency/kylin_aarch64

3. cipherfn.cpp:1231:5: 错误:‘krb5_set_profile_path’在此作用域中尚未声明

问题原因:openGauss-third_party/output中缺少 kerberos库。

解决办法:openGauss-third_party_binarylibs/dependency中的kerberos库不可用,选择第一种解决方案。

cd openGauss-third_party/dependency/kerberos

python build.py -m all -f krb5-1.17.1.tar.gz -t "comm|llt"

编译报错:

/home/oepngauss/3rd/gcc-7.3.0/lib/gcc/aarch64-unknown-linux-gnu/7.3.0/include-fixed/openssl/bn.h:138:11: 致命错误:openssl/e_os2.h:没有那个文件或目录

解决:

export C_INCLUDE_PATH=/home/opengauss/openGauss-third_party/output/dependency/kylin_aarch64/openssl/comm/include

继续执行python build.py -m all -f krb5-1.17.1.tar.gz -t "comm|llt"

继续报错:

make[2]: *** 没有规则可以创建“binutils.versions”需要的目标“libcom_err_gauss.exports”。停止。(会有好几个类似的错误,统一解决后再继续编译)

解决:

cd /home /opengauss/openGauss-third_party/dependency/kerberos/krb5-1.17.1/src/util/et/

cp –r libcom_err.exports libcom_err_gauss.exports

cd /home /opengauss/openGauss-third_party/dependency/kerberos/krb5-1.17.1/src/lib/krb5

cp –r libkrb5.exports libkrb5_gauss.exports

cd /home /opengauss/openGauss-third_party/dependency/kerberos/krb5-1.17.1/src/lib/crypto

cp –r libk5crypto.exports libk5crypto_gauss.exports

cd /home /opengauss/openGauss-third_party/dependency/kerberos/krb5-1.17.1/src/lib/rpc

cp –r libgssrpc.exports libgssrpc_gauss.exports

cd /home /opengauss/openGauss-third_party/dependency/kerberos/krb5-1.17.1/src/lib/gssapi

cp –r libgssapi_krb5.exports libgssapi_krb5_gauss.exports

继续执行python build.py -m all -f krb5-1.17.1.tar.gz -t "comm|llt"

继续报错:

openssl.so:在函数‘unmarshal_w’中:

openssl.c:(.text+0x330):对‘BN_set_flags’未定义的引用

openssl.so:在函数‘ossl_hash’中:

openssl.c:(.text+0x8b8):对‘EVP_MD_CTX_new’未定义的引用

openssl.c:(.text+0x9ac):对‘EVP_MD_CTX_free’未定义的引用

解决:

cp /home/opengauss/openGauss-third_party_binarylibs/dependency/kylin_aarch64/openssl/comm/lib/libcrypto.so /home/opengauss/openGauss-third_party/dependency/kerberos/krb5-1.17.1/src/lib

cp /home/opengauss/openGauss-third_party_binarylibs/dependency/kylin_aarch64/openssl/comm/lib/libssl.so /home/opengauss/openGauss-third_party/dependency/kerberos/krb5-1.17.1/src/lib

继续执行python build.py -m all -f krb5-1.17.1.tar.gz -t "comm|llt"

说明:如果解决完一个问题以后,接着编译的话,会出现以下类似的提示:

The next patch would create the file src/lib/crypto/libk5crypto_gauss.exports,which already exists!  Assume -R? [n]

如果输入y,会自动将libcom_err_gauss.exports,ibkrb5_gauss.exports,libk5crypto_gauss.exports,libgssrpc_gauss.exports,libgssapi_krb5_gauss.exports这五个文件删除,所以在输入y以后,需要立刻把这五个文件复制一份。

建议:将以上问题的解决方式提前处理好,再进行编译。

4. ../../../../src/include/gs_policy/curl_utils.h:17:10: 致命错误:curl/curl.h:没有那个文件或目录

问题原因:openGauss-third_party/output中缺少libcurl库。

解决办法:openGauss-third_party/dependency中有libcurl源码,但是编译流程较为复杂。同时经验证, openGauss-third_party_binarylibs下的libcurl库能正常使用。因此选择第二种解决方案。

cp -r openGauss-third_party_binarylibs/dependency/openeuler_aarch64/libcurl openGauss-third_party/output/dependency/kylin_aarch64

5. client_logic.cpp:50:10: 致命错误:MurmurHash3.h:没有那个文件或目录

costsize.cpp:94:10: 致命错误:hll.h:没有那个文件或目录

问题原因:openGauss-third_party/output中缺少postgresql-hll库。

解决办法:openGauss-third_party/dependency中有postgresql-hll源码,选择第一种解决方案。

cd openGauss-third_party/dependency/postgresql-hll

sh build.sh –m all

编译完成后只有lib文件夹,缺少include,去openGauss-third_party_binarylibs拷贝。

cp -r openGauss-third_party_binarylibs/dependency/openeuler_aarch64/postgresql-hll /comm/include openGauss-third_party/output/dependency/kylin_aarch64/postgresql-hll/comm

6. ../../../../src/include/access/dfs/dfs_query.h:29:10: 致命错误:orc/Exceptions.hh:没有那个文件或目录

问题原因:openGauss-third_party/output中缺少liborc库。

解决办法:openGauss-third_party/dependency中没有liborc源码,选择第二种解决方案。

cp -r openGauss-third_party_binarylibs/dependency/openeuler_aarch64/liborc openGauss-third_party/output/dependency/kylin_aarch64

7. remote_read.pb.h:10:10: 致命错误:google/protobuf/port_def.inc:没有那个文件或目录

问题原因:openGauss-third_party/output中缺少protobuf库。

解决办法:openGauss-third_party/dependency有protobuf源码,选择第一种解决方案。

cd openGauss-third_party/dependency/protobuf

python build.py -m all -f protobuf-3.11.3.zip -t "comm|llt"

8. remote_read.grpc.pb.h:10:10: 致命错误:grpc/impl/codegen/port_platform.h:没有那个文件或目录

问题原因:openGauss-third_party/output中缺少grpc库。

解决办法:openGauss-third_party/dependency中有grpc源码,但是编译流程较为复杂,同时经验证,openGauss-third_party_binarylibs下的grpc库能正常使用。因此选择第二种解决方案。

cp -r openGauss-third_party_binarylibs/dependency/openeuler_aarch64/grpc openGauss-third_party/output/dependency/kylin_aarch64

9. parquet_file_reader.h:27:10: 致命错误:parquet/api/reader.h:没有那个文件或目录

问题原因:openGauss-third_party/output中缺少libparquet库。

解决办法:openGauss-third_party/dependency中没有libparquet源码,采用第二种解决方案。

cp -r openGauss-third_party_binarylibs/dependency/openeuler_aarch64/libparquet openGauss-third_party/output/dependency/kylin_aarch64

10. /usr/bin/ld: 找不到 –lthrift

问题原因:openGauss-third_party/output中缺少libthrift库。

解决办法:openGauss-third_party/dependency中有libthrift源码,选择第一种解决方案。

cd openGauss-third_party/dependency/libthrift

sh ./build.sh

11. /usr/bin/ld: 找不到 -lsnappy

问题原因:openGauss-third_party/output中缺少snappy库。

解决办法:openGauss-third_party/dependency中有snappy源码,选择第一种解决方案。

cd openGauss-third_party/dependency/snappy

sh ./build.sh

12. /usr/bin/ld: 找不到 -lzstd

问题原因:openGauss-third_party/output中缺少zstd库。

解决办法:openGauss-third_party/dependency中有zstd源码,选择第一种解决方案。

cd openGauss-third_party/dependency/zstd

sh ./build.sh

13. /home/opengauss/openGauss-server/../openGauss-third_party/output/dependency/kylin_aarch64/libobs/comm/lib/libxml2.so:对‘fcntl64@GLIBC_2.28’未定义的引用

问题原因:编译过程中找的是openGauss-third_party/output/dependency/kylin_aarch64/libobs下的libxml2.so,其缺少‘fcntl64@GLIBC_2.28’。

解决办法:openGauss-third_party/dependency有libxml2源码,但是在编译过程中,存在压缩包libxml2-2.9.9.tar.gz无法解压的问题。同时整个libobs也是从openGauss-third_party_binarylibs拷贝过来的,所以第一种解决方案和第二种解决方案都无法解决此问题。

find / -name “libxml2*”,可以在/usr/lib64下找到libxm12.so*库

cp –r /usr/lib64/libxml2.so.2.9.1 openGauss-third_party/output/dependency/kylin_aarch64/libobs/comm/lib

cd openGauss-third_party/output/dependency/kylin_aarch64/libobs/comm/lib

ln –s libxml2.so.2.9.1 libxml2.so.2

ln –s libxml2.so.2.9.1 libxml2.so

如果openGauss-third_party/output/dependency/kylin_aarch64/libobs/comm/lib目录下原本就存在libxml2.so*文件, 请先备份。

以下为make install出现的错误:

14. ./zic: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

问题原因:找不到libssl.so.1.1。

解决办法:find / -name “libssl.so.1.1”可以发现在

/home/opengauss/openGauss-third_party/output/dependency/kylin_aarch64/openssl/comm/lib下。因此设置环境变量:

export LD_LIBRARY_PATH=/home/opengauss/openGauss-third_party/output/dependency/kylin_aarch64/openssl/comm/lib:$LD_LIBRARY_PATH

15. cp: 无法获取"/home/opengauss/openGauss-server/../openGauss-third_party/output/buildtools/kylin_aarch64/gcc7.3/gcc/lib64/libstdc++.so.6" 的文件状态(stat): 没有那个文件或目录

问题原因:openGauss-third_party/output/buildtools中缺少gcc。

解决办法:将编译好的gcc文件夹拷贝过去。

cd openGauss-third_party/output/buildtools

mkdir -p kylin_aarch64/gcc7.3

cd kylin_aarch64/gcc7.3

cp -r /home/opengauss/3rd/gcc-7.3.0 .

mv gcc-7.3.0 gcc

16. cp: 无法获取"/home/opengauss/openGauss-server/../openGauss-third_party/output/dependency/kylin_aarch64/pljava/comm/lib/*" 的文件状态(stat): 没有那个文件或目录

问题原因:openGauss-third_party/output中缺少pljava库。

解决办法:openGauss-third_party/dependency中有pljava源码,但是编译流程较为复杂,同时经验证,openGauss-third_party_binarylibs下的pljava库能正常使用。因此选择第二种解决方案。

cp -r openGauss-third_party_binarylibs/dependency/openeuler_aarch64/pljava openGauss-third_party/output/dependency/kylin_aarch64

 

欢迎访问openGauss官方网站

openGauss在异构条件下的编译指南_gcc

openGauss开源社区官方网站:

https://opengauss.org

openGauss组织仓库:

https://gitee.com/opengauss

openGauss镜像仓库:

https://github.com/opengauss-mirror

openGauss在异构条件下的编译指南_cmake_02