张小白使用CentOS 7.9源码编译openGauss 2.0.0企业版的试验日记

网友投稿 860 2022-05-30

一、楔子

在编写 张小白带你使用CentOS 7.6安装openGauss 2.0.1企业版 过程中,张小白曾经用CentOS 7.9版本做过试验,但是在 gs_preinstall 执行的过程中,报了“该操作系统不支持”错误:

当时,张小白在网上重新找了CentOS 7.6的镜像下载,重做了操作系统,甚至曾经还因为下错了版本(下成了 CentOS 7.7)又又白折腾了一回。

不过,后来得知CentOS 7.9其实也是可以装 openGauss的,只需要欺骗它一下:

然后重新执行 gs_preinstall  脚本:

就可以通过了!后续的操作跟CentOS 7.6的操作完全相同,此处不再赘述,在张小白的文档中都有详细描述。

张小白就用现在这个CentOS 7.9,感受一下 源码编译的过程。

本文是张小白阅读了官网 搭建编译环境 部分内容做的体验,如果中间有错漏之处,问题仅在于张小白的阅读能力不足 :)

二、注意

如您用的是一个全新的CentOS 7.9操作系统,那么 张小白带你使用CentOS 7.6安装openGauss 2.0.1企业版 提到的以下章节最好都做一下:

二、更新yum源为国内源

四、安装Python3.6

五、安装系统软件依赖

六、系统环境设置

1.关闭防火墙

2.关闭SELINUX

3.设置时区和时间

4.设置网卡MTU

5.更新hostname

6.设置UTF-8字符集

7.允许root用户远程登陆

8.创建数据库组

9.修改系统参数sysctl.conf

10.修改文件句柄

三、编译环境准备

操作系统:CentOS 7.9虚拟机

虚拟机内存:8G(在编译过程中,曾因为参数导致的内存不足原因,将虚拟机内存扩大到32G,但其实只要参数合适,8G内存足以完成编译,详见下面的操作过程)

虚拟机CPU:4核

1、安装操作系统依赖

这部分由于在前文已有描述,仅需yum install安装相关软件即可:

如果严格按照文档要求,那么readline-devel的要求是不符合的。但是貌似在后续的编译过程中,也没因此报错。

2、环境清理

由于本虚拟机是从已经安装好的单机版CentOS 7.9的openGauss克隆来的。为避免以前的安装的干扰,对现有环境做个清理:(聪明的读者可以全然不顾这个过程,或者如果您曾经安装过openGauss,可以用以下神操作让安装的事情貌似从未发生过。。。)

rm -rf /opt/software/openGauss

rm -rf /var/log/omm

userdel omm

rm -rf /home/omm

rm -rf /root/gauss_om

3、关闭swap分区

如果没有关闭swap分区,可能会导致在下面的编译过程中,执行make -j的时候报内存不足的错。

4、获取openGauss-server代码包和依赖包

先获取openGauss的源码仓的地址:

打开 https://gitee.com/opengauss/openGauss-server

点击克隆后,在弹出的框中选择复制:

具体地址为: https://gitee.com/opengauss/openGauss-server.git

打开 https://gitee.com/opengauss/openGauss-third_party

如法炮制,获得地址:

https://gitee.com/opengauss/openGauss-third_party.git

使用终端执行以下语句:

git clone https://gitee.com/opengauss/openGauss-server.git openGauss-server

git clone https://gitee.com/opengauss/openGauss-third_party.git openGauss-third_party

这里如果要获取 openGauss 2.0.0的代码,可加上-b 2.0.0的参数:

关于第三方依赖软件的编译构建方式,可以选择直接用openGauss团队构建好的,也可以自行编译。张小白决定先使用现成的,先把重点放在编译openGauss的源码上面:(等有空了再来重新编译第三方依赖的源码)

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

tar -xzvf openGauss-third_party_binarylibs.tar.gz

mv openGauss-third_party_binarylibs binarylibs

5、源码安装gcc 7.3.0和cmake 3.18.6

