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.1
make –j4
make 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.gz
cd gmp-6.2.0
./configure --prefix=/home/opengauss/3rd/gmp-6.2.0 --build=x86 CFLAGS=-fPIC
make –j4
make install
mpfr
tar –zxvf mpfr-4.0.2.tar.gz
cd mpfr-4.0.2
./configure --prefix=/home/opengauss/3rd/mpfr-4.0.2
--with-gmp=/home/opengauss/3rd/gmp-6.2.0
make –j4
make install
mpc
tar –zxvf mpc-1.1.0.tar.gz
cd 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.2
make –j4
make install
gcc
tar –zxvf gcc-7.3.0
cd gcc-7.3.0
export
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.0
make –j4
make 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.1
export GCC_PATH=/home/opengauss/3rd/gcc-7.3.0
export CC=$GCC_PATH/bin/gcc
export 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:$CMAKEROOT/lib:$LD_LIBRARY_PATH
export PATH=$CMAKEROOT/bin:$PATH
编译步骤如下:
cd /home/opengauss/openGauss-third_party/build
sh 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 |
将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/output
export GAUSSHOME=$CODE_BASE/dest
export GCC_PATH=/home/opengauss/3rd/gcc-7.3.0
export CC=$GCC_PATH/bin/gcc
export 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_PATH
export 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-zlib
make –j4
make 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开源社区官方网站:
https://opengauss.org
openGauss组织仓库:
https://gitee.com/opengauss
openGauss镜像仓库:
https://github.com/opengauss-mirror