GPDB插件安装工具之gppkg

news2025/1/13 10:13:57

gppkg命令

gppkg是一个python3编写的打包脚本,在整个集群中安装.gppkg格式的Greenplum数据库扩展(例如PL/Java、PL/R和MADlib)及其依赖项,位于/usr/local/cloudberry-db/bin/gppkg(自己安装的gpdb目录),安装到$GPHOME里面。

gppkg -i xxx.gppkg

其他命令:

gppkg [-i package | -u package | -r  name-version | -c] 
        [-d master_data_directory] [-a] [-v]

gppkg --migrate GPHOME_1 GPHOME_2 [-a] [-v]

gppkg [-q | --query] query_optiongppkg -? | --help | -h 

gppkg --version

gppkg打包原理

如果想生成对应插件的gppkg包,只需要:

  • gppkg_spec.yml

  • xxx.rpm or xxx.deb

  • deps/yyy.rpm or deps/yyy.deb 表示当前插件依赖的其他rpm包,目录必须为deps

最后,通过tar压缩生成gppkg文件。

a3b2ebdc8b8024ddd606c5a672c61a12.png
img

目录层级结构如下:

[admin@i-ycmhbaza ~]$ tree sample/
sample/
├── deps
│   └── other_dep.rpm
├── gppkg_spec.yml
└── sample.rpm

1 directory, 3 files

gppkg打包实现:gpMgmt/bin/gppylib/operations/package.py

gppkg命令实现:gpMgmt/bin/gppylib/programs/gppkg.py

gppkg安装原理

  • xxx.gppkg文件会被gppkg识别后进行解析,进行tar包解压,并解压到$GPHOME/.tmp目录。

  • 使用rpm命令验证./tmp里面的rpm(或deb)包是否已经存在,插入操作下如果包已经安装会报错,更新操作则直接覆盖安装。

# install
rpm --test -i /usr/local/greenplum-db-devel/.tmp/zombodb_centos_pg14-3000.1.5_1.x86_64.rpm --dbpath /usr/local/greenplum-db-devel/share/packages/database --prefix /usr/local/greenplum-db-devel
# update
rpm --test -U --force /usr/local/greenplum-db-devel/.tmp/zombodb_centos_pg14-3000.1.5_1.x86_64.rpm --dbpath /usr/local/greenplum-db-devel/share/packages/database --prefix /usr/local/greenplum-db-devel
  • 执行PreInstall hook

  • 把gppk通过scp分发到各个segment以及本地的standby节点,所以这里有两个执行函数,remote与local,local做的事情便是执行下面rpm命令,并移动gppkg包到share/packages/archive。remote便是将local的执行逻辑在远端执行(会通过ssh登陆上去执行)。

# insert
rpm -i --force /usr/local/greenplum-db-devel/.tmp/zombodb_centos_pg14-3000.1.5_1.x86_64.rpm --dbpath /usr/local/greenplum-db-devel/share/packages/database --prefix=/usr/local/greenplum-db-devel
# update
rpm -U --force /usr/local/greenplum-db-devel/.tmp/zombodb_centos_pg14-3000.1.5_1.x86_64.rpm --dbpath /usr/local/greenplum-db-devel/share/packages/database --prefix=/usr/local/greenplum-db-devel
  • 执行PostInstall hook

上述两个hook的检查逻辑都比较类似,对于hook结构一样均为:

# On coordinator node only
- Coordinator:  "echo 'This is a sample message shown before successful installation';"
# On segment nodes only
- Segment:  "echo 'This is a sample message shown before successful installation';"
# On all nodes
- All:  "echo 'This is a sample message shown before successful installation';"

所以执行hook的逻辑便是根据yml中的定义,决定在Coordinator、Segment、Standby,对于Coordinator会在Coordinator(本地)+Standy(远程),Segment(远程),All=Coordinator(本地)+Standy(远程)+Segment(远程)。

gppkg_spec.yml文件格式

Pkgname: 当前插件的名字

Architecture: 通常是操作系统uname -m的结果,x86_64aarch64,见附录实现。

OS: 通常是centosubuntukylin,见附录实现。

Version: 通常是插件的版本。

GPDBVersion: 通常是CBDB的主版本号。

Description: 通常是该包的描述信息。

接下来是几个hook,PreInstall, PostInstall, PreUninstall, PostUninstall, PostUpdate。Hook的意义在于可以通过shell脚本在插件安装前后去控制相关行为,例如 想在安装之后打印一些提示信息,做一些环境变量的source动作,通过hook可以方便实现。

示例:以zombodb提示信息为例,绿色标注为PostUpdate所做的操作。