注:由于openGauss官方提供的第三方依赖包已经包含了gcc,可以忽略gcc相关依赖如gmp、mpfr、mpc、isl和gcc的源码安装部分。但有心的人还是建议熟悉下源码安装gcc的全过程。

(1)安装前检查

查看下gcc和g++的版本:4.8.5

如果使用yum安装cmake,版本是2.8,也不满足要求。

所以这些都需要源码编译安装。

(2)编译gmp-6.1.1

wget http://ftp.gnu.org/gnu/gmp/gmp-6.1.1.tar.xz

tar -xf gmp-6.1.1.tar.xz

cd gmp-6.1.1

./configure --prefix=/usr/local/gmp-6.1.1

make -j

make install -j

(3)编译mpfr-4.0.2

wget http://ftp.gnu.org/gnu/mpfr/mpfr-4.0.2.tar.gz

tar -xf mpfr-4.0.2.tar.gz

cd mpfr-4.0.2

./configure --prefix=/usr/local/mpfr-4.0.2 --with-gmp=/usr/local/gmp-6.1.1

make -j

make install -j

(4)编译mpc-1.1.0

wget http://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz

tar -xf mpc-1.1.0.tar.gz

cd mpc-1.1.0

./configure --prefix=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-6.1.1 --with-mpfr=/usr/local/mpfr-4.0.2

make -j

make install -j

(5)编译isl-0.18

wget https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2

tar -xf isl-0.18.tar.bz2

cd isl*

./configure --prefix=/usr/local/isl-0.18 --with-gmp-prefix=/usr/local/gmp-6.1.1

make -j

make install -j

(6)安装gcc依赖包

查看glibc的版本: yum list | grep glibc

如果yum报错可执行 python2 yum list | grep glibc

安装“安装gcc”需要的依赖包:

yum install gcc-c++ glibc-devel

好像无需安装。

(7)编译gcc 7.3.0

下载gcc 7.3.0的源码包:

wget http://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz

解压:

tar -xzvf gcc-7.3.0.tar.gz

设置LD_LIBRARY_PATH环境变量和C_INCLUDE_PATH环境变量:

vi ~/.bashrc

export LD_LIBRARY_PATH=/usr/local/gmp-6.1.1/lib:/usr/local/mpfr-4.0.2/lib:/usr/local/mpc-1.1.0/lib:/usr/local/isl-0.18/lib:${LD_LIBRARY_PATH}

export C_INCLUDE_PATH=/usr/local/gmp-6.1.1/include:/usr/local/mpfr-4.0.2/include:/usr/local/mpc-1.1.0/include:/usr/local/isl-0.18/include:${C_INCLUDE_PATH}

source ~/.bashrc

cd gcc-7.3.0

./configure CFLAGS='-fstack-protector-strong -Wl,-z,noexecstack -Wl,-z,relro,-z,now' --prefix=/usr/local/gcc-7.3.0 --with-gmp=/usr/local/gmp-6.1.1 --with-mpfr=/usr/local/mpfr-4.0.2 --with-mpc=/usr/local/mpc-1.1.0 --with-isl=/usr/local/isl-0.18 --disable-multilib --enable-languages=c,c++

make -j

编译过程中报内存不足了:

可以去掉-j参数编译,但这样速度会降低很多

(不带-j参数的尝试)

这回好像没报错,只是时间要长一点,耐心等待编译结束吧。。。

(带-j参数的尝试)

经过跟openGauss编译专家的咨询,make -j不带数字,会一直加并发数。

可以考虑指定值,一般设置为  cpu数 X 2。目前张小白虚拟机分配了4个CPU,故可以使用make -j8再试一次:

这样也能编译成功。

然后执行安装:

make install -j

编译完毕,检查编译结果:

cd /usr/local/gcc-7.3.0/bin

./gcc --version

./g++ --version

张小白使用CentOS 7.9源码编译openGauss 2.0.0企业版的试验日记

或者如果LANG设成中文的话:

现在替换掉系统的gcc

这样,在任何目录下,执行gcc和g++都是新的7.3.0的版本了。

(8)编译cmake 3.18.6

获取cmake源码包:

wget https://github.com/Kitware/CMake/releases/download/v3.18.6/cmake-3.18.6.tar.gz

