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

举报
张辉 发表于 2021/09/20 18:21:45 2021/09/20
【摘要】 古有关羽夜读春秋,今有小白编译中秋。



一、楔子

在编写 张小白带你使用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

或者如果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

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
    <!-- openGauss整体信息 -->
    <CLUSTER>
        <!-- 数据库名称 -->
        <PARAM name="clusterName" value="openGauss" />
        <!-- 数据库节点名称(hostname) -->
        <PARAM name="nodeNames" value="db1" />
        <!-- 数据库安装目录-->
        <PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" />
        <!-- 日志目录-->
        <PARAM name="gaussdbLogPath" value="/var/log/omm" />
        <!-- 临时文件目录-->
        <PARAM name="tmpMppdbPath" value="/opt/huawei/tmp" />
        <!-- 数据库工具目录-->
        <PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" />
        <!-- 数据库core文件目录-->
        <PARAM name="corePath" value="/opt/huawei/corefile" />
        <!-- 节点IP,与数据库节点名称列表一一对应 -->
        <PARAM name="backIp1s" value="192.168.111.131"/>    
    </CLUSTER>
    <!-- 每台服务器上的节点部署信息 -->
    <DEVICELIST>
        <!-- 节点1上的部署信息 -->
        <DEVICE sn="db1">
            <!-- 节点1的主机名称 -->
            <PARAM name="name" value="db1"/>
            <!-- 节点1所在的AZ及AZ优先级 -->
            <PARAM name="azName" value="AZ1"/>
            <PARAM name="azPriority" value="1"/>
            <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
            <PARAM name="backIp1" value="192.168.111.131"/>
            <PARAM name="sshIp1" value="192.168.111.131"/>
               
            <!--dbnode-->
            <PARAM name="dataNum" value="1"/>
            <PARAM name="dataPortBase" value="15400"/>
            <PARAM name="dataNode1" value="/opt/huawei/install/data/dn"/>
            <PARAM name="dataNode1_syncNum" value="0"/>
        </DEVICE>
    </DEVICELIST>
</ROOT>



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松鼠会小助手 等专家的指点,为此特意表示感谢!


(全文完,谢谢阅读)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。