本文主要描述当前 OAT、OCP、OceanBase 数据库 各个产品对 Python 版本的依赖问题,即它们到底依赖于 Python 的哪个版本。
适用版本
- OAT 的各个已发布版本(迄今为止最新的发布版本为 OAT V4.1.1)
- OCP 的各个已发布版本(迄今为止最新的发布版本为 OCP V4.1.0)
- OceanBase 数据库的各个已发布版本(迄今为止最新的发布版本为 OceanBase V4.1.0)
OAT
OAT 容器内自身使用的 Python 解释器均内建于 OAT 容器内,因此,OAT 容器本身对添加到 OAT 中的各个服务器并无 Python 版本的特别要求。通过 OAT 对服务器做初始化检查时对安装的 Python 的版本的检查要求主要来源于 OCP 对服务器中的 Python 版本的要求(详见后一章节)。
具体来说,OAT 对添加到主机列表的各种用途(OceanBase 产品服务或 OceanBase 数据库或两者兼而有之)的服务器,要求:
该服务器上必须安装有 python-devel rpm 包(在 Kylin/UOSa/UOSe/Redflag/NFSChina 等 OS 上为python2-devel,通过
rpm -qa | grep python-devel命令可以查出来),否则 config_deps 和 precheck 这一步均会报错Error: Unable to find a match: python-devel。

要求在该服务器上执行
python -V命令的输出版本号为 2.x,否则 precheck 这一步会报错python command is not version 2.x, suggest use 'alternatives --set python /usr/bin/python2' to set ... FAIL。
OCP
OCP 中目前对 Python 版本的依赖主要在于:
OCP 下发到各个服务器上
pos.py脚本仍强依赖于 python2.7,该脚本主要用于 ocp-agent 的 安装/重装/重启 任务,一旦 ocp-agent 正常工作,OCP 上后续其它任务的执行并不依赖于 python2.7。
OCP V4.1.0 版本新增加的《主机标准化》检查中要求"python"命令必须存在,并且版本必须是 python 2.7.x,否则会报错。


OceanBase 数据库
OceanBase 数据库对 Python 版本的依赖主要在于通过 OCP 升级 OceanBase 数据库版本时,需要使用下面几个 python 脚本去对 OceanBase 集群做 pre/post 检查。

不过目前这几个 python 脚本仅强制要求 python 解释器必须存在,并未指定具体的版本要求。这些升级检查脚本在 Python 2.7 版本中已经验证没有任何兼容性问题,对于 Python 3.x 版本内部实测表明这些升级脚本存在语法兼容性问题。

解决方法
根据 OAT/OCP 上提示的报错信息,配置好合适的 YUM 源,并通过yum命令来安装 python2。
# yum install python2 python2-devel如果没有自动创建
/usr/bin/python的话,还必须手工创建一个/usr/bin/python软链接,指向 python2.7。# ln -sf /usr/bin/python2.7 /usr/bin/python在某些新版的操作系统上(如 openEuler 22.03 LTS SP1、RHEL 9.2),装机 ISO 镜像和官方 YUM 源中均不再提供 Python 2.7 版本的 RPM 包了(背景:因为 Python 核心团队已经于 2020 年 1 月停止对 Python2 的维护了,所以 openEuler 22.03-LTS 版本开始,已经停止支持和维护 Python 2,仅支持 Python3 了。所以最新版的 openEuler-22.03-LTS-SP1 已经不支持 python2 了,也不允许使用 python2 了,因为安全漏洞已不再维护了。),目前可以暂时通过源代码编译安装 python 2.7.18 版本。
范例如下:
[root@ob120 ~]# wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz [root@ob120 ~]# tar zxvf Python-2.7.18.tgz [root@ob120 ~]# cd Python-2.7.18/ [root@ob120 Python-2.7.18]# ls // 安装依赖 [root@ob120 Python-2.7.18]# yum -y install make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel gcc // --enable-optimizations 为最优安装,建议使用这个参数。--prefix 声明安装路径 [root@ob120 Python-2.7.18]# ./configure --enable-optimizations --prefix=/usr/local/python2.7/ [root@ob120 Python-2.7.18]# make && make install [root@ob120 Python-2.7.18]# ls -l /usr/local/python2.7/ total 16 drwxr-xr-x 2 root root 4096 Jun 2 11:34 bin drwxr-xr-x 3 root root 4096 Jun 2 11:34 include drwxr-xr-x 4 root root 4096 Jun 2 11:34 lib drwxr-xr-x 3 root root 4096 Jun 2 11:34 share [root@ob120 Python-2.7.18]# ls -l /usr/local/python2.7/bin/ total 6504 -rwxr-xr-x 1 root root 111 Jun 2 11:34 2to3 -rwxr-xr-x 1 root root 109 Jun 2 11:34 idle -rwxr-xr-x 1 root root 94 Jun 2 11:34 pydoc lrwxrwxrwx 1 root root 7 Jun 2 11:34 python -> python2 lrwxrwxrwx 1 root root 9 Jun 2 11:34 python2 -> python2.7 -rwxr-xr-x 1 root root 6620824 Jun 2 11:34 python2.7 -rwxr-xr-x 1 root root 1697 Jun 2 11:34 python2.7-config lrwxrwxrwx 1 root root 16 Jun 2 11:34 python2-config -> python2.7-config lrwxrwxrwx 1 root root 14 Jun 2 11:34 python-config -> python2-config -rwxr-xr-x 1 root root 18557 Jun 2 11:34 smtpd.py [root@ob120 Python-2.7.18]# which python /usr/bin/python [root@ob120 Python-2.7.18]# which python2.7 /usr/bin/which: no python2.7 in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin) [root@ob120 Python-2.7.18]# [root@ob120 Python-2.7.18]# ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python2.7 [root@ob120 Python-2.7.18]# which python2.7 /usr/bin/python2.7 [root@ob120 Python-2.7.18]#