# OCMsetup.def: Setups Oracle Configuration Manager # $Id: OCMsetup.def,v 1.39 2009/08/28 15:02:03 mschenke Exp $ # ARCS: $Header: /u02/webapps/workbench/cvs/RDA_4/src/scripting/lib/modules/OCMsetup.def,v 1.39 2009/08/28 15:02:03 mschenke Exp $ # # Change History # 20090828 DEM Use CSI, Country code and Metalink Id in connected mode. =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 $DOMAIN_NAME = getSetting('DOMAIN_NAME') var $MACHINE_NAME = getSetting('MACHINE_NAME') var $OCM_INSTALL = getSetting('OCM_INSTALL') var $ORACLE_HOME = getSetting('ORACLE_HOME') var $ORACLE_SID = field(':',-1,getSetting('ORACLE_SID','')) var $RDA_HOME = getSetting('RDA_HOME') var $RDA_VERSION = getSetting('RDA_VERSION') var %STATUS = () # Platform specific initialisation if isUnix() {var $osn = getOsName() 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 P,$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) return $ORACLE_HOME call register_error('ORACLE_HOME') return '' } #------------------------------------------------------------------------------ # Find where a JDK is installed #------------------------------------------------------------------------------ macro find_jdk {import $ORACLE_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 {import $RDA_HOME var $kit = undef # Look for a specified distribution kit if getSetting('OCM_DISTRIBUTION') {if testFile('r',catFile($RDA_HOME,'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(catDir($RDA_HOME,'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,$RDA_VERSION,$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)) var $cod = getSetting('OCM_COUNTRY_CODE') var $csi = getSetting('OCM_CSI') var $mid = getSetting('OCM_METALINK_ID') if !and($cod,$csi,$mid) return register_error('NO_AUTHEN') return exec_step('SETUP',join(' ',$setupCCR,'-S','RDA','-V',$RDA_VERSION,\ $csi,$mid,$cod,$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',\ concat($MACHINE_NAME,'.',$DOMAIN_NAME)),\ catDir($ORACLE_HOME,'ccr','hosts',$MACHINE_NAME),\ 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 EN,status write '---+!! Oracle Configuration Manager Status' write 'OCM installed' call renderFile() # Determine the annotation if compare('eq',$OCM_INSTALL,'D') {var $hsh = hash($MACHINE_NAME,$DOMAIN_NAME,$ORACLE_HOME) var $not = join('_','D',$hsh,'RDA',getPid(),\ gmtime('%Y%m%d_%H%M%S')) } 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(),\ gmtime('%Y%m%d_%H%M%S')) } # 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',\ catDir(getSetting('RPT_DIRECTORY'),'extern'),\ concat(getSetting('RPT_GROUP'),'_OCM_payload.jar'),true) # Generate the report if the collect was successful output EN,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 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})) } } # 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-2009, Oracle. All rights reserved. =head1 TRADEMARK NOTICE Oracle, JD Edwards, PeopleSoft, and Siebel are registered trademarks of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. =cut