1

前言

最近再装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时会用到这些文件。

image.png

官网提供了2种编译方式,一种是使用build.sh进行编译,一种是使用命令编译代码

sh命令编译

sh build.sh -m debug -3rd 
/open-eBackup/open-eBackup/binarylibs  # 编译安装debug版本的openGauss

这里我根据官网的操作出现了一个问题,没有这个sys/sysctl.h的目录

image.png

查看本地查找

使用find /usr/include -name "sysctl.h"
/usr/include/linux/sysctl.h

image.png

通过命令查找报错文件位置

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

image.png

这行检查是否定义了宏 WITH_OPENEULER_OS 或OPENEULER_MAJOR。
条件的意思是:如果这两个宏中的任何一个(或两个)已被定义,那么条件成立,进入 #include <linux/sysctl.h>。

查看sh 命令发现没有办法进行定义参数的命令

image.png

使用命令行编译

官方文档提供了另外一种编译的解决方案,使用命令行进行编译

编译之前需要配置环境变量

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

这里我到了编译源码

image.png

在进行编译过程会构建一个docker镜像,在构建的时候出现一个错误,找不到psycopg2

image.png

排查日志docker logs日志

docker logs 32746fd2dabf  > 1.logs

vim 1.logs

报错是因为在进行解压这个文件的时候没有找到

image.png

打包步骤

下载openGauss-connector-python-psycopg2仓库代码,进入到根目录下,执行

sh build.sh -bd /data/compile/openGauss-server/dest/ -v 5.0.0
说明
-bd: 指定openGauss数据库构建结果目录
-v: 指定构建包的版本号。不指定则默认为5.0.0

编译完成后的驱动,在 output 目录下。

image.png

openGauss-Python-5.0.0-openEuler22.03-aarch64.tar.gz

在编译open-eBackup文档又说直接拷贝到open-eBackup-bin目录下

image.png

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 以后的版本

image.png

使用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编译过程中遇到的坑可以参考参考


kexb
474 声望15 粉丝

引用和评论

0 条评论