本文适用于openGauss2.0.0 环境:Red Hat Enterprise Linux Server 7.6 官方说明文档提示,openGauss仅支持以下操作系统: - CentOS 7.6(x86架构) - openEuler-20.03-LTS(aarch64架构) 编译脚本对此也是加了限制,监测到非上述平台时,将拒绝编译。经过试验,openGauss在Red Hat 7.6上是可以编译通过的。 # 一、官方参考 项目地址: [https://gitee.com/opengauss/openGauss-server](https://gitee.com/opengauss/openGauss-server) 官方编译说明: [https://gitee.com/opengauss/openGauss-server#编译](https://gitee.com/opengauss/openGauss-server#编译) # 二、步骤 ## 准备文件 假设文件路径全部在:/opt/openGauss/ 准备以下文件: - /opt/openGauss/openGauss-server/ :server源码,[下载](https://gitee.com/opengauss/openGauss-server)。 - /opt/openGauss/binarylibs/:二进制的第三方库(必须是与server源码配套的版本),下载后解压到此目录,[下载](https://opengauss.obs.cn-south-1.myhuaweicloud.com/2.0.0/openGauss-third_party_binarylibs.tar.gz)。 - /opt/openGauss/gauss_data/:openGauss数据目录。 ## 修改脚本 默认情况下,编译脚本会检查编译平台的操作系统类型,Red Hat操作系统会被拒绝编译。需要修改一下脚本。 ```bash [yz@test openGauss-server]$ vim build/script/mpp_package.sh kernel="centos" #强制为centos ``` PS:最新版本脚本已经变更为: ``` src/get_PlatForm_str.sh ``` ## 修改代码 openGauss 2.0版本有个bug:强制要求用户登录后修改密码,但是如果用户名中有“-”等特殊字符,语法会报错,无法修改密码,导致一方面无法修改密码,而又强制要求修改密码。以下修改一下,不强制要求修改密码: ```c static void knl_t_postgres_init(knl_t_postgres_context* postgres_cxt) { postgres_cxt->clear_key_memory = false; …… postgres_cxt->password_changed = true; //此处由false改为true。 ``` ## 编译 以下编译debug版本: ```bash [yz@test ~]$ cd /opt/openGauss/openGauss-server [yz@test openGauss-server]$ sh build.sh -m debug -3rd /opt/openGauss/binarylibs …… Makefile:71: warning: overriding recipe for target `../../../src/lib/elog/elog.a' Makefile:65: warning: ignoring old recipe for target `../../../src/lib/elog/elog.a' openGauss installation complete. The option 'nopkg' is on, no package will be zipped. ``` 当看到“openGauss installation complete.”提示时,表示编译成功。 编译后,二进制文件在: /opt/openGauss/openGauss-server/mppdb_temp_install ## 初始化 ```bash [yz@test ~]$ export LD_LIBRARY_PATH=/opt/openGauss/openGauss-server/mppdb_temp_install/lib/:$LD_LIBRARY_PATH [yz@test ~]$ cd /opt/openGauss/openGauss-server/mppdb_temp_install/bin [yz@test bin]$ ./gs_initdb -D /opt/openGauss/gauss_data/ --nodename=gauss …… Success. You can now start the database server of single node using: ./gaussdb -D /opt/openGauss/gauss_data or ./gs_ctl start -D /opt/openGauss/gauss_data -l logfile ``` ## 启动与客户端连接 ```bash [yz@test ~]$ cd /opt/openGauss/openGauss-server/mppdb_temp_install/bin [yz@test bin]$ ./gs_ctl start -D /opt/openGauss/gauss_data -Z single_node -l logfile [yz@test bin]$ ./gsql postgres gsql ((openGauss 2.0.0 build 5af8c3d0) compiled at 2021-04-12 14:45:44 commit 0 last mr debug) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. postgres=# ``` ## 加载 openGauss 1.0要求数据文件必须放到数据目录下的pg_copydir子目录中,openGauss 2.0已经无此约束要求,加载方法完全同PostgreSQL。