tar -xzvf cmake-3.18.6.tar.gz

cd cmake-3.18.6

./configure --prefix=/usr/local/cmake-3.18

好像报错了,说GLIBCXX_3.4.20找不到。

搜了下,发现解决方法可能是升级libstdc++

yum provides libstdc++.so.6

yum install libstdc+±4.8.5-44.el7.i686

按Y继续:

cd /usr/lib64

rm libstdc++.so.6

cp /usr/local/gcc-7.3.0/lib64/libstdc++.so.6.0.24 .

ln -s libstdc++.so.6.0.24 libstdc++.so.6

删除解压后的目录,重新解压,再重新configure:

rm -rf cmake-3.18.6

tar -xzvf cmake-3.18.6.tar.gz

./configure --prefix=/usr/local/cmake-3.18.6

又报了一个没openssl的错。

安装openssl-devel:

yum install openssl-devel

再来:

./configure --prefix=/usr/local/cmake-3.18.6

make -j8

。。。

make install -j

检查版本:

将CMAKE_ROOT加入环境变量:

export CMAKE_ROOT=/usr/local/cmake-3.18.6

export PATH=$CMAKE_ROOT/bin:$PATH

source ~/.bashrc

cmake -version

6、修改Python默认版本

将默认版本改为Python 3.6

注意:这样修改之后,yum直接执行会报错,应使用python2 yum xxx来执行yum脚本。

四、源码编译openGauss

采用手工编译方式:

cd openGauss-server

先获取自己的系统脚本:

sh src/get_PlatForm_str.sh

结果是 centos7.6_x86_64

(在命令行)执行以下脚本:

export CODE_BASE=/root/openGauss-server # openGauss-server的路径 export BINARYLIBS=/root/binarylibs # binarylibs的路径 export GAUSSHOME=$CODE_BASE/dest/ export GCC_PATH=$BINARYLIBS/buildtools/centos7.6_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

其实张小白在这里发现了一个问题,就是尽管张小白辛辛苦苦的做了gcc 7.3.0的源码编译,但是上面的环境变量明显又将gcc的路径指向了 $BINARYLIBS/buildtools/centos7.6_x86_64/gcc7.3/ ,这可能表明,前面gcc源码编译过程有点浪费时间,直接用现成的就好了。

编译release版本:

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

make -s -j8

注:-s是把一些信息不打印出来

(如果直接使用make -sj 会报内存不足的错)

(使用make -s -j8试试)

make -s -j8

(不带-j参数速度会有点慢,但是也可以编译成功)

make -s

耐心等待一下。。

。。。

安装:

make install -sj

查看编译的结果——编译后软件安装路径为:$GAUSSHOME

五、编译后的验证

1、创建用户omm、设置环境变量

先建 omm的用户:

useradd omm -g dbgrp

passwd omm

在.bashrc中增加以下参数:

export GAUSSHOME=/root/openGauss-server/dest/ ##编译结果的路径

export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH

export PATH=$GAUSSHOME/bin:$PATH

source ~/.bashrc

2、初始化数据库

建立 数据文件目录:

mkdir ~/data

chmod 777 /root

chown -R omm /root/openGauss-server

chgrp -R dbgrp /root/openGauss-server

gs_initdb -D /home/omm/data --nodename=db1

3、启动数据库

根据上面的提示,执行 gs_ctl start -D /home/omm/data -Z single_node -l /home/omm/log/opengauss.log

检查进程情况:

检查数据库状态:

gs_ctl query -D /home/omm/data

使用gsql进入命令行:

gsql -d postgres

4、数据库操作验证

我们用 张小白带你使用CentOS 7.6安装openGauss 2.0.1企业版 的办法做个验证:

先得修改密码:

ALTER ROLE omm PASSWORD 'Home@2021';

然后试验一些建库,建表和查询语句:

好像没啥问题。

六、源码编译openGauss-OM

源码编译完openGauss-server代码仓之后,并没有生成一个gs_om的管理工具。所以没有办法执行gs_om -t status这些命令。

因为om的包需要编译 openGauss-OM 代码仓。

