| #!/usr/bin/env python |
| |
| # @@@ START COPYRIGHT @@@ |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| # @@@ END COPYRIGHT @@@ |
| |
| ### this script should be run on all nodes with sudo user ### |
| |
| import re |
| import os |
| import sys |
| import json |
| import platform |
| from common import run_cmd, cmd_output, err |
| |
| LOCAL_REPO_PTR = """ |
| [traflocal] |
| name=trafodion local repo |
| baseurl=http://%s:%s/ |
| enabled=1 |
| gpgcheck=0 |
| """ |
| |
| REPO_FILE = '/etc/yum.repos.d/traflocal.repo' |
| EPEL_FILE = '/etc/yum.repos.d/epel.repo' |
| |
| def run(): |
| """ install Trafodion dependencies """ |
| |
| dbcfgs = json.loads(dbcfgs_json) |
| |
| node_list = dbcfgs['node_list'].split(',') |
| |
| offline = True if dbcfgs['offline_mode'] == 'Y' else False |
| |
| if offline: |
| repo_content = LOCAL_REPO_PTR % (dbcfgs['repo_ip'], dbcfgs['repo_http_port']) |
| with open(REPO_FILE, 'w') as f: |
| f.write(repo_content) |
| |
| if not offline and not os.path.exists(EPEL_FILE): |
| run_cmd('yum install -y epel-release') |
| |
| package_list = [ |
| 'apr', |
| 'apr-util', |
| 'expect', |
| 'gzip', |
| 'libiodbc-devel', |
| 'lzo', |
| 'lzop', |
| 'pdsh', # epel |
| 'perl-DBD-SQLite', |
| 'perl-Params-Validate', |
| 'perl-Time-HiRes', |
| 'protobuf', # epel |
| 'sqlite', |
| 'snappy', |
| 'unixODBC-devel', |
| 'unzip' |
| ] |
| |
| if dbcfgs['ldap_security'].upper() == 'Y': |
| package_list += ['openldap-clients'] |
| |
| all_pkg_list = run_cmd('rpm -qa') |
| for pkg in package_list: |
| if pkg in all_pkg_list: |
| print 'Package %s had already been installed' % pkg |
| else: |
| print 'Installing %s ...' % pkg |
| if offline: |
| run_cmd('yum install -y --disablerepo=\* --enablerepo=traflocal %s' % pkg) |
| else: |
| run_cmd('yum install -y %s' % pkg) |
| |
| # pdsh should not exist on single node |
| if len(node_list) == 1 and not dbcfgs.has_key('traf_shadow'): # means we are running in adding node mode |
| cmd_output('yum remove -y pdsh') |
| |
| # remove temp repo file |
| if offline: os.remove(REPO_FILE) |
| |
| # main |
| try: |
| dbcfgs_json = sys.argv[1] |
| except IndexError: |
| err('No db config found') |
| run() |