[gpadmin@i-ycmhbaza artifacts]$ gppkg -u zombodb-1.1-gpdb-centos-x86_64.gppkg 
20230105:16:07:44:005742 gppkg:i-ycmhbaza:gpadmin-[INFO]:-Starting gppkg with args: -u zombodb-1.1-gpdb-centos-x86_64.gppkg
20230105:16:07:44:005742 gppkg:i-ycmhbaza:gpadmin-[WARNING]:-WARNING: The process of updating a package includes removing all
20230105:16:07:44:005742 gppkg:i-ycmhbaza:gpadmin-[WARNING]:-previous versions of the system objects related to the package. For
20230105:16:07:44:005742 gppkg:i-ycmhbaza:gpadmin-[WARNING]:-example, previous versions of shared libraries are removed.
20230105:16:07:44:005742 gppkg:i-ycmhbaza:gpadmin-[WARNING]:-After the update process, a database function will fail when it is
20230105:16:07:44:005742 gppkg:i-ycmhbaza:gpadmin-[WARNING]:-called if the function references a package file that has been removed.
Do you still want to continue ? Yy|Nn (default=N):
> y
20230105:16:07:46:005742 gppkg:i-ycmhbaza:gpadmin-[INFO]:-Updating package zombodb-1.1-gpdb-centos-x86_64.gppkg
20230105:16:07:46:005742 gppkg:i-ycmhbaza:gpadmin-[INFO]:-Validating rpm installation cmdStr='rpm --test -U --force /usr/local/greenplum-db-devel/.tmp/zombodb_centos_pg14-3000.1.5_1.x86_64.rpm --dbpath /usr/local/greenplum-db-devel/share/packages/database --prefix /usr/local/greenplum-db-devel'
20230105:16:07:46:005742 gppkg:i-ycmhbaza:gpadmin-[INFO]:-Installing zombodb-1.1-gpdb-centos-x86_64.gppkg locally
20230105:16:07:46:005742 gppkg:i-ycmhbaza:gpadmin-[INFO]:-Validating rpm installation cmdStr='rpm --test -U --force /usr/local/greenplum-db-devel/.tmp/zombodb_centos_pg14-3000.1.5_1.x86_64.rpm --dbpath /usr/local/greenplum-db-devel/share/packages/database --prefix /usr/local/greenplum-db-devel'
20230105:16:07:46:005742 gppkg:i-ycmhbaza:gpadmin-[INFO]:-Installing rpms cmdStr='rpm -U --force /usr/local/greenplum-db-devel/.tmp/zombodb_centos_pg14-3000.1.5_1.x86_64.rpm --dbpath /usr/local/greenplum-db-devel/share/packages/database --prefix=/usr/local/greenplum-db-devel'
20230105:16:07:46:005742 gppkg:i-ycmhbaza:gpadmin-[INFO]:-Completed local installation of zombodb-1.1-gpdb-centos-x86_64.gppkg.
20230105:16:07:46:005742 gppkg:i-ycmhbaza:gpadmin-[INFO]:-Zombodb has been updated successfully
20230105:16:07:46:005742 gppkg:i-ycmhbaza:gpadmin-[INFO]:-zombodb-1.1-gpdb-centos-x86_64.gppkg successfully updated.

PreInstallPostInstallPreUninstallPostUninstallPostUpdate
操作安装前操作安装后操作卸载前操作卸载后操作更新后操作

这五个hook的格式如下所示,Coordinator、Segment、All三者写一个即可,如果同时写,执行顺序是coordinator>segment>all,只会选择一个执行。每个后面""括起来的是bash脚本,分号结束当前行。

PostInstall:
# On coordinator node only
- Coordinator:  "echo 'This is a sample message shown after successful installation';"
# On segment nodes only
- Segment:  "echo 'This is a sample message shown after successful installation';"
# On all nodes
- All:  "echo 'This is a sample message shown after successful installation';"

Coordinator表示在当前本地master节点执行,自下面这个commit,把Master改为了Coordinator。执行的时候还会判断是否有standby节点,如果有,则会ssh上去,执行这个hook shell脚本。

https://code.hashdata.xyz/cloudberry/gpdb/-/commit/f0626f7393e9461784bd5c8d3d01933644754499

Segment表示在远端的segment节点执行。

AllCoordinator+Segment执行方式的组合,即:master、standby、segment都会执行。

最后,完整的yml文件格式如下:

