blob: 917b799bff9f39b9029dc35498bd94b690e05ab0 [file] [log] [blame]
#!/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 new nodes with sudo user ###
import os
import sys
import re
import json
import socket
from constants import DEF_HBASE_HOME, TRAF_SUDOER_FILE, TRAF_CFG_FILE
from common import err, cmd_output, run_cmd, get_default_home, mod_file, write_file
def run():
dbcfgs = json.loads(dbcfgs_json)
if not os.path.exists(dbcfgs['hbase_lib_path']):
err('Cannot find HBase lib folder')
if not os.path.exists(dbcfgs['java_home']):
err('Cannot find Java, please set the JAVA_HOME on the new nodes to: %s' % dbcfgs['java_home'])
home_dir = get_default_home()
if dbcfgs.has_key('home_dir'):
home_dir = dbcfgs['home_dir']
traf_user = dbcfgs['traf_user']
traf_home = dbcfgs['traf_home']
traf_user_dir = '%s/%s' % (home_dir, traf_user)
traf_ver = dbcfgs['traf_version']
# scratch_locs = dbcfgs['scratch_locs'].split(',')
SUDOER_CFG = """
## Allow trafodion id to run commands needed for backup and restore
%%%s ALL =(hbase) NOPASSWD: %s/bin/hbase"
""" % (traf_user, DEF_HBASE_HOME)
### add trafodion user ###
# create trafodion user and group
if cmd_output('getent passwd %s' % traf_user):
print 'user [%s] exists' % traf_user
# trafodion user exists, set actual trafodion group
traf_group = cmd_output('id -ng %s' % traf_user)
else:
# default trafodion group
traf_group = traf_user
if not cmd_output('getent group %s' % traf_group):
run_cmd('groupadd %s' % traf_group)
traf_shadow = dbcfgs['traf_shadow']
print 'Adding user [%s]' % traf_user
run_cmd('useradd --shell /bin/bash -m %s -g %s --home %s --password "%s"' % (traf_user, traf_group, traf_user_dir, traf_shadow))
print 'Added user [%s]' % traf_user
if not os.path.exists(traf_user_dir):
run_cmd('mkdir -p %s' % traf_user_dir)
run_cmd('chmod 700 %s' % traf_user_dir)
### untar the copied trafoion binaries ###
TRAF_PKG_FILE = '/tmp/traf_bin.tar.gz'
run_cmd('mkdir -p %s' % traf_home)
run_cmd('mkdir -p /etc/trafodion')
run_cmd('tar xf %s -C %s' % (TRAF_PKG_FILE, traf_home))
run_cmd('mv -f /tmp/trafodion_config %s' % TRAF_CFG_FILE)
run_cmd('cp -rf /tmp/.ssh %s/..' % traf_home)
run_cmd('mv -f /tmp/hbase-trx-* %s' % dbcfgs['hbase_lib_path'])
run_cmd('mv -f /tmp/trafodion-utility-* %s' % dbcfgs['hbase_lib_path'])
### copy trafodion bashrc ###
bashrc_template = '%s/sysinstall/home/trafodion/.bashrc' % traf_home
bashrc_file = '%s/%s/.bashrc' % (home_dir, traf_user)
# backup orig bashrc
if os.path.exists(bashrc_file):
run_cmd('cp -f %s %s.bak' % (bashrc_file, bashrc_file))
run_cmd('cp -f %s %s' % (bashrc_template, bashrc_file))
# set permission
run_cmd('chmod 700 %s/../.ssh' % traf_home)
cmd_output('chmod 600 %s/../.ssh/{id_rsa,config,authorized_keys}' % traf_home)
run_cmd('chmod 777 %s' % TRAF_CFG_FILE)
run_cmd('chown -R %s:%s /etc/trafodion' % (traf_user, traf_group))
run_cmd('chmod +r %s/{hbase-trx-*,trafodion-utility-*}' % dbcfgs['hbase_lib_path'])
run_cmd('chown -R %s:%s %s' % (traf_user, traf_group, traf_user_dir))
### modify CLUSTERNAME ###
mod_file(TRAF_CFG_FILE, {'CLUSTERNAME=.*': 'CLUSTERNAME=%s' % socket.gethostname()})
### kernel settings ###
run_cmd('echo "kernel.pid_max=65535" >> /etc/sysctl.conf')
run_cmd('echo "kernel.msgmnb=65536" >> /etc/sysctl.conf')
run_cmd('echo "kernel.msgmax=65536" >> /etc/sysctl.conf')
run_cmd('/sbin/sysctl -p /etc/sysctl.conf 2>&1 > /dev/null')
### copy init script ###
init_script = '%s/sysinstall/etc/init.d/trafodion' % traf_home
if os.path.exists(init_script):
run_cmd('cp -rf %s /etc/init.d/' % init_script)
run_cmd('chkconfig --add trafodion')
run_cmd('chkconfig --level 06 trafodion on')
### create and set permission for scratch file dir ###
# for loc in scratch_locs:
# # don't set permission for HOME folder
# if not os.path.exists(loc):
# run_cmd('mkdir -p %s' % loc)
# if home_dir not in loc:
# run_cmd('chmod 777 %s' % loc)
if dbcfgs['enable_ha'] == 'true':
# set trafodion sudoer file for specific cmds
SUDOER_CFG += """
## Trafodion Floating IP commands
Cmnd_Alias IP = /sbin/ip
Cmnd_Alias ARP = /sbin/arping
## Allow Trafodion id to run commands needed to configure floating IP
%%%s ALL = NOPASSWD: IP, ARP
""" % traf_user
### write trafodion sudoer file ###
with open(TRAF_SUDOER_FILE, 'w') as f:
f.write(SUDOER_CFG)
# set ulimits for trafodion user
ulimits_file = '/etc/security/limits.d/%s.conf' % traf_user
ulimits_config = '''
# Trafodion settings
%s soft core unlimited
%s hard core unlimited
%s soft memlock unlimited
%s hard memlock unlimited
%s soft nofile 32768
%s hard nofile 65536
%s soft nproc 100000
%s hard nproc 100000
''' % ((traf_user,) * 8)
write_file(ulimits_file, ulimits_config)
# main
try:
dbcfgs_json = sys.argv[1]
except IndexError:
err('No db config found')
run()