前言
最近再装open-eBackup进行编译,在编译过程中遇到了一些问题,官网也没说的很详细,踩了不少坑
问题描述
openGassue-server进行编译出现的问题
openGuass-Server下载地址为:
https://gitee.com/opengauss/openGauss-server/repository/archi...
编译地址
https://gitee.com/opengauss/openGauss-server#%E4%BD%BF%E7%94%...
官网说明编译
编译第三方软件
在编译openGauss之前,需要先编译openGauss依赖的开源及第三方软件。这些开源及第三方软件存储在openGauss-third_party代码仓库中,通常只需要构建一次。如果开源软件有更新,需要重新构建软件。
用户也可以直接从binarylibs库中获取开源软件编译和构建的输出文件。
如果你想自己编译第三方软件,请到openGauss-third_party仓库查看详情。
执行完上述脚本后,最终编译和构建的结果保存在与openGauss-third_party同级的binarylibs目录下。在编译openGauss-server时会用到这些文件。
官网提供了2种编译方式,一种是使用build.sh进行编译,一种是使用命令编译代码
sh命令编译
sh build.sh -m debug -3rd
/open-eBackup/open-eBackup/binarylibs # 编译安装debug版本的openGauss
这里我根据官网的操作出现了一个问题,没有这个sys/sysctl.h的目录
查看本地查找
使用find /usr/include -name "sysctl.h"
/usr/include/linux/sysctl.h
通过命令查找报错文件位置
cd /open-eBackup/open-eBackup-bin/openGauss-server-v5.0.0/src
[root@other-linux src]# find . -name *box_syscall_support.h
./gausskernel/cbb/bbox/bbox_syscall_support.h
[root@other-linux src]# vim ./gausskernel/cbb/bbox/bbox_syscall_support.h
这行检查是否定义了宏 WITH_OPENEULER_OS 或OPENEULER_MAJOR。
条件的意思是:如果这两个宏中的任何一个(或两个)已被定义,那么条件成立,进入 #include <linux/sysctl.h>。
查看sh 命令发现没有办法进行定义参数的命令
使用命令行编译
官方文档提供了另外一种编译的解决方案,使用命令行进行编译
编译之前需要配置环境变量
export CODE_BASE=/open-eBackup/open-eBackup-bin/openGauss-server-v5.0.0/ # openGauss-server的路径
export BINARYLIBS=/open-eBackup/open-eBackup-bin/binarylibs/ # binarylibs的路径
export GAUSSHOME=$CODE_BASE/dest/
export GCC_PATH=$BINARYLIBS/buildtools/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
生成 Makefile 文件。这些 Makefile 文件将用于后续的编译过程。
./configure --gcc-version=7.3.0 CC=g++
CFLAGS='-O2 -g3 -DWITH_OPENEULER_OS=1'
CPPFLAGS='-DWITH_OPENEULER_OS=1'
--prefix=$GAUSSHOME --3rd=$BINARYLIBS
--enable-debug --enable-cassert
--enable-thread-safety --with-readline
--without-zlib --enable-memory-check
使用这个命令我可以指定
CPPFLAGS='-DWITH_OPENEULER_OS=1'
指定给 C++ 编译器的预处理器选项(存储在 CPPFLAGS 环境变量中)。它的作用是将 WITH_OPENEULER_OS 宏定义传递给 C++ 编译器,以便在预处理阶段使用。此宏可以在代码中用于条件编译特定的代码路径。
之后执行以下命令编译openGauss:
[user@linux openGauss-server]$ make -sj
[user@linux openGauss-server]$ make install -sj
到这里问题就解决了
编译open-eBackup出现的问题
详细编译地址
https://gitcode.com/eBackup/open-eBackup/blob/master/README.md
这里我到了编译源码
在进行编译过程会构建一个docker镜像,在构建的时候出现一个错误,找不到psycopg2
排查日志docker logs日志
docker logs 32746fd2dabf > 1.logs
vim 1.logs
报错是因为在进行解压这个文件的时候没有找到
打包步骤
下载openGauss-connector-python-psycopg2仓库代码,进入到根目录下,执行
sh build.sh -bd /data/compile/openGauss-server/dest/ -v 5.0.0
说明
-bd: 指定openGauss数据库构建结果目录
-v: 指定构建包的版本号。不指定则默认为5.0.0
编译完成后的驱动,在 output 目录下。
openGauss-Python-5.0.0-openEuler22.03-aarch64.tar.gz
在编译open-eBackup文档又说直接拷贝到open-eBackup-bin目录下
tar -zxvf /open-eBackup/open-eBackup-bin/
openGauss-*-openEuler-*-Python.tar.gz
跟我当前生成直接拷贝过去的名称规制不一样,导致了这个在解压过程无法找到这个文件的错误,这也是一个坑点,后面修正为名称规制就解决了
重新进行编译
这个编译是进入docker容器进行编译的,当时报错了容器直接停了
docker start 32746fd2dabf
docker exec -it 32746fd2dabf /bin/bash
进行重新编译
sh package_open_source_final.sh /open-eBackup /open-eBackup/open-eBackup /open-eBackup/open-eBackup-bin
结果跑一会容器就停了
在使用 docker exec -it 32746fd2dabf /bin/bash 时,容器会启动一个交互式的终端会话并运行 /bin/bash。然而,如果该容器之前没有运行任何进程或是退出了,docker exec 可能会导致容器停止,因为它没有其他进程在运行。也就是说在编译的时候我对键盘没有任何操作,它就自动停了
解决方式
docker start -ai 32746fd2dabf 启动该容器。
使用这个显示该进程的输出,并允许你与容器交互(如果该进程支持交互,如在容器内启动了一个shell,不操作也不会暂停
安装MasterServer遇到的问题
官网写的k8s版本是1.31 以后的版本
使用Helm 安装一个 Kubernetes 应用程序的命令
helm install master-server open-eBackup_MasterServer_chart/databackup
--set global.gaussdbpwd=R2F1c3NkYl8xMjM=
--set global.replicas=1
--set global.deploy_type=d10 -n dpa
又出现了报错
helm_release.victoria_metrics: Modifying... [id=victoria-metrics]
╷
│ Error: current release manifest contains removed kubernetes api(s) for this kubernetes version and it is therefore unable to build the kubernetes objects for performing the diff. error from kubernetes: unable to recognize "":
no matches for kind "PodSecurityPolicy" in version "policy/v1beta1"
│
│ with helm_release.victoria_metrics,
│ on victoria-metrics.tf line 1, in resource "helm_release" "victoria_metrics":
│ 1: resource "helm_release" "victoria_metrics" {
查了k8s官网
在 Kubernetes 版本中,PodSecurityPolicy 的 API 已经被移除或不再支持。在 Kubernetes 1.21 及更高版本中,PodSecurityPolicy 被弃用了,并且在 Kubernetes 1.25 之后被完全移除。所有1.31的版本是不行的,需要进行切换到1.21到1.25版本之间
总结
到这里就是我踩的坑,就到了这个步骤,如果在安装open-eBackup编译过程中遇到的坑可以参考参考
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。