Pkgname: sample
Architecture: x86_64
OS: aarch64
Version: 1.2
GPDBVersion: 1
Description: Sample GPDB package
PreInstall:
# On coordinator node only
- Coordinator:  "echo 'This is a sample message shown before successful installation';"
# On segment nodes only
- Segment:  "echo 'This is a sample message shown before successful installation';"
# On all nodes
- All:  "echo 'This is a sample message shown before successful installation';"
PostInstall:
# On coordinator node only
- Coordinator:  "echo 'This is a sample message shown after successful installation';"
# On segment nodes only
- Segment:  "echo 'This is a sample message shown after successful installation';"
# On all nodes
- All:  "echo 'This is a sample message shown after successful installation';"
PreUninstall:
# On coordinator node only
- Coordinator:  "echo 'This is a sample message shown before successful uninstall';"
# On segment nodes only
- Segment:  "echo 'This is a sample message shown before successful uninstall';"
# On all nodes
- All:  "echo 'This is a sample message shown before successful uninstall';"
PostUninstall:
# On coordinator node only
- Coordinator:  "echo 'This is a sample message shown after successful uninstallation';"
# On segment nodes only
- Segment:  "echo 'This is a sample message shown after successful uninstallation';"
# On all nodes
- All:  "echo 'This is a sample message shown after successful uninstallation';"
PostUpdate:
# On coordinator node only
- Coordinator:  "echo 'This is a sample message shown after successful update';"
# On segment nodes only
- Segment:  "echo 'This is a sample message shown after successful update';"
# On all nodes
- All:  "echo 'This is a sample message shown after successful update';"

yml生成方式

参考上述样例,会发现都有gppkg_spec.yml.in文件,里面会带有#arch等信息,这些信息可以动态的被自己的脚本所替换,替换成真正的内容,例如:运行在x86机器上就是x86_64,这样yml便是动态的,而不是固定写死的内容。通过#xx方式+脚本替换生成最终的gppkg_spec.yml文件。

错误小提示

如果使用gppkg -update升级gppkg包,那么必须在yml中指定PostUpdatehook,否则如下所示报错:Cannot find package pdate

[gpadmin@i-ycmhbaza artifacts]$ gppkg -update zombodb-1.1-gpdb-centos-x86_64.gppkg 
20230105:15:30:39:023153 gppkg:i-ycmhbaza:gpadmin-[INFO]:-Starting gppkg with args: -update zombodb-1.1-gpdb-centos-x86_64.gppkg
20230105:15:30:39:023153 gppkg:i-ycmhbaza:gpadmin-[WARNING]:-WARNING: The process of updating a package includes removing all
20230105:15:30:39:023153 gppkg:i-ycmhbaza:gpadmin-[WARNING]:-previous versions of the system objects related to the package. For
20230105:15:30:39:023153 gppkg:i-ycmhbaza:gpadmin-[WARNING]:-example, previous versions of shared libraries are removed.
20230105:15:30:39:023153 gppkg:i-ycmhbaza:gpadmin-[WARNING]:-After the update process, a database function will fail when it is
20230105:15:30:39:023153 gppkg:i-ycmhbaza:gpadmin-[WARNING]:-called if the function references a package file that has been removed.
Do you still want to continue ? Yy|Nn (default=N):
> y
20230105:15:30:41:023153 gppkg:i-ycmhbaza:gpadmin-[ERROR]:-Cannot find package pdate
20230105:15:30:41:023153 gppkg:i-ycmhbaza:gpadmin-[CRITICAL]:-gppkg failed. (Reason='') exiting...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1个寒假能学多少网络安全知识?

现在可以看到很多标题都声称三个月内就可以转行网络安全领域,并且成为月入15K的网络工程师。那么,这个寒假的时间能学多少网络安全知识?是否能入门网络安全工程师呢? 答案是肯定的。 虽然网络完全知识是一门广泛的学科&#xff…

ccc-sklearn-13-朴素贝叶斯(1)

朴素贝叶斯 一种直接衡量标签和特征之间概率关系的有监督学习算法,专注分类的算法,基于概率论和数理统计的贝叶斯理论。在计算的过程中,假设特征之间条件独立,不进行建模,采用后验估计。 sklearn中的朴素贝叶斯 类含…

1-选择题练手

1.采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是 A.每次划分后,先处理较长的分区可以减少递归次数 B.递归次数与初始数据的排列次序无关 C.每次划分后,先处理较短的分区可以减少递归次数 D.递归次数与…

DaVinci:键 - 外部蒙版

调色页面:键Color:Key在调色页面,可以轻松地从媒体池将某个片段拖至节点面板中,以作为外部蒙版。或者,在节点上右击选择“添加蒙版” Add Matte。若无附加,则可以选择本节点片段的明度信息作为外部蒙版。当…

hbase2.x orphan regions on filesystem(region丢失)问题修复

问题描述:orphan regions on filesystem 可以通过主master web页面的HBCK Report查看 也可以通过hbck2工具查看 # 查看指定表 hbase hbck -j $HBASE_HOME/lib/hbase-hbck2-1.3.0-SNAPSHOT.jar addFsRegionsMissingInMeta default:tableName # 查看命名空间下所有…

Yolov5+TensorRT-生成dll-python/c++调用dll

