# OCMsetup.ctl: Setups Oracle Configuration Manager # $Id: OCMsetup.ctl,v 1.6 2013/10/30 07:18:47 RDA Exp $ # ARCS: $Header: /home/cvs/cvs/RDA_8/src/scripting/lib/collect/RDA/OCMsetup.ctl,v 1.6 2013/10/30 07:18:47 RDA Exp $ # # Change History # 20130803 MSC Improve SID determination. =head1 NAME RDA:OCMsetup - Module for Setting up Oracle Configuration Manager =head1 DESCRIPTION This module installs and sets up Oracle Configuration Manager in the specified home and configures it for database collection as required. =cut use Log # Platform specific initialisation if isUnix() {var $TTY = ' 2<>/dev/tty' var $INSTALL = 'installCCRSQL.sh' } elsif isWindows() {var $TTY = ' 2 'Oracle Configuration Manager data',\ S_CCR_RUN => 'Oracle Configuration Manager execution status') var %ERR = (\ FIND => 'Unable to find the Oracle Configuration Manager package \ under RDA_HOME/ccr', \ INSTALL_APPS => 'A failure has been detected when running installCCRSQL.sh \ script for the Apps user',\ INSTALL_DB => 'A failure has been detected when running installCCRSQL.sh \ script',\ INSTALL_DB_PWD => 'A failure has been detected when running installCCRSQL \ running installCCRSQL.sh script with password',\ INSTALLED => 'Oracle Configuration Manager seems to be already \ installed',\ JAVA_HOME => 'Unable to identify a valid JAVA_HOME',\ KIT => 'Unable to find the specified Oracle Configuration Manager \ distribution kit under RDA_HOME/ccr', \ MANY => 'Multiple Oracle Configuration Manager distribution kits \ for the current operating system have been found under \ RDA_HOME/ccr', \ ORACLE_HOME => 'Oracle home not found',\ SETUP => 'A failure has been encountered in the setupCCR script',\ UNZIP => 'A failure occured when unzipping the Oracle Configuration \ Manager package') var %STA = () var %STP = (\ FIND => ' Identifying Oracle Configuration Manager package under \ RDA_HOME/ccr',\ INSTALL_APPS => ' Executing installCCRSQL.sh script for EBusiness Suite. \ You would be prompted for password of the chosen \ user for installing scripts for Database \ collection',\ INSTALL_DB => ' Executing installCCRSQL.sh script in host authenticated \ mode',\ INSTALL_DB_PWD => ' Executing installCCRSQL.sh script with password. You \ would be prompted for password of the chosen \ user for installing scripts for Database collection',\ JAVA_HOME => ' Identifying a valid JAVA_HOME',\ ORACLE_HOME => ' Identifying ORACLE_HOME',\ SETUP => ' Executing setupCCR script',\ UNZIP => ' Unzipping Oracle Configuration Manager package') #------------------------------------------------------------------------------ # Confirm if the prerequisite checks passed the setting phase #------------------------------------------------------------------------------ macro check_ocm {var ($tgt,$pgm) = @arg if ?testFile('e',$pgm) {call defineTarget($tgt) return register_error('INSTALLED') } return true } #------------------------------------------------------------------------------ # Execute a step #------------------------------------------------------------------------------ macro exec_step {var ($stp,$cmd,$usr) = @arg import %STA,%STP keep %STA,%STP # Execute the command echo nvl($STP{$stp},$stp) debug 'Executing: ',$cmd if $usr {var $pwd = askPassword(concat('Enter ',uc($usr),' user password: ')) output | $cmd write $pwd close } else call system($cmd) # Register errors and return the completion status if status() {var $STA{$stp} = last return false } return true } #------------------------------------------------------------------------------ # Find where to install OCM #------------------------------------------------------------------------------ macro find_home {var ($hom) = @arg if ?testDir('d',$hom) return $hom call register_error('ORACLE_HOME') return '' } #------------------------------------------------------------------------------ # Find where a JDK is installed #------------------------------------------------------------------------------ macro find_jdk {var ($hom) = @arg var $jdk = ${SET.RDA.OCM.D_JAVA_HOME} if and($jdk,testDir('d',catDir($jdk,'jre'))) {call setLocalEnv('JAVA_HOME',$jdk) return $jdk } var $jdk = ${ENV.JAVA_HOME} if and($jdk,testDir('d',catDir($jdk,'jre'))) return $jdk if ?testDir('d',catDir($hom,'jdk')) return lastDir() if findDir($dir = ${SET.RDA.BEGIN.D_ORACLE_PARENT},'^(jdk\d+|jrockit)','np') return first(last) if findDir($dir,'^wlserver_\d+','fp') {if ?testFile('f',$fil = catFile(last,'common','bin',${AS.CMD:'commEnv'})) {if match($fil,'\.cmd$',true) {if grepFile($fil,'^\s*set\s+JAVA_HOME\s*=\s*([\042\047])(.*?)\1','fi2') return first(last) } elsif grepFile($fil,'^\s*JAVA_HOME\s*=\s*([\042\047])(.*?)\1','fi2') return first(last) } } call register_error('JAVA_HOME') return '' } #------------------------------------------------------------------------------ # Identify the Oracle Configuration Manager package name #------------------------------------------------------------------------------ macro get_ocm_package {var $ccr = getGroupDir('D_RDA','ccr') var $kit = undef # Look for a specified distribution kit if ${SET.RDA.OCM.F_DISTRIBUTION} {if ?testFile('r',catFile(last)) var $kit = lastCommand() return ($kit,'KIT') } # Look for a distribution kit for the current operating system var %map = ('aix', 'AIX',\ 'cygwin', 'Windows',\ 'dec_osf','OSF1',\ 'hpux', 'HP-UX',\ 'linux', 'Linux',\ 'solaris','SunOS',\ 'MSWin32','Windows') var $plt = getOsName() var $plt = nvl($map{$plt},$plt) loop $fil (grepDir($ccr,\ concat('^ccr-Production\-\d+(\.\d+){2,}\-',$plt,\ '(\-.*)?\.zip$'),'ip')) {if ?testFile('r',$fil) {if $kit return (undef,'MANY') var $kit = quote($fil) } } return ($kit,'FIND') } #------------------------------------------------------------------------------ # Load Database data collection script" #------------------------------------------------------------------------------ macro load_dbscripts {var ($tgt,$pgm) = @arg import $TTY var $flg = $tgt->get_first('B_DB_SCRIPTS') var $sid = getSid($tgt->get_first('T_ORACLE_SID','')) if and($sid,$flg) {if exec_step('INSTALL_DB',\ concat($pgm,' collectconfig -s ',$sid)) {echo 'Loaded Database data collection script' return 'I' } var $dba = $tgt->get_first('T_SYSDBA_USER') if exec_step('INSTALL_DB_PWD',\ concat($pgm,' collectconfig -s ',$sid,' -r ',$dba,$TTY)) {echo 'Loaded Database data collection script' return 'E' } } return '' } #------------------------------------------------------------------------------ # Load eBusiness suite data collection script #------------------------------------------------------------------------------ macro load_ebs_dbscripts {var ($tgt,$pgm,$typ) = @arg import $TTY var $flg = $tgt->get_first('B_APPS_SCRIPTS') var $dba = $tgt->get_first('T_SYSDBA_USER') var $sid = getSid($tgt->get_first('T_ORACLE_SID','')) var $usr = $tgt->get_first('T_APPS_USER') if and($sid,$flg,$usr,\ exec_step('INSTALL_APPS',\ concat($pgm,' ebs_collectconfig -s ',$sid,\ check($typ,'E',concat(' -r ',$dba),''),\ ' -u ',$usr,$TTY))) echo 'Loaded EBusiness suite data collection script' } #------------------------------------------------------------------------------ # Register an error in the error stack #------------------------------------------------------------------------------ macro register_error {import %STA keep %STA var ($stp) = @arg var $STA{$stp} = true return false } #------------------------------------------------------------------------------ # Run the Oracle Configuration Manager setup script #------------------------------------------------------------------------------ macro setup_ocm {var ($hom,$pgm,$mod) = @arg import $TTY if ${ENV.CCR_ENDPOINT} {var $cmd = concat('echo ccr.endpoint=https://',last,'>>',\ catCommand($hom,'ccr','config','ccr.properties')) debug 'Executing: ',$cmd call command($cmd) } if !?testDir('e',catDir($hom,'bin')) call setLocalEnv('CCR_DISABLE_CRON_ENTRY','TRUE') if compare('eq',$mod,'D') return exec_step('SETUP',join(' ',$pgm,'-S','RDA','-V',${RDA.V_VERSION},\ '-d',$TTY)) return exec_step('SETUP',join(' ',$pgm,'-S','RDA','-V',${RDA.V_VERSION},\ $TTY)) } #------------------------------------------------------------------------------ # Unzip Oracle Configuration Manager installation #------------------------------------------------------------------------------ macro unzip_ocm {var ($hom,$pgm,$jdk) = @arg import $TTY # Identify the package and the command to execute var ($pkg,$err) = get_ocm_package() if !$pkg return register_error($err) # Unzip the package var $zip = findCommand('unzip') if $zip var $cmd = concat($zip,' -o ',$pkg,' -d ',quote($hom),$TTY) else var $cmd = concat('cd ',quote($hom),' && ',\ catCommand($jdk,'bin','jar'),' xvf ',$pkg,$TTY) var $ret = exec_step('UNZIP',$cmd) if !$zip {if isUnix() call command(concat('chmod +x ',$pgm)) } return $ret } #------------------------------------------------------------------------------ # Main #------------------------------------------------------------------------------ var ($pkg,@err) = (false) # Disable initial collection call setLocalEnv('CCR_INSTALL_DEFER_COLLECT','TRUE') # Treat all installation requests loop $tgt (${COL.TARGET/i}->grep('^W_CCR_INSTALL$','rw')) {var ($mod) = $tgt->set_value('W_CCR_INSTALL') next !compare('eq',$tgt->get_first('S_CCR_SETUP'),'pending') var $oid = $tgt->get_oid var $ttl = $tgt->get_first('T_TITLE') var ($dur,$msg,%STA) = (0,'') # Perform the installation decr $dur,time() if find_home($hom = $tgt->get_first('D_ORACLE_HOME')) {# Determine key paths var $ccr = catFile($hom,'ccr','bin','emCCR') var $jdk = find_jdk($hom) # Install and setup Oracle Configuration Manager var $pgm = catCommand($hom,'ccr','bin','setupCCR') if and($jdk,\ check_ocm($tgt,$ccr),\ unzip_ocm($hom,$pgm,$jdk),\ setup_ocm($hom,$pgm,$mod)) {echo 'Oracle Configuration Manager is installed and set up in ',$ttl # Update the target call defineTarget($tgt) # Install the scripts var $pgm = catCommand($hom,'ccr','admin','scripts',$INSTALL) if load_dbscripts($tgt,$pgm) call load_ebs_dbscripts($tgt,$pgm,last) # Locate the log file var $fil = undef loop $dir (catDir($hom,'ccr','hosts',${RDA.T_HOST}),\ catDir($hom,'ccr','hosts',${RDA.T_NODE}),\ catDir($hom,'ccr')) {if ?testFile('e',catFile($dir,'ccr','hosts','log','collector.log')) {var $fil = lastFile() break } } if !?$sfil {var ($fil) = grepDir(catDir($hom,'ccr','hosts'),'collector.log','r') var $dir = catDir(dirname($fil),upDir()) } echo if $fil echo 'Watch for any errors in ',$fil # Request a new packaging var $pkg = true } } incr $dur,time() # Display the error stack loop $key (keys(%STA)) {if $STA{$key} {var $msg = nvl($ERR{$key},$key) echo 'ERROR: ',$msg call push(@err,concat($oid,': ',$msg)) } } # Log the install details call log('OCM','install',$mod,$dur,$msg,$ttl) } # Store the errors if @err var ${STA.RDA.OCM.T_RUN:'OCM installation error'} = \ join('%BR% - ','OCM-9005: A setup error occurred: ',@err) # Update the module status and the post treatments var ${SET.RDA.OCM.T_POST_PACKAGE_SETUP} = undef if $pkg {var ${SET.RDA.OCM.B_IN_USE} = true var ${STA.RDA.OCM.S_RUN} = 'pending' var @{COL.PACKAGE.T_FINALIZE} = (\ grep(@{COL.PACKAGE.T_FINALIZE},'^RDA:DC(end|load|ocm)$','v'),\ 'RDA:DCocm','RDA:DCload','RDA:DCend') } =begin credits =over 10 =item RDA 4.2: Ramkumar Venkataraman. =item RDA 4.13: Ramkumar Venkataraman. =item RDA 4.31: Maria Salzberger. =back =end credits =head1 COPYRIGHT NOTICE Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. =head1 TRADEMARK NOTICE Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners. =cut