張小白使用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、安裝操作系統依賴
這部分由于在前文已有描述,僅需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
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小時內刪除侵權內容。