打开 openGauss-OM的代码仓地址:https://gitee.com/opengauss/openGauss-OM.git

点击克隆,复制地址,然后做git clone:

根据代码仓的readme文档:

由于第三方库已经准备好了,应该可以直接执行下面的语句了:

cd openGauss-OM

chmod +x build.sh

export BINARYLIBS_PATH=/root/binarylibs

./build.sh -3rd $BINARYLIBS_PATH

openGauss-OM的编译结果在package目录下:

解压:

解压出来主要有3个目录:script、simpleInstall、lib。

gs_om在script目录下。

不过,并不是说将这个目录下的内容拷贝到 前面已经装好的openGauss-server/dest目录下就可以了。

openGauss的老师告诉我,需要先生成openGauss-server的安装包、把这个om的gz包拷贝到安装包所在的目录,再按照 企业版安装的方式安装。

企业版的安装过程张小白在 https://www.modb.pro/db/111793 文档已经有过详细描述,那么下面要完成的事情是制作产品安装包。

七、制作和验证openGauss-server产品安装包

1、制作openGuass-server产品安装包

可参考 产品安装包编译

cd /root/openGauss-server

sh build.sh -m release -3rd /root/binarylibs -pkg

确实,制作过程中出现很多错误,很难相信这是制作成功了。到底对不对呢?试试就知道了,时间是检验真理的唯一标准。

进入output目录,确实生成了5个包:包含 symbol符号包(用来调试定位数据库coredump问题)、libpq接口包(链接驱动的基础,odbc、python驱动基于libpq)、openGauss-server包、tools工具包、upgrade升级包等等。

将前面编译好的 openGauss-OM的gz包拷贝过来:

2、停止当前openGuass运行

将现在的openGauss停掉:

然后参考 张小白前一篇文档 https://www.modb.pro/db/111793 开始安装:

3、清理openGauss安装环境

先清理现有环境(由于当前试验的数据库在 /home/omm/data下,跟企业版文档中的目录不一样。也可以暂时不删)

mkdir -p /opt/software/openGauss

chmod 755 -R /opt/software

cd /opt/software/openGauss

cp /root/openGauss-server/output/openGauss-2.0.0-CentOS-64bit.tar.bz2 .

cp /root/openGauss-server/output/openGauss-2.0.0-CentOS-64bit.tar.sha256 .

cp /root/openGauss-server/output/openGauss-2.0.0-CentOS-64bit.sha256 .

cp /root/openGauss-OM/package/openGauss-2.0.0-CentOS-64bit-om.tar.gz .

cp /root/openGauss-OM/package/openGauss-2.0.0-CentOS-64bit-om.sha256 .

rm -rf /opt/huawei

rm -rf /var/log/omm

mv /home/omm /home/omm.old

userdel omm

4、准备安装配置文件cluster_config.xml

看一下当前的IP:192.168.111.131

vi cluster_config.xml

5、执行安装前脚本

tar -zxvf openGauss-2.0.0-CentOS-64bit-om.tar.gz

cd script

./gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/cluster_config.xml

(如果启动有异常,可检查 /etc/hosts中有没有配置 db1的主机名,该IP是否跟cluster_config.xml的IP地址保持一致等等。)

密码输入的是Home@2021

6、执行安装脚本

切换到omm用户:

env检查下GAUSS_ENV等环境变量:

gs_install -X /opt/software/openGauss/cluster_config.xml --gsinit-parameter="--locale=zh_CN.utf8"

安装完毕。

7、安装后验证

gsql -d postgres -p 15400

这些方式跟张小白的前一篇文字的实验结果基本相同。可见 使用源码编译后制作的安装包进行安装,暂时没有任何问题。

八、后记和感谢

在本文编写过程中,得到了 @行尘、@刘圣熙、@Gauss松鼠会小助手 等专家的指点,为此特意表示感谢!

(全文完,谢谢阅读)

CentOS Python 云数据库 GaussDB(for openGauss) 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【读书会第十二期】Java内存模型与线程
下一篇:《基于Unity与SteamVR构建虚拟世界》 —2.3 安装提示
相关文章