127 lines
4.3 KiB
Python
127 lines
4.3 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding:utf-8 -*-
|
|
#############################################################################
|
|
# Copyright (c) 2023 Huawei Technologies Co.,Ltd.
|
|
#
|
|
# openGauss is licensed under Mulan PSL v2.
|
|
# You can use this software according to the terms
|
|
# and conditions of the Mulan PSL v2.
|
|
# You may obtain a copy of Mulan PSL v2 at:
|
|
#
|
|
# http://license.coscl.org.cn/MulanPSL2
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OF ANY KIND,
|
|
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
# See the Mulan PSL v2 for more details.
|
|
# ----------------------------------------------------------------------------
|
|
# Description : gs_upgradechk is a utility to check meta data in gaussdb after upgrade.
|
|
#############################################################################
|
|
"""
|
|
快速安装openGauss的bz2
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
|
|
sys.path.append(sys.path[0] + '/../..')
|
|
from upgrade_checker.utils.version import is_support_version
|
|
from upgrade_checker.utils.command import Shell
|
|
from upgrade_checker.utils.exception import ShellExecException
|
|
|
|
class OGController(object):
|
|
|
|
@staticmethod
|
|
def is_support_package(pkg):
|
|
# openGauss server:openGauss-Server-7.0.0-RC1-openEuler20.03-x86_64.tar.gz
|
|
parts = os.path.basename(pkg).split('-')
|
|
|
|
if len(parts) < 5 or parts[0] != 'openGauss' or parts[1] != 'Server':
|
|
return False, '非openGauss server压缩安装包:' + pkg
|
|
|
|
if not is_support_version(parts[2]):
|
|
return False, '工具不支持的OG版本:' + parts[1]
|
|
|
|
return True, ''
|
|
|
|
def __init__(self, package):
|
|
self.package = package
|
|
|
|
self.gausshome = ''
|
|
self.version = ''
|
|
self.dn = ''
|
|
self.port = ''
|
|
|
|
def _generate_env(self):
|
|
env = {
|
|
'GAUSSHOME': self.gausshome,
|
|
'PATH': '{0}/bin:{1}'.format(self.gausshome, os.getenv('PATH')),
|
|
'LD_LIBRARY_PATH': '{0}/lib:{1}'.format(self.gausshome, os.getenv('LD_LIBRARY_PATH'))
|
|
}
|
|
|
|
env_text = ''
|
|
for name, val in env.items():
|
|
os.environ[name] = val
|
|
env_text += 'export {0}={1}\n'.format(name, val)
|
|
|
|
env_file = '{0}/env.source'.format(self.gausshome)
|
|
with open(env_file, 'w') as f:
|
|
f.write(env_text)
|
|
print('生成环境变量', env_file)
|
|
|
|
return env, env_file
|
|
|
|
def install(self):
|
|
pkg_path = os.path.dirname(self.package)
|
|
pkg_name = os.path.basename(self.package)
|
|
self.version = pkg_name.split('-')[1]
|
|
self.gausshome = pkg_path + '/' + self.version
|
|
|
|
if os.access(self.gausshome, os.F_OK):
|
|
self.dn = self.gausshome + '/dn'
|
|
try:
|
|
self.stop()
|
|
except ShellExecException as e:
|
|
pass
|
|
|
|
try:
|
|
self.uninstall()
|
|
except ShellExecException as e:
|
|
pass
|
|
|
|
os.mkdir(self.gausshome, 0o700)
|
|
|
|
cmd = 'tar -jxf {0} -C {1}'.format(self.package, self.gausshome)
|
|
Shell.run(cmd, print_desc='解压安装包', check=True)
|
|
|
|
return self._generate_env()
|
|
|
|
def initdb(self):
|
|
self.dn = self.gausshome + '/dn'
|
|
cmd = "gs_initdb -D {0} -w Test@123 --nodename='sgnode' >/dev/null 2>&1 ".format(self.dn)
|
|
Shell.run(cmd, print_desc='初始化数据库', check=True)
|
|
|
|
def guc(self, setting):
|
|
cmd = 'gs_guc reload -D {0} -c "{1}" >/dev/null 2>&1'.format(self.dn, setting)
|
|
Shell.run(cmd, print_desc='设置GUC参数')
|
|
|
|
def start(self):
|
|
cmd = "gs_ctl start -D {0} >/dev/null 2>&1".format(self.dn)
|
|
Shell.run(cmd, print_desc='启动数据库', check=True)
|
|
|
|
def stop(self):
|
|
cmd = "gs_ctl stop -D {0} >/dev/null 2>&1 ".format(self.dn)
|
|
Shell.run(cmd, print_desc='关闭数据库', check=True)
|
|
|
|
def uninstall(self):
|
|
cmd = "rm {0} {1} -fr".format(self.dn, self.gausshome)
|
|
Shell.run(cmd, print_desc='卸载数据库', check=True)
|
|
|
|
if __name__ == "__main__":
|
|
og = OGController('/data/pkg/openGauss-Server-7.0.0-RC1-openEuler20.03-x86_64.tar.bz2')
|
|
og.install()
|
|
og.initdb()
|
|
og.start(16666)
|