Collection.sh 70 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753
  1. #!/bin/sh
  2. ################################################################################
  3. # Collection.sh
  4. # This script is used to search for all the installed instances of Oracle
  5. # products in the target system.
  6. #
  7. ################################################################################
  8. CT_BUILD_VERSION="19.1"
  9. export CT_BUILD_VERSION
  10. SCRIPT_VERSION="19.1"
  11. SCRIPT_NAME="${0}"
  12. ################################################################################
  13. #
  14. #********************User Command Line Management Utilities*********************
  15. #
  16. ################################################################################
  17. ################################################################################
  18. #
  19. # function to syntax check and process the command line options
  20. #
  21. checkSyntax() {
  22. ARGUSAGE="\nOptions are: \n
  23. [-d search_dir] [-fsall true|false] [-o full_path_dir_name]
  24. [-follow true|false] [-debug true|false] [-m all|ip|user] [-tns]
  25. [-L Y|N ] [-p product] [-fastsearch] -r [remote_user@remote_machine] -t [tempdir]
  26. -d [search,dirs]
  27. The directories to be searched for the
  28. installations. A quoted string of directory names
  29. separated by a comma is required for when
  30. more than 1 directory is to be searched. The
  31. default is the root directory.
  32. -fsall [true|false]
  33. When specified true, all file systems including
  34. remote ones are searched, otherwise only local
  35. filesytem is searched. Default is false.
  36. -o [full_path_dir_name]
  37. Option to output to a file in the
  38. directory specified by full_path_dir_name. The option should
  39. be a full pathname. The file will be named Collection-<MACHINE_NAME>.tar.bz2.
  40. If not specified, default is the current directory.
  41. -follow [true|false]
  42. Option to follow symbolic links during file search.
  43. Default action is true. Some older versions of
  44. AIX don't allow the find command to follow
  45. symbolic links, so this must be set to false for
  46. the script to work with those systems.
  47. -debug [true|false]
  48. Option to turn on debugging information. Default false.
  49. -m [ip|user|all]
  50. Option to turn on masking of sensitive information.
  51. Default is off, can mask username/password combination
  52. or IP address.
  53. -L Y
  54. Option to agree to license agreement without having it
  55. displayed. Default is off, so the License Agreement will
  56. be printed to the screen.
  57. NOTE: ***USE OF THIS OPTION IMPLIES LICENSE ACCEPTENCE.***
  58. -fastsearch
  59. Option to automatically detect Oracle directories to be
  60. searched. NOTE: The fastsearch option of Collection Tool
  61. is intended to gather information from the system with
  62. minimal file searching.
  63. -p product
  64. Option to pass in a list of Oracle products to look for.
  65. Use \"all\" for the products that the Collection
  66. Tool supports. Use a comma separated list for a group
  67. of products. i.e. \"FormsReports, WLS,SOA,WLSNUP,OAS,
  68. Tuxedo,WLSBasic,DB,EBS,OBI,Webcenter\"
  69. -r [file.txt|remote_user@remote_machine]
  70. Option to run the Collection Scripts remotely and gather
  71. results. If used, the Collection tool will secure copy
  72. files to remote_machine and run the script from /tmp.
  73. -tns
  74. Option to switch from the automatic local database connection
  75. mode (the default) to an interactive remote database connection
  76. mode, via database listener. The tool prompts for connection
  77. description details (e.g. listener host, port, etc), database
  78. user and password, then connects to the remote database using
  79. SQL*Plus and collects the data for the selected products
  80. (DB, EBS). Multiple databases can be collected. This mode
  81. cannot be used together with the silent mode (-L Y).
  82. -t [full_path_dir_name]
  83. Option to set the Collection Tool temporary output to files in the
  84. directory specified by full_path_dir_name. The option should
  85. be a full pathname. The files will be deleted at the end of the CT
  86. run. If not specified default is /tmp.
  87. "
  88. while [ "$1" != "" ]
  89. do
  90. case $1 in
  91. -d) SEARCH_DIR="$2" ;
  92. if [ ! -z "$SEARCH_DIR" ] ; then
  93. for DIR in `$ECHO "$SEARCH_DIR" | tr ',' ' '`
  94. do
  95. if [ ! -d ${DIR} ] ; then
  96. $ECHO "\n$ARGUSAGE" >&2
  97. $ECHO "CT: CT-00001: ERROR: Argrument search directory $DIR does not exist or is not readable."
  98. exit 0
  99. fi
  100. done
  101. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 ${2}"
  102. SEARCH_DIR=`$ECHO $SEARCH_DIR | tr ',' ' '`
  103. shift 2
  104. else
  105. $ECHO "\n$ARGUSAGE" >&2
  106. $ECHO "CT: CT-00002: ERROR: No argument provided to the -d parameter."
  107. exit 0
  108. fi
  109. ;;
  110. -fsall) FS_SEARCH_ALL=$2 ;
  111. if [ ! -z "$FS_SEARCH_ALL" ] ; then
  112. if [ "$FS_SEARCH_ALL" = "false" ] ; then
  113. SEARCH_NFS="false"
  114. else
  115. SEARCH_NFS="true"
  116. fi
  117. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  118. shift 2
  119. else
  120. $ECHO "\n$ARGUSAGE" >&2
  121. $ECHO "CT: CT-00003: ERROR: No argument provided to the -fsall parameter."
  122. exit 0
  123. fi
  124. ;;
  125. -o) OUTPUT_DIR=$2 ;
  126. if [ ! -z "$OUTPUT_DIR" ] ; then
  127. if [ ! -d "${OUTPUT_DIR}" ] ; then
  128. mkdir -p "${OUTPUT_DIR}"
  129. mkdir -p "${CT_DEBUG}"
  130. fi
  131. if [ ! -w "${OUTPUT_DIR}" ] ; then
  132. $ECHO "\n$ARGUSAGE" >&2
  133. $ECHO "CT: CT-00004: ERROR: User does not have the permission to write to the created subfolder, ${OUTPUT_DIR}."
  134. exit 0
  135. fi
  136. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  137. shift 2
  138. else
  139. $ECHO "\n$ARGUSAGE" >&2
  140. $ECHO "CT: CT-00005: ERROR: No argument provided to the -o parameter."
  141. exit 0
  142. fi
  143. ;;
  144. -follow) FOLLOW_ALL=$2 ;
  145. if [ ! -z "$FOLLOW_ALL" ] ; then
  146. if [ "$FOLLOW_ALL" = "false" ] ; then
  147. FOLLOW_LINKS=false ;
  148. else
  149. FOLLOW_LINKS=true ;
  150. fi
  151. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  152. shift 2
  153. else
  154. $ECHO "\n$ARGUSAGE" >&2
  155. $ECHO "CT: CT-00006: ERROR: No argument provided to the -follow parameter."
  156. exit 0
  157. fi
  158. ;;
  159. -debug) OUTPUT_DEBUG=$2 ;
  160. if [ ! -z "$OUTPUT_DEBUG" ] ; then
  161. if [ "$OUTPUT_DEBUG" = "true" ] ; then
  162. DEBUG="true" ;
  163. else
  164. DEBUG="false" ;
  165. fi
  166. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  167. shift 2
  168. else
  169. $ECHO "\n$ARGUSAGE" >&2
  170. $ECHO "CT: CT-00007: ERROR: No argument provided to the -debug parameter."
  171. exit 0
  172. fi
  173. ;;
  174. -L) LICAGREE=$2
  175. if [ ! -z "$LICAGREE" ] ; then
  176. if [ "$LICAGREE" = "Y" -o "$LICAGREE" = "y" ] ; then
  177. LICAGREE="YES" ;
  178. else
  179. LICAGREE= ;
  180. fi
  181. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  182. shift 2
  183. else
  184. $ECHO "\n$ARGUSAGE" >&2
  185. $ECHO "CT: CT-00008: ERROR: No argument provided to the -L parameter."
  186. exit 0
  187. fi
  188. ;;
  189. -p) PRODLIST=$2
  190. PRODFAMILYLIST=`ls -p ../resources/products/`
  191. if [ -z "$PRODLIST" ] ; then
  192. $ECHO "\n$ARGUSAGE" >&2
  193. $ECHO "CT: CT-00009: ERROR: No argument provided to the -p parameter."
  194. exit 0
  195. fi
  196. if [ "$PRODLIST" = "all" ] ; then
  197. PRODLIST=`ls ../resources/products/ | grep -v Tuxedo | grep -v FMWRUL`
  198. PRODUCTSRUN="_all"
  199. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  200. shift 2
  201. else
  202. TMPPLIST="$PRODLIST"
  203. PRODLIST=
  204. PRODUCTSRUN=
  205. for CHOSENPROD in `$ECHO $TMPPLIST | tr ',' ' '`
  206. do
  207. $ECHO "$PRODFAMILYLIST" | grep "$CHOSENPROD/" > /dev/null 2>&1
  208. if [ $? -ne 0 ] ; then
  209. $ECHO "\n$ARGUSAGE" >&2
  210. $ECHO "CT: CT-00010: ERROR: $CHOSENPROD is not a valid product family."
  211. exit 0
  212. fi
  213. PRODUCTSRUN="${PRODUCTSRUN}_${CHOSENPROD}"
  214. PRODLIST="$PRODLIST $CHOSENPROD"
  215. done
  216. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  217. shift 2
  218. fi
  219. ;;
  220. -m) MASK_DATA=$2 ;
  221. if [ "$MASK_DATA" != "all" -a "$MASK_DATA" != "IP" -a "$MASK_DATA" != "ip" -a "$MASK_DATA" != "user" ] ; then
  222. $ECHO "\n$ARGUSAGE" >&2
  223. $ECHO "CT: CT-00011: ERROR: Valid option not chosen for the -m mask parameter."
  224. exit 0
  225. fi
  226. perl -v
  227. if [ $? -ne 0 ] ; then
  228. $ECHO "\n$ARGUSAGE" >&2
  229. $ECHO "CT: CT-00012: ERROR: Perl was not found in the system path.\nPlease review the documentation for masking requirements."
  230. exit 0
  231. fi
  232. perldoc -l Digest::SHA
  233. if [ $? -ne 0 ] ; then
  234. $ECHO "\n$ARGUSAGE" >&2
  235. $ECHO "CT: CT-00013: ERROR: Cannot find a perl with Digest::SHA installed.\nPlease review the documentation for masking requirements."
  236. exit 0
  237. fi
  238. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  239. shift 2
  240. ;;
  241. -fastsearch) FASTSEARCH=true
  242. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1"
  243. shift
  244. ;;
  245. -tns) REMOTE_DB=YES
  246. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1"
  247. shift
  248. ;;
  249. -r) REMOTEINFO=$2
  250. REMOTEOPTIONUSED=""
  251. if [ -f "$REMOTEINFO" ] ; then
  252. if [ "$REMOTEOPTIONUSED" = "true" ] ; then
  253. $ECHO "CT: CT-00022: ERROR: Remote option argument cannot be specifed with the remote file and the user\@machine_info on the command line. Please use one format for remote execution."
  254. exit 0
  255. else
  256. RUNREMOTE_FILE="true"
  257. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  258. REMOTEOPTIONUSED="true"
  259. shift 2
  260. fi
  261. else
  262. case "$REMOTEINFO" in
  263. *\@*)
  264. if [ "$REMOTEOPTIONUSED" = "true" ] ; then
  265. $ECHO "CT: CT-00022: ERROR: Remote option argument cannot be specifed with the remote file and the user\@machine_info on the command line. Please use one format for remote execution."
  266. exit 0
  267. fi
  268. REMOTEOPTIONUSED="true"
  269. ;;
  270. *)
  271. $ECHO "\n$ARGUSAGE" >&2
  272. $ECHO "CT: CT-00014: ERROR: Remote option argument must be in the form of user\@machine_info or a file containing informataion about multiple remote machines."
  273. exit 0
  274. esac
  275. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  276. shift 2
  277. fi
  278. ;;
  279. -t) CT_TMP=$2/ct_tmp_${MACHINE_NAME}_${CT_PID} ;
  280. if [ ! -z "$CT_TMP" ] ; then
  281. if [ ! -d "${CT_TMP}" ] ; then
  282. mkdir -p "${CT_TMP}"
  283. fi
  284. if [ ! -w "${CT_TMP}" ] ; then
  285. $ECHO "\n$ARGUSAGE" >&2
  286. $ECHO "CT: CT-00023: ERROR: User does not have the permission to write to the created subfolder, ${CT_TMP}."
  287. exit 0
  288. fi
  289. mkdir -p $CT_TMP/logs
  290. CT_DEBUG=$CT_TMP/debug
  291. chmod o+x $CT_TMP
  292. CT_COLLECTED=$CT_TMP/logs/CT_collected.log
  293. CT_WARNINGS=$CT_TMP/logs/CT_warnings.log
  294. CT_ERRORS=$CT_TMP/logs/CT_errors.log
  295. UNIXCMDERR=$CT_TMP/logs/unixcmderrs.log
  296. touch $UNIXCMDERR
  297. SCRIPT_OPTIONS="$SCRIPT_OPTIONS $1 $2"
  298. shift 2
  299. else
  300. $ECHO "\n$ARGUSAGE" >&2
  301. $ECHO "CT: CT-00024: ERROR: No argument provided to the -t parameter."
  302. exit 0
  303. fi
  304. ;;
  305. *) $ECHO "\n$ARGUSAGE" >&2
  306. $ECHO "CT: CT-00015: ERROR: "$1" is an invalid entry."
  307. exit 0
  308. ;;
  309. esac
  310. done
  311. if [ "$REMOTE_DB" = "YES" -a "$LICAGREE" = "YES" ] ; then
  312. $ECHO "\n$ARGUSAGE" >&2
  313. $ECHO "CT: CT-00016: ERROR: -tns option cannot be used together with silent mode (-L Y)"
  314. exit 0
  315. fi
  316. if [ "$RUNREMOTE_FILE" = "true" -a -n "$PRODLIST" ] ; then
  317. $ECHO "\n$ARGUSAGE" >&2
  318. $ECHO "CT: CT-00017: ERROR: The -r option with the file argument cannot be used together with the -p option.\nPlease specify the -p option in the remote input file or see instructions for more detail."
  319. exit 0
  320. fi
  321. ## Make then see if default directory is writable
  322. if [ ! -d "${OUTPUT_DIR}" ] ; then
  323. mkdir -p "${OUTPUT_DIR}"
  324. fi
  325. if [ ! -d "${CT_TMP}" ] ; then
  326. mkdir -p "${CT_TMP}/logs"
  327. fi
  328. if [ ! -d "${CT_DEBUG}" ] ; then
  329. mkdir -p "${CT_DEBUG}"
  330. fi
  331. if [ ! -w "${OUTPUT_DIR}" ] ; then
  332. $ECHO "\n$ARGUSAGE" >&2
  333. $ECHO "CT: CT-00004: ERROR: User does not have the permission to write to the default output directory, ${OUTPUT_DIR}. Either chmod the correct permissions or chose an output directory via the -o command line arguement."
  334. exit 0
  335. fi
  336. # set output files
  337. setOutputFiles
  338. # debug
  339. $ECHO_DEBUG "\ndebug.function.checkSyntax"
  340. $ECHO_DEBUG "\ndebug.script options=$SCRIPT_OPTIONS"
  341. }
  342. ################################################################################
  343. #
  344. # checkNFS - function to check if NFS directories are on the system and if
  345. # the customer is not searching them.
  346. checkNFS () {
  347. NFSDIRS=""
  348. NFSDIRS=`df | grep -i nfs`
  349. if [ $? -ne 0 ] ; then
  350. if [ -n "$NFSDIRS" -a $SEARCH_NFS != "true" ] ; then
  351. echo_log "CT: CT-00110: WARNING: Current system has NFS drives mounted!\nIf you're sure that the Oracle products are installed only on local drives, continue with yes(y), otherwise select No(n) and please run it again with "-fsall true" option.\nRunning the Collection Tool on insufficient disks may have a significant impact on the quality of the data and information collected from this environment. Due to this, Oracle may have to get back to you and ask for additional items, or to execute again. " $CT_WARNINGS
  352. if [ "$LICAGREE" != "YES" ] ; then
  353. ANSWER=
  354. while [ -z "${ANSWER}" ]
  355. do
  356. $ECHO "\nPlease choose an Y to continue or N to quit:"
  357. read ANSWER
  358. #
  359. # Act according to the user's response.
  360. #
  361. case "${ANSWER}" in
  362. Y|y) ANSWER=y
  363. ;;
  364. N|n) ANSWER=n
  365. break # break out of the loop
  366. ;;
  367. #
  368. # An invalid choice was entered, reprompt.
  369. #
  370. *) ANSWER=
  371. ;;
  372. esac
  373. done
  374. if [ "${ANSWER}" = "n" ] ; then
  375. echo_log "CT-00018: ERROR: User chose not to continue the Collection Tool." $CT_ERRORS
  376. exit 0
  377. fi
  378. fi
  379. fi
  380. fi
  381. }
  382. ################################################################################
  383. #
  384. # credentialValidation - function to check the user running the script and display
  385. # the appropriate messages.
  386. credentialValidation () {
  387. # debug
  388. $ECHO_DEBUG "\ndebug.function.credentialValidation"
  389. # use whoami to get user; helps in su and sudo instances; works across platforms.
  390. # if whoami not found default to $LOGNAME
  391. USER_ID_CMD=`type whoami`
  392. if [ $? -ne 0 ] ; then
  393. case "${USER_ID_CMD}" in
  394. *found*)
  395. if [ "$OS_NAME" = "SunOS" ] ; then
  396. if [ -x /usr/ucb/whoami ] ; then
  397. USR_ID=`/usr/ucb/whoami`
  398. fi
  399. else
  400. USR_ID=$LOGNAME
  401. fi
  402. ;;
  403. *)
  404. USR_ID=`whoami`
  405. ;;
  406. esac
  407. else
  408. USR_ID=`whoami`
  409. fi
  410. SCRIPT_USER=$USR_ID
  411. if [ "${SCRIPT_USER}" != "root" ] ; then
  412. echo_log "CT: CT-00100: WARNING: Current OS user ${SCRIPT_USER} does NOT have 'administrative' rights!\nIf you're sure that the Current OS user ${SCRIPT_USER} is granted the required privileges, continue with yes(y), otherwise select No(n) and please log on with a OS user with sufficient privileges.\nRunning the Collection Tool with insufficient privileges may have a significant impact on the quality of the data and information collected from this environment. Due to this, Oracle may have to get back to you and ask for additional items, or to execute again." $CT_WARNINGS
  413. if [ "$LICAGREE" != "YES" ] ; then
  414. ANSWER=
  415. while [ -z "${ANSWER}" ]
  416. do
  417. $ECHO "\nPlease choose an Y to continue or N to quit:"
  418. read ANSWER
  419. #
  420. # Act according to the user's response.
  421. #
  422. case "${ANSWER}" in
  423. Y|y) ANSWER=y
  424. ;;
  425. N|n) ANSWER=n
  426. break # break out of the loop
  427. ;;
  428. #
  429. # An invalid choice was entered, reprompt.
  430. #
  431. *) ANSWER=
  432. ;;
  433. esac
  434. done
  435. if [ "${ANSWER}" = "n" ] ; then
  436. echo_log "CT-00018: ERROR: User chose not to continue the Collection Tool." $CT_ERRORS
  437. exit 0
  438. fi
  439. fi
  440. fi
  441. }
  442. ################################################################################
  443. #
  444. # debugWarning - function to check if the user understands the debug risk.
  445. #
  446. debugWarning () {
  447. # debug
  448. $ECHO_DEBUG "\ndebug.function.debugWarning"
  449. echo_log "CT: CT-00200: WARNING: You have chosen to run the Collection tool in debug mode.\n The script will write data in files in order for Oracle to debug the running of the scripts. You are required to inspect the files for any data that may be sensitive before returning the output to Oracle. \nIf you wish to continue, continue with yes(y), otherwise select no(n) and contact your Oracle representative for more details." $CT_WARNINGS
  450. ANSWER=
  451. while [ -z "${ANSWER}" ]
  452. do
  453. $ECHO "\nPlease choose an Y to continue or N to quit:"
  454. read ANSWER
  455. #
  456. # Act according to the user's response.
  457. #
  458. case "${ANSWER}" in
  459. Y|y) ANSWER=y
  460. ;;
  461. N|n) ANSWER=n
  462. break # break out of the loop
  463. ;;
  464. #
  465. # An invalid choice was entered, reprompt.
  466. #
  467. *) ANSWER=
  468. ;;
  469. esac
  470. done
  471. if [ "${ANSWER}" = "n" ] ; then
  472. echo_log "CT-00018: ERROR: User chose not to continue the Collection Tool." $CT_ERRORS
  473. exit 0
  474. fi
  475. }
  476. ################################################################################
  477. #
  478. #***********************Portability and Debug Functions************************
  479. #
  480. ################################################################################
  481. ################################################################################
  482. #
  483. # time stamp
  484. #
  485. setTime() {
  486. # set time
  487. NOW="`date '+%m/%d/%Y %H:%M %Z'`"
  488. }
  489. ###############################################################
  490. # setAlias
  491. #
  492. setAlias() {
  493. unalias -a
  494. cmd_list="printf
  495. echo
  496. touch
  497. cat
  498. more
  499. grep
  500. egrep
  501. cut
  502. find
  503. uname
  504. awk
  505. sed
  506. sort
  507. uniq
  508. expr
  509. cksum
  510. ps
  511. rm
  512. mkdir
  513. mv
  514. ls
  515. clear
  516. whoami
  517. "
  518. path_list="/bin/
  519. /usr/bin/
  520. /usr/ucb/"
  521. alias_not_found=""
  522. for c in $cmd_list
  523. do
  524. alias_flag=0
  525. for p in $path_list
  526. do
  527. if [ -x ${p}${c} ];
  528. then
  529. alias ${c}=${p}${c}
  530. alias_flag=1
  531. break
  532. fi
  533. done
  534. if [ $alias_flag -eq 0 ] ; then
  535. if [ -z "${alias_not_found}" ]; then
  536. alias_not_found=$c
  537. else
  538. alias_not_found=${alias_not_found},$c
  539. fi
  540. fi
  541. done
  542. if [ -n "${alias_not_found}" ]; then
  543. $ECHO "CT: CT-00000: ERROR: \n${alias_not_found} utility(ies) not found. Please contact your assigned consultant."
  544. exit 600
  545. fi
  546. #alias
  547. }
  548. ##############################################################
  549. # make echo more portable
  550. #
  551. echo_print() {
  552. #IFS=" " command
  553. eval 'printf "%b\n" "$*"'
  554. }
  555. ################################################################################
  556. #
  557. # expand debug output
  558. #
  559. echo_debug() {
  560. if [ "$DEBUG" = "true" ] ; then
  561. $ECHO "$*"
  562. $ECHO "$*" >> $DEBUG_FILE
  563. fi
  564. }
  565. ################################################################################
  566. #
  567. # echo_log - allow for logging
  568. #
  569. echo_log() {
  570. $ECHO "$1"
  571. $ECHO "$1" >> $2
  572. }
  573. ################################################################################
  574. #
  575. # set parameters based on user and hardware
  576. #
  577. setOSSystemInfo() {
  578. # debug
  579. $ECHO_DEBUG "\ndebug.function.setOSSystemInfo"
  580. SCRIPT_SHELL=$SHELL
  581. TAIL="tail -200"
  582. # always run ps, ucb/ps, and jps
  583. # check to see if Java Virtual Machine Process Status Tool is available
  584. JPSCMD="false"
  585. JPSCMDFILE=
  586. JAVA_LOC=`which java 2>>/dev/null`
  587. if [ "$?" = "0" -a -f "$JAVA_LOC" ] ; then
  588. JAVA_DIR=`dirname $JAVA_LOC 2>>$UNIXCMDERR`
  589. JAVA_SYM=`ls -l $JAVA_LOC | sed 's/.*->\ //g'`
  590. fi
  591. if [ -x /usr/java/bin/jps ] ; then
  592. JPSCMD="true"
  593. JPSCMDFILE="/usr/java/bin/jps -v"
  594. elif [ -x $JAVA_DIR/jps ] ; then
  595. JPSCMD="true"
  596. JPSCMDFILE="$JAVA_DIR/jps -v"
  597. else
  598. JPSCMD="false"
  599. fi
  600. #setup ucb ps and ps to always run.
  601. PSCMD_UCB=
  602. if [ "$OS_NAME" = "SunOS" ] ; then
  603. PSCMD_UCB="/usr/ucb/ps -auwww"
  604. PSCMD="ps -eaf"
  605. elif [ "$OS_NAME" = "HP-UX" ] ; then
  606. PSCMD_UCB="/usr/ucb/ps -auwww"
  607. PSCMD="ps -eaf"
  608. elif [ "$OS_NAME" = "AIX" ] ; then
  609. PSCMD="ps -eaf"
  610. elif [ "$OS_NAME" = "Linux" ] ; then
  611. PSCMD="ps -efww"
  612. else
  613. PSCMD="ps -eaf"
  614. fi
  615. }
  616. ################################################################################
  617. #
  618. #************************** File Detection Utilities ***************************
  619. #
  620. ################################################################################
  621. ################################################################################
  622. #
  623. # set results files used for temporary and permanent output
  624. #
  625. setOutputFiles() {
  626. CT_FILES=$CT_TMP/logs/CTfiles.${CT_PID}
  627. CT_SORTED_FILES=$CT_TMP/logs/CTsortedfiles.${CT_PID}
  628. CT_MACHINFO_FILE=$CT_TMP/logs/${MACHINE_NAME}-info.txt
  629. CT_HOMES_FILE=$CT_TMP/logs/${MACHINE_NAME}-CT_Homes.txt
  630. CT_LOGS_FILE=$CT_TMP/logs/CTlogfiles.txt
  631. #files to be collected
  632. CT_TAR_FILE_LIST=$CT_TMP/logs/CTtarfilelist.txt
  633. CT_RMDATA_FILE_LIST=$CT_TMP/logs/CTRMDATAfilelist.txt
  634. CMDFILE=$CT_TMP/logs/OraCmdList
  635. CMDOUTFILE=$CT_TMP/logs/OraCmdOutFileList
  636. # debug and error files
  637. DEBUG_FILE=$CT_TMP/logs/CTdebugfile.${CT_PID}
  638. # bundled results file
  639. CT_TAR_FILE="${OUTPUT_DIR}/Collection-${MACHINE_NAME}${PRODUCTSRUN}.tar"
  640. export CT_TAR_FILE
  641. # results file
  642. CT_RESULTS_FILE=$CT_TMP/logs/Collection-${MACHINE_NAME}.txt
  643. CT_ACTIONS_RESULTS_FILE=$CT_TMP/logs/Collection-Actions-${MACHINE_NAME}.txt
  644. $ECHO_DEBUG "\ndebug.function.setOutputFiles"
  645. }
  646. ################################################################################
  647. #
  648. # Prompt user for products to be searched the -p option was not passed
  649. # in on the command line.
  650. #
  651. getProducts() {
  652. # debug
  653. $ECHO_DEBUG "\ndebug.function.getProductList"
  654. if [ -z "$PRODLIST" ] ; then
  655. $ECHO "\nProduct Families to look for:"
  656. PRODFAMILYLIST=`ls -p ../resources/products/`
  657. #MENUINCLUDELIST="CPUQ,OAS,SOA,Tuxedo,WLS"
  658. for PRODUCT in `ls ../resources/products/`
  659. do
  660. case $PRODUCT in
  661. CPUQ|OAS|SOA|WLS|DB|EBS|FMW|FormsReports|OBI|Webcenter )
  662. $ECHO "${PRODUCT}"
  663. ;;
  664. esac
  665. #PROD=`grep "ORACLEPRODUCT" ../resources/products/${f} | cut -d'=' -f2`
  666. done
  667. $ECHO "all"
  668. PRODUCTSRUN=
  669. PRODLIST=
  670. ANSWER=
  671. INVALID_ANS=
  672. REMOTE_PROD_OPTS=""
  673. $ECHO "\nPlease choose an Oracle Product Family from the list above to search for..."
  674. while [ -z "${ANSWER}" ]
  675. do
  676. read PROD
  677. if [ "${PROD}" = "all" ] ; then
  678. PRODLIST=`ls ../resources/products/ | grep -v Tuxedo | grep -v FMWRUL`
  679. PRODUCTSRUN="_all"
  680. ANSWER="all"
  681. REMOTE_PROD_OPTS=",all"
  682. break
  683. elif [ "${INVALID_ANS}" != "true" ] ; then
  684. # Make sure we got a valid Product Family
  685. TMPPLIST="${PROD}"
  686. for CHOSENPROD in `$ECHO $TMPPLIST | tr ',' ' '`
  687. do
  688. $ECHO "$PRODFAMILYLIST" | grep "$CHOSENPROD/" > /dev/null 2>&1
  689. if [ $? -ne 0 ] ; then
  690. echo_log "CT: CT-00010: ERROR: $CHOSENPROD is not a valid product family." $CT_ERRORS
  691. continue
  692. fi
  693. PRODUCTSRUN="${PRODUCTSRUN}_${CHOSENPROD}"
  694. PRODLIST="$PRODLIST $CHOSENPROD"
  695. REMOTE_PROD_OPTS="${REMOTE_PROD_OPTS},${PROD}"
  696. done
  697. $ECHO "Would you like to add another Product? "
  698. else
  699. $ECHO "Invalid answer, please use (y/n). Would you like to add another Product?"
  700. fi
  701. $ECHO "[y/n]: \c" >&2
  702. read ANSWER
  703. #
  704. # Act according to the user's response.
  705. #
  706. case "${ANSWER}" in
  707. Y|y) ANSWER=y
  708. INVALID_ANS=
  709. ;;
  710. N|n)
  711. break # break out of the loop
  712. ;;
  713. #
  714. # An invalid choice was entered, reprompt.
  715. #
  716. *) ANSWER=
  717. INVALID_ANS="true"
  718. ;;
  719. esac
  720. ANSWER=
  721. if [ "${INVALID_ANS}" != "true" ] ; then
  722. $ECHO "Product Families chosen so far: $PRODLIST"
  723. fi
  724. done
  725. fi
  726. }
  727. ##########################################################################################
  728. #
  729. # parse INCLUDPRODUCT tag
  730. #
  731. parseIncldueProducts() {
  732. $ECHO_DEBUG "Running grep INCLUDEPRODUCT ../resources/products/$1"
  733. for INCLUDETAG in `grep INCLUDEPRODUCT ../resources/products/${1}`
  734. do
  735. $ECHO_DEBUG "Processing INCLUDETAG ${INCLUDETAG}"
  736. PRODFILE=`$ECHO ${INCLUDETAG} | cut -d'=' -f2`
  737. case $ALLPRODLIST in
  738. "${PRODFILE}"* )
  739. $ECHO_DEBUG "File ${PRODFILE} already added to ALLPRODLIST"
  740. ;;
  741. *"${PRODFILE}" )
  742. $ECHO_DEBUG "File ${PRODFILE} already added to ALLPRODLIST"
  743. ;;
  744. *"${PRODFILE}"* )
  745. $ECHO_DEBUG "File ${PRODFILE} already added to ALLPRODLIST"
  746. ;;
  747. * )
  748. ALLPRODLIST="${ALLPRODLIST} ${PRODFILE}"
  749. ;;
  750. esac
  751. for INCLUDETAGS in `grep INCLUDEPRODUCT ../resources/products/${PRODFILE}`
  752. do
  753. parseIncldueProducts ${PRODFILE}
  754. done
  755. done
  756. }
  757. ##########################################################################################
  758. #
  759. # parse SEARCHFILE tag and set search files and the action used to identify Oracle product
  760. # for installations
  761. #
  762. # parse ORACLEPROCESS tag and create a list of process names used to identify Oracle products
  763. #
  764. parseProductFiles() {
  765. # debug
  766. $ECHO_DEBUG "\ndebug.function.parseProductFiles"
  767. ALLSEARCHFILES=""
  768. PRODUCTLIST=
  769. RUNLIST=
  770. CMDOUTFILELIST=
  771. COMPLETEPRODLIST=
  772. RUNCPUQ=
  773. # PRODLIST gets set in getProducts()
  774. # Loop through each directory in PRODLIST and generate a
  775. # list(PRODUCTLIST) of individual Products and specific versions
  776. # Getting a complete list of product product files will be done in 2 passes
  777. # the first pass will look for INCLUDEPRODUCT and PREREQUESTIEPRODUCT tags in the
  778. # user selected product list
  779. ALLPRODLIST=
  780. for PRODFAMILY in $PRODLIST
  781. do
  782. for RESOURCEFILE in `ls ../resources/products/${PRODFAMILY}`
  783. do
  784. $ECHO_DEBUG "Checking RESOURCEFILE ${RESOURCEFILE} for Oracle Product components."
  785. # make sure ALLPRODLIST is unique
  786. case $ALLPRODLIST in
  787. "${RESOURCEFILE}"* )
  788. $ECHO_DEBUG "File ${RESOURCEFILE} already added to ALLPRODLIST"
  789. ;;
  790. *"${RESOURCEFILE}" )
  791. $ECHO_DEBUG "File ${RESOURCEFILE} already added to ALLPRODLIST"
  792. ;;
  793. *"${RESOURCEFILE}"* )
  794. $ECHO_DEBUG "File ${RESOURCEFILE} already added to ALLPRODLIST"
  795. ;;
  796. * )
  797. # Add in the the current file we're look at
  798. if [ -z "$ALLPRODLIST" ] ; then
  799. ALLPRODLIST="$PRODFAMILY/$RESOURCEFILE"
  800. else
  801. $ECHO $ALLPRODLIST | grep "$PRODFAMILY/$RESOURCEFILE"
  802. if [ $? -eq 0 ] ; then
  803. # we already got this file in the list so break
  804. # and get the next file
  805. break
  806. fi
  807. ALLPRODLIST="${ALLPRODLIST} $PRODFAMILY/$RESOURCEFILE"
  808. fi
  809. parseIncldueProducts $PRODFAMILY/$RESOURCEFILE
  810. ;;
  811. esac
  812. done
  813. done
  814. # Second Pass through a complete set of Product files to get SEARCHFILE, ORACLEPROCESS ...
  815. for RESOURCEFILE in $ALLPRODLIST
  816. do
  817. $ECHO_DEBUG "Checking RESOURCEFILE ${RESOURCEFILE} for Oracle Product components."
  818. $ECHO_DEBUG "Running command grep ORACLEPRODUCT ../resources/products/${RESOURCEFILE} | cut -d = -f2 "
  819. PRODUCT=`grep "ORACLEPRODUCT" ../resources/products/${RESOURCEFILE} | cut -d '=' -f2`
  820. # Check if we already got this product accounted from INCLUDEPRODUCT or PREREQUESITEPRODUCT tags
  821. # if PRODUCTLIST is not set then just add the product to the list
  822. if [ -z "$PRODUCTLIST" ] ; then
  823. PRODUCTLIST=$PRODUCT
  824. else
  825. $ECHO $PRODUCTLIST | grep "$PRODUCT"
  826. if [ $? -eq 0 ] ; then
  827. break
  828. fi
  829. PRODUCTLIST="$PRODUCTLIST $PRODUCT"
  830. fi
  831. for SEARCHNAME in `grep SEARCHFILE ../resources/products/${RESOURCEFILE}`
  832. do
  833. # check and see if grep succeeeded
  834. if [ $? -eq 0 ]
  835. then
  836. FILENAME=`$ECHO ${SEARCHNAME} | cut -d'=' -f2 | cut -d '|' -f1`
  837. # make sure filenames are unique
  838. case $ALLSEARCHFILES in
  839. "name ${FILENAME}"* )
  840. $ECHO_DEBUG "File ${FILENAME} already added to ALLSEARCHFILES"
  841. ;;
  842. *"name ${FILENAME}" )
  843. $ECHO_DEBUG "File ${FILENAME} already added to ALLSEARCHFILES"
  844. ;;
  845. *"name ${FILENAME}"* )
  846. $ECHO_DEBUG "File ${FILENAME} already added to ALLSEARCHFILES"
  847. ;;
  848. * )
  849. FINDARG="-name"
  850. if [ "$ALLSEARCHFILES" = "" ]
  851. then
  852. ALLSEARCHFILES="${FINDARG} ${FILENAME}"
  853. else
  854. ALLSEARCHFILES="${ALLSEARCHFILES} -o ${FINDARG} ${FILENAME}"
  855. fi
  856. #
  857. # NOTE: if you add a file to the search list please add the appropriate
  858. # FILE_ACTION in the fileProcess call subroutine
  859. #
  860. FILEACTION=`$ECHO ${SEARCHNAME} | cut -d'|' -f2`
  861. case $FILEACTION in
  862. BUNDLE ) BUNDLEFILES="$BUNDLEFILES ${FILENAME}" ;;
  863. TIMESTAMP ) TSFILES="$TSFILES ${FILENAME}" ;;
  864. TAIL ) TAILFILES="$TAILFILES ${FILENAME}" ;;
  865. LISTING ) LISTINGFILES="$LISTINGFILES ${FILENAME}" ;;
  866. COPY ) COPYFILES="$COPYFILES ${FILENAME}" ;;
  867. LOG ) LOGFILES="$LOGFILES ${FILENAME}" ;;
  868. COLLECTRMDATA ) COLLECT_RM_DATA_FILES="$COLLECT_RM_DATA_FILES ${FILENAME}" ;;
  869. esac
  870. ;;
  871. esac
  872. fi
  873. $ECHO_DEBUG "Processing SEARCHNAME ${SEARCHNAME}"
  874. done
  875. for PROCESSTAG in `grep -i ORACLEPROCESS ../resources/products/${RESOURCEFILE}`
  876. do
  877. if [ $? -eq 0 ]
  878. then
  879. PROCNAME=`$ECHO ${PROCESSTAG} | cut -d'=' -f2`
  880. # make sure run command is unique
  881. case $PROCESSLIST in
  882. *"${PROCNAME}" )
  883. $ECHO_DEBUG "${PROCNAME} already added to PROCESSLIST"
  884. ;;
  885. "${PROCNAME}"* )
  886. $ECHO_DEBUG "${PROCNAME} already added to PROCESSLIST"
  887. ;;
  888. *"${PROCNAME}"* )
  889. $ECHO_DEBUG "${PROCNAME} already added to PROCESSLIST"
  890. ;;
  891. *)
  892. PROCESSLIST="${PROCESSLIST} ${PROCNAME}"
  893. ;;
  894. esac
  895. fi
  896. $ECHO_DEBUG "Processing PROCESSTAG ${PROCESSTAG}"
  897. done
  898. for CMDNAMETAG in `grep RUNCMD ../resources/products/${RESOURCEFILE}`
  899. do
  900. if [ $? -eq 0 ]
  901. then
  902. CMDNAME=`$ECHO ${CMDNAMETAG} | cut -d "=" -f2 -`
  903. CMDNAME_NODOTS=`$ECHO ${CMDNAME} | cut -c11-`
  904. # make sure run command is unique
  905. case $RUNLIST in
  906. "${CMDNAME}"* )
  907. $ECHO_DEBUG "Command ${CMDNAME} already added to RUNLIST"
  908. ;;
  909. *"${CMDNAME}" )
  910. $ECHO_DEBUG "Command ${CMDNAME} already added to RUNLIST"
  911. ;;
  912. *"${CMDNAME}"* )
  913. $ECHO_DEBUG "Command ${CMDNAME} already added to RUNLIST"
  914. ;;
  915. *"${CMDNAME_NODOTS}"* )
  916. $ECHO_DEBUG "Command ${CMDNAME} already added to RUNLIST"
  917. ;;
  918. * )
  919. $ECHO_DEBUG "${CMDNAME}!=${RUNLIST} so adding it."
  920. #
  921. # Some of the product files use relative paths, so let's convert those
  922. # to absolute paths in order to be sure of the scripts we are running.
  923. #
  924. CURRENT_DIR=`pwd -P`
  925. if [ ! -d `dirname ${CMDNAME}` ] ; then
  926. mkdir -p `dirname ${CMDNAME}`
  927. fi
  928. cd `dirname ${CMDNAME}` > /dev/null
  929. SCRIPTPATH=`pwd -P`
  930. cd $CURRENT_DIR > /dev/null
  931. SCRIPTNAME=`basename ${CMDNAME}`
  932. CMDNAME="${SCRIPTPATH}/${SCRIPTNAME}"
  933. # Run CPUQ before machine info section and rmdata after
  934. case $CMDNAME in
  935. *"cpuq_main"*)
  936. RUNCPUQ="${CMDNAME}:";;
  937. *"rmdata"*)
  938. RUNRMDATA="${CMDNAME}:";;
  939. esac
  940. if [ -z "$RUNLIST" ] ; then
  941. RUNLIST="${CMDNAME}:"
  942. else
  943. RUNLIST="${RUNLIST}${CMDNAME}:"
  944. fi
  945. ;;
  946. esac
  947. fi
  948. $ECHO_DEBUG "Processing CMDNAMETAG ${CMDNAMETAG}"
  949. done
  950. for CMDOUTFILETAG in `grep CMDOUTFILE ../resources/products/${RESOURCEFILE}`
  951. do
  952. if [ $? -eq 0 ]
  953. then
  954. CUTFILE=`$ECHO ${CMDOUTFILETAG} | cut -d'=' -f2 | cut -d '|' -f1`
  955. FILENAME=`eval echo $CUTFILE`
  956. FILENAME_NODOTS=`$ECHO ${FILENAME} | cut -c12-`
  957. # make sure command outfile command is unique
  958. case $CMDOUTFILELIST in
  959. *"${FILENAME}" )
  960. $ECHO_DEBUG "Filename ${FILENAME} already added to CMDOUTFILELIST"
  961. ;;
  962. "${FILENAME}"* )
  963. $ECHO_DEBUG "Filename ${FILENAME} already added to CMDOUTFILELIST"
  964. ;;
  965. *"${FILENAME}"* )
  966. $ECHO_DEBUG "Filename ${FILENAME} already added to CMDOUTFILELIST"
  967. ;;
  968. *"${FILENAME_NODOTS}")
  969. $ECHO_DEBUG "Command ${CMDNAME} already added to RUNLIST"
  970. ;;
  971. * )
  972. #
  973. # Some of the product files use relative paths, so let's convert those
  974. # to absolute paths in order to be sure of the scripts we are running.
  975. #
  976. CURRENT_DIR=`pwd -P`
  977. if [ ! -d `dirname ${FILENAME}` ] ; then
  978. mkdir -p `dirname ${FILENAME}`
  979. fi
  980. cd `dirname ${FILENAME}` > /dev/null
  981. SCRIPTPATH=`pwd -P`
  982. cd $CURRENT_DIR > /dev/null
  983. SCRIPTNAME=`basename ${FILENAME}`
  984. FILENAME="${SCRIPTPATH}/${SCRIPTNAME}"
  985. CMDOUTFILELIST="$CMDOUTFILELIST ${FILENAME}"
  986. #
  987. # NOTE: if you add a file to the search list please add the appropriate
  988. # FILE_ACTION
  989. # Currently only supporting BUNDLE and TIMESTAMP for
  990. # our command file outputs
  991. FILEACTION=`$ECHO ${CMDOUTFILETAG} | cut -d'|' -f2`
  992. case $FILEACTION in
  993. BUNDLE ) BUNDLEFILES="$BUNDLEFILES ${FILENAME}" ;;
  994. TIMESTAMP ) TSFILES="$TSFILES ${FILENAME}" ;;
  995. esac
  996. ;;
  997. esac
  998. fi
  999. $ECHO_DEBUG "Processing CMDOUTFILETAG ${CMDOUTFILETAG}"
  1000. done
  1001. for ENVVARSTAG in `grep ENVVARS ../resources/products/${RESOURCEFILE}`
  1002. do
  1003. if [ $? -eq 0 ]
  1004. then
  1005. CUTENV=`$ECHO ${ENVVARSTAG} | cut -d'=' -f2`
  1006. # make sure env var is unique
  1007. case $ENVVARSLIST in
  1008. *"${CUTENV}" )
  1009. $ECHO_DEBUG "Env Var ${CUTENV} already added to ENVVARSLIST"
  1010. ;;
  1011. "${CUTENV}"* )
  1012. $ECHO_DEBUG "Env Var ${CUTENV} already added to ENVVARSLIST"
  1013. ;;
  1014. *"${CUTENV}"* )
  1015. $ECHO_DEBUG "Env Var ${CUTENV} already added to ENVVARSLIST"
  1016. ;;
  1017. * )
  1018. ENVVARSLIST="$ENVVARSLIST ${CUTENV}"
  1019. esac
  1020. fi
  1021. $ECHO_DEBUG "Processing ENVVARSTAG ${ENVVARSTAG}"
  1022. done
  1023. for PROCARGSTAG in `grep PROCARGS ../resources/products/${RESOURCEFILE}`
  1024. do
  1025. if [ $? -eq 0 ]
  1026. then
  1027. CUTPROCS=`$ECHO ${PROCARGSTAG} | cut -d'=' -f2`
  1028. # make sure proc arg is unique
  1029. case $PROCARGSLIST in
  1030. *"${CUTPROCS}" )
  1031. $ECHO_DEBUG "Process Argument ${CUTPROCS} already added to PROCARGSLIST"
  1032. ;;
  1033. "${CUTPROCS}"* )
  1034. $ECHO_DEBUG "Process Argument ${CUTPROCS} already added to PROCARGSLIST"
  1035. ;;
  1036. *"${CUTPROCS}"* )
  1037. $ECHO_DEBUG "Process Argument ${CUTPROCS} already added to PROCARGSLIST"
  1038. ;;
  1039. * )
  1040. PROCARGSLIST="$PROCARGSLIST ${CUTPROCS}"
  1041. esac
  1042. fi
  1043. $ECHO_DEBUG "Processing PROCARGSTAG ${PROCARGSTAG}"
  1044. done
  1045. done
  1046. $ECHO "\nProduct Name discovery list: $PRODUCTLIST\n" >> $CT_ACTIONS_RESULTS_FILE
  1047. $ECHO "All Product files used: $ALLPRODLIST\n" >> $CT_ACTIONS_RESULTS_FILE
  1048. $ECHO "Files to be bundled: $BUNDLEFILES\n" >> $CT_ACTIONS_RESULTS_FILE
  1049. $ECHO "Files to be collected and sensitive data removed: $COLLECT_RM_DATA_FILES\n" >> $CT_ACTIONS_RESULTS_FILE
  1050. $ECHO "Search files: $ALLSEARCHFILES\n" >> $CT_ACTIONS_RESULTS_FILE
  1051. $ECHO "Oracle processes: $PROCESSLIST\n" >> $CT_ACTIONS_RESULTS_FILE
  1052. $ECHO "Commands to be run: $RUNLIST\n" >> $CT_ACTIONS_RESULTS_FILE
  1053. $ECHO "Command Output Files: $CMDOUTFILELIST\n" >> $CT_ACTIONS_RESULTS_FILE
  1054. $ECHO "Environment Variables: $ENVVARSLIST\n" >> $CT_ACTIONS_RESULTS_FILE
  1055. $ECHO "Process arguments: $PROCARGSLIST\n" >> $CT_ACTIONS_RESULTS_FILE
  1056. }
  1057. ################################################################################
  1058. #
  1059. # setup search options: directory and product and if there is no
  1060. # command line arguments, set defaults
  1061. #
  1062. setSearchOptions() {
  1063. # debug
  1064. $ECHO_DEBUG "\ndebug.function.setSearchOptions"
  1065. # default search options
  1066. SEARCH_EXCLUSIONS=
  1067. SEARCH_OPTIONS=
  1068. SEARCH_LOG_FILES=
  1069. FS_EXCLUDE_NFS="-fstype nfs"
  1070. PRUNE="-prune"
  1071. PRINT="-print"
  1072. FOLLOW="-follow"
  1073. # exclude nfs search if requested
  1074. if [ "$SEARCH_NFS" = "true" ] ; then
  1075. FS_EXCLUDE_NFS=
  1076. else
  1077. if [ "$OS_NAME" = "SunOS" ] ; then
  1078. FS_EXCLUDE_NFS="! -local"
  1079. fi
  1080. fi
  1081. # exclude follow if requested
  1082. if [ "$FOLLOW_LINKS" = "false" ] ; then
  1083. FOLLOW=
  1084. fi
  1085. #
  1086. # setup os based search exclusions variable SEARCH_EXCLUSIONS
  1087. #
  1088. if [ "$OS_NAME" = "Linux" ] ; then
  1089. FS_EXCLUDES="-fstype proc -o -fstype sysfs"
  1090. elif [ "$OS_NAME" = "SunOS" ] ; then
  1091. FS_EXCLUDES="-fstype proc -o -fstype fd"
  1092. elif [ "$OS_NAME" = "HP-UX" ] ; then
  1093. FS_EXCLUDES=
  1094. elif [ "$OS_NAME" = "AIX" ] ; then
  1095. FS_EXCLUDES=
  1096. fi
  1097. if [ -n "$FS_EXCLUDE_NFS" ] ; then
  1098. if [ -n "$FS_EXCLUDES" ] ; then
  1099. SEARCH_EXCLUSIONS="$FS_EXCLUDE_NFS -o $FS_EXCLUDES"
  1100. else
  1101. SEARCH_EXCLUSIONS="$FS_EXCLUDE_NFS"
  1102. fi
  1103. else
  1104. if [ -n "$FS_EXCLUDES" ] ; then
  1105. SEARCH_EXCLUSIONS="$FS_EXCLUDES"
  1106. fi
  1107. fi
  1108. #
  1109. # setup os based search options variable SEARCH_OPTIONS
  1110. #
  1111. if [ "$OS_NAME" = "Linux" ] ; then
  1112. SEARCH_OPTIONS="$FOLLOW $PRINT"
  1113. elif [ "$OS_NAME" = "SunOS" ] ; then
  1114. SEARCH_OPTIONS="$FOLLOW $PRINT"
  1115. elif [ "$OS_NAME" = "HP-UX" ] ; then
  1116. SEARCH_OPTIONS="$FOLLOW $PRINT"
  1117. elif [ "$OS_NAME" = "AIX" ] ; then
  1118. #exclude follow option, since it is not supported on all AIX versions
  1119. SEARCH_OPTIONS="$PRINT"
  1120. fi
  1121. #
  1122. # setup fast search directories if FASTSEARCH=true
  1123. #
  1124. if [ "$FASTSEARCH" = "true" ] ; then
  1125. SEARCH_DIR=
  1126. while read LINE
  1127. do
  1128. SEARCH_DIR="${SEARCH_DIR} ${LINE}"
  1129. done < $CT_HOMES_FILE
  1130. fi
  1131. }
  1132. ################################################################################
  1133. #
  1134. # set default search directories using running oracle process and
  1135. # any bea/beahomeslist files found in USER HOMES directories.
  1136. #
  1137. getDefaultOracleEnv() {
  1138. # debug
  1139. $ECHO_DEBUG "\ndebug.function.getDefaultOracleEnv"
  1140. # check running processes for java command line get info from printMachineInfo run
  1141. CTAWK=awk
  1142. if [ "$OS_NAME" = "SunOS" ] ; then
  1143. CTAWK=nawk
  1144. fi
  1145. for JAVAPROCESSLINE_TOKENS in `grep java ${CT_MACHINFO_FILE} | $CTAWK -F":| " -v OFS="\n" '$1=$1' `
  1146. do
  1147. case "$JAVAPROCESSLINE_TOKENS" in
  1148. *weblogic.jar*)
  1149. echo $JAVAPROCESSLINE_TOKENS | awk -F'/' '{for (i=1; i<NF-3; i++) printf("%s/", $i)}' >> $CT_HOMES_FILE
  1150. ;;
  1151. *.home=*)
  1152. echo $JAVAPROCESSLINE_TOKENS | sed -e 's/.*.home=\(\S*\).*/\1/g' >> $CT_HOMES_FILE
  1153. ;;
  1154. *_HOME=*)
  1155. echo $JAVAPROCESSLINE_TOKENS | sed -e 's/.*._HOME=\(\S*\).*/\1/g' >> $CT_HOMES_FILE
  1156. ;;
  1157. esac
  1158. done
  1159. $ECHO_DEBUG "\ndebug.getDefaultOracleEnv.JAVAPROCESSLINE_TOKENS=${JAVAPROCESSLINE_TOKENS}"
  1160. # check environment variables for specified directories
  1161. #Get java pids
  1162. JAVAPIDS=`grep java ${CT_MACHINFO_FILE} | awk '{print $5}'`
  1163. $ECHO_DEBUG "\ndebug.getDefaultOracleEnv.JAVAPIDS=$JAVAPIDS"
  1164. # Normalize ENVVARSLIST for grep.
  1165. ENVGREPLIST=`echo $ENVVARSLIST | sed -e 's/ /\\\|/g'`
  1166. $ECHO_DEBUG "\ndebug.getDefaultOracleEnv.ENVVARSLIST=$ENVVARSLIST"
  1167. for PID in $JAVAPIDS
  1168. do
  1169. case $PID in
  1170. *[!0-9]*|'')
  1171. ;; # not a number
  1172. *)
  1173. if [ "$OS_NAME" = "SunOS" ] ; then
  1174. pargs -e $PID | grep $ENVGREPLIST >> $CT_HOMES_FILE
  1175. elif [ "$OS_NAME" = "AIX" ] ; then
  1176. ps eauwww $PID | grep $ENVGREPLIST >> $CT_HOMES_FILE
  1177. elif [ "$OS_NAME" = "Linux" ] ; then
  1178. strings /proc/${PID}/environ | grep $ENVGREPLIST >> $CT_HOMES_FILE
  1179. fi
  1180. ;;
  1181. esac
  1182. done
  1183. # check user homes for bea/beahomeslist
  1184. # need to research way to check NIS dirs
  1185. LOCALHOMES=`awk -F":" '{ print $6 }' /etc/passwd | sort | uniq`
  1186. for USERHOME in $LOCALHOMES
  1187. do
  1188. if [ -f ${USERHOME}/bea/beahomelist ] ; then
  1189. cat ${USERHOME}/bea/beahomelist | tr ';' '\n' >> $CT_HOMES_FILE
  1190. echo '
  1191. ' >> $CT_HOMES_FILE
  1192. fi
  1193. done
  1194. # Pair down CT_HOMES_FILE
  1195. if [ -f $CT_HOMES_FILE ] ; then
  1196. sed 's/user_projects*/ /g' $CT_HOMES_FILE > $CT_HOMES_FILE.tmp && mv $CT_HOMES_FILE.tmp $CT_HOMES_FILE
  1197. sed 's/wlserver*/ /g' $CT_HOMES_FILE > $CT_HOMES_FILE.tmp && mv $CT_HOMES_FILE.tmp $CT_HOMES_FILE
  1198. cat $CT_HOMES_FILE | sed -e 's/.*.weblogic\.jar\(\S*\).*/\1/g' -e 's/.*.home=\(\S*\).*/\1/g' -e 's/.*._HOME=\(\S*\).*/\1/g' | uniq > $CT_HOMES_FILE.tmp
  1199. mv $CT_HOMES_FILE.tmp $CT_HOMES_FILE
  1200. fi
  1201. }
  1202. ################################################################################
  1203. #
  1204. # spinner to show process is running
  1205. #
  1206. spinner() {
  1207. #Determine if running in background or not for spinner display
  1208. pid=$! # Process Id of the previous running command
  1209. case $RUNNING_STATUS in
  1210. *\+*)
  1211. #Running in foreground; use spinner
  1212. while kill -0 $pid 2>/dev/null
  1213. do
  1214. for s in / - \\ \|; do
  1215. printf "\r$s"
  1216. sleep 1
  1217. done
  1218. done
  1219. ;;
  1220. *)
  1221. while kill -0 $pid 2>/dev/null
  1222. do
  1223. sleep 1
  1224. done
  1225. ;;
  1226. esac
  1227. }
  1228. ################################################################################
  1229. #
  1230. # function to search desired files
  1231. #
  1232. doSearch() {
  1233. # debug
  1234. $ECHO_DEBUG "\ndebug.function.doSearch"
  1235. # echo search criteria - debug
  1236. $ECHO_DEBUG "\ndebug.search.directory=${SEARCH_DIR}"
  1237. $ECHO_DEBUG "\ndebug.search.options.exclusions=$SEARCH_EXCLUSIONS"
  1238. $ECHO_DEBUG "\ndebug.search.files=$ALLSEARCHFILES"
  1239. $ECHO_DEBUG "\ndebug.search.options=$SEARCH_OPTIONS"
  1240. # if no exclusions are defined then eliminate from find call
  1241. if [ -n "$SEARCH_EXCLUSIONS" ] ; then
  1242. SEARCH_COMMAND="find ${SEARCH_DIR} \( ${SEARCH_EXCLUSIONS} \) ${PRUNE} -o \( ${ALLSEARCHFILES} \) ${SEARCH_OPTIONS} >> ${CT_FILES} 2>>$UNIXCMDERR"
  1243. $ECHO_DEBUG "debug.search.command=$SEARCH_COMMAND"
  1244. find ${SEARCH_DIR} \( ${SEARCH_EXCLUSIONS} \) ${PRUNE} -o \( ${ALLSEARCHFILES} \) ${SEARCH_OPTIONS} >> ${CT_FILES} 2>>$UNIXCMDERR &
  1245. spinner
  1246. else
  1247. SEARCH_COMMAND="find ${SEARCH_DIR} \( $ALLSEARCHFILES \) $SEARCH_OPTIONS"
  1248. $ECHO_DEBUG "debug.search.command=$SEARCH_COMMAND"
  1249. find ${SEARCH_DIR} \( ${ALLSEARCHFILES} \) ${SEARCH_OPTIONS} >> ${CT_FILES} 2>>$UNIXCMDERR &
  1250. spinner
  1251. fi
  1252. }
  1253. ################################################################################
  1254. #
  1255. # function to execute desired shell script or command
  1256. #
  1257. doRunCmd() {
  1258. CMDLIST=$1
  1259. FLDNUM=1
  1260. while true
  1261. do
  1262. CMDLINE=`$ECHO $CMDLIST | cut -d ':' -f${FLDNUM}`
  1263. # No more commands to execute
  1264. if [ "$CMDLINE" = "" ] ; then
  1265. break
  1266. fi
  1267. CMD=`$ECHO $CMDLINE | cut -d '|' -f1`
  1268. CMDTYPE=`$ECHO $CMDLINE | cut -d '|' -f2`
  1269. if [ "$CMDTYPE" = "SCRIPT" ] ; then
  1270. #Add .sh extension for Unix/Linux on Windows we'll add .cmd
  1271. CMD="$CMD.sh"
  1272. fi
  1273. if [ "$CMD" = ".sh" ] ; then
  1274. # Only found the .sh extension
  1275. break
  1276. fi
  1277. # check if the script or command exists
  1278. if [ -f "$CMD" ]; then
  1279. # Make sure the script is executable
  1280. $ECHO "\nTesting script availability and executability\n"
  1281. if [ ! -x $CMD ] ; then
  1282. chmod +x $CMD
  1283. $ECHO "\nchmod +x on $CMD script\n"
  1284. if [ ! -x $CMD ]; then
  1285. echo_log "CT: CT-00019: ERROR: The script, $CMD, is not executable, and the current user is unable to change permissions.\nPlease change persmisions on $CMD to be executable and re-run the script.\n" $CT_ERRORS
  1286. FLDNUM=`expr ${FLDNUM} + 1`
  1287. continue
  1288. fi
  1289. fi
  1290. case $CMD in
  1291. *cpuq_main.sh)
  1292. if [ "$RANCPUQ" = "false" ] ; then
  1293. $ECHO "Executing $CMD\n"
  1294. eval $CMD >/dev/null 2>&1
  1295. fi
  1296. ;;
  1297. *rmdata.sh)
  1298. if [ "$OKTORUNRMDATA" = "true" ] ; then
  1299. $ECHO "Executing $CMD\n"
  1300. eval $CMD >/dev/null 2>&1
  1301. fi
  1302. ;;
  1303. *)
  1304. $ECHO "Executing $CMD\n"
  1305. eval $CMD
  1306. ;;
  1307. esac
  1308. else
  1309. # it must be a Unix/Linux command or pipeline of commands
  1310. $ECHO "Executing $CMD\n"
  1311. case $CMD in
  1312. *cpuq_main.sh)
  1313. if [ "$RANCPUQ" = "false" ] ; then
  1314. $ECHO "Executing $CMD\n"
  1315. eval $CMD >/dev/null 2>&1
  1316. fi
  1317. ;;
  1318. *rmdata.sh)
  1319. if [ "$OKTORUNRMDATA" = "true" ] ; then
  1320. $ECHO "Executing $CMD\n"
  1321. eval $CMD >/dev/null 2>&1
  1322. fi
  1323. ;;
  1324. *)
  1325. $ECHO "Executing $CMD\n"
  1326. eval $CMD "$@"
  1327. ;;
  1328. esac
  1329. if [ $? -ne 0 ] ; then
  1330. echo_log "$CMD failed to execute error $?\n" $UNIXCMDERR
  1331. if [ -f "$CMD" ] ; then
  1332. # it could be a missing shell script
  1333. echo_log "Shell Script $CMD not found.\nPlease copy all files from distribution into the correct directories.\n" $UNIXCMDERR
  1334. else
  1335. # Unknown error
  1336. echo_log "$CMD Unknown error" $UNIXCMDERR
  1337. fi
  1338. fi
  1339. fi
  1340. FLDNUM=`expr ${FLDNUM} + 1`
  1341. $ECHO "\n$CMD ran without errors." >> $CT_ACTIONS_RESULTS_FILE
  1342. done
  1343. }
  1344. ################################################################################
  1345. #
  1346. # function to change the sort files and avoid duplication
  1347. #
  1348. fileSort() {
  1349. # debug
  1350. $ECHO_DEBUG "\ndebug.function.fileSort"
  1351. CT_SORTED_FILES_TMP=$CT_SORTED_FILES.tmp
  1352. NUMSORTFILE=0
  1353. # test to see if grep -v is on system
  1354. grep -v -f ../resources/util/file_sort_list_unix.txt ../resources/util/file_sort_list_unix.txt >/dev/null 2>&1
  1355. if [ $? -eq 0 ] ; then
  1356. grep -v -f ../resources/util/file_sort_list_unix.txt $CT_FILES > $CT_SORTED_FILES_TMP
  1357. else
  1358. /usr/xpg4/bin/grep -v -f ../resources/util/file_sort_list_unix.txt ../resources/util/file_sort_list_unix.txt >/dev/null 2>&1
  1359. if [ $? -eq 0 ] ;
  1360. then
  1361. /usr/xpg4/bin/grep -v -f ../resources/util/file_sort_list_unix.txt $CT_FILES > $CT_SORTED_FILES_TMP
  1362. else
  1363. cp $CT_FILES $CT_SORTED_FILES_TMP
  1364. fi
  1365. fi
  1366. # find unique list of files
  1367. #sort -u $CT_SORTED_FILES_TMP > $CT_SORTED_FILES
  1368. cp $CT_SORTED_FILES_TMP $CT_SORTED_FILES
  1369. NUMSORTFILE="`wc -l < $CT_SORTED_FILES`"
  1370. rm $CT_SORTED_FILES_TMP
  1371. # debug
  1372. $ECHO_DEBUG "\ndebug.sorted.file.number=$NUMSORTFILE"
  1373. $ECHO "Sorted Files=$NUMSORTFILE" >> $CT_RESULTS_FILE
  1374. }
  1375. ################################################################################
  1376. #
  1377. # function to add any command or script generated output files to the
  1378. # list of files we need information for
  1379. #
  1380. addOutputFiles() {
  1381. # debug
  1382. $ECHO_DEBUG "\ndebug.function.addOutputFiles"
  1383. if [ "$CMDOUTFILELIST" != "" ] ; then
  1384. for F in `echo $CMDOUTFILELIST`
  1385. do
  1386. echo $F >> $1
  1387. done
  1388. fi
  1389. }
  1390. ################################################################################
  1391. #
  1392. # function to change the sort files and avoid duplication
  1393. #
  1394. fileGetCTFiles() {
  1395. CT_ONLY_FILES=$CT_TMP/logs/CTonlyfiles.txt
  1396. # debug
  1397. $ECHO_DEBUG "\ndebug.function.fileGetCTFiles"
  1398. NUMSORTFILE=0
  1399. if [ "$OS_NAME" = "Linux" ] ; then
  1400. OLD_IFS=$IFS
  1401. IFS='
  1402. '
  1403. fi
  1404. while read FULL_PATH_FILE_NAME
  1405. do
  1406. FILE_NAME=`basename "$FULL_PATH_FILE_NAME"`
  1407. if [ "$FILE_NAME" = "config.xml" ];
  1408. then
  1409. # Get rid of non-Weblogic config files
  1410. grep -i "</domain>" "$FULL_PATH_FILE_NAME" >/dev/null 2>&1
  1411. if [ $? -eq 0 ] ;
  1412. then
  1413. echo "$FULL_PATH_FILE_NAME" >> $CT_ONLY_FILES
  1414. fi
  1415. elif [ "$FILE_NAME" = "registry.xml" ];
  1416. then
  1417. # Get rid of non-Weblogic config files
  1418. grep "product-information" "$FULL_PATH_FILE_NAME" >/dev/null 2>&1
  1419. if [ $? -eq 0 ] ;
  1420. then
  1421. echo "$FULL_PATH_FILE_NAME" >> $CT_ONLY_FILES
  1422. fi
  1423. elif [ "$FILE_NAME" = "server.xml" ];
  1424. then
  1425. # Get rid of non-OAS server files
  1426. echo "$FULL_PATH_FILE_NAME" | grep j2ee >/dev/null 2>&1
  1427. if [ $? -eq 0 ] ;
  1428. then
  1429. echo "$FULL_PATH_FILE_NAME" >> $CT_ONLY_FILES
  1430. fi
  1431. elif [ "$FILE_NAME" = "app.yml" ];
  1432. then
  1433. # Get rid of non-WebCenter Mobility app.yml files
  1434. echo "$FULL_PATH_FILE_NAME" | grep "msadmin\|mobilityserver" >/dev/null 2>&1
  1435. if [ $? -eq 0 ] ;
  1436. then
  1437. echo "$FULL_PATH_FILE_NAME" >> $CT_ONLY_FILES
  1438. fi
  1439. elif [ "$FILE_NAME" = "config.cfg" ];
  1440. then
  1441. echo "$FULL_PATH_FILE_NAME" | grep "ucm" >/dev/null 2>&1
  1442. if [ $? -eq 0 ] ;
  1443. then
  1444. # check for only WebCenter UCM Config.cfg files.
  1445. echo "$FULL_PATH_FILE_NAME" >> $CT_ONLY_FILES
  1446. fi
  1447. elif [ -d "$FULL_PATH_FILE_NAME" ];
  1448. then
  1449. echo "$FULL_PATH_FILE_NAME" | grep "bin/output" >/dev/null 2>&1
  1450. if [ $? -eq 0 ] ;
  1451. then
  1452. # Get rid of just directories that are not in ./bin/output
  1453. echo "$FULL_PATH_FILE_NAME" >> $CT_ONLY_FILES
  1454. fi
  1455. else
  1456. # Not a config.xml,server.xml, registry.xml or directory so we don't
  1457. # need to check for WebLogic or Oracle
  1458. echo "$FULL_PATH_FILE_NAME" >> $CT_ONLY_FILES
  1459. fi
  1460. done < $CT_SORTED_FILES
  1461. if [ "$OS_NAME" = "Linux" ] ; then
  1462. IFS=$OLD_IFS
  1463. fi
  1464. cmp -s $CT_ONLY_FILES $CT_SORTED_FILES
  1465. if [ $? -ne 0 ] ; then
  1466. cp $CT_ONLY_FILES $CT_SORTED_FILES 2>>$UNIXCMDERR
  1467. fi
  1468. NUMSORTFILE="`wc -l < $CT_SORTED_FILES`" 2>>$UNIXCMDERR
  1469. rm -f $CT_ONLY_FILES
  1470. # debug
  1471. $ECHO "Sorted Oracle only Files=$NUMSORTFILE" >> $CT_RESULTS_FILE
  1472. }
  1473. ################################################################################
  1474. #
  1475. # function to remove non-WebLogic config.xml files
  1476. #
  1477. ################################################################################
  1478. #
  1479. # function to copy files to output
  1480. #
  1481. fileCopy() {
  1482. # debug
  1483. $ECHO_DEBUG "debug.function.fileCopy"
  1484. $ECHO_DEBUG "debug.processing.file$2.copy=$1"
  1485. # obtain timestamp for all copied files
  1486. fileTimestamp $1 $2
  1487. $ECHO "processing.file$2.copy.data=" >> $CT_RESULTS_FILE
  1488. $ECHO "[COPY_$TAG_BEGIN]" >> $CT_RESULTS_FILE
  1489. # post command to results file
  1490. cat $1 >> $CT_RESULTS_FILE 2>>$UNIXCMDERR
  1491. $ECHO "\n[COPY_$TAG_END]" >> $CT_RESULTS_FILE
  1492. }
  1493. ################################################################################
  1494. #
  1495. # function to get a files tail to output
  1496. #
  1497. fileTail() {
  1498. # debug
  1499. $ECHO_DEBUG "debug.function.fileTail"
  1500. $ECHO_DEBUG "debug.processing.file$2.tail=$1"
  1501. $ECHO "Processing file:$1" >> $CT_LOGS_FILE
  1502. $ECHO "[TAIL_$TAG_BEGIN]" >> $CT_LOGS_FILE
  1503. if [ -s $1 ]; then
  1504. # post command to results file
  1505. $TAIL $1 >> $CT_LOGS_FILE 2>>$UNIXCMDERR
  1506. else
  1507. $ECHO "Log file is empty" >> $CT_LOGS_FILE 2>>$UNIXCMDERR
  1508. fi
  1509. $ECHO "\n[TAIL_$TAG_END]\n" >> $CT_LOGS_FILE
  1510. }
  1511. ################################################################################
  1512. #
  1513. # function to get a files timestamp to output
  1514. #
  1515. fileTimestamp() {
  1516. # debug
  1517. $ECHO_DEBUG "debug.function.fileTimestamp"
  1518. $ECHO_DEBUG "debug.processing.file$2.timestamp=$1"
  1519. $ECHO "processing.file$2.timestamp.data=" >> $CT_RESULTS_FILE
  1520. $ECHO "[TIMESTAMP_$TAG_BEGIN]" >> $CT_RESULTS_FILE
  1521. # post command to results file
  1522. ls -la $1 >> $CT_RESULTS_FILE 2>>$UNIXCMDERR
  1523. $ECHO "[TIMESTAMP_$TAG_END]" >> $CT_RESULTS_FILE
  1524. }
  1525. ################################################################################
  1526. #
  1527. # function to get a files directory listing to output
  1528. #
  1529. fileListing() {
  1530. # debug
  1531. $ECHO_DEBUG "debug.function.fileListing"
  1532. $ECHO_DEBUG "debug.processing.file$2.listing=$1"
  1533. DIR_NAME=`dirname $1` 2>>$UNIXCMDERR
  1534. $ECHO "processing.file$2.listing.data=" >> $CT_RESULTS_FILE
  1535. $ECHO "[LISTING_$TAG_BEGIN]" >> $CT_RESULTS_FILE
  1536. # post command to results file
  1537. ls -la $DIR_NAME >> $CT_RESULTS_FILE 2>>$UNIXCMDERR
  1538. $ECHO "[LISTING_$TAG_END]" >> $CT_RESULTS_FILE
  1539. }
  1540. ################################################################################
  1541. #
  1542. # function to copy files to output
  1543. #
  1544. bundleResults() {
  1545. # debug
  1546. $ECHO_DEBUG "debug.function.bundleResults"
  1547. chmod 700 $CT_TMP/FMW
  1548. if [ -f $CT_TAR_FILE_LIST ] ; then
  1549. pax -rw < $CT_TAR_FILE_LIST $CT_TMP/FMW/ 2>>$UNIXCMDERR
  1550. if [ $? -ne 0 ] ; then
  1551. while read -r file
  1552. do
  1553. tmpdirname=`dirname $file`
  1554. mkdir -p $CT_TMP/FMW/$tmpdirname
  1555. cp $file $CT_TMP/FMW/$tmpdirname/.
  1556. done < $CT_TAR_FILE_LIST
  1557. fi
  1558. fi
  1559. if [ -f $CT_RMDATA_FILE_LIST ] ; then
  1560. pax -rw < $CT_RMDATA_FILE_LIST $CT_TMP/FMW/ 2>>$UNIXCMDERR
  1561. if [ $? -ne 0 ] ; then
  1562. while read -r file
  1563. do
  1564. tmpdirname=`dirname $file`
  1565. mkdir -p $CT_TMP/FMW/$tmpdirname
  1566. cp $file $CT_TMP/FMW/$tmpdirname/.
  1567. done < $CT_RMDATA_FILE_LIST
  1568. fi
  1569. mv $CT_RMDATA_FILE_LIST $CT_RMDATA_FILE_LIST.bak
  1570. old_IFS=$IFS # save the field separator
  1571. IFS='
  1572. '
  1573. # new field separator, the end of line
  1574. for file in `cat $CT_RMDATA_FILE_LIST.bak`
  1575. do
  1576. echo "$CT_TMP/FMW$file" >> $CT_TMP/logs/CTRMDATACopiesfilelist.txt
  1577. done
  1578. IFS=$old_IFS # restore default field separator
  1579. fi
  1580. }
  1581. ################################################################################
  1582. #
  1583. # function to copy files in ./bin/output to output
  1584. #
  1585. bundleCTOutput() {
  1586. # debug
  1587. OUTPUT_UNIXCMDERRS=$CT_DEBUG/unixcmderrs.log
  1588. WORKINGDIR=`pwd`
  1589. cd $CT_TMP
  1590. for DIRS in * ; do
  1591. if [ "$DIRS" != "debug" ] ; then
  1592. if [ -d $DIRS ] ; then
  1593. EMPTYDIR=`ls -A $DIRS`
  1594. if [ "$EMPTYDIR" = "" ] ; then
  1595. rm -rf $DIRS
  1596. else
  1597. if [ -s $CT_TAR_FILE ] ; then
  1598. ACTION=u
  1599. else
  1600. # tar file does not exist so create it
  1601. ACTION=c
  1602. fi
  1603. tar ${ACTION}f $CT_TAR_FILE $DIRS 2>>$OUTPUT_UNIXCMDERRS
  1604. fi
  1605. fi
  1606. else
  1607. if [ "$COLLECT_CT_DEBUG" = "true" ] ; then
  1608. if [ -d $DIRS ] ; then
  1609. cd $DIRS
  1610. # check if compressed archive file exists, if so move older one.
  1611. if [ -f $CT_DEBUG_TAR_FILE.bz2 ] ; then
  1612. mv $CT_DEBUG_TAR_FILE.bz2 $CT_DEBUG_TAR_FILE.bz2.$TARTIMESTAMP
  1613. fi
  1614. if [ -f $CT_DEBUG_TAR_FILE.Z ] ; then
  1615. mv $CT_DEBUG_TAR_FILE.Z $CT_DEBUG_TAR_FILE.Z.$TARTIMESTAMP
  1616. fi
  1617. tar cf $CT_DEBUG_TAR_FILE * 2>>$OUTPUT_UNIXCMDERRS
  1618. bzip2 $CT_DEBUG_TAR_FILE 2>>$UNIXCMDERR
  1619. if [ ${?} -ne 0 ] ; then
  1620. compress $CT_DEBUG_TAR_FILE 2>>$UNIXCMDERR
  1621. if [ ${?} -ne 0 ] ; then
  1622. echo_log "CT: CT-00040: WARNING: Please note that for debugging purposes the following archive file was created in the output folder: $CT_DEBUG_TAR_FILE" $CT_WARNINGS
  1623. else
  1624. rm $CT_DEBUG_TAR_FILE
  1625. echo_log "CT: CT-00040: WARNING: Please note that for debugging purposes the following archive file was created in the output folder: $CT_DEBUG_TAR_FILE.Z" $CT_WARNINGS
  1626. fi
  1627. else
  1628. echo_log "CT: CT-00040: WARNING: Please note that for debugging purposes the following archive file was created in the output folder: $CT_DEBUG_TAR_FILE.bz2" $CT_WARNINGS
  1629. fi
  1630. cd ..
  1631. fi
  1632. fi
  1633. fi
  1634. done
  1635. cd $WORKINGDIR
  1636. }
  1637. ################################################################################
  1638. #
  1639. # function used to process file data to results file
  1640. #
  1641. fileAction() {
  1642. NUMPROCESSFILE=0
  1643. while read FILE_NAME
  1644. do
  1645. PROCESS_FILE_NAME="$FILE_NAME"
  1646. PRODUCT_FILE_BASENAME=`basename "$PROCESS_FILE_NAME"` 2>>$UNIXCMDERR
  1647. NUMPROCESSFILE=`expr ${NUMPROCESSFILE} + 1`
  1648. $ECHO "Processing file $NUMPROCESSFILE path="$PROCESS_FILE_NAME"" >> $CT_RESULTS_FILE
  1649. $ECHO "Processing file $NUMPROCESSFILE name=$PRODUCT_FILE_BASENAME" >> $CT_RESULTS_FILE
  1650. FILE_PROCESSED=
  1651. for BUNDLE_FILE in `$ECHO $BUNDLEFILES`
  1652. do
  1653. case $PRODUCT_FILE_BASENAME in
  1654. $BUNDLE_FILE) $ECHO "$FILE_NAME" >> $CT_TAR_FILE_LIST
  1655. $ECHO "Tar up $FILE_NAME" >> $CT_ACTIONS_RESULTS_FILE
  1656. FILE_PROCESSED=TRUE
  1657. break
  1658. ;;
  1659. esac
  1660. # Check for full path for our CMDOUTFILEs
  1661. case $FILE_NAME in
  1662. $BUNDLE_FILE) $ECHO "$FILE_NAME" >> $CT_TAR_FILE_LIST
  1663. $ECHO "Tar up $FILE_NAME" >> $CT_ACTIONS_RESULTS_FILE
  1664. FILE_PROCESSED=TRUE
  1665. break
  1666. ;;
  1667. esac
  1668. done
  1669. #performed the above action so get the next file
  1670. if [ "$FILE_PROCESSED" = "TRUE" ] ; then
  1671. continue
  1672. fi
  1673. for RMDATA_FILE in `$ECHO $COLLECT_RM_DATA_FILES`
  1674. do
  1675. case $PRODUCT_FILE_BASENAME in
  1676. $RMDATA_FILE) $ECHO "$FILE_NAME" >> $CT_RMDATA_FILE_LIST
  1677. $ECHO "Tar up $FILE_NAME and removed sensitve data." >> $CT_ACTIONS_RESULTS_FILE
  1678. FILE_PROCESSED=TRUE
  1679. break
  1680. ;;
  1681. esac
  1682. done
  1683. #performed the above action so get the next file
  1684. if [ "$FILE_PROCESSED" = "TRUE" ] ; then
  1685. continue
  1686. fi
  1687. for TS_FILE in `$ECHO $TSFILES`
  1688. do
  1689. case $PRODUCT_FILE_BASENAME in
  1690. $TS_FILE) fileTimestamp $FILE_NAME $NUMPROCESSFILE
  1691. $ECHO "Getting Timestamp for $FILE_NAME" >> $CT_ACTIONS_RESULTS_FILE
  1692. FILE_PROCESSED=TRUE
  1693. break
  1694. ;;
  1695. esac
  1696. done
  1697. #performed the above action so get the next file
  1698. if [ "$FILE_PROCESSED" = "TRUE" ] ; then
  1699. continue
  1700. fi
  1701. for TAIL_FILE in `$ECHO $TAILFILES`
  1702. do
  1703. case $PRODUCT_FILE_BASENAME in
  1704. $TAIL_FILE) fileTail $FILE_NAME $NUMPROCESSFILE
  1705. $ECHO "Tail $FILE_NAME" >> $CT_ACTIONS_RESULTS_FILE
  1706. FILE_PROCESSED=TRUE
  1707. break
  1708. ;;
  1709. esac
  1710. done
  1711. #performed the above action so get the next file
  1712. if [ "$FILE_PROCESSED" = "TRUE" ] ; then
  1713. continue
  1714. fi
  1715. for LIST_FILE in `$ECHO $LISTINGFILES`
  1716. do
  1717. case $PRODUCT_FILE_BASENAME in
  1718. $LIST_FILE) fileListing $FILE_NAME $NUMPROCESSFILE
  1719. $ECHO "Listing directory $FILE_NAME" >> $CT_ACTIONS_RESULTS_FILE
  1720. FILE_PROCESSED=TRUE
  1721. break
  1722. ;;
  1723. esac
  1724. done
  1725. #performed the above action so get the next file
  1726. if [ "$FILE_PROCESSED" = "TRUE" ] ; then
  1727. continue
  1728. fi
  1729. for COPY_FILE in `$ECHO $COPYFILES`
  1730. do
  1731. case $PRODUCT_FILE_BASENAME in
  1732. $COPY_FILE) fileCopy $FILE_NAME $NUMPROCESSFILE
  1733. $ECHO "Copying file $FILE_NAME" >> $CT_ACTIONS_RESULTS_FILE
  1734. FILE_PROCESSED=TRUE
  1735. break
  1736. ;;
  1737. esac
  1738. done
  1739. for LOG_FILE in `$ECHO $LOGFILES`
  1740. do
  1741. case $PRODUCT_FILE_BASENAME in
  1742. $LOG_FILE)
  1743. if [ ${LOG_FILE_FLAG} = "true" ] ; then
  1744. $ECHO "$FILE_NAME" >> $CT_TAR_FILE_LIST
  1745. $ECHO "Tar up $FILE_NAME" >> $CT_ACTIONS_RESULTS_FILE
  1746. else
  1747. fileTimestamp $FILE_NAME $NUMPROCESSFILE
  1748. $ECHO "Getting Timestamp for $FILE_NAME" >> $CT_ACTIONS_RESULTS_FILE
  1749. fi
  1750. FILE_PROCESSED=TRUE
  1751. break
  1752. ;;
  1753. esac
  1754. done
  1755. done < $CT_SORTED_FILES
  1756. }
  1757. ################################################################################
  1758. #
  1759. #***************************License Data Output*****************************
  1760. #
  1761. ################################################################################
  1762. ################################################################################
  1763. #
  1764. # output welcome message.
  1765. #
  1766. beginMsg()
  1767. {
  1768. more ../resources/util/license_agreement.txt
  1769. ANSWER=
  1770. $ECHO "Accept License Agreement? "
  1771. while [ -z "${ANSWER}" ]
  1772. do
  1773. $ECHO "$1 [y/n]: \c" >&2
  1774. read ANSWER
  1775. #
  1776. # Act according to the user's response.
  1777. #
  1778. case "${ANSWER}" in
  1779. Y|y)
  1780. return 0 # TRUE
  1781. ;;
  1782. N|n)
  1783. echo_log "CT: CT-00019: ERROR: You must accept the license agreement to continue." $CT_ERRORS
  1784. exit 1 # FALSE
  1785. ;;
  1786. #
  1787. # An invalid choice was entered, reprompt.
  1788. #
  1789. *) ANSWER=
  1790. ;;
  1791. esac
  1792. done
  1793. }
  1794. ################################################################################
  1795. #
  1796. # print out the search header
  1797. #
  1798. printMachineInfo() {
  1799. NUMIPADDR=0
  1800. DRIVECMD=""
  1801. ## set up df to get a list of available drives, try to get type
  1802. if [ "$OS_NAME" = "SunOS" ] ; then
  1803. DRIVECMD="df -n"
  1804. elif [ "$OS_NAME" = "HP-UX" ] ; then
  1805. DRIVECMD="df -n"
  1806. elif [ "$OS_NAME" = "Linux" ] ; then
  1807. DRIVECMD="df -T"
  1808. else
  1809. DRIVECMD="df"
  1810. fi
  1811. # print script information
  1812. $ECHO "[BEGIN SCRIPT INFO]"
  1813. $ECHO "Script Name=$SCRIPT_NAME"
  1814. $ECHO "Script Version=$SCRIPT_VERSION"
  1815. $ECHO "Script Command options=$SCRIPT_OPTIONS"
  1816. $ECHO "Script Command shell=$SCRIPT_SHELL"
  1817. $ECHO "Script Command user=$SCRIPT_USER"
  1818. $ECHO "Available Drives and types="
  1819. $DRIVECMD
  1820. $ECHO "Script Filter File options="
  1821. cat ../resources/util/file_sort_list_unix.txt
  1822. $ECHO "[END SCRIPT INFO]"
  1823. # look for running Oracle processes
  1824. # PROCESSLIST gets set in parseProductFiles()
  1825. PROCNUM=0
  1826. $ECHO "[BEGIN ORACLE PROCESS INFO]"
  1827. $ECHO_DEBUG "PROCESSLIST in the process info section: ${PROCESSLIST}"
  1828. for PROC in `$ECHO $PROCESSLIST`
  1829. do
  1830. PROCCUT=`$ECHO $PROC | cut -d '|' -f1`
  1831. # NEED TO ADD LOGIC TO HANDLE PARSE command action
  1832. PLINE=`$PSCMD | grep $PROCCUT | grep -v grep |grep -v awk | awk '{print $0} END {if (NR == 0) exit 1 }'`
  1833. # check if awk printed a process line
  1834. if [ $? -eq 1 ] ; then
  1835. $ECHO "$PROCCUT process not running.\n"
  1836. else
  1837. PROCNUM=`expr ${PROCNUM} + 1`
  1838. TEMPPLINE=`echo ${PLINE} | sed -f "../resources/util/common/bin/rmdata.sed"`
  1839. $ECHO "Process# ${PROCNUM} : ${TEMPPLINE}\n"
  1840. fi
  1841. PLINE_UCB=`$PSCMD_UCB | grep $PROCCUT | grep -v grep |grep -v awk | awk '{print $0} END {if (NR == 0) exit 1 }'`
  1842. # check if awk printed a process line
  1843. if [ $? -eq 1 ] ; then
  1844. $ECHO "$PROCCUT process not running.\n"
  1845. else
  1846. TEMPPLINE_UCB=`echo ${TEMPPLINE_UCB} | sed -f "../resources/util/common/bin/rmdata.sed"`
  1847. $ECHO "Process# ${PROCNUM} : ${TEMPPLINE_UCB}\n"
  1848. fi
  1849. done
  1850. TEMPJPSCMD=`$JPSCMDFILE`
  1851. echo "$TEMPJPSCMD" | sed -f "../resources/util/common/bin/rmdata.sed"
  1852. TEMPSCMD=`$PSCMD | grep java | grep -v grep |grep -v awk | awk '{print "Process# ", NR, " : ", $0} END {if (NR == 0) print ("java process not running")}'`
  1853. echo "$TEMPSCMD" | sed -f "../resources/util/common/bin/rmdata.sed"
  1854. TEMPSCMD=`$PSCMD_UCB | grep java | grep -v grep |grep -v awk | awk '{print "Process# ", NR, " : ", $0} END {if (NR == 0) print ("java process not running")}'`
  1855. echo "$TEMPSCMD" | sed -f "../resources/util/common/bin/rmdata.sed"
  1856. $ECHO "[END ORACLE PROCESS INFO]"
  1857. }
  1858. ################################################################################
  1859. #
  1860. # print out a confirmation after the search and handle debug and error messages
  1861. #
  1862. printResults() {
  1863. # append Unix command errors to the end of the search result file only if debug option is turned on
  1864. if [ "$DEBUG" = "true" ]
  1865. then
  1866. $ECHO "processing.file.debug.data=$DEBUG_FILE"
  1867. $ECHO "processing.file.error.data=cat $UNIXCMDERR" 2>/dev/null
  1868. fi
  1869. $ECHO "\nThe Oracle Collection tool has finished.\n"
  1870. }
  1871. ################################################################################
  1872. #
  1873. # mask sensitive data out of the search results
  1874. #
  1875. maskResults() {
  1876. PREV_DIR=`pwd`
  1877. #sleep 3 secs for tar to finish before moving on.
  1878. sleep 3
  1879. #mv tar file to temp dir
  1880. mkdir $CT_TMP/masking
  1881. cp $CT_TAR_FILE $CT_TMP/masking/.
  1882. # untar file
  1883. # gnu tar supports the -C option so use pax for other *NIXs
  1884. if [ "$OS_NAME" = "Linux" ] ; then
  1885. tar xf $CT_TMP/masking/Collection-${MACHINE_NAME}${PRODUCTSRUN}.tar -C $CT_TMP/masking/
  1886. else
  1887. cd $CT_TMP/masking/
  1888. pax -r -s ',^/,$CT_TMP/masking/,' -f Collection-${MACHINE_NAME}${PRODUCTSRUN}.tar
  1889. cd $PREV_DIR
  1890. fi
  1891. #delete file
  1892. rm $CT_TMP/masking/Collection-${MACHINE_NAME}${PRODUCTSRUN}.tar
  1893. #mask data in temp dir
  1894. perl ./maskdata.pl $CT_TMP/masking/ $MASK_DATA
  1895. if [ ${?} -ne 0 ] ; then
  1896. echo_log "CT: CT-00021: ERROR: Perl error while masking data occured. Please see documentation for troubleshooting instructions." $CT_ERRORS
  1897. else
  1898. CT_TAR_FILE=${OUTPUT_DIR}/Collection-${MACHINE_NAME}${PRODUCTSRUN}-masked.tar
  1899. #tar up masked files
  1900. tar cf $CT_TAR_FILE $CT_TMP/masking/ 2>>$UNIXCMDERR
  1901. $ECHO "\nMasking data completed."
  1902. fi
  1903. #rm tempdir
  1904. rm -rf $CT_TMP/masking/
  1905. }
  1906. ################################################################################
  1907. #
  1908. #*********************************** MAIN **************************************
  1909. #
  1910. ################################################################################
  1911. umask 077
  1912. setAlias
  1913. # command line defaults
  1914. SCRIPT_OPTIONS=
  1915. SEARCH_DIR="/"
  1916. PRODLIST=
  1917. REMOTE_DB="NO"
  1918. # don't search NFS unless user tells us to
  1919. SEARCH_NFS="false"
  1920. # Setup Outputdir to include hostname.pid name in order to be able to have parallel runs.
  1921. OS_NAME=`uname -s`
  1922. MACHINE_NAME=`uname -n`
  1923. CT_PID=${$}
  1924. # set tmp directory defaults and files we will use in the script
  1925. TMPDIR=/tmp
  1926. CT_TMP=${TMPDIR}/ct_tmp_${MACHINE_NAME}_${CT_PID}
  1927. CT_DEBUG=$CT_TMP/debug
  1928. # get directory of CT
  1929. CURRENT_DIR=`pwd`
  1930. cd `dirname $0` > /dev/null
  1931. CT_HOME=`pwd -P`
  1932. cd $CURRENT_DIR > /dev/null
  1933. OUTPUT_DIR=$CT_HOME/output
  1934. FOLLOW="-follow"
  1935. LOG_FILE_FLAG="false"
  1936. DEBUG="false"
  1937. PATH="$PATH:."
  1938. export PATH
  1939. RANCPUQ="false"
  1940. REMOTEINFO=
  1941. RUNREMOTE_FILE=
  1942. MASKDATA=""
  1943. OKTORUNRMDATA="false"
  1944. COLLECT_CT_DEBUG="true"
  1945. # set up $ECHO
  1946. ECHO="echo_print"
  1947. # set up $ECHO for debug
  1948. ECHO_DEBUG="echo_debug"
  1949. PRODUCTSRUN=""
  1950. # check user input
  1951. #Replace em_dash if found
  1952. ALLARGS=`echo "${@}" | sed -e 's/\xE2\x80\x94/-/g'`
  1953. checkSyntax $ALLARGS
  1954. chmod o+x $CT_TMP
  1955. CT_COLLECTED=$CT_TMP/logs/CT_collected.log
  1956. CT_WARNINGS=$CT_TMP/logs/CT_warnings.log
  1957. CT_ERRORS=$CT_TMP/logs/CT_errors.log
  1958. UNIXCMDERR=$CT_TMP/logs/unixcmderrs.log
  1959. touch $UNIXCMDERR
  1960. if [ ! -d "$CT_TMP/logs" ] ; then
  1961. mkdir -p $CT_TMP/logs
  1962. fi
  1963. if [ ! -d "${OUTPUT_DIR}" ] ; then
  1964. mkdir -p "${OUTPUT_DIR}"
  1965. fi
  1966. if [ ! -d "${CT_DEBUG}" ] ; then
  1967. mkdir -p "${CT_DEBUG}"
  1968. fi
  1969. if [ ! -d "$CT_TMP/FMW" ] ; then
  1970. mkdir -p $CT_TMP/FMW
  1971. fi
  1972. if [ "$DEBUG" = "true" ] ; then
  1973. debugWarning
  1974. fi
  1975. #checkCredtials
  1976. if [ "$RUNREMOTE_FILE" != "true" ] ; then
  1977. credentialValidation
  1978. checkNFS
  1979. fi
  1980. if [ "$LICAGREE" = "" ] ; then
  1981. # print License Agreement message
  1982. beginMsg
  1983. fi
  1984. # Get the products we need to look for
  1985. $ECHO "\nRetrieving Oracle Product list...."
  1986. if [ "$RUNREMOTE_FILE" != "true" ] ; then
  1987. getProducts
  1988. fi
  1989. export PRODUCTSRUN
  1990. export OUTPUT_DIR
  1991. export LICAGREE
  1992. export REMOTE_PROD_OPTS
  1993. export MASK_DATA
  1994. export REMOTE_DB
  1995. export CT_HOME
  1996. export CT_TMP
  1997. # Check for remote execution
  1998. if [ ! -z "$REMOTEINFO" ] ; then
  1999. if [ ! -x ../resources/util/common/bin/recog.sh ] ; then
  2000. chmod +x ../resources/util/common/bin/recog.sh
  2001. $ECHO "\nchmod +x on ../resources/util/common/bin/recog.sh script\n"
  2002. if [ ! -x ../resources/util/common/bin/recog.sh ]; then
  2003. echo_log "CT: CT-00020: ERROR: The script, ../resources/util/common/bin/recog.sh, is not executable, and the current user is unable to change permissions.\nPlease change persmisions on ../resources/util/common/bin/recog.sh to be executable and re-run the script.\n" $CT_ERRORS
  2004. FLDNUM=`expr ${FLDNUM} + 1`
  2005. continue
  2006. fi
  2007. export REMOTEINFO
  2008. ../resources/util/common/bin/recog.sh $SCRIPT_OPTIONS
  2009. else
  2010. export REMOTEINFO
  2011. ../resources/util/common/bin/recog.sh $SCRIPT_OPTIONS
  2012. fi
  2013. # delete the tmp files
  2014. rm -rf $CT_TMP 1> /dev/null 2>&1
  2015. else
  2016. # set current system info
  2017. setOSSystemInfo
  2018. RUNNING_STATUS=
  2019. if [ "$OS_NAME" = "Linux" ] ; then
  2020. RUNNING_STATUS=`ps -o stat= -p $$`
  2021. else
  2022. RUNNING_STATUS=`ps -o s= -p $$`
  2023. fi
  2024. # parse and set search files and process list
  2025. $ECHO "\nSetting up lists for Collection Tool...."
  2026. parseProductFiles
  2027. # Run CPUQ before machine info section
  2028. case $RUNLIST in
  2029. *"cpuq_main"*)
  2030. doRunCmd "$RUNCPUQ"
  2031. RANCPUQ="true";;
  2032. esac
  2033. #export Variables needed by helper scripts
  2034. export OUTPUT_DIR
  2035. export PRODLIST
  2036. export ALLPRODLIST
  2037. export PRODUCTLIST
  2038. export SCRIPT_OPTIONS
  2039. export LICAGREE
  2040. # Generate a machine summary file
  2041. printMachineInfo > $CT_MACHINFO_FILE 2>>$UNIXCMDERR
  2042. # check env, java processes, and any beahomeslist found for the default Oracle directories
  2043. # instead of the whole file system
  2044. case $ALLPRODLIST in
  2045. *WLS* )
  2046. getDefaultOracleEnv
  2047. ;;
  2048. esac
  2049. # set search option
  2050. setSearchOptions
  2051. # search start time
  2052. setTime
  2053. SEARCH_START=$NOW
  2054. # find all the files on the target system; skip search if CPUQonly or no search files
  2055. if [ "${ALLSEARCHFILES}" != "" ] ; then
  2056. $ECHO "\nRunning file search ..."
  2057. doSearch
  2058. fi
  2059. # search finish time
  2060. setTime
  2061. SEARCH_FINISH=$NOW
  2062. if [ "${ALLSEARCHFILES}" != "" ] ; then
  2063. echo_log "\nCT file search started at $SEARCH_START and finished at $SEARCH_FINISH." $CT_ACTIONS_RESULTS_FILE
  2064. fi
  2065. # Run the specified Commands or scripts
  2066. doRunCmd "$RUNLIST"
  2067. # print search information
  2068. $ECHO "[BEGIN SEARCH INFO]" >> $CT_MACHINFO_FILE
  2069. $ECHO "Search start=$SEARCH_START" >> $CT_MACHINFO_FILE
  2070. $ECHO "Search command=$SEARCH_COMMAND" >> $CT_MACHINFO_FILE
  2071. $ECHO "Search finish=$SEARCH_FINISH" >> $CT_MACHINFO_FILE
  2072. $ECHO "Search nfs=$SEARCH_NFS" >> $CT_MACHINFO_FILE
  2073. $ECHO "[END SEARCH INFO]" >> $CT_MACHINFO_FILE
  2074. if [ -f $CT_FILES ] ; then
  2075. # obtain unique file list from above search
  2076. $ECHO "\nSorting found file list...."
  2077. fileSort
  2078. # Clean up the file list get rid of non Oracle config.xml and registry.xml
  2079. $ECHO "\nPreparing Oracle files in file list for collection...."
  2080. fileGetCTFiles
  2081. fi
  2082. # Name the output file according to which product scripts ran
  2083. CT_TAR_FILE="${OUTPUT_DIR}/Collection-${MACHINE_NAME}${PRODUCTSRUN}.tar"
  2084. export CT_TAR_FILE
  2085. # package results for post-processing
  2086. if [ -f $CT_SORTED_FILES ] ; then
  2087. $ECHO "\nStarting copy of files to the collection archive...."
  2088. fileAction &
  2089. spinner
  2090. fi
  2091. # print output to file
  2092. printResults >> $CT_RESULTS_FILE 2>> $UNIXCMDERR
  2093. # Add the compare_result info file to the tar file
  2094. if [ -f compare_result.txt ] ; then
  2095. cp compare_result.txt $CT_TMP/logs/.
  2096. fi
  2097. TARTIMESTAMP=`date '+%Y%m%d_%H%M%S'`
  2098. # check if file exists, if so move older one.
  2099. if [ -f $CT_TAR_FILE ] ; then
  2100. mv $CT_TAR_FILE $CT_TAR_FILE.$TARTIMESTAMP
  2101. fi
  2102. # bundle the files
  2103. if [ -f $CT_TAR_FILE_LIST -o -f $CT_RMDATA_FILE_LIST ] ; then
  2104. bundleResults
  2105. fi
  2106. # delete the tmp files
  2107. if [ "$DEBUG" != "true" ] ; then
  2108. rm -rf $CT_FILES $CT_SORTED_FILES $DEBUG_FILE $CT_TAR_FILE_LIST 1> /dev/null 2>&1
  2109. fi
  2110. # Run rmdata after copying files to secure location
  2111. case $RUNLIST in
  2112. *"rmdata"*)
  2113. OKTORUNRMDATA="true"
  2114. doRunCmd "$RUNRMDATA"
  2115. ;;
  2116. esac
  2117. #Check for successful domain gathering
  2118. case $ALLPRODLIST in
  2119. *WLS* )
  2120. for FMW_DOMAINS in `grep "Tar up .*domains.*config.xml.*" $CT_ACTIONS_RESULTS_FILE | awk '{print $3}' | sed 's/config.*//'`
  2121. do
  2122. echo_log "CT: CT-00200: COLLECTED: FMW configuration files for $FMW_DOMAINS" $CT_COLLECTED
  2123. done
  2124. ;;
  2125. esac
  2126. for logFiles in $CT_TMP/logs/*_collected.log
  2127. do
  2128. echo "## CT ## Collected" > $CT_TMP/logs/results_summary.log
  2129. if [ -s $logFiles ] ; then
  2130. cat $logFiles >> $CT_TMP/logs/results_summary.log 2>>$UNIXCMDERR
  2131. echo >> $CT_TMP/logs/results_summary.log
  2132. fi
  2133. done
  2134. for logFiles in $CT_TMP/logs/*_warnings.log
  2135. do
  2136. echo "## CT ## Warnings" >> $CT_TMP/logs/results_summary.log
  2137. if [ -s $logFiles ] ; then
  2138. cat $logFiles >> $CT_TMP/logs/results_summary.log 2>>$UNIXCMDERR
  2139. echo >> $CT_TMP/logs/results_summary.log
  2140. fi
  2141. done
  2142. for logFiles in $CT_TMP/logs/*_errors.log
  2143. do
  2144. echo "## CT ## Errors" >> $CT_TMP/logs/results_summary.log
  2145. if [ -s $logFiles ] ; then
  2146. cat $logFiles >> $CT_TMP/logs/results_summary.log 2>>$UNIXCMDERR
  2147. echo >> $CT_TMP/logs/results_summary.log
  2148. fi
  2149. done
  2150. #move debug/non neccessary log files to CT_DEBUG
  2151. CT_ACTIONS_RESULTS_FILE=$CT_DEBUG/Collection-Actions-${MACHINE_NAME}.txt
  2152. UNIXCMDERR=$CT_DEBUG/unixcmderrs.log
  2153. COPYDBLOGSONLY="true"
  2154. case $ALLPRODLIST in
  2155. *WLS* )
  2156. COPYDBLOGSONLY="false"
  2157. ;;
  2158. *OAS* )
  2159. COPYDBLOGSONLY="false"
  2160. ;;
  2161. *Tuxedo* )
  2162. COPYDBLOGSONLY="false"
  2163. ;;
  2164. *OBI* )
  2165. COPYDBLOGSONLY="false"
  2166. ;;
  2167. * )
  2168. ;;
  2169. esac
  2170. for DEBUG_FILENAMES in $CT_TMP/logs/*.*
  2171. do
  2172. if [ "$COPYDBLOGSONLY" = "false" ] ; then
  2173. case "$DEBUG_FILENAMES" in
  2174. *${MACHINE_NAME}-info.txt )
  2175. ## don't mv
  2176. ;;
  2177. *CTlogfiles.txt )
  2178. ## don't mv
  2179. ;;
  2180. *Collection-${MACHINE_NAME}.txt )
  2181. ## don't mv
  2182. ;;
  2183. *db_list.csv )
  2184. ## don't mv
  2185. ;;
  2186. *)
  2187. mv "$DEBUG_FILENAMES" "$CT_DEBUG"/.
  2188. ;;
  2189. esac
  2190. else
  2191. case "$DEBUG_FILENAMES" in
  2192. *db_list.csv )
  2193. ## don't mv
  2194. ;;
  2195. *)
  2196. mv "$DEBUG_FILENAMES" "$CT_DEBUG"/.
  2197. ;;
  2198. esac
  2199. fi
  2200. done
  2201. CT_COLLECTED=$CT_DEBUG/CT_collected.log
  2202. CT_WARNINGS=$CT_DEBUG/CT_warnings.log
  2203. CT_ERRORS=$CT_DEBUG/CT_errors.log
  2204. UNIXCMDERR=$CT_DEBUG/unixcmderrs.log
  2205. if [ "$PRODLIST" = " CPUQ" ] ; then
  2206. rm -rf $CT_TMP/logs
  2207. fi
  2208. TARTIMESTAMP=`date '+%Y%m%d_%H%M%S'`
  2209. CT_DEBUG_TAR_FILE="${OUTPUT_DIR}/debug_Collection-${MACHINE_NAME}${PRODUCTSRUN}.tar"
  2210. # Add everything to tar file
  2211. bundleCTOutput
  2212. $ECHO "\nFinished copying of files to the collection archive."
  2213. # mask data if required.
  2214. if [ "$MASK_DATA" = "all" -o "$MASK_DATA" = "IP" -o "$MASK_DATA" = "ip" -o "$MASK_DATA" = "user" ] ; then
  2215. maskResults
  2216. fi
  2217. # check if compressed archive file exists, if so move older one.
  2218. if [ -f $CT_TAR_FILE.bz2 ] ; then
  2219. mv $CT_TAR_FILE.bz2 $CT_TAR_FILE.bz2.$TARTIMESTAMP
  2220. fi
  2221. if [ -f $CT_TAR_FILE.Z ] ; then
  2222. mv $CT_TAR_FILE.Z $CT_TAR_FILE.Z.$TARTIMESTAMP
  2223. fi
  2224. CTRECOG="false"
  2225. case `pwd` in
  2226. *CTrecog*)
  2227. CTRECOG="true"
  2228. ;;
  2229. esac
  2230. COMPRESSED_NAME=
  2231. # Compress the Results file
  2232. bzip2 $CT_TAR_FILE 2>>$UNIXCMDERR
  2233. if [ ${?} -ne 0 ] ; then
  2234. compress $CT_TAR_FILE 2>>$UNIXCMDERR
  2235. if [ ${?} -ne 0 ] ; then
  2236. echo_log "\nCould not compress Results File ${CT_TAR_FILE}." $CT_ACTIONS_RESULTS_FILE
  2237. COMPRESSED_NAME=${CT_TAR_FILE}
  2238. else
  2239. rm $CT_TAR_FILE
  2240. echo_log "\nSuccessfully compressed the results file ${CT_TAR_FILE}." $CT_ACTIONS_RESULTS_FILE
  2241. COMPRESSED_NAME=${CT_TAR_FILE}.Z
  2242. fi
  2243. else
  2244. echo_log "\nSuccessfully compressed the results file ${CT_TAR_FILE}." $CT_ACTIONS_RESULTS_FILE
  2245. COMPRESSED_NAME=${CT_TAR_FILE}.bz2
  2246. fi
  2247. clear 2>>$UNIXCMDERR
  2248. if [ "$CTRECOG" = "false" ] ; then
  2249. echo_log "\nCollection process is completed, please forward ${COMPRESSED_NAME} to your assigned consultant." $CT_ACTIONS_RESULTS_FILE
  2250. fi
  2251. if [ -f "compare_result.txt" ]
  2252. then
  2253. rm compare_result.txt
  2254. fi
  2255. ECHO_HEADER="true"
  2256. echo
  2257. for logFiles in $CT_DEBUG/*_collected.log
  2258. do
  2259. if [ -s $logFiles ] ; then
  2260. if [ "$ECHO_HEADER" = "true" ] ; then
  2261. echo "## CT ## Collected"
  2262. ECHO_HEADER="false"
  2263. fi
  2264. cat $logFiles
  2265. fi
  2266. done
  2267. ECHO_HEADER="true"
  2268. echo
  2269. for logFiles in $CT_DEBUG/*_warnings.log
  2270. do
  2271. if [ -s $logFiles ] ; then
  2272. if [ "$ECHO_HEADER" = "true" ] ; then
  2273. echo "## CT ## Warnings"
  2274. ECHO_HEADER="false"
  2275. fi
  2276. cat $logFiles
  2277. fi
  2278. done
  2279. ECHO_HEADER="true"
  2280. echo
  2281. for logFiles in $CT_DEBUG/*_errors.log
  2282. do
  2283. if [ -s $logFiles ] ; then
  2284. if [ "$ECHO_HEADER" = "true" ] ; then
  2285. echo "## CT ## Errors"
  2286. ECHO_HEADER="false"
  2287. fi
  2288. cat $logFiles
  2289. fi
  2290. done
  2291. # delete the tmp files
  2292. rm -rf $CT_TMP 1> /dev/null 2>&1
  2293. fi
  2294. exit 0