张小白使用CentOS 7.9源码编译openGauss 2.0.0企业版的试验日记
一、楔子
在编写 张小白带你使用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、安装操作系统依赖
如果严格按照文档要求,那么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默认版本
注意:这样修改之后,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
因为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松鼠会小助手 等专家的指点,为此特意表示感谢!
(全文完,谢谢阅读)
- 点赞
- 收藏
- 关注作者
评论(0)