YOlov5-6.0TensorRTdllpython/c调用简介1.项目环境2.TensorRT验证1.在tensorrtx-yolov5-v6.0\yolov5目录下新建build目录2.编写CMake.txt,根据自己目录更改2(OpenCV_DIR)、3(TRT_DIR)、10(Dirent_INCLUDE_DIRS&#xf…

LabVIEW网络服务器何使用,有哪些不同

LabVIEW网络服务器何使用,有哪些不同NI有几款不同的Web服务器,可使用不同的产品并覆盖不同的用例。它们具有非常相似的名称,可以互换使用,但每个都提供不同的功能。应用程序Web服务器描述:NI应用Web服务器加载使用LabV…

企业微信商户号是什么?如何开通?

企业微信作为一款优秀的移动办公工具,与微信全方位打通,既可以与客户沟通交流,也可以在达成交易后直接进行对公收款,但是前提是要开通企业微信商户号。前言企业微信和微信都出自腾讯,而且企业微信全方位连接微信&#…

C#,图像二值化(16)——全局阈值的力矩保持算法(Moment-proserving Thresholding)及其源代码

1、力矩保持法 提出了一种基于矩保持原理的自动阈值选择方法。以这样的方式确定地计算阈值,即在输出画面中保留输入画面的时刻。实验结果表明,该方法可以将给定的图像阈值化为有意义的灰度级。该方法描述了全局阈值,但也适用于局部阈值。 A…

企业微信开发——企业内部自建应用开发(第二篇)---JS_SDK配置

企业微信如果想要使用企业微信的JS_SDK来实现拍照、定位等等功能,就需要预先在使用到的页面进行配置,当然你可以做全局配置。对于JS_SDK的配置设计前端和后端的统一配置。下面我来说明下具体的步骤。特别说明:1、企业微信有的接口需要配置wx.…

shader基础入门(1)

本文基于unity免费公开课“Hi Shader以及网络公开资料等书写”遵循开源协议。 MeshFilter网格过滤器 从海量资源中挑选适合的Mesh将他交给MeshRender MeshRenderer 网格渲染器 负责把MeshFilter丢过来的Mesh,绘制显示到我们的场景中 Material 材质球 Material…

多线程之死锁

目录: 1.什么是死锁? 2.可重入与不可重入 3.发生死锁的三个典型情况 4.发生死锁的四个必要条件 5.如何破除死锁? 1.什么是死锁? 谈到死锁,程序猿们都心存忌惮,因为程序一旦出现死锁,就会导…

深度学习训练营之鸟类识别

深度学习训练营之鸟类识别原文链接环境介绍前置工作设置GPU导入数据并进行查找数据处理可视化数据配置数据集残差网络的介绍构建残差网络模型训练开始编译结果可视化训练样本和测试样本预测原文链接 🍨 本文为🔗365天深度学习训练营 中的学习记录博客&am…

机器学习:如何解决类别不平衡问题

类别不平衡是一个常见问题,其中数据集中示例的分布是倾斜的或有偏差的。 1. 简介 类别不平衡是机器学习中的一个常见问题,尤其是在二元分类领域。当训练数据集的类分布不均时会发生这种情况,从而导致训练模型存在潜在偏差。不平衡分类问题的示…

【Unity云消散】理论基础:实现SDF的8SSEDT算法

距离元旦假期已经过去5天了(从31号算起!),接着开始学习! 游戏中的很多渲染效果都离不开SDF,那么SDF究竟是什么呢?到底是个怎么样的技术?为什么能解决那么多问题? 1 SD…

git介绍及环境搭建

git介绍及环境搭建Git介绍Git安装流程配置用户信息git工作流程与常用命令问题点总结主要工作流程git工作流程与原理总结Git介绍 1.Git是什么? Git版本控制系统是一个分布式的系统,是用来保存工程源代码历史状态(游戏存档)的命令行工具 GIT是一个命令行工具,用于版…

基于Java+Spring+vue+element社区疫情服务平台设计和实现

基于JavaSpringvueelement社区疫情服务平台设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源…

Django+channels -> websocket

Django+channels -> websocket 学习视频: https://www.bilibili.com/video/BV1J44y1p7NX/?p=10 workon # 查看虚拟环境 mkvirtualenv web -p python3.10 # 创建虚拟环境 workon web # 进入虚拟环境pip insatll django channelsdjango-admin startproject ws_demo python …

【NI Multisim 14.0原理图环境设置——元器件库管理】

目录 序言 一、元器件库管理 🍉1.“元器件”工具栏 🍊(1)电源/信号源库 🍊(2)基本器件库 🍊(3)二极管库 🍊(4)晶体管…

seL4 背景知识

1 seL4 演变 1.1 微内核 微内核发展到目前为止经历了三代, 这里做一些归纳。参考《现代操作系统: 原理与实现》中操作系统结构一章, 关于微内核架构发展的介绍。 第一代微内核设计将许多内核态功能放到用户态, Mach 微内核是第一代微内核的代表。第二代微内核设计将对 IPC 优…