openGauss/MogDB 脚本源码浅析(2)—— gs_install_plugin/gs_install_plugin_local
摘要
openGauss 提供了 gs_install_plugin/gs_install_plugin_local 工具用于安装插件,目前支持安装的插件包括 pg_repack、pg_trgm、dblink、wal2json、orafce、pg_bulkload、pg_prewarm 等。gs_install_plugin 适用于一主多备部署的 MogDB,gs_install_plugin_local 适用于单机部署的 MogDB。
这两个工具是 python 编写的脚本,直接可以看到源码实现。本文通过对两个工具的源码进行分析,希望从底层了解插件安装的原理,掌握原理后可以在安装出现问题或者手动安装时对整个安装流程有所帮助。
整体流程
主要流程有如下几个步骤:
1 解析参数
根据命令行传入参数进行解析,并设置相关变量,如:要安装哪些插件、是否强制覆盖、指定安装包路径、是否开启调试信息等。
- -h, —help
显示帮助信息
- -p
指定 plugins 安装包位置,默认在\$GPHOME/script/static 寻找 plugins 安装包
- --all
安装全部插件
- --force
指定覆盖旧的插件
- --plugins
可安装多个插件,—plugins 后跟插件名
- --PLUGIN_NAME
指定安装某一个插件,如:—dblink
- --debug
输出 debug 信息
详细请参考“**官方文档**”
2 初始化 Deploy 类
将解析好的参数赋值给 Deploy 类的成员变量。
几处关键代码:
- 环境变量和关键目录
GAUSSHOME = os.getenv("GAUSSHOME")
GPHOME = os.getenv('GPHOME')
LIB_POSTGRESQL_DIR = f'{GAUSSHOME}/lib/postgresql'
EXTENSION_DIR = f'{GAUSSHOME}/share/postgresql/extension'
CONTRIB_DIR = f'{GAUSSHOME}/share/postgresql/contrib'
主要是得到下载插件包的目录和安装 openGauss 插件的系统目录。
- 插件包目录
如果没有设置-p 选型,则使用默认目录
self.plugin_pkg = f"{GPHOME}/script/static/Plugins-*.tar.gz"
- 解压插件包的目录
self._plugins_temp_dir = f"{GPHOME}/script/static/plugins/"
self.executor(f'mkdir -p {self._plugins_temp_dir}')
logger.debug(f"deconpress plugin package to {self._plugins_temp_dir}")
self.local_execute(f"tar -xf {self.plugin_pkg} -C {self._plugins_temp_dir}")
- 集群相关
-X Specify the XML file path
如果是集群安装(使用 gs_install_plugi