# OCMsetup.def: Setups Oracle Configuration Manager # $Id: OCMsetup.def,v 2.10 2012/01/03 13:34:42 mschenke Exp $ # ARCS: $Header: /home/cvs/cvs/RDA_4/src/scripting/lib/modules/OCMsetup.def,v 2.10 2012/01/03 13:34:42 mschenke Exp $ # # Change History # 20120103 MSC Change the copyright notice. =head1 NAME 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 call setTrace(getSetting('RDA_TRACE')) # Initialisation var $OCM_INSTALL = getSetting('OCM_INSTALL') var $ORACLE_HOME = getSetting('ORACLE_HOME') var $ORACLE_SID = field(':',-1,getSetting('ORACLE_SID','')) var %STATUS = () # Platform specific initialisation if isUnix() {var $TTY = ' 2<>/dev/tty' var $INSTALL = 'installCCRSQL.sh' } elsif isWindows() {var $TTY = ' 2 \ 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 {import $emCCR # Check for an existing installation if testFile('e',$emCCR) return register_error('INSTALLED') # Perform setup when not yet done if !getSetting('OCM_REQUEST') call requestSetting('S090OCM') # Check prerequite failure if getSetting('OCM_CHECK_RESULT') {echo last return false } return true } #------------------------------------------------------------------------------ # Execute a step #------------------------------------------------------------------------------ macro exec_step {var ($stp,$cmd,$usr) = @arg import %STATUS,%STEPS keep %STATUS,%STEPS # Execute the command echo nvl($STEPS{$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 $STATUS{$stp} = last return false } return true } #------------------------------------------------------------------------------ # Find where to install OCM #------------------------------------------------------------------------------ macro find_home {import $ORACLE_HOME if !testDir('d',$ORACLE_HOME) {call register_error('ORACLE_HOME') return '' } if testDir('d',catDir($ORACLE_HOME,upDir(),'utils')) {call register_error('MIDDLEWARE') return '' } return $ORACLE_HOME } #------------------------------------------------------------------------------ # Find where a JDK is installed #------------------------------------------------------------------------------ macro find_jdk {import $ORACLE_HOME var $JAVA_HOME = getSetting('OCM_JAVA_HOME') if and($JAVA_HOME,testDir('d',catDir($JAVA_HOME,'jre'))) {call setEnv('JAVA_HOME',$JAVA_HOME) return $JAVA_HOME } var $JAVA_HOME = getEnv('JAVA_HOME') if and($JAVA_HOME,testDir('d',catDir($JAVA_HOME,'jre'))) return $JAVA_HOME if testDir('d',catDir($ORACLE_HOME,'jdk')) return lastDir() 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 getSetting('OCM_DISTRIBUTION') {if testFile('r',catFile($ccr,last)) var $kit = lastCommand() return ($kit,'KIT') } # Look for a distribution kit for the current operating system var %map = ('aix', 'AIX',\ '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,'x') } } return ($kit,'FIND') } #------------------------------------------------------------------------------ # Load Database data collection script" #------------------------------------------------------------------------------ macro load_dbscripts {import $ORACLE_SID,$TTY,$installCCR var $flg = getSetting('OCM_DB_SCRIPTS') if and($ORACLE_SID,$flg) {if exec_step('INSTALL_DB',\ concat($installCCR,' collectconfig -s ',$ORACLE_SID)) {echo 'Loaded Database data collection script' return 'I' } var $dba = getSetting('OCM_SYSDBA_USER') if exec_step('INSTALL_DB_PWD',\ concat($installCCR,' collectconfig -s ',$ORACLE_SID,\ ' -r ',$dba,$TTY)) {echo 'Loaded Database data collection script' return 'E' } } return '' } #------------------------------------------------------------------------------ # Load eBusiness suite data collection script #------------------------------------------------------------------------------ macro load_ebs_dbscripts {var ($typ) = @arg import $ORACLE_SID,$TTY,$installCCR var $flg = getSetting('OCM_APPS_SCRIPTS') var $dba = getSetting('OCM_SYSDBA_USER') var $usr = getSetting('OCM_APPS_USER') if and($ORACLE_SID,$flg,$usr,\ exec_step('INSTALL_APPS',\ concat($installCCR,' ebs_collectconfig -s ',$ORACLE_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 %STATUS keep %STATUS var ($stp) = @arg var $STATUS{$stp} = true return false } #------------------------------------------------------------------------------ # Run the Oracle Configuration Manager setup script #------------------------------------------------------------------------------ macro setup_ocm {import $OCM_INSTALL,$ORACLE_HOME,$TTY,$setupCCR if getEnv('CCR_ENDPOINT') {var $cmd = concat('echo ccr.endpoint=https://',last,'>>',\ catCommand($ORACLE_HOME,'ccr','config','ccr.properties')) debug 'Executing: ',$cmd call command($cmd) } if !testDir('e',catDir($ORACLE_HOME,'bin')) call setEnv('CCR_DISABLE_CRON_ENTRY','TRUE') if compare('eq',$OCM_INSTALL,'D') return exec_step('SETUP',join(' ',$setupCCR,'-S','RDA','-V',${RDA.VERSION},\ '-d',$TTY)) return exec_step('SETUP',join(' ',$setupCCR,'-S','RDA','-V',${RDA.VERSION},\ $TTY)) } #------------------------------------------------------------------------------ # Unzip Oracle Configuration Manager installation #------------------------------------------------------------------------------ macro unzip_ocm {import $JDK_HOME,$ORACLE_HOME,$TTY,$setupCCR # 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($ORACLE_HOME,'x'),$TTY) else var $cmd = concat('cd ',quote($ORACLE_HOME,'x'),' && ',\ catCommand($JDK_HOME,'bin','jar'),' xvf ',$pkg,$TTY) var $ret = exec_step('UNZIP',$cmd) if !$zip {if isUnix() call command(concat('chmod +x ',$setupCCR)) } return $ret } #------------------------------------------------------------------------------ # Main #------------------------------------------------------------------------------ decr $dur1,time() if find_home() {# Determine key paths var $JDK_HOME = find_jdk() var $emCCR = catFile($ORACLE_HOME,'ccr','bin','emCCR') var $setupCCR = catCommand($ORACLE_HOME,'ccr','bin','setupCCR') var $installCCR = catCommand($ORACLE_HOME,'ccr','admin','scripts',$INSTALL) # Disable initial collection call setEnv('CCR_INSTALL_DEFER_COLLECT','TRUE') # Install and setup Oracle Configuration Manager if and($JDK_HOME,\ check_ocm(),\ unzip_ocm(),\ setup_ocm()) {echo 'Oracle Configuration Manager is installed and set up.' # Install the scripts if load_dbscripts() call load_ebs_dbscripts(last) # Locate the log file var $fil = undef loop $dir (catDir($ORACLE_HOME,'ccr','hosts',${RDA.HOST}),\ catDir($ORACLE_HOME,'ccr','hosts',${RDA.NODE}),\ catDir($ORACLE_HOME,'ccr')) {if testFile('e',catFile($dir,'ccr','hosts','log','collector.log')) {var $fil = lastFile() break } } if !?$sfil {var ($fil) = grepDir(catDir($ORACLE_HOME,'ccr','hosts'),'collector.log','r') var $dir = catDir(dirname($fil),upDir()) } echo if $fil echo 'Please watch for any errors in ',$fil # Report the OCM status call setAbbr('OCM') output e,index var $toc = ${CUR.LAST} write {$toc} '2:Oracle Configuration Manager' output E,status write '---+!! Oracle Configuration Manager Status' write 'OCM installed' write {$toc} '3:[[',getFile(),'][rda_report][Initial Status]]' call renderFile() # Determine the annotation if compare('eq',$OCM_INSTALL,'D') {var $hsh = hash(${RDA.NODE},${RDA.DOMAIN},$ORACLE_HOME) var $not = join('_','D',$hsh,'RDA',getPid(),${RDA.TIMESTAMP}) } else {var ($fil) = grepDir(catDir($dir,'state','review'),\ '-oracle_home_config\.xml','i') var ($not) = match($fil,'^([0-9A-Z]+)\-',true) var $not = join('_','C',uc(nvl($not,'OCM')),'RDA',getPid(),${RDA.TIMESTAMP}) } # Launch a first collection echo 'Launching a first Oracle Configuration Manager collection' decr $dur2,time() call command(concat(quote($emCCR,'x'),' -annotation=',$not,' collect')) incr $dur2,time() var $sta = status() call log('OCM','collect',$not,$dur2,$sta) if !$sta {# Transfer the payload file if compare('eq',$OCM_INSTALL,'D') call transfer(catDir($dir,'state','upload'),'ocmconfig.jar',\ ${OUT.E},concat(${CUR.PREFIX},'payload.jar'),true) # Generate the report if the collect was successful output E,collect write '---+!! Configuration Collection' write $TOC write '---+ Collection Identification' write '|*Annotation*|',$not,'|' write $TOP prefix {write '---+ Collection Details' write '|*Name*|*File*|*Time Stamp*|' } var $xml = xmlLoadFile(catFile($dir,'state','review','targetMap.xml')) loop $itm (xmlFind($xml,'.../Collection')) write '|',xmlValue($itm,'name'),' |',xmlValue($itm,'file'),' |',\ xmlValue($itm,'collection_timestamp'),' |' if hasOutput(true) write $TOP write {$toc} '3:[[',getFile(),'][rda_report][Configuration Collection]]' call renderFile() } # Request a new packaging call setSetting('DO_FINALIZE','S919LOAD,S999END') } } incr $dur1,time() # Display error stack loop $key (keys(%STATUS)) {if $STATUS{$key} {echo 'ERROR: ',$ERRORS{$key} call setSetting('LAST_INFO_S090OCM',\ concat('OCM-9005: A setup error occurred: ',$ERRORS{$key}),\ 'T','OCM installation error') } } # Disable the post treatment call setSetting('POST_PACKAGE_S090OCM') # Log the install details call log('OCM','install',$OCM_INSTALL,$dur1,getSetting('LAST_INFO_S090OCM')) =begin credits =over 10 =item RDA 4.2: Ramkumar Venkataraman. =item RDA 4.13: Ramkumar Venkataraman. =back =end credits =head1 COPYRIGHT NOTICE Copyright (c) 2002, 2012, 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