kTBםaBםaby nameby nameBUILDd kpJABםaBםa./AA kP-om"BםaBםaBםa&"./lpp_namemm4 R I cluster.es.assist { cluster.es.assist.common 7.2.6.0 01 N U en_US PowerHA SystemMirror Smart Assist Common Files [ *prereq cluster.es.server.rte 7.2.6.0 *prereq cluster.es.client.lib 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/lib/ksh93/sa 96 /usr/lib/objrepos 16 /usr/es/sbin/cluster/sa 8 /usr/es/sbin/cluster/sa/sbin 360 /usr/es/sbin/cluster/sa/gasa 8 /usr/es/sbin/cluster/sa/gasa/sbin 72 /usr/es/sbin/cluster/sa/config 56 INSTWORK 232 4280 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.db2 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for DB2 [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/db2 8 /usr/lib/objrepos 24 /usr/es/sbin/cluster/sa/db2/etc 16 /usr/es/sbin/cluster/sa/db2/sbin 400 /usr/es/sbin/cluster/sa/db2/cat 64 /usr/es/sbin/cluster/sa/db2/config 32 /usr/es/lib/ksh93/db2 136 /usr/es/lib/ksh93/db2/vg 48 INSTWORK 792 4568 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.oracle 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for Oracle [ *prereq cluster.es.migcheck 7.2.6.0 *prereq cluster.es.assist.common 7.2.6.0 % /usr/es/sbin/cluster/samples 8 /usr/lib/objrepos 16 /usr/es/sbin/cluster/samples/oracle 304 /usr/es/sbin/cluster/sa/oracle 8 /usr/es/sbin/cluster/sa/oracle/sbin 600 /usr/es/sbin/cluster/sa/oracle/scripts 40 /usr/es/sbin/cluster/sa/oracle/config 40 INSTWORK 800 4568 /lpp/cluster.es.assist 56 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.sap 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for SAP [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/sap 8 /usr/lib/objrepos 16 /usr/es/sbin/cluster/sa/sap/sbin 1152 /usr/es/sbin/cluster/sa/sap/config 72 /etc/security 8 /usr/es/sbin/cluster/sa/sap/cat 32 /usr/es/sbin/cluster/sa/sap/etc 24 INSTWORK 952 4408 /lpp/cluster.es.assist 56 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.ihs 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for IBM HTTP Server [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/es/sbin/cluster/sa/ihs 8 /usr/lib/objrepos 8 /usr/es/es/sbin/cluster/sa/ihs/sbin 8 /usr/es/es/sbin/cluster/sa/ihs/config 8 /usr/es/sbin/cluster/sa/ihs/sbin 168 /usr/es/lib/ksh93/ihs 56 /usr/es/sbin/cluster/sa/ihs/config 24 INSTWORK 688 4672 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.oraappsrv 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for Oracle Application Server [ *prereq cluster.es.migcheck 7.2.6.0 *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.assist.oracle 7.2.6.0 % /usr/es/sbin/cluster/sa/oraappsrv 8 /usr/lib/objrepos 8 /usr/es/sbin/cluster/sa/oraappsrv/sbin 328 /usr/es/sbin/cluster/sa/oraappsrv/config 48 INSTWORK 752 4608 /lpp/cluster.es.assist 56 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.filenet 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for FileNet P8 [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.assist.db2 7.2.6.0 *prereq cluster.es.assist.websphere 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/filenet 8 /usr/lib/objrepos 8 /usr/es/sbin/cluster/sa/filenet/sbin 544 /usr/es/sbin/cluster/sa/filenet/lib 152 /usr/es/sbin/cluster/sa/filenet/config 48 INSTWORK 736 4632 /lpp/cluster.es.assist 56 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.websphere 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for WebSphere [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/haws 8 /usr/lib/objrepos 32 /usr/es/sbin/cluster/haws/sbin 112 /usr/es/sbin/cluster/haws/sbin/subsys 8 /usr/es/sbin/cluster/haws/sbin/subsys/db2 80 /usr/es/sbin/cluster/haws/sbin/subsys/dm 80 /usr/es/sbin/cluster/haws/sbin/subsys/tds 96 /usr/es/sbin/cluster/haws/sbin/subsys/was 96 /usr/es/sbin/cluster/sa/was 8 /usr/es/sbin/cluster/sa/was/sbin 832 /usr/es/lib/ksh93/was 56 /usr/es/sbin/cluster/sa/was/config 48 INSTWORK 960 4400 /lpp/cluster.es.assist 56 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.tds 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for IBM Tivoli Directory Server [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/es/sbin/cluster/sa/tds 8 /usr/lib/objrepos 8 /usr/es/es/sbin/cluster/sa/tds/sbin 8 /usr/es/es/sbin/cluster/sa/tds/config 8 /usr/es/es/sbin/cluster/sa/tds/scripts 8 /usr/es/sbin/cluster/sa/tds/sbin 336 /usr/es/sbin/cluster/sa/tds/config 24 INSTWORK 696 4664 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.tsmserver 7.2.6.0 01 N B en_US PowerHA SystemMirror SmartAssist for IBM TSM Server [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/tsmserver 8 /usr/lib/objrepos 8 /usr/es/sbin/cluster/sa/tsmserver/sbin 176 /usr/es/sbin/cluster/sa/tsmserver/config 32 INSTWORK 696 4664 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.tsmclient 7.2.6.0 01 N B en_US PowerHA SystemMirror SmartAssist for IBM TSM Client [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/tsmclient 8 /usr/lib/objrepos 8 /usr/es/sbin/cluster/sa/tsmclient/sbin 248 /usr/es/sbin/cluster/sa/tsmclient/config 32 INSTWORK 704 4656 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.tsmadmin 7.2.6.0 01 N B en_US PowerHA SystemMirror SmartAssist for IBM TSM Admin center [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/tsmadmin 8 /usr/lib/objrepos 8 /usr/es/sbin/cluster/sa/tsmadmin/sbin 144 /usr/es/sbin/cluster/sa/tsmadmin/config 32 INSTWORK 696 4672 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.dns 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for DNS [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/dns 8 /usr/lib/objrepos 8 /usr/es/sbin/cluster/sa/dns/sbin 144 /usr/es/sbin/cluster/sa/dns/lib 8 /usr/es/sbin/cluster/sa/dns/config 32 INSTWORK 688 4672 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.printServer 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for Print Subsystem [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/printServer 8 /usr/lib/objrepos 8 /usr/es/sbin/cluster/sa/printServer/sbin 272 /usr/es/sbin/cluster/sa/printServer/lib 112 /usr/es/sbin/cluster/sa/printServer/config 32 INSTWORK 704 4656 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.domino 7.2.6.0 01 N B en_US PowerHA SystemMirror SmartAssist for IBM Lotus domino server [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/domino 8 /usr/lib/objrepos 8 /usr/es/sbin/cluster/sa/domino/sbin 160 /usr/es/sbin/cluster/sa/domino/config 24 INSTWORK 672 4688 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.maxdb 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for SAP MaxDB [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/maxdb 8 /usr/lib/objrepos 24 /usr/es/sbin/cluster/sa/maxdb/sbin 520 /usr/es/sbin/cluster/sa/maxdb/config 56 /usr/es/sbin/cluster/sa/hswizard 8 /usr/es/sbin/cluster/sa/hswizard/sbin 288 /usr/es/sbin/cluster/sa/hswizard/etc 24 /usr/es/sbin/cluster/sa/hswizard/config 48 /opt/ibm/ibmsap 600 /opt/ibm/ibmsap/connectors 8 /opt/ibm/ibmsap/connectors/HSS2145 80 /opt/ibm/ibmsap/connectors/HSS2107 80 INSTWORK 840 4520 /lpp/cluster.es.assist 56 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.dhcp 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for DHCP [ *prereq cluster.es.assist.common 7.2.6.0 *prereq cluster.es.migcheck 7.2.6.0 % /usr/es/sbin/cluster/sa/dhcp 8 /usr/lib/objrepos 8 /usr/es/sbin/cluster/sa/dhcp/sbin 136 /usr/es/sbin/cluster/sa/dhcp/config 32 INSTWORK 688 4672 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] cluster.es.assist.wmq 7.2.6.0 01 N B en_US PowerHA SystemMirror Smart Assist for MQ Series [ *prereq cluster.es.assist.common 7.2.6.0 % /usr/es/sbin/cluster/sa/wmq 8 /usr/lib/objrepos 8 /usr/es/sbin/cluster/sa/wmq/sbin 216 /usr/es/sbin/cluster/sa/wmq/config 32 INSTWORK 688 4672 /lpp/cluster.es.assist 48 /etc/objrepos 1 % % % % SYSTEM PRIVATE % % BUILDDATE 0743 ] } 07 kr_/retABםaBםapl/ lcsuif g./usrn_AA kꀵ/retABםaBםapl/ lcsuif g./usr/lpp PowerAA k|/retABםaBםapl/ lcsuif g./usr/lpp/cluster.es.assistror AA lq8-om8Aםa1םa1םa&./usr/lpp/cluster.es.assist/liblpp.amm   es "=_acdilmnot/pru#'.0bfghvy -125Aqwx,3467:>DINS\z89CEFLMPRTk$()+BGO%&HU{};VWY[]`|!*f.8a1c0ᡠN484aψ= FwWF>!<HTgMїs1̝7@ &.ny2W3qvai fbf9{v[ҏ#6YQ*c:n8b@l#M52[':dp p&F0`Pho P4  (y:0eXݺ2F-dq3Q1̨7W:1}d&O"ӟ  L#<#ё\( 6հW20hpᡠ dq3@qA &0@`Lf44 Æ91*Tч$'# 2>f9{v[ҏ#6YQ*c:n8b@l#M52[':dp p&F0`Pho?Xw AXh ᠯ7`,}6F \ZL#0 cQntc08FL!D> @(42, FxF3"Q[m5waFdac0@pN4402, Fx@N H! Æ8pч> 8e]J0"TdaQ7F^2tq33NK{Qf[+4>e\s'M`LCMi&Qd'L`n` ÃÿA@8`( @W `y:0eXݺ1lc$Y3@0eFю[ $]2|x4 hȲf8ΌEoY] Æ8p`Ȳf8 8b  0&3 CFߘgyta*hdQFxxW3p=n;M-bG]l|(s1̝7O1 @ a6Ff-ĝ28D# p 0(474 AXh ᠯ7`,ǛsU]ۮc$bYva!dq3 >9jF9o3td@Xs`xO"ɘgc:2+fۣWxtj&F3 pN4402, Fx@N H! Æ8pч> 8e]J0"TdaQ7F^2tq33NK{Qf[+4>e\s'M`LCMi&Qd'L`n` A_ppxwh0 a@+Æ_ <۝2bs=Ϩ2E1(Tn2Eѓ'~`iχA ?L&cȮnVn]jEѫX8hhN4402, Fx@N H! Æ8pч> 8e]J0"TdaQ7F^2tq33NK{Qf[+4>e\s'M`LCMi&Qd'L`n` Agp0@h(8h+  ocv*e(c$Y3@0eFю[ $]2|x4 hȲf8ΌEoY] Æpᡠ dq3@qA &0@`Lf44 Æ91*Tч$'# 2>f9{v[ҏ#6YQ*c:n8b@l#M52[':dp p&F0`Pho  Ah4 ^4 Pocvɶ2E1(Tn2Eѓ'~`iχA ?L&cȮnVn]jEѫX8h  ?L&c>f.8a1c0ᡠN484aψ= FwWF>!<HTgMїs1̝7@ &.ny2W3qvai fb 8e]J0"TdaQ7F^2tq33NK{Qf[+4>e\s'M`LCMi&Qd'L`n` `8   P,4xpW0 @c͹у*.11c$Y3@0eFю[ $]2|x4 hȲf8ΌEoY] ÆCA"ɘg$ L`8hh0  s~cUфHO%FFte}\s'M#;0 4FmuLU2tq<1FkeOtL,a0< a`( @W ` <۝2bs;Dc$Y3@| s*7MΌrxf"ɓ?4F&E1tdW7J+~ͷF5l"L,f44h' L#< '|\q$caCA8hphß{@2%M|Bx *20/c:nM'i\(3ke2f90&!&4_X(ŲxG7dac0hw,P4  (7nt`ʱuccc"ɘf| s*7MΌrxf"ɓ?4F&E1tdW7J+~ͷF5l"L,f44h' L#< '|\q$caCA8hphß{@2%M|Bx *20/c:nM'i\(3ke2f90&!&4_X(ŲxG7dac0gx( P,4xpW0 @Gcvtf Q"ɘf| s*7MΌrxf"ɓ?4F&E1tdW7J+~ͷF5l"L,f44h' L#< '|\q$caCA8hphß{@2%M|Bx *20/c:nM'i\(3ke2f90&!&4_X(ŲxG7dac0`x/<  P,4xpW0 @c͹у*.1 d&ceFю[ $]2|x4 hȲf8ΌEoY] ÆCA"ɘg$ L`8hh0  s~cUфHO%FFte}\s'M#;0 4FmuLU2tq<1FkeOtL,a0X+`( @W ` <۝2bspHf8`ʍp5sH2d , 9h0<@@ѧ dq31Ҋ߀mѫ [5x# 8x' L#< '|\q$caCA8hphȲf81;8hA|Aq3ʺ04a 2D£<ndgxf7@1stͮ>Vi|ʹN' M}`L3N" 8C_h0 a@+Æ_ <۝2bs,,c$Y3@| s*7MΌrxf"ɓ?4F&E1tdW7J+~ͷF5l"L,f44h' L#< '|\q$caCA8hphß{@2%M|Bx *20/c:nM'i\(3ke2f90&!&4_X(ŲxG7dac0 CCP4  (7nt`ʱu`F2E1(Tn2Eѓ'~`iχA ?L&cȮnVn]jEѫX8hhh' L#< '|\q$caCA8hphß{@2%M|Bx *20/c:nM'i\(3ke2f90&!&4_X(ŲxG7dac0A`X3hx0oh0 a@w CocvƎY`PEtJlah@bX!%38"z BF.tܳ$WV , Ej0 ZYLy:0vMQaLy:0eXݺ1e),0;88 s*7MΌrxf"ɓ?788dю["$ 0 #ё\( 6հW20pѠ@T 2D£<ndgxf7@1stⶺYVe\s'M`LCMi&Qd'L`ng@X8` A38Aa1+!VSmΌ*ݺSGmSmΌV1wnhᅙJp" H[ X'" J C  9h@ @mS8.WⰅOA@A&a d-3 űh嵪tnk*f-<"k߇4lO.A"0n[[[65| F)H <uK)j0GCǩdQţ$TM{xMi:%5DZf#Ӌc6jtnk*f-<"k߇4lO.A"0n[2D$TM{xMi:%5DZf#ӋcB2m kShQ5Áy6 pS i`7N-SGNc- -<"k߇4lO.Ast9TMXxH!qlz88c% i:75Ŕ'#$TM{xMi:%5R.x`5WB*Ӌ/ 77N-SG d= 2F渲tdbShQ5Áy6 pS H:]&N,h@$8=Mdh6^8᧓`}Nw2 T#UЊl4ƋA Ӌc6jWS4.nE$TM{xMi:%5R.x`5WB*Ӌ4<^ nn[\:75Ŕ1[@dh6^8᧓`}Nw2 T#UЊl4Ɔǩƹo.nE$TM{xMi:%5R.x`5WB*Ӌ4^ nn[\:75Ŕ1[@dh6^8᧓`}Nw2 T#UЊl4ƆA ӋcӫF渲5| st-<"k߇4lO.Ast9TMXCst4pt1ѹ,r"$\(F)H <uK)j\jUa44^ nn[\:75Ŕ1[@dh6^8᧓`}Nw2 T#UЊl4ƇA ӋckTU,dh6^8᧓`}Nw2 T#UЊl4ƇA Ӌckc&ƹo.nE$TM{xMi:%5R.x`5WB*Ӌ/ 77N-SG@٩ѹ,X7J"уm*&p<O&a d<0GCDiōǩd- 2E҈`D~pɰm>XdE EQ6qaE űh嵪tnk*f2E҈`D~pɰm>XdE EQ6qaE űh嵱hc\Ȁ7J"уm*&p<O&a d<0GCDiņǩlU,dh6^8᧓`}Nw2 T#UЊl4FA ӋcB2m k"DZ0yMED׿8i6S2]LU"sUt" 8xH!qlz89mjʺst-<"k߇4lO.Ast9TMXhx@$8=M2m k"DZ0yMED׿8i6S2]LU"sUt" 8xH!qlz8:Nqe]LHQShQ5Áy6 pS H:]&N,4<^ nn[2hc\Ȁ7J"уm*&p<O&a d<0GCDiŇ ǩ֩ѹ,X7J"уm*&p<O&a d<0GCDiŇ ǩMr"$\(F)H <uK)j\jUa4^ nn[Ss\YWS4.nE$TM{xMi:%5R.x`5WB*Ӌǩ֩ѹ,X7J"уm*&p<O&a d<0GCDiŇA Ӌc6jtnk*f2E҈`D~pɰm>XdE EQ6q`Cst4pt ʺst-<"k߇4lO.Ast9TMX(<^ nn[Ss\YWS4.nE$TM{xMi:% st9TMXѡCst4pt$h6^8᧓`}NwBj\jUa4hx@$8=MkShQ5Áy6 pT*&E EQ6qcCFA ӋcГE$TM{xMi:% st9TMXѢCst4puZ0yMED׿8i6S2]P<0GCDiō / 77N-UfMwn3ShQ5Áy6 pT*&E EQ6qcCC űhIуm*&p<O&a DH:]&N,hhx@$8=MkShQ5Áy6 pT*&E EQ6qcCA Ӌcֱh6^8᧓`}NwBj\jUa44^ nn[F)H <uK*U"sUt" 8Cst4puZ0yMED׿8i6S2]P<0GCDiōǩW1h6^8᧓`}NwBj\jUa4XdQ5R.x`5WB*Ӌ / 77N-SGZţ$TM{xMi:% st9TMXh@$8=MkShQ5Áy6 pT*&E EQ6qc@Cst4puZ0yMED׿8i6S2]P<0GCDiņǩW1h6^8᧓`}NwBj\jUa4h@$8=MkShQ5Áy6 pTW Qst4prh6^8᧓`}NwEpi`7N-SG-Bуm*&p<O&a J"0n[ţ$TM{xMi:%”Ea:8=Mfɵu3KShQ5Áy6 pTW Qst4pqShQ5Áy6 pTW Qst4pqBуm*&p<O&a J"0n[\:75Ŕ-<"k߇47OpѠWhxx@ P,4ᠯ7hx y:0eXݺ2F-Jp(":%6DV`j<4(@0"P 3.׮:͜{*4bM2Oy`V‹[)6FVRs*F- c͹у*.11l} ,SY4`nq^qXTn2Eѓ'~`nq^qXW3p5s!Dy`H @`F3"Q[m5waFdac0ᡠ@T 2D£<ndgxf7@1stⶺYVe\s'M`LCMi&Qd'L`ng@X8` A38@4`of0Ed*c͹хU\ʑcl˜nt`ʱud[C 2D"@N , Ej0 A@ QCpiA0ѠP( 9QaUeXD<۝Qs7UǾcx<"k߇4Tc05F3Jq 'emΌ)m'Л`̞\}]N##^uno}7Cel27D25"@TYY9Ʃ嶟Sdkc͹рѹ 2zsǹu;o6\[\ntfXdLt9qlzvm[@Z0yMED׿8i6S2]LTEa:8=BK[]l*0`D~pɰm>XdLt9qlzv ǛjkShQ5Áy6 pS i`7N-Pd5| F)H <uK)j0GCǨIwk2#jkShQ5Áy6 pS i`7N-Pd#&ҚD$TM{xMi:%5DZf#Ӌc$ - -<"k߇4lO.Ast9TMXxH!qlzvy&2EZ0yMED׿8i6S2]LU"sUt" 8Cst .kk[]>1.bуm*&p<O&a d<0GCDiōǨIwk[Z6&2EZ0yMED׿8i6S2]LU"sUt" 8Cst .kkc&ҮL1h6^8᧓`}Nw2 T#UЊl4ƋA Ӌc$XdE EQ6qcCFA Ӌc$XdE EQ6qcCA Ӌc$5| sShQ5Áy6 pS H:]&N,hpxH!qlzv!6- 2EZ0yMED׿8i6S2]LU"sUt" 8E ű]̄jk"-<"k߇4lO.Ast9TMXPxH!qlzvyo.bуm*&p<O&a d<0GCDiō ǨIwk[Z)[@d`D~pɰm>XdE EQ6qcACE ű]ָ[@d`D~pɰm>XdE EQ6qcACE ű]M5| sShQ5Áy6 pS H:]&N,h(h@$8=BKZٶ- 2EZ0yMED׿8i6S2]LU"sUt" 8Cst .fA6- 2EZ0yMED׿8i6S2]LU"sUt" 8Cst .fAS\Ȁ1h6^8᧓`}Nw2 T#UЊl4ƂA Ӌc$5| sShQ5Áy6 pS H:]&N,h(h@$8=BKYJk"-<"k߇4lO.Ast9TMXPxH!qlzv!6ښDHF)H <uK)j\jUa44^ nn[%ݭmk`o.bуm*&p<O&a d<0GCDiōǨIwk[Z6o.bуm*&p<O&a d<0GCDiōǨIwk[[6- 2EZ0yMED׿8i6S2]LU"sUt" 8Cst .kkfS\Ȁ1h6^8᧓`}Nw2 T#UЊl4ƂƋA Ӌc$Mr"$\ţ$TM{xMi:%5R.x`5WB*Ӌ / 77N-PdF- 2EZ0yMED׿8i6S2]LU"sUt" 8Cst .fB2m)[@d`D~pɰm>XdE EQ6qcAcE ű]̄jk"-<"k߇4lO.Ast9TMXCst .kk[5| sShQ5Áy6 pS H:]&N,hxxH!qlzviMr"$\ţ$TM{xMi:%5R.x`5WB*Ӌ4^ nn[%ݭmljk"-<"k߇4lO.Ast9TMXCst .fAS\Ȁ1h6^8᧓`}Nw2 T#UЊl4ƇǨIwk2iMr"$\ţ$TM{xMi:%5R.x`5WB*Ӌ4^ nn[%ݬMo.bуm*&p<O&a d<0GCDiō ǨIwk[[6- 2EZ0yMED׿8i6S2]LU"sUt" 8Cst .kkfS\Ȁ1h6^8᧓`}Nw2 T#UЊl4ƃA Ӌc$ɴo.bуm*&p<O&a d<0GCDiō ǨIwk2m[@d`D~pɰm>XdQ5R.x`5WB*Ӌ4^ nn[%ݬZ0yMED׿8i6S2]P<0GCDiō / 77N-PǛbуm*&p<O&a DH:]&N,hhxH!qlzvZ0yMED׿8i6S2]P<0GCDiō / 77N-P6-<"k߇4lO.TMT#UЊl4ƆǨIwkBуm*&p<O&a DH:]&N,hhxH!qlzvţ$TM{xMi:% st9TMXxH!qlz 2kuq`D~pɰm>XdQ5R.x`5WB*Ӌ4^ nn[%ݬZ0yMED׿8i6S2]P<0GCDiō/ 77N-PǛbуm*&p<O&a DH:]&N,hpxH!qlzvZ0yMED׿8i6S2]P<0GCDiō/ 77N-P6-<"k߇4lO.TMT#UЊl4Ƈ ǨIwkBуm*&p<O&a DH:]&N,hpxH!qlzvţ$TM{xMi:% st9TMXPxH!qlzvh6^8᧓`}NwBj\jUa44^ nn[%ݬZ0yMED׿8i6S2]P<0GCDiō/ 77N-P-<"k߇4lO.TMT#UЊl4ƃA Ӌc$F)H <uK*U"sUt" 8ѢCst .bуm*&p<O&a DH:]&N,h4^ nn[%ݬZ0yMED׿8i6S2]Q\)DZf#Ӌc$c͵]>1h6^8᧓`}NwEpi`7N-PֶUShQ5Áy6 pTW Qst .kk\Ftdţ$TM{xMi:%”Ea:8=BKZɴ&-<"k߇4lO.ਮ-3 ű]̃mɋF)H <uK*+(Lt9qlzv *ɋF)H <uK*+(Lt9qlzv 6&-<"k߇4lO.ਮ-3 ű]̄dUShQ5ÁsЛ8hop04;`xwP4 4 ÁǛsU]ۮc-e,S0(":%6DV`j<4(@0"P 3.׮:͜{*4bM2Oy`V‹[)6FVRs*YFم1cvYc 2G WV9jF9o3td@XWV2t \-~`nq^qX@ȮnVn]jEѫX8hh38A#;0788Bx *20/c:nM'i\(38>ViW3qvai fbFV)stHs#[mΌ0`R(?0EEj[i:F<۝ '<{WSQjŻ ι6Fc̔;a E7O 8&N0  ѿ@h(xpW4ViW3qvai fbsdݺswtnk{#+a$96F 0)FZ"5M-s#[mΌopYv=ϫ({ɵz݆R\Ǜs1J̈́F"Л{ztÀ?hAh4 8h+ }6F \s51JpQPDFȁ , P0(BJfqX E׺Y71oyC sN , ++@hp<" 1Ҋ߀mѫ [5x#  g=gxWFHO%FFte}\s'M#;0 4Fg2*c:n8b@l#M52[':dp p&F388"x h P(`@4?4`of0Ed*c͹хU\jefǛsU]ۮc̥8e$,KHZp`pEl`PpiA4h8  smUYV9)6FlMe1>f)H ; Āp'p QҜn@IFah%F@Ǜs5[I&&'<{WS׷[s[MP[ !̍ly:0`H2VNFo9mnt`'tnk{̞\}]NG[M2:F<۝2P.l"0)<4sЛ84g7`( @ Wcv.%F ,S0(":%6DW P0(BJgx E׺Y71oy h-X쵰Y ntaUe.2p0QaLy:0eXݺ2w Q 2DC84 RȬ ]ƇCq@8XdE 楏T [Z Qtnk(dqnEQ6 ShQ5Á&N0     P,4ᠯ7hx {mΌV1wnuFc 2 Ή@G@X8` `P @u뎳g(.nby r̓@fq^qX04Dhpof0Ed*c͹хU\ʝuFefǛsU]ۮc'pcQ̥8eFeFю[ $]2|s1̝7W:1}@XWV8xD@!c:2+fۣWxtj&F3 +{=>%M++$J*3&N Fw`t ios7J<+kefU2tq<1FkeOtL,fq^qXD($P 3@$hс‹[)6FVRs*w=mSmΌV1wnuFc 2D"@N , Ej0 A@ QCpiA0ѠP, 9QaUeXD<۝Qs7UǾcx<"k߇4Tc05F3Jq 'emΌ)m'Л`̞\}]N##^uno}7Cel27D25"@TYY9Ʃ嶟Sdkc͹рѹ 2zsǹu;o6\[\ntfFV)stHs#[mΌ0`R(?0EEj[i:F<۝ '<{WSQjŻ ι6Fc̔;a E7O 8ЀDIFم=Ê̢&a d<0GC=S)mj:*tnk(dqnEQ6 $TM{x&N0  ?AF  4 A@ ;Æ(?nt`ʱuaf:3 фJpQPDFȁ , P0(BJfqX E׺Y71oyC sN , ++@hp<" 1Ҋ߀mѫ [5x#  g=gxWFHO%FFte}\s'M#;0 4Fg2*c:n8b@l#M52[':dp p&F388"x h P(`@407Qk`"e1ª]ۮec0J(0<۝2bsYta*0afR2ȂrV $FCA8h08j"@hpn (84f4 smUYV9)6FlMe1>f)H ; Āp'p QҜn@IFah%F@Ǜs5[I&&'<{WS׷[s[MP[ !̍ly:0`H2VNFo9mnt`'tnk{̞\}]NG[M2:F<۝2P.l"0)<4sЛ88Pxh(( P,4ᠯ7`,dk&`6F \h0<0@@ѧ `AF AXh7Æ_ mΌV1wnd DcJ9LG(06Dk%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bsBQaUeXD<۝Uh9 ΠZphxyd˭8@"@H @Yo& tITg# Xnt`ʱuc%J'9FمUcntaVs?J4fJgHNP?M84<<2e֜ $xz,$3,y:0eXݺ1%lªʱΉLy:0YV9)[[k%3Nd3$iz{'s&֜C%3Nd3$iz{'s&֜D!d0lªʱΉLy:0YDk8 *:%1­e]aFمUcntaV.UtJ[ZqfVUtJc͹хZ YV9)HL 6*Ǜs AvsT$&qfVUtJc͹хZ YV9*ٹQaUeXD<۝UfaFمUcntaVsSJv(0sSmΌ*S% qfVUtJc͹хZd= rgQaUeXD<۝UJ#@K{aFمUcntaV(q-j0NqfVUtJc͹хZd= $X;i0A,  ÿ P,4A_oX/=6F \2P2 mUYOp"@0f*C2ÔmUYV9)6FksmUYV9)6Fk*:8(4fVUtJc͹хZ ^lªʱΉLy:0YDk*:848fVUtJc͹хZd=0a@xhh( @h(xpW0 aǛsU]ۮc(BQptI[Zq^ xI@p@ (^fP\Ž1s'ȀÊ8dY3@A1qC  !CC1*Tчq^ xI@p@ aVoa`Nxpp 01VudkD*&.x0Dy25]pt+-q\ֆ>֎A80Cn:!#=P0q]&NAH?C̚s\fƄ7N>փ΄@F{Q@su']`% P ֝ y:0c4t'5B*zp΄Y9pƄ橓.FZd iAO4c͹ъ"1sA(@u#\^%OQ7#;̞\f,Qb n1st\HJ &NP\a3e i+ (&FBZ[҈ Q!k2F`L= 1stqXEq!EKc* 1˝7tb1stqXP*@.nqJHJ &NP\a3e iEP 8 \VB1{Q b1st%d+Z@$+ֳ+kVcy7J7̊琩o}7t#XVYdk1q!X|5WB*F97J+ylG\{F-@XO25VLӡ6F( #O-P :p4 Ґ#B{Q5R.`ㅹTMCnn } Nn }P\<:Ią#!-q -bD]tdu5#0&QQABsT,CmΌ P <4s9ANnpМ2e֝A.AT,:aRFZd3N<۝/,c4,Lӡ6F( #O-P :p4 Ґ#B{Q5R.`ㅹTMAcPp7N>փƄ7N>֣*%H8\Nzt q -bGd̍`tdu5#0&QQABsT,CmΌ P <4s9ANnpМ2e֝A.AT,:aZFZd3N<۝/,c4,)/lªʱΉLy:0YV9)21xQ@ @hIAQHQaUeXD<۝UǙ Z/ n( `D  4$@(B2xL"H0 `D  4$CÁ6^{ <0D~B d˫9@H 2 *:%1­eXD=kYe Eᄰ` #^@/ & (!0LB2~ 44pɰ!SpYos7J*sw& (45pD FHZ ڹ!Hq8P@$$iN7"P h x@Ndj!HQaUeXD<۝UǙ Z/ n( aQH=HmUYV9)6F,Ly*3 2x` D(p D( D(ABt-vM :b&֝8Y2M dMuD:pA[$JQrp8\W U+Zq $JkN4diANnPp4 ɚt diACuBFZd:RtApS it1-սPist7N>֥ m*E+Ep]>=:@F8,nL= 1stfJ3ARd=ϭ:nt`.h?W T, ?W T,8p,U9*t2 TPR!C(@R!C%5s!Dp  z(q2PԀp&O ˆH\)!04"(  H@(4C/ e[ͬzā0 x ,Fxx8`,(x ,Fxx ‘ # บS%.-s#Q‘ q5oS% J\[wDf}aHO‘ \,xxnǛs1sÁQ)`jj߁24ҎB u[Ϭ|Eׄ']FP&R!CvPPU9*?ӡ:b&֝?2Ѓ T䦺"TfdMuDp ?ɗWS b  J@8iLkQAFمUcntaV2e8=CHQD⒔)JR)JR)JR)JR)JR)JR)JR)JO+T:5:,c:Ck %!s(W25']Bnr>:h'(V̞!v띂O+#!*%Fsn ! |ʌt!kV{Qs(DZx2<{C0=,dhJ5)d%sEח'F`|e<]sc!,HGd\Q24O-9bR0ĝ2#0lcg25stK6{so~\9tW<Ȯ{t0⒔)JR)JR)JR)JR)JR)JR)JR)JO`& A@,80'{I !d= h2Q0@OpzED{ǩXZ'`8=CHQ D{ǩAq5oS% 0N # hD$@?}$(d= cAѕф2Q0XD @P  =Ϥ=Ϩd= c=ϨսLG8<(?D`8=CHQ#e2Q8'DIs!DAbmS% T&d= D#1B 'Jp &s!DAbmS% T&#jd= D{@HO'{I "F-(qbS% 0N   ("P:S 0< H9NP>DZ.$S% TZ-LG8<(qCxD$(&8=CHQ'F d= cYta*1P\M[D{ ˆ? =Ϥk,J#@=VսLG8<(?  s!DMS% Tjd= D`!L   NP>DF d= c;ф2Q0L  PH pz'pcQLGLzpcQ(qpxQ@& 8=CHQ-tJd= c;ELG8<(?`8=CHQK(qjd= D`! s!D @DJ#@=BPTV2Q0ka?@0NP>$O'{I d28}9e*֧4'{ADFX q8=C8j%5A[$JQrp9?W U+Zq$JkN4iANnHhzFZd3N<۝/,c4֢ mj\ "TW Uӡ Ztʍ1st']情pB({Zt1\pY]ONpY9pirU 4(0sSmΌ*QʱΉKkPp#BBtBM:pesӡ dMuD: 6*Ǜs AvsUQsk%F lU9)Hs=:#&ՠq\)ViƜ,m*8ӅY9tÁ!Pp4 ɚt1ycdiACuBFZd:RtApS iㅹt1]P\<"ENn }DkT$&;AȮ•tdAV2F-e\(8,nq\)P ֝ y:0c4.+*AWSӇ.+*ANn4pABt: 6*Ǜs AvsT$&:p*miЃ#+8[ NJk%FiQaUeXD<۝U cMpjk%F lU9)Hs=:Yos7J*sPppVNIo6n ֜iT,:a,֨.+!H8\hNjstABsӡ P ֝8\NjUN:dƜ.4'5LuCp˽:p4 7N,FB'̍f:dy> 0)0DBADxh< ʙG D( D( *:%1麬=MED׿8nP n"?B F[% i<۝PB[$JSmΌ D( D( D(AǮɠlU9)]ۇQrp8YPSڨBH{TW ӡ S&]i,c͹уq\)P ff XM")mntbݏ6F*+m6&P2;mΌTW D( D(AǮɠlU9)]ۇQrp8YPSڨBH{TW ӡ6F*+ q9d˭:"Y9t diAO4AT,.N,c͹уq\)P iRdƜ.d˭:ANh8[ NJcvrS&NAHɋ|dHfVUtJc͹х7=uYD*j|2mEp8ShQ58R!Ch@ !0A efVUtJc͹х7=uYL{폹0J$0yMED׿_5`nb@`YX"? 9n,yۣ8\#fYǹ3 D(# Dp0H( nTW HnpyMED׼ ^mъI 4BADaHXF,@ }EcM‘ d˫9lUEcMHQDaHQTV9ԀpQaUeXD<۝Qs7Uɰ!S"#@Z@x< L=k$ m*&' D(s~`ۣ°d00|`U}7JpˆLG D($ P@@ ` $ "@ʵ !@ۣ°B@$(,ˆ,j 2kuˆP6Ep)XR!C bQ%Q8ULGQR!C bbXD ADaDVTYNo}5W5ݺaDaH=R!C *:%1­eXD֥ m)МԶdVBMEҊ:Zl MR.h?ڢRL?W ӡJP>ARdu=8pB)Ӎ?ɗZt A4j%1pzt U9)]ۇQrp?PSڨBH{TW ӡ S&]i֦TEv'B´ARd=ϭ:nt`.h8\W T,pY9q 2NpesӠ5Sݸy=:5Sݸy0p 9`I`#~'u}7 D(.`U}5!D"?F[QXRAFمUcntaFtVS&O A$iipTg-R@ 2 # [ͬ4v)H)+f2d<ۣ:.dk6+s25ٖl} D(# Dp0H( nTW HnpyMED׼ ^mъI 4BADaHsnTW NAˆQTV9)ˆ8 #H@ 25)1A@ RB((ʜ *֦J#@(snTW ‘ u"?( a0 HQY[ YSeZD{"?aHQaUeXD<۝ULjFǹ0ˆDaˆDa@8( a0 8j%1ph8[ NJcv\c'ENn@F59bĔ=+iЃRi{U´茛VƄ橓.FZdЃY>Lӡ #O-P :p4 Ґ#Bs”EԶe*4'59t1-4EVՠ.nTajsAȮ•tdAV?W T,CmΌJUO• 7N4&]i:@ztArS'ArS&NG2{%QRBDd˫(.@8m !^˵Q1; T K%F`1[VNP #ONJN2`$OYU铦b= T=wnMdLz<{dZbĔ=+iЃRi{U´5 S&]ic͹уq\)P iRdƜ.d˭:#+pAǮ T=wnL d˫1B P&]]O@hА$(@R!C"?HDPM efVUtJc͹хZʱΉLxa;_ᗅb 4$BDa8HDPO!HP 6x!< PL"A<` N(B xDx@Ndj!HQaUeXD<۝Qs7UǾӬ$TM{x"?F'$ FP2(qL[VPT2!H=H=HL#, PPU9)]ۇArS&s=:-jsvJ5p$Q\+N-#MPSڨBLӢ(8YyjSBFZd3N,֥d= 2Y&tR.h8YڢRL8\W Ӡ!CnZ• }iЃpB*zpӅpB)Ӂ 2Npesӡ dLz<8[ NJcv\c'BbĔ=+inFMA)4u=Zt q9d˭:"Y9t diAO4AT,.N,֥(qL[VJ-YpМԶb"ENn }KkTD{e*钋Va5[JsAȮ•tdAV tpYsN.+*AWSӇ.+*ANn8\ɗZt1 FW=:pAǮ5Sݸy0p D( *:%1­eXD>֦K[Wp‘ FYA:0),)rS& T=wnME=zt/N#&჻tMAXEp:-Ӡ6 dT=+iЃƄ橓.FZdЃY>Lӡ #O-P :p4 Ґ#B{Rq:Z֌2:F q9ӡmh.EҊ:Zl MR.h8YڢRL8\W ӡ JP>c͹уq\)P iRdƜ.d˭:#+pAǮ T=wnL d˫1B P&]]O@hА$(@R!CH+H<;sR!C̙uu=֣-s ()j0rت> 6*Ǜs 6n{겘6*xdDp#KH=qo’$ GQ`m` pyMED׼HX#5s%) Yu#YFq\+F̳gsfPFˆ` Q@82&Dx ۣ’@h ‘ #(%)8֣-sSp(&Fdj8R!C bQ%Q8ULGQ "?> D($ P@@ ` $ "@ʵ # D(‘ >dk2:bGPx!0@ 4$$hH  6*Ǜs chv (PD F(4 ($(" # (B` @hI@H @C!HGx!0@ 4$$hH!$ F"?c̍fQ\\(\‘  1 efVUtJc͹хZʱΉD*j|*+ K0+d ) UcC!HP i lªʱΉLy:0YV9)6'k2x>tfxQ& @(1Q hB@PHPD F' `$)‘ P <@В @4 ~0x$)?#pH '25)eauc<; 61tHfQ\\( >3-i׏dD` 3 8pR!CЛPPP2̦dBBdLz<5Sݸy5+ kSP.QNjbĔ=+iЃRi{U´ABsTɗZtE #O-P stAT,&iЃY]֝8YyjPHӡ=Q\)DZ`8nn }KkFMqɪ(8\hNjstA\(ӡ"情]+*Ѓp:pYsN<۝1• Ɯ.+*ANniLӡ8Y2M dLz< NJcv@ ()LPD 8hQH2e$p A AABD"8R!CЈ A@) mUYV9)6Fk*:%1&ф^@ (" # f@@hА04"(@ P p8 HR!C~qҜЈ A@+H@ ̍D)6*Ǜs chv2xa?/ 3  4 hH  p "?>)e-QLPPPU9)]ۇArS&s=:-jsvJ5AXEp:pJ@5COjV8\hNj2NdiANn8YyjS:p4 ˺ӡ #O-P ):t *+(L-ӡmjd.4'59t r.nTajsAȮ•tdAV8\W T,CmΌ JUN• 7N4s&]i,\& T=wnONj%1p` P&]]O ("HQ4(B2x@8 A!Dp )?F4$Bp@"PT<P$B ,-a *:%1­eMTjd=2es#Q D(@ PB@XD(8$L\ *:%1­eMTjd=2e #@&$ P p8 ӄ!0@ ,~M@H a@p(h@~R!Cc6ݭmjDB ,/tPaaefVUtJc͹хZʱΉLxa;^c͹уq\)P iRdƜ.d˭:pesӠ5Sݸy=:?AǮɀPXXXXXXR!CmUYV9)6Fk*:%1&фk,0G0"PH@ B ‘ j%1ph8[ NJcv\c'BXW AXEp:pJ@5COjV ,98\hNj2NdiANn8YyjS:p4 ˺ӡ #O-P ):t *+(L-ӡMe֧5 Nn }D*k,]ML j3SȹQSCkSM E "TW Uӡ Zt q\)P ֝ y:0c4.+*AWSӍ8\W T,8Ӆ̙uB@ztArS'G5Sݸy0p D(  @8(0sSmΌ*UtJcM Y/ < !0AAB -"?0D@@&BHaH5Sݸy4-j%1pj.W1ӡe1st5 1bJ{U´A)4u=ZtZq9d˭:"Y9t diAO4AT,.N,֢5ZJ5ABsSCkQ -WSSmΌTW A\(ӡ"情]+*Ѓp:pYsN<۝1• Ɯ.+*ANniLӡ FW=: lU9)]ۇӣdLz<8"? @A efVUtJc͹хZʱΉLxa;Z/DpТ0$p A AAB -"?04 ($(" D( D(AǮɠlU9)]ۇQrp ,98YPSڨBH{TW ӡrFjsPpМ2e֝AT,:p4 ɚt diACuBFZd:RtApTW Q8[CkQ -WSSmΌTW ABsSCkQ -FS\e2h8\9t14@\p+Ep]>=:pB• }iǛs1sARdu=8xѣF.+*ANn֦TEv'B´ARd=ϭ:nt`.h8\W T,pY9q 2N dA4-j%1pztU9)]ۇ'BB ‘ j%1ph8[ NJcv\c'ALbĔ=+iЃRi{U´ABsTɗZtE #O-P stAT,&iЃY]֝8YyjPHӡ=Q\)DZ`8nn }P\<:ZTYh8\9t14@\p+Ep]>=:pB• }iǛs1sARdu=8ӅpB)Ӎ8\ɗZt#+pAǮL#-kQL T=wnME=zt f,ICOjV8[% FQ\+N)24.4'5LuDPp4 7N,c͹уq\)P <4q\)P stࡧ 2N dA4-j%1pztU9)]ۇ'B2xLAABD"?ɗWS4$B PH0FمUcntaV*m2Q 2H9"?   ,"C֦TEv'B´ARd=ϭ:nt`.h8\W T,pY9q 2NpesӠ5Sݸy=:pAǮɨ\ǸON,ʼn({TW ӡ dT=+iЃƄ橓.jFZdЃY>Lӡ #O-P :p4 Ґ#B{Rq:ZW4.4'59t1p7J*stcji5HdWjJ}2zt q\+N.+*ACӡ6F b情pB*zq JSp. FW=: lU9)]ۇӢF[kT楖Z5Sݸy5+ Ѓ%u=Zt ljEp: dpМ2e֝AT,:p4 ɚt diACuBFZd:RtApTW Q8[CkT楖Z:ZW5,.EҊ:Zl MR.h8YڢRL8\W ӡ JP>c͹уq\)P iRdƜ.d˭:ANh8[ NJcvArS&s=:p$Q\+N-#MPSڨALLӡ8YyjSBFZd3N,֨IMFUV lU9)]ۇQrp8YPSڨBH{TW ӠkM S&]i,A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnHh1#O-P |CmΌQ1{E5WB*Ӡ8jԶdVBMH[=+i'{H?W Ӡ s .pB({Zt1\Y]ONY9pQZLӡ?FfTɗZtA30Zӆ2Mq:RY=zt U9)miЃ T䧺ArSs'̙uu<0& A@d˫( 0H9%)JR)JR)JR)JR)JR)JR)JŘd \#FVFTgP.Q+UQ=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stCA?yjS:ntb\s5R.`TM?CkRѐ\M[ 6"h?]lPSڨB´ Jt5dd%cJ^G}q'LkomX dkk-s#Z >".a|Ȯg\ }c㍞Ew\57tȟ-nIo6b• }iǛs1sARdu=8xiRdAj2N3 d˭:&pVOe)t C'B5S뚡&֝? NJ{zt U9)\ǸONnUӡ$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZdЃY>Lӡ#O-P :a!#O-P ):t1yc)j\ sUt" :nn }KkTD{e(MVҤ\pءQ\+N.+iFtg6#0Y&{t @(.+*ACӡ6F b情pB*zpӅpB)ӆ"2e֝A30LӢh8]FfU+Zq 2Mq:p̡ӡ dOuPkN-j%==:rSs'B(0sSmΌ(ٹcO6'M),)rSsArSsQrpjpWOONdiNhON4muKyzt dj }iЃ[ͫT,pKyjSpMDjAT,:p4 ɚt diACuBFZd:RtApS HEQ6t A:Z֩4U%jN"情u=Zt q\+N*38ɵxJ-YOnaDpYsN<۝1• N• 7N.Ed˭:fa5LuDp&pVNe)t eC'B5S뚡&֝8[ NJ{zt2 T䧺NAHQaUeXD<۝Qs7Uǒ"mOXR!CXR!C T䧺情 T䧺s=:#&ՠp5rLA-ҝОi-DjA-ժACӡ $VY]ON4dj 7N4kp-ЃY9t diAO4AT,.N,< G.np6M+*ACӡ6F bpB*zppB)Ӈ.Ed˭:p&.zQn ֜i̡\e7N,({ArSsT$ӡ dOuNj%=0p D(Ieay:0c<8n@73:"TaM (H%\[p,@ e F?$X h8ShQ58R!CV|eJyFu]EmќW .dk,"?p8@`D$FF*+$7 p<"kp/6Ep! 0Bp9F*+`' JaD`ub+nD $ PH @)!DIfEleNkS% B9F*+aH a0 HQY[ YSe:75\dv띅mъXR!CB@,"I K0+d *p,Z(q0B@$(,ˆ,j 2kuˆ‘ {B(0sSmΌ*UtJcM uD^8(& @+‘ V\HW25J4eq|6e<{@|Q̔t`)tbVp FJ86Ep bbXD B(0sSmΌ*UtJcM іL bbXD  ‘ j%=4-j%=5+ Ѓʺ}2ztE $Jt[Bzq k[ͫӡ $VYsN,mZdu=8Ӆ[ͫT,8Ӆj$WBFZdЃY>Lӡ #O-P :p4 Ґ#B{Ep5WB*ӠjԶMuD2P-R.h8[]lPSڨB´ 5˦8{24ҎyG$\ JP>c͹уq\)P <4q\)P stAZLӡ8]FfTɗZtM jkN4fP2BY=zt lU9)miЃ T䧺G5S8"? #Lw ϦH2eZ*Ϧ(0Bub+j@8(0sSmΌ(ٹcˆ d- `@@^żW H&QDaKy@`@@Á6^"9`Iąs#\FY#fYǹ |eJyF ‘ g@0@h 6Epp7$TM{N8@`D$FP 6Ep$D)L(9lUEcMҜ(A00$#Q‘  $(,ˆ,jd=P6Ep)XR!C bQ%Q8ULGQR!CvPfVUtJc͹хZʱΉLxa;^<{:3 (F&1A@ PR!C"?"? NJ{h8[ NJ{j.W1Ӣ֧5 tdIo6趄NYj$WBIo6P ֝8Y%ڵB*zq $VY9q [Io6N,c͹уq\)P <4q\)P stN"2e֝A30Lӡ jkN4fP2BY=zt lU9)miЃ T䧺AFمUcntaVsSpA\\c'B_7*,m)m Ɯ-Io6N,mZd=ϭ:pKyjUNIo6P stN m^8YyjSBFZd3N,֦EpءQ\+NJ5AV8\W T,B• Ɯ.+*ANniZLӢ(8]FfTɗZtE jkN4fP2A4,({ArSsT$ӡ dOuN-j%=5+ Ѓʺ}2ztE $Jt[Bzq k[ͫӡ $VYsN,mZdu=8Ӆ[ͫT,8Ӆj$WBFZdЃY>Lӡ #O-P :p4 Ґ#B{Ep5WB*Ӡ5 stcjj\ k{U´Ye\(AV8\W T,B• Ɯ.+*ANniZLӢ(8]FfTɗZtE jkN4fP2A4,({ArSsT$ӡ dOuN-j%=5+ Ѓʺ}2ztE $Jt[Bzq k[ͫӡ $VYsN,mZdu=8Ӆ[ͫT,8Ӆj$WBFZdЃY>Lӡ #O-P :p4 Ґ#B{Ep5WB*Ӡ4jAv-TmuCOjV8\W Ӡ@.npH8\W T,CmΌ JUQRdA j2N.3 d˭:&fa5[,5StH8YfP -j%=5BM:pA\ArSsQrp8\ |ܫ'BIo6趄NYj$WBIo6P ֝8Y%ڵB*zq $VY9q [Io6N,=:pKyE'pQ%ڽ:pKyjP>A-ժAWSӍ8Y%ڵB)Ӎ8Z&Kyzt diANnHY>Lӡ6F( #O-P :p4 Ґ#B{Ep5WB*Ӡ5 stcj Z֪EpءQ\+Np@ FJRmZ• }iǛs1sARdu=8xiRdA j2NuMS&]i4.3 8ӅB&n) ,=:-j%=5BM:pA\(0sSmΌ*QʱΉWMF5S뚋{茛Vʺ}2ztPpKyE'pQ%ڽ:pKyjP>A-ժAWSӍ8Y%ڵB)Ӎ8Z&Kyzt diANnHY>Lӡ6F( #O-P :p4 Ґ#B{Ep5WB*Ӡ5 stcj Z֪EpءQ\+N.+i Yos7J8(=f̞a.h8\W T,CmΌ JUARda j2N.3 d˭:&fa5[,5StH8YfP lU9)miЃ T䧺B5S뚋{Ak]>=:pKyE'pQ%ڽ:pKyjP>A-ժAWSӍ8Y%ڵB)Ӎ8Z&Kyzt diANnZFZd3N<۝/,c4,֢ kTmuCOjV ,.+i Yos7J8Ip.+*ACӡ6F b情pB*zpX(q\)P stȵLuBQ2e֝A30ZӇe)t,({ Z5S뚡&֝8[ NJ{zt lU9)\ǸON.nUӡ $Jt[Bzq k[ͫӡ $VYsN,mZdu=8Ӆ[ͫT,8Ӆj$WBFZd   diAO4c͹ъ"1sAT,.N,Lӡ6F( #O-P :p4 Ґ#B{Ep5WB*Ӡ5 stcj Z&y5H[=+i55"Tb´ԉQJMARd=ϭ:nt`.h8\W T, 8\W T,8h0r-S&]i.3 d˭:&fa5[p(DMӠ eC'@` T䧺IB5S랝 U9)PR!CmUYV9)6FlMe1䧈F&R!CS4B ‘ j%=4-j%=5+ Ѓʺ}2ztPpKyE'pQ%ڽ:pKyjP>A-ժAWSӍ8Y%ڵB)Ӎ8Z&Kyzt diANnHh- #O-P |CmΌQ1FZd9wZt diAC GN2 T8njUa@,jAvBMpjs-({TW Ӣ&p: -bGe'sYl1 JP>c͹уq\)P <8\W T,8,8r-S&]iЃfa5LuDp&pVÅB&n) ,=:-j%=5BM:pA\ArSsQrp8\ |ܫ'BIo6趄NYj$WBIo6P ֝8Y%ڵB*zq $VY9q [Io6N,֨IMFUV*E k{U´AV:}2z>Fa4\HVW-'38ՠq\)P ֝ y:0c4.+*AWSӇ.+*ANn4p.zQ2e֝8]FfU+Zq 2Mq: eC'B5S뚡&֝8[ NJ{ztU9)PR!CmUYV9)6FlMe1lT8Q ,9+$&L& k$ jMm\׀/ e;D$TM{BpҜn@H&FS$ *:%1麬>M 0G !e1st5 7\[pPLHJx 8(0~Io6@:֨Tx D)tgp<()AH?@8(0sSmΌ*UtJcM Yb8hQhH Pfa 8` B!/a42`4@$ P hBhPx PR!CQBBBdOu dOuE=zt,.nTp5rLA-ҝОi-DjA-ժACӡ $VY]ON4dj 7N4kp-ЃY9t diAO4AT,.N,֨IMKABsSCkQ -KA\(ӡ"情]+*Ѓp:pYsN<۝1• Ɯ.+*ANniLӠt,\& T=wnONal}P\<9)25E dLz<{AXEp:pJ@5COjVS\e2h8\hNj2NdiANn8YyjS:p4 ˺ӡ #O-P ):t *+(L-ӡMef q9ӡMe֧5KA\(ӡe5.s1 "TW Uӡ Zt q\)P ֝ y:0c4.+*AWSӍ8\W T,8Ӆ̙uB@ztArS'G5Sݸy0p D( *:%1­eXD֦TEv'B´ARd=ϭ:nt`.h8\W T,pY9q 2N,\& T=wnONj%1p` P4A8ApQaUeXD<۝ULjF ^@ # x  B`! "?[@$$ D(a`&L&  ‘ j%1ph8[ NJcv\c'B-bENjbĔ=+iЃRi{U´赩ABsTɗZtE #O-P stAT,&iЃY]֝8YyjPHӡ=LU"8[Di5 stcj{jYeEKAbEp:p@NL1stfJ:~uDn Yos7J7|pYsN<۝1• N• 7N4r-S&]i.3 d˭:p&pVNe)t eC'B5S뚡&֝8[ NJ{ztmUYV9)6Fk*:%1Z/^@/ %,'/ eg dOuE=zt p5rLA-ҝОi-DjA-ժACӡ $VY]ON4dj 7N4kp-ЃY9t diAO4AT,.N,֢5ZJ5R3pМBUǛs”.EҊ:Zl MR.h8YڢRL8\W ӡ JP>c͹уq\)P iRdƜ.d˭:pesӠ5Sݸy=:?AǮɀPXXXXXXR!C  FQaUeXD<۝ULjF ^@ #@hА`$)߀p  R!CH @@!BBdLz<5Sݸy5+ в{QS%u=Zt ljEp:((f5 S&]i,=:pB• }iǛs1sARdu=8xѣF.+*ANn֩K,4^ShQ5<uK)j\DiōԶc% I1z0yMED׼lO.AstnjUa4^ nn[kR2QJc͹ъs$TM{&a d<0GFEQ6qcE ű-S% ita5[Js$TM{&a d<0GFEQ6qcE ű-S% iJ-Yn*E^ShQ5<uK)j\DiōԶLGRӫT<"ky6 pS H:75WB*Ӌ/ 77N-mjdQdZ\6^ɰm>XdE ѹTMXxH!ql}KkT[$JT<"ky6 pS H:75WB*Ӌ/ 77N-"/F)HMi:%5R.x`UЊl4ƋA Ӌcj{jYeE^ShQ5<uK)j\Diō\ԲT9/F)HMi:%5R.x`UЊl4ƋA Ӌcje\1j{j0\6^ɰm>XdE ѹTMXhxH!ql}KkFAq5oT$Tуm*&`}Nw2 T#sUt" 8ѢCstZ;$TM{&a d<0GFEQ6qaE ű]KkU"b`Dy6S2]LU"]&N,4h@$8>֢ kTуm*&`}Nw2 T#sUt" 8CstZ֌jިI;$TM{&a d<0GFEQ6qaE ű5R.v/F)HMi:%5R.x`UЊl4ÆA Ӌcj Z֪E6^ɰm>XdE ѹTMXpxH!ql}DkT$&;$TM{&a d<0GFEQ6q`CstZ;$TM{&a d<0GFEQ6q`CstZ.֥sz0yMED׼lO.AstnjUa / 77N-j"b`Dy6S2]LU"]&N,4^ nn[kRѐ\M[ 6"b`Dy6S2]LU"]&N,4^ nn[kQԶR.v/F)HMi:%5R.x`UЊl4cE ű]P\<\^ShQ5<uK)j\DiŇAv-Tуm*&`}Nw2 T#sUt" 8CstZ.֨IMR.v/F)HMi:%5R.x`UЊl4E ű]KkU"b`Dy6S2]LU"]&N,4^ nn[kQ 5ɪE6^ɰm>XdQ5R.x`UЊl4ƍ A ӋcpY]ۮk 8>/F)HMi:% stnjUa44h@$8>/ 8Мű-$TM{&a DH:75WB*Ӌ4^ nn[khNjstZ&y1z0yMED׼lO.TMT#sUt" 8CstX@$BsS 5ɨʹc*6^ɰm>XdQ5R.x`UЊl4Ƃ űxH!Ƅ7N-kR36^ɰm>XdQ5R.x`UЊl4ƂƋA ӋcbC Nn[kQ z0yMED׼lO.TMT#sUt" 8E űxH!Ƅ7N,^ShQ5<uK*U"]&N,h0h@$8>/ 8МűAqY $TM{&a DH:75WB*Ӌ / 77N-A4'59ql}S<"ky6 pT*&E ѹTMXhxH!ql}P\VB 8z0yMED׼lO.TMT#sUt" 88xH!ql}^ q9Ӌ$TM{&a J"0Զ^ShQ5<uK*+(Ltnn[kRь#LUnX<"ky6 pTW Q8>֥(qBMz0yMED׼lO.ਮ-3 ѹql}KkF2QJc͹т`Dy6S2]Q\)DZf#stZ֌d= 2nX<"ky6 pTW Q8>֥(qL[VJ-Y6^ɰm>XdR0GFű-[$JSmΌ$TM{&a J"0Զc]l*1L $TM{&a J"0Զc]l*1Vz0yMED׼lO.ਮ-3 ѹql}KkFAq5oT$SM уm*&`}NwEpi`Ӌcj[Z0kMQ$TM{&a J"0ԶaA:0^ShQ5<uK*+(Ltnn[kRіTɵb`Dy6S2]Q\)DZf#stZ֌[/F)HMi:%”Ea:77N-mjdz0yMED׼lO.ਮ-3 ѹql}D*k,z0yMED׼lO.ਮ-3 ѹql}D*k,.s0^ShQ5<uK*+(Ltnn[kQ -FS\e2b`Dy6S2]Q\)DZf#stZTYj2)R36^ɰm>XdR0GFűu51Epz0yMED׼lO.ਮ-3 ѹql}D*k,]MLy:1Q\)K$TM{&a J"0BU@F59`Dy6S2]Q\)DZf#stZTYj((f5K$TM{&a J"0BUkS/F)HMi:%”Ea:77N-Me֧5K$TM{&a J"0 5ɋуm*&`}NwEpi`ӋcjԹz0yMED׼lO.ਮ-3 ѹql}P\<9)254^ShQ5<uK*+(Ltnn[kT$&f(kMQ$TM{&a J"0 5ɨkMM$TM{&a J"0 5ɨkMQ$TM{&a J"0 5ɨʹc*6^ɰm>XdR0GFűBMpj2Fʵ=5@^ShQ5<uK*+(Ltnn[kQ z0yMED׼lO.ਮ-3 ѹql}FT$J$TM{&a J"0:уm*&`}NwEpi`Ӌcj\Բ$TM{ Cᡠ`h0 a@w CX+nt`ʱuc%J#Zc&mhQ6S2]LTEa:77N-mh.&ꄛB`Dy6S2]LTEa:77N-j[Z/F)HMi:%5DZf#stZ.֨IL^ShQ5<uK)j0GFűP*R-M$TM{&a d-3 ѹql}SYjh<"ky6 pS H:75WB*Ӌ/ 77N-mhJ#APiR.b`Dy6S2]LU"]&N,h@$8>֥d= 2Ǜs"/F)HMi:%5R.x`UЊl4ƋA Ӌcj[ZJ#@)E,jN"/F)HMi:%5R.x`UЊl4ƋA Ӌcj[ZJ#@)WLZ :T<"ky6 pS H:75WB*Ӌ/ 77N-mj(qL[V1z0yMED׼lO.AstnjUa4^ nn[kR5@Hуm*&`}Nw2 T#sUt" 8CstZ֩H1z0yMED׼lO.AstnjUa4^ nn[kSM E^ShQ5<uK)j\Diō\ԲT<"ky6 pS H:75WB*Ӌ/ 77N-e5.s0^ShQ5<uK)j\Diō 5ɨʹc*\aHуm*&`}Nw2 T#sUt" 8ѢCstZ֌jިI;$TM{&a d<0GFEQ6qaE ű5R.v/F)HMi:%5R.x`UЊl4FA Ӌcj Z֪E6^ɰm>XdE ѹTMXhxH!ql}DkT$&;$TM{&a d<0GFEQ6qaE ű-սPiR.v/F)HMi:%5R.x`UЊl4ÆA Ӌcjj\^ShQ5<uK)j\DiŇ Av-Tуm*&`}Nw2 T#sUt" 8CstZ.֨IMR.v/F)HMi:%5R.x`UЊl4CE ű5R.v/F)HMi:%5R.x`UЊl4CE ű]KkU"b`Dy6S2]LU"]&N,4^ nn[kQ 5ɪE6^ɰm>XdE ѹTMX,h@$8>֥ m*E6^ɰm>XdE ѹTMX,h@$8>֢ mj\^ShQ5<uK)j\DiłƋA Ӌcj Z&y5Hؽ<"ky6 pS H:75WB*Ӌ/ 77N-j[Z;$TM{&a d<0GFEQ6qaE ű]P\<\^ShQ5<uK)j\DiŃA Ӌcj Z֪E6^ɰm>XdE ѹTMX0h@$8>֢ kTуm*&`}NwBj\Diō Ǫ&\A4'59ql}^ShQ5<uK*U"]&N,hhxH!ql}^ q9Ӌcj[Z/F)HMi:% stnjUa48h@$8>/ 8МűBMpb`Dy6S2]P<0GFEQ6qcACE űxH!Ƅ7N-kQr4Uуm*&`}NwBj\DiōA ӋcbC Nn[kT$&f уm*&`}NwBj\Diō 8>֣*%B`Dy6S2]P<0GFEQ6qcCƋA ӋcbC NnX<"ky6 pT*&E ѹTMX`xH!ql}^ q9Ӌcj/F)HMi:% stnjUa44^ nn[khNjstZW1z0yMED׼lO.TMT#sUt" 8ѢCstZ A4'59qb`Dy6S2]P<0GFEQ6qc@qCstX@$BsS/F)HMi:%”Ea:77N-mh<"ky6 pTW Q8>֥F:z0yMED׼lO.ਮ-3 ѹql}KkF2Q B`Dy6S2]Q\)DZf#stZ֌d= 2Ǜs6^ɰm>XdR0GFű-D{e*:z0yMED׼lO.ਮ-3 ѹql}KkF2QJNWLZ уm*&`}NwEpi`Ӌcj[Z1H<۝/F)HMi:%”Ea:77N-mhƺ"Tb(/F)HMi:%”Ea:77N-mhƺ"Tbb`Dy6S2]Q\)DZf#stZ֌jިI$TM{&a J"0ԶaL/F)HMi:%”Ea:77N-mh(t`<"ky6 pTW Q8>֥-dQj6^ɰm>XdR0GFű-k%J4^ShQ5<uK*+(Ltnn[kRMqɩ`Dy6S2]Q\)DZf#stZTYb`Dy6S2]Q\)DZf#stZTYj\`<"ky6 pTW Q8>֢5Zd6^ɰm>XdR0GFűe5S&f уm*&`}NwEpi`Ӌcj!SYejc͹ъB`Dy6S2]Q\)DZf#stZTYjntbR9/F)HMi:%”Ea:77N-MerFjsE6^ɰm>XdR0GFűu52P.QNj9/F)HMi:%”Ea:77N-Me֧4^ShQ5<uK*+(Ltnn[kQ -WSUNj9/F)HMi:%”Ea:77N-k$TM{&a J"0 5ɩs`Dy6S2]Q\)DZf#stZ&y5.s1FS\e2jh<"ky6 pTW Q8>֨IMKQL/F)HMi:%”Ea:77N-kQL/F)HMi:%”Ea:77N-kQL/F)HMi:%”Ea:77N-kQr4Uуm*&`}NwEpi`Ӌcje\1j{j0<"ky6 pTW Q8>֣*%B`Dy6S2]Q\)DZf#stZH)e/F)HMi:%”Ea:77N-us$TM{&a J"0:e/F)H4  A@ P,4A_oX/mΌV1wnhᎉ*a0 mUYV9)6Fk) Fә)L@^ILӄ x49]ޝe`DFr0%6F \4pqQaUeXD<۝U*qBQ4JS?2Fw:mi. cwYe%%Q& c͹у*.1smUYV9)6Fk)Έ8!(њs%)#K;@ 6ɗZpD@?ӬL蒨FcvƎ96*Ǜs 1s%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bs9FمUcntaV88J#@h9 ΠZphxyd˭8@"@H @Yo& tITg# Xnt`ʱucGfVUtJc͹хZhl)nlh9 ΠZp`,2N@(ǮNy0KJ9LǛsU]ۮc88n ֜4 ?0a@p(8h96*Ǜs XD=M[$J&?J4fJgHNP?M8xѧ.XD z,$3,y:0eXݺ1iC@6t`(0sSmΌ*SGc4ps!(2R4=kN4id˭8:-.*a0KmΌV1wnh+Zp 4<84F͆h4r *:%1­e4pqV9)SG5 Hh9 ΠZph,2N@(ǮNy0KJ9LǛsU]ۮc88n ֜88FٰӠ44 ?VlªʱΉLy:0YMUtJc΁r2`Fi̔ d/Odu$Ӈ2N@(ǮNy0KJ9LǛsU]ۮc88n ֜8p4F͆o(nlªʱΉLy:0YMUtJctAqBQ4JS?2Fw:miYd˭8:-.*a0KmΌV1wnh+ZpPqi :@@P3h96*Ǜs XD=M .FLh9 ΠZph,2N@(ǮNy0KJ9LǛsU]ۮc88n ֜FٰӠ<nlªʱΉLy:0YMUtJcѓhh9 ΠZph,2N@(ǮNy0KJ9LǛsU]ۮc88n ֜8 a`#fNh`3h96*Ǜs XD=M!(рFi̔ d/Odu$Ӈ2N@(ǮNy0KJ9LǛsU]ۮc88n ֜a`#fN 9FمUcntaV88ǩ2d Fә)L@^Ig.XD z,$3,y:0eXݺ1iÃ4F͆X078(0sSmΌ*SGc4pu Fә)L@^I42e֜ Q]ޝe`DFr0%6F \4pq8p,#Lli +AQaUeXD<۝U*:%1hqBQ4JS?2Fw:miYd˭8:-.*a0KmΌV1wnh+ZpXXii :AAᠽ9FمUcntaV88ǩ uh9 ΠZpO&]iYo& tITg# Xnt`ʱucGZӆA6l4h96*Ǜs XD=MsY%3Nd3$iz{'s&֜ViW3qvai fb `N`N08`JM 6f FJD{bGuqq[+kuCy<@}aVX 2FVǩj[ZtH>QV$JH@VX 2F=MdI (PB (PB (P ð4 N<"B (PB (PB (PBqB (PB (PB (PB (PB (PB (PB (PB (PB (PB (ⰛAcs\YX[eTN(PB (PB (PB (PB (PB (PB (PB (PB (PB (PB+,$PXXX\((DM9fP`=8Ⰰ 1,E!Q\((DM' jD%&$dڊVA"k,; 1,$PXXXqeq\((DM9n`"\+# ..rEӑ`4pvcup~ \e4V 9@ XxXXXFs+:A"k9 J"stcֵ-U$Jtnk) Nn z8:֫&"Ta5BMEҊ:4puNqe*Q\)WOON\+N>>dkѹ,rF. E[Ϥ+*ACӡc\)P 4iRd`̙u@?2MdLz< NJcv@ + D(a`7 D( D(AǮɠU9)]ۇQrp 1bQ\)1bJ{U´A)4u=Zt:75ŔƄ橓.FZd4 AT,&iֱ\4 ˺ӡ#O-P ):t *+(LӡSGZtd[$J&IƄ7N=MkR[AF渲5st7N=MkS]l*0&ҮLAȮ•td´ ׵ iJP>hX.h?W T, Y9pX4&]i:@ztArS'G5Sݸy0p ‘ mpevb|(\G:"Ta0NPh9 6˅/ puc<aDd dQˆ8R!C~`mNp$|)e2‘ u"?0# D(‘ ‘ j%1ph? NJcv\c'BXW AXEp:J@5COjV.h?hNj2NiANnA =:"p:x@`^O$=cXF75ŕr4V q\)P ֝ k JUN• 7N 8[ NJ:ffVUtJc͹хZhsS,t X@($BJZa x`!kGN.銄Zt dB5SdQtmUYV9)6Fk)ΉLz8:"mO v} lU9)Hs=:#M75ŕȹq\)ViƜ,m*8ӅY9t diAO4hX.h8YyjPiЃY:s5R.`TMP7N=MkS]l*0&ҮLAbEp:@NLHOH?W T,CGZ1sARdu=8hpB)ӂj2N3 d˭:fa5[(DMӡ,=:A\ 6ArSsӣdOu mpevb|(\G:"Ta0NPh9 6˅/ puc<aDd dQˆ8R!Ch7 D(a`maHaH5S5S뚋{Ak]>=:KyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANn?yjS:4 ˺ӡ#O-P ):t )j\ sUt" :Fnn z8:֥DNqe stu=Zt,.nUp@e\(%pYsNb情pB*zpѧ JS.Ed˭:"fa5LuDp&pVNe)t,({ pA\ 6ArSsӡ dOuE=zt p5rLpKyE'pQ%ڽ:pKyjP>A-ժAWSӍ8Y%ڵB)Ӎ8Z&Kyzt diANnA ,LӡcdiACuBFZd:RtApS HEQ6tA:4puKkUnҝ"E k{U´tnk) ZtXvqea%pYsNb情pB*zpѧ JS.Ed˭:fa5LuDPp&pVNe)t,({ v T䧺IB5S랝fVUtJc͹хZhsS5-j%=5+ .nUӠIo6趄NYj$WBIo6P ֝8Y%ڵB*zq $VY9q [Io6N,=: diNhON4muKyzt dj }iЃ[ͫT,pKyjSpMDjAT,:CdiAO4hX.h8YyjPiЃY:s5R.`ㅹTM-ӡSGZԶV})ѹ,.nPpءQ\+N.+iHG .pB({Zt1\pY]ONpY9pPp.zQ2e֝A30ZӍ8Y"k ,=:Z5S뚡&֝8[ NJ{ztmUYV9)6FlMe1︉a6  ArSsQrp8\ |ܫ'BIo6趄NYj$WBIo6P ֝8Y%ڵB*zq $VY9q [Io6N,Lӡc)j\sUt" :n z88c% i:75Ŕ'#R[=+iЃp:tdL= 2Xvqe`}\1$ih?W T,CGZ1sARdu=8hpB)Ӈj2NMS&]i3 8ep?"kA\ 6 ArSsӠlªʱΉLy:0YMUtJc؃ T䧺s=:ʺ}2ztE$Jt[Bzqk[ͫӡ#O-P stAT,&iЃPB (PB (PB (PB (PB (PB (PB (PB (PB (PB 8 \<aQ8B (PB (PB (PB (PB (PB (PB (PB (PB (PB s8@.np_$W  {xEq!M'qX@aVDRmj+e)$A`HHɵ¬(DM'Xv!cs\YXIpGF渲A"k0{gXvqeacuX(r3h.@B&h 8'Fs+Nea;zS2MqqG=LTEǩjnҝA\(ӡSGZ 5ɪ:75Ŕ2EҊEv'DPp@&y=x@`^O$=cXF75ŕr4V q\)P ֝ k JUN• 7N -j%P3N *:%1­e4pqV9)SGe:N, Ô%-A0HP0 ]:t t'LT$ӡ FW=:pA[$JӠlªʱΉLy:0YMUtJchx`5SdQ.W1ӡe1st5 JkN4diViƜ,A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA P7J(?]lPSڨDԉQ?W ӠX#R%Fa)6E+*ACӡc\)P 4iRd"2e֝A30LӢh?FfU+Zq2Mq:RY=ztGArSsT$ӡdOuN *:%1麬>2mEpj%=5+ Ѓʺ}2ztA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9t 4 ɚt4puc4=:KyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnLӡc)j\sUt" :n z8:֥5oSs\YC$\(uCOjV?W Ӡ@.npH• }iֱ\Y]ON4\)P stȵLuD&.Qn ֜i̡\e7Nep? NJ{jZt U9)Ѓ T䧺s=:WOONh?%SӍ?]em^?yjS@pH(5#O-P |CGZ1sApS HEQ6t A:4puKkUfjާF渲HQAbEp:B• }iֱ\Y]ON4\)P stO"2e֝?FfTɗZt MViƟ5StA2ONj%=5BM:A\ArSsQrp? |ܫ'BIo6趄OYj$WBFZdЃAsUЊl4 t1hZ֪սNqe stu=Ztq8ɴp:Rmcf˞qe#?W T,CGZ1sARdu=8hpB)ӆEd˭:fa5LuDP&pVOe)tA2ON5S뚡&֝? NJ{zt2 T䧺NAHQaUeXD<۝Qs7Uǒ"mOAHeL# D(p D(pA\A\\c'B_7*m)m ƟIo6NLӡc)j\sUt" :C7N=MkR@ٚѹ,.nPءQ\+N+i˞aF75ŕ ARd=ϭ:8:1• F+*ANn4.zQ2e֝A30ZӍ?"k̡Ӡ0" T䧺IB5S랝fVUtJc͹хZhsS5j%=5+ nUӠIo6趄OYj$WBFZd4iAO4hX.h9 d0q]&N?Cmjl[P7J(?]lPSڨB´# .뜰6Qtb• }iֱ\Y]ON4\)P stᠳȵLuC&.Qn ֜i̡\e7Nepj%=5BM:A\(0sSmΌ*SGc4pu U9)\ǸONƠ5rLA-ҝОi-DjAT,:AA?yjS:8:1{E5WB*Ӡ8=stcֵ-T z"Ek{U´AV:0XDŎ\)P ֝ kJUO• 7N.zQ2e֝A30ZӍ?"k̡Ӡ0 ArSsT$ӡ dOuN *:%1­e4pqV9)SG\f P0"H(MFۦNe)Oj%=5+ Ѓʺ}2ztA-ҝОi-DjAT,:CiAO4hX.h9VFQpS HEQ6tn z8:֥5oSs\YC$\(uCOjV?W ӡJP>hX.h?W T,Y9qj2N3 d˭:&pVOe)t C'B5S뚡&֝? NJ{zt U9)\ǸONnUӡ$Jt[Bzqk[ͫӡ#O-P stAT,&iֱ\sAsUЊl4n z8:֥5oSs\YC$\(uCOjVX#R%FFM+ik#02Qnqe#?W T,CGZ1sARdu=8hpB)ӆ"2e֝A30LӢ(?FfU+Zq2Mq: C'@dPA\ 6ArSsӡj%=0p D( *:%1麬<h|d D(*fhR!CXR!C T䧺 T䧺s=:WOONiNhON4uKyzt iANnA!?yjS:8:1{E5WB*Ӡ5stcֵ-T z"Ek{U´AV:d ðnk+ .pB({Zt4puc4+*AWSӆ?W T,8h4-S&]i3 d˭:"fa5[(DMӠ C'@cA\ 6ArSsӠlªʱΉLy:0YMUtJc؃ T䧺s=:ʺ}2ztA-ҝОi-DjAT,:C@thX.h?W T, Y9pȵLuC&.Qn ֜i̡\e7Nh?fP ArSsT$ӡdOuNA\@ ()6*Ǜs 6n{겘SM h)̩dqHaH5S5S뚋{Ak]>=:"[ͥ:-=8Z-ЃY9t P4 ɚt4puc42 T8jUa@hzǩjfjާF渲HQAbEp:˚AV[cs\YXIp+*ACӡc\)P 4iRdAGj2NMS&]i3 8B&n),=:(? NJ{jZt U9)QaUeXD<۝U*:%1h]lArSsQrpAk]>=: iNhON4uKyzt iANnA!:FZd3Nb惞AsUЊl4t1hZ&y5@ٚѹ,.nPءQ\+N2榮kNJ+iaF75ŕ5]9`l+*ACӡc\)P 4iRdAgj2NMS&]i3 8B&n),=:? NJ{jZt U9)QaUeXD<۝U*:%1h]lArSsQrpAk]>=:"[ͥ:-=8Z-ЃY9t 4 ɚt4puc42 T8jUa@pzǩjfjާF渲HQAbEp:˚$RZ´ ф v,u=JP>hX.h?W T, Y9pȵLuC&.Qn ֜i̡\e7Nepb5S뚡&֝8[ NJ{ztmUYV9)6Fk)ΉLz8:[0`@9D*j6&5WFs)OX}U9)\ǸONnUӠIo6趄OYj$WBFZd45#O-P |CGZ1sA(ⰝF.r0{E5WB*Ӡ5stcֵBMpj5oSs\YC$\(uCOjV?W ӡJP>hX.h?W T,Y9qj2N3 d˭:&pVOe)t C'B5S뚡&֝? NJ{zt U9)\ǸONnUӡ$Jt[Bzqk[ͫӡ#O-P stAT,&iֱ\sAsUЊl4n z8:֨IMP6ftnk(d({TW Ӣ钋U6@JM|tEF75Ŕ\)P ֝ kJUO• 7N ?TɗZt=j2NMViƟ5St&epArSsT$ӡdOuNA\@ ()6*Ǜs 6n{겘SM h)̩dqHaH5S5S뚋{Ak]>=:"[ͥ:-=8Z-ЃY9t iAO4hX.h9 d0q]&NXӡSGZ 5ɪսNqe stu=Zt]2QjAV:d ðnk+ .pB({Zt4puc4+*AWSӆ?W T,8h4-S&]i3 d˭:"fa5[(DMӠ C'@cA\ 6ArSsӠlªʱΉLy:0YMUtJc؃ T䧺s=:ʺ}2ztA-ҝОi-DjAT,:C@thX.h?W T, Y9pYZLӡ?FfTɗZtEjkN4P2@ A2ONƠU9)miЃ T䧺AFمUcntaV88ǩ udOuE=zt5tdIo6趄OYj$WBFZd4 AT,&iֱ\s5R.`TMP7N=MkT$&3V:75Ŕ2EҊ[=+itE0Jqh?W ӣ'Fs++*ACӡc\)P 4iRdC"2e֝A30LӢh?FfU+Zq2Mq:RY=zt=dOuPkNj%==: 6*Ǜs XD=Mpkd0@ P h5n 9u>A\\c'B_7*M$Jt[Bzqk[ͫӡ#O-P st Y>Lӡc`Xoh   AXhA_o{mΌV1wnhkU& ɰm>XdLtnn[mjl[P<"ky6 pS i`Ӌcֵ-U$Jtnk)LE6^ɰm>XdLtnn[kT z$TM{&a d-3 ѹqlz8:֨IMV})ѹ,z0yMED׼lO.AstnjUa4^ nn[D{e5Nqe*z0yMED׼lO.AstnjUa4^ nn[D{e5Nqe*:75Ŕ/F)HMi:%5R.x`UЊl4ƋA Ӌcֵ-T z"D^ShQ5<uK)j\Diōǩjk%FT$U铑`Dy6S2]LU"]&N,h@$8=MkSs\YJ}2r0^ShQ5<uK)j\DiōǩjfjާF渲HQ$TM{&a d<0GFEQ6qcC űhZ֪սNqe st/F)HMi:%5R.x`UЊl4ƇA ӋcֵBMpj5oSs\YC$\(уm*&`}Nw2 T#sUt" 8ѢCst4puKkUfjާF渲HQ$TM{&a d<0GFEQ6qaE űhZ֪:75Ŕ2E҈<"ky6 pS H:75WB*Ӌ / 77N-SGZ 5ɪսNqe st/F)HMi:%5R.x`UЊl4FA ӋcֵBMpjDNqe st/F)HMi:%5R.x`UЊl4C űhZ֪սNqe st/F)HMi:%5R.x`UЊl4C űhZ&y5@ٚѹ,.nE6^ɰm>XdE ѹTMXpxH!qlz8:֥5oSs\YC$\(уm*&`}Nw2 T#sUt" 8Cst4puKkUnҝ"D^ShQ5<uK)j\DiŇ ǩjfjާF渲HQ$TM{&a d<0GFEQ6qaE űhZ&y5[AF渲HQ$TM{&a d<0GFEQ6qaCst4puKkUfjާF渲HQ$TM{&a d<0GFEQ6qaCst4puP\XdE ѹTMX,h@$8=MkR@ٚѹ,.nE6^ɰm>XdE ѹTMX,h@$8=MkR[AF渲HQ$TM{&a d<0GFEQ6q`Cst4puP\9/F)HMi:%5R.x`UЊl4ƋA Ӌc(qLѹ,]>9F渲6^ɰm>XdE ѹTMXxH!qlz8:֥5oSs\YC$\(уm*&`}Nw2 T#sUt" 8Cst4puMuDjJ}2r0^ShQ5<uK)j\Diōǩjtnk)WONF уm*&`}Nw2 T#sUt" 8Cst4puP\XdE ѹTMXxH!qlz8:֨IMP6ftnk(dz0yMED׼lO.AstnjUa4^ nn[mjl[P7J"`Dy6S2]LU"]&N,4h@$8=MkR[AF渲HQ$TM{&a d<0GFEQ6qaE űhZ&y5@ٚѹ,.nE6^ɰm>XdE ѹTMXhxH!qlz8:֨IMV})ѹ,.nE6^ɰm>XdE ѹTMXhx@$8=MkR@ٚѹ,.nE6^ɰm>XdE ѹTMXhx@$8=MkT$&3V:75Ŕ2E҈<"ky6 pS H:75WB*Ӌ/ 77N-SGZԶP6ftnk(dz0yMED׼lO.AstnjUa4^ nn[mj Ss\YC$\(уm*&`}Nw2 T#sUt" 8Cst4puP\P7J"`Dy6S2]LU"]&N,8<^ nn[mjl[P7J"`Dy6S2]LU"]&N,8<^ nn[kT z"D^ShQ5<uK)j\DiłA Ӌcֵ-T z"D^ShQ5<uK)j\DiłA Ӌcֵ-U$Jtnk(dz0yMED׼lO.AstnjUa / 77N-SGZ 5ɪսNqe st/F)HMi:%5R.x`UЊl4CE űhZ&y5[AF渲HQ$TM{&a d<0GFEQ6q`xH!qlz8:֥5oSs\YC$\(уm*&`}Nw2 T#sUt" 8Px@$8=MkT$&3V:75Ŕ2E҈<"ky6 pS H:75WB*Ӌǩj[Z3V:75Ŕ2E҈<"ky6 pS H:75WB*Ӌǩj[ZtH>P7J"`Dy6S2]LU"]&N,4^ nn[kT z"D^ShQ5<uK)j\DiłƋA ӋcֵBMpjDNqe st/F)HMi:%5R.x`UЊl4aCst4puKkUfjާF渲HQ$TM{&a d<0GFEQ6q`xH!qlz8:֨IMP6ftnk(dz0yMED׼lO.AstnjUa4^ nn[mjl[P7J"`Dy6S2]LU"]&N,XdE ѹTMXxxH!qlz8:֨IMV})ѹ,.nE6^ɰm>XdE ѹTMX0h@$8=MkR[AF渲HQ$TM{&a d<0GFEQ6q`Cst4puP\< Ss\YC$\(уm*&`}Nw2 T#sUt" 8hxH!qlz8:֥DNqe st/F)HMi:%5R.x`UЊl4E űhZ&y5[AF渲HQ$TM{&a d<0GFEQ6q`xH!qlz8:֥DNqe st/F)HMi:%5R.x`UЊl4Cst4puP\< Ss\YC$\(уm*&`}Nw2 T#sUt" 8hx@$8=MkR[AF渲HQ$TM{&a d<0GFEQ6q`xH!qlz8:֨IMV})ѹ,.nE6^ɰm>XdR0GFűhZ֪:75Ŕ/F)HMi:%”Ea:77N-SGZtd[$J&I/F)H` 47ᠱ@84<h0 a@o ` <۝2bs#DFr0QaUeXD<۝Uh9 ΠZphxyd˭8@"@H @Yo& tITg# Xnt`ʱud[G9FمUcntaVb%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bs#QaUeXD<۝U>cVqBQ4JS?2Fw:mi&]iYo& tITg# Xnt`ʱud[GpVᠠ<a`#fN`(?P3AQaUeXD<۝U>st`Fi̔ d/Odu$ӂ`ɗZp,"G=wzu[ɂ]U`<۝2bs#8pa`#fN48Zr *:%1­p-eHűP(h9 ΠZpX,2N@(ǮNy0KJ9LǛsU]ۮc$b?ۂ6t(0sSmΌ*T[@Fi̔ d/Odu$ӃC&]i< AǮNy0KJ9LǛsU]ۮc$b96*Ǜs #V9%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bs#QaUeXD<۝U>`Fi̔ d/Odu$ӃC&]i< AǮNy0KJ9LǛsU]ۮc$b96*Ǜs #V\DyUfLh9 ΠZpɗZp,"G=wzu[ɂ]U`<۝2bs#8 ?0a@(  tfVUtJc͹хZʑca.vS<Ū" Fә)L@^I?̙u `cwYe%%Q& c͹у*.11l}ZӁ6l4 7AQaUeXD<۝U>e\dܻ,e%3Nd3$iz{'s&֜2N@(ǮNy0KJ9LǛsU]ۮc$b?ۂ #Lli pg(0sSmΌ*T[E[ qsr-˰ h-bYqBQ4JS?2Fw:mi.XD z,$3,y:0eXݺ2F-+Zpѡ6l4A_vlªʱΉLy:0YR1l}c`L= Fә)L@^Ig.XD z,$3,y:0eXݺ2F-+Zph( ?0a@( >lªʱΉLy:0YR1l}c`lqBQ4JS?2Fw:mi`Yd˭8:-.*a0KmΌV1wncn ֜ ?0a@ѡ?AQaUeXD<۝U>ΉB0&Qx8!(њs%)#K;@ 6X,2e֜ Q]ޝe`DFr0%6F \HűkN `6t/AQaUeXD<۝U>ΉB0[h9 ΠZpX,2N@(ǮNy0KJ9LǛsU]ۮc$b?ۂC#Lli CAnlªʱΉLy:0YR1l}c`7=uX8!(њs%)#K;@ 6X,2e֜ Q]ޝe`DFr0%6F \HűkN O#LlinlªʱΉLy:0YR1l}c,>C%3Nd3$iz{'s&֜ LӁa0 ?ӬL蒨Fcv>i`a`#fNPhpp+ smUYV9)6Fk*F-sP@cs\Y@lqBQ4JS?2Fw:mi`Yd˭8:-.*a0KmΌV1wncn ֜88<<4F͆W smUYV9)6Fk*F-sP@湛`Fi̔ d/Odu$ӂ`ɗZp,"G=wzu[ɂ]U`<۝2bs#8hx(FٰӠ44hx34(0sSmΌ*T[EXD  Fә)L@^Ig.XD z,$3,y:0eXݺ2F-+Zp<?0a@xX+4smUYV9)6Fk*F-sP@2%3Nd3$iz{'s&֜ LӁa0 ?ӬL蒨Fcv>i`a`#fNX4fVUtJc͹хZʑc`L3$qBQ4JS?2Fw:mi`Yd˭8:-.*a0KmΌV1wncn ֜4?0a@( r *:%1­eHűUtJW5D Fә)L@^Ig.XD z,$3,y:0eXݺ2F-+Zp 444F͆ghvlªʱΉLy:0YR1l}c 4h9 ΠZpX,2N@(ǮNy0KJ9LǛsU]ۮc$b?ۂFFٰӠ ~lªʱΉLy:0YR1l}cHŁh9f]2R4=kN2N@(ǮNy0KJ9LǛsU]ۮc$b?ۂai :@(0sSmΌ*T[EXD=R1a16 Fә)L@^I?̙u `cwYe%%Q& c͹у*.11l}Zӂs6th96*Ǜs #V9)TXNk2b0qBQ4JS?2Fw:miƍ?̙u `cwYe%%Q& c͹у*.11l}ZӂAi :A_/AQaUeXD<۝U>ΉLzbsYqBQ4JS?2Fw:miƍ?̙u `cwYe%%Q& c͹у*.11l}Zӂ`Ai :A(0sSmΌ*T[EXD=R1a9Ɂ0?J4fJgHNP?M8xѧ.XD z,$3,y:0eXݺ2F-+ZpPXqi :_ smUYV9)6Fk*F-sSXLh9 ΠZpO&]iYo& tITg# Xnt`ʱud[GpVX ?0a@pxp,fVUtJc͹хZʑcǪV-渲 Fә)L@^I42e֜ Q]ޝe`DFr0%6F \HűkN 4F͆@(7<smUYV9)6Fk*F-sSZ[$J%3Nd3$iz{'s&֜i@6l4C^lªʱΉLy:0YR1l}cHŁ#,h9 ΠZpO&]iYo& tITg# Xnt`ʱud[GpVP ?0a@(8 ^lªʱΉLy:0YR1l}cHŁ#H%3Nd3$iz{'s&֜ΉLzkT$&qe2R4=kN4id˭8:-.*a0KmΌV1wncn ֜4 FٰӠ _9FمUcntaVb*:%Hű3f8!(њs%)#K;@ 6FLӁa0 ?ӬL蒨Fcv>i a`#fNPh,?4nlªʱΉLy:0YR1l}D{2R4=kN ?̙u@( hs:-.*a0KmΌV1wnc(0sSmΌ*T[E2QHűJ#@`?J4fJgHNP?M80hɗZp,"G=wzu[ɂ]U`<۝2bs#8,<a`#fNXp fVUtJc͹хZʑcJ#@>D{ 2R4=kN 42e֜ Q]ޝe`DFr0%6F \HűkN 6l4 A   X/Ah4 |8h+  c͹у*.11l} [00lªʱΉLy:0\ }YmUYV9)6Fko*F-(0sSmΌ*VT[EHűYmUYV9)6Fko*F-\(mUYV9)6Fko*F-(@ GQaUeXD<۝U>0lªʱΉLy:0YR1l}c(0sSmΌ*T[E[ qs(0sSmΌ*T[E[ qs-W53(0sSmΌ*T[E[ qs-W9qfVUtJc͹хZʑca.vUfM˰ h-bY(0sSmΌ*T[E[ qsr-˰ h-bY(0sSmΌ*T[EXD(q(0sSmΌ*T[EXD(r0 6*Ǜs #V9(@&32O8 *:%1­eHűUtJ rgQaUeXD<۝U>ΉB0 麬 6*Ǜs #V9( c9o(0sSmΌ*T[EXD 渲EӑQaUeXD<۝U>ΉAmaFمUcntaVb*:%XtVqfVUtJc͹хZʑc`L=0lªʱΉLy:0YR1l}c, fdqfVUtJc͹хZʑck|aFمUcntaVb*:%@imUYV9)6Fk*F-sS1:,ˣ(0sSmΌ*T[EXD=R1a160lªʱΉLy:0YR1l}cHń& 8 *:%1­eHűUtJc#̘@aFمUcntaVb*:%1ꑋ fL (0sSmΌ*T[EXD=R1a9ȱmUYV9)6Fk*F-sSZԶ#8 *:%1­eHűUtJc+ZdQQaUeXD<۝U>ΉLzkSs\YVqfVUtJc͹хZʑcǪF, ]9 8 *:%1­eHűUtJc#.(0sSmΌ*T[EXD=R1`l0&0lªʱΉLy:0YR1l}cHń", 6*Ǜs #V9)TXNr, (0sSmΌ*T[EXD=Rk渲0lªʱΉLy:0YR1l}cbPs 6*Ǜs #LGmUYV9)6Fk*F-(qbS% 0N8 *:%1­eHűS% T[Jd= N0p`4 ᠱ@P4 4 #nt`ʱud[C-Z 9FمUcntaV9Fم=Ê̢xh0fVUtJc͹хZ[ʑc lªʱΉLy:0YR1l}`96*Ǜs #V9FlªʱΉLy:0YR1l}l1XӔmUYV9)6Fk*F-(q 47 o  P,4ᠯ7`,6F \Hű2F-Z6 k@0+@ (h@bX!%0"z BF.tܳ$qGL&c>f.8a1c0ᡠ@$8hph{@2%MqG` 4 1@PH @@Qah@bX!%38"z BF.tܳ$WV " c l¬sSmΌ*#խCu 32t \-`q.>C s0gFEst,tjV.^aF!CCq3 Ss$'# 2>f9{v[ҏ#3cfYs1̝7O1 @ a6Ff-ĝ28D# WV`j<4( pxp40 l$(PB (PB (PB (PB (PB (PB (PB (PB (PB (PBV`N 6U8B (PB (PB (PB (PB (PB (PB (PB (PB (PB s”EǪF-Z֩vb:HűkR.4 EҊ:HűkRWONF)؃]+*+i'˦8{24ҎyG%&RH?2M2NAǮ5Sݸy0p BsXR'dLz<5Sݸy5+ У%J@5COjVqe 9d˭:pB({ZtHűkJUJS 9 d0q]&N?C>j]0{ءQ\+N+i' Xcs\YH?W T,D[V\Y]ONY9pȵLuC&.Qn ֜i2ON5SRh? NJ{jZt U9)5SNAH­ 0BV)exxᕅeJ@(PfVUtJc͹хZʑcǪV:75ŕxb$ p+XR!CXR!C T䧺 T䧺s=:#&ՠ5rLA-ҝОi-DjApS it1ꑋc֥]h(?9t1ꑋc֥]{HQAȮ•td´ku- @.npJARd=ϭ:$bbpB*zppB)ӂ5SNAFمUcntaVb*:%1ꕭKkB1,0C@'A`?  6ANj%54(0sSmΌ*T[EXD=RH7 Ł X/ArS]l*1E=ztGW^%pVOIo6n ֜iT,:!=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P st AT,&i#լc4j[Zd({TW ӡZt \)P ֝?W T,Y9qj2N3 d˭:&pVOe)t C'B5S뚡&֝? NJ{zt U9)\ǸONnUӢ(?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:s5R.`TM?C>j[Zd({TW ӡe1stp: -bG .pB({ZtHűkJUJS?TɗZtEj2NMViƟ5StH?fP j%=5BM:A\ArSsQrp? |ܫ'A4m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@x$4hrFZd3N>ciACuBFZd:RtApS HEQ6t A:HűkR.=$\(uCOjV,h?W Ӡ1YH?W T,D[V\Y]ONY9paZLӡ?FfTɗZtEjkN4P2@ A2ONA\ 6ArSsӡj%=0p D( *:%1麬<h|d D(*fhR!CXR!C T䧺 T䧺s=:WOONh?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7NHhRFZd3N>ciACuBFZd:RtApS HEQ6tn zbmjl.nPءQ\+N@ FJRm(?W T,D[V\Y]ONY9piZLӡ?FfTɗZtEjkN4P2@ A2ONɠU9)miЃ T䧺AFمUcntaFtVS6R5S뚋{Ak]>=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!Ah?yjS:$bbY]֝?yjPHӡ=LU"?Di t1ꑋc֥]{HQAbEp:B• }iЃpB*zqJS.A30LӡjkN4P2BY=zt U9)miЃ T䧺B5S뚋{Ak]>=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ=LU"?Di A:HűkR.=$\(uCOjV1ZtxE9MJP>葋c1• • 7NEd˭:fa5LuD&pVOe)tE,=: T䧺IB5S랝fVUtJc͹хZʑcǪV5A\\c'@dWOONiNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!C4 ɚtHűk#O-P :4 Ґ#B{E5WB*Ӡ5stc#խKkT` stu=Zt]I̥8+i 9@ Xz• }i#լc4+*AWSӇ+*ANn?TɗZt=j2NMViƟ5StH?fP h? NJ{jZtU9)QaUeXD<۝UǾ$Sj%=5+ Ѓʺ}2ztE$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZd  AT,&i#լc46@O6$ie  rH@$/ D(/ D(EdOuE=zt 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnѠ=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ=LU"?Dit1ꑋc֥]{HQAbEp:jd]\+NbhD!-a02rFvpB({ZtHűkJUJS ?TɗZt=j2NMViƟ5StH?fP j%=5BM:A\(0sSmΌ*T[EXD=RH T䧺s=:75Ŕʺ}2ztA$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZd iAO4葋c1FZd9wZt iAC GN (PB (PB (PB (PB (PB (PB (PB (PB (PB (QbX5MUF(PB (PB (PB (PB (PB (PB (PB (PB (PB (PBEpit1ꑋc֥]c؃Ƅ7N=R1l}ZԶK,{5st7N=R1l}ZԻU铑X WjJ}2ztEZt2`L= 1stFu `I@ztALӠtj%1pztlU9)]ۇ')eprS& T=wnME=zt(ʼnEp#MPSڨBLӡ?W T,D[V\Y]ONY9pY9t iAO4A+ Fd^0b'tnk(2 T8jUa@ӡT[V.tdb=?]lPSڨB´ '渲YsN>c\)P <\)P stj2NMS&]i3 8ep?"kA\ 6ArSsӡj%=< lªʱΉLy:0YR1l}cJ֧F渲 ^ 8dpP@ D(vA\A\\c'DdڴnUӢ(?%SӍ?]em^?yjSBFZd3N+e.--% F"5mkC'tnk(pS it1ꑋc֥]cئA?9t1ꑋc֥]cئA$\(WjJ}2ztEZt5 8e\(:0pB({ZtHűkJUJS j%P3N *:%1­eHűUtJc+Zքcs\YX` (?ӡ:b&֝?2Ѓ T䦺"TffVUtJc͹хZʑcǪV50? NJk%F(\ǸONjbĢR•n ֜i-ҭZӍ?yjS@x$48=#O-P |D[V\4 ˺ӡ#O-P ):t )j\sUt" :n zbmjjX)h7J(?]lPSڨCs\YH?W Ӡ> 8F75ŕ ARd=ϭ:$bbpB*zppB)ӆ"2e֝A30LӡjkN4P2@ A2ON U9)miЃ T䧺B5S뚋{Ak]>=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!P4 ɚtHűk#O-P :4 Ґ#Bs5R.`TMP7N=R1l}ZԶK,{4d({TW ӡZt \)P ֝?W T,Y9qj2NMS&]iЃfa5[(DMӡ,=:A\ 6ArSsӡdOuE=zt 5rL?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:s5R.`TM?C>j[Zږ=d2EҊ[=+iв{QTW AV1st ARd=ϭ:$bbpB*zp\)P stj2NMS&]i43 8B&n),=: T䧺IB5S랝? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stAT,&i#լc4j[Zږ=d2EҊ[=+iЃp:YsN+*AWSӍ?W T,8ȵLuDP&.A30ZӍ?"kЃep? NJ{jZt U9)Ѓ T䧺s=:WOONm)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^9 d0q]&NӡT[V-RK2 "Ek{U´茛Vp:71Ůn %&ՠ\)P ֝1l}Z1sARdu=8yRdC"2e֝A30LӢ(?FfU+Zq2Mq:RY=ztEdOuPkNj%==:rSs'B(0sSmΌ(ٹcO6'MB2iƅ"?"? NJ{h? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stiAO4葋c1FZd9wZt iAC GN2 T8jUa@(jǪF-Z֩vbstu=Zt2QaQ+i,4*3 ' a4`%JP>葋c1• • 7N ?TɗZt=j2NMViƟ5StY=ztArSsT$ӡdOuN-' D(+ D(%B`'(0sSmΌ(ٹcda~b@ L^,?AsapNP D$8AsapNPdaX 2FP 8p'(Jd@NYbBB tPA\\c'B_7*M$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZd AT,&i#լc4葋c1• • 7N.zQ2e֝A30ZӍ?"k̡Ӡ1? NJ{jZt U9)QaUeXD<۝U>ΉLzkS]l*1dOuE=zt3tnk)tdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6Nj[ZABsSC>j[ZSs\YJdȹQSC>jh]>9]+*+i'˦8{24ҎyG%&RH?2M2NAǮ5Sݸy0p BpBBdLz<5Sݸy5+ У%J@5COjVqe 9d˭:pB({ZtHűkJUJS ?yjSBFZd3N+ F< ОqeQ d0q]&N?C>jh]>9u=Zt \+N><4'cs\YH?W T,D[V\Y]ONY9piZLӡ?FfTɗZtEjkN4C'Be)A4j%=5BM:A\dOu'BI"?W H2葋c1• • 7NEd˭:&.Qn ֜i̡\e7NepArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZd AT,&i#լc4j[ZSs\YJd2EҊ[=+iЃp:YsN+*AWSӍ?W T,8ȵLuBQ2e֝?FfU+Zq2Mq:̡ӡdOuPkNj%==:A\\c'B_7*m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^9 d0q]&NӡT[V-SG)ѹ,2 "Ek{U´Ye\(+ \+N{QK \)P ֝1l}Z1sARdu=8yRd"2e֝A30LӢh?FfU+Zq2Mq:RY=zt-dOuPkNj%==:A\\c'B_7*M$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZd Y>LӢF-X.h?yjPiЃY:s5R.`TMP7N=R1l}ZԶMF渲4d({TW ӠMZt: 0iJP>葋c1• • 7N ?TɗZt=j2NMViƟ5StH?fP Z5S뚡&֝? NJ{zt2 T䧺NAHQaUeXD<۝Qs7Uǒ"mOAHeL# D( D(A\A\\c'B_7*m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@x$44Y>LӢF-X.h?yjPiЃY:s5R.`TM?C>j[ZSs\YJd2EҊ[=+i55"Tb´ԉQJM`%JP>葋c1• • 7N ?TɗZt=j2NMViƟ5StH?fP 4j%=5BM:A\dOu lªʱΉLy:0fn)%A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANn?yjS:$bbY]֝?yjPHӡ=LU"?Di t1ꑋc֥h:75ŔA$\(uCOjVHEZtbR0K \)P ֝ y:0c4+*AWSӆ+*ANn8<-S&]i3 d˭:&fa5[e)tA2ON5S뚡&֝? NJ{ztmUYV9)6FlMe1︉a6  FA\\c'B_7*Ѓ[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stALӡ6F(=LU"?Di5stc#խKkTtnk)LFHQAbEp:,sAVcs\YXLlEJP>c͹у\)P +*ANn484-S&]ibQ2e֝A30ZӇ5StH?fP ArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE$Jt[Bzqk[ͫӡЅ5˝V:FL3[&EoA-ժACӡ6F b[ͫT,mZdF m^)\2`-7J+zFZd iAO4c͹ъ"1sA(PB (PB (PB (PB (PB (PB (PB (PB (PB (PBV`NɮO ʨ (PB (PB (PB (PB (PB (PB (PB (PB (PB (PA"stc#խP\ciACuBFZd:RtA($ q9o u=qG)j\sUt" :n zbkRL.nPءQ\+NF渲@ 1l}b< #K \)P ֝1l}Z1sARdu=8yRdgj2NMS&]iЃfa5[(DMӠ C'@cA\ 6ArSsӡdOuE=zt 5rLA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9tCFiAO4葋c1FZd9wZt iAC GN2 T8jUa@hzǪF-Z&y5."Ek{U´Ye\(+ \+N{QK \)P ֝1l}Z1sARdu=8yRd"2e֝A30LӡjkN4P2@ A2ONŠU9)miЃ T䧺B5S뚋{Ak]>=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!C4 ɚtHűk#O-P :4 Ґ#B{E5WB*Ӡ8jǪF-Z&y5."Ek{U´AV?W T,B• Ɵ+*ANniZLӡj2N3 8B&n?fP Ѓ T䧺IB5S랝? NJ{j.W1ӡtdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6N)j\sUt" :7N=R1l}Z 5ɩv`7J(?]lPSڨAf: 0´ta<%&• }i#լc4+*AWSӇ+*ANn.zQ2e֝A30ZӍ?"k̡Ӡ0j%=5BM:A\dOu lªʱΉLy:0fn)%LӢF-X.h?yjPiЃY:s5R.`TM?C>jԻSd({TW ӢkjD+i,0@"J• }i#լc4+*AWSӇ+*ANn.zQ2e֝A30ZӍ?"k̡Ӡ2h? NJ{jZt U9)QaUeXD<۝Qs7UM T䧺s=:WOON iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!Ah?yjS:$bbY]֝?yjPHӡ=LU"?Di A:HűkT$&ژ=$\(uCOjV?W ӡJP>ARdu=8pB)Ӎ?TɗZt MS&]iЃfa5[(DMӡ,=:A\ 6ArSsӡdOuE=zt 5rLA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃAsUЊl4A:HűkT$&ژ=$\(uCOjV1ZtxE9MJP>葋c1• • 7NEd˭:fa5LuD&pVOe)tA2ON U9)miЃ T䧺AFمUcntaVb*:%1ꕭMuDj%=5+ nUӢ(?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7NHhjԻSd({TW ӢȬjAV2+2O6$i`"J• }i#լc4+*AWSӇ+*ANn4iZLӡ?FfTɗZtMjkN4P2@ A2ONH? NJ{jZt U9) HaHH[ 6*Ǜs chv_/`A0 x(4@"?SRBstH( H`0 HmUYV9)6FlMe1D0``4@$ P h8`,)1x ,Fx`' D(24bp*ā9FمUcntaFtVS$C 0' $X)6@ $@0J8>6@O6$ie  rH@$,H!i"FX7\ $B)H)#2D7G{HlBFX$C D((׀/<))j%=5+ в{QSʺ}2ztA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9tCFP4 ɚtHűk#O-P :4 Ґ#B{E5WB*Ӡ<=stc#խP\葋c1• • 7N.zQ2e֝A30ZӍ?"k̡Ӡ1? NJ{jZt U9)QaUeXD<۝U>ΉLzkS]l*1dOuE=zt3tnk)tdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6N葋c1• • 7NABt: 6*Ǜs #V9)Tj1,0CvЃН1PkN\ArS]l*3N *:%1­eHűUtJc+ZdQ? NJk%F(\ǸON,9?W U+Zq$JkN4iANnA-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnѨ?yjS:$bbY]֝?yjPHӡ=LU"?Dit1ꑋc֨IMK,{4d({TW ӡe1stp: -bG .pB({ZtHűkJUJS?TɗZtEj2N3 8B&n),=: T䧺IB5S랝? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stAT,&i#լc4jԻRDZLFHQAbEp:B• }iЃpB*zqJS.Q2e֝?FfU+Zq2Mq:̡ӡdOuPkNj%==:A\\c'B_7*Ѓ[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ=LU"?Dit1ꑋc֨IMK,{4d({TW Ӣ2mZ´d$0VpB({ZtHűkJUJS ?TɗZt=j2NMViƟ5StH?fP j%=5BM:A\dOu lªʱΉLy:0fn)%ciACuBFZd:RtApS HEQ6tn zbkRK2 "Ek{U´dL25!h?W Ӡ XiTgO6$i`"J• }i#լc4+*AWSӇ+*ANn4.zQ2e֝A30ZӍ?"k,=: U9)miЃ T䧺D耀"?"?S"?Io8(0sSmΌ*UtJcM Y~8hH NPOK‘ u D- J1 NQaUeXD<۝Qs7UǾ8hH p,XRb`YbNPdh!i T r *:%1麬=H0' $X)6@ $@0J8>6@O6$ie  rH@$,H!i"FX7\ $B)H)#2D7G{HlBFX$C D((׀/<))j%=5+ в{QSʺ}2ztA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9tCCC4 ɚtHűk#O-P :4 Ґ#B{E5WB*Ӡt1ꑋc֨IMK,{4d({TW ӡvJ´-B&((gh?W T,D[V\Y]ONY9pȵLuC&.Qn ֜i̡\e7NepArSsT$ӡdOuN *:%1­eHűUtJc+ZdQ? NJ{j.W1Ӡ1s\YH? |ܫ'DKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnѠ:FZd3N>ciACuBqB (PB (PB (PB (PB (PB (PB+, l2nN(PB (PB (PB (PB (PB (PB (QpS it1ꑋc֨IMMȹQSC>jtnk)LFHQAȮ•td´d'8 1l}`x@<#ARd=ϭ:$bbpB*zppB)Ӈj%P3N *:%1­eHűUtJc+Z&y0nk+  GN銄Zt B5SdQtmUYV9)6Fk*F-sSZ[$JArS]l*1E=zt/Ye\(ARZӍ?%U+Zq#O-P stiAO4葋c1FZd9wZt iAC GN)j\sUt" :n zbkSG)ѹ,2 "Ek{U´tnk)Ztqea%YsN>c\)P <\)P stAZLӡj2N3 8B&n),=: T䧺IB5S랝? NJ{j.W1ӡtdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6NLӢF-X.h?yjPiЃY:s5R.`TMP7N=R1l}Z 5ɩRstu=Zt,.nU@e\(%YsN>c\)P <\)P stj2NMS&]iЃfa5[(DMӠ C'@bA\ 6ArSsӡdOuE=zt 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnѡ?yjS:$bbY]֝?yjPHӡ=LU"?Dit1ꑋc֨IMMF渲4d({TW ӡZt \)P ֝?W T,Y9qj2N3 d˭:&pVOe)t C'B5S뚡&֝? NJ{zt U9)\ǸONnUӢ(?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:sAsUЊl4t1ꑋc֨IMMF渲4d({TW ӠMZt: 0iJP>葋c1• • 7N ?TɗZt=j2NMViƟ5StH?fP Z5S뚡&֝? NJ{zt2 T䧺NAHQaUeXD<۝Qs7Uǒ"mOAHeL# D( D(A\A\\c'B_7*m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@x$44Y>LӢF-X.h?yjPiЃY:s5R.`TM?C>jtnk)LFHQAbEp:&FJAV*3 I,\)P ֝1l}Z1sARdu=8yRdj2NMS&]i3 8B&n),=:& T䧺IB5S랝 U9)PR!CmUYV9)6FlMe1䧈F&R!CS4B ‘ j%=4j%=5+ Ѓʺ}2ztA$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZd iAO4葋c1FZd9wZt iAC GN2 T8jUa@(jǪF-Z&y54rS ђ.nPءQ\+N 9p:ta'2OARd=ϭ:$bbpB*zppB)Ӂj2NMS&]i43 8B&n),=:-dOuPkNj%==: 6*Ǜs cфqv T䧺s=:WOONiNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!BFZd3N>ciACuBFZd:RtApS HEQ6t7N=R1l}Z 5ɩRstu=ZtYMQ"?W Ӡ&EfSp°d,X ARd=ϭ:$bbpB*zppB)ӆ?TɗZt=j2NMViƟ5StH?fP IdOuPkNj%==: D)))K~AFمUcntaVsS"mNֲ7 (&@$@<HpBx ^PЛn!i T r *:%1麬=Hxa PLHJx ;^ G Ņ&/E,HFQ"%B`'(0sSmΌ(ٹcdazā0 X8~8᠜I@'p8°d,8AsapNQ(8ŀ)[ޢD- S&뛢AD^24b"?fHozmPaHe#'"?"?[ T䧺s=:Yos7J*sPWOONh?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7NHhpLӡ6F(80 4 4 A@ ;Æ,?nt`ʱud[C$b錓`xQ6S2]LTEa:77N-T[V-RK2 $TM{&a d-3 ѹqlzbmjjd`H<"ky6 pS i`Ӌc#խKkTtnk)LE6^ɰm>XdLtnn[>jԻRǰ^ShQ5<uK)j0GFűꑋc֨IMK0{6^ɰm>XdLtnn[>j`Dy6S2]LU"]&N,h@$8=R1l}ZԻU铑X уm*&`}Nw2 T#sUt" 8CstHűkRWONF)/F)HMi:%5R.x`UЊl4ƋA Ӌc#խM'#6^ɰm>XdE ѹTMXxH!qlzbmjjX)h7J"`Dy6S2]LU"]&N,hx@$8=R1l}ZԶK`7J"`Dy6S2]LU"]&N,hx@$8=R1l}ZԶMF渲4dz0yMED׼lO.AstnjUa4<^ nn[>jԻRDZLFHQ$TM{&a d<0GFEQ6qcC űꑋc֨IMK0{HQ$TM{&a d<0GFEQ6qcC űꑋc֨IMMF渲4dz0yMED׼lO.AstnjUa4^ nn[>j[Zږ=d2E҈<"ky6 pS H:75WB*Ӌ / 77N-T[V-R2E҈<"ky6 pS H:75WB*Ӌ / 77N-T[V-SG)ѹ,2 "D^ShQ5<uK)j\DiņǪF-Z&y54rS ђ.nE6^ɰm>XdE ѹTMXhx@$8=R1l}ZԶK,{4dz0yMED׼lO.AstnjUa/ 77N-T[V-R2E҈<"ky6 pS H:75WB*Ӌ ǪF-Z֩Rst/F)HMi:%5R.x`UЊl4C űꑋc֨IMK,{4dz0yMED׼lO.AstnjUa/ 77N-T[VBMpj]2E҈<"ky6 pS H:75WB*Ӌ ǪF-Z&y54rS ђ.nE6^ɰm>XdE ѹTMXpxH!qlzbmjjX)h7J"`Dy6S2]LU"]&N,8h@$8=R1l}ZԶK`7J"`Dy6S2]LU"]&N,8h@$8=R1l}ZԶMF渲4dz0yMED׼lO.AstnjUa4^ nn[>jԻRDZLFHQ$TM{&a d<0GFEQ6qaE űꑋc֨IMK0{HQ$TM{&a d<0GFEQ6qaE űꑋc֨IMMF渲4dz0yMED׼lO.AstnjUa/ 77N-T[V-RK2 "D^ShQ5<uK)j\DiŇA Ӌc#խKkT` st/F)HMi:%5R.x`UЊl4à űꑋc֥h:75ŔA$\(уm*&`}Nw2 T#sUt" 8xH!qlzbkRK2 "D^ShQ5<uK)j\DiŇA Ӌc#խP\XdE ѹTMX(<^ nn[>jԻSdz0yMED׼lO.AstnjUa ǪF-Z&y54rS ђ.nE6^ɰm>XdE ѹTMX,h@$8=R1l}ZԶK`7J"`Dy6S2]LU"]&N,4^ nn[>j[ZSs\YJd2E҈<"ky6 pS H:75WB*ӋǪF-Z&y5."D^ShQ5<uK)j\DiłƋA Ӌc#խP\<9Nqe)h7J"`Dy6S2]LU"]&N,/ 77N-T[V-R2E҈<"ky6 pS H:75WB*ӋA Ӌc#խKkTtnk)LFHQ$TM{&a d<0GFEQ6q`xH!qlzbkRL.nE6^ɰm>XdE ѹTMX,<^ nn[>jtnk)LFHQ$TM{&a d<0GFEQ6qaE űꑋc֥]{HQ$TM{&a d<0GFEQ6qaE űꑋc֥h:75ŔA$\(уm*&`}Nw2 T#sUt" 8CstHűkT$&ژ=$\(уm*&`}Nw2 T#sUt" 8CstHűkT$&Ss\YJd2E҈<"ky6 pS H:75WB*ӋǪF-Z֩v"D^ShQ5<uK)j\DiŇA Ӌc#խP\XdR0GFűꑋc֥hz0yMED׼`` ƍ o@h(xpW4XdLtnn[>jԻRǰ^ShQ5<uK)j0GFűꑋc֨IMK0{6^ɰm>XdLtnn[>j`Dy6S2]LU"]&N,h@$8=R1l}ZԻU铑X уm*&`}Nw2 T#sUt" 8CstHűkRWONF)/F)HMi:%5R.x`UЊl4ƋA Ӌc#խM'#6^ɰm>XdE ѹTMXxH!qlzbmjjX)h7J"`Dy6S2]LU"]&N,hx@$8=R1l}ZԶK`7J"`Dy6S2]LU"]&N,hx@$8=R1l}ZԶMF渲4dz0yMED׼lO.AstnjUa4<^ nn[>jԻRDZLFHQ$TM{&a d<0GFEQ6qcC űꑋc֨IMK0{HQ$TM{&a d<0GFEQ6qcC űꑋc֨IMMF渲4dz0yMED׼lO.AstnjUa4^ nn[>j[Zږ=d2E҈<"ky6 pS H:75WB*Ӌ / 77N-T[V-R2E҈<"ky6 pS H:75WB*Ӌ / 77N-T[V-SG)ѹ,2 "D^ShQ5<uK)j\DiņǪF-Z&y54rS ђ.nE6^ɰm>XdE ѹTMXhx@$8=R1l}ZԶK,{4dz0yMED׼lO.AstnjUa/ 77N-T[V-R2E҈<"ky6 pS H:75WB*Ӌ ǪF-Z֩Rst/F)HMi:%5R.x`UЊl4C űꑋc֨IMK,{4dz0yMED׼lO.AstnjUa/ 77N-T[VBMpj]2E҈<"ky6 pS H:75WB*Ӌ ǪF-Z&y54rS ђ.nE6^ɰm>XdE ѹTMXpxH!qlzbmjjX)h7J"`Dy6S2]LU"]&N,8h@$8=R1l}ZԶK`7J"`Dy6S2]LU"]&N,8h@$8=R1l}ZԶMF渲4dz0yMED׼lO.AstnjUa4^ nn[>jԻRDZLFHQ$TM{&a d<0GFEQ6qaE űꑋc֨IMK0{HQ$TM{&a d<0GFEQ6qaE űꑋc֨IMMF渲4dz0yMED׼lO.AstnjUa/ 77N-T[V-RK2 "D^ShQ5<uK)j\DiŇA Ӌc#խKkT` st/F)HMi:%5R.x`UЊl4à űꑋc֥h:75ŔA$\(уm*&`}Nw2 T#sUt" 8xH!qlzbkRK2 "D^ShQ5<uK)j\DiŇA Ӌc#խP\XdE ѹTMX(<^ nn[>jԻSdz0yMED׼lO.AstnjUa ǪF-Z&y54rS ђ.nE6^ɰm>XdE ѹTMX,h@$8=R1l}ZԶK`7J"`Dy6S2]LU"]&N,4^ nn[>j[ZSs\YJd2E҈<"ky6 pS H:75WB*ӋǪF-Z&y5."D^ShQ5<uK)j\DiłƋA Ӌc#խP\<9Nqe)h7J"`Dy6S2]LU"]&N,/ 77N-T[V-R2E҈<"ky6 pS H:75WB*ӋA Ӌc#խKkTtnk)LFHQ$TM{&a d<0GFEQ6q`xH!qlzbkRL.nE6^ɰm>XdE ѹTMX,<^ nn[>jtnk)LFHQ$TM{&a d<0GFEQ6qaE űꑋc֥]{HQ$TM{&a d<0GFEQ6qaE űꑋc֥h:75ŔA$\(уm*&`}Nw2 T#sUt" 8CstHűkT$&ژ=$\(уm*&`}Nw2 T#sUt" 8CstHűkT$&Ss\YJd2E҈<"ky6 pS H:75WB*ӋǪF-Z֩v"D^ShQ5<uK)j\DiŇA Ӌc#խP\XdR0GFűꑋc֥hz0yMED׼` g` P,4 ᠯ7`,}6F \Z蒨F 9FمUcntaVe2R4=kN ?̙u@( hs:-.*a0KmΌV1wnsmUYV9)6Fk*YV9%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bsk,(0sSmΌ*U(qqBQ4JS?2Fw:mi. cwYe%%Q& c͹у*.1r *:%1­eZ*:%1[[k-ѹ,qBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bsk,n ֜4 ?0a@, fVUtJc͹хZʵUtJcQr4U2R4=kN LӁa0 ?ӬL蒨FcvYgpVPP6tƀP+AQaUeXD<۝UYeXD=Ou[s\YV?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮc-eZӁ8pyi :@Ѻr *:%1­eZ*:%1굖[$J%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1iCa6t9FمUcntaVec[.渴q6 Fi̔ d/NElgI HD 2N@(ǮNy0KJ9LǛsU]ۮc-eZӂ@ai :@P/96*Ǜs k,Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ2Y8(h(?0a@((0sSmΌ*UsPL@ Fә)L@^I&]iYo& tITg# Xnt`ʱue+ZpX( ?0a@Ázr *:%1­eZ*:%1a`"v ֘?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮc-eZӇ9i :@p`p+h96*Ǜs k,.e+"Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ2Y8h(<8a`#fNX4Azr *:%1­eZ*‚bp |-?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮc-eZӆ`6t@h+smUYV9)6Fk*YV9)T$'k-ѹ,qBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bsk,n ֜4< ?0a@hp496*Ǜs k,Ǫk6u`Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ2Y8h0FٰӠ9FمUcntaVeceLٹ?J4fJgHNP?M8xѧ.XD z,$3,y:0eXݺ2Y8( #Lli  96*Ǜs k,Ǩ&%FHqBQ4JS?2Fw:miƍ?̙u `cwYe%%Q& c͹у*.1i`@4<4F͆_(0sSmΌ*U(qZTV2QFi̔ d/Odu$ӂƍ?̙u `cwYe%%Q& c͹у*.1iAA6l4CAzr *:%1­eZ))UAq5oS% 0N%3Nd3$iz{'s&֜4id˭8:-.*a0KmΌV1wnkN ?0a@(<AZr *:%1­eZ*‚bpF75Ŕ!}2R4=kN LӁa0 ?ӬL蒨FcvYgpV ?0a@hfVUtJc͹хZʵUtJck, fS΀EӑFi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ2Y848 ?0a@xx`/fVUtJc͹хZʵUtJck, ]9?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮc-eZӇ@6tFfVUtJc͹хZʵUtJck,'50qBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bsk,n ֜8hp ?0a@p0 (0sSmΌ*UsSYa9ȰqBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bsk,n ֜FٰӠ4 (0sSmΌ*UsPL@&[12Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ2Y8x 4F͆C@Xr *:%1­eZ*:%ZQrLy:1LcL%3Nd3$iz{'s&֜<<<2e֜ Q]ޝe`DFr0%6F \Z?ۂ6t  ?@9FمUcntaVecZeNF@xLh9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \Z?ۂO#Lli4htfVUtJc͹хZʵUtJck,'90qBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bsk,n ֜ s6tA~lªʱΉLy:0YVʱΉLze&0qBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bsk,n ֜ 6l4 ^lªʱΉLy:0YVʱΉLze#`Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ2Y8xFٰӠ (0sSmΌ*UsSYa9ȱ8!(њs%)#K;@ 6Yd˭8:-.*a0KmΌV1wnkN FٰӠ44f.8a1c0ᡠ@$8hph{@2%MqG` 4 1@PH @@Qah@bX!%0@u뎳g(.nby r̓@fq^qX04`487P,EuefcntaWLYv]08hр1̨7W:1}d&O">f9jF9oC s0gFEst,tjV.^aFᡠ@T 2D£<ndgxf7@1stⶺYVe\s'M`LCMi&Qd'L`ng@X8` A073 0 ` cPB (PB (PB (PB (PB (PB+ CU-mn[-ϫ'sPB (PB (PB (PB (PB (PB{LӡUZ֨A\(ӡUZ֨"EZt5L@c9o>Ρ*ksJP>赗kJUO• 7NABt: 6*Ǜs k,ǩmmF渲0 GN銄Zt \)ViƟm*8 T䦺"TffVUtJc͹хZʵUtJcQr4U`ArS]l*1E=ztsP4 7NѠѣP4 ɚtZ˵b惞AsUЊl4t1굗kRc$\(uCOjVΠp:bv8L"ARd=ϭ:-e1sARdu=8hpB)Ӈ"2e֝?FfTɗZtEjkN ?fP h?"kA\ 6ArSsӡtdAT,:FCA@C s 0%DiJP>赗kJUO• 7N.A30LӢ(?FfU+ZpY2ON(DMӠ U9)miЃ T䧺B_7*ЃY9t AT,&ik.1{E5WB*Ӡ4jǪ]KkT@}stu=ZtM`Hp:5"TfjYsNYv\Y]ON4\)P stȵLuC&.Qn ֜8̡Ӡ0A̡\e7Nʺ}2ztArSsT$ӡdOuN *:%1麬<h|d2 U9)\ǸONta4LӢ]c42 T8n zeԶD7J(?Diu=ZtPr2jkAV[VNP29r2dYsNYv\Y]ON4\)P stfa5LuD&pVOY=ztH?"kA\AZLӡ#O-P st  Y>LӢ]c42 T8n zeԶD7J(?Di u=ZtBFjkAV[VNP29r@XOdlfpB({ZtZ˵bpB*zpѧJS3 d˭:&fa5[̡Ӡ0 A̡\e7N T䧺B"2e֝?yjS@h$ AT,&iǛsEbPB (PB (PB (PB (PB (PB qXL ʨ9p\<[-ϫ'sPB (PB (PB (PB (PB (PB s5DZ`8n ze 5D"ENn ze 5D7J(?W Ӡ "dd%>C s 0Mn}\)P ֝c\)P 4iRds TiQaUeXD<۝UYeXD=P\HQAbEp:Yq\)Zt[Ҏ\)JP>赗kJUO• 7N ?TɗZt MS&]i43 80̡Ӡ1h?"kA\ 6ArSsӡtdAT,:FCCFiAO4赗k=LU"?Di4=stck.֨I >HQAbEp: 1Y@L@c9o>;CQtHa)6YsNYv\Y]ON4\)P stj2N3 d˭:"fa5[,({ -2Mq:R5S뚡&֝? NJ{zt 5rL?yjS@hHh赗kJUO• 7N ?TɗZt=j2NMViÁg,=:5StH? |ܫ'A4j%=5BM:A\(0sSmΌ(ٹcO6'My(05S뚋{,AfAT,:FCF iAO4赗k=LU"?CYvBMQ2EҊEQ6tuCOjVFs)N-ZtNea;:pB({ZtZ˵bpB*zpѧJSEd˭:fa5LuD&pVep5StH? NJ{jZtU9)QaUeXD<۝UǾ$S9]+*+i'˦8{24ҎyG%&RH?2M2NAǮ5Sݸy0p BpBBdLz<5Sݸy5+ У%J@5COjVqe 9d˭:pB({ZtZ˵bpB*zpѧJSFZdЃY>Lӡ9 d0q]&N?CYv-R-ѹ,ONF uCOjV?W Ӡ'OO\q{QARd=ϭ:-e1sARdu=8hpB)ӆ?TɗZt=j2NMViƟ({A̡\e5(& T䧺IB5S랝fVUtJc͹хZʵUtJc\e75ŕ~<@'? NJ{j.W1ӡtdIo6趄OYj$WBFZd44Y>LӢ]c42 Q?CYv-R-ѹ,2 A\(ӡUZ֩eRst]+*+i 1;,#5pB({ZtZ˵bpB*zpѧJS ? NJ:ffVUtJc͹хZʵUtJcԶ[s\YXdtANIB@zt U9)HAFمUcntaVec:75Ŕe\1h? NJk%F(\ǸONj1bQ\)JkN4iViƟLӢ]c4赗kJUO• 7N ?TɗZt=j2NMViB&n),=:" T䧺IB5S랝2(0sSmΌ(ٹcql/X#b`YbA\\c'BIo6趄A-DjA-ժACӡ$VY]ONmZd p-ЃY9tÁ!?yjS:ntb\s5R.`TMӡUZ֩eRstu=ZtYMQ"?W Ӡy#KARd=ϭ:-e1sARdu=8hpB)Ӄgj2NMViepA̡\e7N T䧺I@j5S랝2ˆh B *:%1™eɅ1}ȬjzāXHnE~GWk!@BpHXEd˭:Y9t?yjS:-e1sApS HEQ6tA:Z˵mjYnqe)h7J(?]lPSڨCG(?W Ӡ i#KARd=ϭ:-e1sARdu=8hpB)ӂGj2NMS&]i43 80(DMӡ,=: A\ 6ArSsӠlªʱΉLy:0fn)}0j%=5+ Ѓʺ}2zt iNhONIo6NmZd=ϭ:KyjUA-ժANnB m^?yjS@hHh,5#O-P |EX.h9 (PB (PB (PB (PB (PB (PB (P`hDUF3L@ -bG渲(PB (PB (PB (PB (PB (PB (PBpS it1굗kT$&[s\YH?9t1굗kT$&[s\YC$\(WjJ}2ztEZt$WPL[Ҏqea ARd=ϭ:-e1sARdu=8hpB)ӆj%P3N *:%1­eZ*:%1ꄚe75ŕO GN銄Zt B5SdQtmUYV9)6Fk*YV9)Ss\YFUV T䦺"Tb{ ^{QSp[KypVOFZd4Y>LӢ]c4赗kJUO• 7N.A30LӢ(?FfU+ZpY2ON P2@ ArSsT$ӡdOuNnUӡ#O-P st  4 ɚtZ˵bAsUЊl4t1굗kT$&[s\YC$\(uCOjV ,p: -bG .pB({ZtZ˵bpB*zpѧJS Ed˭:&.Qn ֜8̡Ӡ1h?"kA\ 6ArSsӡtdAT,:FCCFiAO4赗k=LU"?Dit1굗kT$&[s\YC$\(uCOjV,h?W Ӡ1YH?W T,EX.h?W T, Y9paZLӡ?FfTɗZtMjkN ({ -2Mq:R5S뚡&֝? NJ{ztmUYV9)6FlMe1䧈F&_7*赗kJUO• 7N Ed˭:fa5LuD&pVY2ON45St& T䧺AFمUcntaFtVS ah?yjS@hHh,5#O-P |EX.h9 (PB (PB (PB (PB (PB (PB+ CUmkC L BxF75ŔqB (PB (PB (PB (PB (PB (Pਮ-07N=Vj[Ze75ŔƄ7N=Vj[Ze75ŔA?9t1굗kR[-ѹ,ONF WjJ}2ztEZt2`L= 1stFu `I@ztALӠtj%1pzt2 T=wnL)ep),)rS& T=wnME=zt(ʼnEp#MPSڨCs\YH?hNj2N\)P ֝c\)P 4iRdY9t iAO4A{E5WB*ӠjǪ]KkUlF渲]>9u=Zt \+N>=xL B{s\YH?W T,EX.h?W T, Y9piZLӡ?FfTɗZtEjkN4C'Be)A4j%=5BM:A\(0sSmΌ*UsSk-ѹ,' U9)\ǸONnUӢ(?%SӍ?]em^?yjS@hHhh1#O-P |EX.h? d-07N=Vj[Ze75ŔA?9t1굗kR[-ѹ,2 "E"TW UӢ(?W ӠAbvBeqe8B>YsNYv\Y]ON4\)P stArU 4(0sSmΌ*UsS'tANIB@zt U9)HAFمUcntaVec:75Ŕe\1h? NJk%F(\ǸONj1bQ\)JkN4iViƟLӢ]c4LӢ]c42 T8jUa@(jǪ]KkUlF渲4d({TW ӢkjD+i,0VpB({ZtZ˵bpB*zpѧJSEd˭:fa5LuD&pVY2ONA2Mq:R_7*MdOuPkNj%==: 6*Ǜs 6n{겘SM k^@/ $ T䧺s=: 1Y4 7NѠFp\赗kJUO• 7N ?TɗZt=j2NMViepP2@ ArSsT$ӡdOuN *:%1麬<h|dAk]>=:"Y9t AT,&ik.1{E5WB*Ӡ5stck.֨IMVtnk(d({TW ӢkjD+i,0VpB({ZtZ˵bpB*zpѧJSEd˭:fa5LuD&pVY2ONA2Mq:R_7*MdOuPkNj%==: 6*Ǜs 6n{겘SM k^@/ $ T䧺s=: 1Y4 7NѠLӢ]c42 T8jUa@,=stck.֨IMVtnk(d({TW ӢȬjGVͅ`0Z• }ik.1• F+*ANn ?FfTɗZtMjkN ({ *e)tnUӢ(? NJ{jZtU9)L#,(0"`Q(0sSmΌ)\Sڬ̦ HńYD0`( D(H phAZLӡ?yjS@hHh(=#O-P |EX.h9 d0q]&N?CYvBMpj[s\YC$\(uCOjV  \+N2d-JP>赗kJUO• 7N Ed˭:fa5LuD&pVY2ON45St& T䧺AFمUcntaFtVS ah?yjS@hHh,5#O-P |EX.h9 (PB (PB (PB (PB (PB qXL ʨ>Fkk]L@<'cs\YG(PB (PB (PB (PB (PB (QpTW Q?CYv-Unqe 9ӡUZ֪F渲5st7N=Vj[Z2tdbEv'DP@NL.f#@7J8ngYK A4d˭:ArS'C NJcv@ +‘ FX ‘ ‘ j%1ph? NJcv\c'BXW A)4u=Zt:75ŔƄ橓.j• }ik.1• F+*ANn?yjSBFZd3N)j\sUt" :n zeԶTe75Ŕ2({TW ӡZtPPYsNYv\Y]ON4\)P st9ZLӡ?FfTɗZtEjkN4C'Be)A4j%=5BM:A\(0sSmΌ*UsSk-ѹ,'@xO A\\c'B_7*m)m ƟIo6NLӢ]c4=:4 7NѠP)#O-P |EX.h?)j\sUt" :Fn zeԶTe75ŔA$\(uCOjVqe \+N@xO渲E$PpB({ZtZ˵bpB*zpѧJS?TɗZt MS&]i3 8p,eC'@c(DMӠ U9)miЃ T䧺B_7*ЃY9tP4 ɚtZ˵b惞AsUЊl4t1굗kRQRstu=Zt,R´,$R• }ik.1• F+*ANn4.A30LӢh?FfU+ZpY2ONŠP2@ ArSsT$ӡdOuNnUӡ#O-P st  4 ɚtZ˵bAsUЊl4A:Z˵mjtnk)LFHQAbEp:@&8!ڴ+*ACӢ]c4+*AWSӆ?W T,8h ?TɗZt=j2NMViepre)tj%=5BM:A\(0sSmΌ(ٹcO6'MnUӠFZd44 ɚtZ˵b惞AsUЊl4 A:Z˵mjtnk)LFHQAbEp:.$RZ?´ ф v,u=JP>赗kJUO• 7N ?TɗZt=j2NMViep5StH? |ܫ'DPA\ 6 ArSsӠlªʱΉLy:0YV9)}I̧h?yjS@hHh(AT,&ik.1{E5WB*Ӡt1굗kRQRstu=ZtbR0PIp+iHG .pB({ZtZ˵bpB*zpѧJSEd˭:fa5LuD&pVY2ONȠP2@ ArSsӠlªʱΉLy:0fn)}K Hvb@ ŀQf:38hAT,:FCAcP4 ɚtZ˵b惞AsUЊl4A:Z˵mjtnk)LFHQAbEp:,̦+iYdVe5D^b@,$7tf? #@5R!D@8h$@,Z"2e֝AT,:FCA@ M idOuE=zt 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA!8-#O-P |EX.h?yjPiЃY:s5R.`TMӡUZ&y5QP7J(?]lPSڨEфSGV:0XDŎ\)P ֝c\)P 4iRdgj2NMS&]i43 80̡Ӡ0"B&n)td& T䧺I@j5S랝fVUtJc͹хZʱΉL{Ne8AT,:FCA@:FZd3NYv\s5R.`TM?CYvBMpj-ѹ,.nPءQ\+NLJF* .p:U1)%YsNYv\Y]ON4\)P stȵLuC&.Qn ֜ ?fP 5StH? NJ{ztmUYV9)6FlMe1︉a6 H`x ,Fx h?yjS@hHh,jFZd3NYv\s5R.`TMӡUZ&y5QP7J(?]lPSڨEY p: ' a4+*ACӢ]c4+*AWSӆ?W T,80&.Qn ֜ ?fP T5StH? |ܫ'DPA\ 6 ArSsӢFXQ` DQaUeXD<۝S,0=OYMQ"/X# ? (ˆ`P* `$(Q ȵLuC4 7NѠP1#O-P |EX.h9 (PB (PB (PB (PB (PB (PB (Ⱈ;aQ|ֺ$0Xv\9w[s\YG(PB (PB (PB (PB (PB (PB (PEpit1굗kR4r:4puKkUnҝS EҊ:Z˵mj8e铑?ڢRLAV:}2xLc(qL\(dpBXe.t#+.dLz< U9)]ۇ' D(a`7 D( D(AǮɠU9)]ۇQrp 1bQ\)dT=+iRLӡ?W T,EX.h?W T, Y9p iANn?yjS:AsUЊl4t1굗kR4p˧'#ءQ\+N+i' rF渲YsNYv\Y]ON4\)P stȵLuC&.Qn ֜i2ON5SRh? NJ{jZt U9)5SNAH’ D()ex/nXQP$qD!HQaUeXD<۝UYeXD=Ou[s\YWO0 D(p D(vA\A\\c'B_7*m)m ƟIo6NLӢ]c49 (PB (PB (PB (PB (PB (P UF3AsXnqePB (PB (PB (PB (PB (PB 9 d-0p7N=Vj8\9t1hZ&y5[AF渲HQAȮ•td´H$( a1;.kѹ,5pB({ZtZ˵b情pB*zpѧ JS-j%P3N *:%1­e4pqV9)SGe:N, Ô%-A0HP0 ]:t t'LT$ӡ FW=:pA[$JӠlªʱΉLy:0YMUtJchx`5SdQ.W1ӡe1st5 JkN4diViƜ,LӢ]c4,Fp\LӢ]c42 T8jUa@ӡUZ&y5,R3HQAbEp:Yq\)Zt[Ҏ\)JP>赗kJUO• 7N ?TɗZt MS&]i3 8p,C'@b(DMӠ U9)miЃ T䧺B_7*ЃY9tAT,&ik.1pS HEQ6t t1굗kT$&[s\YJ\`7J(?]lPSڨAfH{H?W Ӡ& aV!} \)P ֝c\)P 4iRd@ȵLuBQ2e֝A30Zӆ({ /A̡\e7Nj%==:4 7NѠ?yjS:-e1sApS HEQ6t A:Z˵kR-ѹ,.s0d({TW ӢMq?W Ӡ& aV >NFARd=ϭ:-e1sARdu=8hpB)ӂ"2e֝?FfTɗZtMjkN48̡Ӡ25StArSsӡ#O-P st  iAO4赗k9 d0q]&N?CYvBMpjYe75Ŕf stu=Zt\d7Bl@MeQ~ec`Nk2tt*FJP>赗kJUO• 7N Ed˭:&.fa5[?fP -2Mq:A\AT,:FCA`赗kJUO• 7N "2e֝?FfTɗZt A30ZӇ({ e)t U9)ЃY9tS@JSp1stJpB({ZtZ˵bpB*zpѧJS.1j2NMViOY=zt?"kЃʺ}2ztEdOuPkNj%==:Q%ڽ( A@X$< A : m^A!H( Ah$AT,:FCA赗kJUO• 7N Ed˭: A30LӢh?FfU+Zpeph?"kЃʺ}2ztEdOuPkNj%==:Q%ڽ( AH?&Kyzt C LӢ]c42 T8jUa@hӡUZ&y5,R3HQAbEp:sYP+i 0$&k-̓ds?W T,EX.h?W T, Y9pXyZLӠ3 d˭:&fa5[ ?fP =2Mq:WOONU9)miЃ T䧺BYj$WA!?&Kyzt iANnA!赗kJUᡣO• 7N.1j2NMViÏY=zt(DMӡtd5S뚡&֝? NJ{zt uKyzP4j$W@HjFZd4Y>LӢ]c42 T8jUa@hhzǪ]P\=:A\ 6ArSsӡdOuE=zt iANnA!LӢ]c4 (PB (PB (PB (PB (PB (PB (PB (Ⱈ;aQ|&y7D(@&nk+pgVqB (PB (PB (PB (PB (PB (PB (PB =LTEǪ]P\<R9ȹQSCYvBMpj[s\YJ\`7J(?ڢRLAVIą#!,& a0$&PL Ps1Í^ϴ+*ACӢ]c4+*AWSӆ?W T,8x0U9*tmUYV9)6Fk*YV9)T$'k-sl0$&:*miЃ#+? NJk%FiQaUeXD<۝UYeXD=NqeW#LeZ5SdQ.W1Ӡ1z-bENj•n ֜i-ҭZӍ?yjS@hHh,9#O-P |EX.h?yjPiЃY:5R.`TMFn ze 5ɪnqe)s$\(uCOjVΠp:bv8L"ARd=ϭ:-e1sARdu=8hpB)Ӈ"2e֝?FfTɗZtEjkN ?fP h?"kA\ 6ArSsӡtdAT,:FCA@赗kJUO• 7N Ed˭:&.Qn ֜4hp,C'@aze)t U9)ЃY9tAT,&ik.1{E5WB*ӠhpzǪ]P\<R92EҊ[=+iBt+ink+cXAS'# \)P ֝c\)P 4iRdAj2N3 d˭:&fa5[  ?fP Ze)t U9)ЃY9t4 ɚtZ˵b惜2 T8jUa@PӡUZ&y5[-ѹ,.s0d({TW Ӣ&#fp:k-̓-#sYR6h?W T,EX.h?W T, Y9pP0-S&]iЃfa5Lu@3 8q2ONh?"kЃ T䧺BFZd4 iAO4赗k=LU"?Di4t1굗kT$&e75Ŕf stu=Zt\dzɠ\+Nd3$td T• }ik.1• F+*ANn ?TɗZt MS&]i)jkN̡Ӡ1e)t U9)ЃY9t?yjS:-e1sApS HEQ6t A:Z˵kUR3HQAbEp:.r-St*FZt[%'[>F"˦R6h?W T,EX.h?W T, Y9pP.A30LӠRQn ֜8C'@` (DMӡdOuN=:" T䧺IB5S랝?]em^ C nQ%ڽ:CA!RFZd4 AT,&ik.1s5R.`TMAP7N=VjlF渲.nPءQ\+Nd=n}5Zt@A + x!d3$'5pB({ZtZ˵bpB*zpѧJS"2e֝ MS&]i43 8i2ON?"kЃ T䧺B5S뚡&֝?]em^ p-4Y9tH?yjS:-e1sApS HEQ6t Ơn ze 5ɪnqe)s$\(uCOjVj>p: AV(=A ,&s?W T,EX.h?W T, Y9pX4-S&]ibQ2e֝A30Zӆ({ e)t U9)Ѓ T䧺IBYj$WA!?&Kyzt iANnA!ZFZd3NYv\s5R.`TM@pӡUZ&y5[-ѹ,.s0d({TW Ӣ#lV9nz>@0DPBR4U̝IFdsJP>赗kJUO• 7N "2e֝ MS&]i43 8i2ON52Mq:A\ArSsT$ӡk[ͫҁnQ%ڽ:CP4 7NѠ`zFZd3NYv\s5R.`TM@?CYvBMpj[s\YJ\`7J(?]lPSڨA%H٬#\+N(` $4$hsJTJY ARd=ϭ:-e1sARdu=8hpB)ӂȵLuA?FfTɗZtMjkN̡Ӡ0 P2B5S랝? NJ{jZt uKyzP4j$W@HjFZd4  iAO4赗k=LU"?Di4A:Z˵kUR3HQAbEp:l MZth?TɗZt MS&]iЃfa5[BY=zt P2B5S랝? d0q]&NѣP7N=VjlF渲.nPءQ\+N,Ⱥ$@Eq FKyxO[ߺ75ŕh?W T,EX.h?W T, Y9pXqZLӡj2N3 :̡ӡ2Mq:A\ApS HEQ6tA:Z˵kUR3HQAbEp:l L9Zth?TɗZt MS&]iЃfa5[BY=zt P2B5S랝9 d0q]&NѨ?CYvBMpj[s\YJ\`7J(?]lPSڨCQh?W Ӡ#|Ⱥ a>63.N\)P ֝c\)P 44iRdO"2e֝ MS&]i43 8q2ONe)t 5rLArSsT$ӡdOuNIo6JCPMDj AT,:FCCÐ4 ɚtZ˵bAsUЊl4 A:Z˵kUR3HQAbEp:(L55 \+N .FO8da4+*ACӢ]c4+*AWSӆ?W T,8qZLӡj2NMViFY=ztH?"kЃʺ}2zt U9)miЃ T䧺B5S뚋{AT,:FCCH?yjS:-e1sApS HǪ]P\<R92EҊEQ6t AbEp:">@H 9JP>赗kJUᡣO• 7N ?TɗZt MS&]i43 80̡Ӡ0"B&n?yjS@hHhx-#O-P |EX.h9 d0q]&NӡUZ&y5[-ѹ,.s0d({TW Ӣ2GV)MҎa.h?W T,EX.h?W T, Y9pYZLӡj2NMViFY=zt(DMӡ#O-P st   iAO4赗k=LU"?CYvBMpj[s\YJ\`7J(?Di u=ZtZ[`mш?W Ӡ&  @z• }ik.1• CF+*ANn<-S&]iЃfa5LuD&pVepP2BFZd4 iAO4赗k=LU"?CYvBMpj[s\YJ\`7J(?Di AbEp:"(>Dp:`` XD YsNYv\Y]ON4\)P stȵLuBQ2e֝A30Zӆ({ ze)t iANnA!赗kJUO• 7N Ed˭: A30LӢh?FfU+Zpep(DMӡdOuNj%=5BM:Q%ڽ( A5[ͫӠh$5#O-P st  Ð4 ɚtZ˵b惜PB (PB (PB (PB (PB (PB qA8:}ʨ9p\<=ѹ,Bs1ÍY (PB (PB (PB (PB (PB (PG=LTEǪ]P\赗kJUO• 7N ?TɗZt MS&]i3 8p,C'@eP2@ ArSsT$ӡdOuNnUӡ#O-P st  4 ɚtZ˵b{E5WB*ӠhhӡUZ&y5QR92EҊ[=+iR´ nk(X K(?W T,EX.h?W T, Y9pȵLuBQ2e֝A30ZӇY=zt92Mq:R5S뚡&֝? NJ{zt 5rL?yjS@hHhp5#O-P |EX.h9 d0q]&N?CYvBMpj-ѹ,.s0d({TW ӡe@e\(%YsNYv\Y]ON4\)P stᠣȵLuBQ2e֝A30ZӇY=zt-2Mq:R5S뚡&֝? NJ{zt 5rL?yjS@hHhhY>LӢ]c42 T8jUa@?CYvBMpj-ѹ,.s0d({TW Ӡ$=Ϥ+ink+>YsNYv\Y]ON4\)P stYZLӡj2NMViFY=ztP2B5S랝?yjS@hHhx赗kJUO• 7N ?TɗZt MS&]i43 8hY2ON(DMӡdOuNLӢ]c42 T8jUa@PӡUZ&y5QR92EҊ[=+isYT AV5FfI鏑9pAЩ4+*ACӢ]c4+*AWSӆ?W T,8(.A30LӠRQn ֜8C'@d5StArSsӡ#O-P st  P4 ɚtZ˵b惞AsUЊl4 A:Z˵kUnqe)s$\(uCOjV556h?W Ӡ&(?210'5:n:#g)&pB({ZtZ˵bpB*zpѧJSO"2e֝?FfTɗZt A30ZӇ({ nB&n? NJ{zt iANnA!bFZd3NYv\s5R.`TMAcP7N=VjF[s\YJ\`7J(?]lPSڨEEnH٣\+Nd3$tYtt*FJP>赗kJUO• 7N "2e֝?FfTɗZt A30ZӇ({ e)t U9)ЃY9tLӢ]c4)j\sUt" :n ze 5ɪF渲.nPءQ\+Nn.nT%OGV)MҎQ*z• }ik.1• F+*ANnLӢ]c42 T8jUa@jǪ]P\LӢ]c42 T8n ze 5ɪF渲.nP5WB*Ӡ48j[=+ip:@XO?W T,EX.h?W T, Y9pQZLӡj2NMViep5StAT,:FCCh?yjS:-e1sApS HǪ]P\LӢ]c42 T8n ze 5ɪF渲.nP5WB*Ӡ45k{U´赖ۣ@L@+*ACӢ]c4+*AWSӆ?W T,8yZLӡj2NMVi,=: A̡\e7NDp:`` XD YsNYv\Y]ON4\)P stȵLuBQ2e֝A30Zӆ({ ze)t iANnA!赗kJUO• 7N ?TɗZtfa5LuD&pV,=:A̡\e7Nj%==:A\ 6A-Djh$5[Io6NLӢ]c42 T8jUa@h,=stck.֨IMTe75Ŕf stu=ZtJ(іp:<'О1NF \)P ֝c\)P 4iRdj2N&.Qn ֜4C'@`(DMӡdOuNj%=5BM:Q%ڽ( A5[ͫӠh$5#O-P st  P4 ɚtZ˵b惞AsUЊl4 t1굗kT$&2R3HQAbEp:%lVYh?W Ӡ@'О1NF \)P ֝c\)P 4iRdȵLuA?FfTɗZtMjkN̡Ӡ0e)t U9)Ѓ T䧺IBYj$WA!?&Kyzt iANnA!8rFZd3NYv\sѿX4;Àq@h0 a@w CPy:0eXݺ2XYv\1lO <uK)j0GFű굗kR,S z0yMED׼lO.A"0Ǫ]KkUF[s\YJd/F)HMi:%5DZf#stZ˵mjz0yMED׼lO.A"0Ǫ]KkUlF渲4^ShQ5<uK)j0GFű굗kT$b`Dy6S2]LTEa:77N-UZ&y5,$TM{&a d-3 ѹqlze 5ɩeR9/F)HMi:%5DZf#stZ˵kSG уm*&`}Nw2 Q8=VjF[s\YB`Dy6S2]LTEa:77N-UZ&y5QR9/F)HMi:%5DZf#stZ˵kU$TM{&a d-3 ѹqlze 5ɪnqe)s`Dy6S2]LU"8=Vj[Z[s\YJd2E҈@$]&N,/F)HMi:%5R.x`Ӌck.֥ >HQDiņуm*&`}Nw2 T#stZ˵mj.nE EQ6qa`Dy6S2]LU"8=Vj[ZdxH!TMX(h<"ky6 pS H:77N-UZ֪nqe)h7J"CsUt" 8Px<"ky6 pS H:77N-UZ&"D^ njUa/F)HMi:%5R.x`Ӌck.֨I >HQDiŇуm*&`}Nw2 T#stZ˵j.nE EQ6q``Dy6S2]LU"8=VjԲtnk(dxH!TMX(<^ShQ5<uK)j\Ǫ]P\XdE ѹqlze 5ɪnqe st/ 75WB*Ӌуm*&`}Nw2 T#stZ˵kUR3HQDiņ $TM{&a d<0GFű굗kT$&e75Ŕf st/ 75WB*Ӌ  $TM{&a d<0GFű굗kT$&e75Ŕf st/ 75WB*Ӌ уm*&`}Nw2 T#sUt" 8CstZ˵mjYnqe }2r0^ShQ5<uK)j\DiōǪ]KkT.L$TM{&a d<0GFEQ6qcE ű굗kRQP˧'#6^ɰm>XdE ѹTMXxH!qlzeԶVtnk(e铑`Dy6S2]LU"]&N,hxH!qlze 5ɩeR92E҈<"ky6 pS H:75WB*Ӌ4<^ nn[YvBMpj-ѹ,.s0dz0yMED׼lO.AstnjUa4hx@$8=VjlF渲.nE6^ɰm>XdE ѹTMXxH!qlzeԶD7J"`Dy6S2]LU"]&N,hh@$8=Vjdz0yMED׼lO.AstnjUa44h@$8=VjԲtnk)K"D^ShQ5<uK)j\Diō / 77N-UZ&y5QR92E҈<"ky6 pS H:75WB*Ӌ4^ nn[YvBMpj[s\YJ\`7J"`Dy6S2]LU"]&N,hhx@$8=VjԲtnk)K"D^ShQ5<uK)j\Diō Ǫ]P\HQ$TM{&a d<0GFEQ6qcABCstZ˵j.nE6^ɰm>XdE ѹTMXPxH!qlze 5ɩeR92E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5QR92E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5[-ѹ,.s0dz0yMED׼lO.AstnjUa4/ 77N-UZ&y5,R3HQ$TM{&a d<0GFEQ6qcAACstZ˵kUnqe)s$\(уm*&`}Nw2 T#sUt" 8xH!qlze 5ɪnqe)s$\(уm*&`}Nw2 T#sUt" 8CstZ˵kR-ѹ,.s0dz0yMED׼lO.AstnjUa44^ nn[YvBMpj-ѹ,.s0dz0yMED׼lO.AstnjUa44^ nn[YvBMpj[s\YJ\`7J"`Dy6S2]LU"]&N,h,<^ nn[YvBMpjYe75Ŕf st/F)HMi:%5R.x`UЊl4Ƃ ű굗kT$&2R3HQ$TM{&a d<0GFEQ6qcAaCstZ˵kUR3HQ$TM{&a d<0GFEQ6qcC ű굗kR,S ђ.nE6^ɰm>XdE ѹTMXxH!qlzeԶTe75ŔA$\(уm*&`}Nw2 T#sUt" 8CstZ˵mj.nE6^ɰm>XdE ѹTMXxH!qlzeԶVtnk)LFHQ$TM{&a d<0GFEQ6qcC ű굗kT$c$\(уm*&`}Nw2 T#sUt" 8CstZ˵kR-ѹ,.nE6^ɰm>XdE ѹTMXxH!qlze 5ɪF渲HQ$TM{&a d<0GFEQ6qcC ű굗kT$&e75Ŕ2E҈<"ky6 pS H:75WB*Ӌ4^ nn[YvBMpjYe75Ŕf st/F)HMi:%5R.x`UЊl4ƇǪ]P\XdE ѹTMX`x@$8=VjlF渲.nE6^ɰm>XdE ѹTMXhxH!qlze 5ɩeR92E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5QR92E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5[-ѹ,.s0dz0yMED׼lO.AstnjUa4/ 77N-UZ&y5,R3HQ$TM{&a d<0GFEQ6qcACstZ˵kUnqe)s$\(уm*&`}Nw2 T#sUt" 8xH!qlze 5ɪnqe)s$\(уm*&`}Nw2 T#sUt" 88xH!qlze 5ɩeR92E҈<"ky6 pS H:75WB*ӋǪ]P\XdE ѹTMX h@$8=VjF[s\YJ\`7J"`Dy6S2]LU"]&N,h4^ nn[YvBMpj[s\YJ\`7J"`Dy6S2]LU"]&N,h/ 77N-UZ&y5,R3HQ$TM{&a d<0GFEQ6qc@xH!qlze 5ɪF渲.nE6^ɰm>XdE ѹTMX <^ nn[YvBMpj[s\YJ\`7J"`Dy6S2]LU"]&N,4h@$8=Vj[Z[s\YJd2E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ֪F渲4dz0yMED׼lO.AstnjUa4^ nn[Yv-Q2E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ֪nqe)h7J"`Dy6S2]LU"]&N,4h@$8=Vjdz0yMED׼lO.AstnjUa4^ nn[YvBMpjYe75Ŕ2E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5QP7J"`Dy6S2]LU"]&N,4h@$8=VjlF渲HQ$TM{&a d<0GFEQ6qaFA Ӌck.֨IMK,F渲.nE6^ɰm>XdE ѹTMXhѢCstZ˵kUnqe)s$\(уm*&`}Nw2 T#sUt" 8ѣE ű굗kT$&e75Ŕf st/F)HMi:%5R.x`UЊl4FA Ӌck.֨IMK,F渲.nE6^ɰm>XdE ѹTMXhxH!qlze 5ɪF渲.nE6^ɰm>XdE ѹTMXhxH!qlze 5ɪnqe)s$\(уm*&`}Nw2 T#sUt" 8ѢCstZ˵kR-ѹ,.s0dz0yMED׼lO.AstnjUa4^ nn[YvBMpj-ѹ,.s0dz0yMED׼lO.AstnjUa4^ nn[YvBMpj[s\YJ\`7J"`Dy6S2]LU"]&N,44<^ nn[YvBMpjYe75Ŕf st/F)HMi:%5R.x`UЊl4CC ű굗kT$&2R3HQ$TM{&a d<0GFEQ6qaCstZ˵kUR3HQ$TM{&a d<0GFEQ6qaCstZ˵kUR3HQ$TM{&a d<0GFEQ6qaCstZ˵kR-ѹ,.s0dz0yMED׼lO.AstnjUa / 77N-UZ&y5QR92E҈<"ky6 pS H:75WB*Ӌ Ǫ]P\<R92E҈<"ky6 pS H:75WB*Ӌ A Ӌck.֨IMK,F渲.nE6^ɰm>XdE ѹTMXh,<^ nn[YvBMpj-ѹ,.s0dz0yMED׼lO.AstnjUa Ǫ]P\<R92E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5,R3HQ$TM{&a d<0GFEQ6qaE ű굗kT$&2R3HQ$TM{&a d<0GFEQ6qaE ű굗kT$&e75Ŕf st/F)HMi:%5R.x`UЊl4ÆA Ӌck.֥Ye75ŔA$\(уm*&`}Nw2 T#sUt" 8CstZ˵mjtnk)LFHQ$TM{&a d<0GFEQ6qaE ű굗kRc$\(уm*&`}Nw2 T#sUt" 8CstZ˵mjRst/F)HMi:%5R.x`UЊl4ÆA Ӌck.֨I >HQ$TM{&a d<0GFEQ6qaE ű굗kT$&[s\YC$\(уm*&`}Nw2 T#sUt" 8CstZ˵kUnqe st/F)HMi:%5R.x`UЊl4ÆA Ӌck.֨IMVtnk(dz0yMED׼lO.AstnjUa/ 77N-UZ֩eRst/F)HMi:%5R.x`UЊl4à ű굗kRQRst/F)HMi:%5R.x`UЊl4à ű굗kR[-ѹ,2 "D^ShQ5<uK)j\DiŇA Ӌck.֨IMK,F渲HQ$TM{&a d<0GFEQ6qaCstZ˵kUnqe st/F)HMi:%5R.x`UЊl4à ű굗kT$&e75Ŕ2E҈<"ky6 pS H:75WB*Ӌ Ǫ]KkTtnk)LFHQ$TM{&a d<0GFEQ6q`CstZ˵mjtnk)LFHQ$TM{&a d<0GFEQ6q`CstZ˵mjRst/F)HMi:%5R.x`UЊl4CE ű굗kT$&[s\YC$\(уm*&`}Nw2 T#sUt" 8PxH!qlze 5ɪnqe st/F)HMi:%5R.x`UЊl4ACstZ˵mjtnk)LFHQ$TM{&a d<0GFEQ6q`xH!qlze 5ɪF渲HQ$TM{&a d<0GFEQ6q`CstZ˵mjYnqe)h7J"`Dy6S2]LU"]&N,4^ nn[Yv-Unqe)h7J"`Dy6S2]LU"]&N,4^ nn[Yv-US ђ.nE6^ɰm>XdE ѹTMX,h@$8=VjԲtnk(dz0yMED׼lO.AstnjUa / 77N-UZ&y5QP7J"`Dy6S2]LU"]&N,4^ nn[YvBMpj[s\YC$\(уm*&`}Nw2 T#sUt" 8Xx@$8=Vj[Z[s\YJd2E҈<"ky6 pS H:75WB*ӋA Ӌck.֥[s\YJd2E҈<"ky6 pS H:75WB*ӋA Ӌck.֨IMK,F渲HQ$TM{&a d<0GFEQ6q`xH!qlze 5ɪF渲HQ$TM{&a d<0GFEQ6q`xH!qlze 5ɪnqe st/F)HMi:%5R.x`UЊl4ƋA Ӌck.֥Ye75ŔA$\(уm*&`}Nw2 T#sUt" 8CstZ˵mjRst/F)HMi:%5R.x`UЊl4ƋA Ӌck.֨IMK,F渲HQ$TM{&a d<0GFEQ6qaE ű굗kT$&e75Ŕ2E҈<"ky6 pTW Q8=Vj[Z[s\YB`Dy6S2]Q\)DZf#stZ˵mj8^ShQ5<uK*+(Ltnn[Yv-Unqe уm*&`}NwEpi`Ӌck.֥[s\YB`Dy@pPhaX/@`(P4 4 aǛsU]ۮc-ekUld- <uK)j0GFű굗kR,S z0yMED׼lO.A"0Ǫ]KkUF[s\YJd/F)HMi:%5DZf#stZ˵mjz0yMED׼lO.A"0Ǫ]KkUlF渲4^ShQ5<uK)j0GFű굗kT$b`Dy6S2]LTEa:77N-UZ&y5,$TM{&a d-3 ѹqlze 5ɩeR9/F)HMi:%5DZf#stZ˵kSG уm*&`}Nw2 Q8=VjF[s\YB`Dy6S2]LTEa:77N-UZ&y5QR9/F)HMi:%5DZf#stZ˵kU$TM{&a d-3 ѹqlze 5ɪnqe)s`Dy6S2]LU"8=Vj[Z[s\YJd2E҈@$]&N,/F)HMi:%5R.x`Ӌck.֥ >HQDiņуm*&`}Nw2 T#stZ˵mj.nE EQ6qa`Dy6S2]LU"8=Vj[ZdxH!TMX(h<"ky6 pS H:77N-UZ֪nqe)h7J"CsUt" 8Px<"ky6 pS H:77N-UZ&"D^ njUa/F)HMi:%5R.x`Ӌck.֨I >HQDiŇуm*&`}Nw2 T#stZ˵j.nE EQ6q``Dy6S2]LU"8=VjԲtnk(dxH!TMX(<^ShQ5<uK)j\Ǫ]P\XdE ѹqlze 5ɪnqe st/ 75WB*Ӌуm*&`}Nw2 T#stZ˵kUR3HQDiņ $TM{&a d<0GFű굗kT$&e75Ŕf st/ 75WB*Ӌ  $TM{&a d<0GFű굗kT$&e75Ŕf st/ 75WB*Ӌ уm*&`}Nw2 T#sUt" 8CstZ˵mjYnqe }2r0^ShQ5<uK)j\DiōǪ]KkT.L$TM{&a d<0GFEQ6qcE ű굗kRQP˧'#6^ɰm>XdE ѹTMXxH!qlzeԶVtnk(e铑`Dy6S2]LU"]&N,hxH!qlze 5ɩeR92E҈<"ky6 pS H:75WB*Ӌ4<^ nn[YvBMpj-ѹ,.s0dz0yMED׼lO.AstnjUa4hx@$8=VjlF渲.nE6^ɰm>XdE ѹTMXxH!qlzeԶD7J"`Dy6S2]LU"]&N,hh@$8=Vjdz0yMED׼lO.AstnjUa44h@$8=VjԲtnk)K"D^ShQ5<uK)j\Diō / 77N-UZ&y5QR92E҈<"ky6 pS H:75WB*Ӌ4^ nn[YvBMpj[s\YJ\`7J"`Dy6S2]LU"]&N,hhx@$8=VjԲtnk)K"D^ShQ5<uK)j\Diō Ǫ]P\HQ$TM{&a d<0GFEQ6qcABCstZ˵j.nE6^ɰm>XdE ѹTMXPxH!qlze 5ɩeR92E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5QR92E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5[-ѹ,.s0dz0yMED׼lO.AstnjUa4/ 77N-UZ&y5,R3HQ$TM{&a d<0GFEQ6qcAACstZ˵kUnqe)s$\(уm*&`}Nw2 T#sUt" 8xH!qlze 5ɪnqe)s$\(уm*&`}Nw2 T#sUt" 8CstZ˵kR-ѹ,.s0dz0yMED׼lO.AstnjUa44^ nn[YvBMpj-ѹ,.s0dz0yMED׼lO.AstnjUa44^ nn[YvBMpj[s\YJ\`7J"`Dy6S2]LU"]&N,h,<^ nn[YvBMpjYe75Ŕf st/F)HMi:%5R.x`UЊl4Ƃ ű굗kT$&2R3HQ$TM{&a d<0GFEQ6qcAaCstZ˵kUR3HQ$TM{&a d<0GFEQ6qcC ű굗kR,S ђ.nE6^ɰm>XdE ѹTMXxH!qlzeԶTe75ŔA$\(уm*&`}Nw2 T#sUt" 8CstZ˵mj.nE6^ɰm>XdE ѹTMXxH!qlzeԶVtnk)LFHQ$TM{&a d<0GFEQ6qcC ű굗kT$c$\(уm*&`}Nw2 T#sUt" 8CstZ˵kR-ѹ,.nE6^ɰm>XdE ѹTMXxH!qlze 5ɪF渲HQ$TM{&a d<0GFEQ6qcC ű굗kT$&e75Ŕ2E҈<"ky6 pS H:75WB*Ӌ4^ nn[YvBMpjYe75Ŕf st/F)HMi:%5R.x`UЊl4ƇǪ]P\XdE ѹTMX`x@$8=VjlF渲.nE6^ɰm>XdE ѹTMXhxH!qlze 5ɩeR92E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5QR92E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5[-ѹ,.s0dz0yMED׼lO.AstnjUa4/ 77N-UZ&y5,R3HQ$TM{&a d<0GFEQ6qcACstZ˵kUnqe)s$\(уm*&`}Nw2 T#sUt" 8xH!qlze 5ɪnqe)s$\(уm*&`}Nw2 T#sUt" 88xH!qlze 5ɩeR92E҈<"ky6 pS H:75WB*ӋǪ]P\XdE ѹTMX h@$8=VjF[s\YJ\`7J"`Dy6S2]LU"]&N,h4^ nn[YvBMpj[s\YJ\`7J"`Dy6S2]LU"]&N,h/ 77N-UZ&y5,R3HQ$TM{&a d<0GFEQ6qc@xH!qlze 5ɪF渲.nE6^ɰm>XdE ѹTMX <^ nn[YvBMpj[s\YJ\`7J"`Dy6S2]LU"]&N,4h@$8=Vj[Z[s\YJd2E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ֪F渲4dz0yMED׼lO.AstnjUa4^ nn[Yv-Q2E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ֪nqe)h7J"`Dy6S2]LU"]&N,4h@$8=Vjdz0yMED׼lO.AstnjUa4^ nn[YvBMpjYe75Ŕ2E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5QP7J"`Dy6S2]LU"]&N,4h@$8=VjlF渲HQ$TM{&a d<0GFEQ6qaFA Ӌck.֨IMK,F渲.nE6^ɰm>XdE ѹTMXhѢCstZ˵kUnqe)s$\(уm*&`}Nw2 T#sUt" 8ѣE ű굗kT$&e75Ŕf st/F)HMi:%5R.x`UЊl4FA Ӌck.֨IMK,F渲.nE6^ɰm>XdE ѹTMXhxH!qlze 5ɪF渲.nE6^ɰm>XdE ѹTMXhxH!qlze 5ɪnqe)s$\(уm*&`}Nw2 T#sUt" 8ѢCstZ˵kR-ѹ,.s0dz0yMED׼lO.AstnjUa4^ nn[YvBMpj-ѹ,.s0dz0yMED׼lO.AstnjUa4^ nn[YvBMpj[s\YJ\`7J"`Dy6S2]LU"]&N,44<^ nn[YvBMpjYe75Ŕf st/F)HMi:%5R.x`UЊl4CC ű굗kT$&2R3HQ$TM{&a d<0GFEQ6qaCstZ˵kUR3HQ$TM{&a d<0GFEQ6qaCstZ˵kUR3HQ$TM{&a d<0GFEQ6qaCstZ˵kR-ѹ,.s0dz0yMED׼lO.AstnjUa / 77N-UZ&y5QR92E҈<"ky6 pS H:75WB*Ӌ Ǫ]P\<R92E҈<"ky6 pS H:75WB*Ӌ A Ӌck.֨IMK,F渲.nE6^ɰm>XdE ѹTMXh,<^ nn[YvBMpj-ѹ,.s0dz0yMED׼lO.AstnjUa Ǫ]P\<R92E҈<"ky6 pS H:75WB*Ӌ / 77N-UZ&y5,R3HQ$TM{&a d<0GFEQ6qaE ű굗kT$&2R3HQ$TM{&a d<0GFEQ6qaE ű굗kT$&e75Ŕf st/F)HMi:%5R.x`UЊl4ÆA Ӌck.֥Ye75ŔA$\(уm*&`}Nw2 T#sUt" 8CstZ˵mjtnk)LFHQ$TM{&a d<0GFEQ6qaE ű굗kRc$\(уm*&`}Nw2 T#sUt" 8CstZ˵mjRst/F)HMi:%5R.x`UЊl4ÆA Ӌck.֨I >HQ$TM{&a d<0GFEQ6qaE ű굗kT$&[s\YC$\(уm*&`}Nw2 T#sUt" 8CstZ˵kUnqe st/F)HMi:%5R.x`UЊl4ÆA Ӌck.֨IMVtnk(dz0yMED׼lO.AstnjUa/ 77N-UZ֩eRst/F)HMi:%5R.x`UЊl4à ű굗kRQRst/F)HMi:%5R.x`UЊl4à ű굗kR[-ѹ,2 "D^ShQ5<uK)j\DiŇA Ӌck.֨IMK,F渲HQ$TM{&a d<0GFEQ6qaCstZ˵kUnqe st/F)HMi:%5R.x`UЊl4à ű굗kT$&e75Ŕ2E҈<"ky6 pS H:75WB*Ӌ Ǫ]KkTtnk)LFHQ$TM{&a d<0GFEQ6q`CstZ˵mjtnk)LFHQ$TM{&a d<0GFEQ6q`CstZ˵mjRst/F)HMi:%5R.x`UЊl4CE ű굗kT$&[s\YC$\(уm*&`}Nw2 T#sUt" 8PxH!qlze 5ɪnqe st/F)HMi:%5R.x`UЊl4ACstZ˵mjtnk)LFHQ$TM{&a d<0GFEQ6q`xH!qlze 5ɪF渲HQ$TM{&a d<0GFEQ6q`CstZ˵mjYnqe)h7J"`Dy6S2]LU"]&N,4^ nn[Yv-Unqe)h7J"`Dy6S2]LU"]&N,4^ nn[Yv-US ђ.nE6^ɰm>XdE ѹTMX,h@$8=VjԲtnk(dz0yMED׼lO.AstnjUa / 77N-UZ&y5QP7J"`Dy6S2]LU"]&N,4^ nn[YvBMpj[s\YC$\(уm*&`}Nw2 T#sUt" 8Xx@$8=Vj[Z[s\YJd2E҈<"ky6 pS H:75WB*ӋA Ӌck.֥[s\YJd2E҈<"ky6 pS H:75WB*ӋA Ӌck.֨IMK,F渲HQ$TM{&a d<0GFEQ6q`xH!qlze 5ɪF渲HQ$TM{&a d<0GFEQ6q`xH!qlze 5ɪnqe st/F)HMi:%5R.x`UЊl4ƋA Ӌck.֥Ye75ŔA$\(уm*&`}Nw2 T#sUt" 8CstZ˵mjRst/F)HMi:%5R.x`UЊl4ƋA Ӌck.֨IMK,F渲HQ$TM{&a d<0GFEQ6qaE ű굗kT$&e75Ŕ2E҈<"ky6 pTW Q8=Vj[Z[s\YB`Dy6S2]Q\)DZf#stZ˵mj8^ShQ5<uK*+(Ltnn[Yv-Unqe уm*&`}NwEpi`Ӌck.֥[s\YB`Dy@8 ?X4;Ah4 |8h+  c͹у*.1#cU`G(0ʱΉLy:0YN#`Fi̔ d/Odu$ӃC&]i< AǮNy0KJ9LǛsU]ۮcFr *Ǜs 6UtA Fә)L@^ILӄ x49]ޝe`DFr0%6F \8fVUYV9)6Fk)lJ#@h9 ΠZphxyd˭8@"@H @Yo& tITg# Xnt`ʱucQaUeXD<۝UsSJ#Alh9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \8Zӂ6tq/AQaUeXD<۝UsS6?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮcFiA844F͆A8+96*Ǜs 6UtJcB6?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮcFiX(4F͆ 9FمUcntaVFʱΉLzF(2R4=kN LӁa0 ?ӬL蒨Fcv+Zp?0a@h9FمUcntaVFʱΉLzFk2`Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ1ln ֜8FٰӠ4 VlªʱΉLy:0YN#eXD=N#w9?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮcFiÁA6t fVUtJc͹хZq*:%1qt %3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1#gpVPh ?0a@xh fVUtJc͹хZq*:%1}2R4=kN LӁa0 ?ӬL蒨Fcv+ZpPpxyi :`zr *:%1­e8c8M 2R4=kN LӁa0 ?ӬL蒨Fcv+ZpP0a`#fNᠰ`fVUtJc͹хZq*:%1k, Fә)L@^I&]iYo& tITg# Xnt`ʱuc8px(a`#fNFVlªʱΉLy:0YN#eXD 7> Fә)L@^I42e֜ Q]ޝe`DFr0%6F \8ZӃ6l4(06D6P`D"5ѹ\(8!(њs%)#K;@ 6Yd˭8:-.*a0KmΌV1wnq?ۂ ƍ?0a@p0<4o(06D6P`D"5mOu΢22R4=kN LӁa0 ?ӬL蒨Fcv+Zp`,84F͆`4o(06D6P`D"5mE\ȃ2R4=kN LӁa0 ?ӬL蒨Fcv+ZpPii :``4o(06D6P`D"5>D Y %3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1#gpVC#Lli44 Zr )P#d@QN#e @Z S[TLP8!(њs%)#K;@ 6Yd˭8:-.*a0KmΌV1wnq?ۂ8ii :a@96*q@E8(j@MPڇ5S'# 2R4=kN LӁa0 ?ӬL蒨Fcv+Zpii :ƂÃVlªʱΉLy:0YN#e2Q8'2R4=kN 42e֜ Q]ޝe`DFr0%6F \8ZӇAa6l4h96*Ǜs 6S% Sڙ(qvqBQ4JS?2Fw:micFLӁa0 ?ӬL蒨Fcv+ZpX(h44F͆s` F@Pp,P4 4 _cvx0lªʫ*:%1­e8aFمUVUtJc͹хZq*:'QaUeUcntaVFd=0lªʱΉLy:0YN#eXD=LGmUYV9)6Fk)lǩ8aFمUcntaVFʱΉLzTF0lªʱΉLy:0YN#eXD=N#pN0lªʱΉLy:0YN#eXD=N#w53(0sSmΌ*SV9)SEaFمUcntaVFʱΉLzFd0lªʱΉLy:0YN#eXD=O(0sSmΌ*SV9)SݬD0mUYV9)6Fk)lǩFk8 *:%1­e8cF&l8 )P#d@QN#e @Z Q ҍaFمU( @( -A MN#j{u 6*q@E8(j@MD*jqQo42'QaUe=Êl )l@ PDj|*vqfVS8FȁF @ &Q̶27(06D6P`D"5BFjj#L&qfVUtJc͹хZq))mLG8< 6*Ǜs 6S% Sڙ(qvӀ` A,8hp,o@phxP4 4 gcv(fVUYV9)6Fk)oQaOp8s(^lªʫ*:%1­e8c9FمUVUtJc͹хZq)smUYV9)6Fk)lfVS8FȁFa6*Ǜs 6S%!0    ,4 AXhA_oX/ǛsU]ۮcF8ptI[ZqX (ÂF`+(0Ǜs :e89w@804`4488<qXDI@ +^6r-'ы7,>DgHFCA}`+(0Ǜs :e89wXh1̨7W:1}d&O">f9jF9oC s0gFEst,tjV.^aFᡣsq3 Ss$'# 2>f9{v[ҏ#3cfYs1̝7O1 @ a6Ff-ĝ28D# WV`j<4( 5@X@ N%Fs25/6F *+(LӡR]>44'59t1[Z6oEҊ:-qU"]+*+i'8DTb• }i7kJU JSO2e֝?2MdLz<? NJcv\c'BbĔ=+iЃRi{U´ABsTɗZt5#O-P st Y>Lӡn1s5R.`ㅹTMPp7N=Kk\FtdHmuCOjV8\W "@ta*1 JP>qb情pB*zpӅpB)ӂq j2NuMS&]i.3 8ӅB&n8YfP Ѓ T䧺IB5S랝fVUtJc͹хZq*:%1}lU9)\ǸON&ՠp5rLA-ҝОi-DjA-ժACӡ $VY]ON4dj 7N4kp-ЃY9t AT,&i7k9pS iㅹ} zָ[A st7OR5| sAȮ•td&p:q , 'F9˙spYsNX.h8\W T, 8\W T,8h(irU 4(0sSmΌ*SV9)S۠\2x8&h8Zӡ :b&֝r@zt lU9)HAFمUcntaVFʱΉLzTF-j%5\c'@aF,J+aARZӍ8Y%U+Zq #O-P st ƠdiAO4qb惞AsUЊl44=stcԶmMr"$\ءQ\+JYos7J1\)V1st ARd=ϭ:Fc\)P 4iRd"2e֝A30LӢh?]em^?&Kyzt MViA2Mq:RY=zt U9)miЃ T䧺B5S뚋{Ak]>=: iANnA ?yjS:Fc=LU"?Di44jǩmkښDHuCOjV(ʼnEpgZt@X@ N%Fa%YsNX.h?W T, ?W T,8(.Q2e֝A-DjA5[ͫӡjkN4P2A4({ " T䧺IB5S랝? NJ{j.W1ӡtdFZd Y>Lӡn1s5R.`TMCn zָ[@d[=+iУ%@c )6YsNX.h?W T, ?W T,8ppȵLuDP&.Yj$WB m^?FfU+Zq2Mq: C'@dA\ 6ArSsӡdOuE=zt 5rLAT,:@PzFZd3NX.h9 d0q]&N?C#jk"u=Zt \+NA`HPYsNX.h?W T, ?W T,8p,iZLӡ?FfTɗZtZ-Ѓj$WBQn ֜i̡\e7NepArSsT$ӡdOuOj%=0p D(zaaDpˆX$^,)gBdOudOuE=ztM`Hɵh? |ܫ'D4 7NP$44jFZd3NX.h9 d0q]&N?C#jk"u=Zt]I̧p:ta'2gF[)JP>qbpB*zppB)Ӈ?TɗZt=j2NuKyzt p-Ѓfa5[5StH?fP h? NJ{jZtU9)QaUeXD<۝Qs7UǨ%W0a.wU9)\ǸONņ? |ܫ'DP4 7NP$48jFZd3NX.h9 d0q]&NXzǩmkښDHuCOjV?W Ӡ%S8,C'" q ` ARd=ϭ:nt`.h?W T,JS Ed˭:&.Qn ֜4=:"p:5Pn "@ta*3%F@'s0r4Uq\)P ֝#v\pY]ONpY9p  lU9*tmUYV9)6Fk)lǩm.FO 7 ,@ @x@Lӡn1s5R.`TMCFn z&[@d[=+iDdF@DTf\)JP>qbpB*zppB)ӂj2NMS&]iIo6NnQ%ڽ:&pVOe)tA2ON(? NJ{jZt U9)Ѓ T䧺s=:WOONiANnHhѨ?yjS:Fc=LU"?Di48jǪkښDHuCOjV,h?W Ӡ1YH?W T,Cݬc4+*AWSӆ+*ANn88iZLӢ(?FfTɗZtEk[ͫӡ[Io6N3 8B&n̡Ӡ2H? NJ{jZt U9)Ѓ T䧺s=:WOONiANnH(=#O-P |Cݬc42 T8jUa@PӡT$5| sAbEp:.(fAV*3 I,\)P ֝#v\Y]ONY9pXȵLuC&.1k[ͫӡ[Io6N3 8B&n),=:" T䧺IB5S랟C NJ{` P2ˆ/HXR"aH5S5S뚋{*1QjWOON iANnHhhA-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnXdE ѹTMXxH!qlzָɌs$TM{&a d<0GFEQ6qcFA ӋcԶmMr"$\6^ɰm>XdE ѹTMXѡCstBMqS\Ȁ1z0yMED׼lO.AstnjUa44h@$8=Kk\F- 2E^ShQ5<uK)j\Diō / 77N-T$5| s$TM{&a d<0GFEQ6qcCA ӋcԶmMr"$\6^ɰm>XdE ѹTMXCstBMqS\Ȁ1z0yMED׼lO.AstnjUa44^ nn[#jk"/F)HMi:%5R.x`UЊl4ƂA Ӌc 5mMr"$\6^ɰm>XdE ѹTMXXxH!qlzָ[@d<"ky6 pS H:75WB*Ӌ / 77N-T$5| s$TM{&a d<0GFEQ6q`xH!qlzָ[@d<"ky6 pS H:75WB*ӋA Ӌc 5mMr"$\6^ɰm>XdR0GFű[Z6&/F)H44  oC@ AXhA_oy:0eXݺ1lcݭWLa`(lO.A"0ǩmkښD6^ɰm>XdLtnn[I#jk$TM{&a d<0GFEQ6qcE ű[Z6&2E^ShQ5<uK)j\Diō/ 77N-R5| s$TM{&a d<0GFEQ6qcFA Ӌc 5mMr"$\6^ɰm>XdE ѹTMXѢCst-qS\Ȁ1z0yMED׼lO.AstnjUa44h@$8=P\F- 2E^ShQ5<uK)j\Diō/ 77N-R5| s$TM{&a d<0GFEQ6qcCA Ӌc 5mMr"$\6^ɰm>XdE ѹTMXPxH!qlzָ[@d<"ky6 pS H:75WB*Ӌ / 77N-T$5| s$TM{&a d<0GFEQ6qcAcE ű[Z6o.b`Dy6S2]LU"]&N,h,h@$8=P\F- 2E^ShQ5<uK)j\Dił ű[Z6o.b`Dy6S2]LU"]&N,/ 77N-T$5| s$TM{&a J"0ǩmkڮL<"kpo,a P,4 ᠯ7`,ǛsU]ۮc$bYva!*a0 mUYV9)6Fk*F-ef%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bs#˳ fVUtJc͹хZʑYeلΈ8!(њs%)#K;@ 6ɗZpD@?ӬL蒨Fcv]H(0sSmΌ*TZ.$S% ?J4fJgHNP?M84<<2e֜ $xz,$3,y:0eXݺ2F-ef96*Ǜs #˳ c`L= Fә)L@^Ig.XD z,$3,y:0eXݺ2F-ef?ۂ@Ai :ƂAQaUeXD<۝U]H eNF2R4=kN &]iYo& tITg# Xnt`ʱudZ.$kN #Lli ~lªʱΉLy:0YR1k,0V9(@&32O%3Nd3$iz{'s&֜ LӁa0 ?ӬL蒨Fcv]Hn ֜s6t`(0sSmΌ*TZ.$UtJ r`Fi̔ d/Odu$ӂ`ɗZp,"G=wzu[ɂ]U`<۝2bs#˳ ZӁQi :@X(tfVUtJc͹хZʑYeلΉB0 麬h9 ΠZpX,2N@(ǮNy0KJ9LǛsU]ۮc$bYva#+Zp 4<a`#fN8r *:%1­eHŬEXD%s[@h9 ΠZpX,2N@(ǮNy0KJ9LǛsU]ۮc$bYva#+ZpѠh6tÁ9FمUcntaVbYva"sPD2R4=kN &]iYo& tITg# Xnt`ʱudZ.$kN 4?0a@,fVUtJc͹хZʑYeلΉLzbsY 2R4=kN4id˭8:-.*a0KmΌV1wnYeلiÁO#Lli +AQaUeXD<۝U]HǪF,'9 %3Nd3$iz{'s&֜DQx"ɘg$ L`8hh 3#;̫ SFQx%x h P(qXDI@ +^6r-'ы7,>DgHFCA}`+(0Ǜs :eHŬj4`vq^qXTn2Eѓ'~`nq^qXW3p5s!Dy`H @`F3"Q[m5waFdac0@Hpѹb~фy`dQFxxW3p=n;M-bGmuLʹN' M}`L3N" ++5@p@ fqXof88 ` 6(PB (PB (PB (PB (PB (PB (PB (PB (PB (PB+@'kp PB (PB (PB (PB (PB (PB (PB (PB (PB (PB 9 J"stc#˵mjj` 9ӡTZ.֥]ئA?9t1ꑋYeԻU铑` WjJ}2ztEZt2`L= 1stFu `I@ztALӠtj%1pzt2 T=wnL)eprS& T=wnME=zt(ʼnEp#MPSڨCs\YH?hNj2N\)P ֝1k,X.h?W T,?W T,8ipS HEQ6t A:HŬj]0{ءQ\+N+i' Xcs\YH?W T,DZ.1• • 7N.zQ2e֝A30ZӍ?fP ЃB&jPMdOuPkNj%==:rSs@ ()UP\*E0¯_t2,I@B lªʱΉLy:0YR1k,0V9)Tjtnk*=:"[ͥ:-=8Z-ЃA"stc#˵mjj`)j"ENn zbYv-R2EҊEv'DP@[8 1l}`H1stTb• }i#˵bpB*zppB)ӂ5SNAFمUcntaVbYva"sSZԶ#0$ tvЃН1PkN\ArS]l*3N *:%1­eHŬEXD=RH7 Ł X/ArS]l*1E=ztGW^%pVOIo6n ֜iT,:!葋Ye1sARdu=8yRdgj2NMS&]iЃfa5[(DMӠ C'@cA\ 6ArSsӡdOuE=zt 5rLA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9tCFiAO4葋Ye1sAT,.NA-ժAWSӍ?%ڵB)Ӎ?&Kyzt )j\sUt" :C7N=R1k,Z֩v"Ek{U´Ye\(+ \+N{QK \)P ֝1k,X.h?W T,?W T,8yZLӢ(?FfTɗZtMjkN4P2@ A2ONŠU9)miЃ T䧺B5S뚋{Ak]>=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!C4 ɚtHŬciACuBFZd:RtApS HEQ6t A:HŬj[Zd({TW ӠMZt: 0iJP>葋Ye1sARdu=8yRdj2NMS&]i3 8B&n),=: ArSsT$ӡdOuNA\@ ()6*Ǜs 6n{겘SM h)̩dqHaH5S5S뚋{Ak]>=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!AH?yjS:$bYv\4 ˺ӡ#O-P ):t )j\sUt" :7N=R1k,Z֩v"Ek{U´*1Zt jD%&pB({ZtHŬc\)P <\)P stȵLuC&.Qn ֜i̡\e7NepArSsT$ӡdOuN *:%1麬>2mEpj%=5+ Ѓʺ}2ztA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9tCF4 ɚtHŬciACuBFZd:RtApS HEQ6tn zbYv-R2EҊ[=+iЃp:YsN+*AWSӍ?W T,8ȵLuBQ2e֝?FfU+Zq2Mq:̡ӡdOuPkNj%==:A\\c'B_7*m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^9 d0q]&NPzǪF-ekR.=$\(uCOjV1ZtxE9MJP>葋Ye1sARdu=8yRdsȵLuC&.Qn ֜i̡\e7NC'@dA\ 6ArSsӠlªʱΉLy:0YR1l}cJ֦"Tb5S뚋{ _7*m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@x$4hzFZd3N]c4葋Ye1sARdu=8yRdȵLuC&.Qn ֜i̡\e7Nep T䧺I@j5S랝fVUtJc͹хZʱΉL{Ne8ArSsQrp? |ܫ'DPKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnѠA-ժAWSӍ?%ڵB)Ӎ?&Kyzt )j\sUt" :7N=R1k,Z֩v"Ek{U´]vp:ic n5• }i#˵bpB*zppB)ӆEd˭:fa5LuD&pVOe)t({ b5S뚡&֝? NJ{ztmUYV9)6Fk*F-ef*:%1ꕭMuDj%=5+ ѹ,nUӢ?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7NHh#O-P |DZ.1FZd9wZt iAC GN (PB (PB (PB (PB (PB (PB (PB (PB (PB (QbX5MUF(PB (PB (PB (PB (PB (PB (PB (PB (PB (PBEpit1ꑋYeԶK,{МǪF-ekR.ԱS EҊ:HŬj],{+Ep]>=:"p:tdts0&QQ#p:$\ FW=: &]i:5Sݸy=:6AǮɀVP28n DU9)]ۇArS&s=:bĢRH{TW ӡ S&]i+*ACӢF-ekJUJS ?yjSBFZd3NⰝ>>dk-fM53-@ wF渲pS HEQ6t A:HŬj],{ءQ\+N+i'`Nqe \)P ֝1k,X.h?W T,?W T,8hqZLӡ?FfTɗZtEjkN4C'Be)A4j%=5BM:A\dOu'B(0sSmΌ*TZ.$UtJc+Zʼ1xdpR!C,)rSsArSsQrpjWOONiNhON4uKyzt iANn?yjS:s8 DĈudkѹ,=LTEǪF-ekR.ԱS EҊ:HŬj[Zږ=d2EҊEv'DP@[8 1l}bX[Ҏ Q?W T,DZ.1• • 7N ? NJ:ffVUtJc͹хZʑYeلΉLzkRЌnk+ %]:t 'LT$ӡ FW=:A[$JӠlªʱΉLy:0YR1k,0V9)Tjk%Fa1, A[$JQrp&ᗨʼnEp+*8[ͥ[4 7NHhpzFZd3N]c4=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!P4 ɚtHŬciACuBFZd:RtA{E5WB*Ӡ4jǪF-ekR.ԱS ђ.nPءQ\+N+iЃpB({Zt \)P iRdƟEd˭:"fa5LuBQn ֜i̡\e7N({ArSsT$ӡdOuNj%=5+ Ѓʺ}2zt iNhON4uKyzt j }iЃ[ͫT,KyjSMDjApS HEQ6tn zbYv-RK2 "Ek{U´Ye\(+ \+N{QK \)P ֝1k,X.h?W T,• 7N.Q2e֝A30ZӍ?"k̡Ӡ1h? NJ{jZt U9)Ѓ T䧺s=:WOONh?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7NHh葋Ye1sARdu=8yRdC"2e֝A30LӢ(?FfU+Zq2Mq:RY=ztEdOuPkNj%==:rSs'B(0sSmΌ(ٹcO6'MB2iƅ"?"? NJ{h? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stiAO4葋Ye1sAT,.NLӢF-ek#O-P :4 Ґ#B{E5WB*Ӡ4=stc#˵kRL.nPءQ\+N[ҊR´,$R• }i#˵bpB*zppB)ӇEd˭:"fa5LuBQn ֜i̡\e7NepArSsT$ӡdOuNj%=5+ Ѓʺ}2ztA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9tCF iAO4葋Ye1sAT,.NA-ժAWSӍ?%ڵB)Ӎ?&Kyzt =LU"?Dit1ꑋYe 5ɩv`7J(?]lPSڨAf: 0´ta<%&• }i#˵bpB*zppB)Ӄ"2e֝A30LӢ(?FfU+Zq2Mq:RY=zt T䧺IB5S랝 U9)PR!CmUYV9)6FlMe1䧈F&R!CS4B ‘ j%=4j%=5+ Ѓʺ}2ztA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9tCF4 ɚtHŬciACuBFZd:RtApS HEQ6tn zbYvBMpj]2EҊ[=+i55"Tb´ԉQJM`%JP>葋Ye1sARdu=8yRdj2NMS&]i3 8B&n),=:& T䧺IB5S랝fVUtJc͹х7=uYL|dڊH? NJ{j.W1ӡtdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6NLӢF-ek#O-P :4 Ґ#B{E5WB*Ӡt1ꑋYe 5ɩv`7J(?]lPSڨB´ARd=ϭ:Y]ON4\)P stO"2e֝?FfTɗZt MViƟ5StA2ONj%=5BM:A\ArSsQrp? |ܫ'DPKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt )j\sUt" :cP7N=R1k,Z&y5."Ek{U´聈?W Ӡ>6k.Vh?W T,DZ.1• • 7NEd˭:fa5LuD&pVOe)tA2ON U9)miЃ T䧺AFمUcntaVb*:%1ꕭMuDj%=5+ nUӢ(?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7NHh=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P st iAO4葋Ye1sAT,.NA-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnѠkpLL\Q\)P ֝1k,X.h?W T,?W T,8hiZLӡ?FfTɗZtMjkN4P2@ A2ON U9)miЃ T䧺AFمUcntaVbYva"sSZ[$JArSsQrpAk]>=: [ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P st4 ɚtHŬciACuBFZd:RtA(PB (PB (PB (PB (PB (PB (PB (PB (PB (PBV 8&y<&*g(PB (PB (PB (PB (PB (PB (PB (PB (PB (PB{LӡTZ.֨IMK,{7J*stc#˵kRK2 "E"TW UӢ(?W Ӡ \<4ű`N Yos7J8N%F \)P ֝1k,X.h?W T,?W T,8pirU 4(0sSmΌ*TZ.$UtJc+Z&y0nk+ %]:t 'LT$ӡ FW=:A[$JӠlªʱΉLy:0YR1k,0V9)Tjk%F U9)Hs=:.nT\)ViƟm*8Y9tCC4 ɚtHŬciACuBFZd:RtApS HEQ6t A:HŬjԻRDZLFHQAbEp:AV4ű, 1,$R• }i#˵bpB*zppB)ӆ"2e֝A30LӡjkN4P2@ A2ON U9)miЃ T䧺B5S뚋{Ak]>=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!P4 ɚtHŬciACuBFZd:RtApS HEQ6tn zbYvBMpj]cئA$\(uCOjV ,Ep+i Yos7J8Ip+*ACӢF-ekJUJS?TɗZtEj2N3 8B&n),=: T䧺IB5S랝? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stAT,&i#˵bY]֝?yjPHӡ=LU"?Di5stc#˵kRK2 "Ek{U´AV?W T,B• Ɵ+*ANniZLӢ(?FfTɗZt MViƟ5StA2ONj%=5BM:A\ArSsQrp? |ܫ'BIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6N2 T8jUa@pzǪF-ekT$&ږ=d2EҊ[=+i6Zt2nc\JMARd=ϭ:$bYv\Y]ONY9pȵLuC&.Qn ֜i̡\e7NepArSsT$ӡdOuNA\@ ()6*Ǜs 6n{겘SM h)̩dqHaH5S5S뚋{Ak]>=: [ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stiAO4葋Ye1sAT,.NLӢF-ek#O-P :4 Ґ#B{E5WB*Ӡt1ꑋYe 5ɩvbstu=Zt.@AV4űЈC\[`7eJP>葋Ye1sARdu=8yRdCO"2e֝A30LӢ(?FfU+Zq2Mq:RY=zt1dOuPkNj%==: 6*Ǜs #˳ cJ֦"Tb5S뚋{ fR_7*m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@x$4hY>LӢF-ek#O-P :p 0,8 `ƃ AXhA_omΌV1wnYeلHŬj:c$6ɰm>XdLtnn[]KkTRDZLE6^ɰm>XdLtnn[]KkTSLE6^ɰm>XdLtnn[]P\XdE ѹTMXxH!qlzbYv-RK2 "D^ShQ5<uK)j\DiōǪF-ekR.=$\(уm*&`}Nw2 T#sUt" 8CstHŬjԻRDZLFHQ$TM{&a d<0GFEQ6qcC űꑋYe 5ɩv`7J"`Dy6S2]LU"]&N,4h@$8=R1k,Z֩vbst/F)HMi:%5R.x`UЊl4FA Ӌc#˵mjl.nE6^ɰm>XdE ѹTMXhx@$8=R1k,Z֩vbst/F)HMi:%5R.x`UЊl4C űꑋYeԶK`7J"`Dy6S2]LU"]&N,4<^ nn[]P\XdE ѹTMX(h@$8=R1k,Z֩v"D^ShQ5<uK)j\DiłA Ӌc#˵kRK2 "D^ShQ5<uK)j\DiłA Ӌc#˵kRL.nE6^ɰm>XdE ѹTMX(<^ nn[]KkTRDZLFHQ$TM{&a d<0GFEQ6q`xH!qlzbYv-R2E҈<"ky6 pS H:75WB*ӋA Ӌc#˵kRK2 "D^ShQ5<uK)j\Dił űꑋYe 5ɩv`7J"`Dy6S2]LU"]&N,4^ nn[]KkT` st/F)HMi:%5R.x`UЊl4cE űꑋYe 5ɩv`7J"`Dy6S2]LU"]&N,/ 77N-TZ.֥]{HQ$TM{&a d<0GFEQ6q`xH!qlzbYvBMpj]2E҈<"ky6 pS H:75WB*Ӌ/ 77N-TZ.֥]{HQ$TM{&a d<0GFEQ6qaE űꑋYe 5ɩv`7J"`Dy6S2]LU"]&N,<<^ nn[]KkT` st/F)HMi:%5R.x`UЊl4 űꑋYe 5ɩv`7J"`Dy6S2]LU"]&N,4^ nn[]P\XdE ѹTMXxH!qlzbYv.tdb=`Dy6S2]LU"]&N,h@$8=R1k,Zj}2r1Lz0yMED׼lO.AstnjUa4<^ nn[]KkTRDZLFHQ$TM{&a d<0GFEQ6qcC űꑋYeԶK`7J"`Dy6S2]LU"]&N,hx@$8=R1k,Z&y5.ԱS ђ.nE6^ɰm>XdE ѹTMXxH!qlzbYvBMpj]2E҈<"ky6 pS H:75WB*Ӌ / 77N-TZ.֥]cئA$\(уm*&`}Nw2 T#sUt" 8ѢCstHŬj[Zdz0yMED׼lO.AstnjUa/ 77N-TZ.֥]cئA$\(уm*&`}Nw2 T#sUt" 8xH!qlzbYv-R2E҈<"ky6 pS H:75WB*Ӌ ǪF-ekT$&ږ=d2E҈<"ky6 pS H:75WB*Ӌ ǪF-ekT$&ژ=$\(уm*&`}Nw2 T#sUt" 8CstHŬj[Zږ=d2E҈<"ky6 pS H:75WB*Ӌ/ 77N-TZ.֥]{HQ$TM{&a d<0GFEQ6qaE űꑋYe 5ɩvbst/F)HMi:%5R.x`UЊl4ÆA Ӌc#˵kRL.nE6^ɰm>XdE ѹTMXpx@$8=R1k,Z֩vbst/F)HMi:%5R.x`UЊl4à űꑋYeԶK`7J"`Dy6S2]LU"]&N,8<^ nn[]P\XdE ѹTMX(<^ nn[]KkT` st/F)HMi:%5R.x`UЊl4ACstHŬjԻRDZLFHQ$TM{&a d<0GFEQ6q`xH!qlzbYvBMpj]2E҈<"ky6 pS H:75WB*ӋǪF-ekR.=$\(уm*&`}Nw2 T#sUt" 8XxH!qlzbYvBMpj]2E҈<"ky6 pS H:75WB*ӋA Ӌc#˵mjl.nE6^ɰm>XdE ѹTMX,<^ nn[]P\XdE ѹTMXxxH!qlzbYvBMpj]2E҈<"ky6 pS H:75WB*ӋǪF-ekR.=$\(уm*&`}Nw2 T#sUt" 8xH!qlzbYvBMpj]2E҈<"ky6 pS H:75WB*Ӌ ǪF-ekT$&ژ=$\(уm*&`}NwEpi`Ӌc#˵mjjX уm*&`}NwEpi`Ӌc#˵mjj` уm*&X h0 `( @ (?nt`ʱu`>S蒨F 9FمUcntaV8!(њs%)#K;@ 6ɗZpD@?ӬL蒨Fcv}FsmUYV9)6Fk({QcqBQ4JS?2Fw:mi. cwYe%%Q& c͹у*.1L(0sSmΌ*P>S)?J4fJgHNP?M84<<2e֜ $xz,$3,y:0eXݺ0{QfVUtJc͹хZje2QFi̔ d/Odu$ӃC&]i< AǮNy0KJ9LǛsU]ۮcQaUeXD<۝U}FUtJc=Ϩe(S\8!(њs%)#K;@ 6X,2e֜ Q]ޝe`DFr0%6F \s53+ZpXPqi :aX9FمUcntaVV9)P>SSG)ENr2`Fi̔ d/Odu$ӃA`ɗZp,"G=wzu[ɂ]U`<۝2bs=ϨiÁ@pyi :@p`p smUYV9)6Fk({Qcs552PK1qBQ4JS?2Fw:miYd˭8:-.*a0KmΌV1wnjgpV6l4 nlªʱΉLy:0YCLǨ{QS\8!(њs%)#K;@ 6X,2e֜ Q]ޝe`DFr0%6F \s53+ZpXxXa`#fNX(8 96*Ǜs =ϨʱΉLzF%3Nd3$iz{'s&֜ LӁa0 ?ӬL蒨Fcv}FkN4SQfIvFsY%3Nd3$iz{'s&֜ LӁa0 ?ӬL蒨Fcv}FkN a`#fNXx/smUYV9)6Fk({Qcs55dWjtiW9?J4fJgHNP?M84 ?̙u `cwYe%%Q& c͹у*.1Ln ֜< FٰӠhx r *:%1­es52sS}F%ڄ Rd Fә)L@^Ig.XD z,$3,y:0eXݺ0{QZӇp 4F͆X,7<(0sSmΌ*P>S*:%1jj]@ P)ta*0h9 ΠZph,2N@(ǮNy0KJ9LǛsU]ۮc8hp44a`#fN@,8 smUYV9)6Fk({Qcs55Aq5oS% ?J4fJgHNP?M84 ?̙u `cwYe%%Q& c͹у*.1Ln ֜88FٰӠ< 9FمUcntaVV9)P>SQtc٩{铑Fi̔ d/Odu$ӃA`ɗZp,"G=wzu[ɂ]U`<۝2bs=ϨiA6l4o smUYV9)6Fk({Qc͛`Fi̔ d/Odu$Ӈ2N@(ǮNy0KJ9LǛsU]ۮc8( FٰӠ44Zr *:%1­es52(qs55Aq5oS% 0N%3Nd3$iz{'s&֜ LӁa0 ?ӬL蒨Fcv}FkN 6l4h4fVUtJc͹хZje2Q1jjjަJ#@`h9 ΠZpX,2N@(ǮNy0KJ9LǛsU]ۮc8hhFٰӠ4GhvlªʱΉLy:0YCLqOpT`>S2R4=kN &]iYo& tITg# Xnt`ʱu`>S?ۂ4F͆844 _q8 `( @ py:0eXݺ0{Q[qfVUtJc͹хZjgQaUeXD<۝U}FUtN0lªʱΉLy:0YCLqmUYV9)6Fk({QD{aFمUcntaVV9)P>SSG)Nr2gQaUeXD<۝U}FUtJc=Ϩe(QfS\mUYV9)6Fk({Qcs552PK1(0sSmΌ*P>S*:%1jj.#&qfVUtJc͹хZjeXD=CME҄M aFمUcntaVV9)P>SQfIvF EӑQaUeXD<۝U}FUtJc=ϨYe]Aѥ\d0lªʱΉLy:0YCLǨ{Q$ʻUDJȳ(0sSmΌ*P>S*:%1jj]@ P).FL 6*Ǜs =ϨʱΉLzjJ}J8 *:%1­es52sS}F.&d=0lªʱΉLy:0YCLǨ{QUM1l=Ì(0sSmΌ*P>S*:%s55 7>0lªʱΉLy:0YCLJ#@=CMP\M[D{ 0lªʱΉLy:0YCLJ#@=CMP\M[D{ aFمUcntaVOpĨ}Fkr84 `84 , `( @ (ocv}F2lªʱΉLy:0YCOQaOp8s(^lªʱΉLy:0YCLY6*Ǜs =Ϩ{a(0sSmΌ*P>S)`90`xѿ ᠿ P,4ᠯ7`,ǛsU]ۮc}FkU&mhQ`@ c l¬sSmΌ*=ϨjNEl`Euj0 CJ CAQah@bX!%38"z BF.tܳ$WV " c l¬sSmΌ*=Ϩj4`nq^qXTn2Eѓ'~`nq^qXW3p5s!Dy`H @`F3"Q[m5waFdac0ᡣA!CCsq3 Ss$'# 2>f9{v[ҏ#3cfYs1̝7O1 @ a6Ff-ĝ28D# WV`j<4( 2 T8jUa@hӡP>SkQfIvFHQAbEp:Yos7J*sP@e\(%YsN}FkJUJSEd˭:"fa5LuDP&pVOe)t({ A\ 6ArSsӡdOuE=zt 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnHjFZd3N}Fk#O-P :4 Ґ#B{E5WB*Ӡ8jǨ{Q 5ɨ$ʻUDC$\(uCOjV?W ӡJP>ARdu=8pB)Ӎ?TɗZt MS&]iЃfa5[(DMӡ,=:A\ 6ArSsӡdOuE=zt 5rL?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7N=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:SbpB*zppB)ӃO"2e֝A30LӢ(?FfU+Zq2Mq:RY=ztU9)miЃ T䧺B5S뚋{Ak]>=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:ZFZd3N}Fk#O-P :4 Ґ#B{E5WB*Ӡ5stc=ϨjYe]Aѡ.nPءQ\+N̓*U)Q"?W Ӡ2L F&Q@b• }i=Ϩc\)P <\)P st9ZLӢ(?FfTɗZtEjkN4P2BY=zt U9)miЃ T䧺B5S뚋{Ak]>=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stC4 ɚts5;X.h?yjPiЃY:s5R.`TMѨ?C}FkT$&̓*U stu=Zt]I̥8+i 9c:0zH?W T,@>SbpB*zppB)Ӂj2NMS&]i43 8B&n),=:U9)mi T䧺AFمUcntaFtVS+0\ r8ރ T䧺s=: 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnH1#O-P |@>SbY]֝?yjPHӡ=LU"?DiA:s5;Z&y5dWjthd({TW Ӣ58.epQAV*`ā`$8< J• }iǛs1sARdu=8(?W T,8hh0-S&]iЃfa5LuD&pV2Mq:"epr5S뚡&֝? NJ{zt U9)\ǸONnUӢ(?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7NHxjFZd3N<۝/,c4SkQfIvFHQAȮ•td´d'*AѬ@si#KARd=ϭ:c4+*AWSӇ+*ANn4irU 4(0sSmΌ*P>S*:%1jj.#'/ tvЃН1PkN\ArS]l*3N *:%1­es52sS}FB&фj%5\c'B-bENj•n ֜i-ҭZӍ?yjS@4iAO4jv\4 ˺ӡ#O-P ):t )jq:s552ֵ-U$Jtnk)LP7J*stcֵ-U$Jtnk(dQ\)WOON\+N^a8 -Xqe`}\1$ih?W T,CGZ1sARdu=8hpB)ӂ5SNAFمUcntaVV9)P>SSG)ENr2x` `Z ($! (^h?ӡ:b&֝?2Ѓ T䦺"TffVUtJc͹хZhsSF$H? NJk%F(\ǸONjnqe \)ViƟm*8Y9t iAO4hX.h?yjPiЃY:s5DZ`8n zJhZ&y5[AF渲5st7N=MkT$&tH>P7J(?ڢRLAVlCy<@}aVX 2FpB({Zt4puc4+*AWSӆ?W T,8,ABt: 6*Ǜs =ϨʱΉLz9LJ,t X( А A  BC tvЃН1PkN\ArS]l*3N *:%1­e4pqV9)SG\M (? NJk%F(\ǸON[Ҋ+*8[ͥ[4 7N᠐Smj2LTH:4A?9t1jv-QfIvFHQAȮ•td´kuqe]TH:5MјW#Le`0Z• }i=Ϩc\)P ??W T,8irU 4(0sSmΌ*P>S*:%1jj.#'/A`?  6ANj%54(0sSmΌ*P>S*:%1jj."mO  U9)Hs=:#M ͺ1Q\)JkN4iViƟFa4+*ACӡc\)P 4iRdgdT'LӠlªʱΉLy:0YCLǨ{QQţ@<0 Ła0 @-@p@(&P/ 4vЃН1PkN\ArS]l*3N *:%1­e4pqV9)SG\M j%5\c'@dxɵxcF渲pVOIo6n ֜iT,:C4 ɚt4puc4SbY]֝?yjPHӡ9 d-07N=CMK-JkA\(ӡPֶ2m)[@dEv'A4+i -bGAѬ2d-JP>jv\Y]ONY9p TiQaUeXD<۝U}FUtJc=Ϩ$P$ S\0 Ła0 @8 "D`D$ ' ŠGN銄Zt?2Ѓ T䦺"TffVUtJc͹хZ]c .T&5SdQ.W1Ӡ1O~RmaARZӍ?%U+Zq#O-P stA?yjS:c4jv\Y]ONY9pQrU 4(0sSmΌ*P>S*:%1jj]@ P).FO 7 q`XD @P $($( H O 0((A`?  6ANj%54(0sSmΌ*PǨIvB6A[$JQrp-bENn$+*8[ͥ[4 7NjFZd3N%ݬc4SbpB*zppB)ӆ5SNAFمUcntaVV9)P>SPBR)Nr2xa` `pD ( H O 0((A`?  6ANj%54(0sSmΌ*PǨIvB6A[$JQrp-bENn$+*8[ͥ[4 7NjFZd3N%ݬc4=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stC4 ɚts5;X.h?yjPiЃY:s5R.`TMP7N=CN֥,2Q 7J(?]lPSڨB-bEQ\)Zt[Ҏ\)JP>jv\Y]ONY9pYZLӢ(?FfTɗZtMjkN4P2@ A2ON dOuPkNj%==:A\\c'B_7*M$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZd iAO4jv\4 ˺ӡ#O-P ):t )j\sUt" :n zKkTYe]Aѡ.nPءQ\+N+iЃpB({Zt \)P iRdƟEd˭:&.A30ZӍ?"kЃep? NJ{jZt U9)Ѓ T䧺s=:WOONm)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjSBFZd3NSmj2LTH:42EҊ[=+iY&p:$ʻtkQtHa)6YsN}FkJUJS?TɗZt=j2NMViƟ5StH?fP -dOuPkNj%==:rSs'B(0sSmΌ(ٹcO6'MB2iƅ"?"? NJ{h? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stC4 ɚts5;X.h?yjPiЃY:s5R.`TM?C}FkRdWjthd({TW ӢkjD+i,0@"J• }i=Ϩc\)P <\)P stȵLuC&.Qn ֜i̡\e7NepA\ 6ArSsӠlªʱΉLy:0fn)Q\)dOuE=zt 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnH)#O-P |@>SbY]֝?yjPHӡ=LU"?Di5stc=Ϩj[Z̓*U stu=ZttbR´*AѬnK \)P ֝N1• • 7N ?TɗZt=j2NMViƟ5StH?fP n T䧺IB5S랝? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stAh?yjS:c4Smj2LTH:42EҊ[=+iD{(+i&UDX(qL\(?W T,@>SbpB*zppB)Ӏj2NMS&]i3 8B&n?fP Ѓ T䧺IB5S랝? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stC4 ɚts5;X.h?yjPiЃY:sAsUЊl4A:s5;Z֨$ʻUDC$\(uCOjV?W Ӡ'Fs+t`YsN}FkJUJS"2e֝A30LӢh?FfU+Zq2Mq:RY=zt=dOuPkNj%==: 6*Ǜs 6n{겘Yl1j%=5+ !tdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6NSS)MkR[AF渲МǨ{Qmj Ss\YJdȹQSCѹ,]>9]+*+i'̍a75ŕ\EKs9pB({Zt4puc4+*AWSӆ?W T,8,. FW=: U9)]ۇӣdLz<8HL#,HaH5Sݸy4j%1pj.W1ӡF,J+ ,ICOjV?% FQ\+NF渲М2e֝ AT,:Ah?yjS:8:1FZd9wZt iAC GNEpit1jv-QfIvFtdМǨ{QԶE&Uڪ$S EҊ:s5;Z֨$ʻUDJ}2r1"TW UӢ(?W Ӡ'OO2LAѬۣ9˂ȸInz>YsN}FkJUJS?ɗZt#+AǮ T=wnLBpBBdLz<5Sݸy5+ У%$Q\+N#MPSڨAF*+ 9d˭:Y9tA!?yjS:c4R:s55JhZ֪:75ŔA?9t1hZU铑?ڢRLAV:}2|aۣs\Y\`d\@$=cH?W T,CGZ1sARdu=8hpB)ӂg2NesӠ5Sݸy=:?AǮɀWP28nPPU9)]ۇArS&s=:bĢRbĔ=+iЃRi{U´tnk) S&]iLӡciACuBFZd:RtApTW Q?C}FRM]>44'59t1jje)mldS\Ȃ"ENn zJ[[6tdHWjJ}2ztEZt2ѕ[Ҏ QJM+*ACӠIwkJUJS Ɵd˭:esӠ5Sݸy=: D FX Kn!B"?"?U9)]ۇQrp?PSڨBH{TW Ӡ i S&]i1.h?]lPSڨB´ Ce+,'F0H?W T,@1• O• 7N?TɗZt=j2NMViƟ5StA2ONj%=5BM:A\(0sSmΌ*P>S*:%1jj]@ P)ta*3 p,"A (PB@`D$h? NJ{j.W1Ӡ28cɵh? |ܫ'DPKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA#P4 ɚt .ciACuBFZd:RtApS HEQ6t A:s55.2m*ɌsAbEp:@NLj,Xe\(:0ARd=ϭ:v\Y]ONY9piZLӡ?FfTɗZtEjkN4P2BY=zt U9)miЃ T䧺AFمUcntaVV9)P>SPBR)O Q`a0 @8 "D`D$h? NJ{j.W1Ӡ28cɵh? |ܫ'DPKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA#P4 ɚt .ciACuBFZd:RtApTW Q?C}FҖM]>44'59t1jj])mldS\Ȃ"ENn zJ[[6tdHWjJ}2ztEZt2ѕ[Ҏ QJM+*ACӠIwkJUJS Ɵd˭:esӠ5Sݸy=: D FX Kn!B"?"?U9)]ۇQrp?PSڨBH{TW Ӡ i S&]iSS)Kkc&ҮL1z0yMED׼lO.AstnjUa4^ nn[}FkRdWjtiWONF уm*&`}Nw2 T#sUt" 8ѢCsts5;Z֨$ʻUDC$\(уm*&`}Nw2 T#sUt" 8ѢCsts5;Z&y5dWjthdz0yMED׼lO.AstnjUa4^ nn[}FkRdWjthdz0yMED׼lO.AstnjUa4^ nn[}FkT$&̓*U st/F)HMi:%5R.x`UЊl4CE űjv-QfIvFHQ$TM{&a d<0GFEQ6q`Csts5;Z&y5dWjthdz0yMED׼lO.AstnjUa / 77N-P>Smj2LTH:42E҈<"ky6 pS H:75WB*ӋǨ{Q 5ɨ$ʻUDC$\(уm*&`}Nw2 T#sUt" 8Csts5;Z֨$ʻUDC$\(уm*&`}Nw2 T#sUt" 8Csts5;Z&y5dWjthdz0yMED׼lO.AstnjUa / 77N-P>Smj2LTH:42E҈<"ky6 pS H:75WB*Ӌ Ǩ{Q 5ɨ$ʻUDC$\(уm*&`}Nw2 T#sUt" 8hxH!qlzKkTYe]Aѡ.nE6^ɰm>XdE ѹTMX4h@$8=CN֨IME&Uڪ$"D^ShQ5<uK)j\DiŀE űjv-QfIvFHQ$TM{&a d<0GFEQ6q`8xH!qlzP\<2LTH:42E҈<"ky6 pTW Q8=CMK-J}2b`Dy6S2]Q\)DZf#sts5522m*ɋуm*&`}NwEpi`Ӌc=ϨSGZԶV})ѹ,z0yMED׼lO.ਮ-3 ѹqlz4puKkUnҝ$TM{&a J"0Ǩ{QԶE&Uڪ$U$TM{0poxpp0xhx04o@h(xpW4SS)MkR[AF渲4^ShQ5<uK)j0GFűjje)jnҝS z0yMED׼lO.A"0Ǩ{QIiMr"`Dy6S2]LTEa:77N-P>SQtmj Ss\YJd/F)HMi:%5DZf#sts55JhZ&y5[AF渲4^ShQ5<uK)j0GFűjv-QfIvF4^ShQ5<uK)j0GFűjvBMpj,2Q н<"ky6 pS H:75WB*Ӌ/ 77N-P>SRKkc&ҮL1z0yMED׼lO.AstnjUa4^ nn[}FRM]>1.b`Dy6S2]LU"]&N,h@$8=CN֥,2Q ҮL$TM{&a d<0GFEQ6qaE űjv-QfIvFHQ$TM{&a d<0GFEQ6qaE űjvBMpj,2Q 7J"`Dy6S2]LU"]&N,8h@$8=CN֥,2Q 7J"`Dy6S2]LU"]&N,8h@$8=CN֨IME&Uڪ$"D^ShQ5<uK)j\DiłA Ӌc=Ϩj[Z̓*U st/F)HMi:%5R.x`UЊl4CE űjvBMpj,2Q 7J"`Dy6S2]LU"]&N,4^ nn[}FkRdWjthdz0yMED׼lO.AstnjUa / 77N-P>SkQfIvFHQ$TM{&a d<0GFEQ6qaE űjv-QfIvFHQ$TM{&a d<0GFEQ6qaE űjvBMpj,2Q 7J"`Dy6S2]LU"]&N,4^ nn[}FkRdWjthdz0yMED׼lO.AstnjUa / 77N-P>SkQfIvFHQ$TM{&a d<0GFEQ6q`ѢCsts5;Z֨$ʻUDC$\(уm*&`}Nw2 T#sUt" 8hxH!qlzP\<2LTH:42E҈<"ky6 pS H:75WB*ӋƋA Ӌc=Ϩj[Z̓*U st/F)HMi:%5R.x`UЊl4qCsts5;Z&y5dWjthdz0yMED׼lO.ਮ-3 ѹqlzJ[[6td6^ɰm>XdR0GFűjje)mldU$TM{&a J"0Ǩ{Qmj Ss\YB`Dy6S2]Q\)DZf#sts55JhZ֪:75Ŕ/F)HMi:%”Ea:77N-P>Smj2LTH:4&/F)H`  < <4  AXhA_oX/}6F \ P,CU`G(0sSmΌ(Ĭh9 ΠZphxyd˭8@"@H @Yo& tITg# Xnt`ʱu`єsmUYV9)6FEbVUtA Fә)L@^ILӄ x49]ޝe`DFr0%6F \ P,G9FمUcntaDV%eXD4uqBQ4JS?2Fw:mi. cwYe%%Q& c͹у*.1T:#FQQaUeXD<۝QYV9*d즎%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bs%C4efVUtJc͹хXcNl Fә)L@^ILӄ x49]ޝe`DFr0%6F \ P,G9FمUcntaDV%eXD4u%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bs%C4efVUtJc͹хXcN]2R4=kN ?̙u@( hs:-.*a0KmΌV1wnY2r *:%1ˆJʱΉDV%jdA Fә)L@^Ig.XD z,$3,y:0eXݺ0JYdh?ۂ 4F͆FC9FمUcntaDV%eXD<ĭNr2`Fi̔ d/Odu$ӃA`ɗZp,"G=wzu[ɂ]U`<۝2bs%C4eZӃG6l4 @(0sSmΌ(ĬǑXyd(8!(њs%)#K;@ 6X,2e֜ Q]ޝe`DFr0%6F \ P,GpV6t@096*Ǜs "+*:%1V%jqBQ4JS?2Fw:miYd˭8:-.*a0KmΌV1wnY2iA4F͆AAC^lªʱΉLy:0+sP ]Ar̺0cqBQ4JS?2Fw:miYd˭8:-.*a0KmΌV1wnY2iC6t@+smUYV9)6FEbVUtJ0J .c݃2R4=kN &]iYo& tITg# Xnt`ʱu`єkNCO#Lli  r *:%1ˆJʱΉVh'e4pqNr2`Fi̔ d/Odu$ӃA`ɗZp,"G=wzu[ɂ]U`<۝2bs%C4eZӆQi :F@9FمUcntaDV%eXD4u88J.SG2R4=kN &]iYo& tITg# Xnt`ʱu`єkN4 ?0a@04496*Ǜs "+*:%Y\d,8h9 ΠZph,2N@(ǮNy0KJ9LǛsU]ۮcuF+ZpP044F͆(0sSmΌ(ĬfvSGsa?J4fJgHNP?M84 ?̙u `cwYe%%Q& c͹у*.1T:#FQ8( a`#fNP444zr *:%1ˆJʱΉVh'e6:Ƀ2R4=kN &]iYo& tITg# Xnt`ʱu`єkN 6tnlªʱΉLy:0+sU:MP]9h9 ΠZph,2N@(ǮNy0KJ9LǛsU]ۮcuF+Zp`0a`#fNPp,7h96*Ǜs "+*:%Y6Nr2`Fi̔ d/Odu$ӃA`ɗZp,"G=wzu[ɂ]U`<۝2bs%C4eZӇA8,4F͆@ѿ>lªʱΉLy:0+sU:Sm Eӑlh9 ΠZph,2N@(ǮNy0KJ9LǛsU]ۮcuF+Zpha`#fNPhW smUYV9)6FEbVUtJGY;*mk2`@&?J4fJgHNP?M84 ?̙u `cwYe%%Q& c͹у*.1T:#FQ8( a`#fNXfVUtJc͹хXcNʛl0qBQ4JS?2Fw:miYd˭8:-.*a0KmΌV1wnY2i@@a`#fN8fVUtJc͹хXcN]#&?J4fJgHNP?M84 ?̙u `cwYe%%Q& c͹у*.1T:#FQ8pѠ4F͆7AQaUeXD<۝QYV9*d%P]9%8!(њs%)#K;@ 6X,2e֜ Q]ޝe`DFr0%6F \ P,GpV ?0a@h,4<r *:%1ˆJʱΉVh'e .ʹɀ@&?J4fJgHNP?M84 ?̙u `cwYe%%Q& c͹у*.1T:#FQ8,4a`#fN`(4<7smUYV9)6FEbVUtJGY;(IvUE@&?J4fJgHNP?M84 ?̙u `cwYe%%Q& c͹у*.1T:#FQ8,8FٰӠ4hx fVUtJc͹хXcNl ɄqBQ4JS?2Fw:miYd˭8:-.*a0KmΌV1wnY2i@`44F͆Ph smUYV9)6FEbVUtJGY;)*"h8!(њs%)#K;@ 6X,2e֜ Q]ޝe`DFr0%6F \ P,GpVhx44F͆@,8796*Ǜs $%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bs%C4efVUtJc͹хZ]cqBQ4JS?2Fw:mi. cwYe%%Q& c͹у*.1T:#FQQaUeXD<۝U%V9)P82R4=kN 42e֜ Q]ޝe`DFr0%6F \ P,GpVP4a`#fNhhh(0sSmΌ*PǨIv[.%F2R4=kN 42e֜ Q]ޝe`DFr0%6F \ P,GpV@4<84F͆Ph7AQaUeXD<۝U%V9)P18!(њs%)#K;@ 6ѣO&]iYo& tITg# Xnt`ʱu`єkN FٰӠ8 r *:%1­e .ʱΉLzmuD`Fi̔ d/Odu$ӃF?̙u `cwYe%%Q& c͹у*.1T:#FQ8p, #Lli _p/AQaUeXD<۝U%V9)PFk%3Nd3$iz{'s&֜4id˭8:-.*a0KmΌV1wnY2iÁCC#Lli4 fVUtJc͹хZ]c .wF Fә)L@^I2N@(ǮNy0KJ9LǛsU]ۮcuF+Zph,a`#fN@44o96*Ǜs $*:%1]lD08!(њs%)#K;@ 6ѣO&]iYo& tITg# Xnt`ʱu`єkN FٰӠ ^lªʱΉLy:0YBKsS%ݭlD08!(њs%)#K;@ 6ѣO&]iYo& tITg# Xnt`ʱu`єkN O#Lli444fVUtJc͹хZ]c .smF%3Nd3$iz{'s&֜4id˭8:-.*a0KmΌV1wnY2iÃ@6t`h(0sSmΌ*PǨIwk0"mLh9 ΠZphѧ.XD z,$3,y:0eXݺ0JYdh?ۂ FٰӠ Ær *:%1­e .ʱΉLzwF`ǃ2R4=kN 42e֜ Q]ޝe`DFr0%6F \ P,GpVP(a`#fNP,796*Ǜs $*:%1]ฬ4`c Fә)L@^I 2N@(ǮNy0KJ9LǛsU]ۮcuF+Zp`(a`#fN 4?smUYV9)6Fk(IvUtJc$c͹эu`c Fә)L@^I 2N@(ǮNy0KJ9LǛsU]ۮcuF+ZpPx(?0a@  zr *:%1­e .ʱΉBK 7> Fә)L@^I42e֜ Q]ޝe`DFr0%6F \ P,GpV@(4?0a@x`r )P#d@QBKqBQ4JS?2Fw:mi. cwYe%%Q& c͹у*.1T:#FQQaUe=Êl (IvP`D5ѹ\(8!(њs%)#K;@ 6O&]iYo& tITg# Xnt`ʱu`єkN FٰӠh(h96*q@E . @&58TFW0qBQ4JS?2Fw:miFLӁa0 ?ӬL蒨Fcv*e(n ֜4 ?0a@0484;smUYOp"](j0MD*jqQo42 Fi̔ d/Odu$Ӄ?̙u `cwYe%%Q& c͹у*.1T:#FQ8hxpyi :A@;AQaUe=Êl (IvP`D5>D Y %3Nd3$iz{'s&֜4id˭8:-.*a0KmΌV1wnY2iÆg6l49FمU( @(%@*#95S&T?J4fJgHNP?M80hɗZp,"G=wzu[ɂ]U`<۝2bs%C4eZӂX,4F͆`4fVUtJc͹хZ]c .ntb7J#[?J4fJgHNP?M80hɗZp,"G=wzu[ɂ]U`<۝2bs%C4eZӆ6t`W(0sSmΌ*PǨIvǛs(q%3Nd3$iz{'s&֜4id˭8:-.*a0KmΌV1wnY2i` a`#fN8x3smUYV9)6Fk(IvUtJc$}Fi̔ d/Odu$ӃF?̙u `cwYe%%Q& c͹у*.1T:#FQ8,a`#fNX96*Ǜs $*:%1]Fi̔ d/Odu$ӃF?̙u `cwYe%%Q& c͹у*.1T:#FQ8x4 ?0a@, 4fVUtJc͹хZ]c .ly?J4fJgHNP?M84hɗZp,"G=wzu[ɂ]U`<۝2bs%C4eZӇ6t3AQaUeXD<۝U%V9)PM6 Fә)L@^I2N@(ǮNy0KJ9LǛsU]ۮcuF+ZpX4a`#fN`,9FمUcntaVeXD=BK̝EqBQ4JS?2Fw:miFLӁa0 ?ӬL蒨Fcv*e(n ֜8 ?0a@x44Zr *:%1­e .ʱΉLzlGm2R4=kN 42e֜ Q]ޝe`DFr0%6F \ P,GpVai :`PxfVUtJc͹хZ]c ."ɾD Fә)L@^I2N@(ǮNy0KJ9LǛsU]ۮcuF+ZpPh0?0a@xѠ8+96*Ǜs $*:%1]A Fә)L@^I2N@(ǮNy0KJ9LǛsU]ۮcuF+ZpXp4ii :@ 96*Ǜs $*:%1]50qBQ4JS?2Fw:miFLӁa0 ?ӬL蒨Fcv*e(n ֜8 ?0a@ph,87h96*Ǜs $*:%1]9?J4fJgHNP?M84hɗZp,"G=wzu[ɂ]U`<۝2bs%C4eZӇg6l4(0sSmΌ*PǨIvB6?J4fJgHNP?M84hɗZp,"G=wzu[ɂ]U`<۝2bs%C4eZӂ6tr *:%1­e .ʱΉLzd*o pV Fә)L@^I2N@(ǮNy0KJ9LǛsU]ۮcuF+Zpᠠ6tX+smUYV9)6Fk(IvUtJc$!S@Fi̔ d/Odu$ӃF?̙u `cwYe%%Q& c͹у*.1T:#FQ8x FٰӠ0lª{ P 6*q@E . @&5:75뛥8 )P#d@QBK -@ MN#j{u 6*q@E . @&58AQk(06D$(P0"a" ]aFمU( @(%@*#95S&TqfVUtJc͹хZ]c .ntb7J#[qfVUtJc͹хZ]c .ntc% 0uQaUeXD<۝U%V9)PaFمUcntaVeXD=BK6 6*Ǜs $*:%1]l 6*Ǜs $*:%1]mUYV9)6Fk(IvUtJc$[mΌ8 *:%1­e .ʱΉLzlGmaFمUcntaVeXD=BKHo(0sSmΌ*PǨIvBQ8 *:%1­e .ʱΉLzmfL 6*Ǜs $*:%1]9qfVUtJc͹хZ]c .TF0lªʱΉLy:0YBKsS% B(0sSmΌ*PǨIvB60lªʱΉLy:0YBKsS%ۈ%(0sSmΌ*PǨIv7sY8 *:%1­e .ʱΉLzn#w9qfVUtJc͹хZ]c .d0lªʱΉLy:0YBKsS%۠\maFمUcntaVeXD=BKۈmUYV9)6Fk(IvUtJc$}M8 *:%1­e .ʱΉLzoɴqfVUtJc͹хZ]c .&%(0sSmΌ*PǨIw6k2gQaUeXD<۝U%V9)P2m\YmUYV9)6Fk(IvUtJc$d=F0lªʱΉLy:0YBKsS%фJ#@`c0lªʱΉLy:0YBKsS%%!ta*0 6*Ǜs $*:%1]ͶqfVUtJc͹хZ]c .T8 *:%1­e .ʱΉLzlL\l3(0sSmΌ*PǨIv=ɱdڳ(0sSmΌ*PǨIv="QaUeXD<۝U%V9)PHmUYV9)6Fk(IvS% qfVUtJc͹хZ]D{$S% 0N8 *:%1­e .d= ]'m8 Aa@ P,4ᠯ7`,6F \ P,C-ZQ6*Ǜs "+smS8.WQaUeXD<۝QYV9CCQaUeXD<۝QYV9*dQaUeXD<۝QYV9*d즎q(0sSmΌ(ĬfvSaNQaUeXD<۝QYV9*d쩶 r *:%1ˆJʱΉVh'e . r *:%1­e .fVUtJc͹хZ]clª{ PlªʱΉLy:0YBK(q ` Ch3`@ 4 A@ ;Æ_ <۝2bs%C4e ]ptI[ZqX (hgf0X(6*:%1®BKZ.[ Xݺ WV444FV`j<4(@0"P 3.׮:͜{*4bM2Oy`+Q_f0X(6*:%1®BKZ.  ++ʍp5sH2d , ++@hp<" 1Ҋ߀mѫ [5x#   V {}]JWV!<HTgMїs1̝7@ &.nyV[+4̫dx b; 431l$ , XⰈ T4 1@PH @@gqXF.W7J:'5ū1(qL\(V#@7J8ۮk)s0&QQ.s\fqXXX@`K͹ј(qL\(n38'(0j,X(qL\(n3C%ݬQ kpWZ C ds0)tܷ*QR\ƩT*& 8a[$J Ce+e zv"Ta0qAa``L= 2Pdh -bG ф1]& 8^j,Xe\(:0.dk^mΌC%ݭmld'ɮOstH`2ѕ[Ҏ QJMLΠ$fW=BK\$ɴN(,,,,H`Pn 8&Y2{Qta*3 I C dc*ǨIwk2hPXX,hX(qL8&Y2%1qnp2D0>"Ta<1]lPXXXX[#FV۝.6MҎH$J'\۝=BKZ<'$J(M7Dj,Xntf7J8"L*0HJ &NP\a3iC%ݬ1 8`L= 2Fx=BK[`N(,,,,Aׄ(Ȝ*3d(rF%1]ֶ$5Pn !EDQ+!F`tdu5#0>Fʼ1]̃`N(,,,,H`Pn !EDQ+!F`tdu5#0>Fʼ1]̃`N(,,4, GV`n a:0=BK[ 8\p p; фrF%1]ָ d'Bn$0 p; фLΠ$fW=BKYq'$J(M7D`n a:0 C dc*ǨIwk2#`$BD{e`I29O ф1]' ݄e2r0 Q̍`K͹јc$lPXXXX&y< u!%'8da<'F0:BT`a2w: W#Le^ .pf'$J(M7D8 )J Q!k2F`}\1xc$ IB F8y=qn'2QpV:BT`a2w: (qL\(!SopUstŪ-YS% TMSaqG(PB (PB (PB4 N<"B (PB (PB (PBqWBj\EQ6t At1,ɮ5h8МǨIwkA΄@pL4e`L= 1st]:d=ϭ:v\q_9AWSӆWNjS q_9d˭: [ܻӡFZd #O-P |@1s s-UЊl45 stc$q9ӡS% ɵc֩: nj\p:BT`a2w: ntb:d=ϭ:nt`.h8\NjU౧ P stYBsTɗZt5 [ܻӡ #O-P stCPp4 ɚt1ycdiACuBFZd:RtApT*&E5WB*ӠhpӡPփƄ7N=BK[]l*0:[$J Ce+e P ֝KX.h?NjU P stOLӡ?ޝ?yjS@p$8jFZd3N%ݬc4*U"?Di45stc$9ӡP6Мe i#FV Yos7J8N%F 9ACӠIwk P 49ANnМ2e֝A.AT,: ?yjS:v\sTMT8jUa@Ѩ?C%ݮ2m 9ӡPֶ2m*ɠ9 Ce+,'F0\̍`K͹ш?NjP>]1sABsT, ?NjS?hNj2N{zt iANnX"UBn$0Pdh -bG ф%&HJ &NP\a3iABsT,@1:du=8iBsT,8xƄ橓.wBFZd Y>LӠIwk=P0q]&N?C%ݭ Nn zvLӠIwk9 DHEQ6t t1]m Nn zvy&΄@[#FV۝.6MҎH$J'\۝΄YsN%ݬc4t'5B*zp΄Y9phƄ橓.wBFZd AT,&i$b惜Bj\sUt" : A: .lyƄ7N=BKYc͵]>4t'=:V Ce+^mΌ[&G$C%F Q!k2F`}\1h?NjP>]1sABsT, ?NjSƟ4'5LuDP˽:4 7NH5#O-P |@1s sUЊl45stc$9ӡP 9#@+Qo8TgQ?NjP>]1sABsT, ?NjSLӢ?ޝ?yjS@p$Y>LӠIwk=P0q]&NP7N=BK[`Ƅ7N=BKZWOM N^"pW9˙sМ }i$b΄Y]ONМ 7N4iBsTɗZtE[ܻӡ#O-P stY>LӠIwk=P0q]&NP7N=BK[`Ƅ7N=BKYltdМ%X&뛢CQo8TgQ!*00;@ qH2 P ֝KX.h?NjU P stᡣOLӢ(?ޝ?yjS@p$44jFZd3N%ݬc4=P0q]&N?C%ݭ Nn zvt'=:D{eav Q?NjP>]1sABsT, ?NjS ?hNj2N {zt iANn?yjS:v\sTMT8jUa@Ѩ?C%ݭm Nn zv#j}2h?Nzt5@X@ N%Fs25/6F 9ACӠIwk P 49ANn449d˭:"]ЃY9tCACP4 ɚt .c*U"?Di48jǨIwkqABsSC%ݬ8ɠ9$J(M7D`n a:0 C dc*М }i$b΄Y]ONМ 7N М2e֝A.AT,:!?yjS:v\sTMT8jUa@hӡPփƄ7N=BK\h?Nzt24݄e2r0 Q?NjP>]1sABsT, ?NjS ?hNj2N {zt iANn?yjS:v\s sUЊl45stc$ͶƄ7N=BKZٶ- ΄@[JOvqxN%Fs25/6F 9ACӠIwk P 49ANn449d˭:]ЃY9tCAP4 ɚt .c=P0q]&NP7N=BK\h?hNjstc$ - ΄@P*7\ R{NFta*3%F@'s0r4U9ACӠIwk P 49ANn449d˭:]ЃY9tCAP4 ɚt .c*U"?Di4t1]М(ԸVN,"d(D{*TE NюO\[ńL\LΠ$f#@7J(8\NjP>c͹уs9AWSӂƜ.t'5B)Ӄ S&]iorN,<8&Y2{Qta*3 IpB({Zt .c\)P 4\)P st8̙uB@ztArS'D耀Qepy 8X]0 ,-ArS&s=:$Q\+N#MPSڨ@Ox8%&Lӡ?yjS@H=:"[ͥ:-=8ӅZ-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ #O-P st Y>LӠIwk9`2ѕl*0pS it1]dQ7J*stAȮ•tdAV[$J Ce+eJP>]1sARdu=8iRdÆj%P3N *:%1­e .ʱΉLzmuDh?ӡ:b&֝?2MdMuD:A[$JQrp?W U+Zq$JkN4iANnP4 ɚt s5DZ`8nnC%ݭmldS\Ȃ"ENnC%ݭmldS\Ȁ4,Q\)WOONh8\W ӠA׀#FV Yos7J8N%Fa)6˙spYsN%ݬc4.+*AWSӆ.+*ANn4lU9*tmUYV9)6Fk(IvUtJc$t O 0((A`8]  6pesӡ dMuD: 6*Ǜs $*:%1]M-j%5\c'@c0&0%"p[pKypVNFZd4AT,&i$b惞AsUЊl44=stc$Jk"u=ZP{QH´,$R• }i$bpB*zpѧJS?TɗZtMj2NuKyzt p-Ѓfa5[5StH?fP  T䧺IB5S랝? NJ{j.W1ӡtd&Y9tƠiAO4]1sA{E5WB*ӠhhӡPֶ2m)[@d[=+i@Oz3p: Ce+iK \)P ֝KX.h?W T, ?W T,8h4-S&]i3 d˭:"Z-Ѓj$WBQn ֜i̡\e7Nh?fP j%=5BM:A\ArSsQrp? |ܫ'DP4 7NP$4jFZd3N%ݬc4)j\sUt" : A: .kkc&ҚDHuCOjV)6@pL4ea)6YsN%ݬc4+*AWSӆ+*ANn8hȵLuDP&.Yj$WB m^?FfU+Zq2Mq: C'@`IdOuPkNj%==:A\\c'B_7*LӠIwk9 d0q]&N?C%ݭmldS\Ȁ4({TW ӡef+i Yos7J8N%FZ• }i$bpB*zppB)Ӈ?TɗZtEj2NuKyzt p-Ѓfa5[(DMӡ,=:A\ 6ArSsӡdOuE=zt 5rLAT,:@P]1sARdu=8iRdÃEd˭:"fa5LuDPQ%ڽ:MDjA30ZӍ?"kM,=:$ T䧺IB5S랝? NJ{j.W1ӡtdFZd 4 ɚt .c)j\sUt" :A: .kkc&ҚDHuCOjVLTdڴ+i,0@"J• }i$bpB*zppB)ӇƟEd˭:fa5LuA?]em^?&Kyzt MViƟ5StH?fP j%=5BM:A\ 6*Ǜs 6n{겘ɵ° H? NJ{j.W1ӠMtdFZd ƠiAO4]1sApS HEQ6t  A: .kkc&ҚDHuCOjVFs)Š\+NI̬#уARd=ϭ:v\Y]ONY9pj2NMS&]i4Io6NnQ%ڽ:&pVB&n),=:-dOuPkNj%==: 6*Ǜs 6n{겘Yl1j%=5+ !tdFZd AT,&i$b惜ɮOstH`2ѕ[Ҏ QJMLΠ$fVA" st .pc&ҚDp7J*st .pc&ҚDHdWjJ}2ztE Ztk7\pL4eb1stTfk%F@'s0r4Uq\)P ֝KX.h8\W T, 8\W T,8@pABt: 6*Ǜs $*:%1]ňpL  p#BBtBM:pesӡ dMuD: 6*Ǜs $*:%1]M-j%5\c'@`{QSI JkN4diViƜ,LӠIwk=LU"?Di4hzǨIwk6- 2Ek{U´e1st‘+i Yos7J8Ip+*ACӠIwkJUO• 7N.Q2e֝A-DjA5[ͫӡjkN ?"kM,=:A\ 6ArSsӡdOuE=zt 5rL4 7NѠX=:"Y9t Fʴ.+*ACӠIwk JU JSpABt: 6*Ǜs $*:%1]aňpL  p#BBtBM:,\ArS]l*3N *:%1­e .ʱΉLzd*qi dMuD+  a)6 q\)ViƜ,m*8ӅY9t Pp4 ɚt .c)j\sUt" :A: .fB2m)[@d[=+i@Oz3p: C4e`M=Ip+*ACӠIwkJUJS Ed˭:"fa5LuDPQ%ڽ:MDjA30ZӍ?"kM,=: T䧺IB5S랝? NJ{j.W1ӡtdFZd AT,&i$b惜2 T8jUa@?C%ݬFM5| sAbEp:Rm \+NP,XJM+*ACӠIwkJUJS4-S&]i3 d˭:"Z-Ѓj$WBQn ֜i̡\e7Nh?fP ArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE#O-P stCiAO4]1sA{E5WB*Ӡh(jǨIwk2iMr"$\ءQ\+N]J@e\(:0h?W T,@1• O• 7N4-S&]i3 d˭:"Z-Ѓj$WBQn ֜i̡\e7N({ArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE#O-P stACP4 ɚt .c)j\sUt" :Ơn zv!6- 2Ek{U´,AfAVq'ARd=ϭ:v\Y]ONY9pj2NMS&]iIo6NnQ%ڽ:&pVOe)tA2ON U9)miЃ T䧺B5S뚋{Ak]>=:"Y9t "Ta>rF%.+*ACӠIwk JU JS8[ NJ:ffVUtJc͹хZ]c .do ZtANI@#+8[ NJk%FiQaUeXD<۝U%V9)PM6pA[$JQrp4Xntb•n ֜i-ҭZӍ8YyjS@N5 #O-P |@1{E5WB*ӠhRǨIwk[ZǛjk"u=ZP{QH´,$R• }i$bpB*zpѧJS?TɗZtMj2NuKyzt p-Ѓfa5[5StH?fP  T䧺IB5S랝? NJ{j.W1ӡtd&Y9tƠiAO4]1sA{E5WB*ӠhӡPֶ6- 2Ek{U´v{џ+ije+iK \)P ֝KX.h?W T, ?W T,8h4-S&]i3 d˭:"Z-Ѓj$WBQn ֜i̡\e7Nh?fP j%=5BM:A\ArSsQrp? |ܫ'DP4 7NP$4jFZd3N%ݬc42 T8jUa@Ѩ?C%ݭmkm[@d[=+iCm?W Ӡ:#FV۝ ARd=ϭ:v\Y]ONY9pPhȵLuDP&.Yj$WB m^?FfU+Zq2Mq: C'@`5S뚡&֝? NJ{zt U9)\ǸONnUӢ(?yjS@( Y>LӠIwk=LU"?Di44=stc$c͵5| sAbEp:.$RZ´ ф1=l+*ACӠIwkJUJS.zQ2e֝A-DjA5[ͫӡjkN ?"k̡Ӡ2A\ 6 ArSsӠlªʱΉLy:0fn)QJa9V\ArSsQrp WOONiANnHx=:"Y9t Ѩ?yjS:v\sAsUЊl4 t1]ֱښDHuCOjV#?W Ӡ1qnp2D09s"pB({Zt .c\)P 4\)P stPȵLuDP&.Yj$WB m^?FfU+Zq2Mq:RY=zt T䧺IB5S랝? NJ{j.W1ӡtdFZd P4 ɚt .c6Mpx&뛢C5 F y:3 \ml HO%F@'s0r4U)jq>=BK\$]1sARdu=8iRdAO"2e֝A30LӢ(?]em^?&Kyzt MViƟ5StH?fP IdOuPkNj%=5BM:A\Ak]>=:"Y9t Ѩ?yjS:v\sAsUЊl4 t1]&ښDHuCOjV>D \ȣ?W Ӡ1qnp2D09s"pB({Zt .c\)P 4\)P stPȵLuDP&.Yj$WB m^?FfU+Zq2Mq:RY=zt T䧺IB5S랝? NJ{j.W1ӡtdFZd P4 ɚt .c>"UBn$0Pdhs0@ɺQdQ:BT`a2w: W#LeZ{Rq: .fA6tdМǨIwk2 yoEҊ: .fA6tdHWjJ}2ztEZtPn 8&Y2%+*ACӠIwkJU JSƟd˭:esӠ5Sݸy=: DL#, ̥Yeqpg n5Sݸy5+ Ѓ%u=Zt 씁jEp:{K͹ш?hNj2NiANnA#P4 ɚt .c=LU"8[Di5 stc$< u!#FV۝pB({Zt .cq\)P 4q\)P stXӅȵLuCp&.Qn ֜i̡\e7N,({ArSsT$ӡ dOuN *:%1­e .ʱΉLzo=:"[ͥ:-=8ӅZ-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ #O-P st Y>LӠIwk9 d-0p7OPdmMr"8\9} zv Ǜjk"情]+*M Zt  u!#FV۝.6MҎH$J' C dc*pYsN%ݬc4.+*AWSӆ.+*ANnpABt: 6*Ǜs $*:%1]ɱbtANI@#+8[ NJk%FiQaUeXD<۝U%V9)PM6pA[$JQrp4Xntb•n ֜i-ҭZӍ8YyjS@N5 #O-P |@1{E5WB*ӠhӡPdmMr"$\ءQ\+JlVY2&$R• }i$bpB*zppB)ӆO"2e֝A30LӢ(?]em^?&Kyzt MViƟ5St&epArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE#O-P stCFiAO4]1sApS HEQ6t t1]̃m[@d[=+iCm?W Ӡ:#FV۝ ARd=ϭ:v\Y]ONY9pPhȵLuDP&.Yj$WB m^?FfU+Zq2Mq: C'@`5S뚡&֝? NJ{zt U9)\ǸONnUӢ(?yjS@( Y>LӠIwk=LU"?Di44=stc$=:"Y9t 8=:"[ͥ:-=8ӅZ-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ #O-P st Y>LӠIwk9pS iㅹ} zvDp7J*st .kk[5| sAȮ•td&p:xB|£< \VB.dk^mΌARd=ϭ:v\pY]ONpY9pѣN5SNAFمUcntaVeXD=BK@<1xda4  (:p*mi dB5SdQtmUYV9)6Fk(IvUtJc$!SlpA[$JQrp4q\)ViƜ,m*8ӅY9t Pp4 ɚt .c)j\sUt" :A: .kk[5| sAbEp(Ye\(pgZt[Ҏ\)JP>]1sARdu=8hpB)ӇEd˭:&fa5LuDQ%ڽ:MDjA30Zӂe)t({ ArSsT$ӡdOuNj%=5+ Ѓʺ}2ztAT,:FAcP4 ɚt .c=LU"?Di44jǨIwk[Z)[@d[=+iB?W Ӡ:#FV߄ ARd=ϭ:v\Y]ONY9p iZLӢ(?FfTɗZtEk[ͫӡ[Io6N3 8B&n̡Ӡ1? NJ{jZt U9)Ѓ T䧺s=:WOONiANnHh]1sARdu=8iRdÃEd˭:"fa5LuDPQ%ڽ:MDjA30ZӍ?"kM,=:$ T䧺IB5S랝? NJ{j.W1ӡtdFZd 4 ɚt .c)j\sUt" :Ơn zvDHuCOjVLTdAV*3 I,\)P ֝KX.h?W T, ?W T,8p,iZLӡ?FfTɗZtZ-Ѓj$WBQn ֜i̡\e7NepArSsT$ӡdOuOlªʱΉLy:0fn)Q\+^@/ $ T䧺s=: 1YWOON iANnH,jFZd3N%ݬc42 T8jUa@?C%ݭmk`o.h?]lPSڨEфSAV:0XF3pB({Zt .c\)P 4\)P stO"2e֝A30LӢh?]em^?&Kyzt MViA2Mq:RY=ztZ5S뚡&֝? NJ{ztmUYV9)6FlMe1" U"*c? NJ{j.W1Ӡ1aB_7*LӠIwk8k7\B|£< \VB Q!k2F`}\1h9 d-0p7OP 5S\Ȃ"ENnC%ݮk`o.h8YڢRLAVl(M7D"pW0:BT`a2w: W#LeZ• }i$b情pB*zpӅpB)Ӂ@ dT'LӠlªʱΉLy:0YBKsS%۠\nLӠIwk9 d0q]&NP7N=BK\$Mr"$\ءQ\+NZt(Ȝ*3d($R• }i$bpB*zppB)ӂO"2e֝A30LӢ(?]em^?&Kyzt MViƟ5St&epArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE#O-P st@?yjS:v\sAsUЊl4 t1]& k"u=Ztc \+N8AfRm \)P ֝KX.h?W T, ?W T,8ppȵLuDP&.Yj$WB m^?FfU+Zq2Mq: C'@dA\ 6ArSsӡdOuE=zt 5rLAT,:@PzFZd3N%ݬc42 T8jUa@XӡP 5S\Ȁ4({TW Ӣ钋Va4+i,0@"J• }i$bpB*zppB)ӇƟEd˭:fa5LuA?]em^?&Kyzt MViƟ5StH?fP j%=5BM:A\ 6*Ǜs 6n{겘ɵ° H? NJ{j.W1ӠMtdFZd ƠiAO4]1sApS HEQ6t t1]& k"u=Zt]I̧p:ta'2gF[)JP>]1sARdu=8iRdÃƟEd˭:fa5LuDQ%ڽ:MDjA30Zӂe)t({ j%=5BM:PA\pB)!0@" @xB H0@@b@8nPf(UtJc͹х7=uYLy :0zW2   PL  @, 0p,Xx ,Fc?0 @X "@$ <şlªʱΉLy:0fn)QJa9V\ Xhp ‘  tPA\\c'Eфqh? |ܫ'DP4 7NP$44'59t1]̃`oEҊ: .fAU"]+*+i'Bn$0FxpB({Zt .c\)P 4q\)P sth̙uB@ztArS'D耀Qepy 8XX]0 ,`p-ArS&s=:$Q\+N#MPSڨ@Ox8!4'5LuCP4 7N?yjS:v\sAs-UЊl4t1]̃`&2E k{U´AV:}2x&뛢CQo8TgQ8\W T,@1• N• 7N 8\TɗZt= j2NuMViƜ,5StA2ON-j%=5BM:pA\(0sSmΌ*PǨIvlpA\\c'@dpWOONdiNhON4muKyzt dj }iЃ[ͫT,pKyjSpMDjAT,:FdiAO4]1sAs5DZ`8nnC%ݬ6 kA\(c$Mr"$\p+Ep]>=: q\+N>"UBn$0Fx C dc*pYsN%ݬc4.+*AWSӆ.+*ANn44irU 4(0sSmΌ*PǨIv#'O@ h8Zӡ :b&֝r@zt lU9)HAFمUcntaVeXD=BK6 dMuD+ ,1Oz•n ֜i-ҭZӍ8YyjS@N5 #O-P |@1{E5WB*ӠhhӡPd5| sAbEp(iF@uF .pB({Zt .c\)P 4\)P st@ȵLuDP&.Yj$WB m^?FfU+Zq2Mq: C'@cA\ 6ArSsӡdOuE=zt 5rLAT,:@Ѩ?yjS:v\sAsUЊl45stc$Mr"$\ءQ\+N@B|£< \VBK \)P ֝KX.h?W T, ?W T,8(4-S&]i3 d˭:"Z-Ѓj$WBQn ֜i̡\e7Nh?fP j%=5BM:A\ArSsQrp? |ܫ'DP4 7NP$Y>LӠIwk9 d0q]&N?C%ݬ6 k"u=Ztc \+N8AfRm \)P ֝KX.h?W T, ?W T,8ppȵLuDP&.Yj$WB m^?FfU+Zq2Mq: C'@dA\ 6ArSsӡdOuE=zt 5rLAT,:@PzFZd3N%ݬc42 T8jUa@XӡPd5| sAbEp:.(fAV*3 I,\)P ֝KX.h?W T, ?W T,8p,iZLӢ(?FfTɗZtEk[ͫӡ[Io6N3 8B&n̡Ӡ2(? NJ{jZt U9) U9)\ǸONnUӢ?yjS@( Y>LӠIwk=LU"?Di4]1sARdu=8iRd@8̙uB@ztArS'B5Sݸy5+ Ѓ%u=Zt 씁jEp:М2e֝ AT,:FiAO4]1sA{Ep5WB*ӠjǨIwk[Z6&2E k{U´AV@NLv Q8\W T,@1• N• 7N Ɯ.Ed˭:fa5LuDPp&pVNe)t eC'B5S뚡&֝8[ NJ{ztmUYV9)6Fk(IvUtJc$}lU9)\ǸON&ՠp5rLA-ҝОi-DjA-ժACӡ $VY]ON4dj 7N4kp-ЃY9t AT,&i$b惜)jq>=BKZ5| r.nT1]ָ[@dEv'A4.+i `n a:0\۝pB({Zt .cq\)P 4q\)P stᠡ dT'LӠlªʱΉLy:0YBKsS%۠\2x8&h8Zӡ :b&֝r@zt lU9)HAFمUcntaVeXD=BK7 dMuD+ GQXdPppVNIo6n ֜iT,:q8YyjS:v\s5R.`TMFn zv#jk"u=ZP{QH´,$R• }i$bpB*zpѧJS?TɗZtMj2NuKyzt p-Ѓfa5[5StH?fP  T䧺IB5S랝? NJ{j.W1ӡtd&Y9tƠiAO4]1sA{E5WB*ӠhhӡPֶmMr"$\ءQ\+JbĢR3p: , 'F0H?W T,@1• O• 7N Ed˭:"fa5LuDPQ%ڽ:MDjA30ZӍ?"kM,=:U9)miЃ T䧺B5S뚋{Ak]>=:"Y9t!FiAO4]1sA{E5WB*ӠhpӡPֶmMr"$\ءQ\+N(p:O IpB({Zt .c\)P 4\)P stO"2e֝A30LӢ(?]em^?&Kyzt MViƟ5St&epArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE#O-P stAA?yjS:v\s5R.`TMACP7N=BKZ5| sAbEp:@ FJRm(?W T,@1• O• 7N .zQ2e֝ uKyzt p-Ѓfa5[(DMӠ C'@dPA\ 6ArSsdOu FXQ003  DY,)rSsArSsQrpX#R%F*2mZ_7*LӠIwk=LU"?Di45stc$qS\Ȁ4({TW ӢNe8+i 9c:0zH?W T,@1• O• 7N4-S&]i3 d˭:&Z-Ѓj$WBQn ֜(DMӠ C'@eU9)mi T䧺AFمUcntaFtVS+0\ r8ރ T䧺s=: 5rLAT,:@?yjS:v\sɮOstHav Q!*00;@ qH2=LTE1]&[A st7OP 5mMr"$\p+Ep]>=:"p:5Pn "@ta*3%F@'s0r4Uq\)P ֝KX.h8\W T, 8\W T,8@pABt: 6*Ǜs $*:%1]ŀ@ 0((A`8]  6AN-j%54(0sSmΌ*PǨIvB6 T䦺"Tb{ Yos7J*sp q\)ViƜ,m*8ӅY9t Pp4 ɚt .c)j\sUt" :A: .p\F- 2Ek{U´e1st‘+i Yos7J8Ip+*ACӠIwkJUO• 7N.Q2e֝A-DjA5[ͫӡjkN ?"k̡Ӡ0AdOuPkNj%==:A\\c'B_7*M#O-P st  AT,&i$b惜2 T8jUa@Ѩ?C%ݮkښDHuCOjVFMgZt@X@ N%Fa%YsN%ݬc4+*AWSӆ+*ANn ?TɗZtEj2NuKyzt p-Ѓfa5[(DMӠY=ztArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE#O-P stCFAT,&i$b惜2 T8jUa@?C%ݮkښDHuCOjV,h?W Ӡ1YH?W T,@1• O• 7N4-S&]i3 d˭:"Z-Ѓj$WBQn ֜i̡\e7Nh?fP $j%=5BM:A\ArSsQrp? |ܫ'DP4 7NP$Y>LӠIwk=LU"?Di45stc$MqS\Ȁ4({TW Ӣ钋Va4+i,0@"J• }i$bpB*zppB)ӇƟEd˭:fa5LuA?]em^?&Kyzt MViƟ5StH?fP j%=5BM:A\rSs'B@ (|łE‘p D(vA\A\\c'DԉQVʺ}2ztA#O-P stCCFiAO4]1sApS HEQ6t A: .p\F- 2Ek{U´0N-ZtNeaΌR• }i$bpB*zppB)Ӈ?TɗZt=j2NuKyzt p-Ѓfa5[5StH?fP h? NJ{jZtU9) HXR!C@B`D$@)@` Āp)6(P( ,Ǜs 6n{겘7Ft` #/ e ` "! "JX` $XB`YD0`( D(H@8x?FمUcntaFtVS+0\ r8 "<U9)\ǸON 9WOONiANnHhp]1sARdu=8iRdAcN5SNAFمUcntaVeXD=BK@<02x8&h8Zӡ :b&֝r@zt lU9)HAFمUcntaVeXD=BK7 dMuD+ GQXdppVNIo6n ֜iT,:q8YyjS:v\s5R.`TMCFn zv 6o.h?]lPSڨ 1bQ\)Vv QIp+*ACӠIwkJUJSO"2e֝A30LӢ(?]em^?&Kyzt MViƟ5St&epPA\ 6ArSsӡdOuE=zt 5rLAT,:@ѣP4 ɚt .c=LU"?Di48jǨIwk2#jk"u=Ztc \+N8AfRm \)P ֝KX.h?W T, ?W T,8ppȵLuDP&.Yj$WB m^?FfU+Zq2Mq: C'@dA\ 6ArSsӡdOuE=zt 5rLAT,:@PzFZd3N%ݬc42 T8jUa@PӡPdF- 2Ek{U´d՘MV*3 I,\)P ֝KX.h?W T, ?W T,8p,iZLӢ(?FfTɗZtEk[ͫӡ[Io6N3 8B&n̡Ӡ2(? NJ{jZt U9) U9)\ǸONnUӢ?yjS@(5#O-P |@1{E5WB*Ӡh,jǨIwk2#jk"u=Zt]I̧p:ta'2gF[)JP>]1sARdu=8iRdÃƟEd˭:"fa5LuBYj$WB m^?FfU+Zq2Mq: C'@eU9)miЃ T䧺B5S뚋{Ak]>=:"Y9t!P4 ɚt .c9 Aׂ%'8da<'F9˙s{L-c$mMr"8\9} zvm[@dEv'DPp@[JOvqxN%Fs25/6F q\)P ֝KX.h8\W T, 8\W T,8h0irU 4(0sSmΌ*PǨIv#'6 ]:t t'LT$ӠAN-j%54lªʱΉLy:0YBKsS% h8[ NJk%F(\ǸONȠq\)ViƜ,m*8ӅY9t Pp4 ɚt .c=LU"?Di4hzǨIwk[[6ښDHuCOjV,.nbR3p: -bG .pB({Zt .c\)P 4iRd"2e֝A30LӢh?]em^?&Kyzt MViA2Mq:RY=zt U9)miЃ T䧺B5S뚋{Ak]>=:"Y9tƠiAO4]1sA{E5WB*ӠhhӡPֶm5| sAbEp: 1Y@c )6YsN%ݬc4+*AWSӆ+*ANn88iZLӢ(?FfTɗZtEk[ͫӡ[Io6N3 8B&nA2ONj%=5BM:A\ArSsQrp? |ܫ'DP4 7NP$Y>LӠIwk=LU"?Di48jǨIwk[[6ښDHuCOjV?W ӠX#R%Fa)6E+*ACӠIwkJUJS?TɗZt=j2NQ%ڽ:MDjA30ZӍ?"k̡Ӡ2(? NJ{jZt U9)mUYV9)6FlMe1j+` EᄐA\\c'Af: 0_7*]1sARdu=8iRdaO"2e֝A30LӢh?]em^?&Kyzt MViA2Mq:RY=zt U9)miЃ T䧺B5S뚋{Ak]>=:"Y9t!?yjS:v\s2 T8jUa@?C%ݭmljk"u=Zt \+NAĤaL'TfHɠ\)P ֝KX.h?W T, ?W T,8,8iZLӢ(?FfTɗZt A-DjA5[ͫӡjkN ?"k̡Ӡ0j%=5BM:A\ArSsQrp? |ܫ'DP4 7NP$45#O-P |@1sAsUЊl4 t1]Ͷo.h?]lPSڨB´#K \)P ֝KX.h?W T, ?W T,8,4-S&]i3 d˭:&Z-Ѓj$WBQn ֜(DMӠ C'@cA\ 6ArSsӡdOuE=zt 5rLAT,:@?yjS:v\s6MpzAĤaL'Tg9s#XntbpS iㅹ} zvIm[A st7OP 6m5| sAȮ•td´d'%'8da<'F0:BT`a2w: W#LeZ• }i$b情pB*zpӅpB)Ӂ@ dT'LӠlªʱΉLy:0YBKsS%۠\xatANI@#+8[ NJk%FiAFمUcntaVeXD=BK9pA[$JQrp-bENn$.+*8Ӆ[ͥ[p4 7NjFZd3N%ݬc4)j\sUt" :A: .pfS\Ȁ4({TW ҅[ҌW F@e\(%YsN%ݬc4+*AWSӆ?W T,8yZLӢ(?FfTɗZtEk[ͫӡ[Io6N3 8(8P2@ A2ONj%=5BM:A\ArSsQrp? |ܫ'DP4 7NѠXLӠIwk=LU"?Di4LӠIwk9 H`Pn q)=AS'# :0 C dc*s5DZ`8nnC%ݬMo.EҊ>=BKYmMr"$\p+Ep]>=:"p:V8 )J Q!k2F`}\1h8\W T,@1• N• 7N pABt: 6*Ǜs $*:%1]ͷkGNh8]  6pesӡ dMuD: 6*Ǜs $*:%1]Ͷ T䦺"Tb{ •n ֜i-ҭZӍ8YyjS@N5 #O-P |@1s5R.`TMCFn zv!6ښDHuCOjV,h?W Ӡ1YH?W T,@1• O• 7N4-S&]i3 d˭:"Z-Ѓj$WBQn ֜i̡\e7NC'B5S뚡&֝? NJ{zt U9)\ǸONnUӢ(?yjS@( AT,&i$b惞AsUЊl45stc$ - 2Ek{U´d՘MZt jD%&pB({Zt .c\)P 4\)P stj2NMS&]iIo6NnQ%ڽ:&pVOe)tE,=:A\ 6ArSsArSsQrp? |ܫ'DP4 7NP$5#O-P |@1{E5WB*Ӡh(jǨIwk2m[@d[=+ita'2Z´ ф1=l+*ACӠIwkJUJS.Q2e֝A-DjA5[ͫӡjkN4P2DP̡ӡdOuPkNj%==:A\\c'B_7*LӠIwk=LU"?Di45stc$ - 2Ek{U´l݉HƠ\+NAĤaL'Tf.JF5JP>]1sARdu=8iRdaO"2e֝@Y30LӢ(?]em^?&Kyzt MViƟ5StY=zt U9)miЃ T䧺B5S뚋{Ak]>=:"Y9t!?yjS:v\s2 T8jUa@?C%ݬMo.h?]lPSڨDeɠ\+NAĤaL'TfHɠ\)P ֝KX.h?W T, ?W T,8,8iZLӢ(?FfTɗZtEk[ͫӡ[Io6N3 8B&nA2ONj%=5BM:A\ArSsQrp? |ܫ'DP4 7NP$45#O-P |@1sAsUЊl4 t1]̄jk"u=ZtM΍qe \+N 1,$R• }i$bpB*zppB)ӂCO"2e֝A30LӢ(?]em^?&Kyzt MViƟ5StY=zt U9)miЃ T䧺B5S뚋{Ak]>=:"Y9t!P4 ɚt .cÿ`/ƂÁ AXhA_oy:0eXݺ0JYdh$錓`xQ6S2]LTEa:77N-Pֶ6- /F)HMi:%5DZf#st .kk[5| уm*&`}Nw2 Q8=BKZ5| уm*&`}Nw2 Q8=BKZɴoz0yMED׼lO.A"0ǨIwk[[6ښD6^ɰm>XdLtnn[%ݭHL^ShQ5<uK)j0GFű]&ښD6^ɰm>XdLtnn[%ݮk`oz0yMED׼lO.A"0ǨIwk6oz0yMED׼lO.A"0ǨIwk6- /F)HMi:%5DZf#st .pfS\Ȁ<"ky6 pS i`Ӌc$1.b`Dy6S2]LU"]&N,h@$8=BKYJ}2c$\6^ɰm>XdE ѹTMXѠxH!qlzvyo.b`Dy6S2]LU"]&N,hP@$8=BK\$XdE ѹTMXѡCst .kk\F- 2E^ShQ5<uK)j\Diō/ 77N-Pֶ2m)[@d<"ky6 pS H:75WB*Ӌ4<^ nn[%ݭmljk"/F)HMi:%5R.x`UЊl4ƍǨIwkǛjk"/F)HMi:%5R.x`UЊl4ƍǨIwk)[@d<"ky6 pS H:75WB*Ӌ4<^ nn[%ݮkښDHуm*&`}Nw2 T#sUt" 8C ű]&M5| s$TM{&a d<0GFEQ6qcFA Ӌc$MmMr"$\6^ɰm>XdE ѹTMXѡCst .fA6- 2E^ShQ5<uK)j\Diō / 77N-Pֶ6- 2E^ShQ5<uK)j\Diō / 77N-PֶS\Ȁ1z0yMED׼lO.AstnjUa44h@$8=BKZ5| s$TM{&a d<0GFEQ6qcCFA Ӌc$Jk"/F)HMi:%5R.x`UЊl4ƆǨIwk[[6ښDHуm*&`}Nw2 T#sUt" 8E ű]&ښDHуm*&`}Nw2 T#sUt" 8E ű]& k"/F)HMi:%5R.x`UЊl4ƆǨIwk6o.b`Dy6S2]LU"]&N,hhxH!qlzvIiMr"$\6^ɰm>XdE ѹTMXѢCst .pfS\Ȁ1z0yMED׼lO.AstnjUa44h@$8=BKYc͵5| s$TM{&a d<0GFEQ6qcCFA Ӌc$Mr"$\6^ɰm>XdE ѹTMXѢCst .fAmMr"$\6^ɰm>XdE ѹTMXѢCst .fB2m)[@d<"ky6 pS H:75WB*Ӌ4^ nn[%ݬMo.b`Dy6S2]LU"]&N,hhx@$8=BKZXdE ѹTMXCst .kkXmMr"$\6^ɰm>XdE ѹTMXCst .kk[5| s$TM{&a d<0GFEQ6qcCA Ӌc$qS\Ȁ1z0yMED׼lO.AstnjUa48h@$8=BKZɴo.b`Dy6S2]LU"]&N,hpxH!qlzvm[@d<"ky6 pS H:75WB*Ӌ4^ nn[%ݮkm[@d<"ky6 pS H:75WB*Ӌ4^ nn[%ݮk`o.b`Dy6S2]LU"]&N,hpxH!qlzvI#jk"/F)HMi:%5R.x`UЊl4Ƈ ǨIwk6- 2E^ShQ5<uK)j\Diō/ 77N-P 6m5| s$TM{&a d<0GFEQ6qcCA Ӌc$XdE ѹTMXXxH!qlzv#jk"/F)HMi:%5R.x`UЊl4ƂƋA Ӌc$Jk"/F)HMi:%5R.x`UЊl4ƂƋA Ӌc$mMr"$\6^ɰm>XdE ѹTMXXxH!qlzvIDHуm*&`}Nw2 T#sUt" 8Cst .p\F- 2E^ShQ5<uK)j\DiōǨIwk6- 2E^ShQ5<uK)j\DiōǨIwk6ښDHуm*&`}Nw2 T#sUt" 8Cst .fAS\Ȁ1z0yMED׼lO.AstnjUa44^ nn[%ݬ8[@d<"ky6 pS H:75WB*Ӌ / 77N-Pd#&ҚDHуm*&`}Nw2 T#sUt" 8Cst .fBm5| s$TM{&a d<0GFEQ6qcCƋA Ӌc$l- 2E^ShQ5<uK)j\Diō/ 77N-Pֶ2m)[@d<"ky6 pS H:75WB*Ӌ4^ nn[%ݭmljk"/F)HMi:%5R.x`UЊl4ƇǨIwk)[@d<"ky6 pS H:75WB*Ӌ4^ nn[%ݮldS\Ȁ1z0yMED׼lO.AstnjUa4XdQ5R.x`UЊl4ƆǨIwkhNjst2Q V1mjуm*&`}NwBj\Diō / 77N-PǛbC Nn[%ݭmkmɋуm*&`}NwBj\Diō / 77N-P A4'59qlzvL<"ky6 pT*&E ѹTMXѢCst .n#bC Nn[%ݭmkڮL<"ky6 pT*&E ѹTMXѢCst .qh^ q9Ӌc$J}2b`Dy6S2]P<0GFEQ6qcCFA Ӌc$Ͷ/ 8Мű]Ͷoz0yMED׼lO.TMT#sUt" 8E ű] 8=BK[]l*0<"ky6 pT*&E ѹTMXCst .ly/ 8Мű]̃mɋуm*&`}NwBj\Diō/ 77N-P A4'59qlzv *ɋуm*&`}NwBj\Diō/ 77N-P6/ 8Мű]̃ڮL<"ky6 pT*&E ѹTMXCst .qh^ q9Ӌc$ɴ&/F)HMi:% stnjUa48h@$8=BK\bC Nn[%ݬMoz0yMED׼lO.TMT#sUt" 8Cst .bC Nn[%ݮ2m уm*&`}NwBj\DiōǨIwkhNjst .ly/F)HMi:% stnjUa4XdQ5R.x`UЊl4ƃA Ӌc$A4'59qlzvz0yMED׼lO.TMT#sUt" 8ѢCst .bC Nn[%ݮmz0yMED׼lO.TMT#sUt" 88xH!qlzvxH!Ƅ7N-Q*1ɩqjXDEZQT*&<"ky6 pTW Q8=BKZXdR0GFű]̃mɋуm*&`}NwEpi`Ӌc$WOL^ShQ5<uK*+(Ltnn[%ݬ8ɋуm*&`}NwEpi`Ӌc$ɴ&/F)H40<  P,4ᠯ7hx mΌV1wnY2 .j:c G`}Nw2 Q8=BKZXdLtnn[%ݭmljk$TM{&a d-3 ѹqlzv"Ta1z0yMED׼lO.A"0ǨIwkǛjk$TM{&a d-3 ѹqlzvID6^ɰm>XdLtnn[%ݮkښD6^ɰm>XdLtnn[%ݮldS\Ȁ<"ky6 pS i`Ӌc$MmMr"`Dy6S2]LTEa:77N-PdmMr"`Dy6S2]LTEa:77N-Pd5| уm*&`}Nw2 Q8=BKYqS\Ȁ<"ky6 pS i`Ӌc$ɴoz0yMED׼lO.A"0ǨIwk2m[@^ShQ5<uK)j\DiōǨIwk[ZǛj}2c$\6^ɰm>XdE ѹTMXxH!qlzvL1z0yMED׼lO.AstnjUa4^ nn[%ݭmkڮL1z0yMED׼lO.AstnjUa4^ nn[%ݭmldU"/F)HMi:%5R.x`UЊl4ƋA Ӌc$XdE ѹTMXѡCst .kkXmMr"$\6^ɰm>XdE ѹTMXѡCst .kk[5| s$TM{&a d<0GFEQ6qcFA Ӌc$qS\Ȁ1z0yMED׼lO.AstnjUa4hx@$8=BKZɴo.b`Dy6S2]LU"]&N,hxH!qlzvm[@d<"ky6 pS H:75WB*Ӌ4<^ nn[%ݮkm[@d<"ky6 pS H:75WB*Ӌ4<^ nn[%ݮk`o.b`Dy6S2]LU"]&N,hxH!qlzvI#jk"/F)HMi:%5R.x`UЊl4ƍǨIwk6- 2E^ShQ5<uK)j\Diō/ 77N-P 6m5| s$TM{&a d<0GFEQ6qcFA Ӌc$XdE ѹTMXѢCst .kk\F- 2E^ShQ5<uK)j\Diō / 77N-Pֶ2m)[@d<"ky6 pS H:75WB*Ӌ4^ nn[%ݭmljk"/F)HMi:%5R.x`UЊl4ƆǨIwkǛjk"/F)HMi:%5R.x`UЊl4ƆǨIwk)[@d<"ky6 pS H:75WB*Ӌ4^ nn[%ݮkښDHуm*&`}Nw2 T#sUt" 8E ű]&M5| s$TM{&a d<0GFEQ6qcCFA Ӌc$MmMr"$\6^ɰm>XdE ѹTMXѢCst .fA6- 2E^ShQ5<uK)j\Diō / 77N-Pd5| s$TM{&a d<0GFEQ6qcCFA Ӌc$5| s$TM{&a d<0GFEQ6qcCFA Ӌc$ɴo.b`Dy6S2]LU"]&N,hhxH!qlzv!6ښDHуm*&`}Nw2 T#sUt" 8Cst .kkXmMr"$\6^ɰm>XdE ѹTMXxH!qlzvIyo.b`Dy6S2]LU"]&N,hhx@$8=BKYc͵5| s$TM{&a d<0GFEQ6qcCA Ӌc$c͵5| s$TM{&a d<0GFEQ6qcCA Ӌc$l- 2E^ShQ5<uK)j\Diō/ 77N-PֶmMr"$\6^ɰm>XdE ѹTMXCst .kkc&ҚDHуm*&`}Nw2 T#sUt" 8E ű]Ͷo.b`Dy6S2]LU"]&N,hpxH!qlzvIyo.b`Dy6S2]LU"]&N,hpxH!qlzvIDHуm*&`}Nw2 T#sUt" 8E ű]&[@d<"ky6 pS H:75WB*Ӌ4^ nn[%ݮldS\Ȁ1z0yMED׼lO.AstnjUa48h@$8=BK\$ٶ- 2E^ShQ5<uK)j\Diō/ 77N-PdmMr"$\6^ɰm>XdE ѹTMXCst .fAS\Ȁ1z0yMED׼lO.AstnjUa48h@$8=BKYqS\Ȁ1z0yMED׼lO.AstnjUa48h@$8=BKYJk"/F)HMi:%5R.x`UЊl4Ƈ ǨIwk2m[@d<"ky6 pS H:75WB*Ӌ / 77N-Pֶ6- 2E^ShQ5<uK)j\Diō ǨIwk[Z)[@d<"ky6 pS H:75WB*Ӌ / 77N-PֶmMr"$\6^ɰm>XdE ѹTMXPxH!qlzviMr"$\6^ɰm>XdE ѹTMXPxH!qlzvm[@d<"ky6 pS H:75WB*Ӌ / 77N-P 56- 2E^ShQ5<uK)j\Diō ǨIwk)[@d<"ky6 pS H:75WB*Ӌ / 77N-P 5mMr"$\6^ɰm>XdE ѹTMXPxH!qlzvIiMr"$\6^ɰm>XdE ѹTMXPxH!qlzvIm[@d<"ky6 pS H:75WB*Ӌ / 77N-PdmMr"$\6^ɰm>XdE ѹTMXPxH!qlzv )[@d<"ky6 pS H:75WB*Ӌ / 77N-PdF- 2E^ShQ5<uK)j\Diō ǨIwk2iMr"$\6^ɰm>XdE ѹTMXPxH!qlzv!6ښDHуm*&`}Nw2 T#sUt" 8Cst .kk[5| s$TM{&a d<0GFEQ6qcAcE ű]ָ[@d<"ky6 pS H:75WB*Ӌ / 77N-Pֶ2m)[@d<"ky6 pS H:75WB*Ӌ / 77N-Pֶm5| s$TM{&a d<0GFEQ6qcAcE ű]& k"/F)HMi:%5R.x`UЊl4ƂƋA Ӌc$MqS\Ȁ1z0yMED׼lO.AstnjUa44^ nn[%ݮldS\Ȁ1z0yMED׼lO.AstnjUa44^ nn[%ݮljk"/F)HMi:%5R.x`UЊl4ƂƋA Ӌc$Mr"$\6^ɰm>XdE ѹTMXXxH!qlzv 6o.b`Dy6S2]LU"]&N,h,h@$8=BKYJk"/F)HMi:%5R.x`UЊl4ƂƋA Ӌc$ - 2E^ShQ5<uK)j\Diō/ 77N-PֶS\Ȁ1z0yMED׼lO.AstnjUa4XdE ѹTMXCst .pfS\Ȁ1z0yMED׼lO.AstnjUa4XdE ѹTMX`xH!qlzvIiMr"$\6^ɰm>XdE ѹTMX`xH!qlzvIm[@d<"ky6 pS H:75WB*Ӌ / 77N-Pd#&ҚDHуm*&`}Nw2 T#sUt" 8Cst .fBm5| s$TM{&a DH:75WB*Ӌ4^ nn[%ݬ^ q9ӋdD{*2mXŵl"/F)HMi:% stnjUa44h@$8=BK[mA4'59qlzvy&/F)HMi:% stnjUa44h@$8=BK[`/ 8Мű]ֶ }2b`Dy6S2]P<0GFEQ6qcCFA Ӌc$A4'59qlzv#j}2b`Dy6S2]P<0GFEQ6qcCFA Ӌc$MxH!Ƅ7N-Pֶ2m*ɋуm*&`}NwBj\Diō / 77N-P6ؼ@$BsSǨIwk[[6ښD6^ɰm>XdQ5R.x`UЊl4Ƈ ǨIwkhNjst .muDb`Dy6S2]P<0GFEQ6qcCA Ӌc$ؼ@$BsSǨIwk2 y&/F)HMi:% stnjUa48h@$8=BK[`/ 8Мű]̃`&/F)HMi:% stnjUa48h@$8=BK[ؼ@$BsSǨIwk2#j}2b`Dy6S2]P<0GFEQ6qcCA Ӌc$MxH!Ƅ7N-Pd#&ҮL<"ky6 pT*&E ѹTMXCst .smA4'59qlzv!6ښD6^ɰm>XdQ5R.x`UЊl4ƂA Ӌc$A4'59qlzvɴ/F)HMi:% stnjUa44^ nn[%ݬ^ q9Ӌc$ؽ<"ky6 pT*&E ѹTMXCst .bC Nn[%ݭ$TM{&a DH:75WB*Ӌ / 77N-P/ 8Мű]F6^ɰm>XdQ5R.x`UЊl4ƃFA Ӌc$A4'59qlzv6^ɰm>XdQ5R.x`UЊl4ƀE ű] 8AD&Ūqa%iDVJ#AP"`Dy6S2]Q\)DZf#st .kkXmWOL^ShQ5<uK*+(Ltnn[%ݭmk`&/F)HMi:%”Ea:77N-PֶmWOL^ShQ5<uK*+(Ltnn[%ݭmldU$TM{&a J"0ǨIwk2 y&/F)HMi:%”Ea:77N-Pd]>1z0yMED׼lO.ਮ-3 ѹqlzv 6&/F)HMi:%”Ea:77N-Pd#&ҮL<"kpXx0`XX0 h0 a@o `y:0eXݺ2m*a0 mUYUeXD<۝U Fә)L@^ILӄ x49]ޝe`DFr0%6F \MsmUYUeXD<۝UʱΈ8!(њs%)#K;@ 6ɗZpD@?ӬL蒨Fcvɶr *Ǜs 6LG8!(њs%)#K;@ 6ɗZpD@?ӬL蒨Fcvɶr *Ǜs 6V\h9 ΠZphxyd˭8@"@H @Yo& tITg# Xnt`ʱudg9FمUcntaV*:%1!Slh9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \MkN p6tCÿ9FمUcntaV*:%1t lh9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \MkN86tPr *:%1­eMUtJc6ݬD08!(њs%)#K;@ 6Yd˭8:-.*a0KmΌV1wnln ֜ #Lli  9FمUcntaV*:%1V%jlY7J6?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮc&?ۂAi :`@78smUYV9)6Fk*msSEbV@0qBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bs680hpii :@84 r *:%1­eMUtJt %3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1mZӂ80a`#fNP tfVUtJc͹хZʛl Eӑlh9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \MkNAA6l4 9FمUcntaV*:%\dLh9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \MkN @s6t(0sSmΌ*TeXD0qBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bs68488a`#fNX,h }9FمUcntaV*:%M3f8!(њs%)#K;@ 6FLӁa0 ?ӬL蒨FcvɶiPp44F͆@h,7AQaUeXD<۝UʱΉSmX@e%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1mZӂp?0a@( r *:%1­eMUtJ0J .c݃2R4=kN LӁa0 ?ӬL蒨Fcvɶi@hii :@o(0sSmΌ*TeXDst`=w`Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ2m+Zp6l4 p?smUYV9)6Fk*m(qS% 0N%3Nd3$iz{'s&֜4id˭8:-.*a0KmΌV1wnln ֜8 #Lli VlªʱΉLy:0YSmD{6ڙ(qvqBQ4JS?2Fw:micFLӁa0 ?ӬL蒨Fcvɶi8a`#fNPx4;h9080ghx/Ah4 |8h+  c͹у*.1m[qfVUYV9)6Fk*m(0ʱΉLy:0YSmc(0ʱΉLy:0YSmD{aFمUVUtJc͹хZʛla.vqfVUtJc͹хZʛlǨNm(0sSmΌ*TeXD=Nr2smaFمUcntaV*:%1n"mL 6*Ǜs 6V9)"+PbɺQ(0sSmΌ*TeXD<ĭNr2gQaUeXD<۝UʱΉNr2gQaUeXD<۝UʱΉP]90lªʱΉLy:0YSmck2`@&qfVUtJc͹хZʛls`@&qfVUtJc͹хZʛl6ڄ͛gQaUeXD<۝UʱΉSmX@e8 *:%1­eMUtJ0J .cݜaFمUcntaV*:%ۘ4,ˣ18 *:%1­eMS% Tjd= QaUeXD<۝Ud= mLG;iÁ`  `Ah4 |8h+  c͹у*.1mhG(0ʱΉLy:0YSm96)Te+smUYUeXD<۝UʱΎlªʫ*:%1­eMS%!(0ʱΉLy:0YSml1fVUtJc͹хZʛlP0fVUtJc͹хZʛlJ#C`  ?C Á AXhA_oX/ǛsU]ۮc&6ݭWLdGHPXhс~a@QՔmUtJc͹х\2۵r9p`iըhpNEl`0^  ` , P0(BJfqX E׺Y71oyn1• F+*ANn<-S&]i3 d˭:&Z-Ѓj$WBQn ֜(DMӠ C'@`5S뚡&֝? NJ{zt U9)\ǸONnUӢ(?yjS@hH,jFZd3Nc=LU"?Di44jǪmZ5| sAbEp: 1Y@c )6YsNc\)P 4\)P stO"2e֝A30LӢ(?]em^?&Kyzt MViƟ5StY=zt U9)miЃ T䧺B5S뚋{Ak]>=:"Y9t LӢmX.h9pS HEQ6t A:Mk[Zo.h?]lPSڨB´JOvqxN%FaV\)JP>n1• O• 7N .Q2e֝A-DjA5[ͫӡjkN ?"k̡Ӡ0$ T䧺IB5S랝? NJ{j.W1ӡtdFZd FiAO4n1s@&y=x R{NFta*3 y:1)jq>=Sm&[A st7OTvIk"情]+*.+iɮOJOvqxN%F`tdu5#0>Fʴ.+*ACӢmX.h8\W T, 8\W T,8x4irU 4(0sSmΌ*TeXD=Nr2sm8Zӡ :b&֝r@zt lU9)HfVUtJc͹хZʛlǨNm-j%5\c'@`{QSI JkN4diViƜ,LӢmX.h9pS HEQ6t t1n 5Mr"$\ءQ\+JYos7J1\)V1st ARd=ϭ:&۵bpB*zpѧJS?TɗZtEj2NuKyzt p-Ѓfa5[5StH?fP  T䧺IB5S랝? NJ{j.W1ӡtdFZd4 Y>LӢmX.h9pS HEQ6t t1n 5Mr"$\ءQ\+Nta4+i,xJM+*ACӢmX.h?W T, ?W T,8ppȵLuDP&.Yj$WB m^?FfU+Zq2Mq:"ep? NJ{jZt U9)Ѓ T䧺s=:WOONiANnH(=#O-P |Dv\s5R.`TMCn z۵MS\Ȁ4({TW Ӣ钋Va4+i,0@"J• }i6ݬc4+*AWSӆ+*ANn84-S&]i3 d˭: A-DjA5[ͫӡjkN4P2@ A2ONȠU9)miЃ T䧺QaUeXD<۝Qs7UM/ eArSsQrp,h? |ܫ'A4n1• O• 7N4-S&]i3 d˭:&Z-Ѓj$WBQn ֜(DMӠ C'@cA\ 6 ArSsӠlªʱΉLy:0fn)}~zā0 Iˆ1xQep /X#b`;Jp.$PQe/_r2xa? NJ{j.W1ӡtdFZd AT,&i6ݬc42 T8jUa@XӡTvIk"u=Zt \+NAĤaL'Tf.JF5JP>n1• O• 7N .Q2e֝A-DjA5[ͫӡjkN ?"k̡Ӡ0IdOuPkNj%==:A\\c'B_7*=:"Y9t!P4 ɚtMk=LU"?Di45stc6ݮjDHuCOjV?W Ӡq)=AS'# :0cs\YXIp+*ACӢmX.h?W T, ?W T,8,LӢmX.h9) nq)=AS'# :0\۝5DZ`8nnCkkT- ȹQSǪmZ5|sAȮ•td´kuI29O фrF%.+*ACӢmX.h8\W T, 8\W T,8h0irU 4(0sSmΌ*TeXD=Nr2smp#BBtBM:,\ArS]l*3J 6*Ǜs 6V9)Q h8[ NJk%F(\ǸONȠq\)ViƜ,m*8ӅY9tCAPp4 ɚtMk9 d0q]&NC7N=Sm֩[@4d[=+iB-bF+#?W Ӡ@.npH?W T,Dv\Y]ON4\)P stj2NMS&]i4Io6NnQ%ڽ:&pVB&n),=:A\ 6ArSsӡdOuE=zt 5rLAT,:FAcP4 ɚtMk9 d0q]&N?CkkT- 2Ek{U´AVI29O ф]ؔj• }i6ݬc4+*AWSӆ+*ANn4-S&]i3 d˭:&Z-Ѓj$WBQn ֜(DMӠ C'@`5S뚡&֝? NJ{zt U9)\ǸONnUӢ(?yjS@( Y>LӢmX.h9 d0q]&N?CkkT- 2Ek{U´艰Ss\YVp:Fu~8 )J1,ARd=ϭ:&۵bpB*zppB)ӂcO"2e֝A30LӠRYj$WB m^?FfU+ZpPq̡\e7Nepj%=5BM:A\ArSsQrp? |ܫ'DP4 7NP$45#O-P |Dv\sR5݄e2r0 Q̍`K͹ш=LTE1n 5Mr"8\9} z۵MS\Ȁh4,Q\)WOONq\+N6Mpx R{NFta*3%F@'s0r4Uq\)P ֝m1sARdu=8iRdN5SNAFمUcntaV*:%1t o 7A`8]  6pesӡ dMuD((0sSmΌ*TeXD=D*smlU9)Hs=:5[Ҋ2H8\W U+Zq $JkN4diANnPx,=:"Y9t!?yjS:&۵b惜`P4o0  AXhA_o{mΌV1wnldv\1lO <uK)j0GFűnֶMr"`Dy6S2]LTEa:77N-Tvk $TM{&a d-3 ѹqlz۵MS\Ȁ<"ky6 pS i`Ӌc6ݮjDE6^ɰm>XdE ѹTMXѡCstMk[Zo.b`Dy6S2]LU"]&N,hxH!qlz۵S\Ȁh1z0yMED׼lO.AstnjUa4hx@$8=Sm&[@d<"ky6 pS H:75WB*Ӌ4<^ nn[pT- 2E^ShQ5<uK)j\Diō / 77N-Tvk"/F)HMi:%5R.x`UЊl4ƆǪm\$5| s$TM{&a d<0GFEQ6qcCA Ӌc6ݭmjDHуm*&`}Nw2 T#sUt" 8E űn 5Mr"$\6^ɰm>XdE ѹTMXPxH!qlz۵S\Ȁ1z0yMED׼lO.AstnjUa44^ nn[pT- 2E^ShQ5<uK)j\DiōǪmZ5| s$TM{&a d<0GFEQ6qcAcE űnֶMr"$\6^ɰm>XdE ѹTMXXxH!qlz۵MS\Ȁ1z0yMED׼lO.AstnjUa44^ nn[pT- 2E^ShQ5<uK)j\Diō/ 77N-Tvk"/F)HMi:%5R.x`UЊl4ƇǪm\$5| s$TM{&a d<0GFEQ6qcAE űnֶMr"$\6^ɰm>XdE ѹTMX`xH!qlz۵S\Ȁh1z0yMED׼lO.AstnjUa44^ nn[pT- 2E^ShQ5<uK)j\Diō Ǫm\$5|s$TM{&a d<0GFEQ6qcAE űnֶMr"$\6^ɰm>XdE ѹTMXhxH!qlz۵MS\Ȁ1z0yMED׼h`  `4<P4 4 aǛsU]ۮc&6ݭWLa`(lO.A"0ǪmZ5| уm*&`}Nw2 Q8=Sm֩[@4^ShQ5<uK)j0GFűn 5Mr"`Dy6S2]LTEa:77N-TvIk $TM{&a d<0GFEQ6qcFA Ӌc6ݭmjDHуm*&`}Nw2 T#sUt" 8C űnֶMr"$\6^ɰm>XdE ѹTMXѡCstMko.b`Dy6S2]LU"]&N,hxH!qlz۵MS\Ȁh1z0yMED׼lO.AstnjUa44h@$8=Sm֩[@d<"ky6 pS H:75WB*Ӌ4^ nn[pT- 2E^ShQ5<uK)j\Diō/ 77N-Tvk"/F)HMi:%5R.x`UЊl4Ƈ Ǫm\$5| s$TM{&a d<0GFEQ6qcACE űnֶMr"$\6^ɰm>XdE ѹTMXPxH!qlz۵MS\Ȁ1z0yMED׼lO.AstnjUa44^ nn[kkT- 2E^ShQ5<uK)j\DiōǪmZ5|s$TM{&a d<0GFEQ6qcAcE űn 5Mr"$\6^ɰm>XdE ѹTMXXxH!qlz۵MS\Ȁh1z0yMED׼lO.AstnjUa4XdE ѹTMX`xH!qlz۵MS\Ȁ1z0yMED׼lO.AstnjUa44^ nn[pT- 2E^ShQ5<uK)j\DiōǪmZ5| s$TM{&a d<0GFEQ6qcAE űn 5Mr"$\6^p`0  `( @ (y:0eXݺ2w QU`G(0sSmΌ*TF Fә)L@^ILӄ x49]ޝe`DFr0%6F \Nta*0(0sSmΌ*TF Έ8!(њs%)#K;@ 6ɗZpD@?ӬL蒨Fcv.%FfVUtJc͹хZʝTaLG8!(њs%)#K;@ 6ɗZpD@?ӬL蒨Fcv.%FfVUtJc͹хZʝTaV9)TFc9oqBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bs;ф+Zp FٰӠ4h#smUYV9)6Fk*w QXD=S]J Fә)L@^I&]iYo& tITg# Xnt`ʱudFiPpqi :AWh9FمUcntaVp0UtJc;$J#@h9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \Nta*0n ֜88<FٰӠ< h96*Ǜs ;ф¬sSta*1B&ф Fә)L@^I&]iYo& tITg# Xnt`ʱudFi`6t?AQaUeXD<۝U.%FcNta*2# Fә)L@^I&]iYo& tITg# Xnt`ʱudFi@ ii :(0sSmΌ*TF ΉLzp0sY%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1]J?ۂ @6t vlªʱΉLy:0YS]J*:%1TeE2R4=kN LӁa0 ?ӬL蒨Fcv.%FZӂ844F͆ < zr *:%1­eNta*0Ǫw QuD`Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ2w QpV 4F͆h+h96*Ǜs ;ф¬sS.%ռh9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \Nta*0n ֜ ?0a@h,9FمUcntaVp0UtJWF&l%3Nd3$iz{'s&֜>dk`ota*3tnk+,y=ds FW=: s&]i:5Sݸy=:rS&NAaHL#,"8X"8[ NJcvpAǮɨ\ǸON(Ri{U´tnk) S&]i+*ACӢw Q\Y]ONY9pY9t iAO4Tec42 Q8[CWFRr.nTǪw-Uф:75Ŕ2EҊEv'DPp@[`ota*3"x%1,2d- JP>Tec4.+*AWSӆ.+*ANn8lU9*tmUYV9)6Fk*w QXD=S*Jd=p#BBtBM:pesӡ dMuD: 6*Ǜs ;ф¬sSta*1B&фpA[$JQrpARZӍ8Y%U+Zq #O-P st  diAO4Tec4,Tec4.+*AWSӆ.+*ANnp.Q2e֝A30ZӍ8Y"kp̡Ӡ1z5S뚡&֝8[ NJ{zt lU9)\ǸON.nUӢ(8Y%SӍ8[]em^8Z&Kyzt diANnRFZd3N.%FZ1sApS HEQ6tA:Nॵ0F渲HQAbEp: 1Y@ wF渲%DiJP>Tec4+*AWSӆ+*ANn.Q2e֝A-DjA5[ͫӡjkN4P2@ A2ONA\ 6ArSsӡdOuE=zt 5rLAT,:A Tec4.+*AWSӆ.+*ANnp.Q2e֝A30ZӍ8Y"kp̡Ӡ15S뚡&֝8[ NJ{zt lU9)\ǸON.nUӢ(8Y%SӍ8[]em^8Z&Kyzt diANnbFZd3N.%FZ1sApS HEQ6tn zpR]JSs\YC$\(uCOjVqe)1Zt070cs\YXAS'# \)P ֝]JbpB*zCCspB) "2e֝A30LӢh?FfU+Zq2Mq:RY=zt7ArSsT$ӡdOuNj%=5+ Ѓʺ}2ztA-ҝОi-DjA5[ͫӡ#O-P st P4 ɚtNta*21{E5WB*Ӡ5stc;֪Tb"Ek{U´( SsAV2+2^>F`L %Fnqe \)P ֝]JbpB*zppB)Ӏj2NMS&]i4Io6NnQ%ڽ:&pVOe)t({ $ T䧺IB5S랝? NJ{j.W1ӡtd&Y9t@t9u=Zt \+N>=x { QF75ŔpB({ZtNta*21• CspB)ӂO"2e֝A30LӢ(?FfU+Zq,=:(DMJ U9)miЃ T䧺fVUtJc͹хZʝTaV9)T 0hh T䧺s=:nUӢ(?%SӍ?]em^?yjSBFZd3N.%FZ1sA(PB (PB (PB (PB (PB (PB (PB (PB 8 \<&뛢C`ota*3tnk+X!*03*i(PB (PB (PB (PB (PB (PB (PB (PBpS iㅹt1PUta*1Nqe r.nTǪwBMUф:75Ŕ2EҊEv'DPp@&y=x { Q8 -Xqe`}\1$ih8\W T,DF-cq\)P 44q\)P stӅ TiQaUeXD<۝U.%FcNૣ ) :p*miЃ#+8[ NJk%FiQaUeXD<۝U.%FcNૣ Q6'lU9)Hs=:Yos7J*sPppVNIo6n ֜iT,:A bFZd3N.%FZ1sApS HEQ6t A:NI0F渲HQAbEp:Yos7J*sP@e\(%YsN.%FZ1sARdu=8hiRdGj2NMS&]i3 8B&n),=: T䧺IB5S랝? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓj$WBFZd  iAO4Tec42 T8jUa@hӡT Qtnk(d({TW ӠMZt07tnk+QtHa)6YsN.%FZ1sARdu=8hiRdgj2NMS&]iIo6NnQ%ڽ:&pVOe)t({ -dOuPkNj%==:A\\c'B_7*=:"[ͥ:-=8Z-Ѓj$WBFZd  iAO4Tec42 T8njUa@pzǪwBMUф:75Ŕ2EҊ[=+iR@ { QF75ŕe2r0• }i;фX.h?W T,44\)P stO"2e֝A30LӢ(?FfU+Zq2Mq:RY=zt7ArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE$Jt[Bzqk[ͫӡ[Io6NXdLtnn[WFRуm*&`}Nw2 Q8=S*j%F)ѹ,z0yMED׼lO.AstnjUa4^ nn[.%FZRL$TM{&a d<0GFEQ6qcC űKkUta*1Nqe st/F)HMi:%5R.x`UЊl4ƇA Ӌc;&Tb"D^ShQ5<uK)j\DiņǪw-Uф:75Ŕ2E҈<"ky6 pS H:75WB*Ӌ / 77N-T Qtnk(dz0yMED׼lO.AstnjUa/ 77N-T [Z Qtnk(dz0yMED׼lO.AstnjUa/ 77N-T Qtnk(dz0yMED׼lO.AstnjUa4^ nn[WFP7J"`Dy6S2]LU"]&N,8h@$8=S*j%F)ѹ,.nE6^ɰm>XdE ѹTMXpx@$8=S)mj%F)ѹ,.nE6^ɰm>XdE ѹTMXpx@$8=S*j%F)ѹ,.nE6^ɰm>XdE ѹTMX(h@$8=S)mj%F)ѹ,.nE6^ɰm>XdE ѹTMX(h@$8=S*j%F)ѹ,.nE6^ɰm>XdE ѹTMX(<^ nn[WFP7J"`Dy6S2]LU"]&N,/ 77N-T Qtnk(dz0yMED׼lO.AstnjUa / 77N-T [Z Qtnk(dz0yMED׼lO.AstnjUa / 77N-T Qtnk(dz0yMED׼lO.AstnjUa Ǫw-Uф:75Ŕ2E҈<"ky6 pS H:75WB*ӋA Ӌc;&Tb"D^ShQ5<uK*+(Ltnn[WFP<"kpg4484ѠX_@h(xpW4XdE ѹTMXxH!qlzp0kSs\YJ}2r0^ShQ5<uK)j\DiōǪw-Uф:75Ŕ2E҈<"ky6 pS H:75WB*Ӌ/ 77N-T Qtnk(dz0yMED׼lO.AstnjUa4^ nn[WFP7J"`Dy6S2]LU"]&N,4h@$8=S*j%F)ѹ,.nE6^ɰm>XdE ѹTMXhx@$8=S)mj%F)ѹ,.nE6^ɰm>XdE ѹTMXhx@$8=S*j%F)ѹ,.nE6^ɰm>XdE ѹTMXpxH!qlzpR]JSs\YC$\(уm*&`}Nw2 T#sUt" 8CstNI0F渲HQ$TM{&a d<0GFEQ6qaCstNॵ0F渲HQ$TM{&a d<0GFEQ6qaCstNI0F渲HQ$TM{&a d<0GFEQ6q`CstNॵ0F渲HQ$TM{&a d<0GFEQ6q`CstNI0F渲HQ$TM{&a d<0GFEQ6q`xH!qlzpR]JSs\YC$\(уm*&`}Nw2 T#sUt" 8Px@$8=S*j%F)ѹ,.nE6^ɰm>XdE ѹTMX,h@$8=S)mj%F)ѹ,.nE6^ɰm>XdE ѹTMX,h@$8=S*j%F)ѹ,.nE6^ɰm>XdE ѹTMX,<^ nn[WFP7J"`Dy6S2]LU"]&N,/ 77N-T Qtnk(dz0yMED׼lO.ਮ-3 ѹqlzpR]JSs\YB`Dy`  P,4 ᠯ7`,ǛsU]ۮc'pcQDFr0Q6*Ǜs ; Fә)L@^ILӄ x49]ޝe`DFr0%6F \NǺ3lªʱΉLy:0YS1̫胏2R4=kN ?̙u@( hs:-.*a0KmΌV1wnuFg9FمUcntaVpcQLG8!(њs%)#K;@ 6ɗZpD@?ӬL蒨FcvTfsmUYV9)6Fk*w=cNǸ>C%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.11n ֜8h6t@X(0sSmΌ*T {3*:%1ptV?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮc'pcQ8h, ?0a@h fVUtJc͹хZʝuFeXD=S=Qt`8!(њs%)#K;@ 6Yd˭8:-.*a0KmΌV1wnuFgpVh,84F͆~lªʱΉLy:0YS1̫Ǫw Ǻ;̘8!(њs%)#K;@ 6Yd˭8:-.*a0KmΌV1wnuFgpVࡠ@04F͆89FمUcntaVpcQV9)T,AuFw9?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮc'pcQ8h(44F͆8;AQaUeXD<۝UTfUtJc;=Qt`8!(њs%)#K;@ 6Yd˭8:-.*a0KmΌV1wnuFgpVX,4F͆AAh96*Ǜs ;ʱΉLzpǺ;̘8!(њs%)#K;@ 6Yd˭8:-.*a0KmΌV1wnuFgpVCG6l4@?AQaUeXD<۝UTfUtJc;=X8!(њs%)#K;@ 6Yd˭8:-.*a0KmΌV1wnuFgpVhyi :AX(0sSmΌ*T {3*:%1L{3S% ?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮc'pcQ8(<a`#fN` ?Ar *:%1­eNǺ2sSǺ5F%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.11n ֜FٰӠ<  zr *:%1­eNǺ2sSAq5o%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.11n ֜< ?0a@X9FمUcntaVpcQV9)T {3k%F%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.11n ֜8 ?0a@x7h96*Ǜs ;ʱΉS)uFj6n}2R4=kN4id˭8:-.*a0KmΌV1wnuFgpV8x ?0a@,8 ?#AQaUeXD<۝UTfS% STfJ#@`?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮc'pcQ8( ?0a@x0 fVUtJc͹хZʝuFe2Q1uFjd= A Fә)L@^I&]iYo& tITg# Xnt`ʱud {3?ۂ8,4F͆P(h39F8hgCCAa AXhA_oX/ <۝2bs;- 8 *:%1­eNǺ3(0sSmΌ*T {3*:'QaUeXD<۝UTfS% qfVUtJc͹хZʝuFeXD=S10lªʱΉLy:0YS1̫Ǫw=7=uYmUYV9)6Fk*w=cNTg EӑQaUeXD<۝UTfUtJc; cQfL 6*Ǜs ;ʱΉLzpb {3ȳ(0sSmΌ*T {3*:%1`k(r0 6*Ǜs ;ʱΉLzpǺ;̙mUYV9)6Fk*w=cN05uFw9qfVUtJc͹хZʝuFeXD=S)uFjd=0lªʱΉLy:0YS1̫Ǫw1B&ф0lªʱΉLy:0YS1̫Ǫw=\M[0lªʱΉLy:0YS1̫Ǫw= aFمUcntaVpcQV9*w1Bfϳ(0sSmΌ*T {3))T {3S% 0N8 *:%1­eNǺ2(qNǺ52Q_44A  P,4 ᠯ7`,6F \NǺ1(fVUtJc͹хZʝuFxr {!EfVUtJc͹хZʝuFeXG(0sSmΌ*T {3)ApP(oC@pѠ P,4ᠯ7`,mΌV1wnuFc'pcQWLdGH007 ]YFمXD<۝U*w=9w@.0N " ᡥᠠp(qXDI@ +^6r-'ы7,>DgHFCA}`+(0Ǜs :eNǺ;Z. WV9jF9o3td@XWV8xD@!c:2+fۣWxtj&F378A#;0788Bx *20/c:nM'i\(38>ViW3qvai fbBQtHqh,,Hɵ 5S@I jD2mXXXXj+X<B&h 8")du ?TgX-74du P?P2wXL4⮌$Vu<,,K 9@O 5S@Ip] "({2Bd@@D$ 8vY={$&Dq@L 쵲.+!PcQʈ?8ਮ-07N=S)mjTfF渲МǪw-SR.nTǪw=Ǻ5]>9]+*+iFtg2507cQD{bGqh8Y2.d˭:ArS'@[ NJcv@ (,)epаB B dLz<5Sݸy5+ У%pJ@5COjV G\bLӡ?W T,D {3bpB*zppB)ӆuFv\Y]ONY9pȵLuC&.Yj$WB m^?FfU+Zq2Mq:RY=ztMdOuPkNj%==: 6*Ǜs 6n{겘ɵ€@/ $ T䧺s=: 1YWOONh?yjS@ph$=#O-P |D {3b5R.`೅TM8[CL{3Ss\YC$\(muCOjVEfS@´+2sw:̍l{3,ucFZ• }i;cq\)P 44q\)P stÅȵLuCp&.Qn ֜i̡\e7NeppA\ 6ArSsӠlªʱΉLy:0YS1̫Ǫw1B&ф8[ NJ{j.W1ӡkAk]>=: diNhON4muKyzt kp-ЃY9tA8YyjS:'pcQc42 T8jUa@(jǪw-SP7J(?]lPSڨEфqh?W Ӡ'Fs++*ACӢw=1sARdu=8hiRdEd˭:fa5LuDQ%ڽ:MDjA30ZӍ?"k̡Ӡ2A\ 6 ArSsӠlªʱΉLy:0YV9)}I̧h? NJ{j.W1ӡtdAT,:A 9g(PB (PB (PB (PB (PB (PB (PB (PBpS HEQ6t A:NǺ;ZTf'#ءQ\+N+iFtfݏuF}Yݒ4ҎL&pB({ZtNǺ;X.h?W T, • 7N ?TɗZt MS&]i43 8ep?"k)dOuPkNj%==(Gj%=5+ Ѓʺ}2ztE$Jt[Bzqk[ͫӡ#O-P st diAO4uFv\s(PB (PB (PB (PB (PB (PB (PB (PB+d'= tnk+X!*03*i(PB (PB (PB (PB (PB (PB (PB (PBpS iㅹt1PTǺ5:75ŔȹQSC 5L{3Ss\YC$\(dWjJ}2ztE Ztkׂ07cQ EKs9cs\YXW#Le`0Z• }i;cq\)P 44q\)P stӅ TiQaUeXD<۝UTfUtJc;TfJ#C tANIB@zt lU9)HAFمUcntaVpcQV9)T cQM (8[ NJk%F(\ǸON[Ҋ.+*8Ӆ[ͥ[p4 7NH,Y>LӢw=1sApS HEQ6t A:NIcQ"Ek{U´Ye\(AV1st ARd=ϭ:'pcQc4+*AWSӆ+*ANn.Q2e֝A30ZӍ?"k̡Ӡ1h? NJ{jZt U9)Ѓ T䧺s=:WOONh?%SӍ?]em^?&Kyzt iANnRFZd3NTgk=LU"?Di5stc;&uFjtnk(d({TW ӡkAV07cQD{bGkNFARd=ϭ:'pcQc4+*AWSӆ+*ANn4iZLӡj2N3 8B&n),=: T䧺IB5S랝? NJ{j.W1ӡtdA-ҝОi-DjA5[ͫӡ#O-P st AT,&i;c)j\sUt" :C7N=S*jTfF渲HQAbEp: 1Y@ wF渲%DiJP>uFv\Y]ONY9pYZLӢ(?FfTɗZtEk[ͫӡ[Io6N3 8B&n),=: ArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE#O-P st 4 ɚtNǺ;X.h9 d0q]&N?C 5L{3Ss\YC$\(uCOjVX#R%F \+NA`r%Fa)6E+*ACӢw=1sARdu=8hiRd"2e֝A30LӢh?]em^?&Kyzt MViƟ5StH?fP 4j%=5BM:A\(0sSmΌ(ٹc&W Y(05S뚋{,AfAk]>=: iANn9/F)HMi:%5R.x`UЊl4ƇA Ӌc;֩uFjtnk(dz0yMED׼lO.AstnjUa4<^ nn[ 5L{3Ss\YC$\(уm*&`}Nw2 T#sUt" 8ѢCstNॵcQ"D^ShQ5<uK)j\DiņǪwBMSP7J"`Dy6S2]LU"]&N,4<^ nn[L{3Ss\YC$\(уm*&`}Nw2 T#sUt" 8xH!qlzpT$1Nqe st/F)HMi:%5R.x`UЊl4ÆA Ӌc;֩uFjtnk(dz0yMED׼lO.AstnjUa4^ nn[ 5L{3Ss\YC$\(уm*&`}Nw2 T#sUt" 8xH!qlzpR1Nqe st/F)HMi:%5R.x`UЊl4à űPTǺ5:75Ŕ2E҈<"ky6 pS H:75WB*Ӌ Ǫw-SP7J"`Dy6S2]LU"]&N,4^ nn[ 5L{3Ss\YC$\(уm*&`}Nw2 T#sUt" 8Px@$8=S)mjTfF渲HQ$TM{&a d<0GFEQ6q`xH!qlzpT$1Nqe st/F)HMi:%5R.x`UЊl4cE űKkTǺ5:75Ŕ2E҈<"ky6 pS H:75WB*ӋǪwBMSP7J"`Dy6S2]Q\)DZf#stNॵcQ$TM{44 _AAP P,4ᠯ7hx <۝2bs;NǺ;Zc&mhQ6S2]LTEa:77N-T [Z=ѹ,2 $TM{&a d-3 ѹqlzpT$1Nqe уm*&`}Nw2 T#sUt" 8CstNǺ;ZTf'#6^ɰm>XdE ѹTMXxH!qlzpR1Nqe st/F)HMi:%5R.x`UЊl4ƇA Ӌc;&uFjtnk(dz0yMED׼lO.AstnjUa4^ nn[L{3Ss\YC$\(уm*&`}Nw2 T#sUt" 8ѢCstNIcQ"D^ShQ5<uK)j\DiņA Ӌc;֩uFjtnk(dz0yMED׼lO.AstnjUa/ 77N-T =ѹ,.nE6^ɰm>XdE ѹTMXpxH!qlzpR1Nqe st/F)HMi:%5R.x`UЊl4ÆA Ӌc;&uFjtnk(dz0yMED׼lO.AstnjUa/ 77N-T [Z=ѹ,.nE6^ɰm>XdE ѹTMXpx@$8=S*jTfF渲HQ$TM{&a d<0GFEQ6q`CstNॵcQ"D^ShQ5<uK)j\DiłA Ӌc;&uFjtnk(dz0yMED׼lO.AstnjUa Ǫw-SP7J"`Dy6S2]LU"]&N,/ 77N-T =ѹ,.nE6^ɰm>XdE ѹTMX,h@$8=S)mjTfF渲HQ$TM{&a d<0GFEQ6q`CstNIcQ"D^ShQ5<uK*+(Ltnn[L{3Ss\YB`Dy@8p/  pg@h(pW0 @c͹у*.1-tF:$3r *:%1­eN%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bs;D(0sSmΌ*T ls?J4fJgHNP?M84<<2e֜ $xz,$3,y:0eXݺ2wQaUeXD<۝U:%2QFi̔ d/Odu$ӃC&]i< AǮNy0KJ9LǛsU]ۮc'p[`fVUtJc͹хZʝmUtJc;D>C%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1-tOi@hyi :CCAG smUYV9)6Fk*wV9)T l 麬h9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \N?ۂ844F͆smUYV9)6Fk*wV9)T [`詒%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1-tOiA`(4F͆  96*Ǜs ;DǪw-tT"mLh9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \N?ۂpai :@pfVUtJc͹хZʝmUtJc;F# Fә)L@^I&]iYo& tITg# Xnt`ʱud l+Zp`hii :C+AQaUeXD<۝U:%XD=S-tnk2`Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ2w8hFٰӠ< r *:%1­eN*:%1ms`Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ2w8pFٰӠ +AQaUeXD<۝U:%XD=S)mռh9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \N?ۂai :Ƈr *:%1­eN*:%1m[$J&?J4fJgHNP?M8x,2N@(ǮNy0KJ9LǛsU]ۮc'p[`ZӇ6l4 _+AQaUeXD<۝U:%XD(Lٹ?J4fJgHNP?M8xѧ.XD z,$3,y:0eXݺ2w8FٰӠ (0sSmΌ*T l(qNS% 0N%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1-tOiA6t/AQaUeXD<۝U:%2Q1mJ#@`h9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \N?ۂ4F͆h p4Aa_A@`,P4 4 #nt`ʱud lxQmUYV9)6Fk*wmUYV9)6Fk*wV98 *:%1­eN)8 *:%1­eN*:%1m!}aFمUcntaVp[`cN0lªʱΉLy:0YS-tJΉLzpRELGmUYV9)6Fk*wV9)T [`D0mUYV9)6Fk*wV9)T lJ.8 *:%1­eN*:%1msY8 *:%1­eN*:%1msgQaUeXD<۝U:%XD=S)mռ 6*Ǜs ;DǪw]l*0mUYV9)6Fk*wV9*w-6n}aFمUcntaVp[`D{Ǫw(qpymUYV9)6Fk*wLGLzp[`詒'm847A@3@/Ah4 |8h+  c͹у*.1-tF[r *:%1­eNsmS8.W(0sSmΌ*T lsg(0sSmΌ*T l(q p  ѠC@ P,4ᠯ7`,c͹у*.1-tFNѵ錓`(@ <4(@0"P +.׮:͜{*4bM2Oq^Ȳf8 8b  0&3C1*Tчq^ xI@p@ aV`j<4(@0"P 3.׮:͜{*4bM2Oy`+Q_f0X(6*:%1®S-tmj4`nq^qXTn2Eѓ'~`nq^qX@ȮnVn]jEѫX8hh@T 2D£<ndgxf7@1stⶺYVe\s'M`LCMi&Qd'L`ng@X8` A3873 0 ` c(PB (PB (PB (PB (PB (PB (Q`L GeFtgpYv (PB (PB (PB (PB (PB (PB s8{QK  5S@IfP`=8@& :3]d 2mEpx2Mqq@*3V$dڊVP2N*Nea;zS0XDޱ~ \e4PJ" q X (2O*$&D@@ `EC'BdAAtvTgFf`tfe)$6ʌ̵݉HƅZĤcA2MqQpS iㅹt1KkTSs\YH8\9t1KkTSs\YC$\(dWjJ}2ztE Zt5@&l@s渲>Fa4.+*ACӢwc4.+*AWSӆ.+*ANn8lU9*tmUYV9)6Fk*wV9)T [`詒A`8]  6AN-j%54(0sSmΌ*T lsSPa4-j%5\c'@dPppVNIo6n ֜iT,:A!8YyjS:'p[`1sAT,.N,=:"Y9tAh?yjS:'p[`1sApS HEQ6tn zpR-tTP7J(?]lPSڨDԉQ?W ӠX#\QJM`%JP>mkJUᡧJS?TɗZt=j2NuKyzt p-Ѓfa5[(DMӠ C'@dA\ 6ArSsӠlªʱΉLy:0fn)Q\(d H? NJ{j.W1ӠMtd&Y9tC4 ɚtNѵb惞AsUЊl4t1KkTSs\YC$\(uCOjVFs)Š\+NI̬"`bSYsN:6\Y]ONY9Aj2NMS&]i4Io6NnQ%ڽ:&pVOe)t({ j%=5BM:PA\(0sSmΌ*UtJcwFs)5S뚋{Ak]>=:4 7NH1#O-P |D lX.h9 d0q]&NӡT [Z"Ek{U´AV*`ā`$8< J• }i;F1• CO• 7N ?TɗZtEj2NuKyzt p-Ѓfa5[(DMӡ,=:" T䧺IB5S랝? NJ{j.W1ӡtd&Y9tA?yjS:'p[`1sApS HEQ6tn zpR-tTP7J(?]lPSڨBnAV :36ARd=ϭ:'p[`1sARdu=8hiRdsȵLuDP&.Yj$WB m^?FfU+Zq2Mq:RY=zt T䧺B5S뚋{Ak]>=: iANnXrFZd3N:6\s(PB (PB (PB (PB (PB (PB (PB (PB+d'= tvTgFcfHJ ʹc( (PB (PB (PB (PB (PB (PB (PB (P5DZ`8nn zpT$-tTR"ENn zpT$-tTP7J(8YڢRLAVlL :88 -Xqe`}\1$ih8\W T,D lX.h8\W T, 8\W T,8,4lU9*tmUYV9)6Fk*wV9)T [`詒 :p*miЃ#+8[ NJk%FiQaUeXD<۝U:%XD=S)mhx`5SdQ.W1ӡe1st5 JkN4diViƜ,LӢwc42 T8jUa@hzǪwBMRENqe stu=ZtM`Hp:5ȕPYsN:6\Y]ONY9pȵLuC&.Yj$WB m^?FfU+Zq2Mq:RY=ztMdOuPkNj%==: 6*Ǜs 6n{겘ɵ€@/ $ T䧺s=: 1YWOONh?yjS@ph$=#O-P |D lX.h9 d0q]&N?C 5Kl:75Ŕ2EҊ[=+ita'2Z´ ф v,u=JP>mkJUᡧJSEd˭:fa5LuDQ%ڽ:MDjA30ZӍ?"k̡Ӡ2A\ 6 ArSsӠlªʱΉLy:0YV9)}I̧h? NJ{j.W1ӡtd&Y9tA?yjS:'p[`1sApS HEQ6tn zpT$-tTP7J(?]lPSڨAfP \+NN D@@PepTHLā%JP>mkJUᡧJSEd˭:"fa5LuDQ%ڽ:MDjA30ZӍ?"kЃepArSsT$ӡdOuNj%=5+ Ѓʺ}2ztAT,:A XdE ѹTMXhx@$8=S)mj:*tnk(dz0yMED׼lO.AstnjUa/ 77N-T "D^ShQ5<uK)j\DiŇ Ǫw-RENqe st/F)HMi:%5R.x`UЊl4ÆA Ӌc;&mF渲HQ$TM{&a d<0GFEQ6qaCstNॵ[`ѹ,.nE6^ɰm>XdE ѹTMXpx@$8=S*j:*tnk(dz0yMED׼lO.AstnjUa / 77N-T [Z"D^ShQ5<uK)j\DiłA Ӌc;&mF渲HQ$TM{ hx,4<44P4 4 }6F \N;F֫0ɰ[Zy6 pS i`Ӌc;֩mF渲6^ɰm>XdLtnn[ 5Kl:75Ŕ/F)HMi:%5R.x`UЊl4ƇA Ӌc;֩mF渲HQ$TM{&a d<0GFEQ6qcC űPTSs\YC$\(уm*&`}Nw2 T#sUt" 8ѢCstNॵ[`ѹ,.nE6^ɰm>XdE ѹTMXhxH!qlzpT$-tTP7J"`Dy6S2]LU"]&N,4<^ nn[Kl:75Ŕ2E҈<"ky6 pS H:75WB*Ӌ ǪwBMRENqe st/F)HMi:%5R.x`UЊl4ÆA Ӌc;֩mF渲HQ$TM{&a d<0GFEQ6qaE űPTSs\YC$\(уm*&`}Nw2 T#sUt" 8xH!qlzpR-tTP7J"`Dy6S2]LU"]&N,8<^ nn[ 5Kl:75Ŕ2E҈<"ky6 pS H:75WB*Ӌ Ǫw-RENqe st/F)HMi:%5R.x`UЊl4CE űPTSs\YC$\(уm*&ƇCa AXh7Æ_ <۝2bsDFr0Q6*Ǜs 8!(њs%)#K;@ 6ɗZpD@?ӬL蒨Fcvr *:%1­e66UtA Fә)L@^ILӄ x49]ޝe`DFr0%6F \66smUYV9)6Fk)Fi̔ d/Odu$ӃC&]i< AǮNy0KJ9LǛsU]ۮc96*Ǜs LG8!(њs%)#K;@ 6ɗZpD@?ӬL蒨Fcvr *:%1­e66UtJcڝd Fә)L@^Ig.XD z,$3,y:0eXݺ1+ZpP4hx(4F͆A`tfVUtJc͹хZllǩ\d Fә)L@^Ig.XD z,$3,y:0eXݺ1+ZpPx ?0a@h(/AQaUeXD<۝UʱΉLzUE2R4=kN &]iYo& tITg# Xnt`ʱuccgpVhii :F9FمUcntaV*:%1lmB&ф Fә)L@^Ig.XD z,$3,y:0eXݺ1+ZpPa`#fN`Xw smUYV9)6Fk)sSB,,s Fә)L@^Ig.XD z,$3,y:0eXݺ1+Zp6t7AQaUeXD<۝Ud= cڠ'2R4=kN &]iYo& tITg# Xnt`ʱuccgpV@x,4F͆8 9FمUcntaV))ScjjަJ#@`h9 ΠZpX,2N@(ǮNy0KJ9LǛsU]ۮc?ۂ@yi :7AQaUeXD<۝UʱΉMLٹ?J4fJgHNP?M8xѧ.XD z,$3,y:0eXݺ1+Zp`xii :a8#908w@h( ᠯ7`,6F \661oQmUYV9)6Fk)(0sSmΌ*SceXD 6*Ǜs Op(0sSmΌ*Sce2QQaUeXD<۝UʱΉLzS\mUYV9)6Fk)sSsY8 *:%1­e66UtJcڮr, 6*Ǜs V9)Scj6&qfVUtJc͹хZllǩ2PK1(0sSmΌ*Sce2Q1lmP\M[D{ 0lªʱΉLy:0YMD{ǩAq5oS% 0NqfVUtJc͹хZllڄ͛g4<4< `( @4 gcv[mUYV9)6Fk)9Fم=Ê̢xr *:%1­e66UtpX,fVUtJc͹хZllvlªʱΉLy:0YMD{`` A`h4  P,4ᠯ7`,c͹у*.1ln֫2M 0JI@ 8^6r-'ы7,>DQx"ɘg$ L`8hh 3#;̫ SFQx%x h P(qXDI@ +^6r-'ы7,>DgHFCA}`+(0Ǜs :e67kPas2t \-`q.>C sN , ++@hp<" 1Ҋ߀mѫ [5x#   V {}]JWV!<HTgMїs1̝7@ &.nyV[+4̫dx b; 431l$ , XⰈ T4 1@PH @@g00c|@0``  {E5WB*Ӡ4jǩZ 5Ɍstu=Zt,.nT\+N{QK \)P ֝ 1• • 7N ?TɗZtEj2NMViƟ5StH?fP !U9)miЃ T䧺B5S뚋{Ak]>=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stCP4 ɚt67k#O-P :4 Ґ#B{E5WB*Ӡ8jǩZ 5Ɍstu=Zt \+N+*ACӡJUO• 7N4-S&]iЃfa5LuBQn ֜i̡\e7N({ArSsT$ӡdOuNj%=5+ Ѓʺ}2zt iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:4 ɚt iACuBFZd:RtApS HEQ6tn zUP\<7J(?]lPSڨAf: 0´x C IpB({Zt67kJUJS?TɗZt=j2NMViƟ5StH?fP -dOuPkNj%==:rSs'B(0sSmΌ(ٹcO6'MB2iƅ"?"? NJ{h? NJ{j.W1ӡtdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6Nln1• • 7N ?TɗZt=j2NMViƟ5StH?fP dOuPkNj%==: 6*Ǜs 6n{겘Yl1j%=5+ !td&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stC4 ɚt67k#O-P :4 Ґ#B{E5WB*Ӡt1lmVBMpc$\(uCOjVHEZtbR0K \)P ֝ y:0c4+*AWSӆ+*ANnEd˭:fa5LuDP&pVOe)tA2ON T䧺IB5S랝fVUtJc͹х7=uYL{"X`MC6xcEPA\\c'B_7*Ѓ[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stAc͹у\)P +*ANn44.A30LӢh?FfU+ZpB&nP̡Ӡ0A\ 6ArSsӡdOuE=zt 5rLA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9tCP4 ɚt1yciACuBFZd:RtApS it1lmVBMph?9t1lmVBMpc$\(WjJ}2ztEZtkׄA<@si#KARd=ϭ:bpB*zppB)Ӈj%P3N *:%1­e66UtJcڝdn:*miЃ#+? NJk%FiQaUeXD<۝UʱΉLzPa<0GArS]l*1E=zt,.nT\)ViƟm*8Y9tA!?yjS:bY]֝?yjPHӡ=LTEǩZԶLP7J*stcڭj[ZA$\(WjJ}2ztEZt5H'Cy<@}`}\1$ih?W T,Ccv\Y]ON+*ANn4U9*tmUYV9)6Fk)sS#'/A`?  6ANj%54(0sSmΌ*SceXD=MD0A[$JQrp&ՠ\)ViƟm*8Y9tA!?yjS:bY]֝?yjPHӡ=LU"?Di5stcڭj[ZA$\(uCOjV ,Ep+i Yos7J8Ip+*ACӡX.h?W T,?W T,8,-S&]i3 d˭:&fa5[(DMӠ C'@` T䧺IB5S랝? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stCP4 ɚt67k#O-P :4 Ґ#B{E5WB*Ӡ8jǩZԶLFHQAbEp:B• }iЃpB*zqJS.A30LӡjkN4P2BY=zt U9)miЃ T䧺B5S뚋{Ak]>=:KyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANn?yjS:4 ˺ӡ#O-P ):t )j\sUt" :CP7N=M֥d2EҊ[=+iY&p:3GY;CQtHa)6YsNc\)P <\)P stj2NMS&]i43 8B&n),=:%U9)miЃ T䧺C NJ{` PfVUtJc͹х7=uYLy)&фɴPT28ФBBdOudOuE=zt 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnHrFZd3NciACuBFZd:RtApS HEQ6tƠn zUKkT4d({TW ӢkjD+i,0@"J• }iݬc4+*AWSӇ+*ANn.zQ2e֝A30ZӍ?"k̡Ӡ2:5S뚡&֝? NJ{ztmUYV9)6FlMe1j+ U9)\ǸONnUӠIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6NA-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnHzFZd3NciACuBFZd:RtApS HEQ6t7N=M֥d2EҊ[=+iЃp:U1)%YsN<۝1• O• 7N "2e֝A30LӢ(?FfU+Zq2Mq:C'@`KArSsT$ӡdOuN *:%1麬=,0&!<1? NJ{j.W1ӡtdA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9t RFZd3N<۝/,c4c͹у\)P +*ANn44.A30LӢh?FfU+ZpB&nP̡Ӡ0A\ 6ArSsӡdOuE=zt 5rLA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9tCP4 ɚt1yciACuBFZd:RtA0`o44<hx `( @ #nt`ʱuccc錓`xQ6S2]LTEa:77N-Scjmjуm*&`}Nw2 Q8=M֨IL^ShQ5<uK)j\DiņǩZԶLFHQ$TM{&a d<0GFEQ6qaE űlmVBMpc$\(уm*&`}Nw2 T#sUt" 8Cst66Z֩h7J"`Dy6S2]LU"]&N,8h@$8=M֨ILdz0yMED׼lO.AstnjUa / 77N-Scjmjst/F)HMi:%5R.x`UЊl4CE űlmVBMpc$\(уm*&`}Nw2 T#sUt" 8XxH!qlzUKkT4dz0yMED׼lO.AstnjUa / 77N-Scjk"D^ShQ5<uK)j\DiŇǩZԶLFHQ$TM{&a d<0GFEQ6qaE űlmVBMpc$\(уm*&`}Nw2 T#sUt" 8`xH!qlzUKkT4dz0yMED׼lO.AstnjUa / 77N-Scjk"D^ShQ5<uK)j\DiŃ űlmV-S ђ.nE6^ɰm>XdE ѹTMX0<^ nn[kT$&2E҈<"ky6 pS H:75WB*ӋǩZԶLFHQ$TM{&a d<0GFEQ6q`ѢCst66Z&y1.nE6^` Ah4  AXhA_oy:0eXݺ1pt6 k@0&a d-3 ѹqlzUKkT4^ShQ5<uK)j0GFűlmVBMpb`Dy6S2]LU"]&N,4h@$8=M֥d2E҈<"ky6 pS H:75WB*Ӌ / 77N-Scjk"D^ShQ5<uK)j\DiŇ ǩZԶLFHQ$TM{&a d<0GFEQ6qaE űlmVBMpc$\(уm*&`}Nw2 T#sUt" 8PxH!qlzUKkT4dz0yMED׼lO.AstnjUa / 77N-Scjk"D^ShQ5<uK)j\DiłƋA Ӌcڭj[ZA$\(уm*&`}Nw2 T#sUt" 8XxH!qlzUP\<7J"`Dy6S2]LU"]&N,XdE ѹTMX4h@$8=M֥d2E҈<"ky6 pS H:75WB*ӋǩZ 5Ɍst/F)H` ?4  4 A@ 7Æ_ =6F \c0J蒨F 9FمUcntaV1јN%F2R4=kN ?̙u@( hs:-.*a0KmΌV1wn,Fa:0smUYV9)6Fk(TaV9%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bsYta*0(0sSmΌ*Qf:3 фžFi̔ d/Odu$ӃC&]i< AǮNy0KJ9LǛsU]ۮc 1јN%FfVUtJc͹хZ,Fa:0S% ?J4fJgHNP?M84<<2e֜ $xz,$3,y:0eXݺ0TaQaUeXD<۝Utf QXD=EWF#&?J4fJgHNP?M84 ?̙u `cwYe%%Q& c͹у*.1'FiÀq6tA87<;AQaUeXD<۝Utf QXD=EWF\بJ.%3Nd3$iz{'s&֜ LӁa0 ?ӬL蒨Fcvtf QpV8xa`#fNP0<<;4fVUtJc͹хZ,Fa:0UtJcYta*1EJ-Ƀ2R4=kN &]iYo& tITg# Xnt`ʱuaf:3 ф+ZpX0884F͆?AQaUeXD<۝Utf QXD=EWF\ث%3Nd3$iz{'s&֜ LӁa0 ?ӬL蒨Fcvtf QpVQi :ÃAG smUYV9)6Fk(TaV9)Qf:3UфF%3Nd3$iz{'s&֜ LӁa0 ?ӬL蒨Fcvtf QpVѡ6l4p_ smUYV9)6Fk(TaV9)Qf:3UфY;@(r0h9 ΠZph,2N@(ǮNy0KJ9LǛsU]ۮc 1јN%FZӁ a`#fNoh9FمUcntaV1јN%Fcc5]JU *&?J4fJgHNP?M84 ?̙u `cwYe%%Q& c͹у*.1'Fi@84ii :C@q/AQaUeXD<۝Utf QXD=EWFduJȰqBQ4JS?2Fw:miYd˭8:-.*a0KmΌV1wn,Fa:0kN FٰӠh,?AQaUeXD<۝Utf QXD=EWFB,,s Fә)L@^Ig.XD z,$3,y:0eXݺ0Ta8hh44F͆8x096*Ǜs Yta*0ǨTb%3Nd3$iz{'s&֜ LӁa0 ?ӬL蒨Fcvtf QpV@(?0a@0lªʱΉLy:0YE'F {%Fc0J2R4=kN &]iYo& tITg# Xnt`ʱuaf:3 ф+Zpa`#fNX4 @pP`A8x/Ah4 |8h+  c͹у*.1'F- 8 *:%1­ec0J8 *:%1­ec0J*:'QaUeXD<۝Utf Q=Î0lªʱΉLy:0YE'F d=0lªʱΉLy:0YE'F ΉLz1њ%F).FL 6*Ǜs Yta*0ǨTb[ EӑQaUeXD<۝Utf QXD=EWF\ث̙mUYV9)6Fk(TaV9)Qf:3Uф!*0*"0lªʱΉLy:0YE'F ΉLz1њ%F(D0mUYV9)6Fk(TaV9)Qf:3UфY;@(r0 6*Ǜs Yta*0ǨTbΠIW53(0sSmΌ*Qf:3 ф¬sStf Qw:%\YmUYV9)6Fk(TaV9)Qf:3Uф2PK1(0sSmΌ*Qf:3 ф¬sStf QjަJ#@ 6*Ǜs Yta*0Yta*1Bfϳ(0sSmΌ*Qf:3 ф™(qc5]JTV2Q(0sSmΌ*Qf:3 ф™(qc5]JTV2QQaUeXD<۝Utf Q=Ê{ 1јN%FZ\h @p P,4 ᠯ7`,~ǛsU]ۮc 1јN%F hG(0sSmΌ*Qf:3 ф9Fم=Ê̢xr *:%1­ec0J*:8p48fVUtJc͹хZ,Fa:0S; 9FمUcntaV1јN%FD{`` Cƍ pPw@pP` P,4ᠯ7`,=6F \c0JYta*2֫2MW P0(BJax E׺Y71oy=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stAh?yjS: 1њ%F*1FZd9wZt iAC GN2 T8jUa@0jǨTbjHQAbEp:.$RZ´ ф1=l+*ACӠTbc\)P Y9piZLӡ?FfTɗZtMjkN4P2@ A2ON? NJ{jZtU9)QaUeXD<۝Qs7UǨ%W0a.wU9)\ǸONņ? |ܫ'A4m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@4Y>LӠTbciACuBFZd:RtApS HEQ6t7N=EWFkT$&2EҊ[=+iP@J%#$R• }iǛs1sARdu=8iRd@@yZLӡ?FfTɗZtEjkN4P2@({ h? NJ{jZt U9)QaUeXD<۝Qs7UǾ%$;^g4X8^<5dOuE=zt 5rL?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7NX$ AT,&iǛsEbY]֝?yjPHӡ=LU"?Di t1,Fj0Z&y1.nPءQ\+NTY=j}EZtp] "({2Bd@@D$ (?W T,CmΌJU\)P stᡠȵLuBQ2e֝A30Zӆ5StY=zt5S뚡&֝? NJ{zt U9)\ǸONnUӢ(?%SӍ?]em^?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7NHxjFZd3N<۝/,c4,Fj0X.h?W T,+*ANn8U9*tmUYV9)6Fk(TaV9)Qf:3Uф:]:t 'LT$ӡ FW=:A[$JӠlªʱΉLy:0YE'F ΉLz1њ%F(D0#U9)Hs=:Yos7J*sPpVOIo6n ֜iT,:pHrFZd3Ntf QbY]֝?yjPHӡ=LTEǨTbj[ZA?9t1,Fj0Z֩h7J(?ڢRLAV n1ў6Y;C"x%c+HYsNtf QbpB*zpfY9p TiQaUeXD<۝Utf QXD=EWF#'/A`?  6ANj%54(0sSmΌ*Qf:3 ф¬sStf Q6'A[$JQrp&((f5JkN4iViƟ,Fj0X.h?W T,+*ANn<-S&]i3 d˭:&fa5[(DMӠ C'@dj%=5BM:A\dOu lªʱΉLy:0fn)%,Fj0X.h?W T,+*ANn.Q2e֝A30ZӍ?"k̡Ӡ0 A\ 6ArSsӡdOuE=zt 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnH-#O-P |Af:3UфZ1sAT,.N=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stiAO4c͹ъ"1sAT,.NXdE ѹTMX(h@$8=EWFkT$&2E҈<"ky6 pS H:75WB*ӋǨTbj[ZA$\(уm*&`}Nw2 T#sUt" 8XxH!qlz1њ%F*֨ILdz0yMED׼lO.AstnjUa4^ nn[tf Qmjst/F)HMi:%5R.x`UЊl4ƋA ӋcYta*1VBMpc$\(уm*&`}Nw2 T#sUt" 8`xH!qlz1њ%F*֥d2E҈<"ky6 pS H:75WB*Ӌ ǨTbjHQ$TM{&a d<0GFEQ6q`xH!qlz1њ%F*֥d2E҈<"ky6 pS H:75WB*ӋA ӋcYta*1VBMpc$\(уm*&`}Nw2 T#sUt" 8hxH!qlz1њ%F*֥d2E҈<"ky6 pS H:75WB*ӋǨTbjHQ$TM{0 Á_8X4h4 A@ ;Æxy:0eXݺ0T`tf Q\1MMi:%5DZf#stc5]JUKkT4^ShQ5<uK)j0GFű,Fj0Z&y1z0yMED׼lO.AstnjUa4^ nn[tf Qmjst/F)HMi:%5R.x`UЊl4FA ӋcYta*1VBMpc$\(уm*&`}Nw2 T#sUt" 8Cstc5]JUKkT4dz0yMED׼lO.AstnjUa4^ nn[tf Qk"D^ShQ5<uK)j\DiłA ӋcYta*1V-S ђ.nE6^ɰm>XdE ѹTMX(h@$8=EWFkT$&2E҈<"ky6 pS H:75WB*ӋǨTbj[ZA$\(уm*&`}Nw2 T#sUt" 8XxH!qlz1њ%F*֨ILdz0yMED׼lO.AstnjUa4^ nn[tf Qmjst/F)HMi:%5R.x`UЊl4ƋA ӋcYta*1VBMpc$\(уm*&`}Nw2 T#sUt" 8`xH!qlz1њ%F*֥d2E҈<"ky6 pS H:75WB*Ӌ ǨTbjHQ$TM{&a d<0GFEQ6q`xH!qlz1њ%F*֥d2E҈<"ky6 pS H:75WB*ӋA ӋcYta*1VBMpc$\(уm*&`}Nw2 T#sUt" 8hxH!qlz1њ%F*֥d2E҈<"ky6 pS H:75WB*ӋǨTbjHQ$TM{0@pW4 ƍ `( @ (y:0eXݺ1!*a0lªʱΉLy:0YM2R4=kN ?̙u@( hs:-.*a0KmΌV1wnl(0sSmΌ*SeFEXDh9 ΠZphxyd˭8@"@H @Yo& tITg# Xnt`ʱuceFG9FمUcntaV(:2)%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bsAёQaUeXD<۝UΉLz(:2TVqBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bsAё8(4?0a@x`h396*Ǜs AёV9)SeFJ0"Ta0qBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bsAё8pp ?0a@Xh(fVUtJc͹хZlȫǩ(J.%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1ZӇ O#Lli4<<4o smUYV9)6Fk)"sSk2`Fi̔ d/Odu$Ӈg.XD z,$3,y:0eXݺ1#+Zph,a`#fNP08 ôfVUtJc͹хZlȫǩ+%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1ZӆAG6l4?(0sSmΌ*SeFEXD=O͵6PtdJ#@h9 ΠZpX,2e֜ Q]ޝe`DFr0%6F \6PtdkN 6l4 À}9FمUcntaV(:2*:%1|m%F%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1ZӂFٰӠ4 9FمUcntaV(:2*:%1|mPtd!}2R4=kN LӁa0 ?ӬL蒨Fcvi@p 44F͆8hw(0sSmΌ*SeFEXD=OͶ&n{qBQ4JS?2Fw:mi`ɗZp,"G=wzu[ɂ]U`<۝2bsAё8hhh6tCtfVUtJc͹хZlȫAђ͛`Fi̔ d/Odu$Ӈ2N@(ǮNy0KJ9LǛsU]ۮc(:2?ۂ@9i :XtfVUtJc͹хZlȦJ#@=M]JS% 0N%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1ZӇA6l4Zr *:%1­e6PtdS% S%F)'m%3Nd3$iz{'s&֜< ?̙u `cwYe%%Q& c͹у*.1ZӇ 4F͆h(<`hA@ P,4 ᠯ7`,}6F \6Ptd1o 8 *:%1­e6PtdqfVUtJc͹хZlȫaFمUcntaV(:2)8 *:%1­e6PtdUtJcAђaFمUcntaV(:2*:%1lWF[$J&qfVUtJc͹хZlȫǩ(J.8 *:%1­e6PtdUtJcAѕfL 6*Ǜs AёV9)SeFW9qfVUtJc͹хZlȫǩ򙶦D{aFمUcntaV(:2*:%1|m%F8 *:%1­e6PtdUtJcLl>C8 *:%1­e6PtdUtJcLlfn8 *:%1­e6PtdUtJlBfϳ(0sSmΌ*SeFE2Q1lTb(qpymUYV9)6Fk)"(q6Pteta*1LG;i0_ƃ@8P4 4 #nt`ʱuceFC-Z 9FمUcntaV(:2smS8.W(0sSmΌ*SeFEXG  9FمUcntaV(:2)ÁgC8hx,8h4 `( @ ,?nt`ʱuceFC(:2錓`(@ P pсf0X(6*:%1®OͶjNElcv']Z҃rCpphp8qXDI@ +^6r-'ы7,>DgHFCA}`+(0Ǜs :e>S6(:2rсy`cQntc08FL!Dy`H @`F3"Q[m5waFdac0ᡣsq3 Ss$'# 2>f9{v[ҏ#3cfYs1̝7O1 @ a6Ff-ĝ28D# WV`j<4(  (PB (PB (PB (PB (PB (PG%FXN%Fw=wnPB (PB (PB (PB (PB (PB (PG8,$WEpx2MqY=}7tN(YsZntg6#02S6 Qj+X<B&h 82S6 QMqn{\e2r0ZD,Hɴ )SW52mJ|m` 0PBPteuLJLӡAѕc4S6(:2b惞AsUЊl4 t1lWFd({TW ӡZt2nc\mΌ&fJfAїta*1JP>|mPtekJUᡧJSEd˭:fa5LuDQ%ڽ:MDjA30ZӍ?"k̡Ӡ2(? NJ{jZt U9)QaUeXD<۝Qs7UM T䧺s=:WOONh?yjS@ph$Y>LӡAѕc42 T8jUa@hzǩ%]JRђ.nPءQ\+N+iJfAїta*2ɵ-ڹkNF\Ƞ\)P ֝Ͷc\)P 44\)P stj2NMS&]i4Io6NnQ%ڽ:&pVOe)t({ -dOuPkNj%==:A\\c'B_7*ЃY9tC4 ɚt>S6(:2b惞AsUЊl4t1lWFd({TW ӡZt%F[mΌTĪ̍mwF-JP>|mPtekJUᡧJS.zQ2e֝?]em^?&Kyzt MViƟ5StH?fP j%=5BM:A\DB&B5S뚋{Ak]>=:4 7NH1#O-P |C3m+X.h9(PB (PB (PB (PB (PB (PB (PB (PB 8 \<&뛢C%3ol˺0!*03*i(PB (PB (PB (PB (PB (PB (PB (PBpS it1lWF 5st7N=M*Tb&st]+*+iɮO^Jfa:0Cy<@}`}\1$ih?W T,C3m+X.h?W T, ?W T,8(4U9*tmUYV9)6Fk)"sSfڛ(:2S%!A]:t 'LT$ӡ FW=:A[$JӠlªʱΉLy:0YMc>S6AђM (? NJk%F(\ǸON[Ҋ+*8[ͥ[4 7NH(5#O-P |C3m+X.h9 d0q]&N?Cta*1PFHQAbEp:Yos7J*sP@e\(%YsNfeFV\Y]ONY9pQZLӢ(?FfTɗZtEjkN4P2@ A2ONŠU9)miЃ T䧺B5S뚋{Ak]>=:"[ͥ:-=8Z-Ѓj$WBFZd  iAO4|mPtek=LU"?Di5stcAђ%F*h7J(?]lPSڨCeFJVp:71Ůn 6Fqj3%3ol˺0pB({Zt>S6(:2bpB*zppB)ӂ"2e֝A30LӢh?]em^?&Kyzt MViƟ5StH?fP j%=5BM:A\(0sSmΌ(ٹc&W ArSsQrp? |ܫ'A4|mPtekJUᡧJS?TɗZtEj2NuKyzt p-Ѓfa5[(DMӠ C'@ah? NJ{jZt U9)Ѓ T䧺s=:WOONLӡAѕc42 T8jUa@pӡSeFJ0I$\(uCOjV )6F \+Nc͹јꘕTy.Te\)P ֝Ͷc\)P 44\)P st"2e֝A30Lӡk[ͫӡ[Io6N3 8B&n),=: T䧺IB5S랝2ˆR$ˆArSsQrp? |ܫ'BFZd  iAO4|mPtekA ƃC?@h(xpW4XdE ѹTMXxH!qlz(:2UфBM"D^ShQ5<uK)j\Diņǩ%]JRђ.nE6^ɰm>XdE ѹTMXhxH!qlz(:2UфBM"D^ShQ5<uK)j\DiņA ӋcAђ%F)mh7J"`Dy6S2]LU"]&N,4<^ nn[ta*1PFHQ$TM{&a d<0GFEQ6qaE űlWFdz0yMED׼lO.AstnjUa4^ nn[ta*1PFHQ$TM{4  4 A@ ;Æ,y:0eXݺ1!Zpt6 k@0&a d-3 ѹqlz(:2Uф-$TM{&a d-3 ѹqlz(:2UфBM$TM{&a d<0GFEQ6qcC űlWFdz0yMED׼lO.AstnjUa4<^ nn[ta*1PFHQ$TM{&a d<0GFEQ6qaE űlWFdz0yMED׼lO.AstnjUa4^ nn[ta*1PFHQ$TM{&a d<0GFEQ6qaCst6Ptd Q[Z2E҈<"ky6 pS H:75WB*Ӌ ǩ%]JT$ђ.nE6^ɰm>XdE ѹTMXpxH!qlz(:2Uф-"D^ShQ5<uK)j\DiŇ ǩ%]JT$ђ.nE6^󆂆AࡠhA P4 4 P+nt`ʱud&U`G(0sSmΌ*T&Fi̔ d/Odu$ӃC&]i< AǮNy0KJ9LǛsU]ۮc 696*Ǜs qV9%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bsqQaUeXD<۝U,Md= Fә)L@^ILӄ x49]ޝe`DFr0%6F \AbmsmUYV9)6Fk* hsS,Msa?J4fJgHNP?M8xѧ.XD z,$3,y:0eXݺ2 h+Zp a`#fNh0<;h96*Ǜs qV9)T&ʹɄX8!(њs%)#K;@ 6FLӁa0 ?ӬL蒨Fcv,Mi` <4F͆ho(0sSmΌ*T&XD=PXG*#,h9 ΠZpO&]iYo& tITg# Xnt`ʱud&pV FٰӠ47smUYV9)6Fk* hsS,M[$J%3Nd3$iz{'s&֜K%3Nd3$iz{'s&֜"T.Dh9 ΠZphxyd˭8:-.*a0KmΌV1wn8n ֜ g6l4#ATN:(a52Q ɉh9 ΠZp`,2N@(ǮNy0KJ9LǛsU]ۮc 6?ۂƇFٰӠ r\pеS8a7ph,C8 *:%1­eAbmUtJ 麬 6*Ǜs qV9)T&ʄ1,(0sSmΌ*T&XD,M&l8 *:%1­eAbmS% T&d= QaUeXD<۝U,Md= 9LG;imUYV9)6Fk* hsS2qhjcq(0sSmΌ*T&XD=De; EӑqfVUtJc͹хZʂ8&tVqfVUtJc͹хZʂ8Ǩs\Z8k2aqfVUtJc͹хZʂ8Ǩs\Z8k2f EӑQaUeXD<۝U,MΉLzw5ţ", 6*Ǜs qV9)QN渴q5BMpaQmUYV9)6Fk* hsS2qhj|BQtamUYV9)6Fk* h(q6QS% 0N8 *:%1­eAbmS% T&#jd= N0lªʱΉLy:0YDlIUӌ(0sSmΌ*QpUf4aFمUcntaVؓ1TqfVUtJc͹хZ#bN ƔD{aFمUcntaVؓ1XD 0lªʱΉLy:0YDlIUҬsS2qhjaF75ŔqfVUtJc͹хZ#bN ƕc\M, 6*Ǜs FĜY*:%1FY'60lªʱΉLy:0YDlIUҬsSآbJ#@ 6*Ǜs FĜY*:%>s!Jk(0sSmΌ*QpUf4UF,*qfVUtJc͹хZ#bN ƕcigQaUeXD<۝U6$iV9(tqfVUtJc͹хZ#bN ƕSaOcmΌ8 *:%1­e'VcJd= #bN Ʃ'aFمUcntaVؓ12Q'VcTD{ aR.e8t pZ8¤\pеS%'#, s)àSBYLcL & aR.e8t pZ)iPaATN:dde0ph,<, :`"qH)ák,J1NFY@ 2M 2o"qH)ák,J1NFY@ 2P FY*ȨN Ye2Q2r2L84h4, :`"qH)ák,J1NFY@ eFeSD s)àSBYLcL &  (%@dN02:8t-ePjd=ko"S@ tAa.GTN:{@L&  r8 pP,hxCAѿ AXhA_oX/6F \Abm2lªʱΉLy:0YPXG`96)Te+Ág(0sSmΌ*T&XGr *:%1­eAbmS%!QaUeXD<۝U6$nlªʱΉLy:0YDlIUҬs96*Ǜs FĜY*8r *:%1­e'VcJd=0Xr\pе9R.e8t pZ)i*ȨN Ye2Q2r2L84NTN:dde0phn8874  h0 a@+Æ_ mΌV1wn8apUf5WLd 8F c l¬sSmΌ*FĜYPr+d \804`44(4(4;4 V`j<4(@0"P 3.׮:͜{*4bM2Oy`+Q_f0X(6*:%1®DlIU]04788 s*7MΌrxf"ɓ?788 p CtdW7J+~ͷF5l"L,f44444;8A#;0788Bx *20/c:nM'i\(38>ViW3qvai fb֌HGu7t{SkP 8#ZCkEҍ2̍f.$+OEQ6hѸg"Eo8vp#\ȺF##^ukki̍f.$+F8 sUЊl4 5stch?hNjstcj{qjМ J`)9-Oe i Ơ9ACӡQP19AWSӆ?NjS LӢ(?ޝ?yjS@pHjFZd3NDmBN ƌbY]֝?yjPHӡ=Q\)DZ`8n }Ou2mZ:>s!H?9t1=8ɵh?ڢRL?W Ӡ u%F@'s`k2Fa)6JP>{F$h.h?W T, +*ANn4?ɗZt#+AǮ "8"?H! ) 4) @ ЀSH! +_t] (AHf:38H p` AHaH(? NJcv\c'BbĔ=+iУ%J@5COjVQ\(  I‚T$Ƅ橓.FZdЃY>Lӡ#O-P :4 Ґ#B{E5WB*Ӡj\&ՠuCOjVQ\)Zt)6VpB({Zt=#jpUf4c4+*AWSӆ?W T,8qZLӡ?FfTɗZt MViƟ5StH?fP Ѓ T䧺IB5S랝fVUtJc͹х7=uYL|dڊH? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stAT,&iЃY]֝?yjPHӡ=Q\)DZ`8n zjŐ4'59t .nTǩY Q\)WOON\+NbV's^صJP>{F$h.h?W T, Y9pYLӡ?2MdLz< U9)]ۇ'Bp8n  F"?0>֢2kGUbY‘ p) FF"?0>֢2kGSmBN HO‘ F[kQMW5ţ P1R!CvPPlU9)]ۇArS&s=:21bJ{U´#*dˤ#MPSڨEʨdˤ4'5LuCP4 7N{F$h.h?W T, Y9pYZLӡ?FfTɗZt MViƟ5StH?fP Ѓ T䧺IB5S랝fVUtJc͹хZ#bN ƕcjŐY;BȠU9)\ǸONJMʺ}2ztE$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZdЃY>Lӡ#O-P :4 Ґ#B{Rq:Ze.tHr:EҊ:Z$?ڢRLAVcxJQ +2-JP>{F$h.h?W T, +*ANn8iLӡ?2MdLz< U9)]ۇ'B?Ft@LJ0$|)es\Z8$nP)es\Z8jpUf7 D(‘ ‘ j%1ph? NJcv\c'A1S&] ,ICOjV (Ri{U´`pBK 9d˭:Y9t iAO4AT,.NLӡ#O-P :4 Ґ#BqB (PB (PB (PB (PB (PB (PB (PB (PB (QV+~-!a0'qB (PB (PB (PB (PB (PB (PB (PB (PB (Q{Lӡd'VcP7J*stcFSUqhjpUf5LUdoHQAȮ•td´ J`)9-Oe i+*ACӡQP1\)P 4iRddT'LӠlªʱΉLy:0YDlIUҬsS2qhjaF75Ŕ:*miЃ#+? NJk%FiЃ T䦺"Tb{ARZӍ?%U+Zq#O-P st AT,&i(IUь\4 ˺ӡ#O-P ):t )j\sUt" :a?C2kGP1d$5|*EҊ[=+iRR´{P#K` &JP>{F$h.h?W T, Y9piZLӢ(?FfTɗZtMjkN ?"k̡Ӡ0" T䧺IB5S랝fVUtJc͹хZ#bN ƕckGS ΂1,0" T䧺s=:TW Ak]>=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:C4 ɚt=#jpUf4c4=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:CP4 ɚt=#jpUf4c4=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:C4 ɚt=#jpUf4c4=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:A?yjS: 8*1FZd9wZt iAC GN2 T8jUa@4t1#)渴q5 8*ALS\Ȃ\(uCOjVb>CJ`1[VNPњ• }i(IUь\Y]ON4\)P stj2NMS&]i43 8B&n),=:j%=5BM:A\ArSsQrp? |ܫ'DPKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA!LӡQP1iACuBFZd:RtApS HEQ6tP7N=De5\&'VcT5VIkT({TW Ӡ@ j+IZtKZ• }i(IUь\Y]ON4\)P stj2NMS&]i3 8B&n),=:" T䧺IB5S랝? NJ{j.W1ӡtdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6NLӡQP1iACuBFZd:RtA{E5WB*Ӡ5stcFSUqhjpUf5LTS\Ȃ\(uCOjV 9?W Ӡ X@tf0=JP>{F$h.h?W T, Y9pPiZLӢ(?FfTɗZtMjkN ?"k̡Ӡ0 T䧺IB5S랝? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P st  AT,&i(IUь\4 ˺ӡ#O-P ):t )j\sUt" :P7N=De5\&'VcT5M5|*EҊ[=+iF TɗH?W Ӡ'9@̙tpB({Zt=#jpUf4c4+*AWSӆ?W T,8hȵLuDP&.Qn ֜i̡\e7NepArSsT$ӡdOuNj%=5+ Ѓʺ}2ztA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9t iAO4{F$h.h?yjPiЃY:s5R.`TMӡQMW5ţIU2 SmMr" stu=Zt\bRZ´ F,wF0hp\)P ֝bڄYJUO• 7N.Q2e֝A30ZӍ?"k̡Ӡ0A\ 6ArSsӡdOuE=zt 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA!?yjS: 8*1FZd9wZt iAC GN2 T8jUa@t1#)渴q5 8*Am[AR.nPءQ\+NY REE5Zt%Bhp 3v%#pB({Zt=#jpUf4c4+*AWSӆ?W T,8h0-S&]i3 d˭:&fa5[(DMӠ C'@` T䧺IB5S랝? NJ{j.W1ӡtd&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P st AT,&i(IUь\4 ˺ӡ#O-P ):t =LU"?Di A:s\Z8YS 6- 7J(?]lPSڨCب+i%l#X |-Փ06Fx'Fh?W T,Cآ6'VcF1sARdu=8hpB)ӇEd˭:"fa5LuD&pVOe)t({ A\ 6ArSsӡdOuE=zt 5rLA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9t 4 ɚt=#jpUf4c4{F$h.h?W T, Y9pȵLuDP&.Qn ֜i̡\e7NepArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZd4iAO4{F$h.h?yjPiЃY:s5R.`TM@1stcFSUqhjpUf5LTS\Ȃ\(uCOjV8!4 AVd`ͅ`0XpB({Zt=#jpUf4c4+*AWSӆ?W T,8p0-S&]i3 d˭:"fa5[(DMӠ C'@cA\ 6 ArSsӣ D(x-'J1 NQaV9)H#YEdOuE=zt 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA!LӡQP1iACuBFZd:RtA{E5WB*Ӡ7N=De5\&'VcT5M5|*EҊ[=+iШًH?W Ӡ"NZe5ͅ`0XpB({Zt=#jpUf4c4+*AWSӆ?W T,8p.Q2e֝A30ZӍ?"k̡Ӡ2H? NJ{jZt U9)Ѓ T䧺s=:WOONiNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:C@=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stCA?yjS:ntb\4 ˺ӡ#O-P ):t p   7Ah4 8h+  Wcv,MAbmkU&mhQx%x h P `D$@@W]{\u9AssThΛd"( dq3@qA &0@`Lf44  ~cUф(@ <4( Ê8"x h P `D$@@g]{\u9AssThΛd"3WVa@QՔmUtJc͹х\26rрs2t \-`q.>C sN , ++@hp<" 1Ҋ߀mѫ [5x#  V {}]JWV!<HTgMїs1̝7@ &.nyV[+4̫dx b; 431l$ , XⰈ T4 1@PH @@g00c|@0``  qB (PB (PB (PB (PB (PB (PB (PB (PB (QV a:d(Q (PB (PB (PB (PB (PB (PB (PB (PB (PG=Q\)DZ`8n z6mj9 Nn z6mj9Nqe)j"ENn z6tdbEv'DP@NL25 X@qes5q/'} \)P ֝XGZ1sARdu=8hpB)Ӈd˭:ANh? NJcvOG `PS $Z#E,G R@L#,/X#hXc<Xtg,  Rgj%1pj.W1ӡ1bJ{U´QH?% FQ\+NF渲AQi S&]i:1• F+*ANn.Q2e֝A30ZӍ?"k̡ӡdOuPkNj%==:rSs@ ()+$P’E0°M+ "(Q$)lªʱΉLy:0YPXGcAbm"Tf 28AH"?U9)U9)\ǸONɵh? |ܫ'DPKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iAO4AT,:s8 D(=LTEǪ hZ֩R.nTǪ hZ֩Rst]+*+i bvL ˺1,+*ACӢ hX.h?W T, Y9pYrU 4(0sSmΌ*T&XD=PXG)mhF75ŕGN銄Zt B5SdQtmUYV9)6Fk* hsS,M[$J ArS]l*1E=ztwF渲AQiJkN4iViƟ:1• F+*ANn<-S&]i3 d˭:&fa5[e)t({ Z5S뚡&֝? NJ{zt U9)\ǸONnUӠIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6NLӢ hX.h?yjPiЃY:sAsUЊl4 t1:֥h:75ŔA$\(uCOjVqe \+N5bacs\YXIp+*ACӢ hX.h?W T, Y9paZLӡj2NMViƟ5StH?fP j%=5BM:A\ArSsQrp? |ܫ'DPKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA :1• F+*ANn?TɗZt=j2NMViƟ5StH?fP $j%=5BM:A\dOu lªʱΉLy:0fn)%A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA BFZd3N,MciACuBFZd:RtApS HEQ6tƠn z6mj9Nqe)h7J(?]lPSڨDjp]*,5>p:U8.I@q=xQ!2 "+*ACӡ6F bpB*zpPY9paZLӡj2NMViCe)tE,=: T䧺IB5S랝? NJ{j.W1ӡtdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6NLӡ6F(#O-P :4 Ґ#B{E5WB*Ӡt1:֥h:75ŔA$\(uCOjVHEZtbR0K \)P ֝ y:0c4+*AWSӆ+*ANn8<-S&]i3 d˭:&fa5[e)t({ 5S뚡&֝? NJ{ztmUYV9)6FlMe1︉a6 H`x ,Fx h? NJ{j.W1ӡtdA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9t RFZd3N<۝/,c4:1• F+*ANn48-S&]i3 d˭:&fa5[(DMӠ C'@a$j%=5BM:A\pBB T r *:%1麬=Hx`OHaIŀS (.l# !aPH`0p|(.l# ,l+H8>6@)LH 1ўÀ,^P^Pn5S뚋{tnk)td&[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P st Y>LӢ hX.h?yjPiЃY:sPB (PB (PB (PB (PB (PB (P5:d(PB (PB (PB (PB (PB (PB (PA"stcuP\<9st7N=PXGZ 5ɩRst]+*+iɮObvL ˺1,+*ACӢ hX.h?W T, Y9pQrU 4(0sSmΌ*T&XD=PXG*k渲vЃН1PkN\ArS]l*3N *:%1­eAbmUtJcrdQ? NJk%F(\ǸON,9?W U+Zq$JkN4iANnA!?yjS: 6bY]֝?yjPHӡ=LU"?Di4=stcuP\<9Nqe)h7J(?]lPSڨB-bEQ\)Zt[Ҏ\)JP>:1• F+*ANn<-S&]i3 d˭:"fa5[e)t({ Z5S뚡&֝? NJ{zt U9)\ǸONnUӠIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6NLӢ hX.h?yjPiЃY:sAsUЊl4 t1:֨IMMF渲4d({TW ӡѹ,+iL nk+ .pB({ZtAbmkJUO• 7N ?TɗZt MS&]i3 8B&n),=: T䧺IB5S랝? NJ{j.W1ӡtdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6NLӢ hX.h?yjPiЃY:sAsUЊl4 A:AbmkT$&Ss\YJd2EҊ[=+iжSp:Չ^`n7F`HL YsNDmBN ƌbpB*zpѧJSEd˭:fa5LuD&pVB&n),=:%dOuPkNj%==: 6*Ǜs qV9)T&k%Fa U9)\ǸONnUӠIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6N2m"?3L4),)rSsArSsQrp? |ܫ'A4m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@pHY>LӢ hX.h?yjPiЃY:sAsUЊl4n z6kSG)ѹ,2 "Ek{U´+2D@L̦ͅ`0XpB({ZtAbmkJUJS .zQ2e֝A30ZӍ?"k̡Ӡ05S뚡&֝? NJ{ztAn8R!CXR!Cu<1xR!CD *:%1­eXDA-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANn?yjS: 6bY]֝?yjPHӡ=LU"?Di t1:֨IMMF渲4d({TW ӢNe)Š\+NI̬"`bSYsN,Mc\)P 4iRdCO"2e֝A30LӢ(?FfU+Zq2Mq:RY=ztZ5S뚡&֝? NJ{ztmUYV9)6FlMe1" U"*c? NJ{j.W1Ӡ1aB_7*m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@pHY>LӢ hX.h?yjPiЃY:s5R.`TMӡT&ֵBMpjh:75ŔA$\(uCOjVv({´ T@@D$ %P eDȀHPYsN<۝1• @9RdCAj2N3 d˭:&fa5[ ?"k({ 5S뚡&֝? NJ{zt U9)\ǸONnUӢ(?%SӍ?%ڵB({Zt j ƟmZdƟnQ%ڽ:4 7NHxjFZd3N<۝/,c4=:"p:td& `j/O qh{s\Y\`d\@$=cH?W T,D&ֱ\Y]ON4\)P st̙u@?2MdLz<? NJcv\c'BbĔ=+iRH{TW ӡ S&]iLӢ hX.h?yjS@pHhrqGȁ)jq:AbmkQMW5ţmj9Nqe)j"ENn z6ԶMF渲4dQ\)WOON\+N^5baD渴q< rnk)JP>:1• F+*ANn4? NJ:ffVUtJc͹хZʂ8Ǫ h-渲#BBtBM:esӡdMuD: 6*Ǜs qV9)T&k%Fav T䦺"Tb{ qe \)ViƟm*8Y9t 4 ɚtAbmk#O-P :4 Ґ#B{E5WB*Ӡ4jǪ hZj-MKkTtnk)LFHQAbEp:AV1;{P%<'5ţV\)JP>:1• F+*ANn4?TɗZt MS&]i3 8B&n),=: T䧺IB5S랝? NJ{j.W1ӡtdIo6趄OYj$WBIo6P ֝?%ڵB*zq$VY9q[Io6NLӢ hX.h?yjPiЃY:sAsUЊl4A:AbmkQMW5ţmj9Nqe)h7J(?]lPSڨCGANj´ J`)9-O渲 p 3B`PpB({ZtAbmkJUO• 7NEd˭:"fa5LuD&pVB&n),=:%dOuPkNj%==:A\\c'B_7*M$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZd4Y>LӢ hX.h?yjPiЃY:s5R.`TMӡT&ֵs\Z8֩Rstu=Zt=AVq*V5r߁n}Y;CdlgtfpB({ZtAbmkJUO• 7N ?TɗZtEj2NMViƟ5StH?fP U9)miЃ T䧺B5S뚋{Ak]>=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P st  AT,&iuc4A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnLӢ hX.h?yjPiЃY:s5R.`TMӡT&ֵs\Z8֩Rstu=Zt>DH´$C,l+HE+*ACӢ hX.h?W T, Y9pȵLuC&.Qn ֜i̡\e7NepArSsT$ӡdOuN)D*ā9FمXD"dgj%=5+ Ѓʺ}2ztA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9t  AT,&iuc4=:"p:5#XL@TkO qhxAsXaR• }iuc4+*AWSӆ?W T,8h(U9*tmUYV9)6Fk* hsS2qhj1,]:t 'LT$ӡ FW=:A[$JӠlªʱΉLy:0YPXGcAbm"Tb5SdQ.W1Ӡ0CYe\(ARZӍ?%U+Zq#O-P st AT,&iuc4A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnA!XdE ѹTMX,<^ nn[2kGP1d$5|*E҈<"ky6 pS H:75WB*Ӌ Ǩ$joHQ$TM{&a d<0GFEQ6q`Csts\Z8YS Y&)[AR.nE6^ɰm>XdE ѹTMX4h@$8=De5\&'VcT5M5|*E҈<"ky6 pS H:75WB*ӋǨ$j1Mr" st/F)HMi:%5R.x`UЊl4Csts\Z8YS 6- 7J"`Dy6S2]LU"]&N,/ 77N-QMW5ţIU2 UbD"D^ShQ5<uK)j\DiŃACsts\Z8YS Y&)[AR.nE6^ɰm>XdE ѹTMX4^ nn[2kGP1dښD"D^ShQ5<uK)j\DiŀE ű#)渴q5 8*ALS\Ȃ\(уm*&`}Nw2 T#sUt" 8<^ nn[2kGP1dښD"D^ShQ5<uK)j\DiŀCsts\Z8YS Y&)[AR.nE6^ɰm>XdE ѹTMX4^ nn[2kGP1dښD"D^ShQ5<uK)j\DiŁE ű#)渴q5 8*ALS\Ȃ\(уm*&`}Nw2 T#sUt" 8 4^ nn[2kGP1dښD"D^ShQ5<uK)j\DiŁCsts\Z8YS 6- 7J"`Dy6S2]LU"]&N,Ǩ$joHQ$TM{&a d<0GFEQ6q`@x@$8=De5\&'VcT5VIkTz0yMED׼lO.AstnjUa ű#)渴q5 8*Am[AR.nE6^ɰm>XdE ѹTMX Ǩ$j1Mr" st/F)HMi:%5R.x`UЊl4h@$8=De5\&'VcT5M5|*E҈<"ky6 pS H:75WB*ӋCsts\Z8YS Y&)[AR.nE6^ɰm>XdE ѹTMXA ӋcFSUqhjpUf5LTS\Ȃ\(уm*&`}NwBj\Diņ/ 77N-A4'59ql}Ou2mX<"ky6 pTW Q8=O\bP<"ky6 pTW Q8>֦K /F)HMi:%”Ea:77N-M$TM{ C@`xx/Ah4 ^4 `c͹у*.1XG :֫2MiG`}Nw2 Q8=PXGZԶMF渲4^ShQ5<uK)j0GFű:֢2kGR4rS z0yMED׼lO.A"0Ǫ hZj-MP\<8^ShQ5<uK)j0GFű:֨IMM/F)HMi:%5R.x`UЊl4ƋA ӋcuM'#6^ɰm>XdE ѹTMXxH!qlz6ʺ}2r0^ShQ5<uK)j\DiōǪ hZ֩Rst/F)HMi:%5R.x`UЊl4ƇA ӋcuP\<9Nqe)h7J"`Dy6S2]LU"]&N,4h@$8=PXGZԶMF渲4dz0yMED׼lO.AstnjUa4^ nn[,Mj#)渴q5-SG)ѹ,2 "D^ShQ5<uK)j\DiņǪ hZ&y54rS ђ.nE6^ɰm>XdE ѹTMXhx@$8=PXGZԶMF渲4dz0yMED׼lO.AstnjUa/ 77N-T&ֵBMpjh:75ŔA$\(уm*&`}Nw2 T#sUt" 8xH!qlz6mj9Nqe)h7J"`Dy6S2]LU"]&N,8<^ nn[,Mj#)渴q5-SG)ѹ,2 "D^ShQ5<uK)j\DiŇA ӋcuDe5\&IMMF渲4dz0yMED׼lO.AstnjUa/ 77N-T&ֵBMpjh:75ŔA$\(уm*&`}Nw2 T#sUt" 8PxH!qlz6mj9Nqe)h7J"`Dy6S2]LU"]&N,4^ nn[,Mj#)渴q5BMpjh:75ŔA$\(уm*&`}Nw2 T#sUt" 8PxH!qlz6kSG)ѹ,2 "D^ShQ5<uK)j\Dił ű:֥h:75ŔA$\(уm*&`}Nw2 T#sUt" 8Px@$8=PXGZFSUqhj[ZSs\YJd2E҈<"ky6 pS H:75WB*ӋA ӋcuP\<9Nqe)h7J"`Dy6S2]LU"]&N,4^ nn[,Mj[ZSs\YJd2E҈<"ky6 pS H:75WB*ӋǪ hZj-MKkTtnk)LFHQ$TM{&a d<0GFEQ6q`CstAbmkT$&Ss\YJd2E҈<"ky6 pS H:75WB*ӋA ӋcuKkTtnk)LFHQ$TM{&a d<0GFEQ6q`xH!qlz6ԶMF渲4dz0yMED׼lO.AstnjUa Ǫ hZj-MP\<9Nqe)h7J"`Dy6S2]LU"]&N,/ 77N-T&ֵBMpjh:75ŔA$\(уm*&`}Nw2 T#sUt" 8CstAbmkR4rS ђ.nE6^ɰm>XdE ѹTMXxxH!qlz6ԶMF渲4dz0yMED׼lO.AstnjUa4^ nn[,Mjtnk)LFHQ$TM{&a d<0GFEQ6qaCstAbmkQMW5ţmj9Nqe)h7J"`Dy6S2]LU"]&N,<<^ nn[,Mj#)渴q5BMpjh:75ŔA$\(уm*&`}Nw2 T#sUt" 8`@$8=PXGZFSUqhj[ZSs\YJd2E҈<"ky6 pS H:75WB*Ӌ Ǫ hZj-MKkTtnk)LFHQ$TM{&a d<0GFEQ6q`CstAbmkQMW5ţkSG)ѹ,2 "D^ShQ5<uK)j\DiŃ ű:֢2kGR4rS ђ.nE6^ɰm>XdE ѹTMX0<^ nn[,Mj#)渴q5BMpjh:75ŔA$\(уm*&`}Nw2 T#sUt" 8hxH!qlz6 5ɩRst/F)HMi:%5R.x`UЊl4CstAbmkQMW5ţkSG)ѹ,2 "D^ShQ5<uK)j\DiŀE ű:֢2kGT$&Ss\YJd2E҈<"ky6 pS H:75WB*Ӌ ű:֢2kGT$&Ss\YJd2E҈<"ky6 pS H:75WB*ӋA ӋcuDe5\&IMMF渲4dz0yMED׼lO.ਮ-3 ѹqlz6mj8^ShQ5<uK*+(Ltnn[,Mj#)渴q5-SG уm*&@,4h(h0 a@+Æ,y:0eXݺ2 hlIU\1MMi:%5DZf#stZj-MM 8*/F)HMi:%5DZf#stZj-MPbY$TM{&a d-3 ѹql}De5\&$ 8*/F)HMi:%5R.x`UЊl4ƋA ӋcUF,X<"ky6 pS H:75WB*Ӌ/ 77N-kJ[/F)HMi:%5R.x`UЊl4ƋA Ӌcj{qj6^ɰm>XdE ѹTMX,<^ nn[2kGP1dښD"D^ShQ5<uK)j\Dił ű#)渴q5 8*A- 7J"`Dy6S2]LU"]&N,/ 77N-QMW5ţIU2 UbD"D^ShQ5<uK)j\DiŃA ӋcFSUqhjpUf5LTS\Ȃ\(уm*&`}Nw2 T#sUt" 8`xH!qlzj-MBN Ʃj- 7J"`Dy6S2]LU"]&N,4^ nn[2kGP1dښD"D^ShQ5<uK)j\DiŃFA ӋcFSUqhjpUf5LUdoHQ$TM{&a d<0GFEQ6q`xH!qlzj-MBN ƩjjkTz0yMED׼lO.AstnjUa Ǩ$j1Mr" st/F)HMi:%5R.x`UЊl4xH!qlzj-MBN Ʃj- 7J"`Dy6S2]LU"]&N,/ 77N-QMW5ţIU2 SmMr" st/F)HMi:%5R.x`UЊl4qCsts\Z8YS Y&)[AR.nE6^ɰm>XdE ѹTMX/ 77N-QMW5ţIU2 SmMr" st/F)HMi:%5R.x`UЊl4pxH!qlzj-MBN Ʃj- 7J"`Dy6S2]LU"]&N,/ 77N-QMW5ţIU2 SmMr" st/F)HMi:%5R.x`UЊl4Csts\Z8YS Y&)[AR.nE6^ɰm>XdE ѹTMX/ 77N-QMW5ţIU2 SmMr" st/F)HMi:%5R.x`UЊl4xH!qlzj-MBN ƩjjkTz0yMED׼lO.AstnjUaA ӋcFSUqhjpUf5LTS\Ȃ\(уm*&`}Nw2 T#sUt" 8 <^ nn[2kGP1d$5|*E҈<"ky6 pS H:75WB*ӋCsts\Z8YS 6- 7J"`Dy6S2]LU"]&N, A ӋcFSUqhjpUf5LUdoHQ$TM{&a d<0GFEQ6q`@4^ nn[2kGP1dښD"D^ShQ5<uK)j\DiŁxH!qlzj-MBN Ʃj- 7J"`Dy6S2]LU"]&N, ű#)渴q5 8*Am[AR.nE6^ɰm>XdQ5R.x`UЊl4F 8>֧6^ShQ5<uK*+(Ltnn[ڮr1d(^ShQ5<uK*+(Ltnn[kS Ή$TM{&a J"0\&Ջуm*&X 4<4`( @W CXcv,MAbmkUld- <uK)j0GFű:֥h:75ŔA`Dy6S2]LTEa:77N-T&ֵs\Z8֩Rуm*&`}Nw2 Q8=PXGZFSUqhj`Dy6S2]LTEa:77N-T&ֵBMpjhz0yMED׼lO.AstnjUa4^ nn[,Mjh]>9/F)HMi:%5R.x`UЊl4ƋA ӋcuDe5\&U铑`Dy6S2]LU"]&N,hx@$8=PXGZԶMF渲4dz0yMED׼lO.AstnjUa4<^ nn[,Mjtnk)LFHQ$TM{&a d<0GFEQ6qaE ű:֥h:75ŔA$\(уm*&`}Nw2 T#sUt" 8ѢCstAbmkQMW5ţmj9Nqe)h7J"`Dy6S2]LU"]&N,4h@$8=PXGZ 5ɩRst/F)HMi:%5R.x`UЊl4C ű:֥h:75ŔA$\(уm*&`}Nw2 T#sUt" 8xH!qlz6kSG)ѹ,2 "D^ShQ5<uK)j\DiŇA ӋcuKkTtnk)LFHQ$TM{&a d<0GFEQ6qaCstAbmkQMW5ţmj9Nqe)h7J"`Dy6S2]LU"]&N,8<^ nn[,Mj#)渴q5BMpjh:75ŔA$\(уm*&`}Nw2 T#sUt" 8xH!qlz6kSG)ѹ,2 "D^ShQ5<uK)j\DiłA ӋcuKkTtnk)LFHQ$TM{&a d<0GFEQ6q`CstAbmkQMW5ţkSG)ѹ,2 "D^ShQ5<uK)j\DiłA ӋcuP\<9Nqe)h7J"`Dy6S2]LU"]&N,/ 77N-T&ֵ-SG)ѹ,2 "D^ShQ5<uK)j\Dił ű:֢2kGR4rS ђ.nE6^ɰm>XdE ѹTMX(<^ nn[,Mjtnk)LFHQ$TM{&a d<0GFEQ6q`CstAbmkR4rS ђ.nE6^ɰm>XdE ѹTMX,h@$8=PXGZFSUqhj[ZSs\YJd2E҈<"ky6 pS H:75WB*ӋǪ hZ&y54rS ђ.nE6^ɰm>XdE ѹTMX,<^ nn[,Mj[ZSs\YJd2E҈<"ky6 pS H:75WB*ӋA ӋcuDe5\&h:75ŔA$\(уm*&`}Nw2 T#sUt" 8Xx@$8=PXGZFSUqhjtnk)LFHQ$TM{&a d<0GFEQ6q`xH!qlz6kSG)ѹ,2 "D^ShQ5<uK)j\DiŇǪ hZ֩Rst/F)HMi:%5R.x`UЊl4ƋA ӋcuDe5\&h:75ŔA$\(уm*&`}Nw2 T#sUt" 8CstAbmkT$&Ss\YJd2E҈<"ky6 pS H:75WB*ӋǪ hZj-MKkTtnk)LFHQ$TM{&a d<0GFEQ6qaCstAbmkQMW5ţkSG)ѹ,2 "D^ShQ5<uK)j\DiŇ ű:֢2kGR4rS ђ.nE6^ɰm>XdE ѹTMX0h@$8=PXGZFSUqhj[ZSs\YJd2E҈<"ky6 pS H:75WB*Ӌ Ǫ hZj-MP\<9Nqe)h7J"`Dy6S2]LU"]&N,/ 77N-T&ֵs\Z8֩Rst/F)HMi:%5R.x`UЊl4CstAbmkQMW5ţkSG)ѹ,2 "D^ShQ5<uK)j\DiŃFA ӋcuDe5\&IMMF渲4dz0yMED׼lO.AstnjUa Ǫ hZj-MP\<9Nqe)h7J"`Dy6S2]LU"]&N,/ 77N-T&ֵs\Z8&y54rS ђ.nE6^ɰm>XdE ѹTMX/ 77N-T&ֵs\Z8&y54rS ђ.nE6^ɰm>XdE ѹTMX4^ nn[,Mj#)渴q5BMpjh:75ŔA$\(уm*&`}NwEpi`ӋcuKkT`Dy6S2]Q\)DZf#stAbmkQMW5ţmj8^ShQ588 ?h07@,h0 a@ (;nt`ʱucH*a0lªʱΉLy:0YM" Fә)L@^ILӄ x49]ޝe`DFr0%6F \4 96*Ǜs ,,胏2R4=kN ?̙u@( hs:-.*a0KmΌV1wnismUYV9)6Fk)XYLG8!(њs%)#K;@ 6ɗZpD@?ӬL蒨FcvƑag9FمUcntaVEc4 S\8!(њs%)#K;@ 6X,2e֜ Q]ޝe`DFr0%6F \4 ?ۂ6t9FمUcntaVEc4 UfLh9 ΠZph,2N@(ǮNy0KJ9LǛsU]ۮcEZӂ@ii :@/AQaUeXD<۝UaeXD=M"s`Fi̔ d/Odu$ӃA`ɗZp,"G=wzu[ɂ]U`<۝2bs,,n ֜FٰӠ88 9FمUcntaVEc4 Pa0qBQ4JS?2Fw:miYd˭8:-.*a0KmΌV1wnikN4?0a@(8 r *:%1­e4 *:%4 Psh9 ΠZpO&]iYo& tITg# Xnt`ʱucH+Zp`xxqi :nlªʱΉLy:0YM"ʱΉLzE%YXՃ2R4=kN &]iYo& tITg# Xnt`ʱucH+Zp6tAanlªʱΉLy:0YM"d= c,-P\M[D{  Fә)L@^Ig.XD z,$3,y:0eXݺ1XY8p44?0a@h`x7h96*Ǜs ,,J#@=M"սLG;h8!(њs%)#K;@ 6X,2e֜ Q]ޝe`DFr0%6F \4 ?ۂ6l4A7A0@h 4 AXh7Æ_y:0eXݺ1XXż( 6*Ǜs ,, 6*Ǜs ,,aFمUcntaVED{aFمUcntaVEc4 S\mUYV9)6Fk)XYV9)SH\d0lªʱΉLy:0YM"ʱΉLzE"0lªʱΉLy:0YM"ʱΉLzED0mUYV9)6Fk)XYV9)XZ͛gQaUeXD<۝UaeXD=M"B,,s0lªʱΉLy:0YM"d= c,-P\M[D{ 0lªʱΉLy:0YM"d= c,-P\M[D{ ` @h  h0 a@ p7nt`ʱucH`lªʱΉLy:0YM"f*C296*Ǜs ,,ᠠa6*Ǜs ,,J#C444 @p o@h(8h+  c͹у*.1"4 錓`(@ <4(@0"P +.׮:͜{*4bM2Oq^Ȳf8 8b  0&3C1*Tчq^ xI@p@ aV`j<4(@0"P 3.׮:͜{*4bM2Oy`+Q_f0X(6*:%1®M"j4`nq^qXTn2Eѓ'~`nq^qXW3p5s!Dy`H @`F3"Q[m5waFdac0ᡣA!CCsq3 Ss$'# 2>f9{v[ҏ#3cfYs1̝7O1 @ a6Ff-ĝ28D# WV`j<4( pxp40 l$pS HEQ6tA:4 UP\<7J(?]lPSڨB-bENj´,$R• }i,-V\Y]ONY9pQZLӢ(?FfTɗZtEjkN4P2@ A2ON dOuPkNj%==:A\\c'B_7*m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@0Y>LӡX]c4=: iNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:RFZd3Nav\4 ˺ӡ#O-P ):t )j\sUt" :Ơn zE֨ILd({TW ӢNe)Š\+NI̬#уARd=ϭ:E1sARdu=8yRdj2NMS&]i43 8B&n),=:U9)mi T䧺AFمUcntaFtVS+0\ r8ރ T䧺s=: 5rLKyE'Q%ڽ:KyjP>A-ժAWSӍ?%ڵB)Ӎ?&Kyzt iANnH-#O-P |CHX.h?yjPiЃY:s5R.`TM?Cajk"Ek{U´LJF(?W Ӡ%S\)JP>c͹у\)P 4\)P st <-S&]i3 d˭:"fa5[(DMӠ Y=ztj%=5BM:A\(0sSmΌ(ٹcql/a,/  T䧺s=:WOONm)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@p,  iAO4c͹ъ"1sAT,.Np:U8.I@q=xQ!2 "+*ACӡ6F bpB*zpPY9paZLӡj2NMViCe)tA2ON;ArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE$Jt[Bzqk[ͫӡ$VYsNmZdu=8[ͫT,8j$WBFZd  AT,&iǛsEbY]֝?yjPHӡ=LTEǩXZj7J*stc,-VBMpc$\(WjJ}2ztEZtkׄ q/'[Ϭ2d-JP>ikJUJS? NJ:ffVUtJc͹хZiUtJc,-Nr2xb7A`?  6ANj%54(0sSmΌ*SHsSaj6'? NJk%F(\ǸON[Ҋ+*8[ͥ[4 7Nh$9#O-P |CHX.h?yjPiЃY:s5DZ`8n zE֥dȹQSCajmjst]+*+i 8 -XX 2FpB({Zt4 bpB*zp\)P stdT'LӠlªʱΉLy:0YM"ʱΉLzE.FO ^:*miЃ#+? NJk%FiQaUeXD<۝UaeXD=M""mO h? NJk%F(\ǸONjpVOIo6n ֜iT,:ikJUJSEd˭:fa5LuD&pVOe)t({ T䧺IB5S랝 U9)PR!CmUYV9)6FlMe1䧈F&R!CS4B ‘ j%=4j%=5+ Ѓʺ}2ztA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9t!?yjS:E1sAT,.N=:"[ͥ:-=8Z-Ѓ[ͫT,BIo6P i-ժANni5[ͫӡ#O-P stAh?yjS:E1sAT,.Nc͹у\)P +*ANn44.A30LӢh?FfU+ZpB&nP̡Ӡ0A\ 6ArSsӡdOuE=zt 5rLA-ҝОi-DjA-ժACӡ$VY]ON4j 7N4p-ЃY9tCP4 ɚt1yciACuBFZd:RtAA`83CC @ P,4xpW4XdE ѹTMXpxH!qlzE֥d2E҈<"ky6 pS H:75WB*Ӌ/ 77N-SHZ 5Ɍst/F)HMi:%5R.x`UЊl4CE űiZ֩h7J"`Dy6S2]LU"]&N,4^ nn[ajk"D^ShQ5<uK)j\DiłƋA Ӌc,-V-S ђ.nE6^ɰm>XdE ѹTMX,h@$8=M"kT$&2E҈<"ky6 pS H:75WB*Ӌ/ 77N-SHZԶLFHQ$TM{&a d<0GFEQ6qaE űiZ&y1.nE6^ɰm>XdE ѹTMXxx@$8=M"kR2 "D^ShQ5<uK)j\DiŇA Ӌc,-VBMpc$\(уm*&`}Nw2 T#sUt" 8`xH!qlzE֥d2E҈<"ky6 pS H:75WB*Ӌ ǩXZjHQ$TM{ @(  P,4xpW4XdE ѹTMXhxH!qlzE֥d2E҈<"ky6 pS H:75WB*Ӌ / 77N-SHZ 5Ɍst/F)HMi:%5R.x`UЊl4ÆA Ӌc,-V-S ђ.nE6^ɰm>XdE ѹTMXpxH!qlzE֨ILdz0yMED׼lO.AstnjUa / 77N-SHZԶLFHQ$TM{&a d<0GFEQ6q`Cst4 UP\<7J"`Dy6S2]LU"]&N,4^ nn[ajmjst/F)HMi:%5R.x`UЊl4cE űiZ&y1.nE6^ɰm>XdE ѹTMXxxH!qlzE֥d2E҈<"ky6 pS H:75WB*Ӌ/ 77N-SHZ 5Ɍst/F)HMi:%5R.x`UЊl4 űiZ֩h7J"`Dy6S2]LU"]&N,<<^ nn[ajk"D^ShQ5<uK)j\DiŃA Ӌc,-V-S ђ.nE6^ɰm>XdE ѹTMX0h@$8=M"kT$&2E҈<"kpX(  @( P4 4 Pocv(tITg# `lªʱΉLy:0YBP%3Nd3$iz{'s&֜2NP<=wzu[ɂ]U`<۝2bs%lªʱΉLy:0YBP*: Fi̔ d/Odu$ӃC&]i< AǮNy0KJ9LǛsU]ۮc"smUYV9)6Fk(J%2QFi̔ d/Odu$ӃC&]i< AǮNy0KJ9LǛsU]ۮc"smUYV9)6Fk(J%XD=BPP |-?J4fJgHNP?M84<<2e֜ Q]ޝe`DFr0%6F \ @Dn ֜44F͆80 tfVUtJc͹хZV9)PT3s7U2R4=kN ?̙u `cwYe%%Q& c͹у*.1P?ۂii :@smUYV9)6Fk(J%XD=BPS% ?J4fJgHNP?M84<<2e֜ Q]ޝe`DFr0%6F \ @Dn ֜8O#Lli9FمUcntaV"UtJc%F%3Nd3$iz{'s&֜2N@(ǮNy0KJ9LǛsU]ۮc"kN `Ai :Ag smUYV9)6Fk(J%XD=BPTVqBQ4JS?2Fw:mi.XD z,$3,y:0eXݺ0J'pVC6tCA~lªʱΉLy:0YBP*:%1k2`Fi̔ d/Odu$ӃC&]iYo& tITg# Xnt`ʱu`OiCAa6l4A(0sSmΌ*PJΉLz"%3Nd3$iz{'s&֜2N@(ǮNy0KJ9LǛsU]ۮc"kN  FٰӠ 9FمUcntaV"UtJc%BQt`8!(њs%)#K;@ 6ɗZp,"G=wzu[ɂ]U`<۝2bs%+ZpPP,4F͆9FمUcntaV"S% S( z(qpx8!(њs%)#K;@ 6X,2e֜ Q]ޝe`DFr0%6F \ @Dn ֜ ?0a@hx(8fVUtJc͹хZLGLz".&d= A Fә)L@^Ig.XD z,$3,y:0eXݺ0J'pV6t8x smUYV9)6Fk(J%XD(Lٹ?J4fJgHNP?M8xѧ.XD z,$3,y:0eXݺ0J'pVX,44F͆8(9FمUcntaV"UtJJ Fә)L@^ILӁa0 ?ӬL蒨Fcv(ZӂAO#Lli4r *:%1­e @DǨJ*ɾ`8!(њs%)#K;@ 6ɗZp,"G=wzu[ɂ]U`<۝2bs%+Zp ?0a@xCVlªʱΉLy:0YBP*:%1r- Fә)L@^ILӁa0 ?ӬL蒨Fcv(ZӇ౧6l4 fVUtJc͹хZV9)PU Eӑ?J4fJgHNP?M84<<2e֜ Q]ޝe`DFr0%6F \ @Dn ֜4ha`#fN7h9pX7cAcA`@pw@h(xpW0 Á~ǛsU]ۮc"1oQmUYV9)6Fk(J'QaUeXD<۝U(c(0sSmΌ*PJd=0lªʱΉLy:0YBP*:%1c9o(0sSmΌ*PJΉLz" 麬 6*Ǜs %sS(8 *:%1­e @DǨJ*6&qfVUtJc͹хZV9)PUռ 6*Ǜs %sS(&qfVUtJc͹хZV9)PUsgQaUeXD<۝U(c @EP]9qfVUtJc͹хZLGLz".&d= QaUeXD<۝U(D{ǨJ*jަJ#@` 6*Ǜs %sPT&l8 *:%1­e @D%0aFمUcntaV"UtJc%\dq0 6*Ǜs %sS("q0 6*Ǜs %sS(#q0`@@,7Ah4 8h+  c͹у*.1Pn QaUeXD<۝U(96)Te+smUYV9)6Fk(J%XG lªʱΉLy:0YBP)ACFƂƂ4 A@ A_oX/ǛsU]ۮc"0J6\1lր`V !@Xh߳P,EuefcntaWL(9w@804`44A`aah@bX!%38"z BF.tܳ$WV " c l¬sSmΌ*%Z. WV9jF9o3td@XWV2t \-~`nq^qX@ȮnVn]jEѫX8hhnqX߁ Fwta*nq^qX"TdaQ7F^2tq33NK{Qfq[]l|+2f90&!&4_X(ŲxG7dac3 , P0A V^j,X\۝ਮ-07N=BPR]>44'59t1֩[Ast7N=BPR]>1.h?ڢRLAV:}2zPdh \VBARd=ϭ:"X.h?W T, 8\W T,8iLӡ FW=: U9)]ۇӡdLz<{AXEp:J@5COjV?hNj2NiANnA#P4 ɚt @EV\s5R.`ㅹTMPp7N=BPR]>1.h8[]lPSڨB´td2ѕ8pB({Zt @EV\pY]ONpY9pӅȵLuCp&.Qn ֜i̡\e7N,({ArSsT$ӡ dOuN *:%1­e @DǨJ*6& T䧺s=:ʺ}2ztE $Jt[Bzq k[ͫӡ $VYsN,mZdu=8Ӆ[ͫT,8Ӆj$WBFZd45 #O-P |@Uk=LTE1֩[A st7OPTMr"$\p+Ep]>=: q\+N^j,XQ8 -XX 2FpB({Zt @EV\pY]ONpY9pㅲ TiQaUeXD<۝U(c @ELGtANI@#+8[ NJk%FiQaUeXD<۝U(c @EB&фpA[$JQrpXW ARZӍ8Y%U+Zq #O-P st  diAO4cg)j\sUt" :A: @EKkT- 2Ek{U´e1st\+N{QK \)P ֝PUc4+*AWSӆ+*ANn.Q2e֝A-DjA5[ͫӡjkN ?"k̡Ӡ1h? NJ{jZt U9)Ѓ T䧺s=:WOONh?yjS@ph$Y>LӠJ*b惞AsUЊl45stc%-S\Ȁ4({TW ҁ(+#?W Ӡ8&Y24W0H?W T,@UkJUᡧJSEd˭:"fa5LuDPQ%ڽ:MDjA30ZӍ?"kM,=: T䧺IB5S랝? NJ{j.W1ӡtdFZd  iAO4c)j\sUt" : A: @EKkT- 2Ek{U´-QiZt: 0iJP>c\)P 44\)P stj2NMS&]i4Io6NnQ%ڽ:&pVOe)t({ -dOuPkNj%==: 6*Ǜs 6n{겘ɵA\\c'B_7*=:"Y9tC4 ɚt @EV\s5R.`TMӡPTMr"$\ءQ\+N+ivHJʉ 80\)P ֝ y:0c4+*AWSӂspB)ӆ"2e֝?FfTɗZtMjkN(DMӠ Y=zt? NJ{jZt U9)Ѓ T䧺s=:WOONiNhON4uKyzt j }iЃ[ͫT,KyjSMDjAT,:!?yjS:ntb\s@&y< u!#FVtdu5#0>Fʴ2 Q8[ǨJ*o.EҊ>=BPT$5| sAȮ•td´d'5 F d(@si#KARd=ϭ:"X.h8\W T, 8\W T,8pABt: 6*Ǜs %sS(-vЃН1PkN,\ArS]l*3N *:%1­e @DǨJ*6'8[ NJk%F(\ǸON[Ҋ.+*8Ӆ[ͥ[p4 7NH(5 #O-P |@Uk=LU"?Di4hzǨJ*o.h?]lPSڨ ,EpgZt[Ҏ\)JP>c\)P 44\)P stȵLuDP&.Yj$WB m^?FfU+Zp`,P2@ A2ONŠU9)miЃ T䧺B5S뚋{Ak]>=:"Y9tAH?yjS:"X.h9 d0q]&NP7N=BPT$5| sAbEp(‘+ij,XQIp+*ACӠJ*bpB*zppB)ӂ"2e֝A30LӢ(?]em^?&Kyzt MViƟ5St&epArSsT$ӡdOuNj%=5+ Ѓʺ}2ztE#O-P st 4 ɚt @EV\s5R.`TMCC7N=BPT$5| sAbEp(-QiVq'ARd=ϭ:"X.h?W T, ?W T,8yZLӡ?FfTɗZtMk[ͫӡ[Io6N3 8B&n),=: ArSsT$ӡdOuN *:%1麬>2mEpj%=5+ Ѓʺ}2ztE#O-P st P4 ɚt @EV\p5R.`TMCn z"Ik"u=ZtNJVp:5"TfhX ARd=ϭ:"X.h?W T, ?W T,80-S&]i3 d˭: A-DjA5[ͫӡjkN4P2@ A2ONɠU9)miЃ T䧺QaUeXD<۝Qs7UM T䧺s=:WOONh?yjS@ph$Y>LӠJ*b惞AsUЊl4 t1&[@d[=+ita'2@N$Ve \)P ֝PUc4+*AWSӆ+*ANn.zQ2e֝A-DjA5[ͫӡjkN ?"k̡Ӡ2A\ 6 ArSsӠlªʱΉLy:0fn)QJa9V\dOuE=zt,4Ak]>=:"Y9tC4 ɚt @EV\s5R.`TMAa?C(jDHuCOjVC&p:U8.I@q=xQ!2 "+*ACӡ6F bpB*zpPY9paZLӡj2NMViCe)tA2ON9dOuPkNj%==:A\\c'B_7*m)m ƟIo6NmZd=ϭ:KyjUOIo6P stO m^?yjS@px$<5#O-P |CmΌQ10 `wXP4  #nt`ʱu`F @F֫2MiG`}Nw2 Q8=BPR5| уm*&`}Nw2 Q8=BPT$5| уm*&`}Nw2 T#sUt" 8Cst @EKkUtdHуm*&`}Nw2 T#sUt" 8C ű֩[@d<"ky6 pS H:75WB*Ӌ4<^ nn[(jDHуm*&`}Nw2 T#sUt" 8E ű֩[@d<"ky6 pS H:75WB*Ӌ4^ nn[(jDHуm*&`}Nw2 T#sUt" 8Cst @EPT- 2E^ShQ5<uK)j\Diō/ 77N-PTMr"$\6^ɰm>XdE ѹTMXCst @EPT- 2E^ShQ5<uK)j\DiōǨJ*[Zo.b`Dy6S2]LU"]&N,h(h@$8=BPR5| s$TM{&a d<0GFEQ6qcAcE ű&[@d<"ky6 pS H:75WB*Ӌ ǨJ*o.b`Dy6S2]LU"]&N,/ 77N-PTMr"$\6^ɰm>XdR0GFű֪ɋуm*&ÃXph@xhhAh4 ^4 aǛsU]ۮc"0J6\1M ɰm>XdLtnn[(mjD6^ɰm>XdLtnn[(jD6^ɰm>XdE ѹTMXxH!qlz"}2c$\6^ɰm>XdE ѹTMXѡCst @EKkT- 2E^ShQ5<uK)j\Diō/ 77N-PU 5Mr"$\6^ɰm>XdE ѹTMXѢCst @EKkT- 2E^ShQ5<uK)j\Diō / 77N-PU 5Mr"$\6^ɰm>XdE ѹTMXxH!qlz"Ik"/F)HMi:%5R.x`UЊl4Ƈ ǨJ*[Zo.b`Dy6S2]LU"]&N,hpxH!qlz"Ik"/F)HMi:%5R.x`UЊl4ƇA Ӌc%-S\Ȁ1z0yMED׼lO.AstnjUa44^ nn[(mjDHуm*&`}Nw2 T#sUt" 8Cst @EPT- 2E^ShQ5<uK)j\DiōA Ӌc%BMS\Ȁ1z0yMED׼lO.AstnjUa ǨJ*[Zo.b`Dy6S2]Q\)DZf#st @EKkUtd6^` C`wopXw 2E11cvYc"ɘfnt`ʱucHf8f<۝2bs#˳ d&cc͹у*.1Lc$Y3@3mΌV1wnY22E11cvɶ2E11cv.%F d&cc͹у*.11c$Y3@3mΌV1wnm1, F`6F \661, F`6F \c0JL#0 ǛsU]ۮc(:2L#0 ǛsU]ۮc 6L#0 ǛsU]ۮcEd&cc͹у*.1PL#0 ǛsU]ۮc88afRnt`ʱud[C 2 ǛsU]ۮcuF\)f<۝2bs%C4e ,S3mΌV1wn0)Ny:0eXݺ2F-efYf<۝2bs=Ϩe)6F \Nta*0afRnt`ʱud {3Yf<۝2bs;DafRnt`ʱuaf:3 фJp,4My:0eXݺ1%*a0 ǛsU]ۮc(BQf<۝2bsBpV3mΌV1wnd DckU&mhc͹у*.1!(cj:c$6nt`ʱuc%J#Zc&mhc͹у*.11%Q&nt`ʱucG [3mΌV1wnhf<۝2bs8:֫2M ǛsU]ۮc88cGZptIm<1cvƎֵ\1M ǛsU]ۮc$b蒨Fy:0eXݺ2F-xc͹у*.11l} h1cv>HűkU&mhc͹у*.11l} c֫2Mi6F \Hű2F-Zc&mhc͹у*.1:$33mΌV1wn1oy:0eXݺ2XpV3mΌV1wn2lnt`ʱuej:c$-y:0eXݺ2XYv\1lOy:0eXݺ2XYv\1M ǛsU]ۮcF:$33mΌV1wnqf<۝2bs62 ǛsU]ۮcF8ptI[Znt`ʱucZ6 f<۝2bs61n֫0ɰ[Znt`ʱudZ.$1%Q&nt`ʱudZ.$1oy:0eXݺ2F-efn c͹у*.11k,0]WLd6F \HŬC$bYv\1lOy:0eXݺ2F-ef#˵62lրf<۝2bs=Ϩ:$33mΌV1wnjc ǛsU]ۮcpV3mΌV1wnjcWLd6F \s51N֫2Mi6F \s51N֫0ɰ[Znt`ʱu`є1%Q&nt`ʱu`є1oy:0eXݺ0JYdhn c͹у*.1T:#FP%ݭWLd6F \ P,Cv\1lOy:0eXݺ0JYdh$62lրf<۝2bs6DFr0c͹у*.1m[3mΌV1wnle+@6F \M2mZ6 k@3mΌV1wnldv\1lOy:0eXݺ2mmpt6 k@3mΌV1wnT`DFr0c͹у*.1]Jf<۝2bs;фf<۝2bs;ф]J錓`1cv.%F TeWLd3mΌV1wnT`.%FZpt6 k@3mΌV1wnuFcU`6F \NǺ1xc͹у*.11e+@6F \NǺ11֫2M ǛsU]ۮc'pcQTgkU& ǛsU]ۮc'pcQTgkUld-y:0eXݺ2wDFr0c͹у*.1-tF-6F \Nn c͹у*.1-tFNѵ錓`1cv:#'p[`ptIm<1cv:#'p[`pt6 k@3mΌV1wnllcJ9L1cv-6F \662 ǛsU]ۮcݭWLd6F \661Z6 f<۝2bsj:c 6F \c0J蒨Fy:0eXݺ0T`ż1cvtf Q-Zy:0eXݺ0T`tf Q\1lրf<۝2bsYta*0af:3UфZ6 f<۝2bsYta*0af:3UфZc&mhc͹у*.1 tITg# f<۝2bsAѐż1cv[nt`ʱuceFC(:2錓`1cv6PtekU& ǛsU]ۮc(:2AѕWLa`1cv,M:$33mΌV1wn8bnt`ʱud&-Zy:0eXݺ2 hlIU\1lրf<۝2bsp,Mj:c$-y:0eXݺ2 hlIU\1lOy:0eXݺ2 hXGZptIm<1cv,M'VcUpt6 k@3mΌV1wn8d&ֵ\1M ǛsU]ۮcEtITg# f<۝2bs,,bnt`ʱucHf<۝2bs,,cHZ6 k@3mΌV1wni1X]WLd3mΌV1wni1X]WLa`1cv(tITg# f<۝2bs%xc͹у*.1Pn c͹у*.1P%Z6 k@3mΌV1wn(ptIm<1cv(WLa`@ k꾇WeABםaBםam3@T./usr/lpp/cluster.es.assist/inst_root3AA lU -omAםa1םa1םa&-./usr/lpp/cluster.es.assist/inst_root/liblpp.amm   e "AS_adls'/=CDIMNTimnort-.0EHOPRcpuv #12346:>GLbq57BFVWYgh89Ufxy,`wz()Q@j*<p ? ?$$ ?g!0g3а0,0$CC?%Bfu*J.bAB-F.$ Mz- @?€'a CC?%Bfu*J.bABRbAU欧0Џxd^H") sAʅ/7rhHHh  3 @@†?_,7PYEʵRPTUd-y;jVwKfKr$+,P<^֒pHHjI݇;*b)F5gto9"B (<ܳEHi+ygA(&pQzG2vTŊR^jl)|sDeQRyg‹ޑVrB" E^ЌdP IZT*ZȐ5E˰L^0` Ȩ \+shb VglW#ue 3sȨ \VV2)2k#%EQغ„@N!<@ۙJ^r2ĉ3E]b{B4ā#"5#6yȐYEI@t",cIuITn7i+yȦA'7Rw Gd8[m Ɇw֪U7V盌kGЌdP IZT*ZȐ5E˰L^PB7ҙkn{B= Ar5mn&nykjP%&T]mv6sRJ1{VXP72 EcP` Er$+ QRy"T80U$Zf*O7sES| ODkVT)y"TBReEl8+&ZV\.[n1!Y7=o%&ֳ1Ry"TBReEl8+&ZV\/" Nzo ^nؔ.o[`7֎yȐYEIĉRdW7]kY) sʅ/7ro[`7֎yȐYEI "5!TZI "5! 1$Zf*O7sES| M#" ^no[`7֎yȐYEI> 1$Zf*O7sE#{VT)y)V Q%0 U` *Q%0"%U& }blִ#X mL%&T]n[c%*.Z9"Boe'D4X7]kY 1$Zf*O7p)hy \('G  ^nTk%W5%EkG 2' "<ԓ/IHI[PN/< 5+*9!Y7 |",cIuITnSc"x#hI8 4ǍA(&pQzGeB•`˩Qc PY Qc R UQRk)S9 4)ЌbP& /:*ͱĖ2b+9s( 2)zPyɠ=(" s֒oq@7RwsDd*O7p)ho%&ֳ1RyOCEd^rhJ"#"Di#H/" A#H9eB(X5r$+ QRyOCEs.5ֵ |",dS"@zQ!#N D%o7q =!'sʅ/7p)hL҃MDDxH8x$i[9s( 2)zPyɠ=(" s֒ pH =^oYP0X2eDXT)Vm+#$eDXTk"T)Q2sDd*O7p)ho%&ֳ1RyOCEd^rhJ"#"Di#H('G  ^nTk%W*f1h眉 9TnScKMufbwȽ(<DGDӇFI[PN(=@.) sʅ/7t֎yȐYEI> 1$Zf*O7p)hL҃MDDxH8x$i[Esʅ/7q*DJ2T)XdsZ9"Boe'D4X7]kY) sʅ/7rkG 0%o7.Qz@3b/vd쩋՝ټR眉 'rOCE/zGI[˂('G ^) /vd쩋՝ټR眉 'rOCE/zGI[˂('^ ݇;*b)F5gto9"B (<ܰSc ޑVr 2vTŊR^jl)|sDeQRy`!##@ `K݇;*b)F  00+а0,0$ OᡁPoJl jY.[m2$b@d׮Р PP? @Q0/ 403 T)VmwQrT"ٝE3d-y)#`h8H e2 S QֲVd$0eu`$$$ Ѝ:1 Dxƈ SxЍ0jԯ%eudʄJ82ֶ$&\/hG# !X$``X6WS(PHJε%,a;B=jdͰ\VA :>ЌՖ$FL Jg "fZLҦ)UFD-u]bP0$fЍE@`5n[ЏhFC\8 [b,(IE@`5'E I[]ԩ*/R^Ֆ$q?y8RY$I(7@r#F$!!sDd*O7rg QaNo%&ֳ1Ry/" Rz#\KܚW1d]'Vଘg}jYsغnyƴsDd*O7rg QaNo%&ֳ1Ry/" Nzo ^ngZY)2u qh眉 9Tnτ@œKMufbw9I[^E7A8") /vd쩋՝ټR眉 'r> /zGI[˂('^ ݇;*b)F5gto9"B (<ܴτ@‹ޑVr 2vTŊR^jl)|sDeQRyiE##@ `K݇;*b)FhHXPCB`'†?a^J*Ͱ..Ud[5V[`]TeHĀbɯ\%`P4 0 3АCB`g  O%Bfu*J-[`, 欧0Џxd^H"ЌՖ$FL Jg "fZLҦ)UFD-u]b#6o2*#u {B0mjYaBL*հ̡:(JLmIQzb.&nxA!6Ṟ"LFAts`Ѝ:1 DxH @ 0AaX`X6WS(PHJZmufKY, 3 lA X0 QZ9"Boe'8# " s.5ֵ%o7ty! ^n[`Y0*Ju qh眉 9Tn`4%$Zf*O7sES| M#KUVج.o[`7֎yȐYEINH\KMufbw9I[^E7A8") /vd쩋՝ټR眉 'rӂ1 ~ܸ"qE0/ 403 T)VmwQrT"٪Ⱥldœ^KB(  ? ? @Q0/ 403 < U`]\U*ȶj*)k2,d-y)#"Gh E7#]J[FWVLJT-kbLl/EЏ9r`K po,Im'[^0$ACEMku B?Ƚ(") sʅ/7ro[`7֎yȐʇ7i+y%E-fEpc;&&ʋ8#87vȥf00"J2KaY0`6D&e9!aa?`Pа0,0$CP/y*6VUlRTRdY*3UIQKYZVw@) /vd쩋՝ټR眉 'rӂ18E&^֒PN( 1y痻2vTŊR^jl)|sDeQRyi"ԓ/zGI[˂('G ^) /vd쩋՝ټR眉 'rJHi+ypE#y{'eLX() sʅ/7t.[n1!Y7@ ' " E$Zf*O7q($`4$iƢ s֒^yoYP%HaEmk(s%fu qh眉 9TnPI8iH.o%&ֳ1RyA$A#H&5KEϊ`\K77V盌kG) /vd쩋՝ټR眉 'rA$A#H#/Hx^y̝1bW[7_!YbuTnY($`4$i~ܸ"qDye̝1bW[7_!YbuTnY($`4$i~ܸ"qDyqL@i{'eLX( BC@_(C?F<(`_ J*Ͱ..UdY6Y[mdMf[bQe欧00D4+s5r$+ QRy s.5ֵxPH|`4$i7i+y 0YoYP+s5r$+ QRy s.5ֵxPH|`4$i7i+y ^nTUEme9]m) /vd쩋՝ټR眉 'rѐx%o7.Qz@3b/vd쩋՝ټR眉 'rѐx%o7.QzY{'eLX() sʅ/7ro[`7 F_0`𐐠7CB`g @XoJl jYJQ:ZVw@ /dev/null 2>&1 # Loop through and add information to the ODMs for name in ${!parameters[*]} do echo "HACMPsa: \n\ sa_id = $SA_ID \n\ component_id = $COMPONENT_ID \n\ name = $name \n\ value = ${parameters[$name]} \n\ " done | odmadd 2>/dev/null # Perform Migration, if specified if [[ -n $MIGRATION_COMMAND && -n $PREVIOUS_VERSION ]]; then log_msg "Preparing to migrate from previous version $PREVIOUS_VERSION" CLSA_VER=$PREVIOUS_VERSION $MIGRATION_COMMAND fi # Perform Discovery, if specified if [[ -n $DISCOVERY_COMMAND ]]; then log_msg "Preparing to run discovery $PREVIOUS_VERSION" $DISCOVERY_COMMAND | \ IFS=: read SA_ID SA_NAME COMPONENT_ID COMPONENT_NAME INSTALLED if [[ "1" == $INSTALLED ]] ; then dspmsg -s 7 assist.cat 10 "\ The %s component of %s can be configured on the local node because the \n\ software is installed. Please run \"smit clsa\" to start configuring \n\ them to make them highly available with HACMP. \n\ " $COMPONENT_NAME $SA_NAME fi fi log_msg "Finished installing Smart Assist $SA_NAME Component $COMPONENT_NAME" exit 0 =0  kH$o@ .םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/sbin/claddsaapp@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/claddsaapp.sh 1.8 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2012 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)99 1.8 src/43haes/usr/sbin/cluster/sa/sbin/claddsaapp.sh, hacmp.assist, 61haes_r714 1/30/12 08:38:17 ############################################################################## ## ## claddsaapp ## ## Usage: ## claddsaapp -a ApplicationID ## claddsaapp -a ApplicationID name1=value1 name2=value2 ... nameN=valueN ## ## ############################################################################## . /usr/es/sbin/cluster/sa/sbin/IO typeset version='1.8' #----------------------------------------------------------------------------- # Functions: #----------------------------------------------------------------------------- # errmsg(string:id, ...) # apCheckPassedVarArgs(array:byref) # apAddMetaDataEntries(string:appid, array:byref) # apRemoveMetaDataEntries(string:appid) # apUsage # #----------------------------------------------------------------------------- # Message Catalog Entries #----------------------------------------------------------------------------- typeset -A _MSGS _MSGS[1]="Usage:\n\t%s -a ApplicationID name1=\"value1\" name2=\"value2\"\n\n\ where name can be any of APPLICATION_NAME, SMARTASSIST_ID, COMPONENT_ID,\n\ RESOURCE_GROUP, or otherwise.\n" typeset _MSGS_CATALOG=assist.cat typeset _MSGS_SETID=1 typeset _SHPATH=/usr/es/sbin/cluster/sa/sbin/ # #----------------------------------------------------------------------------- # Global Declarations #----------------------------------------------------------------------------- typeset _PROGRAM=${0##*/} typeset _METADATA_ODM=HACMPsa_metadata # ############################################################################## . $_SHPATH/saapp_common #----------------------------------------------------------------------------- # # Name: apUsage # function apUsage { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x errmsg 1 $_PROGRAM exit 1 } #----------------------------------------------------------------------------- # MAIN #----------------------------------------------------------------------------- [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset VARGS if set -- $(getopt a:o: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -a) ApplicationID=$2 shift ;; -o) ODMDIR=$2 shift ;; --) shift VARGS=$* break ;; esac shift done fi # The application ID must be specified [[ -z $ApplicationID ]] && { apUsage } log_msg "claddsaapp: ApplicationID=$ApplicationID" log_msg "claddsaapp: ODMDIR=$ODMDIR" # The following line was commented out to prevent logging of password in plain text in sa.log #log_msg "claddsaapp: VARGS=$VARGS" apDeleteMetaDataEntries ApplicationID VARGS apAddMetaDataEntries ApplicationID VARGS apAddResourceGroupAssociations ApplicationID VARGS log_msg "claddsaapp: exit 0" exit 0 RY_F k$o@! .םa՝a֝a&! 2vT./usr/es/sbin/cluster/sa/sbin/cllssaapp@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/cllssaapp.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)00 1.4 src/43haes/usr/sbin/cluster/sa/sbin/cllssaapp.sh, hacmp.assist, 61haes_r714 11/28/11 14:56:13 ############################################################################## ## ## cllsaapp ## ## Usage: ## cllsaapp ## ## ############################################################################## . /usr/es/sbin/cluster/sa/sbin/IO #----------------------------------------------------------------------------- # Functions: #----------------------------------------------------------------------------- # errmsg(string:id, ...) # apGetAllSmartAssistIDs() # apGetAppIDsForAssist(string:sa_id) # apGetApplicationName(string:app_id) # #----------------------------------------------------------------------------- # Message Catalog Entries #----------------------------------------------------------------------------- typeset _SHPATH=/usr/es/sbin/cluster/sa/sbin/ # #----------------------------------------------------------------------------- # Global Declarations #----------------------------------------------------------------------------- typeset _PROGRAM=${0##*/} typeset _METADATA_ODM=HACMPsa_metadata typeset _SA_ODM=HACMPsa # ############################################################################## # Include common functions . $_SHPATH/saapp_common #----------------------------------------------------------------------------- # MAIN #----------------------------------------------------------------------------- [[ $VERBOSE_LOGGING == high ]] && set -x [[ $VERBOSE_LOGGING == high ]] && version='1.4 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/sbin/cllssaapp.sh 1$' typeset VARGS if set -- $(getopt o: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -o) ODMDIR=$2 shift ;; --) shift break ;; esac shift done fi typeset sa_ids typeset sa_id typeset app_ids typeset app_id log_msg "cllssaapp: ODMDIR=$ODMDIR" typeset sa_ids=$(apGetAllSmartAssistIDs) for sa_id in $sa_ids; do app_ids=$(apGetAppIDsForAssist $sa_id) log_msg "cllssaapp: sa_id = $sa_id" for app_id in $app_ids; do log_msg "cllssaapp: app_id = $app_id" app_name=$(apGetApplicationName $app_id) log_msg "cllssaapp: app_name = $app_name" [[ -n $app_name ]] && echo $app_name done done log_msg "cllssaapp: exit 0" exit 0  kR$o@ .םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/sbin/cllsserviceips@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/cllsserviceips.sh 1.8 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2012 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)01 1.8 src/43haes/usr/sbin/cluster/sa/sbin/cllsserviceips.sh, hacmp.assist, 61haes_r714 7/7/12 14:42:55 ############################################################################## ## ## cllsserviceips ## ## Usage: ## cllsserviceips ## ## ############################################################################## # Load the common clmgr/clvt functions library . /usr/es/lib/ksh93/func_include # #----------------------------------------------------------------------------- # Message Catalog Entries #----------------------------------------------------------------------------- # typeset -A _MSGS _MSGS[1]="# Label\t\t\t\t(IP Addresses)\n" typeset _MSGS_CATALOG=assist.cat typeset _MSGS_SETID=2 typeset _SHPATH=/usr/es/sbin/cluster/sa/sbin/ FPATH=/usr/es/lib/ksh93/hacmp # #----------------------------------------------------------------------------- # Global Declarations #----------------------------------------------------------------------------- typeset _PROGRAM=${0##*/} # ############################################################################## # Include common functions . $_SHPATH/saapp_common #----------------------------------------------------------------------------- # MAIN #----------------------------------------------------------------------------- errmsg 1 ExistingServiceIPs=$(KLIB_HACMP_get_unused_service_labels) typeset host tmp ip typeset -A labelXip for label in $ExistingServiceIPs; do /usr/bin/host $label | read host tmp ip ip=${ip//[\(\)]/} label=${label/\.*/} labelXip[$label]=$ip done # # Print out discovered labels, if they're not already part of the # defined HACMP service labels # /usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | grep -v none | sort -u | while read label ip; do ip=${ip//[\(\)]/} label=${label/\.*/} labelXip[$label]=$ip done for label in $( for label in ${!labelXip[*]}; do echo $label done | sort); do ip=${labelXip[$label]} printf " %-35s (%s)\n" $label $ip done exit 0 g "c lM$o@eR.םa՝a֝a&n22vT./usr/es/sbin/cluster/sa/sbin/clquerysa@@   -e #ainost"$_cdlmpru/:=ADEINOS[]fghy).;CGLMPRT\bqv&(012>BFUVYwx{}*,Hk|!%'35z49Q+678f@ 6+*b(d A`ȌPi!a|"2N!Wb)/kh9 tL4 @P@-NEE@ 800@$h@@1kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֱc[rS^7'1c[.Hf$b/kK| Ee7bSri[U70 f5bZxIah:n8alkXu,k?YUF&5c[OY( 7c+pֱԸNXW|^ax#7lVӈ@-oOoY{XUG-12D8lTV0L5W*IM[ by7)lk[^7.aֱ0zт pq YBP(Hp ֱkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֱV+O xeUJ( `LhXPDȓ(\1೘Ah@#.rN&FIi&S$C6*+\&M^_&bzs,Zc'deG  !/`LY{XܝNv@QE1ecrwSŗ,Zc'dt.$CnRH 0 jֱ)F NJ/|RjE+ i|o13W. (IQL|L jezW lVj9i'x)29i)r\^/{(Nf*>R|)F L6*+\&H3W/{ҸMkf"3WQO)>Sbx)0بap7)\^/{(Nf  @Q0&67/fkzkc"/r泞gM% hE.ah| n=c+p|/vg3O#Q]4[ŗ-7F0 rUܘ7k=E-.va99ǔ\W͍cp*+1!o cX'o#1ǁ>vLkֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵk /fÚS 3lDe @K9< 7/fkxfM+ecXĮk iSc^^"ɍcq]K5| .EmWJOUȁ^>&5e,ܘ7"aa}n +kq1n\㊮|Z*1n%s]hHk87.5| .˕ϜwiSc,ܰktU7ܘ7N"ON05q,Y|k>Prf𰰶53|a/hm)&-x8,R($L8pO2h| s"Vsogͫr?r84fg ҋ?ܲ6X &\p[1Yg, ڪcpbFozs7]ec+a|o| Ee7QCy(姺R|ъ I0ݫkpWO[2 k9crPUyc|7$5ưFo3Nvgbǃ"y@DÎ4&˗^W>,nW>r&ڷ+CE+Lzsr,vxHA\g38AI0k XRKc?䁅G ַ%)_'!)|ъ )z1QX4JnM;IE1- A\' 93RX9\qrrc?c,[=ܚv8vp pf R>NAq(E+cp|"gQ6-KP8z+(;KzR H9K`M1JLJ,ynOr,{/.IU$g+=Y-Op4|F{)4!H{9EA7z+xJJX\&EiZ+z+?Y @-<%)r,{.;8 W#aJ0UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUS3|`5ӝ'1n"V5ӝ#{X:o48QOtMcq]K5Ʊ(*Ʊi> k\ZcXax#7;ZNL,[8q YBP(Hqƞdr E6RVsrgͫrLR1 Hq;Xo)rg$Ȱ \&s?ӉNvJ HE+`L3 iHTpkr\"rr=&\' >NBRr,|.8PW"="Sc0Tj$b/kYGM2 k%JOD7(^cXYiScZ{'z1QX9۠rj27brܵӴcq+BCX1k /f0k͕"Ig"$ (T;;8̚;._y\fչ\$@qi3()#9`Y$@nTzcʏ@Vs)rgͫr?R3fչ\I6 XEzw䁅G ַ%)_'!)|ъ )z1QX4JnM;KgQgeg"rK.\3+< hz1QX4|焠.E|p\g3W()#9`Y$@o' rKF*+\&g.A9Kc"\qEc Ѓ{bӴóeˆs5pgq23a*=DW,,v|"E+c"\qDŽE|p|"c?c,[ґc"\'. Hq;Xl =,v|ъ Ec zG3NVOJE|q3aJ03fչ\)j'P8rc?ioJY )r, "=IEEA7z+xJJX\&EiZ+z+bC=Cd.\3?c,[gdX\'.g>1heY @Pr"ǽ"3P8r;8𔜬g+g>1he vq(9KcޑpǨlRaJ0UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUS3|`5ӝ 6.@5WYXƱm'VQ|aъ 1n=c+p]rQOtOzW f70$+apyk\ZcXax#7;Xl6*+\&"Ig"$ (T;;8̚;._y\fչ\$@qڷ+P@D2$$@q3fչ\E+c? aQupWA_' bhA^TV0MNgQgeg"rKsJ&Dcg.A`P.p pSriYr\6X@'>J.g"qVNVE+㏄R)Y0{?Ҍ-UgyW&UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUS3|`5G*TzܥI7]ec+ yJ9i)r<_%JOp>-+0ZLo 7ԸNCX(姺R|[kr)>Sޕo0[1w&9KcXJcv^񆣕*=nR$a&-x8,R($L8pO2h| s"Vsʏ@#Mgx 38AIQʕ7)`DGLxǕ1Nc? aQupWA_' bhA^TV0MNgQgq23*=nR$ ;>NAhEc Ѓvz1QX4 /F**g.AoӴJnM;HXyQ G;>NBR9lUgyrI\Z 0[τ`MmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU11x#7XrQX4 K!n"V5AEc 9KJ(Ӵp>|>[oZ(姺R|+aS2 k%JOp>cBъ rƱE.cXJcXax#7T6*+\&7)`D0?<DHP&v8vq4v\gͫrGHVsJ&DLjxk=L'16)X ,qrrHqhEc Ѓ.A8ܚvc?ӉlTV0MnR$ c?䁅G ַ%)_'!)|ъ )z1QX4JnM;IE1-Tzcg=,  ( "Pbh G;81QX4 ,&v\g3W [{?ъ s?Ҍ-Ug}Vz1QX4{r0KlTV0MnR$cڪcpbFo\ >H^6Ʊ+X7%\%JO(5Ǭeu.70 +R⋓5/5W7)X(iECJ ( < 4LD&Ʊu!o53|a\ >H^73jܮ|"<VsJ&D16/kc?c,[Tzeˆs5pgAXP@@y23ӕY{Xʏ@ K  ("$@4dg6熔(L14 *873s[8ecg`8;qFTbh=,v(p$0`!0b 8?׃ŰH+駅1"P@D2$$C|3J&DgQ3jܮyECJ ( <ǁ% F*+\&xiAȓ@ y2 Hi@q z v(xh8?iu `(^ء0?0``nj?g`N(l %b i c?Q Hi@q z!NekW X.xS?c,[<.\3?*PDHiA< hyECJ ( <qVVsDAcg$T48=҂ɐ X.xS?c,[gD935DAg3iڷ+P&" x<"DL  JAt™bC<4LD'.)XDAl0{?Ҍ-617/fkqEɠEchIkc^qEQOtOI򈽬otֹ%N䣖IVQ|`&iy ENf0&cN(4|o|0nP^ o>H^7Țъ s]hKjz+(IJnM;K#05Ǭeu.70 +R⋓5/5W7)X(iU<TrOnRƀPܚv`OFx cXJА7 s 0ӊ.M$b/kBNLnW>JgͫrGH?m[*=D < % xh9^NA`N(Z]C8`X ' ء0? x&v^ bV.2 Q!GHVڷ+'!)cqIC7>ʏ@ KD *TQ4 "v 'g.0,rk;8fg0c?C1VQ$JAt™rr.)X ,iGH?=FL"q>pOܲ73W\dͫr?U9K&1xJ牃HxJ(@y`a ,^GHxiAȓ@/ \&<@xiAȓ@,^ "$c43s6c`6CQThha7rXYyX3a_p'Ϋr;ZYecab9m|K?c-7Qʝ.eu &<@\g3WLY{XܝEr9i)rQʕ7)`D3*=ceu $C^P@D2$&<@\g3WLY{XܝRʨ>R|HAlTV0LT6*+\&7)`D3*=D<4BdILxiRFy"՜t@|OW,.v[9PH6x%egHgzs˗ j1-3ʏ@ pf c,[P@D2$$C.\3?,nNy;[eTr)>S$A;Xl < 9+gŗO0kt.@`YبapgTzxiAȓ@{?NV)/kagac?fZo1-&#a֓˗ ji9c,[[ :yQB|.Җ8P[Qrh$#{Xy2N(8E+xbXed_k ^oM}a &"^  JAt g?ۈRj⋓Z0R=yǙֵ#;MyNLo8|;|oE)s+z&rqqjS^SE+?& " $DpɨˀY/9^G֯B *vVz(@@!!`NekW8& .v "[R&PED4>J=8pf E1ecrwS|3ݥ:CCȠ"w4B֌OuHFXF3AP.qVvgQrpVv\g3W $@SAdU#cO#ACq]4xhx4LyBCMk>Ja!|"2N!Wb)/kEn}^x0y 駳ӕh " H|".C$* E5;Xd2BS^7'u='C>JH(bV.2 g(#ACq]4a{?c,[y#/s5pg?MyNq+z1]kK98E+En ⷸU;kR3W>H^ _3VkpOt#\^Qr|"ZN(='a3OaNT@ 6⋓A'ɔ ElgqE)X.C$* E5;XbzoC N(4!RH(bV.2 S?Eҗ3W\pzт N03<^ފkvrgy0^ޓEcx(iKq[ti3 3W)\1a #MEF\=| ̭j/"JA-e\Eclkp0|O* HORa g?ӊ.M$b/kBN&Pg+gtyZ+54B[' 3Wr]9ɟ"Hː MyNޛSNH)!Q7=> t `>LaLgqE)X.C$* E5;XbzoC N(4!RH(bV.2 Sb+pW"HfYb)Yǧ\".,nNzO1ll<4<&H&1); then while [ $# != 0 ]; do case "$1" in -a) ApplicationID=$2 shift ;; -q) Query=true ;; -o) ODMDIR=$2 shift ;; --) shift VARGS=$* break ;; esac shift done fi # The application ID must be specified [[ -z $ApplicationID && -z $Query ]] && { apUsage exit 2 } typeset -A pairs typeset output if [[ -n $ApplicationID ]]; then log_msg "clquerysaapp: ApplicationID = $ApplicationID" apGetAppNameValuePairs $ApplicationID pairs [[ -z $VARGS ]] && { typeset key pairs[RESOURCE_GROUP]=$(apGetResourceGroups $ApplicationID) for key in ${!pairs[*]}; do value="${pairs[$key]}" while [[ -n $value ]]; do echo $value | while IFS=: read arg remainder; do value=$remainder echo $key="$arg" output="$output $key=$arg" done done done } [[ -n $VARGS ]] && { # User entered a list of names output="" for name in $VARGS; do if [[ $name == RESOURCE_GROUP ]] ; then data=$(apGetResourceGroups $ApplicationID) else data="${pairs[$name]}" fi while [[ -n $data ]]; do echo "$data" | while IFS=: read arg remainder; do data=$remainder echo $name="$arg" output="$output $name=$arg" done done done } if [[ -n $output ]]; then exit 0 else exit 1 fi else apGetAppIDSFromPair VARGS exit $? fi exit 0 k!$o@j.םa՝a֝a&j2vT./usr/es/sbin/cluster/sa/sbin/clrmsasaa@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/clrmsa.sh 1.8 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)26 1.8 src/43haes/usr/sbin/cluster/sa/sbin/clrmsa.sh, hacmp.assist, 61haes_r714 11/28/11 14:54:17 ############################################################################### # # Name : clrmsa # # Description : Uninstalls a Smart Assist, # # Returns : # 0 - Success # 1 - Failure # 2 - Invalid arguments # # Arguments : -s SmartAssistID # # Environment : VERBOSE_LOGGING, PATH # ############################################################################### DEFAULT_LOG_FILE="/var/hacmp/log/sa.log" SABIN="/usr/es/sbin/cluster/sa/sbin" typeset version='1.7' . /usr/es/sbin/cluster/sa/sbin/IO ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ usage() { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u dspmsg -s 9 assist.cat 1 "\ Usage: \n\ \tclrmsa -s SmartAssistId [ -c ComponentID ]\n\ where: \n\ \tSmartAssistId is the unique identifier for the Smart Assist \n\ \tComponentId is the unique identifier for the Component \n\ Uninstalls a Smart Assist from the machine. \n\ " exit 1 } ############################################################################### # Start of main ############################################################################### [[ "$VERBOSE_LOGGING" == "high" ]] && set -x [[ "$VERBOSE_LOGGING" == "high" ]] && version='1.8 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/sbin/clrmsa.sh 1$' typeset SA_ID typeset COMPONENT_ID typeset UNINSTALL_COMMAND typeset SA_LOG=sa.log while getopts :s:c: arg do case $arg in s) SA_ID="$OPTARG" ;; c) COMPONENT_ID="$OPTARG" ;; :) dspmsg -s 9 assist.cat 3 "Missing option %s\n" $OPTARG usage exit 2;; ?) dspmsg -s 9 assist.cat 4 "Unknown option %s\n" $OPTARG usage exit 2;; esac done shift $(($OPTIND -1)) # Check: # SA_ID must have a value # COMPONENT_ID must have a value # There must be at least one name=value pairs if [[ -z $SA_ID ]]; then dspmsg -s 9 assist.cat 5 "The Smart Assist ID must be specified via -s\n" usage exit 2 fi if (( $# )); then dspmsg -s 9 assist.cat 6 "Unknown parameters\n" usage exit 2 fi if [[ -n COMPONENT_ID ]]; then COMPONENT_IDS=$COMPONENT_ID else # get a list of all Smart Assist components COMPONENT_IDS=$( odmget -q "sa_id=$SA_ID" HACMPsa | sed -n " /.*component_id = \"/ { s/// s/\"$//p }" | uniq \ ) fi # Look for all the UNINSTALL_COMMANDs for the given Smart Assist components echo "Preparing to remove Smart Assist $SA_ID" >> $SA_LOG for cid in $COMPONENT_IDS; do UNINSTALL_COMMAND=$( \ odmget -q \ "sa_id=$SA_ID AND component_id=$cid AND name=UNINSTALL_COMMAND" HACMPsa |\ sed -n " /.*value = \"/ { s/// s/\"$//p }" \ ) if [[ -n $UNINSTALL_COMMAND ]]; then echo Smart Assist $SA_ID Component $cid: \ preparing to run \'$UNINSTALL_COMMAND\' >> $SA_LOG $UNINSTALL_COMMAND | tee -a $SA_LOG fi done # remove entries from HACMPsa_metadata echo "Removing Application registrations with Smart Assist $SA_ID" >> $SA_LOG $SABIN/clrmsaapp -s $SA_ID # Remove all entries for the given Smart Assist echo "Removing Smart Assist entries for Smart Assist $SA_ID" >> $SA_LOG odmdelete -q "sa_id=$SA_ID AND component_id=$COMPONENT_ID" -o HACMPsa \ > /dev/null 2>&1 exit 0 3haes/ kH"$o@.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/sbin/clrmsaapp@@#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/clrmsaapp.sh 1.10 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sbin/clrmsaapp.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################## ## ## clrmsaapp ## ## Usage: ## clrmsaapp -a ApplicationID ## clrmsaapp -a ApplicationID name1=value1 name2=value2 ... nameN=valueN ## clrmsaapp -s SmartAssistID ## ## ############################################################################## # # #----------------------------------------------------------------------------- # Functions: #----------------------------------------------------------------------------- # errmsg(string:id, ...) # apCheckPassedVarArgs(array:byref) # apAddMetaDataEntries(string:appid, array:byref) # apRemoveMetaDataEntries(string:appid) # apUsage # #----------------------------------------------------------------------------- # Message Catalog Entries #----------------------------------------------------------------------------- typeset -A _MSGS _MSGS[1]="Usage:\n\t%s -a ApplicationID\n\ \t%s -a ApplicationID name1=\"value1\" name2=\"value2\"\n\ \t%s -s SmartAssistID\n\n\ where name is one of APPLICATION_NAME, SMARTASSIST_ID, COMPONENT_ID or\n\ RESOURCE_GROUP\n" _MSGS[2]="ERROR: Smart Assist Application ID: '%s' is not defined to \n\ the HACMP cluster configuration.\n" typeset _MSGS_CATALOG=assist.cat typeset _MSGS_SETID=4 typeset _SHPATH=/usr/es/sbin/cluster/sa/sbin/ # #----------------------------------------------------------------------------- # Global Declarations #----------------------------------------------------------------------------- typeset _PROGRAM=${0##*/} typeset _METADATA_ODM=HACMPsa_metadata PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/ . /usr/es/sbin/cluster/sa/sbin/IO # ############################################################################## # Include common functions . $_SHPATH/saapp_common #----------------------------------------------------------------------------- # # Name: apUsage # function apUsage { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x errmsg 1 $_PROGRAM $_PROGRAM $_PROGRAM exit 1 } function apRunDeinstallationCommand { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset sa_id=$1 [[ -z $sa_id ]] && return 1 COMPONENT_ID=$(odmget -q "application_id=$sa_id and name=COMPONENT_ID" HACMPsa_metadata \ 2>/dev/null | awk -F= '$1 ~ /value/ { print $2 }' | sed -e "s/\"//g") COMPONENT_ID=$(echo $COMPONENT_ID) [[ -z $COMPONENT_ID ]] && return 1 DEINSTALLATION_COMMAND=$(odmget -q "name=DEINSTALLATION_COMMAND and component_id=$COMPONENT_ID" HACMPsa \ 2>/dev/null | awk -F= '$1 ~ /value/ { print $2 }' | sed -e "s/\"//g") DEINSTALLATION_COMMAND=${DEINSTALLATION_COMMAND/ /} [[ -n $DEINSTALLATION_COMMAND ]] && { cmd=$DEINSTALLATION_COMMAND cmd=${cmd/ */} [[ -x $cmd ]] && { $DEINSTALLATION_COMMAND $sa_id } return $? } return 0 } #----------------------------------------------------------------------------- # MAIN #----------------------------------------------------------------------------- [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset VARGS typeset ApplicationID typeset SmartAssistID typeset RunDeInstallaion=false if set -- $(getopt da:s:o: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -d) RunDeInstallaion=true ;; -a) ApplicationID=$2 shift ;; -s) SmartAssistID=$2 shift ;; -o) ODMDIR=$2 shift ;; --) shift VARGS=$* break ;; esac shift done fi # The application ID must be specified [[ -z $ApplicationID && -z $SmartAssistID ]] && { apUsage } # Cannot specify both the smart assist ID and the application id [[ -n $ApplicationID && -n $SmartAssistID ]] && { apUsage } [[ -n $ApplicationID ]] && { # Check to ensure the application ID is defined apIsApplicationIDDefined $ApplicationID || { errmsg 2 $ApplicationID exit 1 } [[ $RunDeInstallaion == true ]] && { apRunDeinstallationCommand $ApplicationID } [[ -z $VARGS ]] && { apDeleteResourceGroupAssociations ApplicationID } apDeleteMetaDataEntries ApplicationID VARGS exit $? } [[ -n $SmartAssistID ]] && { typeset app_ids typeset app_id VARGS="" app_ids=$(apGetAppIDsForAssist $SmartAssistID) for app_id in $app_ids; do apDeleteMetaDataEntries $app_id VARGS || exit 1 apDeleteResourceGroupAssociations app_id done } y k&K#$o@.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/sbin/clsapost@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/clsapost.sh 1.9 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)04 1.9 src/43haes/usr/sbin/cluster/sa/sbin/clsapost.sh, hacmp.assist, 61haes_r714 11/28/11 15:21:45 . /usr/es/lib/ksh93/func_include . /usr/es/sbin/cluster/sa/sbin/IO ############################################################################## ## ## clsapost ## ## Usage: ## clsapost [-v] ## ############################################################################## #----------------------------------------------------------------------------- # Functions: #----------------------------------------------------------------------------- # errmsg(string:id, ...) # #----------------------------------------------------------------------------- # Message Catalog Entries #----------------------------------------------------------------------------- typeset -A _MSGS _MSGS[1]="Usage:\n\t%s [-v]\n\n" _MSGS[2]="ERROR: The cluster topology is not defined. If you are receiving\n\ this message after running a smart assistant, then please provide a snap -e\n\ to HACMP cluster support.\n" typeset _MSGS_CATALOG=assist.cat typeset _MSGS_SETID=6 typeset _SHPATH=/usr/es/sbin/cluster/sa/sbin/ # #----------------------------------------------------------------------------- # Global Declarations #----------------------------------------------------------------------------- typeset _PROGRAM=${0##*/} typeset _METADATA_ODM=HACMPsa_metadata typeset _SA_ODM=HACMPsa typeset version='1.9 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/sbin/clsapost.sh 1$' # ############################################################################## # Include common functions . $_SHPATH/saapp_common #----------------------------------------------------------------------------- # # Name: apUsage # function apUsage { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x errmsg 1 $_PROGRAM exit 1 } #----------------------------------------------------------------------------- # MAIN #----------------------------------------------------------------------------- [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset RunVerification=false if set -- $(getopt vo: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -v) RunVerification=true shift ;; -o) ODMDIR=$2 shift ;; --) shift break ;; esac shift done fi log_msg "clsapost: RunVerification=$RunVerification" # # If the caller specified the -v flag, run verification as part of the # post processing # $RunVerification && { # Test to ensure the cluster is defined RunVerification=false /usr/bin/odmget HACMPcluster | while read field; do RunVerification=true done if (( $RunVerification == true )); then # # if CLVT_GUI flag is set t DIRECTOR then no need to run # cluster verification here. Skip it. if [[ "$CLVT_GUI" != "DIRECTOR" ]]; then log_msg "clsapost: running cluster verification" /usr/es/sbin/cluster/diag/clver -rt -C interactive (( $? != 0 )) && exit 1 else log_msg "clsapost: called from director,skipping verification" fi else # Otherwise report an error errmsg 2 exit 2 fi } exit 0 @ k)$$o@.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/sbin/clsapre@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/clsapre.sh 1.10 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)05 1.10 src/43haes/usr/sbin/cluster/sa/sbin/clsapre.sh, hacmp.assist, 61haes_r714 11/28/11 15:22:56 ############################################################################## ## ## clsapre ## ## Usage: ## clsapre -c cluster_name ## ############################################################################## PATH=$PATH:/usr/es/sbin/cluster/utilities . /usr/es/sbin/cluster/sa/sbin/IO typeset version='1.10 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/sbin/clsapre.sh 1$' #----------------------------------------------------------------------------- # Functions: #----------------------------------------------------------------------------- # errmsg(string:id, ...) # #----------------------------------------------------------------------------- # Message Catalog Entries #----------------------------------------------------------------------------- typeset -A _MSGS _MSGS[1]="Usage:\n\t%s [-c cluster_name]\n\n" _MSGS[2]="ERROR: Unable to change the name of the cluster to: %s.\n" typeset _MSGS_CATALOG=assist.cat typeset _MSGS_SETID=5 typeset _SHPATH=/usr/es/sbin/cluster/sa/sbin/ # #----------------------------------------------------------------------------- # Global Declarations #----------------------------------------------------------------------------- typeset _PROGRAM=${0##*/} typeset _METADATA_ODM=HACMPsa_metadata typeset _SA_ODM=HACMPsa typeset _HAUTILS=/usr/es/sbin/cluster/utilities # ############################################################################## #----------------------------------------------------------------------------- # # Name: apUsage # function apUsage { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x errmsg 1 $_PROGRAM exit 1 } function createNodes { typeset nodes=$* typeset node typeset validnodes nodelist typeset -i valid_node_count=0 log_msg "clsapre: creating nodes: $nodes" for node in $nodes; do node=${node/\.*/} nodelist="$node $nodelist" done for node in $nodelist; do host $node >/dev/null 2>&1 || { dspmsg -s 5 assist.cat 6 \ "ERROR: IP label: %s cannot be resolved on the local system.\n\ Please only use IP labels that can either be resolved via DNS\n\ or via /etc/hosts.\n" $node return 1 } validnodes="$validnodes $node" (( valid_node_count++ )) done log_msg "clsapre: createNodes validnodes=$validnodes" typeset -i nodeAc typeset -i nodeBc nodeAc=0 for nodeA in $nodelist; do (( nodeAc++ )) nodeBc=0 for nodeB in $nodelist; do (( nodeBc++ )) if (( $nodeAc != $nodeBc )); then if [[ "$nodeA" == "$nodeB" ]]; then dspmsg -s 5 assist.cat 5 \ "ERROR: IP label: %s specified twice.\n" $nodeA return 1 fi fi done done if (( valid_node_count < 2 )); then dspmsg -s 5 assist.cat 3 \ "ERROR: HACMP smart assists require at least two cluster nodes\n\ to proceed. Please provide two IP labels. Fewer than two valid\n\ cluster nodes were specified.\n" return 1 fi echo $validnodes | read firstnode rest cluster_name=$firstnode"_cluster" log_msg "clsapre: createNodes: cluster_name = $cluster_name" clmodclstr -n $cluster_name -p "$validnodes" >/dev/null 2>&1 || { chkNodeCount return 1 } return 0 } function chkNodeCount { typeset -i count=$(clvt query node 2>/dev/null | wc -l) if (( $count < 2 )); then dspmsg -s 5 assist.cat 7 \ "ERROR: Unable to construct a cluster with two or more nodes.\n\ Please check to ensure the communication paths provided are\n\ accessible and are running the clcomdES daemon. This error will\n\ also occur if the provided communications paths are labels of the\n\ same node.\n\ \n\ To ensure the HACMP communication daemon is not the cause of this\n\ condition, please run on the nodes you're attempting to add:\n\ \n\ lssrc -ls clcomdES\n\ \n\ If lssrc provides a state of inactive, then run the command:\n\ startsrc -s clcomdES\n" return 1 fi return 0 } #----------------------------------------------------------------------------- # MAIN #----------------------------------------------------------------------------- LOG=$( /usr/es/sbin/cluster/sa/sbin/get_log_name \ sa.log /var/hacmp/log/sa.log ) [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset ClusterName while getopts c:o:n: option do case "$option" in n) createNodes $OPTARG || exit 1 chkNodeCount || exit 1 exit 0 ;; c) ClusterName=$OPTARG ;; o) ODMDIR=$OPTARG ;; esac done log_msg "clsapre: ClusterName = $ClusterName" log_msg "clsapre: ODMDIR=$ODMDIR" # # If the caller provided a cluster name, change the name of the cluster # [[ -n $ClusterName ]] && { log_msg "clsapre: setting PowerHA SystemMirror cluster name to $ClusterName" $_HAUTILS/clchclstr -n $ClusterName || { errmsg 2 $ClusterName exit 2 } } exit 0 the  kꮃ&$o@ .םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/sbin/get_log_names@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/get_log_name.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)45 1.4 src/43haes/usr/sbin/cluster/sa/sbin/get_log_name.sh, hacmp.assist, 61haes_r714 11/28/11 14:55:19 ############################################################################## # # get_log_name # # A utility function ot return the full path of an PowerHA SystemMirror log file so that # scripts may write to it. # # Arguments: # 1. The name of the file -- the entry # 2. An optional default file location. If the log entry is not # found, this or the empty string will be returned. # # Returns # 0 - Success # 1 - Failure # 2 - Invalid arguments # # Writes to standard output the full name of the log file. # # Example of Usage # LOG=$( get_log_name sa.log /var/log/sa.log ) # ############################################################################## ## ## Function usage ## ## Arguments: ## None. ## ## Returns ## Writes to standard error the usage statement. ## ## function usage { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u dspmsg -s 10 assist.cat 1 "\ Usage: \n\ \tget_log_name entry [default_log_name] \n\ where: \n\ \tentry is the name of the PowerHA SystemMirror log file, recorded in PowerHA SystemMirrorlogs\n\ \tdefault_log_path is the path if the entry is not found; \n\ \t\t if not specified, the default is the empty string.\n\ " } ## ## Function get_log_name ## ## Arguments: ## 1. The name of the file -- the entry ## 2. An optional default file location. If the log entry is not ## found, this or the empty string will be returned. ## ## Returns ## Writes to standard output the full name of the log file. ## ## Example of Usage ## LOG=$( get_log_name sa.log /var/log/sa.log ) ## ## function get_log_name { typeset entry=$1 typeset default=$2 typeset dir [[ $VERBOSE_LOGGING == "high" ]] && set -x dir=$( odmget -q "name=$entry" HACMPlogs | while IFS='=' read name value; do [[ "value" == $( echo $name ) ]] && { eval echo $value break } done ) if [[ -n $dir ]]; then echo ${dir}/${entry} else echo $default fi } ## ## Main ## [[ "$VERBOSE_LOGGING" == "high" ]] && set -x if [[ $# < 1 ]]; then usage exit 2 fi get_log_name "$@" exit 0 ~H k*$o.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/sbin/IO_log_na# @(#)09 1.3 src/43haes/usr/sbin/cluster/sa/sbin/IO.sh, hacmp.assist, 61haes_r714 10/25/13 14:34:01 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/IO.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2013 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Functions: # # user_msg # log_msg # warn_msg # err_msg # cycle_log # #---------------------------------------------------------------------------- function log_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo $DATE INFO: $* >> $SA_LOGFILE } function warn_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo $DATE WARN: $* >> $SA_LOGFILE } function err_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo $DATE ERROR: $1 >> $SA_LOGFILE } function cycle_log { [[ -f $SA_LOGFILE ]] && { typeset -i lines=$(LC_ALL=C /bin/wc -l $SA_LOGFILE 2>/dev/null | awk '{ print $1 }') # # clcycle based on number of lines, otherwise since multiple # scripts use this file, and multiple commands will execute # during one smit session don't cycle until file size as approached # 1k lines # (( $lines > $SA_MAXLOGLEN )) && { /usr/es/sbin/cluster/utilities/clcycle $SA_LOGFILE >/dev/null 2>&1 } } } #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- SA_MAXLOGLEN=1000 SA_LOGFILE=$(/usr/es/sbin/cluster/sa/sbin/get_log_name sa.log /var/hacmp/sa.log) cycle_log eset l%'$oW.םa՝a֝a&42vT./usr/es/sbin/cluster/sa/sbin/saapp_commons    -e ailnoprst"#$Adgmu/:=DGIM_cfhv&CENOPRST[]by{}().12HLVqw*,0;>BFU\kx|'3W!456798 =X ‹n$Qq7)Ņ'hbLJb Z qYILD %>0j7nD $L8<4@X`b'n O2P`CFHQQwX 1$=$Tcɬ.X& qaĔmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU( M&ǺCTmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU(Z˔z|Q!Ɗ ʂTo J8"5pvS(+* Q;%sXanYrJqcATo56=Gu"5p6 Qd 3&Ja%;"6K&*7A%gLȏ \\kO‹#3#>'LXFd؀%F56=JXF&*7@1iX=mNÖ)ŎDjl@.E ʂTo T^rCY)@>REI"S @Lhl%FܞJY8H)ŎDjl@To$AXF@HrJqc&`/)ŎDkHb9I5$b0K*MtR+X!`6E *c54-J.W<V+NӋ.Cb\v]mbZW!1X\{s˹_iZ+ *܂עM)#hr+@d7N,:8[Xq r1_*g[\}J,  WW[ej*ݱ r!,ÜpËLO ʽ7 :qNj8rk&\Y@49r\O2!i^s(YZVӋZjk&\Y@49r\O2rbsN.e J6j@c5qeF}ȤY =7XGH:K&h.kӋ.Z,/n׵7-+]mN-cQQm2Ab'"ۛݵ+ *-nYra.W<aOkAjw!ɎE7p!_B<@@2# $"L12ď k .l{7-+ „H\ڝ`0iDi\ւJWX&QmLLZܯ}dk-Ӌ.YXQscD~paUeIpV6ɔ{[e&Ǹ`0a\HKgcl)h=mN剉[U;*Szڝ8x8 *2kll_X {Z[S0y,/8d=cbʱ_ZWX {Z[Sbb`?2cl)h=mN8ÊrWVm=܇pk .l{1_z$Ғ9 J87ܴf(qו{Z:zI[hoN|6^=E9x.R(lw`t;Mz*5DRG1p= \=sX[\u;g 5ZV&.bI$s@c5qeiW,É R, QO/}qe+O $%J5谽kӈc ڍ des-zǻb鰫.*5FECTo<Ɇ%ܴ*\ւ <(tM+\ Q7>(r8ָA(؅l*ˊg[Y)+iXjwlKen6▣TnsN. $IF *58N" A}̔I mcmJQTRl{}dk-Ӌ.XĄ!d f8vaf"XLO sWarpp-_ӻtːお.W<(400hCL)7JfA21Ȱa͍!.':8剉!819D`1$}?8(400h]3b\ [Z'(c=$"xO&zLG̷2ק%rb%9QmlfK*MvUk2W2@ l{Z2̗w+ŗ,LO ŕ1X\}mk%5V+N*sܴ_[SV+nRW.~uqecpbZܯntː'qbl@q˄!iX+brF8cI m~pPh`a0fP TԯwQ.k .l{.b܆c#A$-;<Ɇ%C0wS0 b\ckp` =_`Z D &+&VBJyŗ%+i^g ֲSP Tq .b܆crҽnC.cBJbG9iX0QBsL4y.'q3!e96 + Tq‹l@q˄!iX㜴[˭ㅐZV&.b'(c=$"xO&k .l{eX@nA9p1J0QFC\ \b\ 3 עM)#XQscDx*Zy;1_`2{_z$Ғ956=Gu7*Wni-BRpťcu\f|L>dqjQHc5F>qIyI.3)2S[\mJwCE'-[¬k Q(r8$딙)؅l*ˊQ}8CTo7\\gRdO9oྐྵ$\Mnn|,6QTRl{\f|L>dq1e f CDɃH"@pDsl@qDRG1p#!)2SY)m%d؆;:K&8,6W019D`1$ϠdMcl@b Kf6=_z$Ғ9$I}Nh ]AJH.d 3&Ja%;7*Wni-BQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTnn!s=ܔj܊E7=mn˭ܲ Q69V[PQ7 ׊-pŨSJ9 Q z nZV8خj5F4 Qh=9KkOy\ڝFn)6=Hrŕ$%p<,<  & @a1ó 1bbxHO+@r+ z 8sp1J.W<-+b\-+WarA wUV+%+brF8cIsK[D|mheYmA_=_ZV8b0p0]_ZV8g-+3.!,ÜpÀ3Bqe[S e .c.c W,jvuZԥUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ5FJ hKϔ)%q"d&Ǹj[[%z&Jkt!,^ <(tTnA[d5FL@aui^^ <(t$Tn|QM+t5FQ7HjSAk%=v!,'v!JQTRl{A%gLȏ-HK0xXx L@cfb%W>\kAjw,b Kɱ Ϥ.UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ5FJ iXQscD|j܊E7=mnA(؄zX4AY4kAsZQQm2Ab'XĄ!d f8vaf"XLO sWHr&H,D爞L4y-pXQscM`'}&u(ڪQ7 ZV7\\τ)2SQ7r)Bl{E&;^J{‹K*-|eU$딙)AF܃^(j Ǟ"y0ܴy^eH:K&h.kGQ7>(r8%b\gRdOb 5F4 Qh=9魎56=QTRl{@O%ZV8@'&D~![SId؁<Ɇ%[D|mheYm@zܴqYm@``ܴqZV0f0]_BY9iYً‹l@LO ŕ]mN,U ڝ8Xڝ0]_z$Ғ9 &Jcrjw.f+~qu;W{BQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTnn56=Jj܊E7>erҽypXQscݢe\!r x!7dOxGrҽyxQ ,W5 IFVj_Zǻb鰫.*5F4 Qh=9魎2׹i^^A(K*7ӋZ-+=6/xZ 5ESqI3Ǹ1i^,!,ÁaHhY0piCY3By\1X\zl@qV+UiIA( ZV7\ Mcb)_F 1H`b\ \b؆!iXÃB"L0Afg$"xO&<"Y62-+pV[P8.-+pWaZVf8vau;3Bqe[S e .c.c W^4bB| \-+i^;8ڝ(Y_`2j8]J6j3Ǹ1iZQHc5FB̵ZW2׮k .l{X^̵6 TnA[d5FLX]!7I)r \vJ<"ƷCcoྲcSM&ǻ\\τ9le f CDɃH"@pDsbb\vYr,8b+ *j .W ZV[S2x\ bc*]mNUעM)#-+r rҼv [SYr,$s0bˑa#L\iKي*8W{_gFu(ڪQ7 ZV7\\τF}ȤY kkyA(ȏ,…/ze.rQr^J`r x!7dOxGrҽyxQ ,W5 IFVj_[Y)AXPN򻖕.|Fp3@l'y]Ke,̵ZV8ڝ[#%pqtjcݮ.gGQzAdqe f CDɃH"@pDs<b\-+WarJ.WR, QӋ̵ZW-y7' kQY27谽\ \l@)<;@+[̵7iDӀ*K&خYrZjw2׮k .l{ TnA[d5FX)FVj_\9kτ‹pqt2r -{Y)+R\"N-j7\OMnAqCzss(M&ǻ\\ON%,^%+HK0xXx L@cfb%W>V+xpp8Q$CC 8Z1X\{b\jvsыӂ+ F/NRI$s0ӉK! bÃB"L#A$n}9,b8qH"<xQ bYqM WDy(@pxܴ.`>ԯ-+p"~pڝ8e~qu;_BYZW^ [W1zpqu;W$%xْY06LY_+ t9X̵W1zp㑋ӂ 0b!#UWuDRG1p!s=8zp8K^$bg# (]J6j@>REIQHc5FzK[O(͏vܞJ^^9[LFܴm pXQsc Q7 ׊- {Tn|QM+t5Fp/SU̵ aE͏vDzg[Y)+i^]mN-+Ȼk,WFaAdaË-qڝ2׹iZy^eĥTnsN.cYD%k%=xܞJ\KXF+Y)).(oNpN`k rzq)d"|\KWa$4@,84! ,K!<}.W>56=G8sݺqeqV+j.W<ڝ_z$Ғ9 rzq)d"|\Hn@g56=G|wlvuqezܴq8.jv8g  RĄrҳ0  !8=c_z$Ғ9 rzq)d"|\Hn^11Jz #s![SxQ bZHɁ+ Ɂ+>k .l{ fbނE -OF/N4b8jvPmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU(-+;=8zp>RyF.l{Tn>R, QO/rZ aE͏v2z\_ӉKыӂQQmc`si[!7}rXze>k .l{#o:Oy]Jjwl^E\oIb7<,@4  &@<4 ]mNkdJo-|nON%/F/Npqt2r -{Y)+R\"N-j7\OMnAqCzss(M&ǻ\nvrzq)d"|\IB8 D0مc11<$'Ϡ9_ӳǸ1X\{b\jvJH.;=8zp>RyF.l{7\ Mc‹#RނHrY06G| \O $^0? ,bPp,b 0 0a$P܍xQ bCɁ*8Ǹ P kb%$o@R.םa՝a֝a&R2vT./usr/es/sbin/cluster/sa/sbin/clrmrgsmm@@#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2018,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/clrmrgs.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sbin/clrmrgs.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################## ## ## clrmrgs ## ## Usage: ## clrmrgs -a ApplicationID ## ## ############################################################################## # # #----------------------------------------------------------------------------- # Global Declarations #----------------------------------------------------------------------------- typeset _PROGRAM=${0##*/} typeset _METADATA_ODM=HACMPsa_metadata PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/ PATH=$PATH:/usr/es/sbin/cluster/utilities/ export PATH _SHPATH=/usr/es/sbin/cluster/sa/sbin/ # ############################################################################## # Include common functions . $_SHPATH/saapp_common . /usr/es/lib/ksh93/func_include . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals #----------------------------------------------------------------------------- # MAIN #----------------------------------------------------------------------------- [[ $VERBOSE_LOGGING == high ]] && set -x [[ $VERBOSE_LOGGING == high ]] && version='1.5 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/sbin/clrmrgs.sh 1$' typeset ApplicationID typeset -i MAXDB_APP_COUNT=0 typeset -i ismaxdb=1 typeset -i ERR=0 if set -- $(getopt a:o: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -a) ApplicationID=$2 shift ;; -o) ODMDIR=$2 shift ;; esac shift done fi # The application ID must be specified [[ -z $ApplicationID ]] && { exit 1 } groups=$(clmgr query resource_group) for group in $groups; do clodmget -n -q "application_id=$ApplicationID and name=SMARTASSIST_ID" -f value HACMPsa_metadata | grep -i "MAXDB" > /dev/null ismaxdb=$? if (( $ismaxdb == 0 ));then exists=$(odmget -q "application_id=$ApplicationID and value=$group" HACMPsa_metadata) else exists=$(odmget -q "group=$group and sa_key=$ApplicationID" HACMPgroup) fi [[ -n $exists ]] && { if (( $ismaxdb == 0 ));then # In case of Maxdb, delete only the application_controller and service-ip associated with Application ID. MAXDB_APP_COUNT=$(clodmget -n -q "group=$group and name=APPLICATIONS" -f value HACMPresource | wc -l) typeset app=$(clquerysaapp -a $ApplicationID 2>/dev/null | awk -F"=" '$1 == "APPLICATION_CONTROLLER" {print $2}') clmgr delete application $app >/dev/null 2>&1 (( $? != 0 )) && { KLIB_SA_logmsg ERROR 30 17 maxdbsa.cat "Unable to delete Application Server : \"%1\$s\"" $app KLIB_SA_logmsg INFO 30 18 maxdbsa.cat "Please do a verify and sync from another node in the cluster to restore previous configuration." ERR=1 } typeset serviceIP=$(clquerysaapp -a $ApplicationID 2>/dev/null | awk -F"=" '$1 == "SERVICE_LABEL" {print $2}') clmgr delete service_ip $serviceIP >/dev/null 2>&1 (( $? != 0 )) && { KLIB_SA_logmsg ERROR 30 25 maxdbsa.cat "Unable to delete service IP label : \"%1\$s\"" $serviceIP KLIB_SA_logmsg INFO 30 18 maxdbsa.cat "Please do a verify and sync from another node in the cluster to restore previous configuration." ERR=1 } else typeset APPLICATIONS=$(clmgr query resource_group $group | grep APPLICATIONS | awk -F= '{ print $2 }' | sed -e "s/\"//g") for app in $APPLICATIONS; do clmgr delete application $app >/dev/null 2>&1 (( $? != 0 )) && { KLIB_SA_logmsg ERROR 30 17 maxdbsa.cat "Unable to delete Application Server : \"%1\$s\"" $app KLIB_SA_logmsg INFO 30 18 maxdbsa.cat "Please do a verify and sync from another node in the cluster to restore previous configuration." ERR=1 } done typeset SERVICE_LABELS=$(clmgr query resource_group $group | grep SERVICE_LABEL | awk -F= '{ print $2 }' | sed -e "s/\"//g") for serviceIP in $SERVICE_LABELS; do clmgr delete service_ip $serviceIP >/dev/null 2>&1 (( $? != 0 )) && { KLIB_SA_logmsg ERROR 30 25 maxdbsa.cat "Unable to delete service IP label : \"%1\$s\"" $serviceIP KLIB_SA_logmsg INFO 30 18 maxdbsa.cat "Please do a verify and sync from another node in the cluster to restore previous configuration." ERR=1 } done fi # # Remove the relevant file collections # typeset FILE_COLLECTIONS=$(clodmget -q "application_id=$ApplicationID and \ name=FILE_COLLECTION" -f value -d "=" HACMPsa_metadata) [[ -n $FILE_COLLECTIONS ]] && { FILE_COLLECTIONS=${FILE_COLLECTIONS//\"/} for COLLECTION in $FILE_COLLECTIONS do clmgr delete file_collection $COLLECTION >/dev/null 2>&1 done } # # Remove any custom verification library exists # in the configuration # typeset VER_LIBRARY=$(clodmget -q "application_id=$ApplicationID and \ name=CUSTOM_VERIFICATION_LIBRARY" -f value -d "=" HACMPsa_metadata) [[ -n $VER_LIBRARY ]] && { VER_LIBRARY=${VER_LIBRARY//\"/} clmgr delete method $VER_LIBRARY >/dev/null 2>&1 } # # Removing the depedency, if any with # the RG we are going to remove. # We can't remove the RG, without removing # any dependency exists with the RG. # if (( $ismaxdb != 0 || $MAXDB_APP_COUNT <= 1 ));then clmgr delete dependency RG=$group 1>/dev/null 2>&1 clmgr delete resource_group $group >/dev/null 2>&1 fi } done # Remove the resource group entries from the metadata clrmsaapp -a $ApplicationID RESOURCE_GROUP if (( $ERR == 1 ));then exit 1 fi exit 0 = 0 )) k"o($o@0.םa՝a֝a&02vT./usr/es/sbin/cluster/sa/sbin/clsa_createsites@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/clsa_createsites.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)64 1.1 src/43haes/usr/sbin/cluster/sa/sbin/clsa_createsites.sh, hacmp.assist, 61haes_r714 2/28/06 17:33:33 PATH=$PATH:/usr/es/sbin/cluster/utilities/ typeset -i site_count=$(cllssite -c | grep -v "#" | wc -l) (( $site_count > 0 )) && { exit 1 } while getopts a:b: option do case $option in a) SITE_A_NODES=$OPTARG ;; b) SITE_B_NODES=$OPTARG ;; esac done [[ -z $SITE_A_NODES || -z $SITE_B_NODES ]] && exit 1 claddsite \ -s siteA \ -n "$SITE_A_NODES" \ -m yes \ -p SGN >/dev/null 2>&1 claddsite \ -s siteB \ -n "$SITE_B_NODES" \ -m no \ -p SGN >/dev/null 2>&1  kP)$o@.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/sbin/clgettestplanes@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sbin/clgettestplan.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)38 1.3 src/43haes/usr/sbin/cluster/sa/sbin/clgettestplan.sh, hacmp.assist, 61haes_r714 11/28/11 15:00:10 typeset version='1.2' ## ## NAME: ## clgettestplan ## ## PURPOSE: ## Provides basic (default) Application testing when specific smart ## assistant does not provide testing capabilities. ## ## Generates a smart assistant test script, the output of this script ## if executed via SMIT will go to /usr/es/sbin/cluster/etc/sa_test ## ## ARGUMENTS: ## (1) ## ## RETURNS: ## 0 on success ## 1 on failure (no application id specified) ## #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- FPATH=/usr/es/lib/ksh93/hacmp FPATH=$FPATH:/usr/es/lib/ksh93/util PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/ PATH=$PATH:/usr/es/sbin/cluster/utilities #---------------------------------------------------------------------------- # Functions: # test_AllNodesUp # test_AllAppResourceGroups # test_ResourceGroup # getAllAppNodes # #---------------------------------------------------------------------------- function test_AllNodesUp { typeset app_id=$1 typeset NODES=$(getAllAppNodes $app_id) echo "#\n# Bringing all nodes related to application: $app_id UP\n#\n" for node in $NODES; do echo "NODE_UP,$node,"Start cluster services on node: \""$node"\" done } function test_AllAppResourceGroups { typeset app_id=$1 RGS=$(clquerysaapp -a $app_id | grep RESOURCE_GROUP | awk -F'=' '{ print $2 }') echo "#\n# Testing Application Name: $app_id\n#\n" for rg in $RGS; do test_ResourceGroup $rg done } function test_ResourceGroup { typeset rgname=$1 typeset primary takeover echo "#\n# Testing resource group: $rgname\n#\n" set -a eval $(clvt query resource_group $rgname | grep NODES) set +a echo $NODES | read primary takeover for online_node in $NODES; do echo "#\n# Node failure test(s) for resource group: $rgname\n#\n" echo "# Leaving node $online_node UP\n#\n" for node in $NODES; do if [[ "$node" != "$online_node" ]]; then echo "NODE_DOWN_TAKEOVER,$node,\"Stop cluster services with takeover on node $node for resource group: $rgname\"" fi done # Bring the nodes back up for node in $NODES; do if [[ "$node" != "$online_node" ]]; then echo "NODE_UP,$node,\"Re-starting cluster services on node: $node for resource group test: $rgname\"" fi done done } function getAllAppNodes { typeset app_id=$1 typeset RGS rg NODES node typeset -A nodelist RGS=$(clquerysaapp -a $app_id | grep RESOURCE_GROUP | awk -F'=' '{ print $2 }') for rg in $RGS; do set -a eval $(clvt query resource_group $rg | grep NODES) set +a for node in $NODES; do nodelist[$node]=: done done echo ${!nodelist[*]} } #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- APPLICATION_NAME=$1 [[ -z $APPLICATION_NAME ]] && exit 1 test_AllNodesUp $APPLICATION_NAME test_AllAppResourceGroups $APPLICATION_NAME test_AllNodesUp $APPLICATION_NAME on ko(.םa՝a{֝a&(2vT./usr/es/lib/ksh93/sa/KLIB_SA_delete_metadata#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/sa/KLIB_SA_delete_metadata.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)25 1.5 src/43haes/lib/ksh93/sa/KLIB_SA_delete_metadata.sh, hacmp, 61haes_r714 11/28/11 15:22:32 # #=head1 NAME # # KLIB_SA_delete_metadata - Delete an entry from the smart assistant metadata # #=head1 SYNOPSIS # # typeset application_id="SA_DB2Instance" # typeset sa_name="FILESYSTEM" # typeset sa_value="/db2home1/" # KLIB_SA_delete_metadata $application_id $sa_name || { # echo "Unable to remove DB2 filesystem: $sa_value from the HACMP metadata for instance: $sa_key" # } # #=head1 DESCRIPTION # # Removes an entry from the SA metadata ODM with the same application_id and name # #=head1 ARGUMENTS # # 1: [scalar] application_id, the unique key to identify the smart assistant amongst its peer type # 2: [scalar] sa_name, the smart assistant name, as part of the name / value pair # #=head1 RETURN # # 0 - success, # 1 - failed, # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_SA_delete_metadata { . /usr/es/lib/ksh93/func_include application_id=$1 shift name=$1 if [[ -z $name || -z $application_id ]]; then return 1 fi value=$(KLIB_SA_get_metadata $application_id $name) if (( $? != 0 )); then return 1 fi odmdelete -q "name = $name and application_id = $application_id" -o HACMPsa_metadata >/dev/null 2>&1 return 0 }  ko.םa՝a{֝a&2vT./usr/es/lib/ksh93/sa/KLIB_SA_add_metadatata#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/sa/KLIB_SA_add_metadata.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)22 1.5 src/43haes/lib/ksh93/sa/KLIB_SA_add_metadata.sh, hacmp, 61haes_r714 11/28/11 15:18:31 # #=head1 NAME # # KLIB_SA_add_metadata - Add metadata to the smart assistant metadata ODM # #=head1 SYNOPSIS # # typeset application_id="SA_DB2Instance" # typeset sa_name="FILESYSTEM" # typeset sa_value="/db2home1/" # KLIB_SA_add_metadata $sa_type $sa_key $sa_name $sa_value || { # echo "Unable to add DB2 filesystem: $sa_value to the HACMP metadata for instance: $application_id" # } # #=head1 DESCRIPTION # # Add metadata to the smart assistant metadata ODM, this function will not # remove old SA metadata from the ODM with the same application_id and name, use # the update function to perform a remove then add in one operation # #=head1 ARGUMENTS # # 1: [scalar] application_id, the unique key to identify the smart assistant amongst its peer type # 2: [scalar] sa_name, the smart assistant name, as part of the name / value pair # 3: [scalar] value, the value to store as defined by the unique key (sa_type, sa_key, sa_name) # #=head1 RETURN # # 0 - success # 1 - failed # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_SA_add_metadata { . /usr/es/lib/ksh93/func_include application_id=$1 shift name=$1 shift pvalue=$* if [[ -z $name || -z $application_id ]]; then return 1 fi # Is this key unique? KLIB_SA_get_metadata $application_id $name if [[ $? == 0 ]]; then return 1 else KLIB_SA_delete_metadata $application_id $name fi { echo "HACMPsa_metadata:" echo "\tapplication_id=\"$application_id\"" echo "\tname=\"$name\"" echo "\tvalue=\"$pvalue\"" } | odmadd 2>/dev/null return 0 } }  k,o.םa՝a{֝a&2vT./usr/es/lib/ksh93/sa/KLIB_SA_purge_metadata#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/sa/KLIB_SA_purge_metadata.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)23 1.3 src/43haes/lib/ksh93/sa/KLIB_SA_purge_metadata.sh, hacmp, 61haes_r714 11/28/11 15:20:24 # #=head1 NAME # # KLIB_SA_purge_metadata - Remove all entries from the HACMPsa_metadata ODM # #=head1 SYNOPSIS # # ODMDIR=/etc/es/objrepos # export ODMDIR # KLIB_SA_purge_metadata || { # echo "ERROR unable to remove the smart assistant metadata" # } # #=head1 DESCRIPTION # # Removes all of the smart assistant metadata from the HACMPsa_metadata ODM # #=head1 ARGUMENTS # # None # # #=head1 RETURN # # 0: success # 1: failed # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_SA_purge_metadata { odmdelete -o HACMPsa_metadata >/dev/null 2>&1 } o kn_ob.םa՝a{֝a&b2vT./usr/es/lib/ksh93/sa/KLIB_SA_get_metadataa#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/sa/KLIB_SA_get_metadata.sh 1.7 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)20 1.7 src/43haes/lib/ksh93/sa/KLIB_SA_get_metadata.sh, hacmp, 61haes_r714, 1502A_hacmp714 1/6/15 05:06:30 # #=head1 NAME # # KLIB_SA_get_metadata - Get the value for the specified SA application_id # #=head1 SYNOPSIS # # typeset application_id="SA_DB2Instance" # typeset sa_name="FILESYSTEM" # typeset sa_key="db2inst1" # value=$(KLIB_SA_get_metadata $sa_type $sa_name $sa_value) # #=head1 DESCRIPTION # # Get metadata from the smart assistant metadata ODM, this function # will get the value field with the same application_id and name # #=head1 ARGUMENTS # # 1: [scalar] application_id, the unique key to identify the smart assistant amongst its peer type # 2: [scalar] sa_name, the smart assistant name, as part of the name / value pair # #=head1 RETURN # # 0 - success # 1 - failed (not found) # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_SA_get_metadata { CL=$LINENO . /usr/es/lib/ksh93/func_include application_id=$1 shift name=$1 if [[ -z $name || -z $application_id ]]; then return 1 fi odmget -q "application_id = $application_id and name = $name" HACMPsa_metadata | while IFS='=' read f_name f_value; do f_name=$(eval echo $f_name) if [[ "$f_name" == "value" ]]; then f_value=$(echo $f_value | sed -e "s/\"//g") echo $f_value return 0 fi done 2>/dev/null return 1 } unique ko.םa՝a{֝a&2vT./usr/es/lib/ksh93/sa/KLIB_SA_update_metadata#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/sa/KLIB_SA_update_metadata.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)24 1.5 src/43haes/lib/ksh93/sa/KLIB_SA_update_metadata.sh, hacmp, 61haes_r714 11/28/11 15:21:22 # #=head1 NAME # # KLIB_SA_update_metadata - Updata metadata to the smart assistant metadata ODM # #=head1 SYNOPSIS # # typeset application_id="SA_DB2Instance" # typeset sa_name="FILESYSTEM" # typeset sa_value="/db2home1/" # KLIB_SA_update_metadata $application_id $sa_name $sa_value || { # echo "Unable to update DB2 filesystem: $sa_value to the HACMP metadata for instance: $application_id" # } # #=head1 DESCRIPTION # # Update metadata to the smart assistant metadata ODM, this function WILL # remove old SA metadata from the ODM with the same application_id and name. # #=head1 ARGUMENTS # # 1: [scalar] application_id, the unique key to identify the smart assistant amongst its peer type # 2: [scalar] sa_name, the smart assistant name, as part of the name / value pair # 3: [scalar] value, the value to store as defined by the unique key (sa_type, sa_key, sa_name) # #=head1 RETURN # # 0 - success # 1 - failed # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_SA_update_metadata { . /usr/es/lib/ksh93/func_include application_id=$1 shift name=$1 shift uvalue="$*" KLIB_SA_delete_metadata $application_id $name RC=$? if (( $RC != 0 )); then return $RC fi KLIB_SA_add_metadata $application_id $name "$uvalue" return $? } ion_id  ko.םa՝a{֝a&2vT./usr/es/lib/ksh93/sa/KLIB_SA_get_key_by_type_metadata#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/sa/KLIB_SA_get_key_by_type_metadata.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)59 1.2 src/43haes/lib/ksh93/sa/KLIB_SA_get_key_by_type_metadata.sh, hacmp.assist, 61haes_r714 4/25/06 13:47:33 # #=head1 NAME # # KLIB_SA_get_key_by_type_metadata - Return a list of keys for a specified type # #=head1 SYNOPSIS # # typeset component_id="SA_DB2Instance" # value=$(KLIB_SA_get_key_by_type_metadata $component_id) # #=head1 DESCRIPTION # # Get a list of metadata keys from the smart assistant metadata ODM # for a specified smart assist type # #=head1 ARGUMENTS # # 1: [scalar] component_id, smart assistant type # #=head1 RETURN # # 0 - success # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_SA_get_key_by_type_metadata { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset component_id=$1 typeset f_name typeset f_value typeset -A keys if [[ -z $component_id ]]; then return 1 fi odmget -q "name = COMPONENT_ID AND value = $component_id" HACMPsa_metadata | while IFS='=' read f_name f_value; do f_name=$(eval echo $f_name) if [[ "$f_name" == "application_id" ]]; then f_value=$(echo $f_value | sed -e "s/\"//g") keys[$f_value]="" fi done echo "${!keys[@]}" return 0 } ft  kzo.םa՝a{֝a&2vT./usr/es/lib/ksh93/sa/KLIB_SA_delete_by_key_type_metadata#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/sa/KLIB_SA_delete_by_key_type_metadata.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2009 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)03 1.3 src/43haes/lib/ksh93/sa/KLIB_SA_delete_by_key_type_metadata.sh, hacmp.assist, 61haes_r714 1/13/09 16:24:37 # #=head1 NAME # # KLIB_SA_delete_by_key_type_metadata - Delete all entries from the smart assistant # metadata for a specified type and key # #=head1 SYNOPSIS # # typeset application_id="WAS_CLUS_regaa10Cell01_Cluster02" # KLIB_SA_delete_metadata $application_id # #=head1 DESCRIPTION # # Removes all entries from the SA metadata ODM with the same application_id # #=head1 ARGUMENTS # # 1: [scalar] application_id, the unique key to identify the smart assistant amongst its peer type # #=head1 RETURN # # 0 - success, # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_SA_delete_by_key_type_metadata { . /usr/es/lib/ksh93/func_include application_id=$1 if [[ -z $application_id ]]; then return 1 fi odmdelete -q "application_id = $application_id" -o HACMPsa_metadata >/dev/null 2>&1 return 0 } ='=' r ko .םa՝a{֝a& 2vT./usr/es/lib/ksh93/sa/KLIB_SA_add_ServiceLabele#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/sa/KLIB_SA_add_ServiceLabel.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)86 1.2 src/43haes/lib/ksh93/sa/KLIB_SA_add_ServiceLabel.sh, hacmp, 61haes_r714 5/20/13 16:54:19 #================================================ # The following, commented line enforces coding # standards when this file is edited via vim. #================================================ # vim:tabstop=4:shiftwidth=4:expandtab:smarttab #================================================ #=head1 NAME # # KLIB_SA_add_ServiceLabel - Wrapper for 2 node config assist for adding # service IP # #=head1 SYNOPSIS # # KLIB_SA_add_metadata $ipaddr || { # echo "Unable to add Service IP for $ipaddr" # } # #=head1 DESCRIPTION # # Add service IP Label. # #=head1 ARGUMENTS # # 1: [scalar] ipaddr, This could be a label or address of either IPv4 or IPv6. # 2: [scalar] prilen, This is the prefix length if the apaddr is an IPv6 # address. # #=head1 RETURN # # 0 - success # 1 - failed # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut #============================================================================ # # Name: KLIB_SA_add_ServiceLabel # # Description: # # Inputs: # # Outputs: # # Returns: # #============================================================================ function KLIB_SA_add_ServiceLabel { . /usr/es/lib/ksh93/func_include ipaddr=$1 prelen=$2 typeset -i RETVAL=0 typeset FAMILY="AF_NONE" SERVICE_ADDR="" NETWORK="" # # If prefix length/netmask is not provided for service label, try # to find the network of same family with that of service label. # if [[ -z $prelen ]]; then SERVICE_ADDR=$(cat /etc/hosts | grep -w $ipaddr | tail -1) SERVICE_ADDR=${SERVICE_ADDR%%+([[:space:]])*} if [[ $SERVICE_ADDR == *:* ]] then FAMILY="AF_INET6" else FAMILY="AF_INET" fi fi # # Find the best network for the service label # NETWORK=$(KLIB_HACMP_get_net_with_most_interfaces $ipaddr) if [[ -z $NETWORK ]]; then dspmsg -s 2 clconfigassist.cat 26 \ "ERROR: no HACMP network includes both nodes.\n" 1>&2 return 1 fi if [[ -z $prelen ]]; then /usr/es/sbin/cluster/utilities/clmgr add service_ip $ipaddr NETWORK=$NETWORK else /usr/es/sbin/cluster/utilities/clmgr add service_ip $ipaddr NETWORK=$NETWORK PREFIX=$prelen fi return $? } # End of "KLIB_SA_add_ServiceLabel()"  /l ko.םa՝a{֝a&2vT./usr/es/lib/ksh93/sa/KLIB_SA_logmsgvic# @(#)15 1.1 src/43haes/lib/ksh93/sa/KLIB_SA_logmsg.sh, hacmp, 61haes_r714 11/28/11 14:54:57 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/sa/KLIB_SA_logmsg.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # #=head1 NAME # # KLIB_SA_logmsg - Log the given message into a log file. However, whether a perticular # message will be logged into log file depends on the first argument i.e TRACE, INFO, WARN, DEBUG or ERROR. # The function will check whether TRACE_FLAG is set to true or false to log TRACE related messages. # This will reference some Global varialbles as below: # KLIB_OUTPUT_CONSOLE = true / false # KLIB_DEFAULT_LOGFILE = fullpath to log file name # KLIB_HACMPLOG_ENTRY = HACMPlogs entry to obtain path for log file # KLIB_LOGFILE_SIZE = Maximum allowed number of lines in the log file before it is recycled # #=head1 SYNOPSIS # # KLIB_SA_logmsg INFO 1 10 mycatalog.cat "Default Message :%s", "SIMPLE MESSAGE" || { # echo "Unable to log message" # } # #=head1 DESCRIPTION # # Log the given message into log file # #=head1 ARGUMENTS # # 1: [scalar] level, Message type. This will be one of: TRACE, INFO, WARN, DEBUG or ERROR # 2: [scalar] setid, This is the set number in the catalog file # 3: [scalar] msgid, This is the message number in the above set in the catalog file # 4: [scalar] catalog, This is the name of the catalog file # 5: [scalar] msg, This is the default message # 6-: [scalar] remaining arguments for the above message # # #=head1 RETURN # # 0 - success # 1 - failed # # function KLIB_SA_logmsg { typeset -u level=$1 shift integer SETID=$1 shift integer MSGID=$1 shift typeset CATALOG=$1 shift typeset DEFAULT_MSG=$1 shift integer ERRORS=0 if [[ $level != @(T|I|W|D|E)* ]]; then print -u2 "Unrecognized log level: \"$level\". Supported values: TRACE, INFO, WARN, DEBUG or ERROR" (( ERRORS++ )) fi # Check if the SETID is a positive number if [[ $SETID != +([[:digit:]]) ]] || (( $SETID <= 0 )); then print -u2 "SETID should be a postive number" (( ERRORS++ )) fi # Check if the MSGID is a positive numbers if [[ $MSGID != +([[:digit:]]) ]] || (( $MSGID <= 0 )); then print -u2 "MSGID should be a postive number" (( ERRORS++ )) fi if [[ -z $KLIB_DEFAULT_LOGFILE && -z $KLIB_HACMPLOG_ENTRY ]]; then print -u2 "FATAL Error: KLIB_LOGFILE and KLIB_HACMPLOG_ENTRY not set!" (( ERRORS++ )) fi if (( ! ERRORS )); then typeset LOGFILE=$KLIB_DEFAULT_LOGFILE if [[ -n $KLIB_HACMPLOG_ENTRY && -z $KLIB_HACMPLOG_VALUE ]]; then typeset value=$(/usr/es/sbin/cluster/utilities/clodmget -q "name=$KLIB_HACMPLOG_ENTRY" -f value HACMPlogs) value=${value//\"/} [[ -n $value ]] && KLIB_HACMPLOG_VALUE=$value/$KLIB_HACMPLOG_ENTRY fi if [[ -n $KLIB_HACMPLOG_VALUE ]]; then LOGFILE=$KLIB_HACMPLOG_VALUE fi nameref flag="${level}_FLAG" typeset level_msg="${level}_MSG" if [[ -n "$flag" && "$flag" == "true" ]]; then if [[ "$KLIB_OUTPUT_CONSOLE" == "true" ]]; then if [[ "$level" == "ERROR" ]]; then { echo "$(/usr/bin/date) - $level_msg : \c" /usr/bin/dspmsg -s $SETID $CATALOG $MSGID "$DEFAULT_MSG" "$@" echo "\n" } >&2 { echo "$(/usr/bin/date) - $level_msg : \c" /usr/bin/dspmsg -s $SETID $CATALOG $MSGID "$DEFAULT_MSG" "$@" echo "\n" } >> $LOGFILE else { echo "$(/usr/bin/date) - $level_msg : \c" /usr/bin/dspmsg -s $SETID $CATALOG $MSGID "$DEFAULT_MSG" "$@" echo "\n" } | tee -a $LOGFILE fi else { echo "$(/usr/bin/date) - $level_msg : \c" /usr/bin/dspmsg -s $SETID $CATALOG $MSGID "$DEFAULT_MSG" "$@" echo "\n" } >> $LOGFILE fi fi if [[ -f $LOGFILE ]]; then typeset -i lines=$(/usr/bin/du -m $LOGFILE | awk '{ print $1 }') # # clcycle based on number of lines, otherwise since multiple # scripts use this file, and multiple commands will execute # during one smit session don't cycle until file size as approached # 2k lines # [[ -z $KLIB_LOGFILE_SIZE ]] && KLIB_LOGFILE_SIZE=5 if (( $lines > $KLIB_LOGFILE_SIZE )); then /usr/es/sbin/cluster/utilities/clcycle $LOGFILE >/dev/null 2>&1 fi fi fi return $ERRORS } # End of "KLIB_SA_logmsg()" is r k]o .םa՝a{֝a& 2vT./usr/es/lib/ksh93/sa/KLIB_SAP_SA_logmsgLabele# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/sa/KLIB_SAP_SA_logmsg.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2013 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #=head1 NAME # # KLIB_SAP_SA_logmsg - Log the given message into a log file. However, whether a perticular # message will be logged into log file depends on the first argument i.e TRACE, INFO, WARN, DEBUG or ERROR. # The function will check whether TRACE_FLAG is set to true or false to log TRACE related messages. # This will reference some Global varialbles as below: # KLIB_OUTPUT_CONSOLE = true / false # KLIB_DEFAULT_LOGFILE = fullpath to log file name # KLIB_HACMPLOG_ENTRY = HACMPlogs entry to obtain path for log file # KLIB_LOGFILE_SIZE = Maximum allowed number of lines in the log file before it is recycled # #=head1 SYNOPSIS # # KLIB_SAP_SA_logmsg INFO 1 10 mycatalog.cat "Default Message :%s", "SIMPLE MESSAGE" || { # echo "Unable to log message" # } # #=head1 DESCRIPTION # # Log the given message into log file # #=head1 ARGUMENTS # # 1: [scalar] level, Message type. This will be one of: TRACE, INFO, WARN, DEBUG or ERROR # 2: [scalar] setid, This is the set number in the catalog file # 3: [scalar] msgid, This is the message number in the above set in the catalog file # 4: [scalar] catalog, This is the name of the catalog file # 5: [scalar] msg, This is the default message # 6-: [scalar] remaining arguments for the above message # # #=head1 RETURN # # 0 - success # 1 - failed # # function KLIB_SAP_SA_logmsg { typeset MYDSPMSG="/usr/bin/dspmsg -s" typeset -u level=$1 shift integer SETID=$1 shift integer MSGID=$1 shift typeset CATALOG=$1 shift typeset DEFAULT_MSG=$1 shift # Set SAP_DEBUG_MODE default to low. [[ -z $SAP_DEBUG_MODE ]] && SAP_DEBUG_MODE="low" # Log the message according to SAP SA Debug level if [[ $level != @(T|I|W|D|E)* ]]; then print -u2 "Unrecognized log level: \"$level\". Supported levels: TRACE, INFO, WARN, DEBUG or ERROR" return 1 elif [[ "$SAP_DEBUG_MODE" == "low" && $level == @(T|D)* ]]; then return 0 elif [[ "$SAP_DEBUG_MODE" == "medium" && $level == @(T)* ]]; then return 0 fi # Direct the message output to console/stderr/stdout/logfile if [[ "$KLIB_OUTPUT_CONSOLE" == "true" ]]; then if [[ "$level" == "ERROR" ]]; then echo "$(/usr/bin/date): $($MYDSPMSG $SETID $CATALOG $MSGID "$DEFAULT_MSG" "$@")" >&2 echo "$(/usr/bin/date): $($MYDSPMSG $SETID $CATALOG $MSGID "$DEFAULT_MSG" "$@")" >> $KSSLOGFILE else echo "$(/usr/bin/date): $($MYDSPMSG $SETID $CATALOG $MSGID "$DEFAULT_MSG" "$@")" | tee -a $KSSLOGFILE fi else echo "$(/usr/bin/date): $($MYDSPMSG $SETID $CATALOG $MSGID "$DEFAULT_MSG" "$@")" >> $KSSLOGFILE fi # Cycle the log file if necessary [[ -z $KLIB_LOGFILE_SIZE ]] && KLIB_LOGFILE_SIZE=5 if (( $(/usr/bin/du -m $KSSLOGFILE | awk '{ print $1 }') > $KLIB_LOGFILE_SIZE )); then /usr/es/sbin/cluster/utilities/clcycle $KSSLOGFILE >/dev/null 2>&1 fi return 0 } # End of "KLIB_SAP_SA_logmsg()" g" == " k:oABםaBםa{֝a&2vT./usr/es/sbin/cluster/sa/gasa_SAA kLoABםaBםa{֝a&2vT./usr/es/sbin/cluster/sa/gasa/sbinogmsgAA kꪫ2$o@4'.םa՝a֝a&4'2vT./usr/es/sbin/cluster/sa/gasa/sbin/addg@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/gasa/sbin/add.sh 1.10 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)03 1.10 src/43haes/usr/sbin/cluster/sa/gasa/sbin/add.sh, hacmp.assist, 61haes_r714 5/17/06 11:15:41 ## ## Name: add ## ## Purpose: The shell script called by the SMIT ADD screen for the ## General Application Smart Assist (GASA) ## ## This function will: ## * create an application server of the given name, $1 ## * create a resource group with the name ${1}_group ## * assign the service IP label and application to the group ## * find and add shared volume groups to the resource group ## * fina and add non-ip networks. ## * associate the resource group to the smart assist application ## * (optionally) change the name of the cluster ${1}_cluster ## ## Parameters: ## -s the smart assist identifier (optional) - default is zzOther ## -c the component identifier (optional) - default is GASA ## -a the application name ## -S the application server name (optional) - default is app name ## -P the primary node ## -T the takeover nodes ## -R the start script ## -O the stop script ## -I the service IP label . /usr/es/lib/ksh93/func_include version='1.10' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- # Include the path for clvt PATH=$PATH:/usr/es/sbin/cluster/utilities # Include the path for claddsaapp clquerysaapp (Smart Assist Utilities) PATH=$PATH:/usr/es/sbin/cluster/sa/sbin # Default to General Smart Assist ID and Component ID SMARTASSIST_ID="zzOther" COMPONENT_ID="GASA" export PATH SMARTASSIST_ID COMPONENT_ID # Message Catalog Entries typeset -A MSGS MSGS=( [catalog]="assist.cat" [12,3]="ERROR: An application with name of %s has already been made created.\n" [12,4]="ERROR: An application server with the name of %s has already been defined in HACMP.\n" [12,5]="ERROR: A resource group with the name of %s has already been registered.\n" [12,6]="ERROR: Failed to create the application server: %s\n" [12,7]="ERROR: Failed to create the resource group: %s\n" [12,8]="ERROR: Failed to modify the resource group: %s\n" [12,9]="ERROR: Failed to associate metadata with application: %s\n" [12,10]="ERROR: Failed to create service IP label: %s\n" [12,11]="ERROR: Invalid HACMP node name: %s\n" ) #---------------------------------------------------------------------------- # Functions: # get_volume_groups # checkClusterNodes # errmsg #---------------------------------------------------------------------------- # # Function: get_volume_groups # # Purpose: look up a list of all shareable volume groups # # Args: RG name # # Output: list of all VGs that could be shared by this group # # Return: 1 on error, 0 on success # function get_volume_groups { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset GROUP="$1" if [[ -z "$GROUP" ]] then return 1 fi VGS=$(clfind_shareable_vg "$GROUP" -s) for v in $VGS do printf "%s " $v done } # # Function: errmsg # # Purpose: wrapper for dspmsg # # Args: $1 - message catalog set # $2 - message id # ... vargs format arguments # # Output: message catalog entry # # Return: return code from dspmsg # function errmsg { typeset set=$1 typeset id=$2 shift shift typeset concat="$set,$id" /usr/bin/dspmsg -s $set "${MSGS[catalog]}" $id "${MSGS[$concat]}" $* } #---------------------------------------------------------------------------- # Function: # checkClusterNodes # # Purpose: # Is the node valid (exists as part of the HACMP cluster) # # Arguments: # (*) - list of nodes # # Returns: # 0 on success # 1 on failure # function checkClusterNodes { typeset nodelist=$* typeset confNodes=$(clvt query node) typeset -i rc=0 for a in $nodelist; do found=0 for b in $confNodes; do if [[ "$a" == "$b" ]]; then found=1 fi done if (( $found != 1 )); then errmsg 12 11 $a rc=1 fi done return $rc } #---------------------------------------------------------------------------- # Function: # getServiceNetwork # # Purpose: # Determine the appropriate network to place the service IP label # on based on adapter count per network per node # # Arguments: # (1) by reference - list of nodes to find interfaces for # # Output: # network name to place service IP label on # # Returns: # 0 on success # 1 on failure # function getServiceNetwork { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -n NODES=$1 typeset NETWORKS=$(clvt query network | sort -u) typeset validNetworks typeset -A netXnodeCount typeset -A networkCount for network in $NETWORKS; do alias=$(clvt query network $network | awk -F= '$1 ~ /ALIAS/ { print $2 }' | sed -e "s/\"//g") [[ "$alias" == "aliased" ]] && { validNetworks="$network $validNetworks" } done INTERFACES=$(clvt query interface | sort -u) for interface in $INTERFACES; do node=$(clvt query interface $interface | awk -F= '$1 ~ /NODE/ {print $2 }' | sed -e "s/\"//g") net=$(clvt query interface $interface | awk -F= '$1 ~ /NETWORK/ {print $2 }' | sed -e "s/\"//g") [[ -n $node && -n $net ]] && { typeset -i count=${netXnodeCount[${net}_${node}]} (( count++ )) netXnodeCount[${net}_${node}]=$count } done typeset -i invalid=0 for network in $validNetworks; do invalid=0 for node in $NODES; do (( ${netXnodeCount[${net}_${node}]} == 0 )) && { invalid=1 } done (( $invalid == 0 )) && { echo $network return 0 } done return 1 } #--------------------------------------------------------------------------- # Main Program #--------------------------------------------------------------------------- while getopts s:c:a:S:P:T:R:O:I: option do case $option in s) SMARTASSIST_ID=$OPTARG ;; c) COMPONENT_ID=$OPTARG ;; a) NAME=$OPTARG ;; S) SERVERNAME=$OPTARG ;; P) PRIMARY=$OPTARG ;; T) TAKEOVER=$OPTARG ;; R) STARTSCRIPT=$OPTARG ;; O) STOPSCRIPT=$OPTARG ;; I) IP=$OPTARG ;; esac done # Determine if the cluster nodes entered are valid cluster # node names checkClusterNodes $PRIMARY $TAKEOVER if (( $? != 0 )); then exit 1 fi [[ -z $SERVERNAME ]] && { SERVERNAME=$NAME } typeset RG_NAME=${NAME}_group typeset APPLICATION_NAME=$NAME ## ## First, check to see if the application name has already been registered ## results=$( clquerysaapp -q APPLICATION_NAME=$APPLICATION_NAME ) if [[ -n $results ]]; then errmsg 12 3 $APPLICATION_NAME exit 1 fi ## ## Check to see if the application exists already ## results=$( clvt query application $SERVERNAME 2>/dev/null ) if [[ -n $results ]]; then errmsg 12 4 $SERVERNAME exit 2 fi ## ## Check to see if the resource group exists already ## results=$( clvt query resource_group $RG_NAME ) if [[ -n $results ]]; then errmsg 12 5 $RG_NAME exit 3 fi ## ## clsapre should be the first configuration statement in the file. ## clsapre ## Add an application server clvt add application $SERVERNAME \ STARTSCRIPT=$STARTSCRIPT \ STOPSCRIPT=$STOPSCRIPT || { # ERROR: Failed to create the application server: $SERVERNAME errmsg 12 6 "SERVERNAME" } ## Add a resource group ## Add a service/IP label and the application to the resource group clvt add resource_group "$RG_NAME" \ PRIMARYNODES="$PRIMARY $TAKEOVER" \ STARTUP="OHN" \ FALLBACK="NFB" \ FALLOVER="FNPN" || { # ERROR: Failed to create resource group: $RG_NAME errmsg 12 7 "$RG_NAME" exit 7 } ## Add the service IP label to the cluster configuration serviceIP=$(clvt query service_ip $IP 2>/dev/null) [[ -z $serviceIP ]] && { # Create the service IP label, first find a network typeset nodes="$PRIMARY $TAKEOVER" network=$(getServiceNetwork nodes) [[ -z $network ]] && { errmsg 12 10 $IP exit 10 } clvt add service_ip $IP NETWORK="$network" || { # ERROR: Unable to create service IP label: %s\n errmsg 12 10 "$IP" exit 10 } } ## Add shared volumes to the resource group VGS=$( get_volume_groups "$RG_NAME" ) clvt modify resource_group "$RG_NAME" \ APPLICATIONS="$NAME" \ SERVICE_LABEL="$IP" \ VOLUME_GROUP="$VGS" \ VG_AUTO_IMPORT="true" \ FORCED_VARYON="false" \ FILESYSTEM="" || { # ERROR: Failed to modify the resource group $RG_NAME. errmsg 12 8 "$RG_NAME" exit 8 } ## Add non-IP networks /usr/es/sbin/cluster/clconfigassist/clconfigassist_ctrl \ -c addnonIP >/dev/null 2>&1 ## ## Register the resource group to the application ## claddsaapp -a $APPLICATION_NAME \ APPLICATION_NAME="$APPLICATION_NAME" \ RESOURCE_GROUP="$RG_NAME" \ SMARTASSIST_ID="$SMARTASSIST_ID" \ COMPONENT_ID="$COMPONENT_ID" || { # ERROR: Failed to associate metadata with # application: $APPLICATION_NAME errmsg 12 9 "$APPLICATION_NAME" exit 9 } ## ## clsapost should be the last statement in the file. ## It will run verification. ## echo echo cltopinfo echo echo clsapost -v {pr kT3$o@;.םa՝a֝a&;2vT./usr/es/sbin/cluster/sa/gasa/sbin/discoveryle@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/gasa/sbin/discovery.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)04 1.3 src/43haes/usr/sbin/cluster/sa/gasa/sbin/discovery.sh, hacmp.assist, 61haes_r714 2/15/06 09:15:57 ## ## Name: discovery ## ## Purpose: The script use to disover whether the ## General Application Smart Assist (GASA) ## is installed on the local node. It always is, ## but there's work that needs to be done to handle ## internationalization issues. ## ## Parameters: ## None ## ## Returns: ## Writes to standard output the following: ## Other Applications:ZZOTHER:General Application Smart Assist:GASA:1 ## ## The fields can be explained as follows: ## ## Other Applications (field 2): the description of the Smart Assist. ## It should be internalized, and it should be identical with other ## smart assist components sharing this Smart Assist ID. ## ## ZZOTHER (field 2): the Smart Assist ID; by labeling it ZZOTHER it ## should lexically occur at the end. It has to be unique among all ## Smart Assist IDs. Does not need to be internationalized. ## ## General Application Smart Assist (field 3): the description of the ## component. It should be internalized. ## ## GASA (field 4): the Component ID. It has to be unique within the ## Smart Assist. ## ## 1 (field 5): 1 means it is installed on this node (it always is). ## dspmsg -s 12 sa.cat 1 "Other Applications" print -n ":zzOther:" # -n to remove the last \n dspmsg -s 12 sa.cat 2 "General Application Smart Assist" print -n ":GASA" # -n to remove the last \n print ":1" n/ k4$o@.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/gasa/sbin/modifyryle@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/gasa/sbin/modify.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)05 1.5 src/43haes/usr/sbin/cluster/sa/gasa/sbin/modify.sh, hacmp.assist, 61haes_r714 4/17/06 21:12:57 ## ## Name: modify ## ## Purpose: The shell script called by the SMIT MODIFY screen for the ## General Application Smart Assist (GASA) ## ## Parameters: ## -s the smart assist identifier (optional) - default is zzOther ## -c the component identifier (optional) - default is GASA ## -a the application name ## -S the application server name (optional) - default is app name ## -P the primary node ## -T the takeover nodes ## -R the start script ## -O the stop script ## -I the service IP label . /usr/es/lib/ksh93/func_include version='1.5' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- # Include the path for clvt PATH=$PATH:/usr/es/sbin/cluster/utilities # Include the path for claddsaapp clquerysaapp (Smart Assist Utilities) PATH=$PATH:/usr/es/sbin/cluster/sa/sbin # Default to General Smart Assist ID and Component ID SMARTASSIST_ID="zzOther" COMPONENT_ID="GASA" export PATH SMARTASSIST_ID COMPONENT_ID # Message Catalog Entries typeset -A MSGS MSGS=( [catalog]="assist.cat" [12,7]="ERROR: Failed to create the resource group: %s\n" [12,6]="ERROR: Failed to create the application server: %s\n" [13,1]="ERROR: The application name: %s is not defined to HACMP\n" [13,2]="WARNING: The resource group associated with application: %s\n\ has been removed from the HACMP configuration.\n" ) #---------------------------------------------------------------------------- # Functions: # get_volume_groups # errmsg #---------------------------------------------------------------------------- ## ## Function: ## errmsg ## ## Purpose: wrapper for dspmsg ## ## Args: $1 - message catalog set ## $2 - message id ## ... vargs format arguments ## ## Output: message catalog entry ## ## Return: return code from dspmsg ## function errmsg { typeset set=$1 typeset id=$2 shift shift typeset concat="$set,$id" /usr/bin/dspmsg -s $set "${MSGS[catalog]}" $id "${MSGS[$concat]}" $* } ## ## Function: ## get_resource_group ## ## Purpose: ## Obtains the resource group associated with the application name ## uses the HACMPgroup sa_key field to make the association, rather ## than relying on the HACMPsa_metadata entries (the user could change ## the name of the resource group). ## ## Arguments: ## $1 - application name ## ## Output: ## Resource group name ## ## Returns: ## 0 - if found ## 1 - if not found ## function get_resource_group { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset sa_name=$1 typeset name value odmget -q "sa_key=$sa_name" HACMPgroup | while IFS='=' read name value do name=$(echo $name) [[ "$name" == "group" ]] && { value=$(echo $value | sed -e "s/\"//g") echo $value return 0 } done return 1 } #--------------------------------------------------------------------------- # Main Program #--------------------------------------------------------------------------- while getopts s:c:a:S:P:T:R:O:I: option do case $option in s) SMARTASSIST_ID=$OPTARG ;; c) COMPONENT_ID=$OPTARG ;; a) NAME=$OPTARG ;; S) SERVERNAME=$OPTARG ;; P) PRIMARY=$OPTARG ;; T) TAKEOVER=$OPTARG ;; R) STARTSCRIPT=$OPTARG ;; O) STOPSCRIPT=$OPTARG ;; I) IP=$OPTARG ;; esac done ## ## clsapre should be the first configuration statement in the file. ## clsapre typeset VGS typeset RG_NAME=${NAME}_group typeset APPLICATION_NAME=${NAME} ## ## NOTE: users are allowed to change the names and properties ## of applications and resource groups. We therefore ## cannot count on the sames naming scheme we generated ## when we created these things. We have to look them up. # Get the application ID from the name APP_ID=$(clquerysaapp -q APPLICATION_NAME="$APPLICATION_NAME" ) [[ -z $APP_ID ]] && { # ERROR: The application name specified: %s is not defined to HACMP errmsg 13 1 $APPLICATION_NAME } # Get the resource group name from the application ID RG_NAME=$(get_resource_group $APPLICATION_NAME) [[ -z $RG_NAME ]] && { # WARNING: The resource group associated with application: %s\n\ # has been removed from the HACMP configuration. errmsg 13 2 $APPLICATION_NAME # Set the resource group name RG_NAME=$NAME"_group" clvt add resource_group $RG_NAME \ PRIMARYNODES="$PRIMARY $TAKEOVER" \ STARTUP="OHN" \ FALLBACK="NFB" \ FALLOVER="FNPN" || { # ERROR: Failed to create the resource group: %s\n errmsg 12 7 "$RG_NAME" exit 7 } } # Get the application name from resource group set -a eval $(clvt query resource_group "$RG_NAME" | grep APPLICATIONS ) set +a SERVERNAME=$(echo $APPLICATIONS | awk '{ print $1 }') # If the application server name is not defined, then use the default # name and create the application server [[ -z $SERVERNAME ]] && { SERVERNAME=$APPLICATION_NAME } # Check to ensure the service IP label is defined serviceIP=$(clvt query service_ip $IP 2>/dev/null) [[ -z $serviceIP ]] && { # Create the service IP label, first find a network network=$(clvt query network | head -n 1) clvt add service_ip $IP NETWORK="$network" || { # ERROR: Unable to create service IP label: %s\n errmsg 12 10 "$IP" exit 10 } } ## Modify the application server ## If the application server exists, remove it, then re-add results=$(clvt query application $SERVERNAME 2>/dev/null) [[ -n $results ]] && { clvt delete application "$SERVERNAME" } clvt add application "$SERVERNAME" \ STARTSCRIPT="$STARTSCRIPT" \ STOPSCRIPT="$STOPSCRIPT" || { # ERROR: Failed to create application server: %s errmsg 12 6 $SERVERNAME exit 6 } ## Modify the resource group APPLICATIONS=$(echo $SERVERNAME $APPLICATIONS | sort -u) typeset -A appMap for app in $APPLICATIONS; do appMap[$app]=$app done clvt modify resource_group "$RG_NAME" \ PRIMARYNODES="$PRIMARY $TAKEOVER" \ SERVICE_LABEL="$IP" \ APPLICATIONS="${appMap[*]}" || { # ERROR: Unable to modify resource group: %s errmsg 12 8 $RG_NAME exit 8 } echo echo cltopinfo echo echo ## ## clsapost should be the last statement in the file. ## It will run verification. ## /usr/es/sbin/cluster/sa/sbin/clsapost -v  k5$o@.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/gasa/sbin/smit_utille@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/gasa/sbin/smit_util.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/gasa/sbin/smit_util.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # ## ## Name: smit_util ## ## Purpose: Returns cmd_to_classify, cmd_to_discover, cmd_to_list ## output for GASA smit screens ## ## Arguments: ## add_discover ## modify_discover ## list ## list_nodes ## ## Returns: 0 on success ## <0 on failure ## . /usr/es/lib/ksh93/func_include version='1.4' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- PATH=$PATH:/usr/es/sbin/cluster/utilities PATH=$PATH:/usr/es/sbin/cluster/sa/sbin export PATH #--------------------------------------------------------------------------- # Functions: # get_primary # get_takeover # list_nodes # get_resource_group # get_gasa_attributes #--------------------------------------------------------------------------- ## # Function: # get_primary # # Purpose: # Return s the local node if it is part of the list of discovered nodes; # else return nothing. # # Arguments # A list of discovered nodes # # Output: # echos the local node name or nothing to standard output # # Returns # n/a function get_primary { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset nodes=$1 typeset localnode=$( /usr/es/sbin/cluster/utilities/get_local_nodename ) typeset firstnode for node in $( IFS=',' set -- $nodes; echo $* ); do firstnode=${firstnode:=$node} if [[ $node == $localnode ]]; then echo $node return fi done echo $firstword } ## ## Function: ## get_takeover ## ## Purpose: ## Returns the list of discovered nodes minus the local node name. ## ## Arguments: ## A list of discovered nodes ## ## Output: ## echos the local node name or nothing to standard output ## ## Returns: ## n/a ## function get_takeover { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset primary=$1 typeset nodes=$2 typeset newnodes="" for node in $( IFS=',' set -- $nodes; echo $* ); do if [[ $node != $primary ]]; then if [[ -z $newnodes ]]; then newnodes=$node else newnodes="$newnodes $node" fi fi done echo $newnodes } ## ## Function: ## list_nodes ## ## Purpose: ## This is called by the SMIT modify panel for the General Application Smart ## Assist when it is necessary to list the nodes that might be part of the ## takeover nodes, or might be a primary candidate. ## ## ## Arguments: ## $1 - Smart Assist ID ## $2 - Component ID ## ## Returns: ## n/a ## function list_nodes { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -n SA_ID=$1 typeset -n COMPONENT_ID=$2 typeset nodes typeset node # Check if RBAC is enabled typeset is_rbac_enabled="" is_rbac_enabled=$(clodmget -nq "group=LDAPClient and name=RBACConfig" -f value HACMPLDAP 2>/dev/null) # For a non root user, append the user name to the output file. [[ -z "$LOGIN" ]] && user_name=$(id -nu 2>/dev/null) || user_name="$LOGIN" if [[ $user_name != "root" && $is_rbac_enabled == "YES" ]];then CL_DATFILE="/var/hacmp/tmp/clquerysa_out"_$user_name else CL_DATFILE="/var/hacmp/tmp/clquerysa_out" fi /usr/es/sbin/cluster/sa/sbin/clquerysa -t discover > \ $CL_DATFILE # Change the ownership of output file, for a non root user. [[ $user_name != "root" ]] && chown $user_name $CL_DATFILE nodes=$( /usr/es/sbin/cluster/sa/sbin/clquerysa -t filter \ -s $SA_ID -c $COMPONENT_ID < $CL_DATFILE ) for node in $( IFS=',' set -- $nodes; echo $* ) ; do echo $node done } ## ## Function: ## get_resource_group ## ## Purpose: ## Obtains the resource group associated with the application name ## uses the HACMPgroup sa_key field to make the association, rather ## than relying on the HACMPsa_metadata entries (the user could change ## the name of the resource group). ## ## Arguments: ## $1 - application name ## ## Output: ## Resource group name ## ## Returns: ## 0 - if found ## 1 - if not found ## function get_resource_group { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset sa_name=$1 typeset name value odmget -q "sa_key=$sa_name" HACMPgroup | while IFS='=' read name value do name=$(echo $name) [[ "$name" == "group" ]] && { value=$(echo $value | sed -e "s/\"//g") echo $value return 0 } done return 1 } ## ## Function: ## get_gasa_attributes ## ## Purpose: ## Returns a five column list of attributes for an application suitable ## for a cmd_to_discover in a SMIT panel. ## ## Arguments: ## $1 - Application Name ## ## Output: ## SMIT useable colon separated data list for the modify screen ## ## Returns: ## 0 - on success ## function get_gasa_attributes { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset APPLICATION_NAME=$1 typeset primary takeover SERVERNAME RG APPLICATIONS SERVICE_LABEL RG=$(get_resource_group $APPLICATION_NAME) set -a eval $(clvt query resource_group $RG | grep APPLICATIONS) eval $(clvt query resource_group $RG | grep NODES) eval $(clvt query resource_group $RG | grep SERVICE_LABEL) set +a echo $NODES | read primary takeover typeset serviceIP=$(echo $SERVICE_LABEL | awk '{ print $1 }') SERVERNAME=$(echo $APPLICATIONS | awk '{ print $1 }') [[ -n $SERVERNAME ]] && { set -a eval $(clvt query application $SERVERNAME) set +a } echo "#application:primary:takeover:start:stop:ip" echo "$APPLICATION_NAME:$primary:$takeover:$STARTSCRIPT:$STOPSCRIPT:$serviceIP" return 0 } #--------------------------------------------------------------------------- # Main Program #--------------------------------------------------------------------------- COMMAND=$1 shift case $COMMAND in add_discover ) primary=$( get_primary "$@" ) echo '#primary:takeover' printf "%s:" $primary echo $( get_takeover $primary "$@" ) ;; modify_discover ) get_gasa_attributes $1 ;; list_nodes ) list_nodes "$@" ;; list ) shift for arg ; do echo $arg done ;; esac exit 0 he SMI kRe,$o@l-.םa՝a֝a&l-2vT./usr/es/sbin/cluster/sa/sbin/clsaxmlutilille@@aH X00X01L.textX .data0X0XX@.bss00.loader%B(= ,|nx|#x|+xb,0AA 8| S*N!A9<}{x~xH` ,Ab$H1A| @__start,M H4N @__threads_init!|AfH| FN!Ab ,Ac| CN!Ab,Atc| CN!Ab,Ac| CN!Ab,Ac| CN!AH8!@}N b,AK A__threads_init@AF2_14|ؒܓ!Aa쿁!DaH8`PH AD8aHDHALP,Ap;bTBX"\`dh````!,sD@/v,tA,x@8aHHA,@HbL,,ALA48`8!}؂܃!Aa컁N H8`HmAKH8`8!}؂܃!K@KTH9aHD8HA,ALKK$/c,a@K ,m@K@K@K A main|a8!A@DH ,@8b\8cHmA`HA,aLA@c`bh8@LHY@,AX,A@8Dc`,@PL8@HcH1AHQA8`x8!p}a상N H1cD@,A0HaDd| DN!AKD8~HA8p88 H A`d8|@HAcHqAHA8`HAK a@c H8@`,c@h` HA@`faPD8d `8$HAaPd| DN!AKHKD8}HA8$88HA`d8|@H-AcHAHA8`HAKD8~HA8888 HA`d8}@HрA8`HAKD8H]A888 HqA`d8~@HA8`HeAK A8search|!Aa,;D```bXB8!A@HaL,L3BA```!,AHaL cHKu,@؁x8!p}!Aa컁N aH<HрAH8c#HA,@,AK|aLc8@H 8@,AXHAa@d| DN!AK$PAXa\`dhl8!pN AprintAllElements|!8@X8@ He@,A8a@H1`X8!P}N AHprintElementTree,`|aD!AAaD`Tb```!caD ,ApK,@P| H,@4,@x8!p}a상N cH %`,AK`H),AT,A$c aDK,ApK| H,AcH `K8 aDH AaHH`aL``8~P`HH 5AaLd| DN!AaHd| DN!AK4hl8!pN A__printElementTree|,!AD8 ,A|D8`c ,@ 8 ``!K8,A ,@KȀbDH8!@}c N bD8!@c N A__countChildElements8K @countChildElements|!}&Aa쿁D,`8`!bX;@A@HaL,L3BAP|;yN````!aH,@8<H A8c#HH A,@@\_aL ccHK),@xt8!p|!} Aa컁N aLc8@H=c!@cHc`,@ aL K,AK HA8cc$HɀA,@@a@d| DN!A_KAXa\`dhl8!pN C findElementbP|ac!H A||yDcA0cc8@H AcH A|{yApHl8}HA8H88 HA`d8@H-A8`H Ac8@ccH AcH A|{y@8}HA888 HA`d8@HŀA8`HAcH uA8b\8cHA|}y@ȃD8|H-A888 HAA`d8@HYA8`H5AccH 1Acc8@aDH AAcaDH YAh8!`}a상N cH A8b\8cHA|}yA@ccH Acc8@aHH AcaHH ՀAh8!`}a상K| A\validateL\|P!`,,A@(h,A$,A,A 88H AA,A8|8H %A,8`A$X8!P}N D8~H-A888HAA`d8@HYA8`H5A8`X8!P}KD8HŀA888HـA`d8~@HA8`H̀AKD8~H}A888HA`d8}@HAH8`HAKD8tH-A888HAA`d8}@HYAHI8`H1A\,@PK( A validate_args|D8~h!HA888HA`d8@HŀA8`HAH8!@}N Apusage|,`,!aDH`A``!HyA8cHHA,aHA4,A Kȁh8!`}N aD 8HA~aH,AK|X\8!`N A findAttribute@A L| N HA L| N lA L| N pA L| N tA L| N xA L| N |A L| N A L| N A L| N A L| N A L| N A L| N A L| N A L| N `c|!`,AAx`!``,@c,A<d| DN!A8X8!P}N 8L8!PN cd| DN!A8X8!P}N AremoveTagStackElemet|`!DH`~aDHA8~,AL,A ```!`,@cX8!P}N cX8!P}N AaddTagStackElement|,!AA,AP```!d| DN!A,A8,@```!,A,AKX8!P}N L8!PN A purgeTagStack,;|`!A`~D````!~`}K1A8ccH̀AaHaDK AD8aHHA``,@ch8!`}N c\8!`N A printTagStack|8`!H5A|}y8cA X8!P}N 8~K}A888KA`d8@KA8`KA8X8!Pc}N AnewTagStackElementA L| N A L| N A L| N A L| N A L| N A L| N A L| N ĐA L| N ȐA L| N ̐A L| N АA L| N 000@(#)61 1.16 src/bos/usr/ccs/lib/libc/__threads_init.c, libcthrd, bos61B, b2007_33A0 8/2/07 13:09:21.%s mainusage%s=%s searchselectstrtoldvalidate%s%s=%s strtoimaxassist.catassist.catassist.catassist.catassist.catassist.catassist.catassist.catassist.catassist.catassist.catassist.catfindElementsx:m:t:a:c:v:sx:m:t:a:c:v:validate_argsfindAttributegetdtablesizeprintAllElementsprintElementTree__printElementTreecountChildElements Invalid Command. __countChildElements Invalid Arguments. XML Document is invalid xmlSchemaParse returned NULL No Element with name %s is found xmlSchemaParserCtxtPtr returned NULL No Atrribute with name %s for Element with name %s Invalid XML file. Please ensure correct path and the file is readable. Unable to parse the xml file. Please ensure xml document is well-formed. Unable to parse the xml file. Please ensure xml document is well-formed. Invalid Schema file. Please ensure correct path and the file is readable. Usage: clsaxmlutil -s -x -m -t [ -a ] 0selectstrtoldstrtoimaxassist.catpurgeTagStackprintTagStackgetdtablesizeaddTagStackElementnewTagStackElementInsufficiant memory removeTagStackElemet000X000$0(0,0004080<0@!3ferrno@accessx@ _iob@malloc@ exit@ fprintf@ catgets@ printf@ getopt@ "@ __crt0v@optarg@/@xmlFree@L@ X@ d@ v@ @ @ @ @ @ @ @ @ @ 9@ T@ l@ }@ get_catd@ __start0! 0X0\0d0,00000, 00 04080<0@0D0H0L 0P0T0X0\0`0d0h0l0p0t0x0|0000"0 00000 0000000 0000!0/usr/es/lib:/usr/lib:/lib:/usr/lpp/xlC/liblibc.ashr.olibxml2.alibxml2.shr.olibclstr.ashr.o@VPDclsaxmlutil/5765E6200/520 __mod_init__malloc_user_defined_name xmlStrdup xmlStrlenxmlCheckVersionxmlCleanupParser xmlReadFile xmlStrncmp xmlFreeDocxmlNodeListGetStringxmlDocGetRootElement xmlStrncatxmlSchemaNewParserCtxtxmlSchemaFreeParserCtxtxmlSchemaSetValidErrorsxmlSchemaSetParserErrorsxmlSchemaNewValidCtxtxmlSchemaParsexmlSchemaValidateDoc l+$o@5.םa՝a֝a&Z2vT./usr/es/sbin/cluster/sa/sbin/clvtsauti@@    -e ainrst"#_cdglmopu$/:=ACEILNOPRSTfhvx.9;DFGM[\]by%&)012>BKUqw{}(,UN2N!GbJ#`>PQۀ|:0H`H,Bƀ ', ?d.TPACDfM[:oIʪ+pvWUuC&N+.]udPN/Jv ^ek$ ڇ RYrA Jzr5>)bHr/X$ چ=UrP嗹\NZ{Pa뜸k|2ܧ;O. ]`X 'M^;P|Uy3r^ZK3jqʽ4H- OI|zn7xAfmC9WbKH(Fgs_8^|f*XRefw"U/Uuqm,WPdt)Uj'^70)qSPj C0+ ֡17S!n" .Tڇn"XIL?f3|tgR|6?ӹ];| "m䳣7JO40M5K]f|oIu^ M5~>X1-z湛5q^ \'q|jzK9[N|k|W Q[P"m/U\R:񝧊Y}঒,'&*jUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUT0`޼[PjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTL)xl^ox$piSQ&T<<@óͽCgbx`z*S"\R/$X( 7%NNN!,JMISan" R9:At@Gď($~&%&07RʖR9:K]f3C) [u ܁Wp9)PHLJ&֡UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUMCf Mo%;M5 kM3xM. *`$ʇ(~8vylLO\:r7&U 56SksMɕg!6 js0Jo^ZmbM5 1ayX֡{1_)ك VMAc+\'!C'Kaғ(_3wO\fbj CbPPW[+.:b(OUj+^a!CڃPܙVr?18 "q.W>k|kv+,"ྛ,*;Pjz9\֡EmA`9K?f3hEW|DN:8 \(()40Jo^0xADت*SM. *`$ʇ(~8vylLO\:r Wc1V.W>\*M[m6-  ]\*",$ ׅSx1phMB׀֡|& Mv-Ae Ƶb/Y\ݹ;Pj kP26c j^^ʳ֡E𜳫+'qP\QԆ/ j CX֡E P4Mۓ0Jo^|& Mv8IExVW9q׀@ $od: ЛZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU5 9%7C"M(@). f,/+=ueyzK|ܣPj kP%Z=q|j C/sf0֡EmAeL9 j_ :K7(W/f5~Qx[Pj>NRƵb/ -pzKg0Jo^|& MYk؋<ŀ?T =6 js0Jo^ZE24fP3j_ :XStg5p t99VnMAel?(-5 ɕg!C؋9gVWrAa(rjCZ,kP"MMњ3r7)-`tE'g7 cPkM3hnћMox=`z*S2\y8^BtTN)~,$ q2@LEUZJfK G 8RNzJ7b/є7)UotT${obs 7xMo$@yEJm؋3Y@@ʼn <" g.2z@Hb@(၍ʼn <" *r8X i_p i$x`E,LI)Lpi %ło_ NG$x'AY؋3Y];#oXZJ fQ( NL-%1i:f,\oOzyͪPCmmo"#1fai)p>mVZFśU<<0H{o_  *Xs ^ ,$ G P\)j];*URrk&ޭ䃌ܟӾNFZ9oD\.NFZӹzbc܄EȽ10. g5{[1V.W=NZ¥NJ.ɭ񝧽9b@-r10["#,4r$ .q1g,E P4MۓFStfܦqf&n2/0<|O5n9kN/0<#B"ޘM DpagFxI؋4e7Fhc&H$`yAOEӹ#ܤVLgzgE7ћǖ,LI(Oo $\%KLxy6~&'|&4f1$@yEJo8 j&-%3%ǐ#aaa|t)'O=%NNN|? hMBPÙSz?^PjfbC.\)*nzKrEur_PFVNCZ_ 53ˑUORo|'g "JƉg{Ys.zDra[BmkP35~i0 M5 1ayX֡;Iu^ t|-άixp`P#K:3)>Sfl31C"N[_)䳣=ғ=%ax\'-OU:⳦^a!C sPi`޼3OVwY@xId̗@qФ<998nF `iDGJ9EV]|R\K4oMIsL1P4Vt޼7 .Z>K:3)>S jrݤU澫208`y fi%7 qxnH%)h3wgQ[KuesKgM5 |Tek5~`y ֠2Paji Ael?50Jo^od̗@qФ<998nF `i,{$ DU]Edp,,,/$礩t|?fs\i%7 ۤo4y|0¯IzobsRFㅄf |",%'=0OaY7#>fs\p83}^ix6na^bܵi٧S6nzw5q$)ݬHQ`'tf +/3z3k XPńRFk/OQo%yjS,tOIu^ d)˙؊\fgVW4VtڃPA.Iʫ}WeD T@ gpڃPAf5)5HkPL)xjS-ؖod̗@qФ<998nF `iH0EeC?;<6~&'}k+0 T@ ַ}ϙ\3wf M6/f-0t޼X\TH9x]f "&LDXI%a~ EY77|n"f MÚ2m 'M)> _3w_UkӳOm7r6jpISXosnL-O64W^ffNAM "̴WbAĂ0979kRZ+ Auf K:3)>S'S rj C"N\ޫ=s\tgR|-άixpڃPAf5)5HkPL)xjS0>XI`z*S2\y8^BtTN)~,DsŁ$KJ"2m?~W> à*f+'u=7%\dfQr!GbJ)F\JnU[M,ғ9o枬2r P<3( 1%Y#.i |%7*tfI򜂎q2@LEUZJfK G 8RNzJ7'n8)~,ЛZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU5 9%7C.rtf,/+?>fΌJO9ky9p kPSMj C/sf0֡95SzԹrׄX\9Z UtRANE<\ďǔ q̏0`( Dg7 I_ X$xBmjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUT0`޼ԹA[PjfbCsnYp-x0ڃPFVNCZ kPSMj C/sf0֡95SzԹA^obs]fłobsp%WMe.y]fh1GIuzbGr8QJ(eAk8Y ZN7"Oń`#kP35~2D I5 1ayX֡k.2n_)]fr/f>?t؋9s7z:⳦?|7&}%ax\',=}7%\eS5ɨ~ix. =OU򜹛s]}άixpڃPAf5)5HkPL)xjS T@Q0=WQi).</ I:y*rrp܌'q|? ox$piSQ&T<<@óͽCgbxַb\|-c\9kŘH4hB7nN"MMњ3rʼn <" 7FStfܦUN29u枬).Błc2ː >UN29ub/Ѹ&ܦS5ظ.k◦0m=nMڇEv.3}  7Қ =}7ss7y.Fgrj = O8Yfj;8QܷA=7Ʌ\+rܪ湛:⳦>*2r?/ j C%֡^a!C sPkM3LWb7ܰQ0=WQi).</ I:y*rrp܌'q|? ox$piSQ&T<<@óͽCgbxַb\|,UIuNe.rt$oK)sIuY"M(@&[_ )3FnSX2D$Thnћǖ,LI)0SVdIxi.ʩ◯ 5UU/BPh(+n/4+gF{'yrto|%7* շJ|+]; *'ɑI vqf|׆Uw,JML+(mI&cLV+fW0d4rzw$&[gm,  "\RĉkDDq`IҦLxy"ٷo~W>DG. *`$ʇ(z1<\d8A@PP+avb8(ۮHA@Sn fQ!GbJ)FI$( ISoA`0 :W-x$&",$LB% ƀ[1V.WkN7nrw^:o5EȐ2T!LJY+7_8^|ueuٛ M ̒&njfQr!GbJ)FI$( IY8ʳ7{Z7k;4nM %"`" =DȎUN2N4rMvI"\ T@LDHnjfQr!GbJ)FI^ÎU@igȗ*X&"$L3( 1%Y#$/OPa*,\igbs~fdl13$ ""c̢22BĕfS<܆HQrD3z= 01Ded*̧q' r!GdӒ'YՑD4 xe!|$2d11@X >uY@PpH3( 1%Y#$HdI"V.I[xe!|$2d1x%ld+hfoVGrJ#`N UN2N\N 1x1(D3z=X xe!|$2d2N`dsfoVGDȔ"dLqF\HQwpOVs!GapuYLDH3( 1%Y#$ᓒҸ2rY\N\Q:ެo&L"@"% UN2N9,LdȤD3z=0 c̢22BĕfSNK95|NK":ެo%(eK$KUN2N_ 1FWN7#iCc̢22BĕfS' 18I"xe!|$2d13i02Bͤ'YՑD4"D1Ded*̧q' MuHQ> uYDt4&8#.C$( IVe;8b: >q:ެo (@UN2NX 2BN7#kf*`7cf"HDDrD3z= 04fd{ -"DDt:ެo%b䕱1ǯ$uYJ+ha8&80Ģq"`yb(LqsfoVGDȔ"dLq枭fd{2`AK"cFWN7#&HC"cE%_p'YՑDɁG|.I"X"Q0DD؋4eq9qD3z=0&8$N7#h XLqIN7#iQE =5|D3z=8h4Lq8bfoVG DX fd{A lX\&Lp @ &H{$&Ia"`p$q19"uYh-J"X9"&8hfoVGD\phHzrJ'YՑ+$= D$ =x1(E#I"uYrJ#`N"<8׋\i$N7#"DQX&HxEE1(D3z= (y@8P%%2ȗxEE5:ެo a Dq  dR*r$ $KbcH5bfd{C"PCA.T"P. ab4ŀyY,1 i4nѼЗ3wˈ; aѻێ^WbY\ռ"ٓPjN, O@ k`C&o$U.םaX՝a֝a&U2vT./usr/es/sbin/cluster/sa/config/valid_COMPs.xsd$$  kCD&o$i.םaX՝a֝a&i2vT./usr/es/sbin/cluster/sa/config/valid_PROPs.xsd$$ envname kD&oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/db2ig/AA kBD&oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/db2/etcalid_PRAA kD&oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/db2/sbinlid_PRAA kꢱD&oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/db2/catlid_PRAA kBD&oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/db2/configd_PRAA kvza$o_.םa՝a֝a&_2vT./usr/es/sbin/cluster/sa/db2/etc/db2_definitionsmetadat# @(#)84 1.1 src/43haes/usr/sbin/cluster/sa/db2/etc/db2_definitions.sh, hacmp.assist, 61haes_r714 2/25/05 14:30:14 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/etc/db2_definitions.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG DB2_DEFAULT_CLUSTER_NAME="HADB2_Cluster" DB2_DEFAULT_DISCOVERY_FILE="/usr/es/sbin/cluster/sa/db2/etc/db2.disc" # These are the get db cfg variables that are looked at for volume groups # to add to OTHERVGS # DB2_DB_LOGPATHS="LOGPATH NEWLOGPATH FAILARCHPATH OVERFLOWLOGPATH \ MIRRORLOGPATH DFTDBPATH DIAGPATH" # These are the get db cfg variables that are required in the db2.disc # discovery file # DB2_DB_VARIABLES="OVERFLOWLOGPATH MIRRORLOGPATH LOGRETAIN USEREXIT \ FAILARCHPATH LOGARCHMETH1 LOGARCHMETH2 LOGPATH \ NEWLOGPATH DFTDBPATH DIAGPATH" # These are the DB2 environment variables from db2profile and userprofile # that we want to discovery # DB2_DBM_ENVIRONMENT_VARIABLES="ARCHIVE_PATH RETRIEVE_PATH AUDIT_ERROR_PATH" = k|$o@[;.םa՝a֝a&[;2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2discoveryetadat@@#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2discovery.sh 1.17 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2discovery.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_db2discovery ## ## DESCRIPTION: Perform DB2 Discovery, discovers all instances, databases ## database configuration settings and DB configuration settings. ## on the local node. ## Including tablespace paths, and devices, volume groups the DB requires. ## ## Additional Discovery Info: ## - The version of the DB2 software running on the local node. ## - The type of DB2 instance ## - Volume group and hdisk information from the local node (AIX_DISKS) ## ## This script *requires* that the instances discovered have the ## DB2 instance home directory mounted, and for discovery of any ## databases requires the instance to be active on the local node. ## If the instance is not active, the instance information can be ## discovered, but the tablespace paths, and thus the volume groups ## associated with the tablespace paths cannot be discovered. ## ## In the event the databases are unable to be discovered by this ## script, the cl_db2preimport script will issue a warning indicating ## that the DB2 instance was not online, and any DB volume groups ## need to be added by hand to the instance resource group created ## during import. ## ## This script writes its output to stdout, the content of the output ## is suitable for sourcing as a ksh93 file, all of the output from ## each of the nodes is collected in cl_db2smadd, and then written to ## /usr/es/sbin/cluster/sa/db2/etc/db2.disc ## ## PROCESSING: This script is called by cl_db2smadd which calls this script on ## every user specified node in the cluster. This script will spawn ## one process for every DB discovered in each instance. These processes ## will stop between instance discoveries, and a new set of ## processes will begin discovery for each DB in the current instance. ## ## ARGUMENTS: -q Run quick discovery, don't perform database discovery, and tablespace ## volume group discovery ## ## EXIT CODES: 0 - success ## 1 - failure ## # # Name: dump_user_info # # Description: This script reports the user, group, uid and gid # of the discovered user, it is the compliment to # function KLIB_AIX_get_user_info # # Arguments: userinfo structure as generated by KLIB_AIX_get_user_info # prefix - the prefix to use as the hash table name element # # Returns: None # function dump_user_info { typeset -n userinfo=$1 typeset prefix=$2 echo "\t[""$prefix""_USER]=\"${userinfo.user}\"" echo "\t[""$prefix""_GROUP]=\"${userinfo.group}\"" echo "\t[""$prefix""_UID]=\"${userinfo.uid}\"" echo "\t[""$prefix""_GID]=\"${userinfo.gid}\"" } # # Name: get_db_configuration # # Description: This function dumps the DB configuration to stdout # specifically the configuration information obtained # by running db2 get db cfg, and by getting all of # the tablespace paths and devices. This function # also generates a list of "OTHERVGS", or a list # of VGs the database has tablespace paths or # raw logical volumes. # # Note: This function runs in its own process. # This is to parallelize the discovery of instance # databases. DB discovery is the most time consuming # task of the script, thus db discovery is done in parallel # # Arguments: # instance - scalar name of the instance # database - scalar name of the database to discover # vgfile - name of the OTHERVG file to generate, this is the # output of this function. # # Returns: n/a # function get_db_configuration { typeset instance=$1 typeset database=$2 typeset vgfile=$3 # # Gather the configuration from the GET DB CFG command # unset DB2_DB_CONFIG typeset -A DB2_DB_CONFIG unset DB_VGS typeset DB_VGS typeset db_path typeset tb_type typeset tb_value KLIB_DB2_get_db_cfg $database $instance_user DB2_DB_CONFIG # Dump the database cfg information for key in $DB2_DB_VARIABLES; do echo "\t[DB_CFG_""$database""_""$key""]=\"${DB2_DB_CONFIG[$key]}\"" done # Iterate over the list of tablespaces paths that each DB # uses, and ensure the underlying VG is added to the list # of othervgs # typeset -i tb_count=0 TABLESPACE_PATHS=$(KLIB_DB2_get_tablespace_paths $instance_user $database) for tablespace in $TABLESPACE_PATHS; do tb_type=${tablespace/:*/} tb_value=${tablespace/*:/} if [[ "$tb_type" == "Path" || "$tb_type" == "File" ]]; then echo "\t[DB_CFG_""$database""_TABLESPACE_PATH_""$tb_count""]=\"$tb_value\"" KLIB_AIX_add_vg_by_path DB_VGS $tb_value "$DB_VGS $HOMEVG" elif [[ "$tb_type" == "Disk" ]]; then echo "\t[DB_CFG_""$database""_TABLESPACE_DISK_""$tb_count""]=\"$tb_value\"" KLIB_AIX_add_vg_by_disk DB_VGS $tb_value "$DB_VGS $HOMEVG" fi (( tb_count++ )) done # Check the database configuration for additional VGs in the archive logs, and # userexit if the user has set these, then we expect the archive_log # path to be set in the DB CFG. # if [[ "${DB2_DB_CONFIG["LOGRETAIN"]}" == "RECOVERY" && "${DB2_DB_CONFIG["USEREXIT"]}" == "ON" ]]; then if [[ -n $ARCHIVE_LOG ]]; then KLIB_AIX_add_vg_by_path DB_VGS $ARCHIVE_LOG "$DB_VGS $HOMEVG" fi fi # Check the LOGPATH variable in the DB configuration for a VG for db_path in $DB2_DB_LOGPATHS; do KLIB_AIX_add_vg_by_path DB_VGS ${DB2_DB_CONFIG["$db_path"]} "$DB_VGS $HOMEVG" done # Remove the leading space in the VG list, if there is one if [[ ${DB_VGS:0:1} == [[:space:]] ]]; then DB_VGS=${DB_VGS/[[:space:]]/} fi echo "\t[DB_""$database""_VGS]=\"$DB_VGS\"" echo "$DB_VGS" > $vgfile } ########## # MAIN ########## # Read in the db2 definitions . /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the message catalog entries . /usr/es/sbin/cluster/sa/db2/cat/cl_db2discovery # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 QUICK_MODE=false if set -- $(getopt p:q $* 2>&1); then while (( $# != 0 )); do case "$1" in -q) # Don't perform DB2 tablespace discovery, and other processes that # take a long period of time # QUICK_MODE=true ;; -p) DSE_INSTALL_DIR=$2 ;; esac shift done fi # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/db2:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/sa/db2/sbin/ PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) DB2_DISCOVERY_FILE=$DB2_DEFAULT_DISCOVERY_FILE DB2_REQUIRED_COMMANDS="db2ilist" if lslpp -cw '*bin/db2ilist' 1>/dev/null 2>&1 then DB2_CLIENT_PATH=$(lslpp -cw '*bin/db2ilist' | tail -n 1 | awk -F: '{ print $1 }') DB2_CLIENT_PATH=${DB2_CLIENT_PATH/db2ilist/} else DB2_CLIENT_PATH=${DSE_INSTALL_DIR}/bin fi DB2_VERSION=$(KLIB_DB2_swversion) PATH=$PATH:$DB2_CLIENT_PATH:$DB2_CLIENT_PATH/../instance/ export PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) FOUND_DB2_CLIENT_PATH=false [[ -n $DB2_CLIENT_PATH ]] && FOUND_DB2_CLIENT_PATH=true for cmd in $DB2_REQUIRED_COMMANDS; do if [[ ! -f "$DB2_CLIENT_PATH/$cmd" ]]; then FOUND_DB2_CLIENT_PATH=false fi done # If the client path to the DB2 instance commands was found, then # report any instances discovered, also report the path to the commands # $FOUND_DB2_CLIENT_PATH && { DB2_INSTANCES=$(db2ilist) echo "DB2_INSTANCES=\"\$DB2_INSTANCES $DB2_INSTANCES\"" echo "DB2_PATH=/usr/es/sbin/cluster/sa/db2/sbin:$DB2_CLIENT_PATH:$DB2_CLIENT_PATH/../instance/\n" } DATE=$(date +"%m/%d/%y %H:%M:%S") typeset -i NUM_DB_DIRS NUM_DB_DIRS=0 typeset -i INST_AVAIL INST_AVAIL=0 typeset -i instance_index instance_index=0 for instance in $DB2_INSTANCES do for instance_user in $(lsuser -a ALL) do HOMEDIR=$(lsuser -a home $instance_user) HOMEDIR=${HOMEDIR/*=/} # Check to see if theres a directory with the same # name as the instance if so, and there's a db2profile script then # we found the DB2 home directory. # [[ -f $HOMEDIR/sqllib/db2profile ]] && { NUM_DB_DIRS=0 INST_AVAIL=0 # # Gather the DB2 shell environment # DB2_SHELL_ENV=$(lsuser -a shell $instance_user | awk -F = '{print $2}') (echo $DB2_SHELL_ENV | grep csh > /dev/null) && { DB2_SHELL_ENV="csh" } (echo $DB2_SHELL_ENV | grep ksh > /dev/null) && { DB2_SHELL_ENV="ksh" } [[ "$DB2_SHELL_ENV" == "ksh" ]] && { if /usr/bin/su - $instance_user -c "LC_ALL=C LANG=C db2 list database directory" > /dev/null 2>&1 then /usr/bin/su - $instance_user -c "LC_ALL=C LANG=C db2 list database directory" | while IFS='=' read name value; do name=${name//[[:space:]]/} value=${value//[[:space:]]/} if [[ "$name" == "Localdatabasedirectory" ]]; then (( NUM_DB_DIRS += 1 )) [[ -d $value/$instance ]] && (( INST_AVAIL += 1 )) fi done fi } [[ "$DB2_SHELL_ENV" == "csh" ]] && { if /usr/bin/su - $instance_user -c "set LC_ALL=C LANG=C; db2 list database directory" > /dev/null 2>&1 then /usr/bin/su - $instance_user -c "set LC_ALL=C LANG=C; db2 list database directory" | while IFS='=' read name value; do name=${name//[[:space:]]/} value=${value//[[:space:]]/} if [[ "$name" == "Localdatabasedirectory" ]]; then (( NUM_DB_DIRS += 1 )) [[ -d $value/$instance ]] && (( INST_AVAIL += 1 )) fi done fi } if (( $NUM_DB_DIRS > 0 && $INST_AVAIL > 0 && $NUM_DB_DIRS == $INST_AVAIL )) then OTHERVGS= echo "DB2_NODES_$instance=\"\$CLUSTER_NODE \$DB2_NODES_$instance\"" echo "# Discovery Info for DB2 Instance $instance \n\ typeset -A DB2_INSTANCE_$instance \n\ \n\ DB2_INSTANCE_$instance=( \\" instowner=( user='' group='' uid='' gid='' ) KLIB_AIX_get_user_info instowner $instance_user HOMEVG=$(KLIB_AIX_get_vg_by_path $HOMEDIR) HOMEPVIDS=$(KLIB_AIX_get_pvids $HOMEVG) DATABASES_AVAILABLE=$(KLIB_DB2_get_instance_databases $instance_user) # # Get the DASUSR information # DASUSR=$($DSE_INSTALL_DIR/instance/./daslist 2>/dev/null) dasuser=( user='' group='' uid='' gid='' ) KLIB_AIX_get_user_info dasuser $DASUSR # # Get the FENCED user information # DB2FENC_USER=$(cat $HOMEDIR/sqllib/ctrl/.fencedID) fencuser=( user='' group='' uid='' gid='' ) KLIB_AIX_get_user_info fencuser $DB2FENC_USER unset DB_FILES typeset -A DB_FILES unset DB_PIDS typeset DB_PIDS # If we're running in quick mode, don't perform tablespace / VG discovery $QUICK_MODE || { # Parallelize the database discovery information, we'll write the discovery # information to a flat-file, then read in that information after all the DBs # have completed. # for database in $DATABASES_AVAILABLE; do file="/tmp/$instance.$database" get_db_configuration $instance $database "$file.vgs" > $file & PID=$! DB_PIDS="$DB_PIDS $PID" DB_FILES[$PID]=$file done # Get the instance environment variables from the userprofile and db2profile files cl_db2discovery_env -P $HOMEDIR | while IFS='=' read name value; do echo "\t[DBM_ENV_""$name""]=\"$value\"" if [[ -n $value ]]; then KLIB_AIX_add_vg_by_path OTHERVGS $value "$OTHERVGS $HOMEVG" fi done } # Gather the environment variables for each DB2 instance and put then into our array if [[ "$DB2_SHELL_ENV" == "ksh" ]]; then /usr/bin/su - $instance_user -c ". $HOMEDIR/sqllib/db2profile && db2set -g" | while IFS='=' read name value; do echo "\t[ENVGLOBAL_$name]=\"$value\"" done /usr/bin/su - $instance_user -c ". $HOMEDIR/sqllib/db2profile && db2set -i" | while IFS='=' read name value; do echo "\t[ENVINST_$name]=\"$value\"" done elif [[ "$DB2_SHELL_ENV" == "csh" ]]; then /usr/bin/su - $instance_user -c "source $HOMEDIR/sqllib/db2cshrc && db2set -g" | while IFS='=' read name value; do echo "\t[ENVGLOBAL_$name]=\"$value\"" done /usr/bin/su - $instance_user -c "source $HOMEDIR/sqllib/db2cshrc && db2set -i" | while IFS='=' read name value; do echo "\t[ENVINST_$name]=\"$value\"" done fi # Get the DB2 Database Manager Configuration by running db2 get dbm cfg unset DBM_CFG typeset -A DBM_CFG KLIB_DB2_get_dbm_cfg $instance_user DBM_CFG for key in ${!DBM_CFG[*]}; do echo "\t[DBM_CFG_""$key""]=\"${DBM_CFG[$key]}\"" done [[ -n ${DBM_CFG["DIAGPATH"]} ]] && KLIB_AIX_add_vg_by_path OTHERVGS ${DBM_CFG["DIAGPATH"]} "$OTHERVGS $HOMEVG" # This function will tell us whether we're running in an partition environment or a single # node environment instance_type=$(KLIB_DB2_get_instance_type $HOMEDIR) # Obtain the discovery information, unless we're running in quick mode $QUICK_MODE || { for pid in $DB_PIDS; do wait $pid [[ -f "${DB_FILES[$pid]}" ]] && cat "${DB_FILES[$pid]}" if [[ -f ${DB_FILES[$pid]}.vgs ]]; then DBVGS=$(< ${DB_FILES[$pid]}.vgs) OTHERVGS="$OTHERVGS $DBVGS" fi done } # Make sure all of the OTHERVG entries are unique, remove duplicates KLIB_UTIL_LIST_unique_key_list OTHERVGS $OTHERVGS # Remove the leading space in the VG list, if there is one if [[ ${OTHERVGS:0:1} == [[:space:]] ]]; then OTHERVGS=${OTHERVGS/[[:space:]]/} fi echo "\t[LAST_UPDATED]=\"$DATE\"" echo "\t[INSTANCE_TYPE]=\"$instance_type\"" echo "\t[SOFTWARE_VERSION]=\"$DB2_VERSION\"" echo "\t[CLUSTER_NODE]=\"\$CLUSTER_NODE\"" echo "\t[DB2INSTANCE]=\"$instance\"" echo "\t[INSTHOME]=\"$HOMEDIR\"" echo "\t[DB2HOME_VG]=\"$HOMEVG\"" echo "\t[DB2HOME_VG_PVIDS]=\"$HOMEPVIDS\"" echo "\t[DATABASES]=\"$DATABASES_AVAILABLE\"" echo "\t[OTHERVGS]=\"$OTHERVGS\"" dump_user_info instowner "INSTANCE_OWNER" dump_user_info dasuser "DASADM" dump_user_info fencuser "FENCED" echo ")" echo echo fi } done (( instance_index = $instance_index + 1 )) done # Gather the volume group information KLIB_DB2_VG_lspv_as_hash ATABA kf$o@#.םa՝a֝a&#2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2cmonver@@#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2cmon.sh 1.9.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2cmon.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ##---------------------------------------------------------------------------- ## ## Name: cl_db2cmon ## ## Description: ## Custom SQL Application Monitor for DB2 Smart Assist. This will ## be hard linked to cl_db2cmon_$INSTANCE_OWNER and used as the ## MONITOR_METHOD to AppMon. ## ## Syntax: ## cl_db2cmon -a APPLICATION_NAME -i INSTANCE_NAME -d DATABASE [ -D | -v ] ## ## Arguments: ## -D Turn on debug mode. ## -v Turn on verbose mode. ## ## Returns: ## 0 on SUCCESS ## 1 on FAILURE ## ##---------------------------------------------------------------------------- . /usr/es/lib/ksh93/func_include version='1.8' #----------------------------------------------------------------------------- # Global Variables #----------------------------------------------------------------------------- typeset -A MSGS MSGS=( [1,1]="ERROR: ~%s/sqllib/db2profile does not exist!\n" [1,2]="ERROR: DB2 instance owner required!\n" [1,3]="INFO: Verifying DB2 instance owner %s.\n" [1,4]="ERROR: Please verify all DB2 Smart Assist requirements are met!\n" [1,6]="INFO: Sourcing in DB2 instance discovery data.\n" [1,7]="ERROR: DB2 instance owner (%s) does not exist!\n" [2,6]="ERROR: Database does not seem to be available for custom SQL monitoring!\n" [5,2]="DB2 instance health check start:\n" [5,3]="\tConnecting to %s...\n" [5,4]="ERROR: Failed connecting to %s!\n" [5,5]="\tPinging %s...\n" [5,6]="ERROR: Failed pinging %s!\n" [5,7]="\tSelecting from %s...\n" [5,8]="ERROR: Failed selecting from %s!\n" [5,9]="\tDisconnecting from %s...\n" [5,10]="ERROR: Failed disconnecting from %s!\n" [5,11]="DB2 instance health check complete - instance %s is healthy!\n" [5,12]="INFO: Calling doCMon()...\n" [5,13]="INFO: Verifying the database to be monitored by the custom SQL monitor.\n" ) function errmsg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset set=$1 typeset id=$2 shift shift KLIB_DB2_print_message $set $id "${MSGS[$set,$id]}" $* } #----------------------------------------------------------------------------- # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # usage() { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u dspmsg -s 5 $DB2SACAT 1 "Usage:\ncl_db2cmon [-D | -v]\n" exit 1 } #---------------------------------------------------------------------------- # # Name: doCMon # # Description: # Becomes the DB2 INSTANCE_OWNER and runs a number of checks to ensure # the instance is healthy. # # Arguments: none # # Global Variables: # INSTANCE_OWNER # # Returns: # 0 on SUCCESS # 1 on FAILURE # doCMon() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x if [[ ! -f ~$INSTANCE_OWNER/sqllib/db2profile ]]; then errmsg 1 1 $INSTANCE_OWNER return 1 fi errmsg 5 2 errmsg 5 3 $DATABASE_TO_MONITOR DB2_SHELL_ENV=$(lsuser -a shell $INSTANCE_OWNER | awk -F = '{print $2}') (echo $DB2_SHELL_ENV | grep csh > /dev/null) && { DB2_SHELL_ENV="csh" } (echo $DB2_SHELL_ENV | grep ksh > /dev/null) && { DB2_SHELL_ENV="ksh" } if [[ "$DB2_SHELL_ENV" == "ksh" ]]; then if ! /usr/bin/su - $INSTANCE_OWNER -c ". ~$INSTANCE_OWNER/sqllib/db2profile && db2 connect to $DATABASE_TO_MONITOR" > /dev/null 2>&1 then errmsg 5 4 $DATABASE_TO_MONITOR return 1 else errmsg 5 5 $DATABASE_TO_MONITOR if ! /usr/bin/su - $INSTANCE_OWNER -c ". ~$INSTANCE_OWNER/sqllib/db2profile && db2 ping $DATABASE_TO_MONITOR" > /dev/null 2>&1 then errmsg 5 6 $DATABASE_TO_MONITOR return 1 else errmsg 5 7 $DATABASE_TO_MONITOR if ! /usr/bin/su - $INSTANCE_OWNER -c ". ~$INSTANCE_OWNER/sqllib/db2profile && db2 \"SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY1\"" > /dev/null 2>&1 then errmsg 5 8 $DATABASE_TO_MONITOR return 1 else errmsg 5 9 $DATABASE_TO_MONITOR if ! /usr/bin/su - $INSTANCE_OWNER -c ". ~$INSTANCE_OWNER/sqllib/db2profile && db2 disconnect $DATABASE_TO_MONITOR" > /dev/null 2>&1 then errmsg 5 10 $DATABASE_TO_MONITOR return 1 fi fi fi fi # # DB2 uses CSH (C shell) in SAP environment while using SAP smart assist. # In this monitor script as we can see in ksh there are 4 DB2 statements # segregated to check the health of DB. The statements are segregated just # for debugging purpose as it is easy to figure out at which statement it # is failing in case some problem arises. # # While executing the same statements in CSH (After changing the syntax according # to C shell) due to some reason it is failing. So 4 statements are merged into # single statment and it is working fine. # # I am getting below error when the segregated statements are executed in CSH # # su $INSTANCE_OWNER -c "source ~$INSTANCE_OWNER/sqllib/db2cshrc && db2 connect to $DATABASE_TO_MONITOR" # su $INSTANCE_OWNER -c "source ~$INSTANCE_OWNER/sqllib/db2cshrc && db2 ping $DATABASE_TO_MONITOR" # # SQL1024N A database connection does not exist. SQLSTATE=08003 # # As of now the 4 statements are merged into single statement in CSH # which would suffice to check the health of DB. # elif [[ "$DB2_SHELL_ENV" == "csh" ]]; then /usr/bin/su - $INSTANCE_OWNER -c "source ~$INSTANCE_OWNER/sqllib/db2cshrc && \ db2 connect to $DATABASE_TO_MONITOR && \ db2 ping $DATABASE_TO_MONITOR && \ db2 \"SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY1\" && \ db2 disconnect $DATABASE_TO_MONITOR" > /dev/null 2>&1 if (( $? != 0 )); then errmsg 5 10 $DATABASE_TO_MONITOR return 1 fi fi errmsg 5 11 $INSTANCE_OWNER return 0 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=${0##*/} PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/db2:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # We need to set this so that we can gather enough details in # /var/hacmp/log/clappmond..monitor.log for debugging. export VERBOSE_LOGGING=${VERBOSE_LOGGING:-"high"} if [[ $VERBOSE_LOGGING == "high" ]] then set -x version='@(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2cmon.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM' fi export DB2SA_HOME="/usr/es/sbin/cluster/sa/db2" export DB2SA_ETC_PATH="$DB2SA_HOME/etc" export DB2SA_SBIN_DIR="$DB2SA_HOME/sbin" export DB2SA_DISC_FILE="$DB2SA_ETC_PATH/db2.disc" export ODMDIR=/etc/objrepos export DEBUG=${DEBUG:-"0"} export VERBOSE=${VERBOSE:-"0"} export DB2SALOG="/var/hacmp/log/db2sa.log" export DB2SACAT="db2sa.cat" export INSTANCE_OWNER="" export BASENAME=$PROGNAME while getopts vDi:d:A: option do case $option in A) # Application ID APPLICATION_NAME=$OPTARG ;; d) # Database to monitor DATABASE_TO_MONITOR=$OPTARG ;; i) # Instance name INSTANCE_NAME=$OPTARG export INSTANCE_OWNER=$OPTARG ;; D) # Verbose on + Debug on VERBOSE=1 DEBUG=1 shift ;; v) # Verbose on VERBOSE=1 shift ;; esac done if [[ -z $INSTANCE_OWNER ]] then errmsg 1 2 usage else errmsg 1 3 $INSTANCE_OWNER if ! lsuser -a home $INSTANCE_OWNER > /dev/null 2>&1 then errmsg 1 7 $INSTANCE_OWNER usage fi fi errmsg 1 6 errmsg 5 12 doCMon # We will error out if doCMon() returns non-zero. exit $?  kz$o.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2discovery_envat#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2discovery_env.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)35 1.3 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2discovery_env.sh, hacmp.assist, 61haes_r714 2/12/06 23:58:30 ## ## NAME: ## cl_db2discovery_env ## ## DESCRIPTION: ## This script is called to determine the usreprofile environment ## variables, specifically ARCHIVE_PATH, and AUDIT_ERROR_PATH ## for volume group discovery ## ## Note: This script is only called via cl_db2discovery, on the local ## node. cl_db2discovery does not perform this operation because it ## would potentially run into namespace issues with the running ## environment. ## ## ## ARGUMENTS: ## -P UserProfilePath ## ## RETURN: ## 0 on success ## 1 or higher on failure ## ##--------------------------------------------------------------------------- # Read in the DB2 smart assistant definitions . /usr/es/sbin/cluster/sa/db2/etc/db2_definitions if set -- $(getopt P:U: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -P) PROFILE_PATH=$2 shift ;; esac shift done fi if [[ -z $PROFILE_PATH ]]; then exit 1 fi DB2PROFILE=$PROFILE_PATH/sqllib/db2profile DB2USERPROFILE=$PROFILE_PATH/sqllib/userprofile if [[ -f $DB2PROFILE ]]; then # This should read in the $PROFILE_PATH/sqllib/db2profile file # As DB2 sources this file, we'll do it here anyway . $PROFILE_PATH/sqllib/db2profile else # Inform cl_db2discovery we were unable to source the profile exit 1 fi # User defined environment variables, if this fails its not as important # we'll cleanly exit even if we can't read this file [[ -f $DB2USERPROFILE ]] && . $PROFILE_PATH/sqllib/userprofile # Now report the variable names, and there values for var in $DB2_DBM_ENVIRONMENT_VARIABLES; do typeset -n val=$var echo "$var=${val}" done 2  l&$o@t.םa՝a֝a&N2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2importr@@   -e ainorst "#ACEIMNORST_cdlpu$2=BDLPbfghmv()./1:FGHUV[\]wxy!&',04;>Kk{}%35?WYq|679zd?^nR7.ЯL+WL@Eﵜo*N.S[{n*_ w"njg\?Ę3Y7}s"oJ >n7'_n}v׬ 'lѤX~/+SJ?AF%IR-2 c+`)xC,RS m}eA))6N#R pOc' 4x1|CxP ; ~ffffffffffffffffffffffffffffffffffffff@ՉӅHԭ|Hoеkz*ۼ>VqL3)("?]{`3Fm֜(:Fo0☠dx9z2M4ܟ3Vhhs1 U8,,,XMp xͽX^{Pl4M8#Ĥmƃ`yn;+S2oID iWJcyFl4M~S&һqzT *Y;:Q=dxCPI$ pY~sJ>[y5 lf[|]w[Z5("?]{nV/kr+-s ;vfޅML}Qv~Jў/']7LPι7=\s\ y[^3-(䊌sB|7*jbwxOmGە}܊\Hp>4H){/9Lп/+y[ܾ/}^EެY\d.rf ;!~ΎhMd|ۋyMy훚=4N׌Aye_gލ{Ӝ۱q{ vJkk"@w;t0aɸx_M|^y7ʓ3p2-yF3 Jd1ٖ~3 *p\KA H\ۋҠ._kjfMLv%5y[ap>qCH}WsF%ketY~>bH1G4*2w\cyLA y7ʓmLyZWvfaYEG문w<\rS-PEB} KI=SoF7H@³: rK>2w\cyLA u{ku)9^i_){Kft  8Xy.ˇps%2ET'֍ԤzWޞ#ĤmaYEGIu\;N띺o)(">ڏսrxͽ%³:9%Yp;wr7qP_mG ZWvfaYEGIu\;N.9)(">ڏս{ܾ6cx +3E@PP]u箘L"@wNvfy7ʓmLyZA ft  CE문w=t es6oxhܭhc³:4Pp$,<P^V%VAfQ;(l4Pp$E문w~mTDNo?{rVgB4Pp$]TDNvfy7ʓmL{yF%kO³:BMP% ;;^3ozj?VVܦΗ1+_|ET&4Pp$,<]eø|dۮn%ԤzW\`V%'G7 (8 ,<]eø|dz<[ܾ$yN׌[~tsx `0΁ XyɪwbyLxͽ%'G7 (8 8AuST@;;^3ox oI%y:X +3hH,rjwuL+J&K{ޗx omnrAaab:T=`xͽ%'G7Vg@AXrK9{KzOΎo-^)f]tgysҴ;oe³: XyɪwNvfV_2ޓϝ0΁ ,<]eú2޺?*5,lO#R (8문w<\rS-Ƞa&YU6V_ޞ#ĤmaYE@`Xy.ˇps]2ET'ڙ{'DҾS6 (81a$.'u]1C2nDxͽmLɽS]kCET&4Pp$1a.jvK"@wNvf6dQ))JA ft   ]uD){w o+x]=+)/ET&+1X6׷IgʓvMø `Y@*R6PD*dDyBF*&7!AaaaaaaN6E=uУMDG&"!ڡ%0ͻaڡ))?j>@ÃC6))62 INdE0PͰc(p< MDZ fMDZ Z!CɠȋDa MDZ FCCɠȋDa `2MDZ 8PpaCɠȋDa 'aRdGAhԭT"6P5שhCFoȐ C ~ XۯPD1ƒ=Jߑ 9IZ&"#DhEe ۶t4aV U) ,E0%"v>bcCm?{wm7>J/еb`.K>cg{:O`|Ф]qQݰt4 ۿY;ܦΗۿY~mT~-! Ir 0DMQ,\,-mCܳ,[4 p[CnA0+~)xȷdx9z2V AC;Uh憊3~Z9Ł%*s6ayAH)j1ߎ ̛Q)~ 6ۋҠo/³aD_'ҏ(慊VMe|ԥ-бY&きo{kFmmsޜT݋&*p_3+v'ףX\ ?$iS6&7^{PzrEX>&c'bQp/KV/>^TOʺ/3)9Pr붣ol+1X8i%#m r7H|߶ ދ v1.'+ҡb㦲_{( L̛ޙ>Jkk"@w;t0aɸx_/<웍IV[[xWwXa.k%dmyP/r3&O B0YO}/hĭyLn+"7'LQ( V"Ӌ>Uj?VVrgӨߋ {tY~0YؑiƷIQB}/+=ޝG]?hgkۤȳICbW_w'1b!E9D\$%T@<8; p8obenMdʿ6*LҾލn ue;?/S-7 yIS}t e._k붣om^XzxMz5}mGޅ0_mGK>cg{:O`|Ф]qQݰt )4 %E&&0?Di ׁ?~t'Eb}'LB_w'3[p  Ir 0DMQ,\,-m@Qa4Iu\x+E|f3WܾV2vЇ-\es4Dkm~8jɒMMeZU:ħE}xͽQhF%kەm~eJLP̦Zq~Z}BAē v"EQ ֋@4>3s-\e  99zw8ET&Z}ūG8*"PSգqa`g}?1bw]CmLɽiؔG LH&X۵G 4VZN&4{ .&)4I 񛜵hƖxpNj?Vqm;&yRm[jgj6/<웍Im4du8 ȯ@pW{jbSJ%5V1_xL.80iD #+9m3&bS];r8LNojfMNĦt?W q?qa`g}?kS-p(M$.<6emŋq?+(C޾ڏսrrPEB}L?XT?/.FuS}t 7/1!O6r7t ₟'Ɩ{ =۵0Z|-Ɩz+BxW {1bwC|?tXM&]u! }W;?{R^VSUPUU|OUb)4I6HU~6tsyH 0A5Z"፺Ӆ;)WMVATRiTH iɾp4!3uSy\ |tHYD`jj JP3s{ܾN׌"r`ZWΎoV"Dan[gG7|jj J_)R_-]{ZjXf͝127wa"$'‚pV"XΎij/ƪ0H 0A5Z"፺ӅZ{MVATRiTH iɾp4M7kS-pX Ʀ )4 %ƪ0VP)=?ExE!2>,, /֦,[SUPUUv|+(C+_|kmG>E|pOlewܽhb>?ޜW}cB5I$M@I%‚Rl_Ub)a¯MVATRiTK3sEdo*Oؽu^&wݟэmʕe2܉3R ?RϘΓ)xk(wlMVATRiTJ2B ҫJIvXL@Ha&ADyiT\_ng`h+}$QI y&HIt| 6*O_[7B()&a&, qXX[Ԉ?}D){/=y'=m}1߶.SUPUUg^7MVATRiTKxcd2o W q?qa`g}?1b7aE&AD !"g ;vfo)ޜxͽefgj3)h\?kS-q$& )8d"@sNJʹ[nԧkmFbƦ )4 %"@rj  @₟ƌ 95XeQK = Ʀ )4 %LX|jj JPщ_rȐ;^3o{JFNSyNWuϣ?rǑR6и֦,[4?+)>4'[/N4 AiTK~:Xgr"(AU q$4D朕hݩN׌֌MVATRiTKEP 0wj%_p79C&8l?W |0EP 4 %ŅpLXHJ6erCD}2tsxNP+tz5_r~ΎhMNL(.$ 8xik>bS-pEZW|k(XM%Ub)1r^()#ᩪ(*M,* *r8IIK?_|km2ts{qmNS{ѭ xvtslYCܤ"$'Ub)4I6i`w? ;=(*M,* *P$KRb1+YBR ~뽷_tsmra^5f."*`֦,[V>55XeQISTAV"IvXLCܤ?ē ЊMY|/6G7ȯ@ r8֦,[ᠮ6tsaZn;bW+(R ~ƦMRdYpwtɠ3(m1vQ|PEBsۋҠ0[o N&7S&ҩ2,8"*^/ (ۏȯ @~\((_gLXQjdU&@CF%~+(v|!33333333333333333333333333333333333332ۼ0=ot3a훬0~~[ϳu񛞺 }ɦz}(f.Щgl`xͽȐ;^3o|c`|Ф]qQݰt"K-" I\ ib*@ۿY;y}*?`W_V2umZ>_w'6{XWgj2u8hKY$jǏbqanm Bq)zƮ+ *b:s]qPv~+xxգ5tXM%Pl9pÚ~SmoWE睓q6&I4Pe5iTHwxEa4ZEB,CQk}N"*񫤊i.!pm+xxգqPv~xEa4ZX8`΋;&yRmIP&Lhk*Ҩ(ET'hco#xh7]$VIp% m\ƏvMڶ"*h7]$VIp% m\<ӱ)m7;ET'" WI\ ib*@#>I]e'#nzÿ]]nv>O_nzt3&=ʕB1q?;BwƲGv?뤊i.X]$VIp%_ng`WX^E|yX뾍k@~mT]e'm_ sIK&xqy.wp??RS ظxEa4ZEB,q4du1WI\ ib*q4dua33333333333333333333333333333333333332ۼ0ڌd|vO^Twrgٺwmֆ8e<eJį)?RϘ8HYD`Ea4ZEB,@+ T?~w +mU`"cg{y{Ф]qQݰt55XeQIPQ(jj K JE(k(XM%Ub)1a%E& A"P<ɴL .檱$ H 0A5Z">v悽'Eb>dJn8ڏսC9D\$%T@<8; p8ob$M $Ӓm۵)zј(*M*s"4& pT?fDR\LABAē rVmv;^3oZ3_55XeQIPQ.r̈CAt& 8EehLCY`ur^58MZWܾN׌^m[֧G4xАq$4D朕hݩN׌֌MVATRiTK!&IvXGBV>5,&*w)q$4D֞3'nwz񳣛Ƒ 8EehLC`_CHBb 8j̈Cv aR{>Ut {щZo]{nV/+xn7'? j?VЇq3;ܾPэ\"+JvM7; (0l2d|fEe Jdab#2dESYVAD( I"@p#U%Yi2#YTeȝ&Lhk*Ҩ(L$AUPQ#j JC2Ҩ(ЇqrȐ;^3oy\N"*Z1yGܾn7'?+7C;QV1?\rыCē 5)zэ\Ʀ )4 %&Lhk*Ҩ(!W{G  99zt?#2Ҩ(Ї_}ҷi_m7ؔ|+-sCc|ޭ s|3nazZdڙiؔG /K_a%E& A"\ ;)ߍ 8. p@AwCB  .&)4I 5Mv۱qͶd p\M4Rh$wsMRdYpq 4·ȯ@ r8jbŸjj JPφ4//<웍ImLyYVOo][v-3Ʀ )4 $sHʦ˴M!k<aE&AD-0)IC\(wo .M2J,lUPUU;&yRlmLN4MQ5ATx!L_2+4QeSeeQ&DV"Vi>pV"Da 4qXEPGŸ =Rj>C8 4q  99{Ƅ&Lhk*Ҩ(F"$'pg}?1bw(*M*Cw>+(C8}Q}Qh݋Wm8hA5XeQIPQ K[ 4XIq4IHH󆱵2ӱ)a暁2dESYV4 2Ҩ(Ey7ʓcjgjw&!%hAu8k(.;MYtR"К +*<V.AVib $&5dx"AVhzd` aqVh{9VXA[6qXii.LDx!.8 4 zˤd"EqvMHYvZLL,2 4U$K +M5PU&@8+M5HLM&IE&XiS`<㸬 4-"-0i?QYEMMeZ$Xi&-At?ExHO0 A@r8jbŸ8Ʀ )4 %߬l?ς ~ffffffffffffffffffffffffffffffffffffff@e0#`;. ,<A 4 ,-~[arwymP=1 x8\;ʓoG*Op"{ROҏ?M%,CaR $ <74/<웍IM@2I)JCƬMd 5Fw鹳kW/HiUh0MQIzV? 9VU$PI$ BEe JdGX(.!M2{RN&a! B[CW s 0xpiXX_ghYCETyqá"0 @W?(gzj?Vₜ"084,, /ߴKl?"k*<ӡ뤢i4L,$)0<7W?F=_ts}}aE&MQXCƬMd?^3pm}Л{n/DW)/S6IvXL8jAqIa4iU:zqIa4iUϛΰ`pg ,pW! V&7Яxͽ)\^E3f2v%j JCƬMd? bc} N׌oӔPgܾߵcsJȠa&ADX(.!mLɽĦҾS6KM@DX(.!WJ`2{s>MtƬMd?¹2~{qzTw3&OvFvɴL .5bl j\G]}WsF%ketY~>bH1G4*L< iE>x0C¹>Uv~-Z>Na{tY~84"H3W?nz[Z}/+=ޜ~.2,cyRp7iA&D$=YR< CߴKl?m'=Jߪ$ 8jj K JE.5,&*:^ƠDKKx A\!5ERp?@ANpVPʤ-&D<8*& I#Bo07L4%@6^{x $(2ʴ %IE&XHT ߀0mژߑXIq4IHH m7k}Q{]&]]a"p5jbы|2dESYVADhF sU%Yi2'qHiUh0dIGqan 6阻Ƅfы|2dESYVADWiA&D$sKKB $L*m `i{mvV 4PS5qdIGq'qan?mژߑXIq4IHH 43~滷]zjaIE&XH 4q$4$dz5|B[t j3hG@2I)JA\ M4+>4 vV A@M4PS4!8PpǏ wp< 4Mmژb#ƠL$AUPQ.pƝM5O`ih8j ($ȒI"wp?Cݩ5M$@Mm7k}Q{a$VTKKB $Nh8de2M=ZK>cg{wek-?b#ƠL$AUPQ sLM]V;+\P i()Lhp(8NI"X[4M5jbы|2dESYVADgt 4)=`hF?LJ{WܾN׌/[ޞ.9okpgЯPn+"7'>Dr_]{Vr&7睓q?8^6"뱾^()YTeȝǏ 9VU$a5D $w{ؼn7& /dev/null) if [[ $? != 0 ]]; then usage fi while [[ $1 != -- ]] do case $1 in -D) # Verbose on + Debug on VERBOSE=1 DEBUG=1 shift ;; -v) # Verbose on VERBOSE=1 shift ;; -a) # Add the hard link if [[ "$REMOVE_LINK" = "1" ]]; then usage fi ACTION="add" ADD_LINK=1 shift ;; -r) # Remove the hard link if [[ "$ADD_LINK" = "1" ]]; then usage fi ACTION="remove" REMOVE_LINK=1 shift ;; *) usage ;; esac done shift # get rid of the trailing -- INSTANCE_OWNER=$1 if [[ "$INSTANCE_OWNER" = "" ]]; then KLIB_DB2_print_message 1 2 "ERROR: DB2 instance owner required!\n" usage fi if [[ "$ACTION" = "add" ]]; then KLIB_DB2_print_message 6 2 "INFO: Adding Custom SQL AppMon hard link for instance %s.\n" $INSTANCE_OWNER [[ -f $DB2SA_SBIN_DIR/cl_db2cmon_$INSTANCE_OWNER ]] && rm -f $DB2SA_SBIN_DIR/cl_db2cmon_$INSTANCE_OWNER ln -f $DB2SA_SBIN_DIR/cl_db2cmon $DB2SA_SBIN_DIR/cl_db2cmon_$INSTANCE_OWNER if [[ $? -ne 0 ]]; then KLIB_DB2_print_message 6 3 "ERROR: Failed creating Custom SQL AppMon hard link for instance %s!\n" $INSTANCE_OWNER exit 1 fi elif [[ "$ACTION" = "remove" ]]; then KLIB_DB2_print_message 6 4 "INFO: Removing Custom SQL AppMon hard link for instance %s.\n" $INSTANCE_OWNER if [[ -f $DB2SA_SBIN_DIR/cl_db2cmon_$INSTANCE_OWNER ]]; then rm -f $DB2SA_SBIN_DIR/cl_db2cmon_$INSTANCE_OWNER if [[ $? -ne 0 ]]; then KLIB_DB2_print_message 6 5 "ERROR: Failed removing Custom SQL AppMon hard link for instance %s!\n" $INSTANCE_OWNER exit 1 fi else KLIB_DB2_print_message 6 7 "WARNING: Custom SQL AppMon hard link does not exist, removal not needed!\n" exit 0 fi else # Should not get here at all! KLIB_DB2_print_message 6 6 "ERROR: Unexpected DB2 hard link action encountered!\n" usage fi exit 0 . #  k`$oK.םa՝a֝a&K2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2mt_importenvat#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2mt_import.sh 1.9 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2mt_import.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_db2mt_import ## ## DESCRIPTION: Runs cl_db2import twice for mutual takeover. ## Accepts the same set of arguments as cl_db2import, but ## accepts a second set of arguments for the second instance ## ## ARGUMENTS: ## -A Application Name ## ## -a Add/change all necessary HACMP resources for the specified DB2 ## instance. If the resources already exist, they will be removed ## and then added. This is the change/modify mode. ## ## -r Remove all HACMP resources for the specified DB2 instance. ## ## -N DB2 UDB first node. ## ## -n DB2 UDB second node(s). ## ## -I and -i DB2 UDB instance name to be made highly available or removed. ## This is the only option required when removing (-r) the resources. ## ## -D and -d DB2 UDB database name. This database is used by the Custom ## SQL Monitor. ## ## -I and -l The TCP/IP service IP label used by DB2 to communicate with ## other application tiers and/or clients. ## ## -M Delete the pre-existing configuration (change/show mode) ## ## RETURN: ## 0 Success (import completed without error) ## 1 Warning (import completed with warning(s)) ## 2 Failure (import failed due to pre-verification failure) ## 3 Failure (import failed due to failure in adding resource) ## ##--------------------------------------------------------------------------- . /usr/es/lib/ksh93/func_include version='1.8' #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/db2:$FLIB/hacmp:$FLIB/util:$FLIB/aix:$FLIB/util/list PATH=$PATH:/usr/es/sbin/cluster/sa/db2/sbin/:/usr/es/sbin/cluster/utilities/:/usr/es/sbin/cluster/:/usr/es/sbin/cluster/sa/sbin/ DB2SA_BIN_DIR=/usr/es/sbin/cluster/sa/db2/sbin DB2_ETC_PATH=/usr/es/sbin/cluster/sa/db2/etc DISCOVERY_FILE=$DB2_ETC_PATH/db2.disc FLUSH_DISCOVERY_FILE=false # Signal that this is a mutual takeover configuration FLAGS="-C DB2_NON_DPF_MUTUAL" #---------------------------------------------------------------------------- # Functions: #---------------------------------------------------------------------------- function setMetaDataPrefix { typeset prefix=$1 typeset -A list # Change all of the HACMPsa_metadata entries to contain the prefix "FIRST" KLIB_UTIL_parse_arguments list $(clquerysaapp -a $APPLICATION_NAME) >/dev/null for name in ${!list[*]}; do [[ "$name" != "COMPONENT_ID" && "$name" != "RESOURCE_GROUP" && "$name" != "SMARTASSIST_ID" && "$name" != "APPLICATION_NAME" && "${name:0:6}" != "FIRST_" && "${name:0:7}" != "SECOND_" ]] && { clrmsaapp -a $APPLICATION_NAME "$name" clquerysaapp -a $APPLICATION_NAME $name claddsaapp -a $APPLICATION_NAME $prefix"_"$name="${list[$name]}" } done } #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- # Read in the init functions, abort, require, errmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Read in the preimport message catalog, which is where we'll # store our messages . /usr/es/sbin/cluster/sa/db2/cat/cl_db2preimport umask -S u=rw,g=,o= if set -- $(getopt A:arMo:n:i:d:l:N:I:D:L: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -A) APPLICATION_NAME=$2 FLAGS="$FLAGS -A $APPLICATION_NAME" shift ;; -a|-r) FLAGS="$FLAGS $1" ;; -N) # Primary node for instance A node=$2 A_FLAGS="$A_FLAGS -o $node" B_FLAGS="$B_FLAGS -n $node" shift ;; -n) # Primary node for instance B node=$2 A_FLAGS="$A_FLAGS -n $node" B_FLAGS="$B_FLAGS -o $node" shift ;; -I) INSTANCE_A=$2 A_FLAGS="$A_FLAGS -i $2" shift ;; -i) B_FLAGS="$B_FLAGS $1 $2" INSTANCE_B=$2 shift ;; -l) B_FLAGS="$B_FLAGS $1 $2" SERVICE_B=$2 shift ;; -d) DB_TO_MONITOR_B=$2 B_FLAGS="$B_FLAGS $1 $2" shift ;; -D) DB_TO_MONITOR_A=$2 A_FLAGS="$A_FLAGS -d $2" shift ;; -L) A_FLAGS="$A_FLAGS -l $2" SERVICE_A=$2 shift ;; -M) FLAGS="$FLAGS -M" ;; --) shift break ;; esac shift done fi clsapre # Has the user improperly choosen the same instance twice? if [[ "$INSTANCE_A" == "$INSTANCE_B" ]]; then abort 25 $INSTANCE_A fi # Has the user entered the same service IP label twice? if [[ "$SERVICE_A" == "$SERVICE_B" ]]; then abort 24 $SERVICE_A $INSTANCE_A $INSTANCE_B fi # # -F is used for signalling First Resource Group # A_FLAGS="$A_FLAGS -F" # # Construct the first instance # cl_db2preimport $FLAGS $A_FLAGS (( $? != 0 )) && exit $? setMetaDataPrefix "FIRST" claddsaapp -a $APPLICATION_NAME FIRST_RESOURCE_GROUP=${INSTANCE_A}"_ResourceGroup" # # -S is used for signalling Second Resource Group # B_FLAGS="$B_FLAGS -S" # # Construct the second instance # cl_db2preimport $FLAGS $B_FLAGS (( $? != 0 )) && exit $? setMetaDataPrefix "SECOND" claddsaapp -a $APPLICATION_NAME SECOND_RESOURCE_GROUP=${INSTANCE_B}"_ResourceGroup" clsapost -v exit 0 ed wi k|[$oF .םa՝a֝a&F 2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2nodepor#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2node.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)43 1.2 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2node.sh, hacmp.assist, 61haes_r714 2/25/05 14:27:34 # Read in the message catalog entries . /usr/es/sbin/cluster/sa/db2/cat/cl_db2node # Read in the DB2 defaults . /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 umask -S u=rw,g=,o= KLIB=/usr/es/lib/ksh93 FPATH=$KLIB/hacmp PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster:/usr/es/sbin/cluster/sa/db2/sbin/ if set -- $(getopt g:n:ra $* 2>&1); then while [ $# != 0 ]; do case "$1" in -g) # Store the resource group name RG=$2 shift ;; -a) # Add the specified node ACTION="ADD" ;; -r) # Remove the specified node ACTION="REMOVE" ;; -n) # Node to add or remove NODE=$2 shift ;; --) shift break ;; esac shift done fi if [[ -z $RG ]]; then # Show the usage statement abort 1 $SCRIPT_NAME fi if [[ "$ACTION" == "ADD" ]]; then if [[ -z $NODE ]]; then abort 2 $RG fi # # Check to ensure the node doesn't already exist in the group # KLIB_HACMP_is_node_in_group $RG $NODE if (( $? == 0 )); then abort 3 $NODE $RG fi # # If the node is not known to the hacmp configuration, then add it # KLIB_HACMP_is_known_node $NODE if (( $? != 0 )); then errmsg 4 $NODE new_node=$(KLIB_HACMP_discover_nodes $DB2_DEFAULT_CLUSTER_NAME NODE) if [[ -z "$new_node" ]]; then abort 5 $NODE $RG $NODE fi fi KLIB_HACMP_add_node_to_group $RG $NODE if (( $? != 0 )); then abort 6 $NODE $RG fi errmsg 7 $NODE $RG exit 0 fi if [[ "$ACTION" == "REMOVE" ]]; then if [[ -z $NODE ]]; then abort 8 $RG fi KLIB_HACMP_remove_node_from_group $RG $NODE if (( $? != 0 )); then abort 9 $NODE $RG fi errmsg 10 $NODE $RG exit 0 fi # Show the usage statement abort 1 $SCRIPT_NAME  k'$o@ .םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2owneror@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2owner.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)45 1.1 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2owner.sh, hacmp.assist, 61haes_r714 2/25/05 14:04:18 ## ## NAME: cl_db2owner ## ## DESCRIPTION: This script lists the DB2 instance owners and the ## home directories for each instance ## ## ARGUMENTS: ## -i (optional) instance to list owners ## ## RETURN: ## 0 on success ## 1 or higher on failure ## ################################################################### ################################################################### # Read in the init functions, abort, require, errmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 umask -S u=rw,g=,o= # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/db2 PATH=$PATH:/usr/es/sbin/cluster/sa/db2/sbin/:/usr/es/sbin/cluster/utilities/:/usr/es/sbin/cluster/ DB2SA_BIN_DIR=/usr/es/sbin/cluster/sa/db2/sbin DB2_ETC_PATH=/usr/es/sbin/cluster/sa/db2/etc DISCOVERY_FILE=$DB2_ETC_PATH/db2.disc FLUSH_DISCOVERY_FILE=false if set -- $(getopt i: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -i) INSTANCE_TO_SHOW=$2 shift ;; --) shift break ;; esac shift done fi . $DISCOVERY_FILE echo "#instance:username:groupname:uid:gid:homedir:dasadm_user:dasadm_group:dasadm_uid:dasadm_gid:fenced_user:fenced_group:fenced_uid:fenced_gid" for instance in $(KLIB_DB2_disc_get_instances); do if [[ -z $INSTANCE_TO_SHOW || "$INSTANCE_TO_SHOW" == "$instance" ]]; then username=$(KLIB_DB2_disc_get_instance_value $instance "INSTANCE_OWNER_USER") groupname=$(KLIB_DB2_disc_get_instance_value $instance "INSTANCE_OWNER_GROUP") uid=$(KLIB_DB2_disc_get_instance_value $instance "INSTANCE_OWNER_UID") gid=$(KLIB_DB2_disc_get_instance_value $instance "INSTANCE_OWNER_GID") homedir=$(KLIB_DB2_disc_get_instance_value $instance "INSTHOME") dasadm_user=$(KLIB_DB2_disc_get_instance_value $instance "DASADM_USER") dasadm_group=$(KLIB_DB2_disc_get_instance_value $instance "DASADM_GROUP") dasadm_uid=$(KLIB_DB2_disc_get_instance_value $instance "DASADM_UID") dasadm_gid=$(KLIB_DB2_disc_get_instance_value $instance "DASADM_GID") fenc_user=$(KLIB_DB2_disc_get_instance_value $instance "FENCED_USER") fenc_group=$(KLIB_DB2_disc_get_instance_value $instance "FENCED_GROUP") fenc_uid=$(KLIB_DB2_disc_get_instance_value $instance "FENCED_UID") fenc_gid=$(KLIB_DB2_disc_get_instance_value $instance "FENCED_GID") echo "$instance:$username:$groupname:$uid:$gid:$homedir:$dasadm_user:$dasadm_group:$dasadm_uid:$dasadm_gid:$fenc_user:$fenc_group:$fenc_uid:$fenc_gid" fi done ----- lT)$onX.םa՝a֝a&s92vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2preimportenvat    -e ainorst_cdhlu"#$/2=ABDEINORbfgmpv()0CFGLMPSTV[]ky&,.1:;HKwx'U{|}!37?WXY\qz*4569>8Zj@+(4` X7 $]&Lib  `M-ڬur-QA|YH\ RqkAbX D @(rD $\q9ˍ~{ #$ dq ( @@ɀ*XDv ētKk8l܋TP_9ovz0R M$"r# ېe4EEe;4zF4@( ېe4EEe;4zFSkѰ>fM.Ns+;ZǣsgyGwϺ0y|$KjE)i0hխgDSkѰ?ijE,5k[e'Jm| 5Fk,$r7iS}n+RѝgJ`ѫZ-Ϝ9z* :z$b0h 2.$" `ѫZ:z.&-p?qtZ)Ҙ暵1V SٷǾuX4jֱN6m4^*Vt6.ӷhխbC"5kXOĚ-p?q/XZ)~+l_VX4k0VQr` GU碢[d< ;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULMS)fM|6x`! fnڢBd10XxmW7A``qbdG(QƇI0 $$ "8081H8081CʼnH&=Y@Pǫ7(=GJ`ʼnkC# HHDp! `(zsǢ|=#DӞ<=YD}|9QYN=YGM!#Ciw#CiwhsDZ $2(X#Ciwh#N{  Q  VQr#NxTVSGh,$ *`L  0&T "mJH4D.TH2 "0c&.zs  `a`&ڤת0<ێ+~v [&.zs ,a`F cUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU0nћ7Z)"++6 Z)"I6>rLSE>rH*mVv{Q|ףk[d%q>m`չ^}9&{6X7 Ux)kE;DY \OAǘ5r$bt Rq:|ӾWF#a F7K i-VA ^_-8Jya FX5rQ8| [j4թ֣MZᢝ,u O6\nPPZ Nl|nPP6ћd%q>m,PS8LfJ`44pљ8q1rb.zsq>m"8bvG0 *dLYT*ŧ O"Tș`&T;qYUE2P,ZrN@()\nj%رe+I`l`ڪ `1W7A७hh 6t5r$bt ZvR`O<Ӷ Zֵ&CIi-Hͮ~rdY2@Pv Zֵ;Օ:+Kn}+yGM;4Vm)@0?4.4GwT6 Zֵc@0G7}>ع0jֵW= z06,: K͹Kn`խk\ӽϔovHG;rN^ץ95kZ4>iܯ>gUW+IX7%@ϔoHF{N|Ӽ2Pmz7knj-k JLk~mQXگFnSEVWxŊ c 2LT.3"G&3nW>[)1n7 tq|ףx/v-ẁPSՋKmb.zsli ,M .h9^}+x>SkѼaBBD*"0%VWl\\z9\1cpGfMY>i[)>g|l{)ōli`n8m,駩#F"^6tm7iyN\{;<|E>izN0?qkw}cyy(F )A6vth\ōgGH-Ii\,d AZ9\#ʼnPt@>SkѴEomz7(M 0d"kVWdGC@2$"˚|ףhj9ϔoPa 9#C 2TŭAL` r762$qJ*d l`eq{3"G`TT;{>4җ,aa2%D*&UB@?䀂*dɃ(1kX겞j\صE76i ,M .h9^}+x>SkѼaBa.&#!`eP$$ -k.2#ʼnPt@>SkѴEomz7(L=2THbeP$$ -kj:h\cyLhqbh&A$P9sAϔmQ[9^ @q4  TɓP$$ ŭn7 tq͊)yO?hlnn9q">z*+)w+{Nܹ?qqv Z73sV/)V?r`?6(mXmW7A)"I6@`K()&T3%P0Xh̉bn8TW\=r|ףdGX\~%r"8?.zsrRc1s+GC@2$"˚|ףhj9ϔoPa b.zs4'Hhqbh&A$P9sAϔmQ[9^   \ AJȎ&BdIE4MF>s)0,8*e \-kI$\9"#'|:N|14No?;yS9x='I@}n7 tq9obP9^f,k?oF6ųtX=O)`D"uJRtr)|/j nYBd1R0ϔoNoIт%Lg}I6AgU`n8[7Apsb(J_wJg,PS98dH#L`K?1;# mz63Bg g\y"0t& g,nvmEr@(1[₝?-i |8*⢠iص>nzŬۘ-i |8*DŮ9|Ŭn^ni q\Z.6KllN*v>p曥U{gm>+Q,M)| MssMϜ1k7W+/J Zx0s!`AXh> XTT;{?ְhqbh&A0ܒ҂F|s㏜+XkqPS8883NŭkZ1;# mz63981kZjJصk]'ds ŭkZj >pf0tQf0ss6ŭkY1kZۙbq!ALZP}qLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULvR֊vI^k.HǦ<6;g;!^ࢧo9*z[czp V5k;m{s|8M;P ϔoVW.iW`0kqS>Skѽ;}rE68C)8gڣl%X73sV/)a]p%QF& Z=p~mQXگFnSE>rH*oXAL`2I*qFdHqb =s6"8\+1s+(+m+"8 X A'I\s6@TV|ףx DH (T`K\>Sb1;#N9ϔmqPSs6EA|ӷkd_Xnc1s+`HTȘh(L :Hr惟)ڢs6    b.zsʉ ,M .h9^}+x>SkѼ2P bع\0#2&#*&1YG|> \zPgₘςV3qb%c1QP_4&Bd AJ<} lo(+m+> ^8`SB8|ףc1QP_4Z`HTȘh(L :Hr惟)ڢs<00-k*&Dp@484  N(mz6O(L0yTBXŭf[ AZnϜ'aa@¦DDAzPbֵAL` ȑ>pTT;{km"0qM>rCk6-kZP}kZP}k[₝?$I%obֵbvG2ALZֶg 9^I6KlZmZ͹J1w_0 c6X7.Ӷ NAj3qAϔmX7)rF.=7A Nn㏗{_Fn?yBd7>SkѶ yBd2$`~/(׋f)&A(ٴert板g6/snzNEssN7eqδ_}\$_jI:nڦ~ *v󑂧x=.imz7`CnJ';o_|ף}n|ף{v5s75b4s6-j3q`º|ףx9ڌ~5z3t,f)beL0"Uȑ&㉌Ep0Ϡ{?.zsMFȌ ANn9ϔon75b.bW=&ͦ+(L :Hr惟)ڢs6$LQ tq6m4\Q\ sV/,g\};|gOL]RDBn5E8cli`W+K!qAzPg9 Pd$L8/J \-o"04P0rF @`ڠPhqbh&A$P9sAϔmQ[9^kxK?:~9#Gڦ*+@F>ΞڤpNgP}q$77Bd2=G>V\ӽϔo:ͨ?Ќmؽ8gt>%#a! iص\8Dp@484  N(mz6MF @L4%]'ds >SkѼq6l`ڪ `ܻN+s6@TrM `ܥ5kM\zx9)jIi}tyBd7÷X4(Lmz7y(yw5X7e) :6|=YO_͹KgX7g\68E/mk`IP ϔoΫ) nH$0j<`!V Z 6m4_+RѝVSOs|KFvP ϔo` ְzMM6Wl\J^2T"`ץ 2THbL 0&T `կo T4$d,XL|Q#%@@3k`կ@ABH2d 3ysiޑnRGVWс)lm\IE8曥у>Κn4V!#|۔#QOs6txm`gUWnRq/%r`'qnEUϔo:ύ^NTVSo&qrڢi:B<ӽϔo O8vtQLc7"͛s|5z3t^}9&~beL0"Uȑ&㉌Ep0Ϡ{1s+mz6D`H.bW=&ͦ+Bp@$F 1ϧW"#+M.z!^4 >{,fy> Nߴ#6.9.9ϔmHY(L :Hr惟)ڢs6."$HYTPQ,X0rF.zdH  Ep0XbvG2ALZj>SkѶ, b1;#$()X-;D[9]7;!^fNn|ף{Fn?|ӷzQA|+Iy@7;cigࢧo9*zXDiKr@il;!^rGЌyIȶnyi{RIt(F u I+K4/פow^r79.ixՔ{)ޜ|!Yv{Q|ףx>SkѶ1ws)-d9ϔoc?Ƴn-J|ӼT#OK:؋Z[e;ӁY7Mwɧoρ%.#z*+)w+4VWzqZ@I;rR҆5{QF'Rg;wK|&l*\ᚽOB3 '<4 珹-7 GJ| W.il;MF`fqЌ.g,lm$9ϔo|1ōӴE:ko?;yS{b)M!Q,nv<477&IF6P ϔnX9OscxiENr0T X݋E;DY$p V|ף{ɌX,n-JzMM6WԴgivt--YBd7>SkѶ,k?:F?h rMM6V=ӄp+8y (1MFc$hcn "!Lb$LQ#ʼnPt@>SkѴEomz7$$H!!,_GHv?P"dJŭAL`=lfD0rFbiصH%ům6/(>ؿ/nX4IiseWgq"K"G BA|ӷkd#<rF|ףl_3(>_0 c6X7.Ӷ t#0<ێFCk.HǦ<&fz3tmsN*xKF6㙷){^mH, [vY()|qb.⢸ ,7^K??1ȑ° # [?,H @H=lE|3mW"#RMQYN?`a` 82.@,p xE%%B8V,6@+pM?qAJZ*ϤѲ,E(> \S:mW/>8K?WDp7+t-p?qAJj4w+p@e!4EEe;f7\l%Aₘ+ȑMJQ\ QY(>6NdHXHN`K?WD)[?҃K"G Bp0YP@E~ɟ[?ĉJ*e ":m%rg iSeL\B( .XEJh t-p?qAJ\.! p`KdG":rK~8,p+qBd$\$YᅃP %D *rABY#a!8 ,j@(-s2#-s< V}%"3dYX"eHs63#DG":rK~8,p+qBd$\$YᅃP %򄄉$"Uʄ #G Bp0Y#MhHBN,d\y!d.rAY1s+`<@rĐ,Q=rK2.`VL\0&T*"ɋ\D *ɋ\򄄉$"UʲbWSkѹmEiKi6\w+xnڪf$`ݼ^mz7NZ~ ^l)I+K9z*+)X7F6ųt`r兂` x)J%-=7AŬ<'Xܥsiz7Vtу͸l``kX`q #(p(yIXE;D[qzm?|qcyCØ57 c  `a`܉qVQP_4qPS.X5qQP_4JGRg\`RÍ.iތmf?6,)m+1glՋK?͹:z\m#Rₜnx ѼzsǢ|=#D$qQ\ 1#CiwhsDzFtc?sx@7H@@8Y!" \y\TT;{h q!d.rAwK.=,61 , HHp (TDK2.`\p iSeL\B#%.3レ&yn\mȶn MFq X"ep Hȑ` @DX1p2&X,ĉq|pr=(> BY4]17R\O, loJhe uIҞ.OSǡUI}a@s^rLjvd7=,]K=rW8[1vtK 4MZnPPҗӽH"7+E;DY \OADZ%L *q"eC( bjxD@82`Bn;#~h|a%QX8H42P(XD,S +%S7(4җS[~6zpV}P@<=YD}|9QYN>Mi$h$?-t_ㄉJ*e @H4r*S bh pb`Oذ-XmsNi:H_6/isp<擤Eر;k%rb:7VQr#NxTVSGh#4@*+F=YD}|9QYN>MhHBN,"w}i:H_iv;kW >uϼOtyЈ8jisN\Oj4թHRҳn}0Xxc₝qr@ n** 杽.TH2 "8 XAamlpS"eʠHPs7,on+#ya F7I<jBVmϴ=-tiKsB"1|'܍5j?4\tЈ8l  㧡܊x9)lw}XA7 tqʉA/v1cp=-RЈn曥}XCQ@?4&,nsN4ni-YZY~iC|<ێ+~Iқ_6,Q `4hqbh  rh4; M>wmF*dLYT*Ŋ tqʉAc>Xm52&X,ĉRVō-|N\Oj4թ[=q>m}b笈hqbh  r`DY qr@ hKx0ss=c0G EA|ӷkiFx$"Tș`&T8f0ss=cna0nIKz4}f9+HˌNC8Q `4f0pS"eʠHP`Bn;^ڣl9;ՕǕhLs6@TrM`D *38!"D@ 1FD$$Xj*"ˌN 61ANn8@P'EY4gq!%C #2ԕDI*Xmc( (optional) instance to list owners ## ## RETURN: ## 0 on success ## 1 or higher on failure ## ################################################################### ################################################################### # Read in the init functions, abort, require, errmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 umask -S u=rw,g=,o= # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/db2 PATH=$PATH:/usr/es/sbin/cluster/sa/db2/sbin/:/usr/es/sbin/cluster/utilities/:/usr/es/sbin/cluster/ DB2SA_BIN_DIR=/usr/es/sbin/cluster/sa/db2/sbin DB2_ETC_PATH=/usr/es/sbin/cluster/sa/db2/etc DB2_CLIENT_PATH=$(KLIB_DB2_get_bin_dir) DB2_VERSION=$(KLIB_DB2_swversion) # Look for instance commands first PATH=$PATH:$DB2_CLIENT_PATH/../instance export PATH if set -- $(getopt i: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -i) INSTANCE_TO_SHOW=$2 shift ;; --) shift break ;; esac shift done fi echo "#instance:envname:value" for instance in $(db2ilist 2>/dev/null); do if [[ -z $INSTANCE_TO_SHOW || "$INSTANCE_TO_SHOW" == "$instance" ]]; then unset array typeset -A array # Gather the environment variables for each DB2 instance and put then into our array db2iset -i $instance -g | while IFS='=' read name value; do array[$name]=$value done db2iset -i $instance -i | while IFS='=' read name value; do array[$name]=$value done for name in ${!array[*]}; do echo "$instance:$name:${array[$name]}" done fi done v k$o6.םa՝a֝a&62vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2smaddor#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2smadd.sh 1.10 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2smadd.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_db2smadd ## ## DESCRIPTION: This script is called when the user adds a new DB2 ## instance to the cluster definition. This script ## calls the discovery routine on each specified node ## and performs pre-verification to ensure the ## discovered DB2 instances are available and accessible ## on the remote nodes. ## ## Note: This script is only called via SMIT ## ## ARGUMENTS: ## -D turn debugging on (set -x) ## ## -n where each node is separated by ':' ## The list of nodes to run discovery on ## ## -F flush discovery file, remove the discovery file ## ## -f use the specified discovery file name (not in use) ## ## -v Turn verbose logging on for console discovery logging, ## otherwise this script will output information useful ## for SMIT cmd_to_discover (header / values output) ## ## -M add nodes for mutual takeover (requires the user to enter ## two nodes, and discovery must have two nodes discovered) ## ## -A add nodes for add a single instance, must have one instance ## discovered, and only one node can be entered. ## ## -N diable summary reporting, this flag only has meaning if ## used in combination with the -v flag. ## ## ## RETURN: ## 0 on success ## 1 or higher on failure ## ## ## Internal Functions: ## ## run_discovery ## prevalidation ## dump_discovery_info ## check_db2_software_levels ## ## KLIB Functions: ## ## KLIB_DB2_disc_get_instance_value ## ## KLIB_UTIL_word_count ## KLIB_UTIL_LIST_unique_key_list ## KLIB_UTIL_LIST_hasharray_datadumper ## ## KLIB_AIX_get_fs_freespace ## ## KLIB_HACMP_is_known_node ## KLIB_HACMP_discover_nodes ## ##---------------------------------------------------------------------------- . /usr/es/lib/ksh93/func_include version='1.10' function run_discovery { typeset -n nodelist=$1 typeset -n flags=$2 typeset filename=$3 unset PID2NODE typeset -A PID2NODE for node in $nodelist; do address=$(clgetaddr $node) # If we were unable to contact the node, abort discovery [[ -z $address ]] && { echo echo abort 10 $node } if [[ -n "$DSE_INSTALL_DIR" ]]; then cl_rsh $node $DB2SA_BIN_DIR/cl_db2discovery $flags -p $DSE_INSTALL_DIR > $DB2_ETC_PATH/$node.$$ 2>/dev/null & else cl_rsh $node $DB2SA_BIN_DIR/cl_db2discovery $flags > $DB2_ETC_PATH/$node.$$ 2>/dev/null & fi RC=$? PID=$! PIDS="$PIDS $PID" PID2NODE[$PID]=$node done # # Wait for discovery to complete on all available nodes # typeset -i count=0 for pid in $PIDS; do typeset alive=$(/bin/ps -ef | grep $pid | grep -v grep) while [[ -n $alive ]]; do alive=$(/bin/ps -ef | grep $pid | grep -v grep) $VERBOSE && print -n "." sleep 4 (( count=$count + 1 )) # If we've waiting for 2 minutes for this node, then abort discovery just on this node # its likely that the other nodes have already completed. (( $count == 30 )) && alive="ENDTHIS" done done if $FLUSH_DISCOVERY_FILE && [[ -f $filename ]]; then rm -f $filename fi # # Append the discovery information to the local discovery file # for node in $nodelist; do echo "CLUSTER_NODE=\"$node\"" >> $filename cat $DB2_ETC_PATH/$node.$$ >> $filename rm -f $DB2_ETC_PATH/$node.$$ done return 0 } # # Name: prevalidation # # Description: This script will validate the various components of DB2 # to ensure the DB2 instance meets the following criteria # # 1. DB2 Instance Home Directory Must reside on a filesystem # that is on shared storage (shared VG) # # 2. The node must have DB2 installed either 8.1 or 8.2 # # 3. Shared volume groups must be accessible on all nodes # where a particular instance might reside in the cluster # This requires all hdisks for the instance VG(s) to exist # on all participating nodes. # # 4. DB2 Instance Users & Groups must be consistent across # the participating nodes in the cluster. The UID & GIDs # must be identical across all participating nodes. # # Arguments: None # # Returns: calls abort, and exits this script with an errorcode == dspmsg # number # function prevalidation { # Check to ensure the software levels of all the DB2 discovered # instances are running at the same levels, abort and report # the error if the level is incorrect # check_db2_software_levels if (( $? != 0 )); then abort 5 fi # Check to ensure we have at least one DB2 instance available for # the user to select from if [[ -z $DB2_INSTANCES ]]; then echo abort 6 !DISCOVERY_NODES fi } # # Name: rewrite_discovery_file # # Description: This function rewrites the discovery file, joining # current discovery data together from all of the nodes # specified to this command. # # Arguments: None # # Returns: None # function dump_discovery_info { typeset DATE typeset key typeset instance typeset NEW_INST_LIST typeset insthome DATE=$(date +"%m/%d/%y %H:%M:%S") echo "#\n# This ksh93 source file was generated on $DATE" echo "# Do NOT alter the content of this file\n#" # # Remove those instances that don't have available collected information # for instance in $DB2_INSTANCES; do insthome=$(KLIB_DB2_disc_get_instance_value $instance "INSTHOME") if [[ -n $insthome ]]; then NEW_INST_LIST="$NEW_INST_LIST $instance" fi done DB2_INSTANCES=$NEW_INST_LIST # # Remove duplicate instance keys from DB2_INSTANCES # KLIB_UTIL_LIST_unique_key_list DB2_INSTANCES $DB2_INSTANCES # Iterate over all the variables that start with DB2 for key in ${!DB2*}; do # # Remove duplicate nodes from the list of nodes in the nodes # for each instance array. # if [[ ${key:0:10} == "DB2_NODES_" ]]; then typeset -n array=$key KLIB_UTIL_LIST_unique_key_list array $array fi # # If the variable is not an instance associative array, # then print out the value # if [[ "${key:0:13}" != "DB2_INSTANCE_" && "${key:0:11}" != "DB2_ERRORS_" ]]; then echo "$key=\"$(eval echo \$$key)\"" fi done # Dump each of the DB2 instance gathered from the nodes # the last copy will overwrite the pre-existing copy for instance in $DB2_INSTANCES; do KLIB_UTIL_LIST_hasharray_datadumper "DB2_INSTANCE_$instance" done # Dump the volume group info from lspv from all cluster nodes # into one hash table AIX_DISKS # Save off the old discovery info typeset -A AIX_DISKS_OLD for key in ${!AIX_DISKS[*]}; do AIX_DISKS_OLD[$key]="${AIX_DISKS[$key]}" done unset AIX_DISKS typeset -A AIX_DISKS for variable in ${!AIX_DISKS_*}; do typeset -n disks=$variable for key in ${!disks[*]}; do AIX_DISKS[$key]="${disks[$key]}" done unset disks done # Dump the list of AIX_DISKS generated above for all # discovered instances KLIB_UTIL_LIST_hasharray_datadumper AIX_DISKS # Dump the DB2_ERRORS that occurred during the prevalidation phase KLIB_UTIL_LIST_hasharray_datadumper DB2_ERRORS } # # Name: check_db2_software_levels # # Description: Check the discovered software levels on all of the instances # discovered. This verifies that all instances are running # the same software level of DB2. Verify and sync will validate # that each node in the cluster runs the same level of DB2 software. # # Arguments: None (uses the discovery information sourced into our environment) # # Returns: 0 - if successfully validated same levels of DB2 on all nodes # 1 - if unsuccessful # function check_db2_software_levels { typeset instance typeset tmpLevel typeset level='' for instance in $DB2_INSTANCES; do tmpLevel=$(KLIB_DB2_disc_get_instance_value $instance "SOFTWARE_LEVEL") if [[ -z $level ]]; then level=$tmpLevel fi if [[ "$level" != "$tmpLevel" ]]; then return 1 fi done return 0 } ######### # MAIN ######### # Read in the message catalog entries . /usr/es/sbin/cluster/sa/db2/cat/cl_db2smadd # Read in the init functions, abort, require, errmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Read in the DB2 definitions . /usr/es/sbin/cluster/sa/db2/etc/db2_definitions umask -S u=rw,g=,o= # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/db2:$FLIB/db2/vg:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/ PATH=$PATH:/usr/es/sbin/cluster/sa/db2/sbin/:/usr/es/sbin/cluster/utilities/:/usr/es/sbin/cluster/ DB2SA_BIN_DIR=/usr/es/sbin/cluster/sa/db2/sbin MUTUAL_TAKEOVER=false typeset -i MAXNODES=32 typeset -i MINNODES=1 DB2_ETC_PATH=/usr/es/sbin/cluster/sa/db2/etc DISCOVERY_FILE=$DB2_ETC_PATH/db2.disc FLUSH_DISCOVERY_FILE=false VERBOSE=false DISC_FLAGS= RUN_DISCOVERY=true SUMMARY_REPORTING=true typeset -i ncount=0 while getopts vDAMcFNf:n:m option do case $option in v) VERBOSE=true DISC_FLAGS=-v RUN_DISCOVERY=true ;; D) VERBOSE_LOGGING=high ;; F) FLUSH_DISCOVERY_FILE=true ;; f) DISCOVERY_FILE=$OPTARG ;; n) DISCOVERY_NODES=$(echo $OPTARG | sed -e "s/\:/ /g") for node in $DISCOVERY_NODES; do (( ncount=$ncount+1 )) done ;; A) # -A tells us we're adding a single instance, only one # node should be specified. ACTION=add_single MINNODES=1 MAXNODES=1 ;; M) # -M tells us the user is performing a SMIT mutual takeover # add ACTION=mutual_takeover MINNODES=2 MAXNODES=2 ;; N) # Disable summary reporting, default is enabled SUMMARY_REPORTING=false ;; m) DISC_FLAGS="$DISC_FLAGS -q" ;; esac done [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # Verifiy there is sufficient space (4MB) in the following filesystems # /var, /usr, /tmp prior to allowing the user to run this command typeset -i SF for fs in /tmp /var /usr; do SF=$(KLIB_AIX_get_fs_freespace $fs) (( $SF < 4 )) && abort 11 $fs $SF done # # If the user is attempting to add too many nodes or too few # abort # if (( $ncount > $MAXNODES || $ncount < $MINNODES )); then if (( $MINNODES == $MAXNODES )); then abort 1 $MINNODES else nodes_present=false odmget HACMPnode | while read line; do nodes_present=true done $nodes_present && abort 2 $MINNODES $MAXNODES !DISCOVERY_NODES $nodes_present || abort 12 fi fi # # Check each cluster node name against the current cluster configuration, # if we find that a specified node isn't in the list, assume its a communication # path and use clmodclstr to add the node to the cluster configuration. # for node in $DISCOVERY_NODES; do KLIB_HACMP_is_known_node $node RC=$? # If we don't know this node, run discovery if (( $RC != 0 )); then RUN_DISCOVERY=true break fi done $RUN_DISCOVERY || { typeset -i inst_count=0 # Determine the number of currently defined instances DB2_INSTANCES=$(cl_db2smdisc -i) # Count the number of instances discovered KLIB_UTIL_word_count inst_count $DB2_INSTANCES # If the number of currently discovered DB2 instances is less than # 2 and we're attempting to configure mutual takeover, run discovery [[ "$ACTION" == "mutual_takeover" ]] && (( $inst_count < 2 )) && RUN_DISCOVERY=true # If the number of discovered instances is less than 1, then run discovery # if the user is attempting to add a new instance to the HACMP configuration # [[ "$ACTION" == "add_single" ]] && (( $inst_count < 1 )) && RUN_DISCOVERY=true # If there are no DB2 instances discovered, run discovery (( $inst_count == 0 )) && RUN_DISCOVERY=true } CLUSTER_NODES=$(KLIB_HACMP_discover_nodes $DB2_DEFAULT_CLUSTER_NAME DISCOVERY_NODES) # # If we were unable to add one or more specified nodes, or the list of nodes # provided didn't exist in the cluster configuration then report an error # if (( ${#CLUSTER_NODES[@]} == 0 || ${#CLUSTER_NODES[@]} != ${#DISCOVERY_NODES[@]} )); then abort 3 DISCOVERY_NODES fi $RUN_DISCOVERY && { $VERBOSE && errmsg 8 !DISCOVERY_NODES run_discovery DISCOVERY_NODES DISC_FLAGS $DISCOVERY_FILE } # # Source the discovery info into our environment, then # redump the discovery info back into the discovery file # this removes duplicate entries # [[ -f $DISCOVERY_FILE ]] && . $DISCOVERY_FILE dump_discovery_info > $DISCOVERY_FILE # Perform validation on the accessible instances prevalidation instances=$(cl_db2smdisc -i) if [[ -z $instances ]]; then abort 4 fi KLIB_UTIL_word_count inst_count $instances KLIB_UTIL_word_count node_count $CLUSTER_NODES $VERBOSE && { echo echo instances=$(eval echo $instances) errmsg 9 !instances $inst_count !CLUSTER_NODES } # If there are an insufficient number of instances for the number # of nodes specified (mutual takeover requires 2 instances) # then abort and report an error # if [[ "$ACTION" == "mutual_takeover" ]]; then if (( $inst_count < 2 )); then abort 7 fi fi # If verbose logging is enabled, and summary if $VERBOSE; then # # If summary reporting is enabled, then print a summary of # each DB2 instance as its been discovered. # $SUMMARY_REPORTING && { for instance in $DB2_INSTANCES; do cl_db2smdisc -s $instance done } else echo "#firstnode:takeovernode" echo $CLUSTER_NODES | read first rest echo "$first:$rest" fi exit 0 dding a kF|$o@8-.םa՝a֝a&8-2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2smdiscr@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2smdisc.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2013 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)53 1.5 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2smdisc.sh, hacmp.assist, 61haes_r714 4/10/13 11:24:58 # # Name: cl_db2smdisc # # Description: This script provides information from either the # discovery file or from the sa_metadata depending on # which source the content comes from. # # Options: Command line flags specify the information to be # returned - typically for smit # # # # Name: sm_show_instance_summary # # Description: Display a summary reports of the instance (nodes, users, # databases, etc) # # Options: instance of interest # # Returns: None # function sm_show_instance_summary { iname=$1 echo "\n\n*** SUMMARY REPORT OF DB2 INSTANCE: $iname ***\n\n" # DB2 Instance Name: swlvl=$(KLIB_DB2_disc_get_instance_value "$iname" "SOFTWARE_VERSION") echo "DB2 UDB Instance:\t$iname (DB2 ver. $swlvl)" # Volume Groups: VGS=$(KLIB_DB2_disc_get_instance_value $iname DB2HOMEVG) VGS="$VGS $(KLIB_DB2_disc_get_instance_value $iname OTHERVGS)" # Databases: DBS=$(KLIB_DB2_disc_get_instance_value "$iname" "DATABASES") date=$(KLIB_DB2_disc_get_instance_value "$iname" "LAST_UPDATED") node=$(KLIB_DB2_disc_get_instance_value "$iname" "CLUSTER_NODE") insthome=$(KLIB_DB2_disc_get_instance_value "$iname" "INSTHOME") homevg=$(KLIB_DB2_disc_get_instance_value "$iname" "DB2HOME_VG") echo "Last Updated:\t\t$date" echo "Updated by Node:\t$node" echo "Instance Home:\t\t$insthome (VG: $homevg)" echo echo echo "\t\t\tUser\t\t\tGroup" echo " +----------------------------------------" user=$(KLIB_DB2_disc_get_instance_value "$iname" "INSTANCE_OWNER_USER") group=$(KLIB_DB2_disc_get_instance_value "$iname" "INSTANCE_OWNER_GROUP") uid=$(KLIB_DB2_disc_get_instance_value "$iname" "INSTANCE_OWNER_UID") gid=$(KLIB_DB2_disc_get_instance_value "$iname" "INSTANCE_OWNER_GID") echo "Instance Owner:\t\t| $user ($uid)\t\t$group ($gid)" user=$(KLIB_DB2_disc_get_instance_value "$iname" "DASADM_USER") group=$(KLIB_DB2_disc_get_instance_value "$iname" "DASADM_GROUP") uid=$(KLIB_DB2_disc_get_instance_value "$iname" "DASADM_UID") gid=$(KLIB_DB2_disc_get_instance_value "$iname" "DASADM_GID") echo "DAS Administrator:\t| $user ($uid)\t\t$group ($gid)" user=$(KLIB_DB2_disc_get_instance_value "$iname" "FENCED_USER") group=$(KLIB_DB2_disc_get_instance_value "$iname" "FENCED_GROUP") uid=$(KLIB_DB2_disc_get_instance_value "$iname" "FENCED_UID") gid=$(KLIB_DB2_disc_get_instance_value "$iname" "FENCED_GID") echo "DB2 Fence:\t\t| $user ($uid)\t\t$group ($gid)" for db in $DBS; do echo echo "Database Name: $iname.$db" echo "-----------------------------------------------------------------" VGS=$(KLIB_DB2_disc_get_instance_value "$iname" "DB_""$db""_VGS") echo "\tVolume Groups:" for vg in $VGS; do echo "\t\t\t$vg" done typeset count=0 echo "\tTablespaces: " while true; do val=$(KLIB_DB2_disc_get_instance_value "$iname" "DB_CFG_""$db""_TABLESPACE_PATH_$count") if [[ -z $val ]]; then break fi echo "\t\t\t$val" (( count=$count+1 )) done while true; do val=$(KLIB_DB2_disc_get_instance_value "$iname" "DB_CFG_""$db""_TABLESPACE_DISK_$count") if [[ -z $val ]]; then break fi echo "\t\t\t(device) $val" (( count=$count+1 )) done done } # # Name: sm_show_rg_nodes # # Description: Show the nodes which are part of the resource group # databases, etc) # # Options: resource group of interest # # Returns: 0 if the group is found/displayed # 1 if group is not found/displayed # function sm_show_rg_nodes { typeset group=$1 typeset nodes typeset tmp typeset kgroup typeset node nodes=$(clgetgrp -c -g $group | tail -1 | cut -f4 -d:) if [[ -n "$nodes" ]]; then for node in $nodes; do echo $node done return 0 fi return 1 } # # Name: sm_show_rg_info # # Description: Show the db2 instance specific info for a resource group # (databases, etc) # # Options: resource group of interest # # Returns: 0 if the group is found/displayed # 1 if group is not found/displayed # function sm_show_rg_info { typeset group=$1 typeset kgroup typeset tmp typeset knodes typeset instance instance=$(KLIB_AIX_ODM_get_odm_fields "sa_type=SA_DB2Instance" "HACMPgroup" "sa_key") # If no db2 instances exist, return an error if (( $? != 0 )); then abort 4 $group fi # output suitable for smit echo "#group:nodes:instance" echo "$(clgetgrp -c -g $group | tail -1 | cut -f1,4 -d:):$instance" } # # Name: sm_show_configured_instances # # Description: This function will show all of the DB2 instances # that are presently configured as part of HACMP # function prints output suitable for SMIT selector # screen # # Argument: None # # Returns: None # function sm_show_configured_instances { typeset sa_key typeset group # Check to see if any resource groups are configured with DB2 inst_count=$(KLIB_AIX_ODM_get_odm_fields "sa_type=SA_DB2Instance" "HACMPgroup" "group" | wc -l) if (( $inst_count <= 0 )); then abort 8 fi errmsg 1 KLIB_AIX_ODM_get_odm_fields "sa_type=SA_DB2Instance" "HACMPgroup" "sa_key" "group" | while read group; do read sa_key echo "$sa_key\t\t$group" done 2>/dev/null return 0 } # # Name: sm_show_instances # # Description: Show all DB2 instances discovered on the local cluster node # # Arguments: None # # Returns: 0 - always # function sm_show_instances { typeset instance typeset found=0 for instance in $(KLIB_DB2_disc_get_instances); do echo $instance found=1 done 2>/dev/null (( found )) && return 0 # it is possible the user has installed the instance somewhere # other than the default location, in which case the command # above will not produce any output - let the user know echo "#" echo "# If this pick list does not show the instance you are expecting, it is" echo "# possible that it is not installed in the appropriate directory relative to" echo "# the instance owner's home directory. For example, if the owner's home" echo "# directory is /opt/db2/insthome and the instance name is 'foo', then" echo "# the smart assist expects to find the /opt/db2/insthome/foo directory." echo "#" return 0; # so smit does not report an error } # # Name: sm_show_databases # # Description: Show all DB2 databases discovered # # Arguments: None # # Returns: 0 - always # function sm_show_databases { typeset instance typeset database typeset databases for instance in $(KLIB_DB2_disc_get_instances); do databases=$(KLIB_DB2_disc_get_instance_value $instance DATABASES) if [[ -n $databases ]]; then errmsg 2 "$instance" else errmsg 3 "$instance" fi for database in $databases; do echo "\t$database" done done 2>/dev/null return 0 } # # Name: sm_show_all # # Description: Show all DB2 related data in a format suitable for smit # # Arguments: DB instance name # # Returns: 0 - always # function sm_show_all { typeset pInstance=$1 typeset instance typeset databases typeset instance_owner typeset instance_group typeset instance_owner_uid typeset instance_group_gid typeset homedir typeset homevg typeset homevg_pvids typeset othervgs echo "#instance:databases:user:group:uid:gid:homedir:homevg:homevg_pvids:othervgs" for instance in $(KLIB_DB2_disc_get_instances); do if [[ -z $pInstance || "$pInstance" == "$instance" ]]; then databases=$(KLIB_DB2_disc_get_instance_value $instance DATBASES) instance_owner=$(KLIB_DB2_disc_get_instance_value $instance INSTANCE_OWNER) instance_owner_uid=$(KLIB_DB2_disc_get_instance_value $instance INSTANCE_OWNER_UID) instance_group=$(KLIB_DB2_disc_get_instance_value $instance INSTANCE_OWNER_GROUP) instance_group_gid=$(KLIB_DB2_disc_get_instance_value $instance INSTANCE_OWNER_GROUP_GID) homedir=$(KLIB_DB2_disc_get_instance_value $instance INSTHOME) homevg=$(KLIB_DB2_disc_get_instance_value $instance DB2HOME_VG) homevg_pvids=$(KLIB_DB2_disc_get_instance_value $instance DB2HOME_VG_PVIDS) othervgs=$(KLIB_DB2_disc_get_instance_value $instance OTHERVGS) echo "$instance:$databases:$instance_owner:$instance_group:$instance_owner_uid:$instance_group_gid:$homedir:$homevg:$homevg_pvids:$othervgs" fi done return 0 } # # Name: sm_run_module # # Description: wrapper function to execute the named module with FPATH # # Arguments: DB instance name # # Returns: 0 - success # 1 - module not found # function sm_run_module { typeset module typeset element module=$1 if [[ -f /usr/es/lib/ksh93/hacmp/$module ]]; then FPATH=$FPATH:/usr/es/lib/ksh93/hacmp/ for element in $(eval $module); do # echo would leave everything on the same line echo $element done return 0 fi return 1 } # # Main # umask -S u=rw,g=,o= KLIB=/usr/es/lib/ksh93 FPATH=$KLIB/db2/:$KLIB/aix/:$KLIB/aix/odm:$KLIB/util/list # setup standard PATH PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) # add sa PATH=$PATH:/usr/es/sbin/cluster/sa/db2/sbin/ # Read in the message catalog file . /usr/es/sbin/cluster/sa/db2/cat/cl_db2smdisc # Read in the definitions file . /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the discovery information [[ -f /usr/es/sbin/cluster/sa/db2/etc/db2.disc ]] && . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # Read in the common functions, abort, errmsg, logmsg . /usr/es/lib/ksh93/common_functions.ksh93 # parse command line args if set -- $(getopt s:aA:g:dicn:m: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -s) # Produce a summary report of the instance # specified as an argument instance=$2 shift sm_show_instance_summary $instance exit $? ;; -n) # Show the list of nodes associated with the # resource group for a pick list group=$2 shift sm_show_rg_nodes $group exit $? ;; -g) # Show the resource group configuration for # the selected resource group group=$2 shift sm_show_rg_info $group exit $? ;; -d) # List all of the databases sm_show_databases exit $? ;; -i) # List all of the DB2 instances sm_show_instances exit $? ;; -c) # List all configured DB2 instances sm_show_configured_instances exit $? ;; -A) # Show all the fields for selected instance instance=$2 shift sm_show_all $instance exit $? ;; -m) # Produce output for module module=$2 shift sm_run_module $module exit $? ;; -a) # Show all the fields for every instance sm_show_all exit $? ;; --) shift break ;; esac shift done fi  k$o@~.םa՝a֝a&~2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2startr@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r721 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2start.sh 1.11.1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2start.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################### # # Name: cl_db2start # # Command used as the HACMP Application Server "Start Script" for DB2 Smart Assist. # # Syntax: # cl_db2start [-D | -v] INSTANCE_OWNER # # Arguments: # -D Turn on debug mode. # -v Turn on verbose mode. # INSTANCE_OWNER DB2 instance owner # # Returns: # 0 on SUCCESS # 1 on FAILURE # ############################################################################### . /usr/es/lib/ksh93/func_include version='1.8' ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ usage() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x dspmsg -s 3 $DB2SACAT 1 "Usage:\ncl_db2start [-D | -v] INSTANCE_OWNER\n\nINSTANCE_OWNER must be a valid system user.\n" exit 1 } ############################################################################### # # Name: isRunning # # Check to see if the DB2 instance is running. The DAS is not checked here! # # Arguments: none # # Returns: # 0 on RUNNING # 1 on NOT RUNNING # ################################################################################ isRunning() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x if ps -fu $INSTANCE_OWNER | grep -q "db2sysc " > /dev/null then KLIB_DB2_print_message 4 9 "INFO: DB2 instance %s is running.\n" $INSTANCE_OWNER return 0 fi return 1 # instance not running } ############################################################################### # # Name: doStart # # Becomes the DB2 INSTANCE_OWNER and starts the instance. # # Arguments: none # # Returns: # 0 on SUCCESS # 1 on FAILURE # ################################################################################ doStart() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x if [[ ! -f ~$INSTANCE_OWNER/sqllib/db2profile ]]; then KLIB_DB2_print_message 1 1 "ERROR: ~%s/sqllib/db2profile does not exist!\n" $INSTANCE_OWNER return 1 fi # # Gather the DB2 user shell environment. # DB2_SHELL_ENV=$(lsuser -a shell $INSTANCE_OWNER | awk -F = '{print $2}') (echo $DB2_SHELL_ENV | grep csh > /dev/null) && DB2_SHELL_ENV="csh" (echo $DB2_SHELL_ENV | grep ksh > /dev/null) && DB2_SHELL_ENV="ksh" if [[ "$DB2_SHELL_ENV" == "ksh" ]]; then /usr/bin/su - $INSTANCE_OWNER -c ". ~$INSTANCE_OWNER/sqllib/db2profile && db2gcf -u -p 0" > /dev/null 2>&1 elif [[ "$DB2_SHELL_ENV" == "csh" ]]; then /usr/bin/su - $INSTANCE_OWNER -c "source ~$INSTANCE_OWNER/sqllib/db2cshrc && db2gcf -u -p 0" > /dev/null 2>&1 fi if (( $? != 0 )); then KLIB_DB2_print_message 3 2 "ERROR: Failed starting DB2 instance!\n" return 1 fi DASADM_USER=$(KLIB_SA_get_metadata DB2_Instance_${INSTANCE_OWNER} DASADM_USER) if [[ -z $DASADM_USER ]]; then KLIB_DB2_print_message 3 5 "WARNING: DB2 Administration User not found, skipping start...\n" $DASADM_USER else # Only one DAS (TCP port 523) is allowed per node so if it's already running, we won't start it. NUMDAS=$(ps -fu$DASADM_USER -o args | grep -c '/das/adm/db2dasrrm') if (( $NUMDAS == 0 )); then KLIB_DB2_print_message 3 6 "INFO Starting the DB2 Administration Server as DAS user %s...\n" $DASADM_USER if [[ -f ~$DASADM_USER/das/bin/db2admin ]]; then /usr/bin/su - $DASADM_USER -c "~$DASADM_USER/das/bin/db2admin start" > /dev/null 2>&1 else KLIB_DB2_print_message 3 7 "ERROR: Cannot find db2admin for user %s! Start not possible!\n" $DASADM_USER return 1 fi else KLIB_DB2_print_message 3 8 "INFO: DB2 Administration Server is already running.\n" fi fi return 0 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=${0##*/} PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) # Including Availability metrics library file . /usr/es/lib/ksh93/availability/cl_amlib FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/db2:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH if [[ $VERBOSE_LOGGING == "high" ]] then set -x version='@(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2start.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM' fi export DB2SA_HOME="/usr/es/sbin/cluster/sa/db2" export DB2SA_ETC_PATH="$DB2SA_HOME/etc" export DB2SA_SBIN_DIR="$DB2SA_HOME/sbin" export DB2SA_DISC_FILE="$DB2SA_ETC_PATH/db2.disc" export DEBUG=${DEBUG:-"0"} export VERBOSE=${VERBOSE:-"0"} export DB2SALOG="/var/hacmp/log/db2sa.log" export DB2SACAT="db2sa.cat" export INSTANCE_OWNER="" NUM_ARGS=$# (( $NUM_ARGS == 0 )) && usage set -- $(getopt Dv $* 2> /dev/null) while [[ $1 != -- ]] do case $1 in -D) # Verbose on + Debug on VERBOSE=1 DEBUG=1 shift ;; -v) # Verbose on VERBOSE=1 shift ;; *) usage ;; esac done shift # get rid of the trailing -- INSTANCE_OWNER=$1 if [[ "$INSTANCE_OWNER" == "" ]]; then KLIB_DB2_print_message 1 2 "ERROR: DB2 instance owner required!\n" usage else KLIB_DB2_print_message 1 3 "INFO: Verifying DB2 instance owner %s.\n" $INSTANCE_OWNER if ! lsuser -a home $INSTANCE_OWNER > /dev/null 2>&1 then KLIB_DB2_print_message 1 4 "ERROR: DB2 instance owner (%s) does not exist!\n" $INSTANCE_OWNER usage fi fi APP_ID=$(clodmget -n -q "name=USER_NAME and value=$INSTANCE_OWNER" -f application_id HACMPsa_metadata) RG=$(clodmget -n -q "application_id=$APP_ID and name=RESOURCE_GROUP" -f value HACMPsa_metadata) amlog_trace $AM_SA_DB2_START_BEGIN "Check if instance already running|$RG" isRunning rc=$? amlog_trace $AM_SA_DB2_START_END "Check if instance already running|$RG" if (( $rc == 1 )); then KLIB_DB2_print_message 3 3 "INFO: Calling doStart()...\n" amlog_trace $AM_SA_DB2_START_BEGIN "Start DB2 Database|$RG" doStart rc=$? if (( $rc != 0 )) then amlog_err $AM_SA_DB2_START_FAILURE "Start DB2 Database|$RG" else amlog_trace $AM_SA_DB2_START_END "Start DB2 Database|$RG" fi else KLIB_DB2_print_message 3 4 "WARNING: DB2 instance %s already running!\n" $INSTANCE_OWNER exit 0 fi exit $rc NC k$o@".םa՝a֝a&"2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2stopr@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r721 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2stop.sh 1.9.1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2stop.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################### # # Name: cl_db2stop # # Command used as the HACMP Application Server "Stop Script" for DB2 Smart Assist. # # Syntax: # cl_db2stop [-D | -v] INSTANCE_OWNER # # Arguments: # -D Turn on debug mode. # -v Turn on verbose mode. # INSTANCE_OWNER DB2 instance owner # # Returns: # 0 on SUCCESS # 1 on FAILURE # ############################################################################### . /usr/es/lib/ksh93/func_include version='1.7' ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ usage() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x dspmsg -s 4 $DB2SACAT 1 "Usage:\ncl_db2stop [-D | -v] INSTANCE_OWNER\n\nINSTANCE_OWNER must be a valid system user.\n" exit 1 } ############################################################################### # # Name: isRunning # # Check to see if the DB2 instance is running. The DAS is not checked here! # # Arguments: none # # Returns: # 0 on RUNNING # 1 on NOT RUNNING # ################################################################################ isRunning() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x if ps -fu $INSTANCE_OWNER | grep "db2sysc " > /dev/null then KLIB_DB2_print_message 4 9 "INFO: DB2 instance %s is running.\n" $INSTANCE_OWNER return 0 fi return 1 # instance not running } ############################################################################### # # Name: doStop # # Becomes the DB2 INSTANCE_OWNER and stops the instance. # # Arguments: none # # Returns: # 0 on SUCCESS # 1 on FAILURE # ################################################################################ doStop() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DASADM_USER=$(KLIB_SA_get_metadata DB2_Instance_${INSTANCE_OWNER} DASADM_USER) if [[ "$DASADM_USER" == "" ]]; then KLIB_DB2_print_message 4 12 "WARNING: DB2 Administration User not found, skipping stop...\n" $DASADM_USER else # We'll only stop DAS if there is only one DB2 instance left. # This is the instance to be stopped next. NUMSYSC=$(ps -ef -o args|grep -v grep|grep -c 'db2sysc ') # single space after db2sysc if (( $NUMSYSC == 1 )); then KLIB_DB2_print_message 4 10 "INFO: Stopping the DB2 Administration Server as DAS user %s...\n" $DASADM_USER if [[ -f ~$DASADM_USER/das/bin/db2admin ]]; then /usr/bin/su - $DASADM_USER -c "~$DASADM_USER/das/bin/db2admin stop /force" > /dev/null 2>&1 else KLIB_DB2_print_message 4 13 "WARNING: Cannot find db2admin for user %s, skipping stop...\n" $DASADM_USER fi fi fi if [[ ! -f ~$INSTANCE_OWNER/sqllib/db2profile ]]; then KLIB_DB2_print_message 1 1 "ERROR: ~%s/sqllib/db2profile does not exist!\n" $INSTANCE_OWNER return 1 fi KLIB_DB2_print_message 4 2 "INFO: Stopping DB2 instance as owner %s...\n" $INSTANCE_OWNER # # Gather the DB2 user shell environment # DB2_SHELL_ENV=$(lsuser -a shell $INSTANCE_OWNER | awk -F = '{print $2}') (echo $DB2_SHELL_ENV | grep csh > /dev/null) && DB2_SHELL_ENV="csh" (echo $DB2_SHELL_ENV | grep ksh > /dev/null) && DB2_SHELL_ENV="ksh" if [[ "$DB2_SHELL_ENV" == "ksh" ]]; then /usr/bin/su - $INSTANCE_OWNER -c ". ~$INSTANCE_OWNER/sqllib/db2profile && db2stop force" > /dev/null 2>&1 elif [[ "$DB2_SHELL_ENV" == "csh" ]]; then /usr/bin/su - $INSTANCE_OWNER -c "source ~$INSTANCE_OWNER/sqllib/db2cshrc && db2stop force" > /dev/null 2>&1 fi if (( $? != 0 )); then KLIB_DB2_print_message 4 3 "ERROR: Failed stopping DB2 instance as owner %s!\n" $INSTANCE_OWNER return 1 else KLIB_DB2_print_message 4 4 "INFO: Killing db2bp processes for %s...\n" $INSTANCE_OWNER if ! ps -fu $INSTANCE_OWNER | egrep 'sqllib/bin/db2bp' | egrep -v 'PID' | awk '{print $2}' | xargs -i kill -HUP {} > /dev/null 2>&1 then KLIB_DB2_print_message 4 5 "ERROR: Failed killing db2bp processes for %s!\n" $INSTANCE_OWNER return 1 else KLIB_DB2_print_message 4 6 "INFO: Cleaning IPC for %s...\n" $INSTANCE_OWNER if [[ "$DB2_SHELL_ENV" == "ksh" ]]; then /usr/bin/su - $INSTANCE_OWNER -c ". ~$INSTANCE_OWNER/sqllib/db2profile && ipclean" > /dev/null 2>&1 elif [[ "$DB2_SHELL_ENV" == "csh" ]]; then /usr/bin/su - $INSTANCE_OWNER -c "source ~$INSTANCE_OWNER/sqllib/db2cshrc && ipclean" > /dev/null 2>&1 fi if (( $? != 0 )); then KLIB_DB2_print_message 4 7 "ERROR: Failed cleaning IPC for %s!\n" $INSTANCE_OWNER return 1 fi fi fi return 0 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=${0##*/} PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/db2:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # Including Availability metrics library file . /usr/es/lib/ksh93/availability/cl_amlib if [[ $VERBOSE_LOGGING == "high" ]] then set -x version='@(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2stop.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM' fi export DB2SA_HOME="/usr/es/sbin/cluster/sa/db2" export DB2SA_ETC_PATH="$DB2SA_HOME/etc" export DB2SA_SBIN_DIR="$DB2SA_HOME/sbin" export DB2SA_DISC_FILE="$DB2SA_ETC_PATH/db2.disc" export DEBUG=${DEBUG:-"0"} export VERBOSE=${VERBOSE:-"0"} export DB2SALOG="/var/hacmp/log/db2sa.log" export DB2SACAT="db2sa.cat" export INSTANCE_OWNER="" export DASADM_USER="" NUM_ARGS=$# (( $NUM_ARGS == 0 )) && usage set -- $(getopt Dv $* 2> /dev/null) if (( $? != 0 )); then usage fi while [[ $1 != -- ]] do case $1 in -D) # Verbose on + Debug on VERBOSE=1 DEBUG=1 shift ;; -v) # Verbose on VERBOSE=1 shift ;; *) usage ;; esac done shift # get rid of the trailing -- INSTANCE_OWNER=$1 if [[ "$INSTANCE_OWNER" == "" ]]; then KLIB_DB2_print_message 1 2 "ERROR: DB2 instance owner required!\n" usage else KLIB_DB2_print_message 1 3 "INFO: Verifying DB2 instance owner %s.\n" $INSTANCE_OWNER if ! lsuser -a home $INSTANCE_OWNER > /dev/null 2>&1 then KLIB_DB2_print_message 1 4 "ERROR: DB2 instance owner (%s) does not exist!\n" $INSTANCE_OWNER usage fi fi APP_ID=$(clodmget -n -q "name=USER_NAME and value=$INSTANCE_OWNER" -f application_id HACMPsa_metadata) RG=$(clodmget -n -q "application_id=$APP_ID and name=RESOURCE_GROUP" -f value HACMPsa_metadata) amlog_trace $AM_SA_DB2_STOP_BEGIN "Check if instance already running|$RG" isRunning rc=$? amlog_trace $AM_SA_DB2_STOP_END "Check if instance already running|$RG" if (( $rc == 0 )) then KLIB_DB2_print_message 4 8 "INFO: Calling doStop()...\n" amlog_trace $AM_SA_DB2_STOP_BEGIN "Stop DB2 Database|$RG" doStop rc=$? if (( $rc != 0 )) then amlog_err $AM_SA_DB2_STOP_FAILURE "Stop DB2 Database|$RG" else amlog_trace $AM_SA_DB2_STOP_END "Stop DB2 Database|$RG" fi else KLIB_DB2_print_message 4 11 "INFO: DB2 instance %s not running.\n" $INSTANCE_OWNER exit 0 fi exit $rc > / kꖩ$oT.םa՝a֝a&T2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2testtoolenvat#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2testtool.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)59 1.5 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2testtool.sh, hacmp.assist, 61haes_r714 4/7/05 21:37:00 # Read in the message catalog entries . /usr/es/sbin/cluster/sa/db2/cat/cl_db2testtool # Read in the DB2 defaults . /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 function write_script { typeset RESOURCE_GROUP=$1 typeset FILENAME=$2 KLIB=/usr/es/lib/ksh93 FPATH=$KLIB/hacmp:$KLIB/sa:$KLIB/aix:$KLIB/aix/odm typeset NODES=$(KLIB_AIX_ODM_get_odm_fields "group=$RESOURCE_GROUP" "HACMPgroup" "nodes") typeset INSTANCE=$(KLIB_AIX_ODM_get_odm_fields "group=$RESOURCE_GROUP" "HACMPgroup" "sa_key") [[ -z $NODES ]] && abort 2 $RESOURCE_GROUP $RESOURCE_GROUP [[ -z $INSTANCE ]] && abort 3 $RESOURCE_GROUP typeset DB2_APPLICATION_SERVER=$(KLIB_HACMP_get_appserver $RESOURCE_GROUP) [[ -z $DB2_APPLICATION_SERVER ]] && abort 4 $RESOURCE_GROUP $INSTANCE typeset DB2_INSTANCE_START_SCRIPT=$(KLIB_AIX_ODM_get_odm_fields "name=$DB2_APPLICATION_SERVER" "HACMPserver" "start") [[ -z $DB2_INSTANCE_START_SCRIPT ]] && abort 5 $RESOURCE_GROUP $DB2_APPLICATION_SERVER typeset DB2HOMEVG=$(KLIB_SA_get_metadata "SA_DB2Instance" "$INSTANCE" "HOME_VOLUME_GROUP") [[ -z $DB2HOMEVG ]] && abort 6 $RESOURCE_GROUP $INSTANCE typeset DB2_SERVICE_IP_LABEL=$(KLIB_AIX_ODM_get_odm_fields "group=$RESOURCE_GROUP and name=SERVICE_LABEL" "HACMPresource" "value") [[ -z $DB2_SERVICE_IP_LABEL ]] && abort 7 $RESOURCE_GROUP $INSTANCE typeset PRIMARY_NODE='' typeset TAKEOVER_NODES='' for node in $NODES; do if [[ -z $PRIMARY_NODE ]]; then PRIMARY_NODE=$node else TAKEOVER_NODES="$node $TAKEOVER_NODES" fi done # TEST SECTION 1: ## Test Fallover for each DB2 instance resource group takeover node ### echo "NODE_DOWN_TAKEOVER,$PRIMARY_NODE,\"Stop cluster services with takeover on the primary node for DB2 instance resource group: $RESOURCE_GROUP\"" > $FILENAME echo "NODE_UP,$PRIMARY_NODE,\"Start cluster services on the primary node: $PRIMARY_NODE, for DB2 instance resource group: $RESOURCE_GROUP\"" >> $FILENAME for NODE in $TAKEOVER_NODES; do echo "NODE_DOWN_TAKEOVER,$NODE,\"Stop cluster services with takeover on the takeover node: $NODE for DB2 instance resource group: $RESOURCE_GROUP\"" echo "NODE_UP,$NODE,\"Start cluster services for node: $NODE, for DB2 instance resource group: $RESOURCE_GROUP\"" done >> $FILENAME } umask -S u=rw,g=,o= KLIB=/usr/es/lib/ksh93 FPATH=$KLIB/hacmp:$KLIB/db2:$KLIB/aix/odm PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster:/usr/es/sbin/cluster/sa/db2/sbin/ SCRIPT_LOCATION=/usr/es/sbin/cluster/sa/db2/etc if set -- $(getopt g:f: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -g) # Store the resource group name RG=$2 shift ;; -f) OUTPUT_SCRIPT=$2 shift ;; --) shift break ;; esac shift done fi if [[ -z $RG ]]; then # Show the usage statement abort 1 $SCRIPT_NAME fi if [[ -z $OUTPUT_SCRIPT ]]; then OUTPUT_SCRIPT="$SCRIPT_LOCATION/testscript_$RG" fi write_script $RG $OUTPUT_SCRIPT instance=$(KLIB_AIX_ODM_get_odm_fields "group=$RG" "HACMPgroup" "sa_key") echo "#instance:script" echo "$instance:$OUTPUT_SCRIPT" ~H km$o.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2ver_collectorat#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2ver_collector.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)61 1.6 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2ver_collector.sh, hacmp.assist, 61haes_r714 12/8/08 08:37:05 # # Name: clver_db2ver_collector # # Description: This script is used by clverify to gather # the rhosts information for each accessible DB2 # instance on the local node. The script also collects # the db2nodes.cfg file as well as information related # to configured DB2 instances on the local node # # The DB2 instance home directory must be mounted # at the time the script is executed, otherwise information # related to DB2 volume groups will not be discovered # this information is only accessible by connecting # to the DB2 database and performing a "db2 get db cfg" # for the databases defined to the configured DB2 instance # # Arguments: n/a # # Returns: 1 if unsuccessful (environment variables not set properly) # 0 if successful # echo "#type:instance:ip_label:rhost_user:instance_owner:insthome:db2nodes_cfg_ip_label" DISCOVERY_FILE="/tmp/db2.disc.$$" # Determine if the environment has the CLVERIFY_ODMDIR set, if not # abort verification, no information will be reported to stdout since # this would be interpretted by clverify as collected data if [[ -z $CLVERIFY_DCD ]]; then exit 1 fi # # If the caller (clverify) has not set the NODENAME, then abort # if [[ -z $CLVERIFY_NODENAME ]]; then exit 1 fi typeset -i num_instances num_instances=$(ODMDIR=$CLVERIFY_DCD odmget -q sa_type=SA_DB2Instance HACMPgroup | wc -l) # If there are no DB2 instances defined to HACMP, then abort this script if (( $num_instances == 0 )); then exit 0 fi CLUSTER_NODE=$CLVERIFY_NODENAME echo "CLUSTER_NODE=$VERIFY_NODENAME" > $DISCOVERY_FILE # # typeset -L, represents left justify, removing leading spaces # # As lslpp can't be used to check the installation of DB2, from DB2 V9.X onwards. # From DB2 V9.X onwards, we have 'db2ls' command, e.g. as below # /usr/local/bin/db2ls -> /opt/IBM/db2/V9.5/install/db2ls # From the above output, the installation path for DB2 is /opt/IBM/db2/V9.5 # The installation path is parsed accordingly. # typeset -L INSTALL_DIR lslpp -cw '*bin/db2ilist' 1>/dev/null 2>&1 [[ $? != 0 ]] && { INSTALL_DIR=$(ls -l /usr/local/bin/db2ls | cut -d ">" -f 2 | cut -d "install" -f 1) export DSE_INSTALL_DIR="$INSTALL_DIR" } /usr/es/sbin/cluster/sa/db2/sbin/cl_db2discovery -q >> $DISCOVERY_FILE 2>/dev/null # Now source the discovery file . $DISCOVERY_FILE FPATH=/usr/es/lib/ksh93/db2/ rm -f $DISCOVERY_FILE for instance in $(KLIB_DB2_disc_get_instances); do homedir=$(KLIB_DB2_disc_get_instance_value $instance "INSTHOME") inst_owner=$(KLIB_DB2_disc_get_instance_value $instance "INSTANCE_OWNER_USER") if [[ -n $homedir && -f $homedir/.rhosts ]]; then found=false while read node user; do echo "RHOST:$instance:$node:$user:$inst_owner:$homedir: " found=true done < $homedir/.rhosts $found || echo "RHOST:$instance: : : : : " else if [[ -d $homedir/sqllib ]]; then echo "RHOST:$instance: : : : : " fi fi if [[ -n $homedir && -f $homedir/sqllib/db2nodes.cfg ]]; then found=false while read dbpartitionum ip_label logical_port netname resourcename; do echo "DB2NODES:$instance:none:none:$inst_owner:$homedir:$ip_label" found=true done < $homedir/sqllib/db2nodes.cfg $found || echo "DB2NODES:$instance:none:none:$inst_owner:$homedir: " else if [[ -d $homedir/sqllib ]]; then echo "DB2NODES:$instance:none:none:$inst_owner:$homedir: " fi fi done unset DSE_INSTALL_DIR vȀ k$o@&.םa՝a֝a&&2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2smquery@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2smquery.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG ############################################################################# ## ## Name: cl_db2smquery ## ## Description: Performs application discovery query on the local node ## to determine if mutual takeover or a single DB2 instance ## is available ## ## Arguments: -s for single instance ## -m for mutual takeover ## ## Returns: n/a ## ############################################################################# . /usr/es/lib/ksh93/func_include version='1.12.3.2 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2smquery.sh 2$' ############################################################################# # Functions: # # isNonDPFMutualTakeoverDefined # isNonDPFSingleInstanceDefined # displayMutualTakeover # displaySingleInstance # listInstances # isPrimaryNodeForInstance # ############################################################################# function isNonDPFSingleInstanceDefined { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x if [[ -n $DB2_LOCAL_INSTANCES ]]; then return 1 else return 0 fi } function isNonDPFMutualTakeoverDefined { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x isNonDPFSingleInstanceDefined } function displaySingleInstance { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x isNonDPFSingleInstanceDefined typeset -i installed=$? print -n $(dspmsg -s 90 db2sa.cat 2 "DB2 UDB non-DPF Smart Assistant") print -n ":DB2:" print -n $(dspmsg -s 90 db2sa.cat 3 "DB2 Single Instance") print -n ":DB2_NON_DPF_SINGLE:" echo $installed } function displayMutualTakeover { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x isNonDPFMutualTakeoverDefined typeset -i installed=$? print -n $(dspmsg -s 90 db2sa.cat 2 "DB2 UDB non-DPF Smart Assistant") print -n ":DB2:" print -n $(dspmsg -s 90 db2sa.cat 4 "DB2 Mutual Takeover") print -n ":DB2_NON_DPF_MUTUAL:" echo $installed } function listInstances { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset nodes=$* [[ -z $LOCALNODENAME ]] && { $DB2_CLIENT_PATH/db2ilist return 0 } for node in $nodes; do [[ "$node" == "$LOCALNODENAME" ]] && { $DB2_CLIENT_PATH/db2ilist } || { [[ -n $DSE_INSTALL_DIR ]] && { cl_rsh $node \ "/usr/es/sbin/cluster/sa/db2/sbin/cl_db2smquery -I -p $DSE_INSTALL_DIR" } || { cl_rsh $node \ "/usr/es/sbin/cluster/sa/db2/sbin/cl_db2smquery -I" } } done return 0 } function isPrimaryNodeForInstance { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x HOMEDIR=$(lsuser -a home $instance) HOMEDIR=${HOMEDIR/*=/} DB2_SHELL_ENV=$(lsuser -a shell $instance | awk -F = '{print $2}') (echo $DB2_SHELL_ENV | grep csh > /dev/null) && { DB2_SHELL_ENV="csh" } (echo $DB2_SHELL_ENV | grep ksh > /dev/null) && { DB2_SHELL_ENV="ksh" } [[ -f $HOMEDIR/sqllib/db2profile ]] && { [[ "$DB2_SHELL_ENV" == "ksh" ]] && { /usr/bin/su - $instance -c "LC_ALL=C LANG=C db2 list database directory" | \ while IFS='=' read name value; do name=$(eval echo $name) value=$(eval echo $value) if [[ "$name" == "Local database directory" ]]; then DB_DIR="$value $DB_DIR" fi done } [[ "$DB2_SHELL_ENV" == "csh" ]] && { /usr/bin/su - $instance -c "set LC_ALL=C LANG=C; db2 list database directory" 2>/dev/null | \ while IFS='=' read name value; do name=$(eval echo $name) value=$(eval echo $value) if [[ "$name" == "Local database directory" ]]; then DB_DIR="$value $DB_DIR" fi done } KLIB_UTIL_LIST_unique_key_list DB_DIR $DB_DIR for DIR in $DB_DIR; do [[ -d $DIR/$instance ]] && return 0 done } return 1 } ############################################################################# # Global Variables: ############################################################################# FPATH=/usr/es/lib/ksh93/db2/:/usr/es/lib/ksh93/hacmp/:/usr/es/lib/ksh93/util/:/usr/es/lib/ksh93/util/list PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) if lslpp -cw '*bin/db2ilist' 1>/dev/null 2>&1 then DB2_CLIENT_PATH=$(lslpp -cw '*bin/db2ilist' | tail -n 1 | awk -F: '{ print $1 }') DB2_CLIENT_PATH=${DB2_CLIENT_PATH/db2ilist/} else [[ -n $DSE_INSTALL_DIR ]] && DB2_CLIENT_PATH=${DSE_INSTALL_DIR}/bin fi [[ -n $DB2_CLIENT_PATH ]] && DB2_LOCAL_INSTANCES=$($DB2_CLIENT_PATH/db2ilist) LOCALNODENAME=$(get_local_nodename 2>/dev/null) ############################################################################# # Main: ############################################################################# typeset option nodes instance ACTION discovery_mode while getopts q:n:i:MSILPQ:D:p:m option do case $option in n) nodes=$OPTARG nodes=${nodes//:/ } nodes=${nodes//,/ } ;; q) # Perform a query for a modify screen application_id=$OPTARG ACTION=query ;; Q) # Perform a query for a modify screen application_id=$OPTARG ACTION=query_mutual ;; i) # Instance name to run discovery on instance=$OPTARG ;; M) # Check to see if this node can handle mutual takeover displayMutualTakeover exit 0 ;; S) # Check for single instances displaySingleInstance exit 0 ;; I) # List the accessible instances on this node nodes=$LOCALNODENAME ACTION=list ;; D) # Run discovery for SMIT Screen ACTION=discover_$OPTARG ;; L) # List instances on all provided node names ACTION=list ;; p) # Set the DB2 installed path. DSE_INSTALL_DIR=$OPTARG ;; P) # Check the primary node for selected instance typeset ret_val isPrimaryNodeForInstance ret_val=$? exit $ret_val ;; m) discovery_mode="-m" ;; *) ;; esac done [[ -n $DSE_INSTALL_DIR ]] && { DB2_CLIENT_PATH=${DSE_INSTALL_DIR}/bin DB2_LOCAL_INSTANCES=$($DB2_CLIENT_PATH/db2ilist) } [[ "$ACTION" == "list" ]] && { [[ -z $nodes ]] && { typeset -A list KLIB_HACMP_list_nodes list nodes=${list[*]} } listInstances $nodes | sort -u exit 0 } [[ "$ACTION" == "discover_single" ]] && { echo "#primary:takeover:application_name" # # Consider nodes which have instance definition # typeset node_list for node in $nodes; do instances=$(listInstances $node) for inst in $instances; do [[ "$inst" == "$instance" ]] && { node_list="$node $node_list" break } done done # # Check the primary node for selected instance # typeset primary_node for node in $node_list; do if [[ "$node" == "$LOCALNODENAME" ]]; then isPrimaryNodeForInstance else cl_rsh $node "/usr/es/sbin/cluster/sa/db2/sbin/cl_db2smquery -i $instance -P" 2>/dev/null fi [[ $? == 0 ]] && { primary_node=$node break } done [[ -n $primary_node ]] && { /usr/es/sbin/cluster/sa/db2/sbin/cl_db2smadd -A -n $primary_node $discovery_mode } >/dev/null 2>&1 echo "$primary_node: :DB2_Instance_$instance" exit 0 } [[ "$ACTION" == "query" ]] && { echo "#primary:takeover:instance:database_to_monitor:service_ip:prefix:network" RESOURCE_GROUP=$(odmget -q sa_key=$application_id HACMPgroup | grep "group =" | awk -F'=' '{ print $2 }') typeset network="" prefix="" # remove quotes RESOURCE_GROUP=${RESOURCE_GROUP//\"/} # remove whitespace RESOURCE_GROUP=${RESOURCE_GROUP// /} [[ -z $RESOURCE_GROUP ]] && exit 1 set -a eval $(clquerysaapp -a $application_id | grep INSTANCE_NAME) eval $(clvt query resource_group $RESOURCE_GROUP | grep SERVICE_LABEL) set +a DATABASE_TO_MONITOR=$(clodmget -q "application_id=$application_id and name=DATABASE_TO_MONITOR" -f value -d "=" HACMPsa_metadata) DATABASE_TO_MONITOR=${DATABASE_TO_MONITOR//\"/} [[ -n $RESOURCE_GROUP ]] && { NODES=$(clvt query resource_group $RESOURCE_GROUP | grep -w NODES | awk -F'=' '{ print $2 }') NODES=${NODES//\"/} echo $NODES | read primary takeover } for sip in $SERVICE_LABEL do if [[ -z $prefix ]]; then prefix=$(clodmget -n -q "ip_label=$sip" -f netmask HACMPadapter ) else prefix=$prefix" "$(clodmget -n -q "ip_label=$sip" -f netmask HACMPadapter ) fi if [[ -z $network ]]; then network=$(clodmget -n -q "ip_label=$sip" -f network HACMPadapter ) else network=$network" "$(clodmget -n -q "ip_label=$sip" -f network HACMPadapter ) fi done echo $primary:$takeover:$INSTANCE_NAME:$DATABASE_TO_MONITOR:$SERVICE_LABEL:$prefix:$network exit 0 } [[ "$ACTION" == "query_mutual" ]] && { print "#first_node:first_instance:first_database_to_monitor:first_service_ip:second_node:second_instance:second_database_to_monitor:second_service_ip" typeset -A list set -a eval $(KLIB_UTIL_parse_arguments list $(clquerysaapp -a $application_id)) set +a [[ -n $FIRST_RESOURCE_GROUP ]] && { set -a eval $(clvt query resource_group $FIRST_RESOURCE_GROUP) set +a echo $NODES | read primary takeover FIRST_SERVICE_IP="$SERVICE_LABEL" } [[ -n $SECOND_RESOURCE_GROUP ]] && { set -a eval $(clvt query resource_group $SECOND_RESOURCE_GROUP) set +a SECOND_SERVICE_IP="$SERVICE_LABEL" } echo "$primary:$FIRST_INSTANCE_NAME:$FIRST_DATABASE_TO_MONITOR:$FIRST_SERVICE_IP:$takeover:$SECOND_INSTANCE_NAME:$SECOND_DATABASE_TO_MONITOR:$SECOND_SERVICE_IP" exit 0 } ;; S) kL$o .םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/db2/sbin/cl_db2sw_ver_collector#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2sw_ver_collector.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/cl_db2sw_ver_collector.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # # Name: cl_db2sw_ver_collector # # Description: This script is used by clverify to gather # the base DB2 UDB support and product signature fileset # installed version. # # The output format will be as below # BASE_DB2_ENGINE: # ESE_PRODUCT_SIGNATURE: # # As from DB2 V9.1 onwards DB2 install images # no longer uses the OS formats. Hence 'lslpp' # command can't be used to query DB2 installation. # # Arguments: n/a # # Returns: n/a # /usr/bin/lslpp -l 'db2*.db2.engn' 1>/dev/null 2>&1 [[ $? == 0 ]] && { echo "BASE_DB2_ENGINE:$(/usr/bin/lslpp -Lc 'db2*.db2.engn' | grep -v "#" | cut -d ':' -f 3)" echo "ESE_PRODUCT_SIGNATURE:$(/usr/bin/lslpp -Lc 'db2*.essg' | grep -v "#" | cut -d ':' -f 3)" } || { typeset CLIENT_PATH typeset BASE_PATH CLIENT_PATH="/usr/local/bin" BASE_PATH=$($CLIENT_PATH/db2ls -c -a 2>/dev/null | grep -v "#" | cut -d ':' -f 1) # : As from DB2 V9.1 onwards DB2 install images : no longer uses the OS formats. Hence "lslpp" : command cannot be used to query DB2 installation. # echo "BASE_DB2_ENGINE:$($CLIENT_PATH/db2ls -c -a -q -b "$BASE_PATH" -f "BASE_DB2_ENGINE" 2>/dev/null | \ grep -v "#" | cut -d ':' -f 2)" echo "ESE_PRODUCT_SIGNATURE:$($CLIENT_PATH/db2ls -c -a -q -b "$BASE_PATH" -f "ESE_PRODUCT_SIGNATURE" 2>/dev/null | \ grep -v "#" | cut -d ':' -f 2)" } / kꮳ$o@.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/db2/sbin/db2_xutilsr_c@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/sbin/db2_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/db2/sbin/db2_xutils.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM #---------------------------------------------------------------------- # # Function: listInstances_DB2_NON_DPF_SINGLE # # Description: Lists the instances for the db2 component # # Arcguments: componentid , nodes # # output: list of instances in xml format # #---------------------------------------------------------------------- function listInstances_DB2_NON_DPF_SINGLE { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # : discover the list of instances # /usr/es/sbin/cluster/sa/db2/sbin/cl_db2smquery -L -n "$nodes" > /usr/es/sbin/cluster/etc/sa_inst.x filterinst_XML < /usr/es/sbin/cluster/etc/sa_inst.x KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #---------------------------------------------------------------------- # # Function: listEnv_DB2 # # Description: ENV variable DSE_INSTALL_DIR needed to disover the DB2 # # Arcguments: none # # output: prints the env info in xml format # #---------------------------------------------------------------------- function listEnv_DB2 { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x print_start_tag ENVS print_XML_comment "DSE_INSTALL_DIR variable need to be setup to discover DB2" print_start_tag ENV "DSE_INSTALL_DIR" "DSE_INSTALL_DIR" "$DSE_INSTALL_DIR" print_end_tag ENV print_end_tag ENVS KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------------------------------------------------------- # # Function: listProps_DB2_NON_DPF_SINGLE # # Description: List properties for the DB2_NON_DPF_SINGLE component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Application Name [DB2_Instance_db2inst1] #* DB2 Instance Owning Node [Node1] #* Takeover Node(s) [ ] #* DB2 Instance Name db2inst1 #* DB2 Instance Database to Monitor + #* Service IP Label [] + #---------------------------------------------------------------------------- function listProps_DB2_NON_DPF_SINGLE { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset primary_val typeset takeover_nodes_val typeset applicationname_val typeset serviceip_val typeset Service_Interface_picklist typeset primary_val_list typeset takeover_nodes_val_list typeset inst_names_list # : Discover the possible property values # /usr/es/sbin/cluster/sa/db2/sbin/cl_db2smquery -D single -n "$NODES" -i "$INSTANCE_NAME" | tail -1 > /usr/es/sbin/cluster/etc/sa_inst.x while IFS=: read primary takeover_nodes applicationname do primary_val="${primary:-}" takeover_nodes_val="${takeover_nodes:-}" applicationname_val="${applicationname:-}" done < /usr/es/sbin/cluster/etc/sa_inst.x #serive ip pick list Service_Interface_picklist=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') # : Discover the Primary node # primary_val_list=$(/usr/es/sbin/cluster/utilities/clvt query node | tr '\n' ',' ) primary_val_list=${primary_val_list%,} # : Discover the takeover node list # takovernodes_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | tr '\n' ',' ) takovernodes_val_list=${takovernodes_val_list%,} # : discover the instances list # inst_names_list=$(/usr/es/sbin/cluster/sa/db2/sbin/cl_db2smdisc -i | tr '\n' ',' ) inst_names_list=${inst_names_list%,} inst_to_monitor_list=$(/usr/es/sbin/cluster/sa/db2/sbin/cl_db2smdisc -d | grep -v "^#" | awk ' { print $1 }' ) inst_to_monitor_list=$(echo $inst_to_monitor_list | tr ' ' ',' ) print_start_tag PROPERTIES #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" #* Application Name print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$applicationname_val" "" "" "" \ "-A" "string" "true" "true" \ "false" "true" "" "db2sa.cat,20,31" print_end_tag PROPERTY #* DB2 Instance Owning Node print_start_tag PROPERTY "2" "DBS_INST_OWN_NODE" "DB2 Instance Owning Node" "" \ "$primary_val" "$primary_val_list" "" "" \ "-o" "string" "true" "true" \ "true" "true" "" "db2sa.cat,20,23" print_end_tag PROPERTY #* Takeover Node(s) print_start_tag PROPERTY "3" "TAKEOVER_NODES" "Takeover Node(s)" "" \ "$takovernodes_val" "$takovernodes_val_list" "" "" \ "-n" "string" "true" "true" \ "true" "true" "" "db2sa.cat,20,24" print_end_tag PROPERTY #* DB2 Instance Name print_start_tag PROPERTY "4" "INST_NAME" "DB2 Instance Name" "" \ "$INSTANCE_NAME" "$inst_name_list" "" "" \ "-i" "string" "true" "true" \ "true" "true" "" "db2sa.cat,20,18" print_end_tag PROPERTY #* DB2 Instance Database to MonitorQ print_start_tag PROPERTY "5" "INST_TO_MONITOR" "DB2 Instance Database to Monitor" "" \ "" "$inst_to_monitor_list" "" "" \ "-d" "string" "true" "true" \ "false" "true" "" "db2sa.cat,20,19" print_end_tag PROPERTY #* Service IP Label print_start_tag PROPERTY "6" "SERVICEIP" "Service IP Label" "" \ "" "$Service_Interface_picklist" "" "" \ "-l" "string" "true" "true" \ "false" "true" "" "db2sa.cat,20,20" print_end_tag PROPERTY print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/db2/sbin/cl_db2preimport -C 'DB2_NON_DPF_SINGLE' -T" print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------- # MAIN STARTS HERE #--------------------- db2_xutils=( typeset env_func="listEnv_DB2" typeset inst_func="listInstances_DB2_NON_DPF_SINGLE" typeset prop_func="listProps_DB2_NON_DPF_SINGLE" ) ypeset k?$o.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/db2/cat/cl_db2discoveryllector# @(#)86 1.2 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2discovery.sh, hacmp.assist, 61haes_r714 3/3/05 13:00:06 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2discovery.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG KLIB_MSGCATALOG="db2sa.cat" KLIB_MSGSET=30 KLIB_OUTPUT_CONSOLE=false KLIB_DEFAULT_LOGFILE=/var/hacmp/log/db2sa.log KLIB_HACMPLOG_ENTRY=db2sa.log KLIB_OUTPUT_CONSOLE=false typeset -A MSG MSG[1]="WARNING: The environment variable ARCHIVE_LOG is not set for DB2 instance\n\ %s and database %s. This environment variable is required when the RETAIN_LOG value\n\ is set to RECOVERY and the USEREXIT function is enabled.\n\n\ Please set the ARCHIVE_LOG environment variable and re-run discovery." MSG[2]="Checking tablespace path: %s in database %s for shared volume groups.\n"  k$o.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/db2/cat/cl_db2nodevery# @(#)88 1.2 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2node.sh, hacmp.assist, 61haes_r714 3/3/05 13:00:36 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2node.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG KLIB_MSGCATALOG="db2sa.cat" KLIB_MSGSET=40 KLIB_OUTPUT_CONSOLE=false KLIB_DEFAULT_LOGFILE=/var/hacmp/log/db2sa.log KLIB_HACMPLOG_ENTRY=db2sa.log KLIB_OUTPUT_CONSOLE=false typeset -A MSG MSG[1]="Usage: %s -g ResourceGroup [-a|-r] -n Node\n" MSG[2]="ERROR: Please specify a node to add to resource group: %s\n" MSG[3]="ERROR: Node %s already participates in resource group: %s\n\ Please add a node that does not participate in this resource group.\n" MSG[4]="Running Discovery using communication path: %s\n" MSG[5]="ERROR: Unable to add a node using communication path: %s to the HACMP cluster.\n\ The specified node will not be added to DB2 instance resource group: %s\n\ \n\ Please check the communication path between the local node and %s then\n\ perform the add a node.\n" MSG[6]="ERROR: Unable to add node: %s to resource group: %s\n\ Please check to ensure the node is defined to HACMP, and that the\n\ specfied resource group exists.\n" MSG[7]="Successfully added node: %s to resource group: %s\n" MSG[8]="ERROR: Please specify a node to remove from resource group: %s\n" MSG[9]="ERROR: Resource group: %s is not defined in the local\n\ cluster configuration.\n" MSG[10]="Successfully removed node: %s from resource group: %s\n" / k8$o.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/db2/cat/cl_db2preimportllector# @(#)90 1.6 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2preimport.sh, hacmp.assist.db2, 61haes_r714 6/4/08 07:56:15 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2preimport.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG KLIB_MSGCATALOG="db2sa.cat" KLIB_MSGSET=50 KLIB_OUTPUT_CONSOLE=false KLIB_DEFAULT_LOGFILE=/var/hacmp/log/db2sa.log KLIB_HACMPLOG_ENTRY=db2sa.log KLIB_OUTPUT_CONSOLE=false typeset -A MSG MSG[1]="\nERROR: Unable to find a network for service IP label: %s\n" MSG[2]="\nUsing HACMP network: %s for the specified aliased service IP label: %s\n" MSG[3]="\nPerforming discovery on takeover node(s): %s: " MSG[4]="\nERROR: Service IP label: %s is not resolveable on the local\n\ node.\n\ Please check /etc/resolv.conf for nameserver issues, and /etc/hosts to\n\ ensure the service IP label can be resolved from the local node.\n" MSG[5]="\nERROR: DB2 Instance: %s is configured as a partitioned instance.\n\ The HACMP DB2 UDB Smart Assistant can only add non-partitioned instances to\n\ the cluster configuration.\n\ Please select a DB2 UDB non-partitioned instance.\n" MSG[6]="\nChecking DB2 UDB Instance: %s type: " MSG[7]="\nChecking service IP label: %s can be resolved on the local node: " MSG[8]="\nChecking DB2 instance volume group: %s is accessible from all takeover nodes: " MSG[9]="\nERROR: The DB2 UDB instance home volume group could not be\n\ determined during HACMP instance discovery.\n\ \n\ Please check to ensure the volume group is varied on, and the instance home\n\ directory filesystem is mounted.\n" MSG[10]="\nERROR: The DB2 UDB volume group: %s accessible on node: %s is not\n\ accessible on node: %s\n\ \n\ Please ensure the appropriate PVIDs for this volume group are shared across all\n\ the nodes that will takeover for DB2 instance: %s.\n" MSG[11]="\nERROR: The specified service IP label: %s is configured as an\n\ IP via replacement service. DB2 UDB Smart Assistant only allows aliased\n\ service IP labels.\n\ \n\ Please specify a service IP label that is configured as an aliased service.\n" MSG[12]="\nERROR: Unable to discover the takeover node(s): %s\n\ \n\ Please check the communication paths between the local node and the takeover\n\ node(s).\n" MSG[13]="\nPerforming pre-verification of the DB2 UDB instance: %s\n\ on cluster nodes: %s\n\n" MSG[14]="\nPre-verification completed successfully.\n" MSG[15]="\nChecking databases in instance: %s with USEREXIT enabled: " MSG[16]="\nERROR: The environment variables ARCHIVE_PATH, RETRIEVE_PATH and AUDIT_ERROR_PATH\n\ are not set for DB2 instance: %s and database: %s in the instance db2profile\n\ or userprofile files. One or more of these environment variables are required when\n\ the LOGRETAIN value is set to RECOVERY and the USEREXIT function is enabled.\n\ \n\ Please set the ARCHIVE_PATH, RETRIEVE_PATH and AUDIT_ERROR_PATH variables\n\ in either db2profile or userprofile and re-run discovery.\n" MSG[17]="\nValidating the DB2 instance: %s contains the selected database: %s: " MSG[18]="ERROR: The DB2 database selected: %s does not exist in the DB2 instance: %s\n\ Please select a DB2 database that exists in the selected instance.\n" MSG[19]="\nERROR: The DB2 instance selected: %s is already defined to the HACMP\n\ cluster configuration in resource group: %s.\n" MSG[20]="\nERROR: The DB2 instance: %s shares volume group(s):\n\ %s\n\ with DB2 instance: %s\n\ \n\ DB2 UDB instances must use different volume groups for each DB2 instance, this includes\n\ the archive log, overflow log, instance home volume group, retrieve log, and all tablespaces\n\ paths must exist volume groups that are separate from all other DB2 instances.\n" MSG[21]="\nVerifying the DB2 instance shared volume groups do not contain other instances: " MSG[22]="\nVerifying all DB2 instance volume groups are non-concurrent: " MSG[23]="\nERROR: The DB2 UDB instance: %s contains concurrent VGs:\n\ \n\ %s\n\ \n\ The use of concurrent volume groups in a DB2 UDB instance may result in\n\ data loss if another node in the HACMP cluster varies on the volume group\n\ in concurrent mode. It is advised that ONLY non-concurrent VGs be used\n\ in DB2 instances.\n" MSG[24]="\nERROR: The same service label: %s cannot be used for both DB2\n\ instance: %s and DB2 instance: %s\n\ Please choose different service IP labels for each selected DB2 instance.\n" MSG[25]="\nERROR: The same DB2 instance: %s was selected twice for mutual takeover.\n\ Please choose two separate instances for mutual takeover.\n" MSG[26]="\nWARNING: The DB2 instace: %s was inactive during discovery, the only\n\ volume group discovered was volume group: %s.\n\ \n\ If there are other volume groups associated with this instance for tablespaces,\n\ archive log files, or other instance components then please either add these\n\ volume groups to the resource group configuration, or remove the instance\n\ resource group and re-run discovery with the DB2 instance active.\n" MSG[27]="\nWARNING: The DB2 instance: %s home directory is on %s, which is not\n\ shared volume group. Please make sure instance home directory is configured\n\ and available on other nodes.\n" MSG[100]="PASS\n" MSG[200]="FAILED\n" ="\nChe k$o .םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/db2/cat/cl_db2smaddort# @(#)92 1.6 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2smadd.sh, hacmp.assist, 61haes_r714 2/21/08 13:49:10 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2smadd.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG KLIB_MSGCATALOG="db2sa.cat" KLIB_OUTPUT_CONSOLE=false KLIB_MSGSET=60 KLIB_DEFAULT_LOGFILE=/var/hacmp/log/db2sa.log KLIB_HACMPLOG_ENTRY=db2sa.log KLIB_OUTPUT_CONSOLE=false typeset -A MSG MSG[1]="ERROR: Please specify exactly %s node(s).\n" MSG[2]="ERROR: Please specify at least %s nodes and at most %s nodes.\n\ Please re-enter the list of nodes or communication interfaces.\n" MSG[3]="ERROR: Unable to add node(s): %s to the cluster configuration.\n\ Please check the communication paths to used to ensure they are resolveable\n\ addresses.\n" MSG[4]="ERROR: No DB2 instances were discovered, please ensure the DB2 instance\n\ home directory is mounted on one of the specified nodes prior to running\n\ discovery." MSG[5]="ERROR: The version of DB2 installed across the cluster is not\n\ at the same level on all cluster nodes. Please upgrade nodes running\n\ at a downleveled version of DB2 to the supported level of\n\ version 8.1 or 8.2.\n" MSG[6]="ERROR: Unable to discover DB2 UDB instances on node(s): %s\n\ Please ensure that DB2 UDB instances have the instance home\n\ filesystem mounted on one of the specified nodes. Also ensure\n\ that the instance is installed directly in the instance owner's\n\ home directory. Discovery must find the directory\n\ HOME/ and the file HOME/sqllib/db2profile, where\n\ HOME is the instance owner's home directory. \n" MSG[7]="ERROR: An insufficient number of DB2 instances were discovered\n\ to perform mutual takeover.\n\ \n\ Please check to ensure all available DB2 instances have the instance\n\ home filesystem mounted on one of the specified nodes.\n" MSG[8]="Note: Please ensure that all DB2 UDB instance owners home filesystem are\n\ mounted prior to performing discovery, and if possible the instance\n\ should be active. If the instance filesystem is not mounted, then the instance\n\ will not be discovered.\n\ \n\ Performing DB2 UDB discovery on node(s): %s\n\ Please wait while discovery executes" MSG[9]="Discovered instance(s): %s (%s) on node(s): %s\n" MSG[10]="ERROR: Unable to communicate with node: %s\n\ Please check the communication path from the local node to the specified node.\n\ Also check to ensure the clcomdES subsystem is properly running by executing\n\ the command 'lssrc -s clcomdES' on the specified node.\n" MSG[11]="ERROR: Insufficient space on filesystem: %s. Currently there is %s MB available.\n\ \n\ Please ensure at least 4MB of space is available on each of the following\n\ filesystems /tmp, /var, /usr before performing this command.\n" MSG[12]="ERROR: There are no cluster nodes defined to HACMP.\n\ Please add one or more nodes prior to invoking the DB2 UDB discovery\n\ component.\n" over kL$o.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/db2/cat/cl_db2smdiscrt# @(#)94 1.2 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2smdisc.sh, hacmp.assist, 61haes_r714 3/3/05 13:02:21 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2smdisc.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG KLIB_MSGCATALOG="db2sa.cat" KLIB_MSGSET=70 KLIB_OUTPUT_CONSOLE=false KLIB_DEFAULT_LOGFILE=/var/hacmp/log/db2sa.log KLIB_HACMPLOG_ENTRY=db2sa.log KLIB_OUTPUT_CONSOLE=false typeset -A MSG MSG[1]="#\n# DB2 Instance\t\tResource Group Name\n#\n" MSG[2]="#\n# Databases available in DB2 Instance: %s\n#\n" MSG[3]="#\n# Unable to determine available databases for instance: %s\n\ # Please check that the home filesystem is mounted.\n#\n" MSG[4]="ERROR: Resource group: %s is not defined in the local\n\ cluster configuration.\n" MSG[5]="DB2 Instance Name:\t%s (%s)\n" MSG[6]="Datbases:\t%s\n" MSG[7]="Volume Groups:\t%s\n" MSG[8]="ERROR: There are no DB2 Smart Assistant created resource groups\n\ defined to HACMP.\n" scover kRR$o.םa՝a֝a&2vT./usr/es/sbin/cluster/sa/db2/cat/cl_db2testtool# @(#)96 1.2 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2testtool.sh, hacmp.assist, 61haes_r714 3/3/05 13:02:56 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/db2/cat/cl_db2testtool.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG KLIB_MSGCATALOG="db2sa.cat" KLIB_MSGSET=80 KLIB_OUTPUT_CONSOLE=false KLIB_DEFAULT_LOGFILE=/var/hacmp/log/db2sa.log KLIB_HACMPLOG_ENTRY=db2sa.log KLIB_OUTPUT_CONSOLE=false typeset -A MSG MSG[1]="Usage: %s -g ResourceGroup [-f filename to create]\n" MSG[2]="ERROR: Unable to determine the nodes associated with instance resource group: %s.\n\ \n\ Please check to ensure resource group: %s is properly configured with at least two nodes.\n" MSG[3]="ERROR: Unable to determine the DB2 UDB instance associated with resource group: %s.\n" MSG[4]="ERROR: Unable to determine the Application Server for DB2 UDB instance: %s\n\ configured as resource group: %s\n\ \n\ Please check to ensure the resource group: %s contains the application server\n\ created with the HACMP Smart Assistant for DB2.\n" MSG[5]="ERROR: Resource group: %s containing application server: %s\n\ does not have an associated start script.\n\ \n\ Please check to ensure the application start script the DB2 Smart Assistant\n\ created for this instance is configured as part of this application server.\n" MSG[6]="ERROR: The DB2 Metadata for resource group: %s and DB2 UDB instance: %s\n\ is corrupt.\n\ \n\ Please remove then re-add the DB2 UDB instance configuration using the DB2\n\ Smart Assistant.\n" MSG[7]="ERROR: The resource group: %s does not have a service IP label defined\n\ \n\ Please add a service IP label to the resource group, then re-run the DB2 UDB\n\ test tool.\n" to k$oh .םaX՝a֝a&h 2vT./usr/es/sbin/cluster/sa/db2/config/db2_config.xmlector  k$o$.םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/db2/config/db2_config.xsdector$$ Type> k`$oABםaBםa֝a&2vT./usr/es/lib/ksh93/db2aAA kn$oABםaBםa֝a&2vT./usr/es/lib/ksh93/db2/vgb2/conAA k^!o.םa՝a{֝a&2vT./usr/es/lib/ksh93/db2/vg/KLIB_DB2_VG_get_pvids#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/vg/KLIB_DB2_VG_get_pvids.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2013 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)78 1.5 src/43haes/lib/ksh93/db2/vg/KLIB_DB2_VG_get_pvids.sh, hacmp, 61haes_r714 6/13/13 08:28:36 # #=head1 NAME # # KLIB_DB2_VG_get_pvids - Get the list of PVIDs for a VG on a particular node # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # pvids=$(KLIB_DB2_VG_get_pvids "nodeA" "vg1") # #=head1 DESCRIPTION # # Get the list of pvids for a VG on a particular node # This function assumes the output of lspv_as_hash is sourced # #=head1 ARGUMENTS # # 1: [scalar] name of the node to get info from # 2: [scalar] volume group to get pvids # #=head1 RETURN # # echos list of pvids for vg # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_VG_get_pvids { . /usr/es/lib/ksh93/func_include typeset -A array typeset node=$1 typeset vg=$2 typeset pvid for pvid in ${AIX_DISKS[PVIDS_"$node"_"$vg"]}; do [[ $pvid != *([[:space:]]) ]] && array[$pvid]=$pvid done echo "${!array[*]}" } 9a-f]?: kY"o .םa՝a{֝a& 2vT./usr/es/lib/ksh93/db2/vg/KLIB_DB2_VG_get_state#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/vg/KLIB_DB2_VG_get_state.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)79 1.4 src/43haes/lib/ksh93/db2/vg/KLIB_DB2_VG_get_state.sh, hacmp, 61haes_r714 11/28/11 15:00:50 # #=head1 NAME # # KLIB_DB2_VG_get_state - Get the volume group state, active or inactive # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # state=$(KLIB_DB2_VG_get_state "nodeA" "vg1") # #=head1 DESCRIPTION # # Obtain the state of a volume group for a particular cluster node # and volume group using the discovery information gathered during # DB2 discovery. # # This function assumes the discovery information has already been # sourced into the local environment prior to invoking this function. # #=head1 ARGUMENTS # # 1: [scalar] node name of where to get state # 2: [scalar] name of the volume group # #=head1 RETURN # # 0 if the volume group state is obtained, active or inactive is # reported for the VG # 1 if the volume group state does not exist (nonexistant is reported) # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_VG_get_state { . /usr/es/lib/ksh93/func_include node=$1 vg=$2 if [[ -z ${AIX_DISKS[PVIDS_"$node"_"$vg"]} ]]; then echo "nonexistant" return 1 fi state=${AIX_DISKS[STATE_"$node"_"$vg"]} if [[ -z $state ]]; then echo "inactive" else echo $state fi return 0 } / kb #ow.םa՝a{֝a&w2vT./usr/es/lib/ksh93/db2/vg/KLIB_DB2_VG_get_vgse#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/vg/KLIB_DB2_VG_get_vgs.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)81 1.4 src/43haes/lib/ksh93/db2/vg/KLIB_DB2_VG_get_vgs.sh, hacmp, 61haes_r714 11/28/11 15:03:05 # #=head1 NAME # # KLIB_DB2_VG_get_vgs - Get a list of volume groups available for the specified node # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # vgs=$(KLIB_DB2_VG_get_vgs "nodeA") || { # echo "No volume groups configured on node: nodeA" # } # #=head1 DESCRIPTION # # Get a list of volume groups configured on the specified cluster node # #=head1 ARGUMENTS # # 1: [scalar] cluster node name # #=head1 RETURN # # 0: volume groups were found for the specified node # 1: no volume groups were found # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_VG_get_vgs { . /usr/es/lib/ksh93/func_include node=$1 lennode=${#node} found=1 ((lennode = $lennode + 7)) for key in ${!AIX_DISKS[*]}; do search=$( echo PVIDS_"$node"_ ) qvalue=${key:0:$lennode} if [[ "$qvalue" == "$search" ]]; then found=0 lenkey=${#key} OUTVG=${key:$lennode:$lenkey} if [[ -n $OUTVG && "$OUTVG" != "None" ]]; then echo $OUTVG fi fi done return $found } | k~$o .םa՝a{֝a& 2vT./usr/es/lib/ksh93/db2/vg/KLIB_DB2_VG_lspv_as_hashector#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/vg/KLIB_DB2_VG_lspv_as_hash.sh 1.8 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/lib/ksh93/db2/vg/KLIB_DB2_VG_lspv_as_hash.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # #=head1 NAME # # KLIB_DB2_VG_lspv_as_hash - Gather the local lspv information and generate a ksh93 # hash table to represent the local AIX disk configuration # #=head1 SYNOPSIS # # KLIB_DB2_VG_lspv_as_hash > vg_hash_table.sh # . vg_hash_table.sh # vgs=$(KLIB_DB2_VG_get_vgs "nodeA") # #=head1 DESCRIPTION # # Gathers the local lspv information and generates a ksh93 hash table # to represent the local AIX disk configuration # #=head1 ARGUMENTS # # None # #=head1 RETURN # # Output is a hash table that can be sourced via a ksh93 script # no return code # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_VG_lspv_as_hash { . /usr/es/lib/ksh93/func_include typeset -A VOLUME_GROUP_PVIDS typeset -A VOLUME_GROUP_STATES typeset -A VOLUME_GROUP_HDISKS typeset -A VOLUME_GROUP_CONCURRENT typeset concurrent RANDOM=$$ echo "AIX_DISKS_$RANDOM=( \\" lspv | while read hdisk pvid vg state; do concurrent= LC_ALL=C lsvg $vg 2>/dev/null | while IFS=':' read name value; do name=${name//[[:space:]]/} if [[ "$name" == "Concurrent" ]]; then echo $value | read value tmp concurrent=$value fi done 2>/dev/null VOLUME_GROUP_PVIDS[$vg]="${VOLUME_GROUP_PVIDS[$vg]} $pvid" VOLUME_GROUP_CONCURRENT[$vg]="$concurrent" if [[ -n $state ]]; then VOLUME_GROUP_STATES[$vg]="$state" fi VOLUME_GROUP_HDISKS[$vg]="${VOLUME_GROUP_HDISKS[$vg]} $hdisk" done for vg in ${!VOLUME_GROUP_PVIDS[*]}; do if [[ -n ${VOLUME_GROUP_CONCURRENT[$vg]} ]]; then echo "\t[CONCURRENT_""$vg""]=\"${VOLUME_GROUP_CONCURRENT[$vg]}\"" fi echo "\t[PVIDS_\"\$CLUSTER_NODE\"_$vg]=\"${VOLUME_GROUP_PVIDS[$vg]}\"" echo "\t[STATE_\"\$CLUSTER_NODE\"_$vg]=\"${VOLUME_GROUP_STATES[$vg]}\"" echo "\t[HDISKS_\"\$CLUSTER_NODE\"_$vg]=\"${VOLUME_GROUP_HDISKS[$vg]}\"" done echo ")" }  k%o.םa՝a{֝a&2vT./usr/es/lib/ksh93/db2/vg/KLIB_DB2_VG_node_pvid_compare#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/vg/KLIB_DB2_VG_node_pvid_compare.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)80 1.4 src/43haes/lib/ksh93/db2/vg/KLIB_DB2_VG_node_pvid_compare.sh, hacmp, 61haes_r714 11/28/11 15:02:07 # #=head1 NAME # # KLIB_DB2_VG_node_pvid_compare - Compare to nodes copies of a volume group # for differences in PVIDs # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # KLIB_DB2_VG_node_pvid_compare "nodeA" "nodeB" "vg1" # #=head1 DESCRIPTION # # Compare to nodes copies of a volume group for differences in PVIDs # #=head1 ARGUMENTS # # 1: [scalar] first node in comparison # 2: [scalar] second node in comparison # 3: [scalar] volume group name # #=head1 RETURN # # 0: volume group matches between the nodes (same set of pvids) # 1: volume group does not match # 2: neither node contains the specified volume group # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_VG_node_pvid_compare { . /usr/es/lib/ksh93/func_include typeset nodeA=$1 typeset nodeB=$2 typeset vg=$3 typeset pvidsA typeset pvidsB if [[ -z "${AIX_DISKS[*]}" ]]; then return 2 fi pvidsA=$(KLIB_DB2_VG_get_pvids $nodeA $vg) pvidsB=$(KLIB_DB2_VG_get_pvids $nodeB $vg) if [[ -z $pvidsA && -z $pvidsB ]]; then return 2 fi if [[ -z $pvidsA ]]; then pvidsA=$(KLIB_DB2_VG_get_pvids $nodeA "None") fi if [[ -z $pvidsB ]]; then pvidsB=$(KLIB_DB2_VG_get_pvids $nodeB "None") fi # Is the pvid list the same ? if [[ "$pvidsA" == "$pvidsB" ]]; then return 0 fi typeset a typeset b typeset a_count=0 typeset m_count=0 for a in $pvidsA; do (( a_count=$a_count+1 )) for b in $pvidsB; do if [[ "$a" == "$b" ]]; then (( m_count=$m_count+1 )) fi done done if (( $a_count == $m_count )); then return 0 fi # PVIDs don't match return 1 } a k_o.םa՝a{֝a&2vT./usr/es/lib/ksh93/db2/KLIB_DB2_add_instance_to_metadata#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/KLIB_DB2_add_instance_to_metadata.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/lib/ksh93/db2/KLIB_DB2_add_instance_to_metadata.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # #=head1 NAME # # KLIB_DB2_add_instance_to_metadata - Add the DB2 discovery data to the HACMPsa_metadata class # #=head1 SYNOPSIS # # KLIB_DB2_add_instance_to_metadata "db2inst1" || { # echo "ERROR: unable to add metadata!" # } # #=head1 DESCRIPTION # # Adds the HACMPsa_metadata fields from the db2.disc discovery file for # the specified instance # # The following fields are added to the metadata: # # HOME_FILESYSTEM - instance home filesystem # HOME_VOLUME_GROUP - instance home volume group # USER_NAME - instance user # GROUP_NAME - instance user parent group # UID - instance user UID # GID - instance user GID # # DASADM_USER - das administrator user name # DASADM_GROUP - das admin group (pgrp) # DASADM_UID - das admin uid # DASADM_GID - das admin gid # # FENCED_USER - fenced db2 user name # FENCED_GROUP # FENCED_UID # FENCED_GID # # DATABASES # #=head1 ARGUMENTS # # 1: [scalar] name of DB2 instance to add from discovery file # #=head1 RETURN # # 0: success, HACMPsa_metadata populated correctly # 1: failed, unable to populate HACMPsa_metadata # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_add_instance_to_metadata { . /usr/es/lib/ksh93/func_include typeset instance=$1 typeset -n appname=$2 if [[ -z $instance ]]; then return 1 fi typeset -A odm_fields # These are the ODM fields and mappings to the discovery content odm_fields=( \ [HOME_FILESYSTEM]="INSTHOME" [HOME_VOLUME_GROUP]="DB2HOME_VG" [USER_NAME]="INSTANCE_OWNER_USER" [GROUP_NAME]="INSTANCE_OWNER_GROUP" [UID]="INSTANCE_OWNER_UID" [GID]="INSTANCE_OWNER_GID" [DASADM_USER]="DASADM_USER" [DASADM_GROUP]="DASADM_GROUP" [DASADM_UID]="DASADM_UID" [DASADM_GID]="DASADM_GID" [FENCED_USER]="FENCED_USER" [FENCED_GROUP]="FENCED_GROUP" [FENCED_UID]="FENCED_UID" [FENCED_GID]="FENCED_GID" [DATABASES]="DATABASES" ) for name in ${!odm_fields[*]}; do # Add the database that user has selected. # DATABASE_NAME is exported by cl_db2import.sh if [ ${odm_fields[$name]} == "DATABASES" ]; then value=$DATABASE_NAME if [[ -z $DATABASE_NAME ]]; then KLIB_DB2_print_message 2 60 "INFO: Failed to read \"DATABASE_NAME\" variable.\n" value=$(KLIB_DB2_disc_get_instance_value $instance "${odm_fields[$name]}") fi else value=$(KLIB_DB2_disc_get_instance_value $instance "${odm_fields[$name]}") fi /usr/es/sbin/cluster/sa/sbin/claddsaapp \ -a "$appname" $name="$value" done return 0 } le kioP.םa՝a{֝a&P2vT./usr/es/lib/ksh93/db2/KLIB_DB2_disc_get_instance_value#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/KLIB_DB2_disc_get_instance_value.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)86 1.4 src/43haes/lib/ksh93/db2/KLIB_DB2_disc_get_instance_value.sh, hacmp, 61haes_r714 11/28/11 15:20:19 # #=head1 NAME # # KLIB_DB2_disc_get_instance_value - Get the DB2 instance discovery information out the # discovery source file # #=head1 SYNOPSIS # # #Gather the Db2 instance databases for DB2 instance: db2inst1 # # value=$(KLIB_DB2_disc_get_instance_value "db2inst1" "DATABASES") # #=head1 DESCRIPTION # # Obtains the DB2 instance discovery information from the hash array that exists in the # DB2 discovery source file, this function assumes that /usr/es/sbin/cluster/sa/db2/db2.disc # has already been sourced. # #=head1 ARGUMENTS # # 1: [scalar] name of DB2 instance to get information for # 2: [scalar] name of the hash key to retrieve data from # #=head1 RETURN # # echo's value of hash[$key] to stdout # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_disc_get_instance_value { . /usr/es/lib/ksh93/func_include typeset instance=$1 typeset value=$2 echo $(eval echo \${DB2_INSTANCE_$instance["$value"]}) }  k:om.םa՝a{֝a&m2vT./usr/es/lib/ksh93/db2/KLIB_DB2_disc_get_instancesalue#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/KLIB_DB2_disc_get_instances.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)94 1.3 src/43haes/lib/ksh93/db2/KLIB_DB2_disc_get_instances.sh, hacmp, 61haes_r714 11/28/11 14:55:54 # #=head1 NAME # # KLIB_DB2_disc_get_instances - Obtain a list of all of the instances discovered in db2.disc # #=head1 SYNOPSIS # # instances=$(KLIB_DB2_disc_get_instances) # #=head1 DESCRIPTION # # Obtain a list of all of the instances discovered in db2.disc # #=head1 ARGUMENTS # # None # #=head1 RETURN # # echo to stdout a list of discovered DB2 instances # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_disc_get_instances { echo $DB2_INSTANCES } #= k`o#.םa՝a{֝a&#2vT./usr/es/lib/ksh93/db2/KLIB_DB2_get_bin_dirtanc#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/KLIB_DB2_get_bin_dir.sh 1.7 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)87 1.7 src/43haes/lib/ksh93/db2/KLIB_DB2_get_bin_dir.sh, hacmp, 61haes_r714 11/28/11 15:21:21 # #=head1 NAME # # KLIB_DB2_get_bin_dir - Obtain the DB2 binary (/usr/opt/db2_08_01/bin) directory for the local node # #=head1 SYNOPSIS # # bindir=$(KLIB_DB2_get_bin_dir) # [[ -n $bindir ]] && PATH=$PATH:$bindir:$bindir/../instance/ # db2iset -i db2inst1 # #=head1 DESCRIPTION # # Obtain the DB2 binary (/usr/opt/db2_08_01/bin) directory for the local node # #=head1 ARGUMENTS # # None # #=head1 RETURN # # echos to stdout the bin directory for the local install of DB2 #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_get_bin_dir { . /usr/es/lib/ksh93/func_include # # Obtain the path to the db2 client installation (DB2 bin directory) # /usr/bin/lslpp -Lc 'db2*' 2>/dev/null 1>&2 if [[ $? == 0 ]]; then /usr/bin/lslpp -Lc 'db2*' 2>/dev/null | while IFS=: read image tmp version tmp; do if [[ ${image/*db2.client/found} == "found" ]]; then DB2_CLIENT_IMAGE=$image fi if [[ ${image/*db2.engn/found} == "found" ]]; then DB2_ENGN_IMAGE=$image fi done DB2_CLIENT_PATH=$(/usr/bin/lslpp -f $DB2_CLIENT_IMAGE | grep db2ilist | grep -v "\->" | head -n 1) DB2_CLIENT_PATH=${DB2_CLIENT_PATH/\/db2ilist/} # Strip the db2ilist command from the tailing end echo $DB2_CLIENT_PATH | read -r DB2_CLIENT_PATH # Strip whitespace echo $DB2_CLIENT_PATH else DB2_CLIENT_PATH=${DSE_INSTALL_DIR}/bin echo $DB2_CLIENT_PATH fi } /KLIB klo.םa՝a{֝a&2vT./usr/es/lib/ksh93/db2/KLIB_DB2_get_dasadm_groupsalue#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/lib/ksh93/db2/KLIB_DB2_get_dasadm_group.sh 1.8 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)95 1.8 src/43haes/lib/ksh93/db2/KLIB_DB2_get_dasadm_group.sh, hacmp, 61haes_r720, 1539B_hacmp720 9/11/15 13:57:27 # #=head1 NAME # # KLIB_DB2_get_dasadm_group - Get the DAS DB2 administrator group for the specified instance # #=head1 SYNOPSIS # # group=$(KLIB_DB2_get_dasadm_group "db2inst1") # #=head1 DESCRIPTION # # Get the DAS DB2 administrator group for the specified instance # #=head1 ARGUMENTS # # 1: [scalar] DB2 instance user owner # which may be different from the instance name # #=head1 RETURN # # 0: success, found the group # 1: failed, unable to determine the group # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_get_dasadm_group { . /usr/es/lib/ksh93/func_include user=$1 if [[ -z $user ]]; then return 1 fi LC_ALL=C /usr/bin/su - $user -c "db2 get admin cfg" | while IFS='=' read name value; do name=${name/ /} value=${value/ /} [[ "$name" && "$value" ]] && { short_name=${name/*\(/} short_name=${short_name/\)/} short_name=${short_name/ /} if [[ "$short_name" == "DASADM_GROUP" ]]; then echo $value return 0 fi } done return 1 } he  kꀽo4.םa՝a{֝a&42vT./usr/es/lib/ksh93/db2/KLIB_DB2_get_databasesup#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/KLIB_DB2_get_databases.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)85 1.4 src/43haes/lib/ksh93/db2/KLIB_DB2_get_databases.sh, hacmp, 61haes_r714 11/28/11 15:18:25 # #=head1 NAME # # KLIB_DB2_get_databases - obtain a list of available databases discovered # in db2.disc for all instances # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # databases=$(KLIB_DB2_get_databases) # #=head1 DESCRIPTION # # Obtain a list of available databases discovered in db2.disc for all instances # #=head1 ARGUMENTS # # None # #=head1 RETURN # # None # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_get_databases { . /usr/es/lib/ksh93/func_include for instance in $DB2_INSTANCES; do val=$(eval echo \${DB2_INSTANCE_$instance["DATABASES"]}) databases="$val $databases" done echo $databases } C_AL kJOo .םa՝a{֝a& 2vT./usr/es/lib/ksh93/db2/KLIB_DB2_get_db_cfgesup#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/lib/ksh93/db2/KLIB_DB2_get_db_cfg.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)77 1.6 src/43haes/lib/ksh93/db2/KLIB_DB2_get_db_cfg.sh, hacmp, 61haes_r720, 1539B_hacmp720 9/11/15 13:59:25 # #=head1 NAME # # KLIB_DB2_get_db_cfg - Get the database configuration for the specified instance/db # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # typeset -A DB_CFG # KLIB_DB2_get_db_cfg "SAMPLE" "db2inst1" DB_CFG || { # echo "FAILED to get SAMPLE database configuration." # } # #=head1 DESCRIPTION # # Get the database configuration for the specified instance / database by # running db2 get db cfg while connected to the database. The instance must be # running, and the database must be accessible at the time this command runs. # If neither of the above are true, then the DB configuration will not be # obtained for this instance. # # This function will su to the db2 instance owner to run the db2 command # and will connect to the DB2 instance to obtain the db configuration. # #=head1 ARGUMENTS # # 1: [scalar] name of the database to obtain configuration info on # 2: [scalar] name of the DB2 instance owner (user) to su to in order # to connect to the database # 3: [scalar] pass by reference, reference to hash table that will # contain the name / value pairs returned from running # db2 db get cfg # #=head1 RETURN # # None # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_get_db_cfg { . /usr/es/lib/ksh93/func_include typeset db=$1 typeset user=$2 typeset -n config=$3 typeset userhome=$(lsuser -a home $user) userhome=${userhome/*=/} DB2_SHELL_ENV=$(lsuser -a shell $user | awk -F = '{print $2}') (echo $DB2_SHELL_ENV | grep csh > /dev/null) && DB2_SHELL_ENV="csh" (echo $DB2_SHELL_ENV | grep ksh > /dev/null) && DB2_SHELL_ENV="ksh" if [[ "$DB2_SHELL_ENV" == "ksh" ]]; then /usr/bin/su $user -c ". $userhome/sqllib/db2profile && db2 connect to $db && db2 get db cfg && db2 terminate 2>/dev/null" | \ while IFS='=' read name value do name=${name//[[:space:]]/} value=${value//[[:space:]]/} if [[ "$name" == "Pathtologfiles" ]]; then name=" (LOGPATH) " fi [[ -n "$name" && -n "$value" ]] && { if [[ $name == *\([[:alnum:]]*\)* ]]; then short_name=${name/*\(/} short_name=${short_name/\)/} short_name=${short_name// /} [[ "$short_name" ]] && config["$short_name"]="$value" fi } done elif [[ "$DB2_SHELL_ENV" == "csh" ]]; then /usr/bin/su $user -c "source $userhome/sqllib/db2cshrc && db2 connect to $db && db2 get db cfg && db2 terminate 2>/dev/null" | \ while IFS='=' read name value do name=${name//[[:space:]]/} value=${value//[[:space:]]/} if [[ "$name" == "Pathtologfiles" ]]; then name=" (LOGPATH) " fi [[ -n "$name" && -n "$value" ]] && { if [[ $name == *\([[:alnum:]]*\)* ]]; then short_name=${name/*\(/} short_name=${short_name/\)/} short_name=${short_name// /} [[ "$short_name" ]] && config["$short_name"]="$value" fi } done fi }  kBo .םa՝a|֝a& 2vT./usr/es/lib/ksh93/db2/KLIB_DB2_get_dbm_cfgsup#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/lib/ksh93/db2/KLIB_DB2_get_dbm_cfg.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)83 1.6 src/43haes/lib/ksh93/db2/KLIB_DB2_get_dbm_cfg.sh, hacmp, 61haes_r720, 1539B_hacmp720 9/11/15 14:08:33 # #=head1 NAME # # KLIB_DB2_get_dbm_cfg - Get the database manager configuration, # store in a hash table # #=head1 SYNOPSIS # # unset DBM_CFG # typeset -A DBM_CFG # KLIB_DB2_get_dbm_cfg "db2inst1" DBM_CFG # #=head1 DESCRIPTION # # This function obtains the DB2 configuration by running db2 get dbm cfg, # which will obtain information regarding the instance configuration. # This command must su to the instance owner user to obtain the needed # information, and will source the db2profile environment variable script # #=head1 ARGUMENTS # # 1: [scalar] instance owner (user) # 2: [by ref] hash array of DBM configuration # #=head1 RETURN # # None, output is provided by the pass by ref hash table 2nd argument # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_get_dbm_cfg { . /usr/es/lib/ksh93/func_include typeset user=$1 typeset -n config=$2 typeset userhome=$(lsuser -a home $user) userhome=${userhome/*=/} DB2_SHELL_ENV=$(lsuser -a shell $user | awk -F '=' '{print $2}') (echo $DB2_SHELL_ENV | grep csh > /dev/null) && DB2_SHELL_ENV="csh" (echo $DB2_SHELL_ENV | grep ksh > /dev/null) && DB2_SHELL_ENV="ksh" if [[ "$DB2_SHELL_ENV" == "ksh" ]]; then /usr/bin/su $user -c ". $userhome/sqllib/db2profile && db2 get dbm cfg 2>/dev/null" | \ while IFS='=' read name value do name=${name/ /} value=${value/ /} [[ -n "$name" && -n "$value" ]] && { if [[ $name == *\([[:alnum:]]*\)* ]]; then short_name=${name/*\(/} short_name=${short_name/\)/} short_name=${short_name// /} [[ "$short_name" ]] && config["$short_name"]="$value" fi } done elif [[ "$DB2_SHELL_ENV" == "csh" ]]; then /usr/bin/su $user -c "source $userhome/sqllib/db2cshrc && db2 get dbm cfg 2>/dev/null" | \ while IFS='=' read name value do name=${name/ /} value=${value/ /} [[ -n "$name" && -n "$value" ]] && { if [[ $name == *\([[:alnum:]]*\)* ]]; then short_name=${name/*\(/} short_name=${short_name/\)/} short_name=${short_name// /} [[ "$short_name" ]] && config["$short_name"]="$value" fi } done fi } "  kBeo.םa՝a|֝a&2vT./usr/es/lib/ksh93/db2/KLIB_DB2_get_env_arrayup#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/KLIB_DB2_get_env_array.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)88 1.4 src/43haes/lib/ksh93/db2/KLIB_DB2_get_env_array.sh, hacmp, 61haes_r714 11/28/11 15:22:29 # #=head1 NAME # # KLIB_DB2_get_env_array - read the DB2 instance environment variables # into a hash # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # unset INST_ENVIRONMENT # typeset -A INST_ENVIRONMENT # KLIB_DB2_get_env_array "db2inst1" INST_ENVIRONMENT || { # echo "ERROR: Unable to obtain instance environment data." # } # #=head1 DESCRIPTION # # This function reads the DB2 instance environment variables # from the discovery file and returns the results in a # hash array. # #=head1 ARGUMENTS # # 1: [scalar] DB2 instance name # 2: [by ref] hash of environment variables # #=head1 RETURN # # 0: success, DB2 instance environment was stored in the array # 1: failed # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_get_env_array { . /usr/es/lib/ksh93/func_include instance=$1 typeset -n array=$2 typeset -n this="DB2_INSTANCE_$instance" for envvar in ${!this[*]}; do if [[ ${envvar:0:3} == "ENV" ]]; then value=${this[$envvar]} name=${envvar/ENVGLOBAL_/} name=${name/ENVINST_/} array[$name]=$value fi done return 0 }  kXoj .םa՝a|֝a&j 2vT./usr/es/lib/ksh93/db2/KLIB_DB2_get_instance_databases#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/lib/ksh93/db2/KLIB_DB2_get_instance_databases.sh 1.9 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)84 1.9 src/43haes/lib/ksh93/db2/KLIB_DB2_get_instance_databases.sh, hacmp, 61haes_r720, 1539B_hacmp720 9/11/15 14:16:42 # #=head1 NAME # # KLIB_DB2_get_instance_databases - List all of the databases accessible # for the specified DB2 instance # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # databases=$(KLIB_DB2_get_instance_databases "db2inst1") # #=head1 DESCRIPTION # # This function connects to the DB2 instance and queries for a list of all # configured DB2 instances by running "db2 list database directory" # #=head1 ARGUMENTS # # 1: [scalar] name of the DB2 instance # #=head1 RETURN # # None # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_get_instance_databases { . /usr/es/lib/ksh93/func_include instance_owner=$1 DB2_SHELL_ENV=$(lsuser -a shell $instance_owner | awk -F = '{print $2}') (echo $DB2_SHELL_ENV | grep csh > /dev/null) && { DB2_SHELL_ENV="csh" } (echo $DB2_SHELL_ENV | grep ksh > /dev/null) && { DB2_SHELL_ENV="ksh" } [[ "$DB2_SHELL_ENV" == "ksh" ]] && { /usr/bin/su - $instance_owner -c "LC_ALL=C db2 list database directory" | while IFS='=' read name value; do name=$(eval echo $name) value=$(eval echo $value) if [[ "$name" == "Database name" ]]; then databases="$value $databases" fi done } [[ "$DB2_SHELL_ENV" == "csh" ]] && { /usr/bin/su - $instance_owner -c "set LC_ALL=C; db2 list database directory" | while IFS='=' read name value; do name=$(eval echo $name) value=$(eval echo $value) if [[ "$name" == "Database name" ]]; then databases="$value $databases" fi done } echo $databases }  k~oH .םa՝a|֝a&H 2vT./usr/es/lib/ksh93/db2/KLIB_DB2_get_instance_typeases#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/KLIB_DB2_get_instance_type.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)90 1.4 src/43haes/lib/ksh93/db2/KLIB_DB2_get_instance_type.sh, hacmp, 61haes_r714 11/28/11 15:24:59 # #=head1 NAME # # KLIB_DB2_get_instance_type - Get the DB2 instance type DPF (partitioned) or # UDB non-partitioned # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # inst_type=$(KLIB_DB2_get_instance_type "db2inst1") # #=head1 DESCRIPTION # # Get the instance type for the DB2 instance installed. This function # reads the db2nodes.cfg to determine what type of DB2 instance is available # #=head1 ARGUMENTS # # 1: [scalar] path to the instance home directory # #=head1 RETURN # 0: if the instance type could be determined # 1: if the instance type could not be determined # # echos either "DPF" for partition environments or just "UDB" # for single partition environment # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_get_instance_type { . /usr/es/lib/ksh93/func_include typeset insthome=$1 typeset dbpartitionnum typeset iplabel typeset localport typeset netname typeset resourcename typeset filename filename="$insthome/sqllib/db2nodes.cfg" if [[ ! -f $filename ]]; then return 1 fi while read dbpartitionnum iplabel localport netname resourcename; do # strip out anything that isn't a digit dbpartitionnum=${dbpartitionnum//[![:digit:]]/} localport=${localport//[![:digit:]]/} if [[ -n $dbpartitionnum ]]; then if (( $dbpartitionnum > 0 )); then echo "DPF" return 0 fi fi done < $filename echo "UDB" return 0 }  kpo .םa՝a|֝a& 2vT./usr/es/lib/ksh93/db2/KLIB_DB2_get_tablespace_idsses#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/lib/ksh93/db2/KLIB_DB2_get_tablespace_ids.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)91 1.6 src/43haes/lib/ksh93/db2/KLIB_DB2_get_tablespace_ids.sh, hacmp, 61haes_r720, 1539B_hacmp720 9/11/15 14:18:53 # #=head1 NAME # # KLIB_DB2_get_tablespace_ids - Get a list of the tablespace IDs for the # specified DB2 datbase # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # ids=$(KLIB_DB2_get_tablespace_ids "db2inst1" "SAMPLE") # #=head1 DESCRIPTION # # Obtains a list of the tablespace identifiers. This function runs the # command db2 list tablespaces and records the list of ids that are # accessible at the time this function is invoked. # #=head1 ARGUMENTS # # 1: [scalar] DB2 instance owner (user) # 2: [scalar] DB2 database name # #=head1 RETURN # # echos the list of identifers to stdout # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_get_tablespace_ids { . /usr/es/lib/ksh93/func_include typeset user=$1 typeset db=$2 typeset userhome=$(lsuser -a home $user) userhome=${userhome/*=/} DB2_SHELL_ENV=$(lsuser -a shell $user | awk -F = '{print $2}') (echo $DB2_SHELL_ENV | grep csh > /dev/null) && DB2_SHELL_ENV="csh" (echo $DB2_SHELL_ENV | grep ksh > /dev/null) && DB2_SHELL_ENV="ksh" if [[ "$DB2_SHELL_ENV" == "ksh" ]]; then /usr/bin/su $user -c ". $userhome/sqllib/db2profile && db2 connect to $db && db2 list tablespaces && db2 terminate" | while IFS='=' read name value; do name=${name//[[:space:]]/} if [[ "$name" == "TablespaceID" ]]; then echo $value fi done elif [[ "$DB2_SHELL_ENV" == "csh" ]]; then /usr/bin/su $user -c "source $userhome/sqllib/db2cshrc && db2 connect to $db && db2 list tablespaces && db2 terminate" | while IFS='=' read name value; do name=${name//[[:space:]]/} if [[ "$name" == "TablespaceID" ]]; then echo $value fi done fi }  k'o .םa՝a|֝a& 2vT./usr/es/lib/ksh93/db2/KLIB_DB2_get_tablespace_pathss#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/lib/ksh93/db2/KLIB_DB2_get_tablespace_paths.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)92 1.6 src/43haes/lib/ksh93/db2/KLIB_DB2_get_tablespace_paths.sh, hacmp, 61haes_r720, 1539B_hacmp720 9/11/15 14:28:00 # #=head1 NAME # # KLIB_DB2_get_tablespace_paths - Get the list of paths for the specified # DB2 database # #=head1 SYNOPSIS # # . /usr/es/sbin/cluster/sa/db2/etc/db2.disc # paths=$(KLIB_DB2_get_tablespace_paths "db2inst1" "SAMPLE") # for data in $paths; do # id=${data/:*/} # path=${data/*:/} # echo "id=$id, path=$path" # done # #=head1 DESCRIPTION # # Get the tablespace identifiers and paths associated with each of those # identifiers # #=head1 ARGUMENTS # # 1: [scalar] user name for db2 instance owner # 2: [scalar] DB2 database name # #=head1 RETURN # # echo to stdout the id:path of each of the tablespaces associated # with the database # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_get_tablespace_paths { . /usr/es/lib/ksh93/func_include typeset user=$1 typeset db=$2 typeset tmpfile="/tmp/db2_""$db""_$$" typeset ts_path typeset name typeset value typeset userhome=$(lsuser -a home $user) userhome=${userhome/*=/} echo "CONNECT TO $db" >> $tmpfile for tablespace_id in $(KLIB_DB2_get_tablespace_ids $user $db); do echo "LIST TABLESPACE CONTAINERS FOR $tablespace_id SHOW DETAIL" >> $tmpfile done echo "TERMINATE" >> $tmpfile chmod gou+r $tmpfile DB2_SHELL_ENV=$(lsuser -a shell $user | awk -F = '{print $2}') (echo $DB2_SHELL_ENV | grep csh > /dev/null) && DB2_SHELL_ENV="csh" (echo $DB2_SHELL_ENV | grep ksh > /dev/null) && DB2_SHELL_ENV="ksh" if [[ "$DB2_SHELL_ENV" == "ksh" ]]; then /usr/bin/su $user -c ". $userhome/sqllib/db2profile && db2 -f $tmpfile" | while IFS='=' read name value; do name=${name//[[:space:]]/} if [[ "$name" == "Name" ]]; then value=${value//[[:space:]]/} ts_path=$value fi if [[ "$name" == "Type" ]]; then value=${value//[[:space:]]/} echo $value:$ts_path ts_path= fi done elif [[ "$DB2_SHELL_ENV" == "csh" ]]; then /usr/bin/su $user -c "source $userhome/sqllib/db2cshrc && db2 -f $tmpfile" | while IFS='=' read name value; do name=${name//[[:space:]]/} if [[ "$name" == "Name" ]]; then value=${value//[[:space:]]/} ts_path=$value fi if [[ "$name" == "Type" ]]; then value=${value//[[:space:]]/} echo $value:$ts_path ts_path= fi done fi rm -f $tmpfile } }  kv/on .םa՝a|֝a&n 2vT./usr/es/lib/ksh93/db2/KLIB_DB2_print_message_p#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/KLIB_DB2_print_message.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)93 1.3 src/43haes/lib/ksh93/db2/KLIB_DB2_print_message.sh, hacmp, 61haes_r714 11/28/11 14:55:00 # #=head1 NAME # # KLIB_DB2_print_message - print a message to the console and to db2sa.log # #=head1 SYNOPSIS # # KLIB_DB2_print_message SetNumber MessageNumber "Message" [Arguments] # #=head1 DESCRIPTION # # Print a message to the console and to db2sa.log # # Global Variables: # DB2SACAT (required) # DB2SALOG (required if DEBUG=1) # VERBOSE # DEBUG # VERBOSE_LOGGING # #=head1 ARGUMENTS # # 1: [scalar] SetNumber: dspmsg SetNumber (-s) # 2: [scalar] MessageNumber: dspmsg MessageNumber # 3: [scalar] Message: The message to be printed/logged. # 4+ [scalar] Arguments: dspmsg Arguments # # #=head1 RETURN # # 0: on SUCCESS # 1: on FAILURE # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_print_message { set +u [[ "$VERBOSE_LOGGING" = "high" ]] && set -x set -u # Checking for required environments. env | egrep DB2SACAT > /dev/null 2>&1 || return 1 if [[ $DEBUG -eq 1 ]]; then env | egrep DB2SALOG > /dev/null 2>&1 || return 1 fi [[ $# -lt 3 ]] && return 1 # See if we have any Arguments passed to dspmsg ARGS=0 [[ $# -gt 3 ]] && ARGS=1 SET_NUMBER=$1 MESSAGE_NUMBER=$2 MESSAGE="$3" shift; shift; shift # Skip to Arguments if [[ $DEBUG -eq 1 ]]; then DATE=`date '+m%d12/15/09M%S'` print -n "$DATE: DEBUG: " | tee -a $DB2SALOG if [[ $ARGS -eq 1 ]]; then dspmsg -s $SET_NUMBER $DB2SACAT $MESSAGE_NUMBER "$MESSAGE" $@ | tee -a $DB2SALOG else dspmsg -s $SET_NUMBER $DB2SACAT $MESSAGE_NUMBER "$MESSAGE" | tee -a $DB2SALOG fi [[ $? -ne 0 ]] && print "WARNING: Failed logging to $DB2SALOG! Filesystem full?" elif [[ $VERBOSE -eq 1 ]]; then if [[ $ARGS -eq 1 ]]; then dspmsg -s $SET_NUMBER $DB2SACAT $MESSAGE_NUMBER "$MESSAGE" $@ else dspmsg -s $SET_NUMBER $DB2SACAT $MESSAGE_NUMBER "$MESSAGE" fi else : fi return 0 }  kꦅo .םa՝a|֝a& 2vT./usr/es/lib/ksh93/db2/KLIB_DB2_swversionage_p#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/KLIB_DB2_swversion.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/lib/ksh93/db2/KLIB_DB2_swversion.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # #=head1 NAME # # KLIB_DB2_swversion - Obtain the DB2 software version running on the # local node # #=head1 SYNOPSIS # # swversion=$(KLIB_DB2_swversion) # #=head1 DESCRIPTION # # Uses lslpp to determine the software level of the currently # installed version of DB2, only extracts the version level # (user visible version #) so if the lslpp output is 8.1.1.4 then # the software level will be 8.1, alternatively if the level of # DB2 software is 8.1.1.6 or above, then the level reported will # be 8.2. # #=head1 ARGUMENTS # # None # #=head1 RETURN # # 0: success # 1: failed # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_swversion { . /usr/es/lib/ksh93/func_include lslpp -Lc 'db2*' 1>/dev/null 2>&1 if [[ $? == 0 ]]; then lslpp -Lc 'db2*' | while IFS=: read image tmp version tmp; do if [[ ${image/*db2.engn/found} == "found" ]]; then echo $version | IFS='.' read a b c d e [[ "$a.$b.$c" == "8.1.1" ]] && (( $d > 6 )) && { echo "8.2" return 0 } echo "$a.$b" return 0 fi done else # # Starting from DB2 Version 9.0 onwards, it doesn't require any more OS support # during installation, we can't use 'lslpp' command to determine the DB2 software # installation. We are exporting the variable "DSE_INSTALL_DIR" with DB2 installed # location. # if [[ -d $DSE_INSTALL_DIR ]]; then version=$($DSE_INSTALL_DIR/install/db2ls 2>/dev/null | tail -1 | awk '{print $2}' | cut -f 1,2 -d '.') if [[ -n $version ]]; then echo $version return 0 fi fi fi echo "" return 1 }  k4o.םa՝a|֝a&2vT./usr/es/lib/ksh93/db2/KLIB_DB2_rm_instance_metadatas#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/db2/KLIB_DB2_rm_instance_metadata.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)05 1.4 src/43haes/lib/ksh93/db2/KLIB_DB2_rm_instance_metadata.sh, hacmp.assist, 61haes_r714 11/28/11 14:58:48 # #=head1 NAME # # KLIB_DB2_rm_instance_metadata - Remove the DB2 instance metadata for # the specified instance # #=head1 SYNOPSIS # # KLIB_DB2_rm_instance_metadata "db2inst1" # #=head1 DESCRIPTION # # Removes the DB2 instance metadata added by the # KLIB_DB2_add_instance_to_metadata function. # Does not remove all of the associated metadata for an instance, # clrmgrp performs this function # #=head1 ARGUMENTS # # 1: [scalar] DB2 instance name to remove metadata for # #=head1 RETURN # # 0: success # 1: failed # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_DB2_rm_instance_metadata { . /usr/es/lib/ksh93/func_include instance=$1 if [[ -z $instance ]]; then return 1 fi typeset -A odm_fields # These are the ODM fields and mappings to the discovery content odm_fields=( \ [HOME_FILESYSTEM]="INSTHOME" [HOME_VOLUME_GROUP]="DB2HOME_VG" [USER_NAME]="INSTANCE_OWNER_USER" [GROUP_NAME]="INSTANCE_OWNER_GROUP" [UID]="INSTANCE_OWNER_UID" [GID]="INSTANCE_OWNER_GID" [DASADM_USER]="DASADM_USER" [DASADM_GROUP]="DASADM_GROUP" [DASADM_UID]="DASADM_UID" [DASADM_GID]="DASADM_GID" [FENCED_USER]="FENCED_USER" [FENCED_GROUP]="FENCED_GROUP" [FENCED_UID]="FENCED_UID" [FENCED_GID]="FENCED_GID" [DATABASES]="DATABASES" ) sa_type="SA_DB2Instance" key=$instance # key is the name of the DB2 instance for name in ${!odm_fields[*]}; do odmdelete -q "sa_type=$sa_type and key=$key and name=$name" -o HACMPsa_metadata >/dev/null 2>&1 done return 0 } 2" kQoABםaBםa|֝a&2vT./usr/es/sbin/cluster/samples2_AA kBoABםaBםa|֝a&2vT./usr/es/sbin/cluster/samples/oraclestaAA lN`%om1/םa՝a֝a&a2vT./usr/es/sbin/cluster/samples/oracle/oracle_saamm  -es ailnort "#$/_cdfghmpu.=AENORST[\]bvw()*012:;CILPUkxy{}&,>DGMV|'3457?FHYqz!%689BX+KWZj1䲏+ڤ5?!b @'hqyAƔB8$4,40oH.w7(k܇ĊE12d DQCjbd &HTx3Uo˽͗ >1䲏+ڤ5!1@$0Ef{D$okK^#iI)G׍8` ܇CAL 'ID{qB`i1`WʹI>K7x51 f ѡ4,,q'خyCXr(S&k)&rU⛔O6y8.w[j0QN:#=nZAJȿǂE[q ʴzV8 ѡ~8&L bd*<܇Ojla7KLI)DNR8q=x` ᡀ8=7$4y%+`pо& rCbԜ߻ ^EU_:zc35Hu6{7?)¬wazQ>}a9}xoQG~֍V霬2\r܃wwwwwwww|N^gqwwwwwwwwwwwwwwnChK7~N).CvT|$wNX-TUN1I~rR|c_Ռj}s0CYrڧ B@Sor@S#`#O'VZM=L rMԬ'.n Ih.3ΞY!RrZ eR-rC&ULCi񂯮&iw!cjC|`뉭C)9-{M'CYG!š,Or&"&^g"89Ih.3fפip$qhKj4rʛ\Aat%Sy(8;jU3sNtz!΄ΏR8.%rZ ޴7vW9V!v)C`f9soV3v_Y9Q+̋ Rk(=2#JR92W݆ $ "<@r!_'-D@$PbD {],ꋵXB=Xo}Xڤףm(jtm\,D%R-rkҝq-3 8A&"&T`cohjZfIH%JtzĵJA2`$Pz`c) < EHL"%"0Hb$RU$ L"LrFDzfLH0r#DI:=HzrLc<ڬ'-؂u.g=16}X6 zЎ{Xrl7ŞkxKV3ͪr޴#GS3\p10,ҝš,giXΤ[:]>&a,!~֍V5(r5rJA}3iWXc<#AӣԎ'CYAΏR8jTr$L12JZ}*"( LDLDb$҄fӕŞj|#=$$ D`D (2D`,D"aj.ܱnXRD3,[@"T>;%c$XRDXRD{&<@FǃsbLE3wՌ`hn+ $HH`cohjZfIH$aV(&HA0X17K5-3 $[SZPB*{DA7KLAʨ{D"0T!"I"0 PL`c.p( L#R8'S2G!xۍ{9\L $&9$fI]i_:=Hz>047F}^ZteFLb/i:ӧ޴2*/#\2deS D!&WZgW3ΏR8j KIqPO}r]rYW=Xή,_bZ7 rBeȻ9*^QLjgW{qyqzYM9sK^E^|S>S.yyqz>WhEgZ݆6_ .sf_ݸ@$Ps=>Iq ЎhseWio5ҚjNKB<9 W;/QK}pq繪ag+!x&@2%D%P 9!BbCݹfa9}bfo^q;!*˸S^wGO_[9kZ/#3%|ͦ޽|sdZ܃GHv2-9!B"DIrՆ2-z\IB$A$"T99DR&Bd *"HsrEO^f9֝=XTiyF rź#̓r " TD!HTdjw9%}_[3XV8 H $G"&H4Ar$(&@@807 LyQDCGI&@srMr׌̾!Ard "P;BU rC*&(T9]ۖnJVR8'S2\a9^q[\P;3WAnXD`@$PbD s؂c$㔎>Zjy$#0JLyG׍Q7? R%G}+k֝8mJLa.AnXtF (CgQ|fr" 9!ɐ$ L TD 8,yQRbE (?=SCe9}XkQxferC TP"KrQ1BBܳrR:sY_L֧-Ǟ-D0;DbD?c$Xw#"ɦP@F]ZwBUpY@7, HJ]i_:=Hz>3B$%\+}Iʰyw}3Z,[3ZO㸷0c'ЫUK=Wnή.:qwwwwwwwwwwwwwwwnAr#:qAp,PQDC%{9~gC֢}c>Ahbz%y»֝;3Z=gԜ 7Ar$QDy dH*Ztg6 I& $@y0W&" 請=6sur" 9!ɐ$ L TD 8,yQRbE (?=SCe9}XkQxferC TP"KrQ1BBܳrR:qaf}3Z{ܷ=yI L`?Ռb UF&Adwh9i@bb Ȇ;Aj;$fI]i_:=Hz>i@bb z Ow{=bS$ ?11Ą$$8yw~{DI+3GO^5Gע ( LDD  " cwRIFa$֙ Ԏ'9d+BUgԜ 7LzN[nz#jr?v( BwʷIp9=Wnήfr5}gNnJVQ!wwwwwwwwwwwwwwnJ&=\ݹ!ȏ7%cQ9*"HwHW7W)?V3kOQW諐r (TD@8D" J9!cʏ *(L@!r?|C1B)9!ɐ*(L@ T%9HPPU~1<7+\XLPbD\,ܔ'.rQ618ÿ;g~IiՌc;q>XHJÇ8pEFz!pÇ8pÇ$$H=RpːrC 5܃X$~ts{.9*XLPbDAr$QDy dH*WI!:7%+ ^tzm\GI&@srMr׌̾!Cĉ&Dw$(TLPwXU|cEg%]nJVO7HV/YCbS$ ݹfa9x~0Mc<۫M}g?~@k;!*B?} ځn "LPbDwV.9 /wwwwwwwwwwwwwwwnAr#jrr " TD!M֝;jRkSr (TD@8D" J9!Ȓ*@sr@HL1DIrCǕ&( TPCO49~;Lk_=Ηp\=hGN1WB9'C7o6gߢCwW{qȵr׌̾!Ard "P;BU rw|S~Or?w|S~3܃ rwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwv囒SÝܷ=yI L`?Ռb Uqᇻw)qy;Qvr\q E9rz#'Qvr\YƣD`qY^EǢ0Z#i$@HLdd.nWZo(8V/Y`Ejek%W\_\MhG$sB],[D`o6O p@#*%Mv(!7[-i}9dr#DL2Zw|9}BUqi=X&UnXsgW?0d.ntW#,[:wZB`ÿX;+gWnŽ=ѓ>їBU.:˿s Rv6Zܣ WܹFk d +=d'{w6Ϳ}XL֧-)|P:W{q˿|PgN>V.ZDLe[`x{ODZw 2-sc"^X >I_5jrjeېri&UrCbD "?IwՌS:xIiїV3@{ny?Ռf_i9 H $G"&H4Ar$(&@@807 LyQDCGI&@srMr៎Rl_$ wW{q4Cw<_4A!.izcUyX'ϫ j/r?9ΜWΊ+̋gLrG㼞ynJV ܠ if_!irȔB\# odE# o"($$$(TLPs,ܔ'.&U]ܯͬ'!Ǣ02{k7+Şj8FFOwf|SS=dZNz#8]ܯ4WF.nW1Şj1|G{<;|c3}\YƾsT wor0,Qfm5qgLffȌI9>zۍ{pZ yNYׁ[-0E-QՌDaͦ,T2Bc"u&H&U00`<=S i:Tq $ *@HL4ddZNz#dDʦO^AڤjgorbwXsW{q;HJD`o6xB# n5 x=BU.z#sy2wLzyG;Ca߾gkSGs|Pd ;CX+ȴ;~=2-'Qj'hG Bz^-^&Z^F}ۿܱor020co{  ;wF&Adwu~h˿;$@HLd;-7\/ u>^F}ۿ,[ܹGD`4g\FL $&2{('e UkFOwQ<===0o6hUhU<=APH`$( v(|QbMx0cnz#fm5qgLff/wՌor]W#V3=|PrۍSW#] MYׁ 4 w,[ܹ|` d`ÿV2Ni񂯮v(|Q0i񂯬'!z# f^'*Mwiwփh;(%osՌn5wZo(8FŞj2{w_mμ dg>0UV!S rŽ˞ O ;IC|`락-7w4W=MOG3Lxa&w*Z^sY.ƪ1i rŹ>Zo(20,c0dԜ 70[-qs㸾o0aX;Zo(3,Tq^`ÿwc)iwwgWN-QȄ$#0JLyG׍Q7;gUbӣ/'./^Gu~z,{9Ž˞'8 n|ʷIp8gJڤjrwwwwwwwwwwwww}Maېri&UN0ڹ!B"DIrڤjv)?RjMm|18)?ՌPie[^jc:ǚ} 1{!DII" Dsr" 9!ɐ$ L TD 8,yQRbE (?=SCgT-Wi .?[kȵׯC9Zo(&@2%D%P!/}mE3u9HPP!wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwnY)XN]Mawfxma9=Y_mGh]ܯc"Owf|{k7+bpS{k7+M81M{CI}X6#o`=MO ;HJFk dm֝<<%6.՛T/TF$#%;1mY\BohI%uu{<#ƨsȦGoV3g8C=^t?PRtYӮ U1;Ca߾gkSGsQL?N2-sc"='Шx{ `'W>L18)g;¬B]xs3nJ!l w:xxK1mF]ܱnŒN `lwDb.1wmVrx{ר9=Wn&UN0ڹ]6Zl܃GHv6Zlr " TD!Mgor+֤nCX]xoUKV3|y3Zo({r (TD@8D" J9!Ȓ*@sr@HL1DIrCǕ&( TPCO49~;I~֐C7kHI5N f݌]z?|CArd "P;BU rwS7\ rwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwv.9!L}s_5N f|859fa9v6Zlwfxma9=Y_mGh]ܯc"Owf|{k7+bpS{k7+M81M{v6Zܣ؄s-0 wYR8'S2Nڤ%^z#sy2{6NFQBU痪#m6 w,[ܺ# X8ohI%uu{<#ƨ }ϹRz# h;IFa$֙ Ԏ'0g=Z8ohI%uu{<#ƨ }ϹRz# 9_&g,wz9c3%|RlTn5Q9 &UOwwwwwwwwwwwwwwwv"<@;ISaW 8(D@"!CT-W}X:ӧ}a9w^uV1 wⰬ>ir (TD@8D" J9!Ȓ*@sr@HL1DIrCǕ&( TPCO49~;_o㾶dqJڤjCw2_\NgZ!;hG=ga\U*ru}G.C;k?z /$4W NXkQxW__\3/srȔB\ rwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwv囒ڤjⰯsk7+ׯD`0d.nWf@ =Z냏D`=B9'D`=*rz#@]ܯc"'QvrBK=$d.nWKLrUeDl$Y^)Ng&(Aڤjgorbsn[У'd *HDahG$peF rV6 '|>z# 6mp|oug|V=g̀.)QTxFȴ2:#b%I- ;0@"T1ЎI˿sO}s r4W'4NJ;0 $@y4 @˿ՈIsV2N W|` /ѫF=h;0i񂯬'!ЎI"1 -1 ~~fWASB9]s1hde[c mS9cUK=Wn&UO\.T-U7XN_rC ڤjJrrCbD "?IwՌSr8zԛ=0ޥa9kV3@{\QK7Ռj}q9@*"H D"Li%CI P99L q`o$&@$9!cʏ *(L@!r?|C&Dw?ﭨn! *.7%+ ˵ISzTy@BM3 $ίxgq=x^ N{]`'IIh.3Μ0&@x,@iyEGyAǞmG"{DI+3GO^5G׀`]X5{;n.Τ[;䯫QG ȻdjUg+ ٭So N8ϹRr5Xδj8 wIh.0r! 7H$:tzT}x]go(6n~SW:ok^GF !.%'%tȄ$#0JLyG׍QJ'%tV3AD`A 21곃IFa$֙ Ԏ'0烡XLX4}a9uOV3Ma^GF !."{DI+3GO^5G׀`'S#WY淫a9oZgՌiypg!9-ۦ{dZ/6Wu")>/6nW9-ۣ iypo)%'%t}[ߦ33Yu")%ze%]RlyO\diyp XLX4).\YP~g&@x4C'Je[~C{O_.w&Uc;{wrŽF-7?0w( L#.ڤ%^z#sy/#+#HJF$#%;0n2^GWɶ@pc WěddGtF]`y9_&ڤ%^z#m=Vpdwl7H$:tzT}xS#WY淫ffΜ!E:p`Шw=1;Ca߾gkSGsQL?Nu~z,Eww Q<Cw,`1ttFbpS ?0IsNKAt̿`jEQq[-QLX8wIh.17jZ8-( `'`Sھ;XUq-fWG՜ʷIp >I_5T-U7XNNrwwwwwwwwwwwww}'ЯrC ܢx- !B"DIrܧasy~ BCohmt?Lt)̽A_YK19@*"H D"Li%CI P99L q`o$&@$9!cʏ *(L@!r?|C&Dw$(TLPs,ܔ'.hW9IFa$֙ Ԏ'0灳oYsy}gZԎ'^Go6IFa$֙ Ԏ'0ߦ>1**^GSD!&WZgW3ΏR8j|#:ٷ|rV}0/̋7)BK RkKw>J╄c9s$n\6 o/". r|zW;֝=XN]9֛rW\h?LPbD.w re4Ԝ?NSή7SV2NF'єZជ+or*  Jr.Oݹ!ȏ X$91 ܧe3B\IB$A$"T99DRRtYt 92 cʈ"*?*LP@2GhsferC TP"KrQ1BBܳrRN0@G wD" l'@#>۫Nf`ѯUKwsٷok_Y=X5Fh8eB*ڬ'-MhG?rC NmV#Ap,PQDCcsՌjUjRvT+\YƼk闒oޥ[|b/sp*59@*"H D"Li%CI P9jw&L?9uLrC H@ &<"!ApXB  P9i{9\9f_ 92E (!*! *.7%+ ˨*ڬ'-MhG8ÝugyXN[քs6 wnX~(=2BeDI(3c$ut5I& $@y3`h&L0!6⯔5\c<ڬ'-B9&EHL"%\u2\1CnzmV: mVq^C~Ah)?V!ڻ5XgŞk>-=16}X6 zЎ =8 "$&TD.lB9W`7U>-m][-\F&a9 G,[ڬ'!@`'?s16 gN8ljw"0io\q'W:ԛ>gUhG-ˎ;5b`YEWIyXN[քp>-0ioK4px{8b`YE_W\q-0ioK4px{8cɦ$"P%ǓLHDQȌ|[wkǓLHD^&ϫa9oZO4˞ż.xq84   q@&A1"0io\q'W1i CIyXN[քp>-0ioK4px{84   qPheLjżqf<=^T&A1:ԛ>gUhG-sƞqL? (A 9Ox2~ygUhG-ˎ;5DLj LDBĄԛ>gUhG-}3W{O5+EG"02LD`4e\7:*nJYsyXN[քsߔ랬>sp|~JxY*ÿbZ q\7:+wџktF !2$x)%pRn1ᠠ@gC}=X,7քq8 "$&TD.lB9W`7U>-m][-\F&a9 G,[ڬ'!@`9bXNCzXN]OyѦmOR#LQDJ .8Q=G Ox$Pzdʈ"Pdh qbOڬ'.f@F !2$\ss6Ѽqstszm׷%|\wOڬ'.ż6P)EHL"%FVr;z}1Lncү+քq^(=2BeDI(24F !2$ssto9|YlR5-^/1XD`WΊےKKy˞4B8^E4o*u_us1d_Ոo~6D`WΊF !2$=369Te^ tILH0%UK=WnJڬ'-MhG.T5q9=9Dx4w_*''$D9- gr_JbtjeqIW_j H $G"&H4Ar$(?~Rτ[9!ɐ$ L TD 8,yQRbE (?=SC3/srȔB\ rwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwv=jr{9ܳrRT5q9=0Ź胈LH0"Db 0crŜrQ61:T5q9=!_V3=oެgM\ѮA{&LD%yB@܃r =X /5p෫ԋ{\7)BK{{gR-rxGjyՌnv=XϬNOk'\GkDܥ .8-#snIZfIH$aV)ӂH" g ]ܱnc$㔎։ѹJ\pca2rD! L"Le%j>)j-.Qs0Iv:U6_AqȰi9M\NOgvGqNMA\r! 7H$ qA'J .9$fIdsބgWN3_DbD?~xK iՌ_)OgbtmR .&" L YSjesm*sj5牓D,FɈS"H@dFkʱNefxoD`L52$dOrCs}|c:okF(IpOQsIxk܇SWZo(2TjqjegW?B"H@yXGۨBohI&'>Zo(3@1B)pP 0%,[{p`'s:q$ <$1Yf&Mz.qoYF_-7?8p[wwr9$fIz# IFa$lW RD0d qkSRrTr!(pzM3 $bƟQ W2qAX D,uҩ)9*Ua9jkB9(@@ZdIDcX*ⓒ'3_ʱ)9* 3W<7P" Ȓ纙V.!wwwwwwwwwwwwwwO`9Dx4wPU=$D9QPW}Xϰni޴#\g\_FAT~oXLfu)C1c:muL%}X<#Ar$QDy dH*r9v_A~+¬{'ՌNJSW!Ȓ*@sr@HL1DIrCǕ&( TPArd "P;BU rT˦ U+wYt 9!BbCݹfa9uSa9-D@$PbD {], :}2]zO u#z3%ͱ>1}1".bdL 4gc$㚤%^xÇ8p{?78pÇ8pÏWDĉq7%cS*rt{D@$P0`?ՌMJ_*^Gh9Pp["yCohʃD'Vtz)䫿ېrxi*9Y}X}zJǓ)L* xKjW"R)JR=r`&Us[W8u+g~6\,[ܺ#ǓLHD^`9bcɦ$"PcI 0`?Ռ6.z#ǓLHDQoh@[z1ׂ]bS$ ᠠ@crLCԎr(L1|70 -J4 !,[PljPLxq ` c$4  80+rfc5tr!L+r1okބjf&f3PWG"0f3PWKrCoV2L)jfs1 y: rź+S1315j 0`?Ռ;7YgLc5uW#Wf3PWG"rfc5wZIR0h@GW#Wf3PWz\4$%~xLϦᾳ_z*j#@@'|) .4hѧuM4WA>e3s9ٝ3ՇYS^ ><8;?k{D${^&!ohI'(T B]6i`.s<Y5Vhѵc)o9`wi%Gs]kw{IB1F'ѓWI\4]$<%R5IZfJ:$fIzc]6IFa$lW RD.ܱnԬ g;/0`?ՌM*814NJ;bܕw q;$?pH  4$焔ER1 6i~D!&iI(M{iM H$ƽ("8?fIx 0!*@( 㠷,[FL=::m&I q,+: qԬ9FL:_Mi=$%YVt!arWz7'?sՌm}icQG{D$5Ԭoi8?FG"A@b+ܳX8ӌH_3 $bjz 0 -}5}֞sX8~xLi?<7sODO4R\hѣOqjȄsOz|eQǤ-3 $ or5H{Q9QȄ"*P 0%AnXD ,|V2N8ut5hQGNi>5ʼ2XEFOrrҙ*iO`BohI%V}8?fIzc\#0O6+Q W .~D!&Uol>3 $1iI'(T@PFkfq 'z.12ULOD 8Bi A: rŽB(&<@0cnBi CkFV2N8P4  84hOS" L+7O`BohI%V7I%v3 $bjz 0 -跴O`ע=ig0`?Ռt> ohO4R\hѣOqjȄvOS=!.9FUzM0J08QW#WamNmr!ʼ4 q[-8_0`?Ռ9]8~sam>zӧ=&5ʼ2XEFOrrҙ*=IFa$[ӃFa$5pH$͊aBU (K!=IFa$[=&3 $1ӃFa$lW RDB]Lj(P( p 04W )m @B{?843<EIܥ .7ՈoHzk QF1Lg%QAO{ԊeR?$JM<4 w rź W_0`?Ռ&ʤ xor$wtf9)I9H6U S|_F(Ir=`+ZArRrbԚ/V3H2 M\rܱn2EH&H3xiV2NBbSa9{rF1A^y Ykl'.44hou -@HA S,10Fk0IAnX~"iU2 L4hdή9$fI]i_:=Hz>44s<[- yrg}a9uOV3Oj^i~@Z- xKCIFa$֙ Ԏ'C@?<T L50Ѡ|L1^rTz m_wbքs{>y眽X ?!\^GRl^z,A4@Z=,[ܺ# X8DM004F-7q6ү'6 SZx?'LDw"iU2 L4hh)%pRn1 qQ@ȁN;qQ@;rrw ktV_V3khmw:zthg_0`?Ռ~x"9rވ;ӌ)'zϭ +p^iBVk0/ W%wbᾘ7 biՌ#F[W/'!N/S=Xe&h> u/"f ˛*1d_ՌSZtf_Ռ2ھ1}a9 /" 7 .4h^Gփ;Ay"^SWohIT(1B)pP 17KLIG[ܧsH" g 5Cȃ9żވ Ȅ$-3 $fs$K5Xb nREyAǞS*%3%| \.]3/(ok܃GHu'%f_Q5"($D9QPWzӧ|NKAv̿`M\EQ#3~gR4<7ѹJ\ܷ(+rc=1< rC$ #$D@P v _jNKAt5sFUSU9uHhR,U#I P9Q'O9uLrC H@ &<"!ApXB  P9i{9\9f_ 92E (!*! *.7%+ ˩9-2N0X=q` B HAv p@#WسrIh.MH9P"{DI+3GO^5Gׁ!|C}_#- g̿`? RR-rK,ܔMzNL &[b& !c$:qDbD?<*7+1NKAv鞬g2  ESLWw5HN$%GȻ)BK'%f_Q5"( j}psT-U3K/#(`Sھ9M܃ b zHxo|iT_BX|nRrR;Z'69%a${\Ma8h(-^|V2N:3_cGkOLt+ˢ0vNmdokޮ- bOvGq~z=2X`~R`[<7uЖ*4w!9-ۦz5sGw wyAǞ:BohI%uu{<#ƨx{u/|b.:}fП:v2-0OШ@HxKEȄ$#0JLyG׍Q0 feIh.3ՌES͗ >12/I~P"TiyM3 $ίxgq=x^ʱ ~pz]g25sNK{4艓D,DDAi$ T-W:?h,[id;Yj/e5'%r^̝:D w~~ _jNKAt5sFUSUze[^=t_-7?0I"{DI+3GO^5G׆?=;<[- yHy= w"BohI%uu{<#ƨ:=Hz>09Xqg=9W]Jc /u"(4 w6Z=usԎ'jEPyXG$fI]i_:=Hz>4 ۔%O^+l7لhѣF")(V*=&fa${\Mafj=ˢi%" L YmtDɈS"H@QSuB*2 ]:D qњTe^&jb*2snV,WEq7H$e|Dԋ{\&(E1"@ ;t{D@$P0`?Ռήf<$& M_%~ b}2X4碣*Ѣܱn,|V2NNKAt̿`jEQGqӌ$a|'=6_X(\!>t*>tdZ`'ΟP`(Ζ U=냔~Dԋ{\S*%ZAPWՇ0=XΤeW6ZWڊf"[u{Q%|c^T*)ܥ /.fucjwԎ։ͺD!&iI%"(uaXfcGkN "LPbD4 w rź Wg wήf UES|^- brb_k b>   m_⼼%zRl@r$Տ) c%A~ /#(X-TRrZ eR-rnn-RlMQPW:z7)BK"(ېrCg}3>}X)Og7nJr|M_}y)֝C{/xwfnF/#/%qȕ$HH`i)_L!*`k=Ҽ4 WDĉtt@rc$gWN3_DbD? 7<^Jy}a9uxLRWւ{;^㖃ZIFa$+x<@&[8(&(E1"@ 9!߫ԋ{\qhK#Mcc΂WΣcc8lr9 z^Og;䯫؞Og;鞬g׳9e5q9=B#I(,DKS|S= q[-i9M\NOg9dqkȒL@Hg *uj>)jze[^&'iՈoR-rKqAnXEIjr{9:U6_A~`'qTڤ}"e5q9=qήf<$& MzӧҾSW< /#,=FZNSWrqAc)ͺD! L"M%"5:U='%zpP 0%-^/0Iӌ0#McG}X}zRl@r$Տ)4eR>\? RKj_V3jaθ=`+Z鞬>g~6-W^gRrU˨*};2B*HDb$R)XSRrWb^ԋ{\ѯ݆l#.nXD ,|V2N9]8~yI LR-rsFvQԎuܯ֛rW^g3:UoZ[9-W\ǔ^G~|#hG7+:ܕ'J䯦3:DaFU=LQ5<_4Я wh;*D! L"M%"5:U='%|wHb$ҝq=ᠠ@`K[-8_0`?ՌgWN3_DbD?sGO_:ܕι5piy5Ԏ'znJՌSRrWsjy"0*LQ5<_4Я wh;*D! L"M%"5:U='%z$L"M)Gᠠ@`K[-8_0`?Ռ*>|'J$QFOqkȒL@Hg|#޳W^g3:{PU3YD|"8|v B1zӧ^m'LJ)q_:=H;Elp[Q5{D$uzM_I+q ܱnc$ohO:=H$JM<4 q[-dqњg.z^\&]W>tz)ZQ9&iI%"(R)*;KѡʙqElr S:3_SdUyG:ӧ^m}2XF&9h;q7KLI)D$MU6&(E1"@ 8(tf=HȪmuLnz4Q5q7KLI)D$MV)^T# Dĉ8h(㨢mD qњ""SΏR9֝:muLnz4Q6wh;b(~/1XF&g qkȒL@Hg yXg31yUV3O:=H:muLiy1 tzgTW}{9.fucO)4Я wh;q hQV_V3Iv)eQ9zA_9*^SW4k;uBM0JEQ-3 $SOoWΏR9]ܱnYds:q$ <4^yV2LqncՌSΏR9N&]S/^B b>gs{䯫2z^y˙XESj=FkԊq)nz-Q9Sv B1m'69%a${\ZfIH^moWe%-^/0I3"I1"ɟ@(c)ڤV=X<#tm2 (+yG;pWJS/^g眹Վ[g:%j4<%7%cSBXTT*AnXtA EsX9]8~yI L&ܥ /š,M@*nt`Sھ9\Z(j bb"ir<*=H™r,W|uqhK\O iAIFa$֙ Ԏ'` cfEO B^EQG=0nayeM΂š,Wysڤ >\]yX܎)_V3H}s*nt/!lQxO;{ /DJ  shr! 7H$:tzT}x` ;/7: Ռ(j gʛF.jegW?b-(8-P4p[wwwwwwwwwwY}ݺ rź/q?0Ik0E]FSQ|OXޜAT$&eԋ{\{*㨠`@C(+S<7H}s*ntq8S q #iQȄ &7: o)שL}qQ㥂OjqhKj4rʛ\qʷIptۨB1F'іNFӌ6ohI%{}ȀKܱnYdqR=8ut5hg)53eM΂GS3zӧڤ >7: }h/޻!㥂OjqhKj4rʛ\qʷIp6_X)ݑܱnw=X8N0ڎ<{DR0JEQ&°IHdoٕ8(&(E1"@ 8N0ڎD!&fa${\Ma߳*pzM3 %W<Cx?#0O6+ <85HJxq d$fKq^~Is\rg"}jMV!0ڸ-.@pd@ g0I qO#~qׇfB1F'ёy_`YaBU .;ܱn@pd@10`?Ռ:0ڎD#b}j3FF qqg,q6 Z: rŽj3c$gWN3_DbD?ʱgA]4Ec19u6A%]Gԝ)WJ7. /#qj}pr%H}q9eM΂8e[[Z9\r! 7H$:tzT}x` q݌@-|KȼRMg)ͱNjrW}gyeM΂]qyXW6 R\ʛF\shr! 7H$:tzT}xhXosoV3*nt6cՌ2q>$93wc36\sT-U8kE\z#dz,EtfFwUM_%}g#WH}s*nt>A>].OSn&@@807 LyQDCGI&@srMr׌̾!Ard "P;BU rC*&(T9]ۖnJVW=qyr,[80Hĉ$A 8 +Y~CBX ALLDM8E89$fI]i_:=Hz> bdZ/6%g)53Diy囒W)š,Or&"&^g"`Sھ9Ih.3fפi9S3o o|iT_BXvQ84ayJ'6D`"BEIH`8h)%pRn1$fIzc^}A$fIzc^ܡ){DI<د, 0!*C9@aM3 %}-.ƚQ84a qiD qiD B1F'J'6/6k*=XS(j gy/!lQxO;{ /DJ  shr! 7H$:tzT}x`sǷYNnjeOV3P"'Ğg"Unw>J䯭|$4@k`Sھ9\Z(j bb"ir.;nn9h;M(qqM(qr!$HH`c)) $JM<{DI/LkٯH><{DI/Lkޛ53ohI'F%^g<8 2IFa$t\߽Xor=Jc늍V3 k. V3*k.;鞬g6}{85: rŽ4ri^`'k7? D^g#Ϳ|^1FX-TW=qye[[,[J'6V2N;nnZܱnQ84a:iDӌ6V2N;ӌ8o<53G~NJc늍=Z_\- b{51149ʷIp-YOwwwwwwwwwwvt_-7?0I }XϹCPS8Yr9\r! 7H$:tzT}x`%GF*Rr)_YW_IV3DRѼosoV3D@\shr! 7H$:tzT}x`*7'Ȥ=UiG˙Τn3fν&^W=X.>Un 4EcR{X5򚹣K&Uή=D ?hbV2N8ut5Ic͜Mg4z"BG`Sھ9\Z(j bb"ir.UKLHx $9Msm*sj5&"&@Hz# qu}X}|+ᾙ8rM3 $M8(1B)pP 1AnXD ,|V2N8ut5Ic͜Mg4zMqj}pr%PDӋ\qʷIpr9WՌ{9淫7: >3~ga2ד+yeM΂Og4oos| q6aBMKLI)D# 5%#fT$fJxIFa$lWxqjz!2M3 %?R$.: rŽN0ڌX8ӌUw<7: y/3QsI /"j8ΤLRWւ^GP 5,{W+BX ALLDM8ELt qA3D!&WZgW3ΏR8j 9q݌@-|KȼRMg)ͱNjrW}gyeM΂/6ky>֝=XϹCPS8F\shr! 7H$:tzT}xhXosoV3*nt6cՌ"|Ir)UZf7ǙfmQ6Zqמ:dm8j=":3_^EX:Os0iZtc> AL"~/3/#tD#b}M8=&y_`YaBU .9#3}}D䯫M΂r8a9zՌEQ ҉Uh9%R-r7XFjJE)tJLHx %FFh(㠷,[{p`'"ULt+ˣMCw"I1"ɟx/%XS(j gyY* /"QPWՌESJeM΂Ih.XN]Wւ{`Sھ9\Z(j bb"ir.;nn9h8Ȁdl:{{C{V֝;Tt*>tdZ`'ΟP`(,{W+BX ALLDM8ES*%ܴLt prWBX ALLDM8E]'%t͛tS^m9Dx4wRrZ LٷE156rCbD "? kv53tԦ>u6U_V36mLѮC'%tfͺ)zMU!%|xj5UV3S(j gy'82nfՌm?Y)XN]3.U}ge DJVIB$A$"T9cѧ v _9-Ӧlۢm V{YR/UUӐ;Yj/e5|NnfU:fͺ)IlMVd7r8\EL!Ȓ*@sJNr>n&@@807 LyQDCGI&@srMr׌̾!Ard "P;BU rC*&(T9]ۖnJVPU:/X&spzbglۢפhkP ,'D<{MrCY@O|Og (+pp3|Etk;6J_n 9A!!A\r!ܔ'.t_}sk /F(8-BQǞ'%G{(rn`q/ڎ<"T!"Iuo4_!ǫօ6qI_V!Eznc^՛@ rV6t8RrT; kOX;fXwnXtj(0`?Ռ5Ŷs)6ލX=q7H$:tzT}xhʱ N-IׄXyngRm^G9_Epch;#nz+BSxq?)9*ckP\o磸&k(.RrTs3ⓒ;ەqSV2N-.ⓒV2NphgGqI^X6VwwrM3 $ίxgq=x^nyV2S\#/|%7͛tS82m=(#A-sZڟse AL?)9*?ՈQSxOX;,[ܺ+MU`'ke AL"|Ir>ZmҬ;&WZgW3ΏR8j ?<L)CPS8yXyngRm^G9_Epch;#nz+BSy<ٷE0o磸w<IFBsȽ?c$ܱor6V9d'6pe&\Ίn`Gq&WZgW3ΏR8j XgO͛tS82m z f hwrvF rV67ҰR >='%Ofj(w< ?c$ܷsZmҬF/ڟwfz;NJse e4`?Ռ rŽˣV!EydQ'.S(k) *{#$fI]i_:=Hz>4 c)>=XN\PS^Cy<ٷE3)6/#81)yRrTq纬B<-6V{r9!cac9ŶsIa.fucjAnXthf w w w&iI(F=zc^7Ѣ_W %&,[{;X;3_LoT/y㨠`փr! 7K5-3 $[n+ Ԕt::T7KLIGZ5A]%pRn1 wb}kzc^7Ѣ]-^|V2NE4a/.^G(8-thgg0cn w qkȒL@Hgc8:qmMY9/>V+yZ Hiy㩕n-AnXF{p`'ήf<$& /<ͺ)I6z]bME>]=S*%Lt pːr *' 'm}ېrJrBJ'IW :Og"j9ےrӧq tc b=03c$9i%G83Lx9h8g,u2]ܕpːwwwwwwwwwwwwwwwwwwwwv囒Ԝ6mLMzMÐqbA E&$H " ??1_bΫTp9NnbkmTy@BM3 $ίxgq=x^ʱ ~2-oWJ'%tV3͛tS82m<%7%cS9-Ӧlۢm: rŽˢ L(C0I"0T!"IcGkGήf<$& C}_[RrZ L͛tS7U|”=3fν&CKȻ)BK'%t͛tS^mO U=냕š,M@*nt/#(`Sھ9\Zڤ >AW 8 ~ƘERlkCNKA -7*HDb$RR1#&(E1"@ ; FL}3fν&ZayQȄ"0T!"IcѮ I\4B]ܱorFQ`'"{DI+3GO^5G׆^x|- $lۢפh|>t奆Ӣ=gԦ>m 焻ZBM3 $ίxgq=x^@yV36mLmԜK}X[g82mO}3^E=XN\PPrCPS8y|N0R>yKº^Eݵ}*@w^/PWj\w3_cѮےCzmtc ;N0ڎD#b}j3-,60xKIS6Y0N0ڌE{nXDayAsK Ec$9ATEyGq[-8_0`?ՌpmG"{DI+3GO^5G׆ |5Yc35g6u6?򇄸-SͩsqV2N8㎌fj_i8D`"BEIHѕ׵/pP)bS$ ᠠ@c8Z8X-TRrZ LٷE156qʷIpqC9qxLٷE3KOJOg;Rr$8Ar#I(,DJGXf_i(&(E1"@ 8&&L9Mq6ү'6 SZx12`Zo({8`Sھ9\Zڤ >AWJJqS*%whQ|_Iӿ@c)/K6rCL}s6mLmή9$fI]i_:=Hz>09q ȴ whTȻ ~2-o}Jc랬gD<ٷE3)6Ȼso?S?V!{u/|b/NK#B@\ZBM3 $ίxgq=x^^x6_X)1z\YƾOg.A}f{u/rjegW?b-8Ç8pÇ8pÇ;08pÇ8pÇ8pÇtt_-70`?ՌaZ'%t͛tS^mTok6]: r+ܳdqz_wN8~x1c=3fν&\*a^Ti8`Sھ9Ih.3fפiLt q@> :Xm8j8:Xm8j9F $$Q0X1uz5AI+qKAnXDb0ڌa 0`?Ռ:3_P"W|^1,7Ƀ>Xm8j;1,6a=,{W)9-Ӧlۢm8㩕nn9ha^U-:z/.qׇfZU9=NN0Ѣь6㖛rTr S: rź+M+c$:/ڧE#Eq]8X-TRrZ LٷE156qʷIpqAqή9$fI]i_:=Hz>4s>/6kuOV36mLmxK86Z=us請=:.p,`#` #]M\N0ڞ5ʧ窪i9QȄ$,Դ$okI03RR/UU׽^S{_,T迲G.#p,d}˞'mOᠠ@`KAn[{p`?Ռ9]8~yI L_Ռ͛tS:mspHUW]g8V{:X-TRrZ LٷE156qS*%vGqήf<$& c8O6mLMUŞj=-Fg8;9_DbD?;۬}`p0Fӱh!:|B@tZ_\Nnbkm㩕nnZAwlۢc:m9,6ay,6aB#I(,DJF:ᠤII%-:z/.qׇfZU9=NN0c 8ܕ㎂ܱnnJ;X8㎋qwqiq-:3_U~ng^m TgWBM3 $ίxgq=x^<8dZn;*^E]XE{Ϳ )V36mL z  f ho/"ϋ;nǬJNXlQxO;{ /DJ  shr! 7H$:tzT}x`۬}`7ǽU}X}a9}~ AL"~/3gLW[g:mzՌ͛tS:m /#\+N6_X(&Uή=Z={¾[-|SV2N;Yj/e5|NnfU:fͺ)IlMVd7r8]: r+ܳdqz_wN8~z]BKng^mnc0Y*4tZ_\Nnbkm㎦UKrYzτqWC(+zfͺ)zME q8Sjq[-8_0`?Ռ9ڎD!&WZgW3ΏR8j /<>/6kfk=X76mLm=j<%|x;I'$F/ڧEq"0T!"IhkjR$$HA@A,{W)9-Ӧlۢm8㩕nn9hsnwwwwwwwwwnnXEyN;dUMFUzMKLI)D# 5%"Uo1~:/& @Hr% $<ĄD$DG LNJ$4L2|w884`d"glۢפkG_wCOqKNKAt6&&N8e[[Z!Ԍ:τqWdws:<$& 19wYG" aP c"C>t- G`Sھ9Ih.3fפiS*%ܴS_5{Ι迓 F $$Q0X13tF/ڧE@1B)pP 1Ƀ#Sm_\NmV#bdыsZ*m*fu2\-'!J'%t͛tS^m!wwwwwSSm_\LܳrRjtm뉚]Ax-pp3s%Sq_9zqIW_j'Ռm_\Cp2_ n(ۨB*HDb$R)XSRrW-3 %4K5XgN-zM^g3:ΎͺQwNm׃ohI%{Dx8-^|V2N:mr! 7K5-3 $[SZ)&Ji~10p0g.:D qњ#iW /nz4Pћu=&(Tr! 7KLIGZ57H$ƽވ10p0gohI'(T B\tۨBohjZfIH$5R0N :T#8HDQ (9)FkԌ-N4UK@OFm-S*%2.5JSrC e o輔rCbD "?W>!G!⛛xJGXΤLRAr$QDy dH*R)r)^ 9t+Q~)&*A*R*`hokrk0EQmk97Y+uͭg87!Ȓ*@sJNr>n&@@807 LyQDCGI&@srMr׌̾!Ard "P;BU rC*&(T9]ۖnJV5JS Ź胈LH0"Db 0crŝW rR *G BohI%uu{<#ƨ$bYH,/%~F)9@V3P  ql)IөAxKnJ&=\5JQ[-]q` BV2NgWN3_DbD?ɷ)BKYH,.z/%>X-TھLӝp@kOjT9GXg}3}HQFھJfle3ՌESn*9ܥ .7Aaq\ohI(O{Ԏ֌B8(&(E1"@(ʩͺD! L"M%"5:U='%zM3 %)zѕ@KF'QSuWDĉ沐X_JAIFa$֙ Ԏ'pcfEO B^EUoWce |/%?=X"(7wX_JQNP͗ >1xO;{YB4$ <%EȄ$#0JLyG׍Q@_<ߵƹF1xO> hO; hT X$ =KƲX]7T^J8e[[r鞬>g5WՌ/%9W5YNmr! 7H$e|Dԋ{\$fIzc^|qIFa$lW RDB]*p0x4MHv%cV,W15YNmdJu/%A4P0wFEGthiܱn ,|ź4P7ܳ8<VSuw qkȒL@Hgxԋ{\RrZ G| IҘ{/ڤѥ\s:BohI%uu{<#ƨа'U沐Z >>F\pmG"{DI+3GO^5G׆nx.|^mp=gA~ s\t|Y7S걒qKƲX]7T^J8㩕nn;#㎖ U=냍e o輔q`+rrs:q$ <44M}X!Nk)y)^G!诬z_Y>3֏zHy}a9 rgWBM3 $ίxgq=x^shŸЩywba9>>^nm}X}}XΤ[<7ͬ Ȼ_ٝ3Շˀ}Iϩ6ZW.mqx_L[)?F7j9*=HKjȻ׽͗ >1xO;{YB4'ΞS̈́H$ <%EȄ$#0JLyG׍Q@o<W76g? RR-rIh.XN\ȿ[ /ȻJ%zόa%e=g}'%_A)+|be ՌR SW.A}f{u/rR8'S2NjegW?#b-(8-P4p[,[idv _i:ֳS{ux-\tf?Yj/zskY)<I\W*%hanXEyN;drMKLI)Duͭg8Smk97Y(9)FkohjZfIH$Smk9%"skY)*%hinXEyN;#du2\-ί"I1"ɟ< }7/V36Kfa2uͭg84Z%qR=S*%C9Wo}gyE䧙ѣ\Lt prWAat%Sy(.f#ېri}*:=Hr " TD w)WҼB-rPR*=H 9@*"H D"Li%C+Q~v\E:(5H9"(r)w!Ȓ*@sJNr>n&@@807 LyQDCGI&@srMr׌̾!Ard "P;BU rC*&(T9]ۖnJVھLӝs Ź胈LH0"Db 0crŝWrjU3sNtz BohI%uu{<#ƨ$b^'3y@0(/A'N[> ALѥxKnJ&=\ھLӝq[-]q` BV2NgWN3_mPjU3sNtzO U=냡-sԎZ U=냡-sԎ9Q@nEanA}_V3G uqȄ$#0JLyG׍Q@ cdZn;+ȼW7_J0x4OOCPS7b 1xo/"ԋ{\=Q~QG<%|brȻ _}Iѹ ]*W|B-rlQC|* Q.b-D!&WZgW3ΏR8j ~yV!ksp~o(6ԋ{\ܡ)4 rC0;۬}`sT-W:?hAnXEyN;X8fR;WҮ:D qњfR;WҾV,WEvF rź/qc$qyN֤c> pOT{\7/9zSWrdxGj 7-GjT;V:zY{C0rV!IL!DzMKLI)D֦K@Y7}]HENښ.6H%+AFUNmr!$HH`c))")_d}Æ.9*u"[:yW~ 5W=X\\]!ܽ[<ι5pKH2 sT&ܥ /").:U='%Oq2snD`"BEIHMcNOqI^{DR0JEQ,QAESٙξ \u 5Pjokι5s*%(ʩͺ㚤%^y6(IEO9tuҩH2 eTnG"{DR0JEQ,QAESٙξ \tr@IYiI%"(UD")_d}*%ho/.Œ2XZAʷIp8d>I_}*:=H㐻NKAtIPSrC Ԝ齦ܡr " TD w=X=XN\PQ=1ՌWҠ wՇ׾4*V=XmF+ܧac9"c&?\ެgY9W!%X:=H然_XN\ Kr (TD@8D" J9WrF;CN@fR/U]9EHr|c)I]g-&Bd *"HsrL'Μr{8`gԦ>j0Q(k(41"{DI+3GO^5G׆!Q'-v_'"\Zc;j0Q>|ysj0Q(k)6 X}a9}xIHoQ'".^+kꔃUѼ  oJA6KՌiGb^EY9m|K<ф]ҰQSW>⹍z5(r/"b ~O^f84nPqr! 7K5-3 $[n+ ԔwrA@AnXD w q8 Cj Qyasېrc{vF rź/qc$%}Xϵ}+%~m}Rjbވ"c&P@R)BKQ_JX8uqȄ$#0JLyG׍Q@3Q淫%{䯄ͯR W㘋CIFa$֙ Ԏ''Uz{WҽWKQf)ϬA^^EncՌ#/xmF.9ME\z# Ab"eJ ?hH" &"&TF-7qʹͪrքsH" &"&TF-7=g%GWҽWf) tF-7=A[-&<@He (2$0`?ՌgWN3_I44 V|^mp=gNgQ'.S(k) shr! 7H$:tzT} y28{uOV3iG)5as7\d Rt0c9<ٷE3)6^GME\z#Ԏ'CYAb-apr# !c[Ոo|iT_659 L"M%#ܡ tILH3ܱnc$%I(,DJF;C\{DI<دF%^` 7H$ƽo,6;b+/0I3@pyV!{MF >L|iT_6 z㥂Oj'%oi(k(㩕nnE꫹C]g.Z!S<7}5(k(RiCYG seQǤ,Դ$okI03RR/U]asٞ"c&P@RBKQ_JΉ"c&P@RBKQfQSuB*2 ]b+ܳ`'ήf<$& c /.}a9}u⠞LRWւ{碣*e[^^]U9StZ_\M4 eu2\-@Wrτ]qj}pr]7{5q$ <0,/ f<'ΟYB4'ΝA *,㩕nnZAv^+[z5(k)\Z|F"T!"Ic5&y^5HJ{DI/Lk2i㠷,[{;X; rź2ic#& w12 #,6;}q9XNZЎslj L=apddwv '69%R-r7XFjJF;C\4 qPr S ze[^V9ytF7(i9Q{gWN3_y;3nUFwZOV3[W/' O%jUg2G˙ϵ}+"]ͫXIV3N&ϫVH)_Jfl>Y!+pXA1!oZtc9!A RNOg"1>,D4%[-̒r{9c$"{DI+3GO^5G׆P{w2-xZ/".8>JOV3J y3 qEȄ$#0JLyG׍Q3UbCi<72/yG80PDiy㚤jY磪S2Iq,^ (&$< :3_UZ3ވ,D4- 8ZtN4EaT]:tzڝ*9$fJY]{DI/Lk.ܱnc$ӌH*p 43:W|%c9yqĨ#{MF >L ˃֝=Xͨ(4@kr(sՌ0n/Q[<9AnX~I $A1% JZ 9dή9$fI]i_:=Hz>0aV3j>c=':Lv5y.b-D!&WZgW3ΏR8j ?<9ժ`cIGὧҾkzsᵤ XNCK5Iy賫D1D"P!#b-㣽MVu "LPbD4 q[-dw+ $A1% .;Jڬ'-MhG9䉏 G DayAc9*=Hj^g{>Zo(2{8:q$ < IcBJNuj7Xr_w@Qy@ U=냡-sԎ82\---"H" (TxT0n-^/0I3"I1"ɟ`5*Nuj7X>|&.7/IέS9%za&iy$LxH*ⓒ7/IέS9^gRrU Iʰx4@k8kȒL@Hg9ժ`cIξrc>ⓒ\rvGq3"I1"ɟ` ϤVuGW}':)9* M\^GP 5A9##SW=XHPG{{Ԏ|_IήA[-]q` BV2N9]8~tz/#(FkmP$fK[ԎtI $A1% JF[W9Op^S:e0ܓ{DIk~tzΉ"c&"DQBIQj) t‚'L-Orc$ӌ$0璣Ԏz7!m_=2X4N `Sھ:ڧ:=H㎦UKh8e]#m&*Д5wwwwwwwwwwwwwwnAr#ɶ|MhJÐr " TD!%{T{=z=LY]9@*"H D"Li%CI P9Q'O9uLrC H@ &<"!ApXB  P9i{9\9f_ 92E (!*! *.7%+ ˩|i7Tքq 8 CX\(CW rQ61:ɶ|MhJÐrYʿXV3sno;Wzg#\,[ܺ# k(τFy{D`i"$DH  px?-]<`ƒ0 ''ǫ|#iՈo݄x3i%|%ˀM/"*76ZW7Ռ`hRc9*=H(^?vQ]XJR9%YM|xr O7ǩ6ZW=XJR9'!]q}+ԛ,䫾`h}{[1S/PT z6Y^GILH1ZUKe7%+ ˩6ZWivxÚ%^=rA|ɒ pːRlT/9Dx4wjeiw 8(D@"!CT-WzӧN-zMӧosc;aro7Շש9UΊNu y= H $G"&H4Ar$(&@@807 LyQDCGI&@srMr׌̾!Ard "P;BU rC*&(T9]ۖnJVjei~0X=q` B HAv p@#WسrM܃(CIFa$֙ Ԏ''UoWc#Wax:qmM /#\rQ61;T-U3K rŽˢ L(C0I3"I1"ɟ`ϣr$jei,{W|`뉚\@kOjO}q3K!ڤA\oKp3{|ڬ'' =rgWBM3 $ίxgq=x^@yL)_V3+N-zMX}yFZo(8iݑqwNOg=gxj qцr!5S6/¬q0v:3:5sF!DII" Ds;Yj/ԊjS\49H}#KrGZ4R0MSKDR&Bd *"Hsr}:Q!>0U.Ty@BM3 $ίxgq=x^nyV!^nQPWՌ}1^[g82mxKnJ&=\4W4,[ܺ A"9ds:q nR*f^B biӚ[g:mtFg<7* a߻0wXe ה9Ztc]qKRlT.:V.Z9hh1 rs<O1_98O1T!ȄGM/|צ5}b``KܱnYdyqnIYiI%"(uaXfM>#A@tt@xp`/9\qLt qdwqR&Ay*%fOqzHss7ǙΤj9\W^ :U6U.q69%a$>#A@wnXD w C}!US*%qqњ"i2XFmwQza&Xuc9Hbrӌ8g<j3gE1^mG=h/ />iN-zM8:X-TjeiwwLt qq-Ay899b|{T /֝;, @ ,/u*!#Z*ib]g-;Zg<%zcչ"j9sYFu5\q[-8_0`?Ռ8`Sھ9MqS*%qA-yu2\-A9WnےML݄r烧ν&\K:ܕ/#=ݹn ntN+w!4tScoq_Y}XΤ`"S:s3Y{{urܯ8k#IFa$Y"R.xOC9W@acBgpQȄ$-3 % mV 4 h((9)[pF#% øpDa8wx |'q̊]:(81FkԌdT#xe[`'c>Ȗ 02^HͺdTAg!YRS/R0MSKe[W5A{9]8~yI Lʱ ~pz]gLW[g:m /#((8-ϖ<3D!&WZgW3ΏR8jhŸЯ/".\zϩL}sՌSl^m۬}`~:v_"BohI%uu{<#ƨ*sSl^mn3rc>bXh#^n3y:=HZtc8mJLa^GME\{E{wwwwwwwwY{T /bM8~c$.aBM0QKfR)L}p:D q[phcXO8B,]:)a<$$?ՌsOF *i~kȒL@HgNH1Ko)j)7O|$4@kOj6Zfq2\--E5)_GN-I?_\wo6IFa$֙ tzT}xhXg ,ZtE5)_*%hS7BA%]4 Y={ү'6 SZx10p0z#~OgOq`Sھ9M8*ۯ@ ,--N4.靗k0a{9՟|5Y:ӧ0b8pe&\"{DI+3GO^5GdqJ=NgLW[g:mzϙ⾳N*tzΫxKڤjYΏLZ=`69?Lk# -^|V2G!֛rU:q$ <CyŶsI׆ƘE%28{|$4@kRlT.ʷIpCEr9? =?y}A>S7#WՌЗ&&EyGJڬ'-MhG9>Zo(2{tf<ܧ6W}gԦ>{8DayAr9`"oҽdq {a[L&9|zyM\W_%}s_5X6;F<0qN0ڎ<Ѥ BohkohI%{737H$͊aBU .;qD5S6=n(Fqr!$HH`c))tuҩ)9+ohkohI%{73IFa$lW RD4d qE8j8rӧV+.F69Y5SV*9%a$$fIzc^EXh=&y^5HJѐ%1>≴j mx?#0Koz- WDĉ8h(㿂ܱnc$R)QȄbO0S6=a.;sVr*nv⽦ ><9S:nJ) qIFa$֙ Ԏ'B?<8oZgՌ׭:z+ӋlRm^^ qyڋ>c9*=H)6rJ>$Rl 䮍<%3gW=r! 7H$:tzT}x`928x[g7:z+ӋlRm4 whr! 7H$:tzT}x`RM}N-֤b 'Y^X3KȻM}N-1W;mz+ӋlRm4 wT-U6[`smO0S6'b-#WMIQȌ>Zo(25XܛWGǚ[g7YKG+܎)\U6'mFOsjynG*F6'uqȄ$#0JLyG׍Qa|6mk>qJoi}58o/^g^E}1^[g82m=Shqdz#\pmG"{DI+3#ƨаx N*^G_59O:?mO狞-^/0I,{W5IS4:V.$fI]i_:=Hz>4 ۔%O^+l7لhѣFSl^mn'#r9k)^ѯ'iө&ȩr5S6=-:vI焺#+Ѥ ˎVn8hBM0Q֍pzM3 $1Fp{DI<دF%^h hN0ڎD#b}AT Fr5B\r9FkʱPW|+aLj mOq8:Г~1V3] eQǤ,Դ$okIMjj$`"{z#+Ѥ 9SK69Te^ (9)FkQ}2XF,]9Sr9Ztq8%a$$fIzc^Dx8@ILH39z(9) [|tgV:l_GgYt *4h@GEz)a<*it;IkȒL@Hg痒MSK* z(`Sھ9MwLt qC@GESKE83q>ARjf$Zt4D C)[W8#Z*ib]g-;Zg<%zcչ"jsBoh_?#0Ki10p0d%-^|V2_sO1_983*㎂ܱnYdqKRlT.:V.Z;C}!-슚]:)pϭb|{q{ F *i~m՛AHbCIZfJ:is{DI/LkD`x82-^/0K)ך}!8%R-r7XFjJD/9_00U.!܃F *i~n|M_zτy2^P@Xu hZ*ib]g;5 /sSl^m zcE!ܥ />YcK^i/1M[W:ӧѮA7%+ ˵gSPW9ە?gz!B !oh_ؗDx87H$ƽ L"P"!.烁L0hB$N10p3z# eOttF3L cչ"X8Tq7KLI}Ɨq2snEFUᠠ@`Kܱnc$㎌}Ɨ=2Xy"*6{Z!>YcK(q2oh4 Fq2snEFU4 wt@xp`'tfj()lB9AxIYOXjqmm4qS*%r9LQPU@;YFwǫsELt pCerwwwwwwwwwwwww}M9!ȏRlT 8(D@"!CT-WzӧքsNd_Ռ݆9@*"H D"Li%CKDR&Bd *"Hsr1,7քsEZtԎu_Wze]ھ1}a9s]mSQG{D$t&&pzM3 $1zkI_5JrRlT9 i񂯮&rC >0U 8(D@"!C gZϢ\g2/wj?Iw:|_trԦ>7ā%xo|iӪ>rδe] m_Ii!DII" Ds:: v _k@mr36W!Ȓ*@sr@HL1DIrCǕ&( TPCO49^329!ɐ*(L@ T%9HPP!wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwnY)XN\_\MmAŋs&  `0D0;``>}:Q1sO}q589$fI]i_:=Hz>ʱ ~py r>}24 rDǫ*kk,[ܺ A"9ds:q$ <7)BKO}q5Oj'%oi(k(^GP 5A`Sھ9Ih.i=99V!.ytkw3_ (+ /֝:Ў}=b`YA4h=khQAnܱn10,c奆ӓX8apcIZfJ:Ge8(1B)pP 1QAȁNZܱnG,[E=dC6ېr*_LtwCKh xW{3nUA>Szxm;wAnO9bko#.fIZfI*P 3ƽ[F\ܱnYdCu͹Wqњ9_k19bkhs7u͹Wfܫ /Qbb@Ȅ$-3 %[x?#0KX7H$͊aBU .9FUzM0L͹WLq5ny!$3nUc:ЎhǪ+ _y_δےc s8 /_Yng^m0EFqWͿ %gZ>S6^G-SͩsuX9!Ԧ>|Mw_V3I~NՆ'uNO NFUѮCoV23 <+֝9Վ$e<7 8gZt꾯δeW!෫LvgLaXh|rc=(+w3QwWՌE|h8hqr! 7KLIGZ57H$ƽ龈10p3ohI'(T` EI^=^Ѥ}_443j rŽˢѤ^`'r8=Xg}3:g Ew^gq3D!&WZgW3ΏR8j 0/Qδu_W\qEȄ$#0JLyG׍QᡁgU|M_%ws9/Qά4WA>tc>EF.86Zqמ:F4a?hsFUx_-7q3D!&WZgW3ΏR8j 0/Qδu&/ q5IS6Y0Ѥ XG49Mw[-i5W0Iήf<$& \ےrjqm|%pt9m|+1sy-:zքsE΍/#i5_Whj2Z4wIFa$֙ Ԏ'BxUΜV޴#/wME\xVaȾZo(3_)ORDVoQvqwnXDVnsm?1XDVnsm ?0Iίϖb+mU4:@m=ܧQt@mk:Ўh=RlTu2\-rM3 $ίxgq=x^mPh'ՈoeM4hѣKzЎhNKAvr={ YD!`b,e@ׁ|V2N8,e@ 04-q$Lz#YD!i;S\Qδu_W~|]`q)#P>fo(a9y̿s=Iѣ$0-"4ۨB  M2@Ɉ<_4{D$"5[EUDx8&PDtZ4\ rź Wg qFku*- #Έ92 CѤ}_|#/$YOq3"I1"ɟp'ȬMp $LzτqQBt)^+A~ /##΋FU\wZ_\&UMmqʷIp85=X^c=Mϭqq)#P>fo(a9y̿s=Iѣ$0-;eQLj *@d /ohdV&ע0hf6tzqb`g i5TsnEFU qb+ܳX85I& $@y3ʥ"4۩8ut5I& $@y37 g8V^G[Ec5ӌ?Ѥe^ `Sھ9Mnn;;qFkz*2UKcOqwWIkBoh_z#IFa$5|5\wΏN3^&"1Ik 023_xxNb`gF"i8rfOw֝}}Xքq1>xohZtgIk$$HA@;/Ռ5ZAJpgQM_%];i8j9%a$10p3M3 %W<@n7H$͊cHJ2C q)#P>fo(a9y̿s=Iѣ$0-H`[@HPR$ L,O7KLI(M{oF&6 " g ׊xQ;wxwa'iӪmwUzkhDaW{3_!L}a%Xδ#/z*Mmׂ58tU}^MIZfJ:U}^@1B)pP 1b+/0Iήf<$& 7<քsE.76 s{4D=Xδ#/F_WU}^M;Oj6ZkkV.;*=&iI%(5U[ڽ_W^5^kgGGTeSQSuB*2 ]ܱnYdήf<$& ?<Ԣԛ,J g87 7ͺKiyEFU?۩85ʩͺ`Sھ9Me[[*r*Mmwm*sj5*z# Mm=yLYk>ەFC~Og<];W;ߓδeUFUMmzH(ʩ{3_!L}a%Xδ#/z*2kof|yŶs*GohU5]bS$ ᠠ@c rź W_0`?Ռ]8~yI LnyV3q7\ohmt9@h_Y)zhG4_k/#*2koEFUN&j}psT-U5Lt wwQG{D$[}*-^M{g*k߷y=5heTG"A@,[{p`'"I1"ɟ0*u(&/oY+¬z n7R^GQO碣*6{Oj6ZkknnwS64j}psT-U3KUK_59Mri%Nw=b`YE_WGeeSͪrքsq\FeeQoٛr* ͹V_£Ow)ʣIZfJ:IFa$5&&Qx=&y^5HJ%$-3 $ەz+7*Gee^ "LPbD4 wt@rc$rLqk$ < @~x&f8Ϛ7Jbz^_}*hG4_kVrt^/Zm_ z3\iyp[9'.τ|\ {3nUFb`YETeZ_\&UMmqLt qA7H$35x=b`YETg]bS$ ᠠ@c&D`xQFUWDĉ8h(IZfI*P 3ƽb`YE_W,[{p`/)׳6\U9_k0n&@@807 LyQDCGI&@srMr׌̾!Ard "P;BU rC*&(T9]ۖnJVnJNKAv鉿v^0U*9G!Ȅ$#0JLyG׍Q3UoWcȵے]g? RRl9dK,ܔMzNܔ~6ܱor胈 tfb9פi 㚤%Wή9$fI]i_:=Hz>4< C{Ԭ'.nW# )[g7J[9z8pe&\pmG"{DI+3GO^5G׆nx=X7ax:qmM2\w q|?E\z sy?.{:d෫Lw_άe:ٛr+/FS49V3_3 W^6^_LU0AHbCIZfJ:is{DI/Lk#e3K rź Wg CuHbrwMKLI)D# 5%"i/)\g]bS$ ᠠ@cփٕS[G"{D$tѣ)_M3 %W<@n7H$ƽ\)?M3 $bRD (K,[ܺ,ʩV2N8㖝<剳*K̪w7KLI6ەz3&̫@1B)pP 1r;h;]iՌwhqr! 7KLIGZ57H$ƽFi~IFa$lW RD0d wCgެe3{okЖ+>W(%W#ANbtdqPp[: qQ@nEI^ tILH1ԋ{\&UynR54keQǤ,Դ$okIMjj$`1VK[>:U6_A~L'mOwۨBQx(&(E1"@ D wf=WUKʩͺʷIu&thܱn w wf ['LU0g8Nbtd?dh/֝Lffu ㎢qP--:)ѓK;sX8WsO-7XN^ks/@ORl*4h8!BHL82b zM0T[S /U4e3KZ4a=U9QȄ"*P+LPbD4 wD 9诬o`_½g8'gA\U~z*2UKʩͺ5({;;33Ypp3I}'%_A)8HXE-u")\Z\qqF $$Q0X1uHi@1B)pP 1ܱnc$9LafsSM.4hΡ"RD& &NGX*ⓒ&iI(\q5XgN-zM^g3:΍ .{;v(44#0KiL8㨠 9)tth c$8ut5I& $@y3h`?sѹt%a$YҦ|zc3yM\^Ghfqr8Cgެgors~gq PD"BEIHMcNOqI^{D$t.8FkʱV3[g:moXLfu)\qbOCKzM3 $1`vє. 9)rq;8qR-r:7)BK~b,SKCՌxoϚAaV^:WՈk8qQ@p[8~zok)ѹJ\|fJ_FS48ӌ$ᡀOgRrZ G]sT-U8kE\z#dz,Ett_-7 w< c$ ''EyNIFa$lW? RD0d q#I(,DJFPDcr "LPbD4 qwnXD ,|V2N;qkȒL@Hgx&f8Ϛ7Jbzc35 /w` PPqwCuC_)-T]qÇ8pÇ8pCPS88pÇ8pÇ8pÇ8pAzc35gܡ)DM;BUqIFa$֙ Ԏ'@` bs53G})9-ۦ <%1"{DI+3GO^5G׆PyV!#LffՌ"|z7RyZgՌEPi.J'6=iIQȄ &<{DI/Lkޛ53M3 $1zo0iWDĉ8h(-^|V2_> CkD`"BEIHљM\|Pg]bS$ ᠠ@c,[{p`'"I1"ɟ8Rfct+ͱ33Pg)53'ȍ/#?=1ϹCPS8yYXZ!~ CkC8pÇ8pÇ8pÇ6u68pÇ8pÇq;%9N fͺ)zMBXA5HJ6=FQȄ"0T!"IcѮ "LPbD.,[ܺ#g0IEӌ6=Eӌ6Db0ڌ.8uqȄ$#0JLyG׍Q8 N{ng^mYnxK99$fI]i_:=Hz>4>ZtefmՌ+fͺ)zMFܔ=XΤ[=orn? Ryt$ ˀ8,|ȿ6'!㔊`syBM3 $ίxgq=x^so>ܔ=XΤ[ qAn/"I1"ɟEHή="mOuX8㎌fj_Ռ:ok{9 L"Le%"5:U='%z#I(,DJF8(1B)8D`"BEIHѕ#&(E1"@rqs:q$ <00瑟R-ri%F9h9h9!>t>[ՌES~g3/LffPOQs W{ӌ$@o<ے]gWMF U=냚jJru2\-=Wnܔ!wwwwwwwwwwwwwwNY9Dx4w&m:cgX$9ZՌHuNC{QmxI9@*"H D"Li%CI P9Q'O9uLrC H@ &<"!ApXB  P9i{9\9f_ 92E (!*! *.7%+ 61곜aac=ELX4˿X-Tje+ .rwwwwwwwwwwwww}ڧ B܃GHwj% !B"DIr(V߳g>յNgsv^&ːr (TD@8D" J9!Ȓ*@sr@HL1DIrCǕ&( TPCO49^329!ɐ*(L@ T%9HPP!wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwnY)XN]ڧ Baŋs&  `0D0;``>}99LcS^g[̓r=RrCEITd"{DI+3GO^5G׆nyV!Mz=Eo9-ۦwˉP  ql)Iu")%|%|cr.%G2Zѵ*3S֩.e3~]aoש6ZW9ZtK. RkGe=grd:ЎuNZte7wt=[37)./6/+a9p|0߫ɐ B87yp6F>YϊfX{9淫 gD AL]"}Lʱzf&f9Ӧz7)BKڍ^EdZO^f9̋ /˞s!~&UٷxhWՈoj^g9̋ /˞,\_IF.6m/LffՌNKAvrS\Wc<#"r8a%X)%'%t6 ˆ˿fwU3$7yp}a9wub7a9spyY/"/P Dĉ\u~:{DI+3GO^5G׆^y*=H ף+|$ѣK;eg7Iή*{sCS\c:)Y_c)V~mӛ]ܱojF woktF LH0gc$CHJ5 /ZXI~1B) Ϣ0LPbD#LT&&(E1"@1B) 2^ I\4]0[-z#DIX;dUXS]"@b$xh)bS$ {7H$:၀O<Y?+zXS/q^\ wnI|^1 bՏ'%{YFa F"@b$]Zw B|`7a9xwF't{=iӉP  ql)IӒԎq-Ghڕn)Ԝ4r꾸U9v^tBOgK "0LPbD.}X6 zЎ;sj5w̯})NJds]Ajr{9F1A_V3q~UGwAT~k[-8_0`?Ռ*>|'J 9ATeYOq- փ;*}'%_A)#g:bzzHxoW_ ;RrZ eR-r-.80H`'3"I1"ɟ'!6cyISoxᬏQPTiy@-:X-Tje+ ʷIp >I_5aN\.ܳrRTsS\r!ͤk-@gM@w9GףQhG8?Lk\vS\q!ǫ `VnOa,?ƹ(_J$i)7P 1n[{;dOK8+6#wmG=1X՛(1]UwF0p^<OkHIs)%pRn1ᠠ@gGiw+9c29 LS}܃GHxjf*軐r " TD!3 fleXz]rUk%xD0o?{䯫|7uErC$ #$D@P!Bl+ giIqArd "P;-w *? [Ռ:OrC*&(T;39 rJr>0U7~0EqǢ{CwvW<- <+hSkazxo>zg|2gWE_{/BKK»:4^.9*-}?1X=s^‚`'ʷIp*Gq(/צ5$JM<4 GUK;UKOwh8eBvT|%wwwwwwwwwwwwwwv"<@;ΏR9߻ r " TD!%\Ԭ g)>nyG;arC$ #$D@P 9EHrC H@ &<"!ApXB  P9i{9\9f_ 92E (!*! *.ڦ.. "Gݹ!ʷIyԌ̙yXN_gZXI~#x35WZtrOsb})3n|5;rg5#3&rA}k- o rqvrU}a9sP_XN^GRUx,!*jLCa]<0ZL3 >Gԛ-G+04/),k+֋}m~II*1P\ ^GCw x-1 Zx{zwXr9rՌk-xkRl+ gZ/_\*֋ QTeXXzq^E$@ttF *A2DDў;/0`?ՌbO5zӧ? R%G2Zѵ*3S9-ۣ iyq6}p;>rF!,1= D`ĉ]=_V3ͪr޴#PU9XNZЎ;AT~k@PU=nz4P+ѢZrG>g4BmY)XNZ`Sھ9ڧ B6#or1,{WO 9Y0{W"1}pe냑 U=.Ǟھ2g,sZn H k>%o$` /םaX՝a֝a&` 2vT./usr/es/sbin/cluster/samples/oracle/optionsaa$$# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/options 1.5 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # # "@(#)43 1.5 src/43haes/usr/sbin/cluster/sa/oracle/sbin/options, hacmp.assist.oracle, 61haes_r714 6/14/05 12:58:55" # # Comments require a space after the # # # The file is installed on both nodes with the oracle assist. It contains # some default values, and values are updated during the execution, for use # as defaults in any subsequent executions. It is not necessary to sync this # file, since key information will be stored in the odm. # # The format is "keyword" "value" # optional comment lines begin with "#" follwed by one or more spaces # # Specific default values for the oracle assist: # # APPVG - this specifies the shared volume group which will become part of the # resource group used to keep the service highly available APPVG ora_vg # APPFS - this is the filesystem name (which is part of the shared volume group) # which contains the shared data for this assist APPFS /ora_cmd00fs # APPSERV - Name of the application server. APPSERV # SVC_IP_LABEL This is the ip addr that gets passed around to the active node SVC_IP_LABEL # APAR_LIST This is a list of apars in the form IYnnnnn IYnnnnn IYnnnnn. APAR_LIST # SWAP_SPACE oracle requires 1535MB of swap space SWAP_SPACE 1535 # VAR_SPACE clverify requires 25MB of var space VAR_SPACE 25 # TMP_SPACE oracle requires 400MB of tmp space TMP_SPACE 400 # USR_SPACE hacmp requirement USR_SPACE 2.5 # FS_SIZE oracle requires 4.3GB for the shared FS, use 5GB (5120MB) FS_SIZE 5120 # PRIM_NODE is the hostname of the primary node in the cluster PRIM_NODE # SECOND_NODE is the hostname of the secondary node in the cluster SECOND_NODE # JAVA_HOME is the location of java files JAVA_HOME /usr/java14 # ZIP_HOME is the location of the java cryptograpy extension zip file # if different from JAVA_HOME ZIP_HOME # ORACLE_HOME is the location of the oracle home on the shared disk ORACLE_HOME /ora_cmd00fs # ORACLE_INSTALL is the location of the rootpre.sh and runInstaller.sh programs ORACLE_INSTALL /dev/rmt0 # ORACLE_SCRIPTS location of the start and stop scripts shipped with the assist. ORACLE_SCRIPTS /usr/es/sbin/cluster/sa/oracle/scripts # APPRG selected from a list of resource groups defined. APPRG oracle_sa_rg # APPLVdata is the logical volume for the data disk APPLVdata # APPLVcmd is the logical volume for the cmd disk APPLVcmd # APPFSdata is the filesytem for the data disk APPFSdata # APPFScmd is the filesytem for the cmd disk APPFScmd  k|%o$/םaX՝a֝a&2vT./usr/es/sbin/cluster/samples/oracle/READMEaa$$# "@(#)41 1.7 src/43haes/usr/sbin/cluster/sa/oracle/sbin/README, hacmp.assist.oracle, 61haes_r714 6/29/05 09:25:38" # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/README 1.7 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG This is the README for the Oracle Assist program. The assist configures an HACMP two node cluster and helps install and configure the Oracle Infrastructure Tier software. It is assumed that this program is being run by root from the primary node. You will need to provide the hostname of the second node, and the HACMP service IP address. See the Install Oracle section below for requirements specific to Oracle. The Oracle emctl requires that the DISPLAY environment variable be non-null on the cluster nodes. There is one optional commandline flag, -v. This Verbose flag will chart the progress and display some results. The options file contains default values for some attributes of the assist. The user may customize this file to increase Filesystem sizes, change the application start and stop script locations, or alter other attributes. There is a log file, and a backup log file, /var/hacmp/log/oracle_sa.log and /var/hacmp/log/oracle_sa.log.bak Other useful logs are /tmp/hacmp.out /tmp/cspoc.out /var/hacmp/clverify/clverify.log /smit.log These are the tasks to create the two node cluster. system check - This task examines the Swap(paging) Space, /usr, /tmp and /var free space that is required for the Oracle installation. configure basic cluster - If there is no cluster defined, this task will create a two node cluster using the node you are running on as the primary node. You will need to enter the hostname for the secondary node. You can perform this task Automatically or by using SMIT. It will discover the available networks and volume groups. It will create the user "oracle" and the group "dba" on the cluster nodes. prompt and validate vg - You can choose an existing shared volume group or select "new_name" and create a new shared volume group. It then creates a volume group or validates an existing volume group. If you are creating a shared volume group, you will need to select the shared physical volumes that will be in the volume group. Select from the list, one at a time. Hit Enter without selecting when done. This volume group will be recognized on the secondary node. You can choose whether to use one or two disks. Oracle recommends two disks, one for the database, one for the commands. If you are using luns (san array) you might prefer one disk. prompt and validate fs - Select the filesystem names you wish to use on the shared volume group. Oracle requires 4.3GB of space, which is 860,000 512 blocks. The assist will create 2 Logical Volumes and two Filesystems, with 5 GB each. They will be located on the disk(s) that you selected for the volume group. After the filesystems are verified, they are mounted. configure application server - Select a name for HACMP to reference the Infrastructure Tier application and the scripts that start and stop it. If you choose automatic for this task, it will use the scripts that are shipped with the assist. You will be put into "vi" so you can insure that they match the software levels and the ORACLE_HOME that you are using for the Oracle install process. define service IP label - The service IP address can be configured in a resource group to make it highly available across multiple nodes. This is referred to as the Virtual IP (VIP) in Oracle documentation. In addition to the IP address, you will need to specify the network on which this IP address will be bound. configure resource group - This task will configure the Resource Group for this cluster. If there is no resource group for this cluster, you will create one. Configure the resource group by adding the volume group, service IP_label and the application server. define private network - Oracle requires a private network, select one from the list of networks that have been discovered. You can perform this automatically or by choosing SMIT. If you use SMIT, be sure to select the Network attribute "private". This network cannot be the network on which the service IP label/Address will be bound. verify and sync - This task will verify the cluster configuration and attempt to "auto-correct" any problems that are found. It then syncs the configuration with the secondary node. You may choose to perform this automatically or with SMIT. If you use SMIT, select "Interactive" to correct errors found during verification. start hacmp - This task will start HACMP cluster services which makes the cluster ready for Oracle installation. You may do this automatically, or with SMIT. If you select SMIT, select both nodes for "Start Cluster Services on these nodes" install Oracle - Once the HACMP cluster is configured and running, Oracle can be installed. It requires a user group called "dba", and a user called "oracle". If they do not exist, create them with smitty cl_usergroup. Oracle uses the 1521 port, if it is not free, you will be notified. Then enter the DISPLAY variable so that the "Oracle Universal Installer" can run on your terminal. Oracle is shipped with a program called rootpre.sh, which has to run on both nodes. The program needs to know the location of this script. You may find it on the Oracle Disk1. This is also the location of "runInstaller". Oracle also requires the "Java Cryptography Extension" in jce-1_2_2.zip, which is available from the Java web site. rootpre.sh checks the system for space and software requirements specific to Oracle. runInstaller will start the "Oracle Universal Installer" (OUI) GUI. Be sure to select "CFC Cold Failover Cluster" during the installation, and select shared filesystems for the commands directory, inventory directory, and the database directory. You can run the OUI installer without the assist by using the "runInstaller -ignoreSysPrereqs" command as user oracle. Starting the Oracle Infrastructure Tier - After the Oracle installation process completes, it is started by stopping and starting the cluster from the smitty cl_cm_startstop_menu panel. e g k%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/oracleAA kT%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/oracle/sbinREAAA k %oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/oracle/scriptsAA k!%om/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/scripts/infra_startsmm#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/oracle/scripts/infra_start 1.5 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # "@(#)45 1.5 src/43haes/usr/sbin/cluster/sa/oracle/scripts/infra_start, hacmp.assist.oracle, 61haes_r720, 1539B_hacmp720 9/11/15 10:53:58" # # The ias scripts have to point to the oracle directory where the # commands are installed. Oracle calls it the ohome directory. # The customer edits the ias files in the assist. # /usr/bin/su - oracle << ! /usr/es/sbin/cluster/sa/oracle/scripts/startias904infra.sh echo echo Completed iAS 904 Infrastructure Startup @ `date` ! u ma kH/"%om/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/scripts/infra_stopsmm#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/oracle/scripts/infra_stop 1.5 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # "@(#)46 1.5 src/43haes/usr/sbin/cluster/sa/oracle/scripts/infra_stop, hacmp.assist.oracle, 61haes_r720, 1539B_hacmp720 9/11/15 10:54:13" # # The ias scripts have to point to the oracle directory where the # commands are installed. Oracle calls it the ohome directory. # The customer edits the ias files in the assist. # /usr/bin/su - oracle << ! /usr/es/sbin/cluster/sa/oracle/scripts/stopias904infra.sh echo echo Completed iAS 904 Infrastructure Stop @ `date` ! ~B k#%o/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/scripts/startias904infra.sh#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/scripts/startias904infra.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # "@(#)47 1.4 src/43haes/usr/sbin/cluster/sa/oracle/scripts/startias904infra.sh, hacmp.assist.oracle, 61haes_r714 6/16/05 22:41:14" export ORACLE_HOME=/ora_cmd00fs export ORACLE_SID=iasdb export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$PATH #emctl requires that the display variable is not null if [[ -z ${DISPLAY} ]]; then export DISPLAY="0:0" fi echo "Starting Oracle Server..." sqlplus "/ as sysdba" << ! startup quit ! echo echo "Starting Oracle Server Listener..." echo lsnrctl start lsnrctl start echo echo "Starting EM..." echo emctl start em emctl start em echo echo "Starting iAS Infrastructure Processes..." echo opmnctl startall opmnctl startall echo a k$%oN/םaX՝a֝a&N2vT./usr/es/sbin/cluster/sa/oracle/scripts/stopias904infra.sh#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/scripts/stopias904infra.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # "@(#)48 1.3 src/43haes/usr/sbin/cluster/sa/oracle/scripts/stopias904infra.sh, hacmp.assist.oracle, 61haes_r714 4/15/05 14:09:29" export ORACLE_HOME=/ora_cmd00fs export ORACLE_SID=iasdb export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH echo "Stoping iAS Infrastructure Processes..." echo opmnctl stopall opmnctl stopall echo echo "Stoping EM..." echo emctl stop em emctl stop em echo echo "Stoping Oracle Server Listener..." echo lsnrctl stop lsnrctl stop echo echo "Stoping Oracle Server..." sqlplus "/ as sysdba" << ! shutdown abort quit ! echo ct kt#o$/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/sbin/ASConfigs9$$# @(#)13 1.2 src/43haes/usr/sbin/cluster/sa/oracle/sbin/ASConfig.sh, hacmp.assist.oracle, 61haes_r714 3/9/06 13:01:32 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/ASConfig.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #----------------------------------------------------------------------------- # Global Definitions: #----------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oracle/sbin/IO . /usr/es/sbin/cluster/sa/oracle/sbin/ASUtilities #----------------------------------------------------------------------------- # Functions: # osaASDumpCfg # osaASGetCfg # osaASGetResourceGroups # osaASGetMetadata # osaASGetNodes # osaASGetResource # osaASGetConfiguredInstances #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Function: # osaASDumpCfg # # Purpose: # Dump allASInstances and allASComponents to App Discovery database # `allASInstances' is just an array of strings (instance names) # `allASComponents' contains instance name with index as key and a # component as value. # # For instance, # allASComponents["as1_0"]="OC4J" # allASComponents["as1_1"]="OID" # allASComponents["as1_2"]="SSO" # where, `as1' is the AS instance name, consisting of three components # OC4J, OID and SSO. # # Used this since there is no easy way to handle array of arrays. # The following function is called after one has parsed the OPMN # configuration file, i.e., both arrays have been instantiated. # # Arguments: # (1) AS Instance Name # (2) Application Name (Smart Assist) for storing config data # # Returns: # 0 on success # 1 on failure # function osaASDumpCfg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset id=$1 typeset app_id=$2 typeset -A allcomps typeset comp typeset instance_name=${id//\./\_} typeset -i x=0 for comp in ${!allASComponents[*]}; do component=${comp##$instance_name} if [[ $component != $comp ]]; then # match found allcomps[$x]=${allASComponents[$comp]} (( x+=1 )) fi done if [[ (-z $id) || (${#allcomps[*]} -le 0) ]]; then osaError "No components for given instance ["$id"] found." else claddsaapp -a $app_id components="${allcomps[*]}" fi } #----------------------------------------------------------------------------- # Function: # osaASGetCfg # # Purpose: # Fetches component names that belong to a given instance name. # # Arguments: # (1) id: Instance name/ID whose components we are looking for. # (2) allcomps: Array name which is populated with all components for # `inst' # Returns: # 0 on Success # 1 on failure # function osaASGetCfg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset id=$1 typeset -n allcomps=$2 typeset comps=$(clquerysaapp -a $id components | sed 's/^components=//') typeset -i index=0 for comp in $comps; do allcomps[$index]=$comp (( index = $index + 1 )) done } #---------------------------------------------------------------------------- # Function: # osaASGetResourceGroups # # Purpose: # Get a list of HACMP resource groups for the specified application name # # Arguments: # (1) Application Name # # Output: # List of HACMP resource groups # # Returns: # 0 on success # 1 on failure # function osaASGetResourceGroups { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 typeset name value odmget -q "sa_key=$appid" HACMPgroup | while IFS='=' read name value do name=$(echo $name) [[ "$name" == "group" ]] && { value=${value//\"/} echo $(echo $value) } done } #---------------------------------------------------------------------------- # Function: # osaASGetMetadata # # Purpose: # Get HACMPsa_metadata for a particular HACMP application, name name/value # pair. # # Arguments: # (1) Application Name # (2) Name of the name/value pair # # Output: # Value(s) of the name/value pair # # Return: # 0 on success # 1 on failure # function osaASGetMetadata { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 typeset name=$2 clquerysaapp -a $appid | grep $name | awk -F= '{ print $2 }' } #---------------------------------------------------------------------------- # Function: # osaASGetNodes # # Purpose: # Get a list of nodes from resource groups that belong to the application # # Arguments: # (1) Application Name # # Output: # List of nodes, list of nodes is ordered based on appearance in # participating node list. # # Returns: # 0 on success # 1 on failure # function osaASGetNodes { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 typeset arrNodes typeset RGS=$(osaASGetResourceGroups $appid) # # Get a list of nodes for the application, need to preserve the order # in which the nodes are presented in the resource group list(s) # for rg in $RGS; do set -a eval $(clvt query resource_group $rg | grep NODES) set +a for nodeA in $NODES; do found=0 for nodeB in $arrNodes; do [[ "$nodeA" == "$nodeB" ]] && found=1 done (( $found == 0 )) && arrNodes="$arrNodes $nodeA" done done echo $arrNodes } #---------------------------------------------------------------------------- # Function: # osaASGetResource # # Purpose: # Get the value of a particular resource type given the application name # # Arguments: # (1) Application Name # (2) Resource type (i.e. SERVICE_LABEL) # # Output: # List of resources defined to HACMP of the specified type # # Return: # 0 on success # 1 on failure # function osaASGetResource { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 typeset rName=$2 typeset RGS=$(osaASGetResourceGroups $appid) for rg in $RGS; do clvt query resource_group $rg | grep $rName | awk -F= '{ print $2 }' | sed -e "s/\"//g" done } #---------------------------------------------------------------------------- # Function: # osaASGetConfiguredInstances # # Purpose: # Output a list of already configured to HACMP AS instances (AFC or CFC) # # Arguments: # n/a # # Returns: # 0 on success # function osaASGetConfiguredInstances { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -n dbinsts=$1 typeset -i index=0 /usr/bin/odmget -q "name=ORACLE_AS_INSTANCE" HACMPsa_metadata | while IFS='=' read name value; do name=$(echo $name) [[ "$name" == "value" ]] && { value=$(echo $value) dbinsts[$index]=${value//\"/} (( index += 1 )) } done return 0 } BOSE_LO kZ#o$/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/sbin/ASMonitor9$$# @(#)16 1.4 src/43haes/usr/sbin/cluster/sa/oracle/sbin/ASMonitor.sh, hacmp.assist.oracle, 61haes_r714 4/6/06 20:46:13 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/ASMonitor.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG . /usr/es/sbin/cluster/sa/oracle/sbin/ASGlobals . /usr/es/sbin/cluster/sa/oracle/sbin/ASUtilities #---------------------------------------------------------------------------- # Functions: # osaASShowStatus # osaFindAliveComponents # osaCheckOPMN #---------------------------------------------------------------------------- typeset STATUS_OK=0 typeset STATUS_NOTOK=1 typeset AS_STATUS_DOWN="Down" typeset AS_STATUS_ALIVE="Alive" #---------------------------------------------------------------------------- # Function: # osaASShowStatus # # Purpose: # Return the status of a given component in a given instance. # # Arguments: # (1) inst: Instance name. # (2) comp: Component name. # # Returns: # 0 on Success # 1 on failure # function osaASShowStatus { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset inst=$1 typeset comp=$2 typeset status=1 typeset cmp # for BI we check individual components of it if [[ $comp == "BI" ]]; then typeset -i bifound=0 for cmp in ${AS_BI_COMPS[*]}; do typeset c # remove the instance name from the component for c in ${aliveASComponents[*]}; do c=${c/*\=\>/} if [[ $c == $cmp ]]; then status=0 (( bifound = $bifound + 1 )) break fi done done # next, validate that all BI components have been found. if [[ $bifound -eq ${#AS_BI_COMPS[*]} ]]; then status=0 else status=1 fi else # for others we do not need to worry about individual parts typeset c for c in ${aliveASComponents[*]}; do # remove the instance name from the component c=${c/*\=\>/} if [[ $c == $comp ]]; then status=0 break fi done fi return $status } #---------------------------------------------------------------------------- # Function: # osaFindAliveComponents # # Purpose: # Find out all alive components for a given instance. This will be # stored in the global variable `aliveASComponents.' # This shall read status for all components. # # Arguments: # (1) inst : [optional] instance name for which we want to look for alive # components. If `null' all instances are looked up. # # Returns: # n/a # function osaFindAliveComponents { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset instance osaCheckOPMN $OPMN_BINPATH/opmnctl status -noheaders -fsep : -fmt %ins%cmp%sta | { set -A aliveASComponents IFS=":"; typeset inst comp stat typeset -i x=0 while read inst comp stat; do if [[ (! -z $stat) && ($stat == "Alive") ]]; then # If an instance name was passed in we only take if [[ -n $instance ]]; then # into account component status for the given instance. if [[ "$inst" == "$instance" ]]; then aliveASComponents[$x]=$inst"=>"$comp (( x = $x + 1 )) fi else # Otherwise capture component status for all instances # returned by OPMN. aliveASComponents[$x]=$inst"=>"$comp (( x = $x + 1 )) fi fi done unset IFS } } #---------------------------------------------------------------------------- # Functions: # osaCheckOPMN # # Purpose: # Following function checks to see if OPMN is alive. If it is dead for # some reason, it shall start it using: opmnctl start # # Arguments: # n/a # # Returns: # 0 success # <0 failure # function osaCheckOPMN { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x $OPMN_BINPATH/opmnctl ping > /dev/null 2>&1 if [[ $? -ne 0 ]]; then /usr/bin/su - oracle -c "$OPMN_BINPATH/opmnctl start" fi } tric k{#o$h/םa՝a֝a&h2vT./usr/es/sbin/cluster/sa/oracle/sbin/ASControl9$$# @(#)14 1.6 src/43haes/usr/sbin/cluster/sa/oracle/sbin/ASControl.sh, hacmp.assist.oracle, 61haes_r714 4/11/06 23:21:22 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/ASControl.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #----------------------------------------------------------------------------- # Functions # osaASControl # osaASCompStart # osaASCompStop #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Function: # osaASControl # # Purpose: # Runs an OPMN start or stop command for a speficic component in a # specific instance. # # Arguments: # (1) type: Type of OPMN command (either: $OPMNCTL_START_ARG OR # $OPMNCTL_STOP_ARG) # (2) inst: Instance name. # (3) comp: Component name. # # Returns: # 0 on Success # 1 on failure # function osaASControl { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset type=$1 typeset inst=$2 typeset comp=$3 # # If type is attempting to start OPMN processes, ensure # OPMN is started itself # if [[ "$type" == "startproc" ]]; then $OPMN_BINPATH/opmnctl ping 2>/dev/null >/dev/null if (( $? == 2 )); then /usr/bin/su - oracle -c "$OPMN_BINPATH/opmnctl start" fi fi /usr/bin/su - oracle -c "$OPMN_BINPATH/opmnctl $type ias-component=$comp" | while read line; do log_msg $line done # using ASMonitor osaFindAliveComponents $inst osaASShowStatus $inst $comp return $? } #----------------------------------------------------------------------------- # Function: # osaASCompStart # # Purpose: # Starts an AS component # # Arguments: # (1) inst: Instance name # (2) comp: component name # # Returns: # 0 if Successful # 1 otherwise # function osaASCompStart { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset inst=$1 typeset comp=$2 typeset ret=0 if [[ $comp == "BI" ]]; then typeset cmp for cmp in ${AS_BI_COMPS[*]}; do osaASControl startproc $inst $cmp (( ret = $ret + $? )) done else osaASControl startproc $inst $comp ret=$? fi if [[ $ret -eq 0 ]]; then log_msg "Started $inst:$comp successfully." return 0 else osaError "Unable to start $inst:$comp." return 1 fi } #----------------------------------------------------------------------------- # Function: # osaASCompStop # # Purpose: # Notifies if a component is alive or not. # # Arguments: # (1) inst: Instance name # (2) comp: component name # # Returns: # 0 if Successful # 1 otherwise # function osaASCompStop { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset inst=$1 typeset comp=$2 if [[ $comp == "BI" ]] then typeset cmp for cmp in ${AS_BI_COMPS[*]} do osaASControl stopproc $inst $cmp (( ret = $ret + $? )) done else osaASControl stopproc $inst $comp ret=$? # Determine if there are any alive components remaining osaFindAliveComponents $inst [[ -z "${aliveASComponents[*]}" ]] && { # if not stop the OPMN daemon since no other # processes are running /usr/bin/su - oracle -c "$OPMN_BINPATH/opmnctl shutdown" } fi if (( $ret <= 1 )) then log_msg "Stopped $inst:$comp successfully." return 0 else osaError "Unable to stop $inst:$comp." return 1 fi }  k"N#o$/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/sbin/ASGlobals9$$# @(#)15 1.1 src/43haes/usr/sbin/cluster/sa/oracle/sbin/ASGlobals.sh, hacmp.assist.oracle, 61haes_r714 3/7/06 10:51:18 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/ASGlobals.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG FPATH=$FPATH:/usr/es/lib/ksh93/aix FPATH=$FPATH:/usr/es/lib/ksh93/hacmp [[ "$VERBOSE_LOGGING" == "high" ]] && { PS4='$LINENO |' set -x } # GLOBALS typeset -A allASInstances typeset -A allASComponents set -A aliveASComponents set -A AS_BI_COMPS AS_BI_COMPS=(ReportsServer Discoverer Personal) # End of GLOBALS  k8#o$'/םa՝a֝a&'2vT./usr/es/sbin/cluster/sa/oracle/sbin/ASUtilities4infra.$$# @(#)17 1.3 src/43haes/usr/sbin/cluster/sa/oracle/sbin/ASUtilities.sh, hacmp.assist.oracle, 61haes_r714 4/13/06 21:37:27 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/ASUtilities.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oracle/sbin/IO #---------------------------------------------------------------------------- # Functions: # osaSetASEnvs # osaASFindComps # osaASGetVGs # osaASFindInstances #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Functions: # osaSetASEnvs # # Purpose: # Should be called before any AS-related operations are performed. # It is also VERY IMPORTANT to call (or re-call) it if $ORACLE_HOME # has been modified in current process and future operations are # going to be performed in this process. # # Arguments: # (1) ORACLE_HOME # # Returns: # 0 success # <0 failure # function osaSetASEnvs { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x if [[ -n $1 ]]; then ORACLE_HOME=$1 export ORACLE_HOME fi OSA_OPMN_CONF_FILE=$ORACLE_HOME/opmn/conf/opmn.xml OPMN_BINPATH=$ORACLE_HOME/opmn/bin export OSA_OPMN_CONF_FILE OPMN_BINPATH } #---------------------------------------------------------------------------- # Function: # osaASGetConfigChecksum # # Purpose: # Obtain the opmn.xml checksum to determine if the opmn configuration # file has changed since the last time we've run verification # # Arguments: # n/a # # Returns: # 0 on success # <0 on failure # function osaASGetConfigChecksum { typeset m n file [[ ! -f $OSA_OPMN_CONF_FILE ]] && return 1 /bin/cksum $OSA_OPMN_CONF_FILE | read m n file echo $m-$n return 0 } #---------------------------------------------------------------------------- # Function: # osaASFindComps # # Purpose: # Find installed components (i.e., resource groups for AS). # Done by looking up Oracle AS components configured within # $ORACLE_HOME/opmn/conf/ # # Arguments: # n/a # # Output: # List of Oracle Components installed # # Returns: # 0 success # function osaASFindComps { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -A allASInstances typeset -A comps typeset line expr instance component index [[ ! -f $OSA_OPMN_CONF_FILE ]] && return 1 while read line; do if [[ -z $instance ]]; then # not in an instance section yet # just keep looking for more the instance section expr=${line##""} # clean up instance name # echo "Instance definition found for: " $instance fi elif [[ $line == "" ]]; then osaASPushInstance $instance comps unset instance unset comps else # we are in an instance section so we now look for components expr=${line##" _ typeset instance_name=${inst//\./\_} for index in ${!compref[*]}; do key=${instance_name}"_"${index} allASComponents[$key]="${compref[$index]}" done } # Name : ASUtilities::osaASGetProps() # Description: Get properties related to specific component. # Arguments: # (1) name: component name # Returns: # hash of properties specific to given component #---------------------------------------------------------------------------- # Function: # osaASGetVGs # # Purpose: # Returns the Volume Group containing $ORACLE_HOME # # Arguments: # -none- # # Returns: # Returns(echos) a VG name # function osaASGetVGs { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset vg=$(KLIB_AIX_get_vg_by_path $ORACLE_HOME) echo $vg } #---------------------------------------------------------------------------- # Function: # osaASFindInstances # # Purpose: # Find the Oracle Instances (Application Server) # # Arguments: # n/a # # Output: # list of instances # # Returns: # n/a # function osaASFindInstances { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x osaASFindComps typeset inst for inst in ${allASInstances[*]}; do echo $inst done } i k(8#o$/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/sbin/DBGlobalss$$# @(#)21 1.2 src/43haes/usr/sbin/cluster/sa/oracle/sbin/DBGlobals.sh, hacmp.assist.oracle, 61haes_r714 1/7/09 03:26:54 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/DBGlobals.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2009 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG . /usr/es/lib/ksh93/func_include FPATH=$FPATH:/usr/es/lib/ksh93/aix #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- OSA_SHROOT=/usr/es/sbin/cluster/sa/oracle/sbin export PATH=$ORACLE_HOME/bin:$PATH set -A allDBListeners # End of GLOBALS  kꚰ#o$/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/sbin/DBInstanceMonitor.$$# @(#)22 1.3 src/43haes/usr/sbin/cluster/sa/oracle/sbin/DBInstanceMonitor.sh, hacmp.assist.oracle, 61haes_r721, 1620B_hacmp721 10/7/15 11:34:01 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r721 src/43haes/usr/sbin/cluster/sa/oracle/sbin/DBInstanceMonitor.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oracle/sbin/DBUtilities . /usr/es/sbin/cluster/sa/oracle/sbin/DBStatus #---------------------------------------------------------------------------- # Function: # osaDBShowStatus # # Purpose: # Shows status of a DB instance # # Arguments: # n/a # # Returns: # 0 if all components of DB instance are active # 1 otherwise # function osaDBShowStatus { [[ -z $(whence clodmget) ]] && export PATH=$PATH:/usr/es/sbin/cluster/utilities eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == high ]] then PS4_TIMER=true PS4_FUNC=oraDBShowStatus set -x version='1.3' fi typeset -i stat=0 typeset -i sqlstat=0 typeset -i procstat=0 typeset -i lisnstat=0 osaSQLStatus sqlstat=$? if (( $sqlstat != 0 )) then log_msg "The SQL component of the DB instance is unavailable" fi osaProcStatus procstat=$? if (( $procstat != 0 )) then log_msg "The Proc component of the DB instance is unavailable" fi osaListenerStatus lisnstat=$? if (( $lisnstat != 0 )) then log_msg "The Listener component of the DB instance is unavailable" fi log_msg "[SQL status: "$sqlstat"], [Process status: "$procstat"], [Listener status: "$lisnstat"]" if (( $sqlstat == 0 && $procstat == 0 && $lisnstat == 0 )); then log_msg "Overall DB Instance is fully functional." return 0 fi }  k #o$</םa՝a֝a&<2vT./usr/es/sbin/cluster/sa/oracle/sbin/DBStatuseM$$# ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r721 src/43haes/usr/sbin/cluster/sa/oracle/sbin/DBStatus.sh 1.18 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2016 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/DBStatus.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- PS_CMD="/usr/bin/ps" # If we were running on the global WPAR we could use the following "enhanced" # "ps." #typeset PS_CMD="/usr/bin/ps -@ " #---------------------------------------------------------------------------- # Functions: # osaProcStatus # osaDBGetDefProcs # osaSQLStatus # osaListenerStatus # osaSpecListenerStatus #---------------------------------------------------------------------------- # Function: # osaProcStatus # # Purpose: # Notifies if a process is alive or not. # # Arguments: # (1) names: process names in an array form # # Returns: # 0 if alive # >0 otherwise # function osaProcStatus { if [[ $VERBOSE_LOGGING == "high" ]] then PS4_FUNC=osaProcStatus set -x fi typeset appname=$1 typeset -A realprocs osaLoadAllProcs realprocs; typeset -A pnames osaDBGetManProcs pnames $appname # Now compare mandatory process list with current process list typeset -i nfound=0 # number of mandatory processes not found typeset -l p for p in ${pnames[*]}; do if [[ -z ${realprocs[$p]} ]]; then # : Mandatory DB Process \""$p"\" NOT found. # user_msg 50 11 $p (( nfound = $nfound + 1 )) fi done return $nfound } #---------------------------------------------------------------------------- # Function: # osaDBGetManProcs # # Purpose: # The following function returns a list of mandatory processes # for a given ORACLE_SID. # # Arguments: # (1) hash array of processes # # Returns: # n/a # function osaDBGetManProcs { if [[ $VERBOSE_LOGGING == "high" ]] then PS4_FUNC=osaDBGetManProcs set -x fi typeset -n pnames=$1 typeset appname=$2 set -a DBVERSION=$(osaDBGetVersion) set +a export DBVERSION osaDBGetDefProcs pnames } #---------------------------------------------------------------------------- # Function: # osaDBGetDefProcs # # Purpose: # Returns a list of manditory processes based on the database # version # # Arguments: # (1) array to return list of processes # # Returns: # n/a # function osaDBGetDefProcs { if [[ $VERBOSE_LOGGING == "high" ]] then PS4_FUNC=osaDBGetDefProcs set -x fi typeset -n pnames=$1 log_msg "DB Version: "$DBVERSION if [[ "${DBVERSION/\.*/}" == "18"* || "${DBVERSION/\.*/}" == "19"* ]]; then log_msg "Loading Oracle $DBVERSION process list DBW LGWR CKPT SMON PMON RECO PMAN LREG MMON MMNL" pnames=( [DBW]=DBW [LGWR]=LGWR [CKPT]=CKPT [SMON]=SMON [PMON]=PMON [RECO]=RECO [PMAN]=PMAN [LREG]=LREG [MMON]=MMON [MMNL]=MMNL) elif [[ "${DBVERSION/\.*/}" == "12"* ]]; then log_msg "Loading Oracle $DBVERSION process list DBW LGWR CKPT SMON PMON MMAN RECO LREG MMON" pnames=( [DBW]=DBW [LGWR]=LGWR [CKPT]=CKPT [SMON]=SMON [PMON]=PMON [MMAN]=MMAN [RECO]=RECO [LREG]=LREG [MMON]=MMON) elif [[ "${DBVERSION/\.*/}" == "10" || "${DBVERSION/\.*/}" == "11" ]]; then log_msg "Loading Oracle $DBVERSION process list DBW LGWR CKPT SMON PMON MMAN RECO" pnames=( [DBW]=DBW [LGWR]=LGWR [CKPT]=CKPT [SMON]=SMON [PMON]=PMON [MMAN]=MMAN [RECO]=RECO) elif [[ "${DBVERSION/\.*/}" == "9" ]]; then log_msg "Loading Oracle $DBVERSION process list DBW LGWR CKPT SMON PMON RECO" pnames=( [DBW]=DBW [LGWR]=LGWR [CKPT]=CKPT [SMON]=SMON [PMON]=PMON [RECO]=RECO) else # unknown version # minimal list for any DB log_msg "WARNING: Loading Unsupported Oracle version Process list DBW LGWR CKPT SMON PMON. This is likely the result of not having the DB up and running when the smart assistant executed." pnames=( [DBW]=DBW [LGWR]=LGWR [CKPT]=CKPT [SMON]=SMON [PMON]=PMON) fi } #---------------------------------------------------------------------------- # Function: # osaLoadAllProcs # # Purpose: # Run ps and obtain a list of running processes # # Arguments: # (1) list of running processes # # Returns: # n/a # function osaLoadAllProcs { if [[ $VERBOSE_LOGGING == "high" ]] then PS4_FUNC=osaLoadAllProcs set -x fi typeset -n realprocs=$1 # $PS_CMD -u $ORACLE_USER -o args | { $PS_CMD -e -o args | grep ora_ | awk '{print $1}' | { while read cmd; do typeset -l match match1 sid=$ORACLE_SID match=${cmd##"ora_"} # match for ora__sid match1=${match%%"_"$sid} # match against ORACLE_SID if [[ $match != $cmd ]] && [[ $match1 != $match ]]; then match2=${match1//+([0-9])/} # remove `multiplicity' realprocs[$match2]=1 fi done } } #---------------------------------------------------------------------------- # Function: # osaSQLStatus # # Purpose: # Runs `SELECT instance_status from V$INSTANCE;'. # # Arguments: # Assumes $INSTANCE identifes instance # # Returns: # 0 if instance is `open' # 1 or 10 otherwise # function osaSQLStatus { [[ -z $(whence clodmget) ]] && PATH=$PATH:/usr/es/sbin/cluster/utilities if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=osaSQLStatus set -x fi typeset stat=$(LC_ALL=C osaSQLPlusRun 'select status from V$INSTANCE;' 2>&1) [[ $VERBOSE_LOGGING == 'high' ]] && print -- "$stat" if print -- "$stat" | grep -q -w OPEN then return 0; else # : Log the failure status - it might be interesting # clutils_log_dir=$(clodmget -q "name = clutils.log" -f value -n HACMPlogs) clutils_log_dir=${clutils_log_dir:-/var/hacmp/log} print "$(date) oraSQLStatus[$LINENO]: Connect to Oracle Data Base $INSTANCE failed" >> $clutils_log_dir/clutils.log print "$(date) oraSQLStatus[$LINENO]: LC_ALL=C osaSQLPlusRun 'select status from V$INSTANCE'\n$stat" >> $clutils_log_dir/clutils.log log_msg "osaSQLStatus[$LINENO]: Connect to Oracle Data Base $INSTANCE failed" log_msg "oraSQLStatus[$LINENO]: LC_ALL=C osaSQLPlusRun 'select status from V$INSTANCE'\n$stat" # : check to see if we got "ORACLE not available" message # if [[ $stat == *(?)'ORACLE not available'*(?) ]] then return 10 else return 1; fi fi } #---------------------------------------------------------------------------- # Function: # osaListenerStatus # # Purpose: # Runs `lsnrctl status ' against all listeners for # given SID. # # Arguments: # n/a # # Returns: # 0 if instance is `alive' # >=1 otherwise # function osaListenerStatus { if [[ -z $(whence clodmget) ]] then export PATH=$PATH:/usr/es/sbin/cluster/utilities eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) fi if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=osaListenerStatus PS4_TIMER=true set -x fi typeset -n lsnrstatus=$1 typeset -i i=0 typeset -A listeners typeset -i stat=0 typeset lis integer LSMAXTIMEOUT # Seconds to wait for obtaining Listener status integer default_retries=15 # Default number of retries integer margin=5 # Seconds less than monitor_interval # available for retry clutils_log_dir=$(clodmget -q "name = clutils.log" -f value -n HACMPlogs) clutils_log_dir=${clutils_log_dir:-/var/hacmp/log} LSNSTAT=${clutils_log_dir}/lsnrctl.stat export LSNSTAT # : Listener timeout - waiting for command to process - in seconds : based on the monitor interval # if [[ -z $MONITOR_INTERVAL ]] then LSMAXTIMEOUT=15 else LSMAXTIMEOUT=$MONITOR_INTERVAL if (( $LSMAXTIMEOUT < $default_retries + $margin )) then LSMAXTIMEOUT=$default_retries else (( LSMAXTIMEOUT-=$margin )) fi fi # : For all the listeners defined for this SID, $ORACLE_SID, : get the unique listeners and find their status individually. # for (( i=0 ; $i < ${#allDBListeners[*]} ; i++ )) do set -A x ${allDBListeners[$i]} if [[ ${x[0]} == "$ORACLE_SID" ]]; then typeset lisn=${x[1]} listeners["$lisn"]=1 fi done for lis in ${!listeners[*]} do # : Background the listener status command, then wait for the proc to exit # (print "${ORACLE_HOME}/bin/lsnrctl status $lis" > $LSNSTAT.${lis} ${ORACLE_HOME}/bin/lsnrctl status $lis >> $LSNSTAT.${lis} 2>&1 echo "RC=$?" >> $LSNSTAT.${lis}) & PID=$! if ! ps $PID then # : Failed immediately! # logger -t "PowerHA SystemMirror for AIX" "Could not start ${ORACLE_HOME}/bin/lsnrctl status $lis " fi # : Wait $LSMAXTIMEOUT seconds before killing the listener status : command. A timeout indicates the listener is not running. # typeset -i lstat=1 #listener status initialized to 1 typeset -i count for (( count=0 ; $count<$LSMAXTIMEOUT ; count++ )) do sleep 1 if ! ps $PID >/dev/null then # : If the listener has stopped, break out of the loop # break fi done # : Determine if the lsnrctl process is still running. : If so, assume it failed due to hang. # if ps $PID >/dev/null then # : Kill hung lsnrctl process # logger -t "PowerHA SystemMirror for AIX" "Killing hung listener ${lis} process $PID" kill $PID fi if [[ -s $LSNSTAT.${lis} ]] then # : Pick up any return code # last_line=$(tail -1 $LSNSTAT.${lis}) if [[ $last_line == 'RC='*(?) ]] then print -- "$last_line" | IFS='=' read skip lstat fi fi # : See if the listener status was available. # if (( $lstat != 0 )) then # : Display and save the listener status # cat $LSNSTAT.${lis} if [[ ! -s $LSNSTAT.${lis}.first ]] then [[ -s $LSNSTAT.${lis} ]] && cp -f $LSNSTAT.${lis} $LSNSTAT.${lis}.first fi [[ -s $LSNSTAT.${lis} ]] && cp -f $LSNSTAT.${lis} $LSNSTAT.${lis}.last lsnrstatus["$lis"]=1 osaError "Listener "$lis" is down. See $LSNSTAT.${lis}.last" else lsnrstatus["$lis"]=0 log_msg "Listener " $lis" is alive." fi (( stat += $lstat )) # accumulate failure indications done return $stat } #---------------------------------------------------------------------------- # Function: # osaSpecListenerStatus # # Purpose: # Runs `lsnrctl status ' against specified listener. # # Arguments: # (1) listener name # (2) An associative array "lsnrstatus" to store status of listener. # # Returns: # 0 if listener thread is `alive' # >=1 otherwise # function osaSpecListenerStatus { eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=osaSpecListenerStatus PS4_TIMER=true set -x fi typeset lis=$1 typeset -n lsnrstatus=$2 integer LSMAXTIMEOUT # Seconds to wait for obtaining Listener status integer default_retries=15 # Default number of retries integer margin=5 # Seconds less than monitor_interval # available for retry clutils_log_dir=$(clodmget -q "name = clutils.log" -f value -n HACMPlogs) clutils_log_dir=${clutils_log_dir:-/var/hacmp/log} LSNSTAT=${clutils_log_dir}/lsnrctl.stat export LSNSTAT # : Listener timeout - waiting for command to process - in seconds : based on the monitor interval # if [[ -z $MONITOR_INTERVAL ]] then LSMAXTIMEOUT=15 else LSMAXTIMEOUT=$MONITOR_INTERVAL if (( $LSMAXTIMEOUT < $default_retries + $margin )) then LSMAXTIMEOUT=$default_retries else (( LSMAXTIMEOUT-=$margin )) fi fi # : Background the listener status command, then wait for the proc to exit # (print "${ORACLE_HOME}/bin/lsnrctl status $lis" > $LSNSTAT.${lis} ${ORACLE_HOME}/bin/lsnrctl status $lis >> $LSNSTAT.${lis} 2>&1 echo "RC=$?" >> $LSNSTAT.${lis}) & PID=$! if ! ps $PID then # : Failed immediately! # logger -t "PowerHA SystemMirror for AIX" "Could not start ${ORACLE_HOME}/bin/lsnrctl status $lis " fi # : Wait $LSMAXTIMEOUT seconds before killing the listener status : command. A timeout indicates the listener is not running. # typeset -i lstat=1 #listener status initialised to 1 typeset -i count for (( count=0 ; $count<$LSMAXTIMEOUT ; count++ )) do sleep 1 if ! ps $PID >/dev/null then # : If the listener has stopped, break out of the loop # break fi done # : Determine if the lsnrctl process is still running. : If so, assume it failed due to hang. # if ps $PID >/dev/null then # : Kill hung lsnrctl process # logger -t "PowerHA SystemMirror for AIX" "Killing hung listener ${lis} process $PID" kill -9 $PID fi if [[ -s $LSNSTAT.${lis} ]] then # : Pick up any return code # last_line=$(tail -1 $LSNSTAT.${lis}) if [[ $last_line == 'RC='*(?) ]] then print -- "$last_line" | IFS='=' read skip lstat fi fi # : See if the listener status was available. # if (( $lstat != 0 )) then # : Display and save the listener status # cat $LSNSTAT.${lis} if [[ ! -s $LSNSTAT.${lis}.first ]] then [[ -s $LSNSTAT.${lis} ]] && cp -f $LSNSTAT.${lis} $LSNSTAT.${lis}.first fi [[ -s $LSNSTAT.${lis} ]] && cp -f $LSNSTAT.${lis} $LSNSTAT.${lis}.last lsnrstatus["$lis"]=1 osaError "Listener "$lis" is down. See $LSNSTAT.${lis}.last" else lsnrstatus["$lis"]=0 log_msg "Listener " $lis" is alive." fi return $lstat } is} $ l>z#o$H/םa՝a֝a&z,2vT./usr/es/sbin/cluster/sa/oracle/sbin/DBUtilitiesnitor.$$    -e ailnorstu#$cdfp"/=AELORS_ghm&().01:BCDGINPQ[]bqvy'2;>FHMTVwx{}!,Uz|*34?k+6789\%5zLm34#Kh6Ƽʤ:*&$(XH53rofqXc^d ӺK[gx(,Y3  tе tg*&$([BrDą @qp ihL^dzvT# ˘)GUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUR3rc!!nXLm$ *v|V$ 'rG~Af%Ji(,Ĵܣ|V\\ȳ;`9GUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUR3rc|V^$ MÑQ;|l=G~^qpbƛqm\<-_#K|\4) 18bQ(t  ܳvmB-^囵)Q߆w*;[8ZQv#y4%-&\s-xێ. Xn894r4\cڹ1y?nBvLb (K*XBf \QQM .`,PTqzR  9$9G=7YRĄJ0 * &D฽)\CL%7!&=!!nWY"xA#2C*,ݑ< 図clxE_囲'v0 |<"YFpmkn0{nH+h~x@[Z囸Q*QUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ;Ip~|V ctd!qQ;|l=G~ ch6! .8׼uZ6hWFmؖ1#< T!ɄH"5r& <omjǻEϗ|^TH3V>Zt```Fڿ:DW $"PQPY0Fۉ›> M WY<)XLm$ *wq WSܴ+CUᥱddznB0{H‚\ aaj D v^WG;2ihOӅ1!hIW8;>%Tv G~"Qi7w9op4;,qr 0HH(*vJfn(ƒ>fn(AyRĄJ0\PK2qtmNz7BFi%hJ!;Zq!4\9im,wH@#+u#s$k[[ITwvFVcཎjּ| A;YFFV9f(pOv@PYG)) 1XJ22\#01<LR*&&(*&?"GiMFp7.w"qt!Ŵjؖ01ʿF'+Wň,D~I#mM 5kE3$hڿO妳7hڿOǟk֊Lm`cE&6𐞝T!ɖFpig,HD39rejW8jmL m a&6Af"-iE&6W.S*QUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ;Ipz|V\\g`BrP33vD=G~mq0z츹JliLmf£4oK$*\S..P-G~ qe&6co_|僘Q;-ro*;nrYqr͜I :Ӹ6&6Õ!7.I'Ƀq3-793)fCmq0G83ʖ$"P2Bq8gyRĄJ0&[1mq0G_@Lm#8HJr_dN܏#W6: NS0| A5tW0yFڛg6#qz7%vJ<.SŶvɃq3$jmtl܎#Qqep qH.Y@Lm`AlpօR:8 D-;>I  t МD  0ZrRQ&nBL{wˋl^4rŧQߗM>8=coIӃиŎ3jmtl܎`BruG87h6r@ۥPp^׭&6coA8nj+7nTw@`Qco&6qjmwIX9o )Q߸rYqr͜KܦWhςcm_x9K(L\l a&6R\fiAdtl܎hv|0a;dpsjYqr͜I "<c WYh6Di L> .6f=^}q&6{^Rcoʖ$"PQPY2Lq $O*XBfEAdǨ"%7!&=8駄01<LR*&&(*&?"GiMFp7.w׭"xr: 1D2:ۇcl !28yW@F{^RcoBU׭"yBbBDmq kֈa`c#>Idg W0dO(TLHP6!Ͳ <BK=Z)1nI a&6Alp`@Hr*QUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ;IpzYqr͜KpQ;|l=G~^K+nBr@ۥ-G(Zm臨6#e^<8#V|onTp Q;-r.SA6:6mnEG~h!qKcg QJnBL{e 6q/%SO+`cx4aɘ(TLLPTL~D< !+..PYim- zPypOZ&iW %q"$" Dž`c#=23@r9<*4AyŬ/dkBX G Fp e 6q/ryzI a&66&668@$OSlahיWiքv(,zIV\4W%.7ۑƖ `p.gE&601sxHON*XBfrc#8HNT!ɖk֊LmYqr͜I 6&6|0jO |V\\g4y@Lm"e 6q/ryzI a&66&668@$OSlahיWiքv(,zIV\4W%.7;p zI uhӳʖ$"P2ig,HD39rej|V\\g`Br#mM  $ڿB(,EMZs r~$!1x1}Ą6Gs|+D0z)rb!7.2\A;g,mrtx4ARB$P,`c>2\$q FU#V^dLjmGs:З'B HCdw>YҴCr+W"'>+..PYihKrޔo=i1v䴘ܳwr"{!Ÿ(,Ĵ݁cm%fJ7(=1h=҃ړ{nDO|?xS8,mvljk̤ -yܳwu;K2qtK3ilv{ >8d@0HP ܌04:a5zAjk̘79"D2xFH+h~x@3 2W.STG` 1Q߾+-f9`B/6nTrŧQߖoFZi.L{os$D֚mb 7˄@mnGTwAHD-$3Ǹ3Y&=܍^ $" ܖ2|-'G#LFKr<,-(<#WW &&=9Gdff҈z(8/Zi.L{,ݨQk臨wBvi--G)) 1oQ!MJ8A_.LBbbc$qddg rqkM6"Du;ˁ=J;e/8>i[5hkp(vmQ.Qې<[pNW ĉOpB WO;1_vm<)fnX(,ZQې->2% tm;r6qչ_ 7 ρ:W-%8;WLW/u_>OcŸ.'r-q|4؎HXX `QR`}TTPTr' csM6ɏvzOs0E˕$ &$ **( *X$p(CN tD  +)r*E+KFri 1Zi68Akp0 $9_AY#HX^8 `6zM_⎕i8A$4I_NÕW/u_> v| %m1y7!bjXǻ\soE2pbLO1ƯZ(<4&=8|-Zj:2[u;ˍqXi0/.L4PD pq|3<ʼnv|nB/W:v|X22jܯl4m+pbaʼn 68Akp0 $9_AY#HX^8 l5:W-%8;WE_3jAѶܯ`4gF:mn+(+<`)7 Bpq3` e_⎕i8A$4I_NÕW/u_e/֚mb ( ܅IinB`n+ZiWPVxR8n7g4؊+pHir+"8; PEJQMT!ɑA\^ -fH"4` =G>+/r&ȨbBw hTsE%q҃K e ܋<QO. $*"L XJ22\# Dh;Q"3dOH@#+u#d"01̰dgQչG~401deG/Qh~xAmhFFVF`EG@,-GZ~QIC&(P@Lm k:#o$/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/sbin/DBConfiges$$# @(#)19 1.3 src/43haes/usr/sbin/cluster/sa/oracle/sbin/DBConfig.sh, hacmp.assist.oracle, 61haes_r714 11/28/11 15:21:45 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/DBConfig.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #----------------------------------------------------------------------------- # Global Definitions: #----------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oracle/sbin/IO . /usr/es/sbin/cluster/sa/oracle/sbin/DBUtilities #----------------------------------------------------------------------------- # Function: # osaGetListeners # # Purpose: # Get Oracle DB Listeners defined by HACMP. # # Arguments: # (1) Application ID for App Discovery # (2) SID or -none- # # Returns: # List of HACMP-defined listeners # # function osaGetListeners { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset id=$1 typeset sid if [[ -n $2 ]]; then sid=$2 else sid=$ORACLE_SID fi typeset -i i=0 #In PHA 7.1 the attibute names are capitalized in KLIB_UTIL_parse_arguments #which is used in sapsa_common file causing this regression #To fix this, first try with 'listener' then try 'LISTENER' typeset value attribute value=$(clquerysaapp -a $id listener 2>/dev/null) [[ -z $value ]] && { attribute="LISTENER" } || { attribute="listener" } # SID-listener-host combo being read via App Discovery frmwk typeset rsid lisn host # Look up listeners for a given SID and populate `allDBListeners' with it. clquerysaapp -a $id $attribute | sed 's/[Ll][Ii][Ss][Tt][Ee][Nn][Ee][Rr]=//' | while read rsid lisn host do if [[ $sid == $rsid ]]; then allDBListeners[$i]=$sid" "$lisn" "$host (( i += 1 )) fi done } #----------------------------------------------------------------------------- # Function: # osaDBDumpCfg # # Purpose: # Dump the application discovery HACMPsa_metadata entries for this # DB instance (dumps all allDBListeners) # # Arguments: # (1) application id # # Output: # List of instances # # Returns: # n/a # function osaDBDumpCfg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset id=$1 typeset -i i for i in ${!allDBListeners[*]}; do log_msg "Adding "$i claddsaapp -a $id instance=$ORACLE_SID listener="${allDBListeners[$i]}" done } #---------------------------------------------------------------------------- # Function: # osaDBGetConfiguredInstances # # Purpose: # Output a list of already configured to HACMP RDBMS instances # # Arguments: # n/a # # Returns: # 0 on success # function osaDBGetConfiguredInstances { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -n dbinsts=$1 typeset -i index=0 /usr/bin/odmget -q "name=DATABASE" HACMPsa_metadata | while IFS='=' read name value; do name=$(echo $name) [[ "$name" == "value" ]] && { value=$(echo $value) dbinsts[$index]=${value//\"/} (( index += 1 )) } done return 0 } #---------------------------------------------------------------------------- # Function: # osaDBGetUnconfiguredInstances # # Purpose: # Get a list of the DBs that are not already defined to the HACMP # cluster configuration # Assumes the caller has already called # osaGetDBEnvs $ORACLE_HOME # # Returns: # 0 on success # 1 on failure # function osaDBGetUnconfiguredInstances { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -n dbinsts=$1 typeset -A allDBInstances defDBInstances typeset dbA dbB typeset -i found=0 typeset -i index=0 osaFindDBInstances allDBInstances osaDBGetConfiguredInstances defDBInstances for dbA in ${allDBInstances[*]}; do found=0 for dbB in ${defDBInstances[*]}; do [[ "$dbA" == "$dbB" ]] && { found=1 } done (( $found == 0 )) && { dbinsts[$index]=$dbA (( index += 1 )) } done return 0 } Mac l#o$F/םa՝a֝a&+2vT./usr/es/sbin/cluster/sa/oracle/sbin/DBControls$$   es -ainort"#$*AS_clmpu=DELORdfgh()./01:BCIMNPT[]by{&2;FGHUvw} !',?V\kx|+34567>Qz9q8PX_$+"@xYrDSE@D$*-" d3VIɩY+Αh9Z1I%lpTה63gR%g &($H$H$!T Fq[%'&d_sT:EhU"Y)ri"D"DHH@0HS1lt2<r3e9-+Ly\$'8 qn ^spʕ=+c1&WLVQN+ -"$*K%99:@M$PH4HIbB"&C1lt2<ԒV`7MyCh%^*K%99:@M$PH4HIbBJNMJǺnutAь*ʦ"ֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ7?a܌)SqUnoҝԬx2Ҋ)(WuxHnXӊ8DhS a, { a7'S^Povi ;2zʘk ÍS,+(x?$cfybc Oh-WSܲr8+(59-+Ly\$'8 pW2ZQ^1YE:"L ,1bԒV`7gkk?ʽ"7JkۑDQp+; ‚\nP}5:tSgq$fa!YUcKUp^E:IkޥW7M{g!9V8v07"B{8stEJq!Jf\)p^c <<<<<<<<<<<<<<<<<<<P^qYj(UU5 1YE\JAt}ΡRҮy)t7(q!Jss*Uσ[Q:J$R"$BIbBMӫ]"GQ:JJVZ7@",@P4RDXwttMJuό+Q:K}No^cKU@",@P4RDXベV2}pW7M{<`"g+ p^9Gكp7 s/PgHDIb "ąEHSU)S?W 9$R"$BIbBaA@e ȾP^%N(5Qkk?ʽ^ۈPS2ԸJlyyyyyyyyyyyyyyyyyyyy7?aE:HER5hT*OON*]znY*WԸI9x {r3tE:J@r3_sT- ]Z=Ut R$Ut s3\[ a:򅇰xõNoas^U^ q!Jcl8 L@$"H ]務 `Gu=s?4]ON*ps?4]Ol5.k,u=ຣ5(<@u 0gƖstcKUB{?4]Ok 3p.pW2+eTfĮu (E0àz?pٮQA_sT\ ESچg E}ΡRs0g`phG;0D"A$D 3cKUpp.0g*V.a>`{?Bw㳟<; gH™1z1c-G78lQ:J` n zq^z*W 2[8stE.qYj(7]g'Ut o?̹S0)+ p^9G aPP+z?"Y%la,p{8ֈň 1q^P)\ⱁLy\$'8mKn.a>`G;‚\+ePg(ܤE c? ?ʽS?ܛԒV`7U]>"Y%leԚ| d"D@Bd!/b '533}34D@ c R׺v^S84HHx  mi>@3qq|DIi$R (ge\H " DD'eg(򸸾q"h$4)ó.~00 ^DIi$R (0 3qq|ÉA$AHf8v`e\b 2ۜH$H$D=& I q"h 4 4HI!$M$DH~p"h 4`IL⪮Lp17HOst7OyVy\\_0DIi$R (3s/P` 0e &  OjyS@D84HHHL+H$H$& "$<6H$H$ $&@"2)psS98S9G ` ᨬa+]?4]Ok8&/É@Df=43eJr"BbpV8<()"CܢPXρJ,y\\_8l fH$H$1W2qX*@4Ft(˵Z2zĮ `W)ӢYG0qR]uezn@9ꮯp$j>Pje{]є#7>eµ\e7 V0| BsV0N+x @DPBdG s/Pg!: xM‚RI[-CpHvpH"$($,H9+'<,lfT5_G6 Y:hĈr xLĉDp r080t((k9Ec9Zr(7 +>qL V0N+` AL*)5ʝ7E:Kr(7ec.}G,|(V2LjoN-WS}cKU,?E_ ^^[|'RLeE8ÂԸՌ8k?B{^['u {Ec&x ‚򱖣|3u.V0s,)3Uk1*!,t$`Yj\$a+B !(P)a*Ԟ01?^I+e|.V0sQ`EJ[Q:KV0|+ӕ:tSIGԂaV0Q<``̽ARQoV0|,Ü >fC P<2  U5$-YgȢ(LL"lܝMyC>eʹ/*:8TJNc4V2-ʦ3"u$$7j\$a+B?QRPQoV0|,.V0sQ`G,aR`c?"$"!DG喃 g! F 01@DXH R &Ad 8É@DPI!@J2r3tEB{Jg &C69QR"B( HH~3}"A@p`i!84HE MD'#8EB{Jg &C69QR"B( HH~3}$($,H`i!84HE MD' dEB{Jg &C69QR"B( HH~3}$($,H`ZG4A€D DY""@$(8înzn ԁP g2 LXD8PXp ń"8 '!(S@s`87 mI%lp 6Jr.a>JTڏ*Z^Ӣ:J>9,`x+z?MEKK)JTr(7 +>qaYecs3!(S@s?ʽ%mYmrq+[:)2ZyWBY(R,dQ&&HPHX1(30.V0sQ`Er+(㜲 >faj\$a+B?F*aL k(#o$./םa՝a֝a&.2vT./usr/es/sbin/cluster/sa/oracle/sbin/Catalogls$$# ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2018,2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/Catalog.sh 1.9 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/Catalog.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM set +x typeset -A SA_Catalog SA_Catalog=( [catalog]="oraclesa.cat" [10,1]="Oracle Database Smart Assist" [10,2]="Oracle RDBMS Database" [10,6]="Oracle Application Server AFC" [10,5]="Oracle Application Server CFC" [20,1]="Creating HACMP resource group: %s to support\n\ MR Database: %s.\n" [20,2]="\tCreating HACMP application server: %s\n" [20,3]="\tCreating HACMP application monitor: %s\n" [20,4]="Adding MR Database: %s to the HACMP configuration.\n" [20,5]="\tCreating service IP label: %s\n" [20,6]="\tAdding Oracle AS component: %s to HACMP resource group\n\ \t%s\n" [20,7]="Creating HACMP resource group: %s to support\n\ Oracle Application Server component: %s\n" [20,8]="\tAdding HACMP application monitor: %s\n\ \tfor Oracle Application Server component %s\n" [20,9]="\tOracle MR Database version: %s\n" [20,10]="\tAdding Oracle MR Database Listener\n\ \t[ IP Label: %s, Listener Name: %s]\n" [20,11]="Adding RDBMS database: %s to the HACMP configuration.\n" [20,12]="\tAdding Oracle RDBMS Database Listener\n\ \t[ IP Label: %s, Listener Name: %s]\n" [20,13]="Creating HACMP resource group: %s to support\n\ RDBMS Database: %s\n" [20,14]="#\n# Oracle CORE Version: %s\n#\n" [20,15]="#\n# WARNING: Database is not running. Volume groups where\n\ # logs, control files, and tablespaces, reside will be missing\n#\n" [20,16]="Modifying Oracle Application Server: %s, removing existing\n\ HACMP cluster components.\n" [20,17]="\tOracle RDBMS Database version: %s\n" [20,18]="Modifying Oracle RDBMS Database: %s, removing existing\n\ HACMP cluster components.\n" [20,19]="Successfully added Listener monitors of DB instance: \"%1\$s\"\n" [20,20]="Failed to add Listener monitors of DB instance: \"%1\$s\"\n" [20,21]="PowerHA SystemMirror supports maximum of %1\$d listener application monitors\n\ per oracle database application server. \n\ Created %2\$d listener application monitors for application server \"%3\$s\".\n" [20,22]="ERROR: Oracle file system should be mounted and available before trying\n\ to modify the oracle instance.\n" [30,1]="ERROR: The HACMP resource group: %s already exists.\n\ Please choose another name for the application.\n" [30,2]="Unexpected error encountered while attempting to create\n\ resource group: %s\n" [30,3]="ERROR: The HACMP application server: %s already exists.\n\ Please choose another name for the application.\n" [30,4]="Unexpected error encountered while attempting to create\n\ HACMP application server: %s\n" [30,5]="Unexpected error encountered while attempting to create\n\ HACMP application monitor: %s\n" [30,6]="ERROR: The HACMP application monitor: %s already exists.\n\ Please choose another name for the application.\n" [30,7]="Unexpected error encountered while attempting to create\n\ HACMP service IP label: %s\n" [30,8]="ERROR: Unable to create the service IP label: %s\n\ There are no available HACMP networks defined. Please either defined one\n\ or more HACMP networks. Or, alternatively define the service IP label\n\ within the HACMP configuration prior to re-running the Oracle smart\n\ assistant.\n" [30,9]="Unexpected error encountered while attempting to associate\n\ the HACMP resource group: %s with the Oracle smart assist application\n\ %s.\n" [30,10]="ERROR: An application with the name: %s is already\n\ defined to HACMP. Please choose another Oracle smart assist application\n\ name.\n" [30,11]="Unexpected error encountered while attempting to add \n\ Oracle Application Server component resources to the HACMP resource\n\ group: %s.\n" [30,12]="Unexpected error encountered while attempting to add\n\ Oracle Application Server metadata to the HACMP configuration for\n\ application server: %s.\n" [30,13]="ERROR: Unable to locate the OPMN configuration file\n\ %s on the local system.\n\ The ORACLE_HOME must follow the Oracle Flexible Architecture (OFA) directory\n\ hierarchy.\n" [30,14]="ERROR: The environment variable ORACLE_HOME must be set.\n\ Please set the ORACLE_HOME to an appropriate Oracle Application Server, or\n\ Oracle RDBMS database, then re-run the HACMP Oracle Smart Assist.\n" [30,15]="Unexpected error encountered while attempting to add\n\ HACMP application monitor: %s for\n\ HACMP application server: %s\n" [30,16]="ERROR: %s missing argument -a application_name\n" [30,17]="ERROR: %s missing argument -c component id\n" [30,18]="ERROR: %s missing argument -i instance\n" [30,19]="ERROR: %s missing argument -d database instance\n" [30,20]="ERROR: The Service IP label: %s is not resolvable on the\n\ local system. Please check to ensure the IP label is resolvable via either\n\ DNS, or /etc/hosts.\n" [30,21]="Unexpected error encountered while attempting to remove\n\ application monitor: %s.\n" [30,22]="Unexpected error encountered while attempting to remove\n\ application server: %s.\n" [30,23]="Unexpected error encountered while attempting to remove\n\ resource group: %s.\n" [30,24]="Unexpected error encountered while attempting to remove\n\ application: %s Oracle smart assist component references from the HACMP\n\ cluster configuration.\n" [30,25]="ERROR: The ORACLE_HOME directory used for Oracle application\n\ Server: %s does not exist on the local node: %s\n\ Please perform modifications on a node where the Oracle application server\n\ resides.\n" [30,26]="ERROR: Volume group: %s is already defined to HACMP.\n\ Please only select volume groups that have not been added to an HACMP\n\ resource group.\n" [30,27]="ERROR: Service IP label: %s is already defined to\n\ HACMP resource group: %s\n\ Please choose a service IP label that does not already participate in an\n\ HACMP resource group.\n" [30,28]="ERROR: Node %s was used more than once in the takeover or\n\ primary node lists. Please only use a node once in either the primary\n\ or takeover node lists.\n" [30,29]="Invalid application name: %s.\nValid HACMP names must be at least one character long and can contain\n\ characters ([A-Z, a-z]), numbers ([0-9]) and '_' (underscore). A name cannot\n\ begin with a number and a HACMP reserved word cannot be a valid name.\n" [30,100]="Please contact HACMP support to resolve the error reported above.\n\ A copy of the Oracle Smart Assistant log file: /var/hacmp/log/oraclesa.log\n\ will be required to diagnose this error. A copy of this log file has been\n\ saved to the location: %s\n.\n\ This log file will be captured as part of a snap -e, or can be transmitted\n\ separately.\n" [30,101]="ERROR: The environment variable ORACLE_USER must be set.\n\ Export ORACLE_USER with appropriate Oracle Application Server user\n\ and re-run the HACMP Oracle Smart Assist.\n" [30,102]="ERROR: \"%1\$s\" missing argument -l listener name\n" [30,103]="ERROR: Modification of ORACLE_HOME is not allowed if any of the cluster nodes\n\ are in unmanage state. Node(s) in UNMANAGE state are: %1\$s\n" [30,104]="ERROR: Modification of ORACLE_HOME is not allowed while the cluster services\n\ are running on the other cluster nodes (%1\$s).\n\ This command must be run from a node where cluster services are running,\n\ in order for the Dynamic Reconfiguration to proceed.\n" [30,105]="WARNING: Failed to restore GLVM replicated resource for Smart Assist Resource Group %1\$s.\n\ Run following command manually to make sure GLVM statistics are collected and shown in PowerHA GUI.\n\ /usr/es/sbin/cluster/glvm/utils/cl_glvm_configuration -c %1\$s\n" [40,1]="Requested STOP of AS instance: %s component: %s\n\ in HACMP application %s.\n" [40,2]="Setting ORACLE_HOME=%s\n" [40,3]="Failed to STOP Oracle component %s\n" [40,4]="Successfully STOPPED Oracle component: %s\n" [40,5]="Requested START of AS instance: %s component: %s\n\ in HACMP application %s.\n" [40,6]="Failed to START Oracle component %s\n" [40,7]="Successfully STARTED Oracle component: %s\n" [40,8]="Monitoring AS instance: %s and component: %s\n\ in HACMP application: %s\n" [40,9]="Component %s is NOT RUNNING\n" [40,10]="Component %s is running.\n" [40,11]="Setting ORACLE_USER=%s\n" [40,12]="Monitoring PowerHA SystemMirror application: %s.\n" [50,1]="DB Background Processes STARTED successfully.\n" [50,2]="DB Background Processes could NOT be STARTED.\n" [50,3]="DB Background Processes STOPPED successfully.\n" [50,4]="DB Background Processes was not STOPPED.\n" [50,5]="Successfully STOPPED Oracle DB Instance: %s\n" [50,6]="Failed to STOP Oracle DB Instance %s\n" [50,7]="Successfully STARTED Oracle DB Instance: %s\n" [50,8]="Failed to START Oracle DB Instance: %s\n" [50,9]="Oracle SID: %s is not in the OPEN state\n\ Marking DB as DOWN.\n" [50,10]="Oracle SID: %s is in the OPEN state.\n" [50,11]="Mandatory DB Process %s is NOT running.\n" [50,12]="Failed Oracle Database Process Test for Oracle SID: %s.\n\ See the message above for the missing process name(s).\n" [50,13]="All mandatory processes are running for Oracle SID: %s\n" [50,14]="Failed Oracle Listener are NOT running for Oracle SID: %s.\n" [50,15]="Oracle Listener(s) are running for Oracle SID: %s\n" [50,16]="Performing command: %s on listener: %s\n" [50,17]="Successfully STARTED Oracle Listener: \"%1\$s\"\n" [50,18]="Failed to START Oracle Listener: \"%1\$s\"\n" [50,19]="Successfully STOPPED Oracle Listener: \"%1\$s\"\n" [50,20]="Failed to STOP Oracle Listener: \"%1\$s\"\n" [60,1]="Unable to start Background Processes. DB START FAILED.\n" [60,2]="Failed to start DB listeners, shutting down Database background\n\ processes.\n" [60,3]="Unable to stop listeners. DB STOP FAILED.\n" [60,4]="Unable to stop DB Background Processes. DBStopAll FAILED.\n" [90,1]="Problem with XML configuration file. Ensure a valid XML file supplied.\n" [90,2]="Supplied directory %1\$s for ORACLE_HOME does not exist.\n" [90,3]="PFILE or SPFILE for the supplied ORACLE_SID does not exist at %1\$s/dbs.\n" [90,4]="Volume Group %1\$s does not exist.\n" [90,5]="User ID %1\$s does not exist.\n" [90,6]="Primary Node %1\$s is not valid in the cluster.\n" [90,7]="One of the Takeover node from %1\$s is not valid in the cluster.\n" [90,8]="Problem in parsing %1\$s tag in function %2\$s\n" [90,9]="Supplied value for %1\$s tag is invalid. Considering default option \"%2\$s\".\n" [90,10]="Unable to modify instance as resource group %1\$s is part of the dependency.\n\ Please remove the resource group dependency and try modify operation again.\n" ) \ kfa#o$J/םa՝a֝a&J2vT./usr/es/sbin/cluster/sa/oracle/sbin/IO$$# ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/IO.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2009 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/IO.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- # Read in the message catalog entries . /usr/es/sbin/cluster/sa/oracle/sbin/Catalog #---------------------------------------------------------------------------- # Functions: # osaGetLogPath # # user_msg # log_msg # warn_msg # osaError # #---------------------------------------------------------------------------- function user_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -i s=$1 typeset -i id=$2 shift shift typeset args=$* typeset c="$s,$id" [[ -z $s || -z $id ]] && { return 1 } /usr/bin/dspmsg -s $s "${SA_Catalog[catalog]}" $id "${SA_Catalog[$c]}" $args echo # Log the information to the oraclesa.log log file typeset msg=$(LC_ALL=C /usr/bin/dspmsg -s $s "${SA_Catalog[catalog]}" $id "${SA_Catalog[$c]}" $args) log_msg $msg } #----------------------------------------------------------------------------- # Function: # InternalErrorAbort # # Purpose: # Creates a fatal error log file with time of occurence of error and stores a # copy of Oracle smart assist log file which will help to diagnose the fault. # # Arguments: # NA # # Returns: # 0 # function InternalErrorAbort { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset date=$(LC_ALL=C date +"%m.%d.%y-%H-%M-%S") typeset logfile="/var/hacmp/log/oraclesa.fatal.$date" cp -f $ORACLESA_LOGFILE $logfile 2>/dev/null user_msg 30 100 $logfile # Return from this fucntion to enable cleanup of HA components before exit. return 0 } function osaGetLogPath { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset LOGFILE="oraclesa.log" typeset LOGPATH=$(/usr/bin/odmget -q "name=oraclesa.log" HACMPlogs 2>/dev/null | grep -w value | awk -F'=' '{ print $2 }' | sed -e "s/\"//g") typeset DEFAULTLOGPATH=$(odmget -q "name=oraclesa.log" HACMPlogs 2>/dev/null | grep -w value | awk -F'=' '{ print $2 }' | sed -e"s/\"//g") [[ -z $ORACLESA_LOGPATH ]] && { [[ -z $DEFAULTLOGPATH ]] && { LOGFILE="/var/hacmp/log/oraclesa.log" } || { LOGFILE="$DEFAULTLOGPATH/$LOGFILE" } } || { LOGFILE="$LOGPATH/$LOGFILE" } echo $LOGFILE } function log_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo "$DATE INFO: $*" >> $ORACLESA_LOGFILE } function warn_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo "$DATE WARN: $*" >> $ORACLESA_LOGFILE } function osaError { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo "$DATE ERROR: $1" >> $ORACLESA_LOGFILE } #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- ORACLESA_LOGFILE=$(osaGetLogPath) # k겛 $om/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraListenerParsehmm#!/usr/bin/perl # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraListenerParse.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2009 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)26 1.5 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraListenerParse.sh, hacmp.assist.oracle, 61haes_r714 3/4/09 04:05:05 #******************************************************************************** # This script is used to parse a `listener.ora' file to identify listeners and # the host names associated with each of them. The output from this script # shall be in the following format: # # \s* # \s* # . # . # . # For instance, if the listener `LISTENER1' is listening on two interfaces # namely, `host1' and `host2' the output shall look like this: # 0 # LISTENER1 host1 # LISTENER1 host2 # Multiple listeners for a SID are repeated similarly. #******************************************************************************** # We first parse various sections in listener.ora into chunks. # Then we shall find listeners related to a particular SID. This is # done by looking at sections that are identified by SID_LIST_. # Once we find all the s that are related to an SID # we can go ahead and identify their IP/HOST properties so they can # be used by the caller. open(FILE, "<$ARGV[0]") || ((print "-1\n") && exit(1)); my $SID = $ARGV[1]; #print "SID:".$SID."\n"; # Identify chunks in `listener.ora' my ($inchunk, $listener_chunk, $nchunks); my @listeners = (); my $nopen = 0; $nchunks = $inchunk = 0; my $found_chunk= 0 ; while() { chomp($_); # Get Rid of lines that contain only spaces or commented by Hash next if (($_ =~/^(\s)*$/) || ($_ =~ /^(\s|\#)*\#/)); $_ =~ s/^\s+//; $_ =~ s/\s+$//; # trim input string if ($inchunk == 1){ $listener_chunk .= $_; }else { $listener_chunk = $_; $inchunk = 1; } while ($listener_chunk =~ /^(\s)*(\w)+(\s)*\=(\s)*(\w)+(\s)*\=/ ){ $listener_chunk =~ s/^(\s)*(\w)+(\s)*\=(\s)*//; } if ($listener_chunk =~ /^(\s)*(\w)+(\s)*$/ ){ $inchunk = 1; $found_chunk= 0; } elsif ($listener_chunk =~ /^(\s)*(\w)+(\s)*\=(\s)*$/ ){ $inchunk = 1; $found_chunk= 0; } elsif ($listener_chunk =~ /^(\s)*(\w)+(\s)*\=(\s)*(\'|\"|\w|\.|\/)+/ ){ $inchunk = 0; $found_chunk= 0; } elsif ($listener_chunk =~ /^(\s)*(\w)+(\s)*\=(\s)*\(/ ) { while ($_ =~ /\(/g) { $nopen++; } while ($_ =~ /\)/g) { $nopen--; } if ($nopen > 0){ $inchunk=1; } else { $inchunk=0; $listeners[$nchunks] = $listener_chunk; $nchunks++; } $found_chunk=1; } # If niether recognizale patterns, skip chunk else { $inchunk = 0; $found_chunk= 0; } } # Not balanced brackets . This is optional and can be skipped. if ($inchunk == 1 && $found_chunk == 1) { $listeners[$nchunks] = $listener_chunk; $nchunks++; } # # Look through to see if our SID is defined in `listener.ora'. # The format should be a section beginning with SID_LIST_ # my %deflisteners=(); # list of listeners that are related to $SID. my $i = 0; while ($i <= $#listeners) { # capture LISTENER NAME for SID we are looking for my ($lisn) = ($listeners[$i] =~ /SID_LIST_(\w+)\s*=/); $deflisteners{$lisn} = 1 if (defined($lisn) && ($listeners[$i] =~ /\(\s*SID_NAME\s*=\s*$SID\s*\)/)); $i++; } # Now that we have a list of listeners that are worth looking at we shall # find the IPs/hostnames related to them. my %IPS = (); $i=0; while ($i <= $#listeners) { # Look for the typical format: # LISTENER = # (DESCRIPTION_LIST = # (DESCRIPTION = # (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) # (ADDRESS = (PROTOCOL = TCP)(HOST = hostname.austin.ibm.com)(PORT = 1521)) # ) # ) my ($listener, $addrs) = ($listeners[$i] =~ /^\s*(\S*)\s*=\s*\(\s*DESCRIPTION_LIST\s*=\s*\(\s*DESCRIPTION\s*=(.*)\)\s*\)\s*$/); # print "Listener:".$listener."\n" if defined $listener; if ($deflisteners{$listener} == 1) { my $j=0; while (($name, $value, $addrs) = ($addrs =~/\s*\(\s*(\S*)\s*=\s*(\S*)\s*\)(.*)/g)) { $IPS{$listener}[$j++] = $value if ($name =~ /HOST/i); } $i++; next; } # If we get here, that means we didn't find a listener formatted in the typical # way, but there are other ways they could be formatted. # Check for this one: # LISTENER = # (ADDRESS_LIST = # (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) # (ADDRESS = (PROTOCOL = TCP)(HOST = hostname.austin.ibm.com)(PORT = 1521)) # ) my ($listener, $addrs) = ($listeners[$i] =~ /^\s*(\S*)\s*=\s*\(\s*ADDRESS_LIST\s*=(.*)\)\s*\)\s*$/); if ($deflisteners{$listener} == 1) { my $j=0; while (($name, $value, $addrs) = ($addrs =~/\s*\(\s*(\S*)\s*=\s*(\S*)\s*\)(.*)/g)) { $IPS{$listener}[$j++] = $value if ($name =~ /HOST/i); } $i++; next; } # Finally, check for this one: # LISTENER = # (DESCRIPTION = # (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) # (ADDRESS = (PROTOCOL = TCP)(HOST = hostname.austin.ibm.com)(PORT = 1521)) # ) my ($listener, $addrs) = ($listeners[$i] =~ /^\s*(\S*)\s*=\s*\(\s*DESCRIPTION\s*=(.*)\)\s*\)\s*$/); if ($deflisteners{$listener} == 1) { my $j=0; while (($name, $value, $addrs) = ($addrs =~/\s*\(\s*(\S*)\s*=\s*(\S*)\s*\)(.*)/g)) { $IPS{$listener}[$j++] = $value if ($name =~ /HOST/i); } $i++; next; } $i++; } # Finally we print all the Listeners and IPs associated with them for given SID. my $j=0; my $lines=""; for my $key (keys %IPS) { my $i = 0; while ($i <= $#{$IPS{$key}}) { $lines .= $key." ".$IPS{$key}[$i++]."\n"; } $j += $i; } print $j."\n".$lines; exit(0);  kB#om /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraSqlPlusParsemm#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraSqlPlus.sh 1.7 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraSqlPlus.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM [[ $VERBOSE_LOGGING == high ]] && set -x ## ## NAME: ## cl_oraSqlPlus ## ## PURPOSE: ## Wrapper for the sqplus command ## Runs as user oracle (group dba) ## ## ARGUMENTS: ## -e filename Environment File to source before ## calling sqlplus ## ## -p path Path to SQLPLUS ## ## -r path Path to store the result ## ## -s filename File to provide to SQLPLUS ## ## -l login Login Arguments to sqlplus ('/ as sysdba' default) ## ## OUTPUT: ## Output of SQLPLUS command ## ## RETURNS: ## return code from sqlplus ## LOGIN='/ as sysdba' while getopts o:e:p:r:s:l:S: option; do case $option in e) ENVFILE=$OPTARG ;; p) SQLPLUS_PATH=$OPTARG ;; r) RCFILE_PATH=$OPTARG ;; s) LOADFILE=$OPTARG ;; l) LOGIN=$OPTARG ;; o) ORACLE_HOME=$OPTARG ;; S) ORACLE_SID=$OPTARG ;; esac done [[ -z $SQLPLUS_PATH || ! -f $SQLPLUS_PATH/sqlplus ]] && { echo "Invalid sqlplus path: \"$SQLPLUS_PATH\"" exit 1 } [[ -z $LOADFILE || ! -f $LOADFILE || ! -r $LOADFILE ]] && { echo "Invalid SQL command file: \"$LOADFILE\"" exit 2 } [[ -z $RCFILE_PATH ]] && { echo "Invalid result file: \"$RCFILE_PATH\"" exit 2 } [[ -n $ENVFILE && -f $ENVFILE ]] && . $ENVFILE # Record the actual sqlplus command and LOADFILE content into RCFILE_PATH. # These will be later appended to oraclesa.log file in osaSQLPlusExecute() function. echo "LC_ALL=C ORACLE_SID=$ORACLE_SID ORACLE_HOME=$ORACLE_HOME $SQLPLUS_PATH/sqlplus -S \"$LOGIN\"\n$(cat $LOADFILE)" > $RCFILE_PATH typeset out=$(LC_ALL=C ORACLE_SID=$ORACLE_SID ORACLE_HOME=$ORACLE_HOME $SQLPLUS_PATH/sqlplus -S "$LOGIN" 2>>$RCFILE_PATH < $LOADFILE) rc=$? echo "$out" | tee -a $RCFILE_PATH # Collect return code as well. echo "sqlplus return code is:$rc" >> $RCFILE_PATH OO k.#o@ /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraStartASParse@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraStartAS.sh 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraStartAS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_oraStartAS ## ## PURPOSE: ## Oracle AS Stop script for individual components ## ## ARGUMENTS: ## -a Application Name (smart assist) ## -i Oracle Application Server Instance Name ## -c Oracle Application Server Component Name ## ## RETURNS: ## 0 on success ## 1 on failure ## #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- typeset version='1.5' . /usr/es/sbin/cluster/sa/oracle/sbin/ASUtilities . /usr/es/sbin/cluster/sa/oracle/sbin/ASControl . /usr/es/sbin/cluster/sa/oracle/sbin/ASMonitor . /usr/es/sbin/cluster/sa/oracle/sbin/IO typeset PROGRAM=${0##*/} PATH=$PATH:/bin:/usr/bin PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities export PATH if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- while getopts a:c:i: option do case $option in a) APPLICATION_NAME=$OPTARG ;; c) AS_COMPONENT=$OPTARG ;; i) AS_INSTANCE=$OPTARG ;; *) ;; esac done [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } [[ -z $AS_COMPONENT ]] && { user_msg 30 17 $PROGRAM exit 1 } [[ -z $AS_INSTANCE ]] && { user_msg 30 18 $PROGRAM exit 1 } user_msg 40 5 $AS_INSTANCE $AS_COMPONENT $APPLICATION_NAME set -a ORACLE_HOME=$(clodmget -nf value -q "name=ORACLE_HOME and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME osaSetASEnvs $ORACLE_HOME set -a ORACLE_USER=$(clodmget -nf value -q "name=ORACLE_USER and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER osaASCompStart $AS_INSTANCE $AS_COMPONENT (( $? != 0 )) && { user_msg 40 6 $AS_COMPONENT exit 1 } user_msg 40 7 $AS_COMPONENT exit 0  k #o@ /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraStartDBParse@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraStartDB.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraStartDB.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_oraStartDB ## ## PURPOSE: ## Starts a named Oracle Instance and Listeners ## ## ## ARGUMENTS ## -d ## -a ## ## RETURNS: ## 0 on success ## 1 on failure ## #--------------------------------------------------------------------------- # Global Definitions: #--------------------------------------------------------------------------- typeset version='1.4' . /usr/es/sbin/cluster/sa/oracle/sbin/IO . /usr/es/sbin/cluster/sa/oracle/sbin/DBGlobals . /usr/es/sbin/cluster/sa/oracle/sbin/DBUtilities . /usr/es/sbin/cluster/sa/oracle/sbin/DBStatus . /usr/es/sbin/cluster/sa/oracle/sbin/DBControl typeset PROGRAM=${0##*/} PATH=$PATH:/bin:/usr/bin PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities export PATH if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR #--------------------------------------------------------------------------- # Main: #--------------------------------------------------------------------------- while getopts d:a: option do case $option in d) DB_INSTANCE=$OPTARG ORACLE_SID=$DB_INSTANCE ;; a) APPLICATION_NAME=$OPTARG ;; esac done [[ -z $DB_INSTANCE ]] && { user_msg 30 19 $PROGRAM exit 1 } [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } set -a ORACLE_HOME=$(clodmget -nf value -q "name=ORACLE_HOME and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME ORACLE_SID set -a ORACLE_USER=$(clodmget -nf value -q "name=ORACLE_USER and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER # # Clean up of unused shared memory associated with oracle user group # when oracle processes are not running # ps -ef|grep "ora_"|grep -v grep >/dev/null 2>&1 if (( $? != 0 )); then group=$(lsuser -f -a pgrp $ORACLE_USER | grep -w "pgrp" | cut -f2 -d=) # Fetch and remove the shared memory id associated with oracle user group for smid in $(ipcs | grep -w "$group" | awk '$1=="m" {print $2}') do ipcrm -m $smid > /dev/null 2>&1 sleep 1 done fi osaSetDBEnvs $DB_INSTANCE osaDBStartAll $APPLICATION_NAME (( $? != 0 )) && { user_msg 50 8 $DB_INSTANCE exit 1 } user_msg 50 7 $DB_INSTANCE exit 0 re k#o@ /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraStartLSNRrse@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraStartLSNR.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_oraStartLSNR ## ## PURPOSE: ## Starts a specific listener. ## This functionality is used from oracle SA when cluster services are active. ## ## ## ARGUMENTS ## -d ## -a ## -l ## ## RETURNS: ## 0 on success ## 1 on failure ## #--------------------------------------------------------------------------- # Global Definitions: #--------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oracle/sbin/IO . /usr/es/sbin/cluster/sa/oracle/sbin/DBGlobals . /usr/es/sbin/cluster/sa/oracle/sbin/DBUtilities . /usr/es/sbin/cluster/sa/oracle/sbin/DBStatus . /usr/es/sbin/cluster/sa/oracle/sbin/DBControl function usage { print "usage: cl_oraStartLSNR -d -a -l " exit 1 } #--------------------------------------------------------------------------- # Main: #--------------------------------------------------------------------------- typeset PROGRAM=${0##*/} PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR while getopts d:a:l: option do case $option in d) DB_INSTANCE=$OPTARG ORACLE_SID=$DB_INSTANCE ;; a) APPLICATION_NAME=$OPTARG ;; l) LISTENER_NAME=$OPTARG ;; *) usage ;; esac done [[ -z $DB_INSTANCE ]] && { user_msg 30 19 $PROGRAM exit 1 } [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } [[ -z $LISTENER_NAME ]] && { user_msg 30 102 $PROGRAM exit 1 } set -a ORACLE_HOME=$(clodmget -nf value -q "name=ORACLE_HOME and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME ORACLE_SID set -a ORACLE_USER=$(clodmget -nf value -q "name=ORACLE_USER and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER ## ## Start a spectific listener ## osaSetDBEnvs $DB_INSTANCE typeset command="start" osaStartStopSpecListener $LISTENER_NAME $command (( $? != 0 )) && { user_msg 50 18 $LISTENER_NAME exit 1 } user_msg 50 17 $LISTENER_NAME exit 0 /usr/b k#o@ /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraStopASNRrse@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraStopAS.sh 1.7 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraStopAS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_oraStopAS ## ## PURPOSE: ## Oracle AS Stop script for individual components ## ## ARGUMENTS: ## -a Application Name (smart assist) ## -i Oracle Application Server Instance Name ## -c Oracle Application Server Component Name ## ## RETURNS: ## 0 on success ## 1 on failure ## #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- typeset version='1.6' . /usr/es/sbin/cluster/sa/oracle/sbin/ASUtilities . /usr/es/sbin/cluster/sa/oracle/sbin/ASMonitor . /usr/es/sbin/cluster/sa/oracle/sbin/ASControl . /usr/es/sbin/cluster/sa/oracle/sbin/IO typeset PROGRAM=${0##*/} PATH=$PATH:/bin:/usr/bin PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities export PATH if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- while getopts a:c:i: option do case $option in a) APPLICATION_NAME=$OPTARG ;; c) AS_COMPONENT=$OPTARG ;; i) AS_INSTANCE=$OPTARG ;; *) ;; esac done [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } [[ -z $AS_COMPONENT ]] && { user_msg 30 17 $PROGRAM exit 1 } [[ -z $AS_INSTANCE ]] && { user_msg 30 18 $PROGRAM exit 1 } user_msg 40 1 $AS_INSTANCE $AS_COMPONENT $APPLICATION_NAME set -a ORACLE_HOME=$(clodmget -nf value -q "name=ORACLE_HOME and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME osaSetASEnvs $ORACLE_HOME set -a ORACLE_USER=$(clodmget -nf value -q "name=ORACLE_USER and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER osaFindAliveComponents $AS_INSTANCE osaASShowStatus $AS_INSTANCE $AS_COMPONENT (( $? != 0 )) && { # Component is already down user_msg 40 4 $AS_COMPONENT exit 0 } # Otherwise stop the component if its still running osaASCompStop $AS_INSTANCE $AS_COMPONENT (( $? != 0 )) && { user_msg 40 3 $AS_COMPONENT exit 1 } user_msg 40 4 $AS_COMPONENT exit 0 50 8 l^#o@Y/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_osa_addInstance@@  e -ainorst#$AIO_cdlmpu"=CDELNPRSTfgh&()/01BFGMUV[\]bvxy{}'.23:Hw|!,9;>?kqKYz45678ӽh&TDLB)@?ipO*$})L*ЈR3J¨M-aTBY9QUQ*`zp PMp0ayQsN;( SN;Y9QUQ*m8vTDT4㼄iM-z b!0Z ,+sԔL3}a(ѧӎ," HজsN;UXDրq4 <~`~@1`F1q CiÌ#upόAKN;ܦԒJ70U21{@w_r;WfS aZ_qϥ"ar!-8w8 A5J!KN9*"k,D4@D5?w^Wr!tH 8s8qnxr@!ă陔!CN;_r!slY#a( 8vX /z2J43s/q8D7f*VM8w&jeMꪙ{oqk@S4U)h T6BTYm:BQ CpNyy35, a` 6S4UfQRZ¨-(rzUR759s9s9s9s9s9s9s9s9s9svF0%49s9s9s9s9s9s9s9s9s9sZ™®TBYVGJoQk "p,>&t "ҷ0<*SzXU!HYQ|)L*AhD)EnaTxT B!DCHJ&`i|)L*AhD)EnaTxT B!H!(i0UfQRZ¨- ath f PZ Qfi[U)E*ЈQg%Ҩ<`i0UfQTZU@,&t "ҷ0kX]UP.HxS4U)h T6ZU@-0 6`xqT  @ <xqT  @ `xqT  @ `*JbSU8mmFX]t @"&\53I]-(4* ޢAhDsj2Y& A A"ȇ\,3I]-(4* ޢf7fTs[Q.\*Hxـ T`ÿ;3)•M3 MbPet @(q]W"ڌt*ME"Dxߝ AĢQI [Q.\dJ$DóRE"HxU^JQ.\-Ĉ8w v/%^S,Qbu˒,$I@41//Dŭfe.H$ &PH8w//)MK\a$HLT @$xtK+k[bvf K\"a"dCr٪GIQmFX]q M2 D,^<~9QPg0 Ǐ @v**7qo PC Dx 9UT qˠ<%-*BE &㒛Z @sުLqˠ<%`ZYp[vVfS_Qk|YcbQ֜#|fwK Q3gL!8ſʏ-k^hJ7=IAQ4HYs0kZb3&ĩ]47wQ-Zא!%ؔn5zJDHhoufqϝգmis9s9s9s9s9s9s9s9s9sӰba(w殢1fGm9eYw U3) @]I.ģqZ >@]yFVfj^jreӚv2ƴ4qavfqRqz=FXCKWu]Wi&fjre AG wa E5VS{pӴ ӿU5ԔjFMwg-|^杖8ӿ ҍ;Q̾ 3;i2T%F,(o8"ER.I2iP6 ׼+bQee[8E@~-׉|\TTՓ[&cP k/{,o3[omv+Fp#Crϋ׶7EƢ  6 ױFz6xҒf5oQ(p-}FX2/^@E oj|lmkZs9s9s9s9s9s9s9s9s9s49XJ U2!A43bTSNUu:R@`)ܙY\Z֮5Yn~ii =l]Ŗo3Ri;Bf^Zw {Nik3M;Qʊ](ӿ 3,JQު Llj,rIH<=hTWu0t& s5c@Rh@)M# A2" \s2븘$"y*ME"Drd&T .9buL 1z< & "D"92@A2CD oFX]w!HyF/^Q.]kR3{ E[3QzUk}/Pݨu7y-x%GIWḨ)}a(oBc;AUaYb!_W> NnZ J&`i[.iCX / ,D4@dCZtU̧V39@#Xi8R*6ɿ5FxXi8RdTm6өt3RS,oZvF{*3\N),].Q(p-;ɖ3j/^[&'92qQ\o4 `3>f1 ktejRpbF$Q L@ZDG="&H DR')BQe2!,D4@dCw?=IAQ4H DL$Y4J$XIc (E0dˢQc0osMP0EDE&< `lQ0c HDQ0c P"H0#p  o@Fx$'ƛ.iCX$/<^JsVg 8G2,Yl\k-o,bfS!P;ufq6槯%`dgLKL5x˒,$I@41.H$ &MDbH$$"TxĒ&" I0.;ozhI4D X^,v( & "Bױo@Fx$'Ƴc[^Js.iCX$/ ϙ{o1/X)-)տe827peYE./%NعZXŬ̧}BvmkU]0}a(0Ļ7 VsoT)[Ι*ME"G>f3g8? B@~-\^@^ @Rh@)M-m\^@^gT4H a&[yȆDt1=TX^犊٥5k Ϳmo}MZ >pd*ot3RS,7E{cs*T$0ED(ċ"X$$"Txj/^b"P.Hx .أȆ,]z1أ,d Hx,d Hv( @$K,ev ڻ׭Ι~xtGk E L` E Le"I%HDp~^//D\)Ts,^ ˛f&+ E7,].e8sN,XZ]fkSpy"r$n_="&I1 M2 D=2d\jf1RA-p~isMz`CS0Ju!(p-cKkэnqzħ9MiN B騵,œe^v ڸix- I.ģq7ʺ^MB5W oN,X-CrTY:x7QTpیZLCS0ZS(gj0ڒku%A[8hճ/ejbǪ,FXب7ESzZfFkQn2 kU^>nM-i+@*TECmLOSzZt7QTpی[&'|{ TZP*|@h7qM-i-goQkNT)i5x%Ʒ8bSVwQk|Yc8ʼ fqkQZ]FZou'oM›joBcc Ju,d.oQkNU分Lh7H* & "D"4\^/lrE Lb%Ju!(p-cKkэnqzħ9MiN B騵,œe^v ڸix- I.ģq7ʺ^MB5W o7&2VG< )L*AhD)EnaL B(dKՓ%o?=we8[Epp|idU(3ɘ!88>4isMz`ks%9h Juo!W}5Ŗ8Sa;W/%ؔn5WRvڻ)(Fv+7mK"Q"$2dx!{qA(0 n D=0IܾzE Lb@d(ze!W!{I+t  / 5xc< I[tbS D NKAk\^/ oks%9h JuovHbMEe*-NŭGKhjIv%iwUԝ7 lJBc 8[-Crϫ ӌ`FkQn2 o^\iJj}^H^dgP6-3&bJU^dѿɿVym3)9LaW@ B!J,+s fZ)E%n/^[&'+xTWƛeg(3̬X^M3&bYF2f*xHN7\^/VNrҝ[vHbMEe*-NŭGKhjIv%iwUԝ7 lJ1 k IH!U^dѭK`G3Qz< & "D"92,b!7,].Ab/^ǞR R($G&@8hLQ.] 0c@Rh@)M# A4,D4@fy1fGy5x$ԴNL8%a{xAYQ{b/^a DpK 1zo^sK M׺)X]RLƢσ5$j<$j0$%6e׍)Tօ+q%0)aU %0+׾ު.bRJyKB8A&|FƖ+kP8@Fx$$nvYkHֽҏ5y mUkWB^/--k71%g3)_RT!\1-KN PyKN Pv8JVbgTm`ek VoR1Bg^ _);}mPSvYsIyɖ^ Zpb >1x)i``l )07]̃k< )6-oFX]zfbo Y1Q(0 n D=0IܾzE Lb@d(ze!pX)A@g8? Bpp|i4 `0^R]N%049.sisMz`11/X)-)տ!W}5Ŗ8Sa;W/%ؔn5WRvڻ)(Fv1 oؓւ7ypX)AL]3zfv ׾*찫}Mii =l]Ŗ1918>b&*`yg5rd{5;cp3׵`5ҝAzԬ%8%;DΤf"ZSE޴u%A[: jf^a(&'. 0SQ\ob&*`x.7isMz`"<,DELo[vEȆJ&`i{g Yb!Jnt,zk^ʏ"E dzJDHhkNXD;a5N|Eyb!"Ut3R592|E(@(EǎuVSo4 `^Q׶Ea/^Ǟ^Q׼Q DE0f06(ċ"X$$E0a罆"o% R(< jl06(&"Xh0Ee/sb,H L@ZDG>|E'*;od("U1Fi8VLQI DL$Y1Fi8 @"&\5J, FȆW< & "D";oE0d(`a$  Xo,Dzb DE.yD lQ 4@@)M @0`F$\&A!qF$\&C Lx V¢` 1No4 ` 1zc[^)S@ZS]Ypd*o 3\_8Jes3),YN@ՙ o[ג23&fjre׼QI$ydJxDD &Y!bM &T8֥\a$HL}.bRӃ7IAPǽ"s[ / 6Kk 3j/^ks%9h Juok3 M#|fwK S.fe5Ŗ1k3)c8W{ -XJ:+)3) B*=U' VszJDHhϙ{o Nf4ס*T$0EDj[f4ס*ME"E`,/sxD!Q+!(LOts⢸8>4isMzx`,/so[v)% Sw% n$Լ Qg & "D#7" I08ױأȠa 8CD D4v(!DE"v( @$i8 @$i7"&I1zE Lb%7 \%&. c.s Dv( H"DǐH@E 0$Gb@Rh@)L=IAQ4H\"`@Px˂L$T #< A^Y1/[%9mf4ס5y*ME"EƷ8bSV8T9fg}p:bfS_Qk|Yc21 ;3Yp9s9s9s9s9s9s9s9s9s9sNÙ iʏFA-;z$l#j杕flJ iߐ7jT.Fg}M/%^S,l>xG8ʻ֝Q[3ڽdӿ@@Ni4ӿ Ĥ+92QNik3M;^K2&X/faWZ 1y,c2ճ0X-ZsL+ G+|-;z$l#jM$HjE&M JǏcQ\p2fDǞt橋i3)59 ,/\ f3&fjreVM5A(p-;ɖ3klbI$ydJ+ppx lNl sTxй  oO59ɿbxǏufq6ekPy ,/\ f3&fjre,XC $LD@a+wal 58Fl sTxй  oO59ɿbxǏufq6eowVg1mis9s9s9s9s9s9s9s9s9sӰba(wѡ{Jxӷ2F6NiVfĩ`ւ67}.bRJ PՓsQ4> &UxqKDTWƛ.iCX$/.}.bR+3MW oՔm6Ypƍ9s9s9s9s9s9s9s9s9s9sNÙ iʏFAAi#faU43bTSN#| օ+/%^S,S|zӷ3faT߉MNިέoZ MywǹSwJui;Bf^Zw8;3+ @\^K2&XNik3)~=QKw;39fgxEB-9YʏFAAi#faWo8"ER.I2iPreQ6fs7 #< AfMf4ס<\b6eo8[FӜ9s9s9s9s9s9s9s9s9s9aJQ4ev.@ɦӲ͉RM;,Sw AG^/sԔL3}a(:YhD*=Y]M4iSwE9E{@\":^֮bQ֍;겻n%04XJ=e^ӿ0nbfĻJ` 9hL+k@SN!Oi;-ufq)~=QKwᜣ|fvӚeXJ:57LOx"$4(;?nEpp~] oFX]y0H2[vMQ!S}MG|^ZvF[wch!S{)Enc4{cs*T$0EDaJظTYYl7p'? B@~-f4סT4H a&+7Q%zgY& H@[v_7zED jJ&`iu ڀU_3)nU{ np D 7jTepg8? Bpp|k;%9{1xYE^HMID 37f [٥5kလ􋠚ED &A"ɇ"Lp.BKFUn$Ƽ"fS]]ME:!J^ʏ@W`Y#R R($vE{cs*T$0ED( @$.% @C]#FY& H@ǤY& H@Q@2I$Xx,d.HQ,a.a4Hyq @tKM#FH@E 0$G//DŭnnZ J&`ixiºD ]Nިc@9hL+k@SN 0'/sWYֳN %0+׾Qࡾ1x)z%xS1U7Pdqzœe]^ ڠ/Sw^ ^^ŤU&nL wAvW̽Ki߄BrU@+0wu] qv'!x+j7qԔtbQV5fowns3nL ,n sW1i3@9e44G*)tN3s/sL+ GzKD7Zlj,rIH<=hTWu0t2GtUY<3)ClN`yet9<-9d^ ^]gZصIa{T o Uf<\*QRUY+ 18F``oUYEpp|if KʸIa{Wf*QRo4 `U]Ypd*o 3\_8Jes3),YN@ՙ o[;+Ty ,[711x)iUKG>wFV*+E5=umkKN gUfvBv&\x3 WbvfɦW֛}FzbRJņulZe  xe~Ժo+N7U@+6ijv^@/Sw;N2vYj̧Tgg7Pdo03Lq;o4 `ުo.j{W^ Zpc=<#` G0c5u4J={{ /(90}a( cZ󴅪G j}/Lks2Spү]VWcԔL3}a(SwC^_WTy{QGB*+q<@dP0j55, rMoFX]p*[fS,D4)[΂`disMzx`^xXi8RdTm6xB ٹa G=1x  V¢LOtstej⢸8>4isMz!x'=1mW o[;+Ty ,/\ f3%הaYO=0x  V¢LOtstej⢸8>4isMz!xgb1 kުbR*MֶyrE I2h'\a$HL#` \a$HLT @%3g8? B@~-;).7jk(Wp fVpd*nުbR*Mֳ̳QZZs2eYE./%@;bf oWc"(fQ5.#e+qӬZ uz*uVSo4 `^Q׶Ea/^Ǟ^Q׼Q DE0f06(ċ"X$$E0a罆"o% R(< jl06(&"Xh0Ee/sb,H L@ZDG>|E'*;od("U1Fi8VLQI DL$Y1Fi8 @"&\5J, FȆW<@dP0jn~zJDHh7A"Hh0Hǁ, 7"P=1"a"ɗD<ǁ`6( D a&C Lx0أ.a C8.aDE&<@`F+bQee@'xHN7\^H^ya{o1/X)-)տe827peYE./%NعZXŬ̧}Bv7mQazXt3R592|E( "@d $Lx˒,$I@41أĒ&" I08$L5 AG^/s޴1 Vf4סszpwFVX^g{ -XJ)(²{ayF/^v|\TWƳah(Q%VS޴1 Vf4ס&{ayF/^c񶍵9s9s9s9s9s9s9s9s9s9sNÙ i߽UP. -XJ"+)杕flJ iߠMރ -XJ9{A%BQe<̧*n!zsNЙWր@`NZ >uVS~ AGKϋ׶@$'@bQ׋׶@bh 9e44G*)tN3s/sL+ Gz]Z >D%VSƛ&'szsS2,`ȕ0z ,/\ f3%^팹 Y[K7b{>ys0\dJ< Y1Q\o4 `0 1z׶Nrҝ[;3S2T%^=eyPݨZehu7z+)5w;z=BoQgayGױ{ /(Q DE0f06(ċ"X$$E0a罆"o% R(< jl06(&"Xh0E<9I$ "Aأ.a$`.a ,SF&I%S$`.a"Dأ(& H-"#d$]ˆP)E!(²)ct3ˢGs*T$0EDQ DEDE&< `lQ$Q L!&< F0j$Q4J$XIc Xs0J Xs0% ,$1 'xHN7\^H^ya{{ Eэnqzħ9MiNՙ oFӜ9s9s9s9s9s9s9s9s9s9aJQ4ުLqˠӚvU*X)~|t *|#!(fQэ*;bOzjIv%hsNЙWրBӚvZ@SN/z2J49G2,41Rw A2cM$HjE&M JǏcQ\p2븘$^a{ 1zt2yRK|^$ ڀQvWoFX]w!%أ[*= oTdm\I"b",R ॢTŭdQ6fs˒,$I@46(;c3)]$HrjIv%hױT4H a&ɐ `{xAYQ|E:wI35-3S, kNXD;a,/]&fjre׼QK" ` Q"$yRȔH,RE"Hv(,`De1F LBD(T( @P87o@Fx$'ƛ.iCX$/g^JsYpaЊMүYkWRK(k@|UYN3)Q`])]{}_VWa wVg%Qg & "D#$]! &Y!ϙ{o@Fx$'ƛ.iCX$/j/^*T$0EDэnqzħ9MiNՙ 6NުMD71 C3)s oɑ@%ުW孉Rsj/^h7ՙ< o[vR+Uy$Լy tԒJ7ѿ7쵽^RQ3L&e5XJ8QI [wIoYjJ&a5.t+qRn.bQׄLk@p&*T$0EDbot7T@bQV67}i[\ԔiYwQ.]I.z]@d*BE d(%ؔn527`dKa8{xҒ]G &6RK;?$G`n8$ˤ;9$ԼOlťSm;%ؔn5)^Ql>omz7f ޑQ5Ь.2 -oB-&f&Xo)%؋ױ%o M;0U21{hDuPwe"$ƴZƷ8@a;RKiI.^$G7m;!(ҳeJa G^*a G^Qe:fe>FT@bQտa{zJDHh U1ǩ%N/^^QױT4H a&ɐ  =I.qz"y1fGya{=%-{ /( ]Db-R^ 1z{ -XJ)(²0Q^/s-t3RHb{b/^ 1z)E@BK(kO@ү FKk =I.|EX^W{ -XJ9a{\ Y="&H DR')_:_t3ˢGrIv7?=IAQ4H\EK,Sd$]ˆP)E^a];RK*ME"Dv'xHNghƷ8n9Mf4ס{b/^ks%9h Juok3 M#|fwK S.fe5Ŗ1k3)c8ko؄LKNLU^{ -XJ=.b:7wncforE I2h&< "@d $OoDD &Y!$1IHDqأ*T$0E zJDHqأă@DI U"2c6LOtsĒ&" I0/X^VFy$ԴNL3Qz7I"b",QH$$"TQA"a$*czԱأ*T$0E zJDHqأ˒,$I@41.H$ &MD7m9a}M/s(QtE'+FtA(p-+a-5q%sN Wޢ֙ǠT4H a&dѿ8-kNs9s9s9s9s9s9s9s9s9s杇3+ DӿBQQRa[NiVfĩ`xFnJ3fW;ԔTfsQ%5 ,$LD@a*_sn ,boBc[+rM7p'xHHſ83ַҸ2oI.ģq5l#jSwfMfdUH$#t$ U".ɭ;RQRK(k0d*o8 ɁQ.]I.qz<$AB Lm`v<~9$HqIvc㋗Hv*+M;!;}osIyɖ32oP Jw#=M/RK(kMGDZR|[3Jo"6kX]0d[ M;[m;LKNLRKcRKױT4H a&ɠA2=I.h7o,'#Dn`.${}-%ؔn5ޢF5# ڕB[3JIv"x"95c@Rh@)M#@8eI#6fj^jrȩ)7Iv%xG C^Jz< & "D"94&Taa{xAYQ{b/^a DpK[^QױT4H a&ɠA4z]by1fGya{=%הaYLpK[v@ݨuq3{ -XJ=.b=Y]"oTgRѕ<s AG{b/^@E oEpp|i5BN{b/^c쁻P .Fg}MZ >uVSՕ jZvF{*ZQaz[710}a( ya{@R.VX%b{;+WKk =0mW o[vBQfʕߐTfsQre2Gncf>fE[ުfjZf&Xϙ{T""HǠA2$\v(,`D@( HHab@0QZ'xHNghƷ8n9Oש;}aY`Kk 5mF54:ՙB̾ 3;[32[ﱈTYp,UR R($rċ"X$$"Ty5mp~٥5k6|EzJDHho1/X)-)տe827peYE./%NعZXŬ̧}Bv7mmo  AGKϋװVfe=]FPV7\^@^a{RKU AG{b/^F0cDH .eQ(o/WΨ & "D#L$F0R "TǤYA2ᨔ Qd7@gDT4H a&g% #< A^Mf4ס{b/^ks%9h Juok3 M#|fwK S.fe5Ŗ1k3)c8kU^{ -XJ:+)Sw4RQ3La DBQe<^罆"=I.ƀq]olst3R592|E N*T$0E \oo8RKc"Dv*+MoH$$"TTWƛv7zwY592:˩D|bQտ,/]y+#fƷ8bSV8T9fg}p:bfS_Qk|Yc21 ;3YFs77^0Q^N V9bu%nQaz[712V[js}lJ#%Ԝ9)E2c@Rh@)M#[ufqZ6֜9s9s9s9s9s9s9s9s9s9;f*V)~j%sHbVӲ͉RM;kMSo bZ M-{4M-yө~"Q޲`}a\dӄzEn`..M޴z؊$Zw.}M.`vӴ&i5)杖8ӿSsL+ G5uSzX$S1t41s}n+I6,)7Ҽe[SwoQkNLxRe:H0&[#=MZ >ZPܱ‘8R'enfe5w_XJ9O592+TY8s[j8F@,b8Tg$XEonXZW8LR Aʋre=BX=#5G7wVg-mkNs9s9s9s9s9s9s9s9s9s杇3+ Dӿ5u.ޭͧ43bTSN>s}op3XJ;׺^N W7oVӚv2ƴ4r]F];SzZhi߄tah(Q={i;IAM;N W5aJ&jӚvZ@SN!Oi2T%J# zr֑~(:Sz]Q9cIv%@$.=)Eਠՙ hZs9s9s9s9s9s9s9s9s9s49XJ + Rpb9eYwtnf8%npE'+wfޢ4n :NTYr+ti=Mޢҷ6Ӵ&i5)~J7q ӿ0QzӚvZ@SN/z2J49G2,41RsWbW8.q$X5"&xz%cѱبabuԂ oFX]z=8*2V銊8c[4WQ+ ԂzpU殢W8JoQkDf.oFRZ"[7 0d0x"ȇ"AQ0I(&̧JJ}Y7LO|dA֒Z2Vb8>4Nj1`s I#G,r$0ED"|d0H$ĉD9E""LD 7m6e3Qaz[71ԒZ7"L|n'<[uԒZ7 )[ +,UkMI,XJ:Sz^(I.2VFQ\o4 `YpYF;3Ѷ9s9s9s9s9s9s9s9s9s9is1RAM;w_[A ={i;*ؕ,ӿzU{ -XJ<^ƌWRQr-;wu oR:4条3LqM; 0}a(杖8ӿ ]A^/^w^h*ӚeXJ8ւM$HjE&M JǏcQ\p2뽆"yKpւ1={ EPPp!n Epp|i5B@ ׶7m8mkNs9s9s9s9s9s9s9s9s9s杈>is9s9s9s9s9s9s9s9s9sִLOx"$4(;?nEpp~] ךɊ@EJ *pRQrbZybxGo|$p)E@iWKotH=",o|Z >tHIAQ4H=", & "D"< & "D" /x0+ta[޴}m(=IAQ4H #< A^1 vhG@=)0`IqvZ >z\m0 zEL X=8!>vrCD `$z T(`*+@d*BE zEL X=8B|ϥ zEL X=8{ "@d $Ly0`;|칷Ĥ+92$1IHDqT\'.U~Zؕ!YLg[ Y2(@5䇞SoN^BQ3LI[oP&">fA"ȇ2CH P%%0)D$0 H T'x;3$XI&i"i,H9 zEL X=8O ˛f&+ Eb&*`y0`;tzVQ46w|UZ5#57jX nxfg% &Ӵ)SKbE:!Je=)EA%^ӳMy+|)^,+ e=)E"YnkíLO7wVg1`.ħR3M[[M}EcbQ֘ﱈWs/)q|**?Yqz4567<+9KX W8@`< sCD,HLdċ "QGKtj5UM-֌/a> )< xN_Skҹm4*UozIvaU_kf>Zс'i5.IEOȉ<@`I <1[֌o a艇$ aP5  a#hxh]2eLk?kFC30MJ7o/|ץl<$jmKs63֫=Z*ml[?,'^])G'+Aɇ \\\D]f?.nYxGmU[MerMF𞒍yM])8vSUmU[O8vSNŇ_2U]tɇUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU1\bː UyN2M%ld\aUɀ\bː UyN2M%ld\`<ܫ!s$d2jJ aF\HUwhE+c$*Drj`22Bxĕ^SFB-I[!W᫽)"Sjea-{6Y?E|U"Jd3uȰ?EF \fdCG:S%-qE{h! L+b'fa;w&$JaraMtNiXy!ڲc}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSWzSt5>Aڪa{/+˜4MɸB+,l᎒P5q6qdž'^ɇmU[OzI7)ِ+a#̶3є)##謲ItG(B׋5KL?˵ʯa.қh|)Um2G(S9Q0$"$v8vr0R8?+@+H銹 4djL0=123bWSkҹ0Mi5/V 5^F;2a?"^cXbԕz21bԕbԕU6nwWJ=w5 a?%r+r{ ?Z mU[L!f)(Yd ;;9GP\Ϡk?mkϤt\NLN25&MDkZ[1yD`19,fF:ɠT<+8Z6ml&eL>}?8i%li0U3#K pRV*MbԕU6nwWlZ.|~p1jJdCG9q| #@X$)\b HH#JC8(ڲPrD @i1  SjMՖ;(7ciB1`'_%?Kj^mU]:!=m;| xh=JnIG(řPradI, D88g{+_n<4~]f<R@zzmsPUs7Z[c{?mg$U7lm=7H-۾m;/).e0zK6wm~ԦWRVVYW$ٺM\t0[7A?H.xVÕ5>j^j fp~ Q)DM H&{YCZ7+|?FloiV|Kfa;g˃zJ)@W>8 ZsUK?V 5]N"h XDDhƱ'&-4`r ,xK4`6jhDx"$Y2@ ż6@eX$w;gm$ XԴ!0v+3 ?fa; \'bPN?Ձdc8Nw ܶ!3 ܙ^fa;٘NӆZs+3 'y4G, ""C4cXӓ?&H3 ހ2@ ųS%x٘N;!3 gm$ ⱩhB-4aW=cNM6ӳc/r{,XԊb83:~V5",iɕʕsRƤQ92{RYRj[ 3# rgn%OjF E͝l s?3xx$%ƂƜۥ OQ N󐍙.0NVgҁ60).s?Ӄ? sڪ>2]_Ks٘N; ~|fPvsRmtVPA<=UH*/*楽q8(<2[|lm=--6v)?8°ڲr*KsZhc|lm=--6v驜l'gNgw38>~nlcajJnưmL@ Sa%%cX:Yuޔh.:6^oJ  Pxd=(;{L>6K66=Yy+s&[7A^]VK驒KJh=7<8sRPv1{}?F&3oqS|l O|(<2L?8NF-I[PUs7F @DM H a?a?%r+r{ ?1dX?@@L,2(vT56Hr^~Ŧb%7+-4`r?iAkȉ<@`I W>in/Xӓ;g1G+|m@cNO4c4bSlPMʕsR4bSljʕsRH reG)՜VVH reG hĦ?˹`}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSWzSt5b'fa;w&KhJưku])/ ܷ?2.j^jia?F&3o1=WkAҟJ)w;axCX)\'bPN3LDȓ X@ppxq8‡eJ}Y3k\zw& ?mkj ܿ?_jw,"K5+Z͋gi?ş6<__~Ŧfa;LUN bYX$K> fYU|@!%L=NZsN?A'ri/)'xJ9og_E|]NJC@XENP`}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSWzSt5Aҙ(kr,<4{a%%cXzтRNl<驷iNũ+z$RI6[<~s>pGUyNqٺa?F&3or1jJމ<=^M3l?8N*o)/A;a&")e2Ӂd$j:S91Mɥxhl=w5 a?%r+r{ ?Z L`n?gB &@ óqʕ\fֹ\913fֹ\~'r6lMh.j5/UҟnP^)^b0]im;O:jsQMJIO6V,Ih RgͭrcF$9IIadjLW=1RƌHrCî`fֹ\G4aWJlgxG4cs"ƌH)`vta 0vT020Tp?9cF$Ӄ?@у;:0;*WUҙD *8k?Ӄ61! , Uҙ@ T\p1;41몫~(Ye\f?{LՖU6n90rx1SrW>@j=lrrlj=lrYg͌j=lrYg͌`?mkj]U^69IHh5e6+Hr MceihIɄ᪶sR])Rw, mOZ.2؛]ş=ϔkVYW$ٺ,E[cf]llm2ƌ l%+HJC9 915eiq&]jHj @9aUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUL? ]Mx"Jd3uȲ!{/+tK֌-sgiMM[JvF-I['=5/De[w>j^ Dx-%W:Pyw^-bas6k ('#)^$6|Aҟ0^k/1?b!FS-8MJ8<#MW>NLrLW> ܇ gͭr@ڲUWͱN25&p1;41몫~(Ye\f?{LՖU6n90rx1SrW>@j=lrrlj=lrYg͌j=lrYg͌`?mkj]U^69IHh5e6+Hr MceihIɄ᪶sR])Rǹ^j*7A65N5, #i) $ƠՖ.ljw!%+H UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU05w7AXD)"l=䗊Еa:SF \fJ 9cV;O#ab$6V6[<~s>pGUyNqٺa?F&3or1jJ&"O l*^L<1 M>('ra?"^cXC4Zp, \qJyxG&")y4v#a?k I+\k^6]w7A"Jd3uȰ`^,3 "La!Acg( + gͭrrc gͭrN9;?mkZ.2؛q 8WNJ9aJ/8-18ɛM͝7<Ɲj4W#Qyc-7Ag4Xڞ\e7͠?%!{)X֬ItY3cV&͠\M9+,F,h,jѲ LJC9 915eiq&]jrVY @щ A0d" ѲBJ/8-3.UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTޔaMt&KhJư)RkhRV0zmE[+mU[OzI7)ٖbas6k~Eyư)/RV0zmE[+"zmE[+MrV?F;2a?a?%r+r{ ? L0.X?@@L,2(vT561g$w05&M J. |ץr1SWBM 2tgBEʕf~gPOLT*Wř%a@?: J~b<[>+yq,fF08 F#+͌Jb83R 8>.UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTޔaMt12{/+tʹ&~Nj㏁|5obԕx{6+ 6.h y4G, ""CYP ~Eyư)/RVIeh>9iw>j^mzV~'s^/.W)0¸?.*mJnI&>V,3 "La!Acg( + gͭrrc gͭr@}lgB 9<\x gͭr|ץe69i91(  4djL0=12=<| .j6{c{U3zv]ϴk5.,?|ץlgxGJV`UDZE1QpF 9decAϔfB @}x *楿-Jeg4+AȢ @E]N_.UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTޔaMn.l`n0^+BV5o\ZJn7<ƴ`nm;O:jm~k7< Dx-,li<Լxf IFa?F&3otVYW$ٺĚfxcaxk I+\k^6]w7A$&F \f,3 "La!Acg( + gͭrYg&93NnVYJnkS+Mgj *Z7A,'1[DD"BY+& g <""D F-I[,hpp|YD`%-qE Ֆrlx@3](S9DI $(X<0p1jJaʕfMn.l`n?A,~ gPrȈ"$@HPxabԕab$ vT3hqsd3uȰ`X=gnk)cajJnư&76J0Z7\"=Z?J|Լxf IFт嗄yz!Itjs6+ CXA:+,lM3x<1N_!?7]$Rap~]UxauޔD`%-qE 3LDȓ X@ppxq8‡eJ}Y3k\{VYɎ@) ttO*Ws^/˜IHgmzV5,l{L;Ԡm,hĆEs?mzV9Iڛfȉ<@dI&(,|@"j$îbPNՖra,4bC0똝 +j9 ܆hĆ #.UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTޔaMn.l`n=Z?J|Խhkr)A'6v tdžYe\f?'q5qҁ|N˹8`G8տo~j^ՖU6n?VR&iF=m@PN*7ALaJ fų])/o4Wf2:͌xHeɺI@ŇN^5KL?˵ʯa.қhqsd3uȰ?@@L,2(vT56eP@7A,pp~75)Z.|~q|ץcZʹ&yg͍Z.2؛6#LiZ.|q4䬳%L["@9Ϧ5]MɭYnՖrxDxȓ,$LQ!YfBJ&֬Mj9< FH "%"Lzqp  ܇  5a1('rj90JCAN-(&m76vs?IHg Lj E[cPAwWJiYg,5F$5,j F˸5 (`}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU05w7AXCc謴{/+"+6u])/qiYe\f>XD3):SMJa10|5e;~>m +Ar{e;|]֞GK6ͬ=zStMˢřPradI, D88W>9@)6+rcfֹ\暪3&.}͎DD"B6It.j6zP|膏xh(ZL?bbԕ!-(.Դr\̱f)(Yd ;;9GP\Ϡk?mkϤtIy"lW=%- \3ɥX- \3p=KH%̳fֹ\"h XDD~sGzz!0m=,lɟCc謴Iy"y%lsEeHxEȉũ+e y4`"B"$L*.Ӄ?8F G  5a1Slۡ&ryB"E ,<@xYDM HD$I\nmMnYD @$3:~cԴr\<@`IRj[ 4djZD @$V=KH%̎@"j$îc0=KH%̄:~5cԴr\T#Pr ՏRs'`vr#iRs'eJ9og4$Mgw38>~`}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSZ2fֹ\@H9[\kDhdi-7A83& {?$H@ ܆ 8]w! > ܆ 3A,B3gA,B3h4I'&xC?A,5qqsdI˸- \3&5Lv 5&'~%f־KZN.LgɛM͝m ttY"R8?`O c @xaЋCMi+gͭrmU[LFg)Um1LpC?"MG>AڪdCG<=UV,<4y(TqЋCMi 9,g ttMiԂedʕsRx,mU[LF( $@? g ,+HIԂlMHF<:S%-qE9&h򣎄Z L`nD4y(TqЋD)"g3%q|NnnB75 DY"EAԷ]gɺIԂedГLk.`m k$o@/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_osa_instancese@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_osa_instances.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)55 1.3 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_osa_instances.sh, hacmp.assist.oracle, 61haes_r714 11/28/11 15:10:38 ## ## NAME: cl_osa_instances ## ## PURPOSE: ## This script is meant to provide with list of instances defined ## for Oracle Smart Assist. It takes an argument (-A or -D) that ## tells it whether to search for DB or AS instances. ## ## ARGUMENTS: ## -n list nodes ## -m run KLIB function ## -D type is DataBase ## -A { CFC | AFC } command is related to application server ## -v list Volume Groups related to DB / AS (-d | -a) ## -d list DB instances ## -a list AS instances ## ## RETURNS: ## 0 on success ## <0 on failure ## PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities export PATH . /usr/es/lib/ksh93/func_include typeset version='1.2' #--------------------------------------------------------------------------- # Global Definitions: #--------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oracle/sbin/ASGlobals . /usr/es/sbin/cluster/sa/oracle/sbin/DBUtilities . /usr/es/sbin/cluster/sa/oracle/sbin/ASUtilities #--------------------------------------------------------------------------- # Functions: # osaFindInstances #--------------------------------------------------------------------------- # Function: # # Purpose: # Find AFC or CFC instances on the local and remote nodes as specified on # the command line. # # Arguments: # (1) type either AFC/CFC or DB # # Output: # a list of instances # # Return: # 0 on success # 1 on failure # function osaFindInstances { typeset type=$1 typeset -A insts if [[ $type == "AS" ]]; then osaSetASEnvs osaASFindInstances typeset inst for inst in ${allInstances[*]}; do echo $inst done elif [[ $type == "DB" ]]; then osaSetDBEnvs osaFindDBInstances insts typeset inst for inst in ${insts[*]}; do echo $inst done fi } typeset TYPE NODES ASTYPE typeset CMD INSTANCE while getopts n:m:vA:D:da option; do case $option in n) # nodes NODES=$OPTARG NODES=${NODES//:/ } # currently not being used ;; a) # list AS instances CMD="LIST" TYPE="AS" ;; A) # command is related to AS of type OPTARG TYPE="AS" # application server ASTYPE=$OPTARG ;; d) # list DB instances/SIDs CMD="LIST" TYPE="DB" ;; D) # command is related to DB of type OPTARG TYPE="DB" # database INSTANCE=$OPTARG ;; v) # Volume Group for Oracle DB/AS CMD="VG" ;; *) ;; esac done if [[ -n $TYPE ]]; then if [[ $CMD == "VG" ]]; then # need VG info for a given DB or AS if [[ $TYPE == "DB" ]]; then osaSetDBEnvs $INSTANCE osaDBGetVGs elif [[ $TYPE == "AS" ]]; then osaSetASEnvs osaASGetVGs fi elif [[ $CMD == "LIST" ]]; then osaFindInstances $TYPE fi fi  k $o@ /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraMonitorASe@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraMonitorAS.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraMonitorAS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_oraMonitorAS ## ## PURPOSE: ## Oracle AS Monitor Script for individual components ## ## ARGUMENTS: ## -a Application Name (smart assist) ## -i Oracle Application Server Instance Name ## -c Oracle Application Server Component Name ## ## RETURNS: ## 0 on success ## 1 on failure ## #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- typeset version='1.4' . /usr/es/sbin/cluster/sa/oracle/sbin/ASUtilities . /usr/es/sbin/cluster/sa/oracle/sbin/ASMonitor . /usr/es/sbin/cluster/sa/oracle/sbin/ASControl . /usr/es/sbin/cluster/sa/oracle/sbin/IO typeset PROGRAM=${0##*/} PATH=$PATH:/bin:/usr/bin PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities export PATH [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos } export ODMDIR #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- while getopts a:c:i: option do case $option in a) APPLICATION_NAME=$OPTARG ;; c) AS_COMPONENT=$OPTARG ;; i) AS_INSTANCE=$OPTARG ;; *) ;; esac done [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } [[ -z $AS_COMPONENT ]] && { user_msg 30 17 $PROGRAM exit 1 } [[ -z $AS_INSTANCE ]] && { user_msg 30 18 $PROGRAM exit 1 } user_msg 40 8 $AS_INSTANCE $AS_COMPONENT $APPLICATION_NAME set -a ORACLE_HOME=$(clodmget -nf value -q "name=ORACLE_HOME and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME osaSetASEnvs $ORACLE_HOME set -a ORACLE_USER=$(clodmget -nf value -q "name=ORACLE_USER and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER osaFindAliveComponents $AS_INSTANCE osaASShowStatus $AS_INSTANCE $AS_COMPONENT (( $? != 0 )) && { user_msg 40 9 $AS_COMPONENT exit 1 } user_msg 40 10 $AS_COMPONENT exit 0 ANC k $o@A /םa՝a֝a&A 2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraMonitorDBe@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r721 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraMonitorDB.sh 1.7 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraMonitorDB.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_oraMonitorDB ## ## PURPOSE: ## Monitors a named Oracle Instance and Listeners ## ## ARGUMENTS ## -d ## -a ## ## RETURNS: ## 0 on success ## 1 on failure ## #--------------------------------------------------------------------------- # Global Definitions: #--------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oracle/sbin/IO . /usr/es/sbin/cluster/sa/oracle/sbin/DBUtilities . /usr/es/sbin/cluster/sa/oracle/sbin/DBStatus . /usr/es/sbin/cluster/sa/oracle/sbin/DBControl typeset PROGRAM=${0##*/} PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == high ]] then PS4_TIMER=true set -x fi [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos export ODMDIR } #--------------------------------------------------------------------------- : Main: #--------------------------------------------------------------------------- while getopts d:a: option do case $option in d) DB_INSTANCE=$OPTARG ORACLE_SID=$DB_INSTANCE ;; a) APPLICATION_NAME=$OPTARG ;; esac done [[ -z $DB_INSTANCE ]] && { user_msg 30 19 $PROGRAM exit 1 } [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } set -a ORACLE_HOME=$(clodmget -nf value -q "name=ORACLE_HOME and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME ORACLE_SID set -a ORACLE_USER=$(clodmget -nf value -q "name=ORACLE_USER and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER ## : Set the environment variables based on the selected SID ## osaSetDBEnvs $DB_INSTANCE ## : Check to ensure the Oracle DB is in the OPEN state ## osaSQLStatus (( $? != 0 )) && { user_msg 50 9 $DB_INSTANCE exit 1 } user_msg 50 10 $DB_INSTANCE ## : Check to ensure the mandatory processes are running : on the local system ## osaProcStatus $APPLICATION_NAME (( $? != 0 )) && { user_msg 50 12 $DB_INSTANCE exit 1 } user_msg 50 13 $DB_INSTANCE exit 0 *) k(0$o@ /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraMonitorLSNR@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraMonitorLSNR.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_oraMonitorLSNR ## ## PURPOSE: ## Monitors Listeners ## ## ## ARGUMENTS: ## -d ## -a ## -l ## ## RETURNS: ## 0 on success ## 1 on failure ## #--------------------------------------------------------------------------- # Global Definitions: #--------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oracle/sbin/IO . /usr/es/sbin/cluster/sa/oracle/sbin/DBUtilities . /usr/es/sbin/cluster/sa/oracle/sbin/DBStatus . /usr/es/sbin/cluster/sa/oracle/sbin/DBControl function usage { print "usage: cl_oraMonitorLSNR -d -a -l " exit 1 } #--------------------------------------------------------------------------- # Main: #--------------------------------------------------------------------------- typeset PROGRAM=${0##*/} PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos export ODMDIR } while getopts d:a:l: option do case $option in d) DB_INSTANCE=$OPTARG ORACLE_SID=$DB_INSTANCE ;; a) APPLICATION_NAME=$OPTARG ;; l) LISTENER_NAME=$OPTARG ;; *) usage ;; esac done [[ -z $DB_INSTANCE ]] && { user_msg 30 19 $PROGRAM exit 1 } [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } [[ -z $LISTENER_NAME ]] && { user_msg 30 102 $PROGRAM exit 1 } user_msg 40 12 $APPLICATION_NAME set -a ORACLE_HOME=$(clodmget -nf value -q "name=ORACLE_HOME and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME ORACLE_SID set -a ORACLE_USER=$(clodmget -nf value -q "name=ORACLE_USER and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER ORA_SHELL_ENV=$(lsuser -a shell $ORACLE_USER | cut -f2 -d=) if [[ $ORA_SHELL_ENV == *csh* ]]; then ORA_SHELL_ENV="csh" elif [[ $ORA_SHELL_ENV == *ksh* ]]; then ORA_SHELL_ENV="ksh" fi export ORA_SHELL_ENV ## ## Set the environment variables based on the selected SID ## osaSetDBEnvs $DB_INSTANCE ## ## Check the Oracle Listener status for this ORACLE_SID. ## lsnrstatus - An Associative array which holds the status ## of specific listener.This array is populated by ## osaSpecListenerStatus() function. ## typeset -A lsnrstatus osaSpecListenerStatus $LISTENER_NAME lsnrstatus (( $? != 0 )) && { user_msg 50 14 $DB_INSTANCE exit 1 } user_msg 50 15 $DB_INSTANCE exit 0 use kf#o@ /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraStopDBLSNR@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraStopDB.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraStopDB.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_oraStopDB ## ## PURPOSE: ## Stops a named Oracle Instance and Listeners ## ## ## ARGUMENTS ## -d ## -a ## ## RETURNS: ## 0 on success ## 1 on failure ## #--------------------------------------------------------------------------- # Global Definitions: #--------------------------------------------------------------------------- typeset version='1.4' . /usr/es/sbin/cluster/sa/oracle/sbin/IO . /usr/es/sbin/cluster/sa/oracle/sbin/DBGlobals . /usr/es/sbin/cluster/sa/oracle/sbin/DBConfig . /usr/es/sbin/cluster/sa/oracle/sbin/DBStatus . /usr/es/sbin/cluster/sa/oracle/sbin/DBControl typeset PROGRAM=${0##*/} PATH=$PATH:/bin:/usr/bin PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities export PATH if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR #--------------------------------------------------------------------------- # Main: #--------------------------------------------------------------------------- while getopts d:a: option do case $option in d) DB_INSTANCE=$OPTARG ORACLE_SID=$DB_INSTANCE ;; a) APPLICATION_NAME=$OPTARG ;; esac done [[ -z $DB_INSTANCE ]] && { user_msg 30 19 $PROGRAM exit 1 } [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } set -a ORACLE_HOME=$(clodmget -nf value -q "name=ORACLE_HOME and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME ORACLE_SID set -a ORACLE_USER=$(clodmget -nf value -q "name=ORACLE_USER and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER osaSetDBEnvs $DB_INSTANCE osaDBStopAll $APPLICATION_NAME (( $? != 0 )) && { user_msg 50 6 $DB_INSTANCE exit 1 } user_msg 50 5 $DB_INSTANCE exit 0 ODE k$#o@~ /םa՝a֝a&~ 2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_oraStopLSNRNR@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oracle/sbin/cl_oraStopLSNR.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_oraStopLSNR ## ## PURPOSE: ## Stops a specific listener ## This functionality is used from oracle SA when cluster services are active. ## ## ## ARGUMENTS ## -d ## -a ## -l ## ## RETURNS: ## 0 on success ## 1 on failure ## #--------------------------------------------------------------------------- # Global Definitions: #--------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oracle/sbin/IO . /usr/es/sbin/cluster/sa/oracle/sbin/DBGlobals . /usr/es/sbin/cluster/sa/oracle/sbin/DBConfig . /usr/es/sbin/cluster/sa/oracle/sbin/DBStatus . /usr/es/sbin/cluster/sa/oracle/sbin/DBControl typeset PROGRAM=${0##*/} PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR function usage { print "usage: cl_oraStopLSNR -d -a -l " exit 1 } #--------------------------------------------------------------------------- # Main: #--------------------------------------------------------------------------- while getopts d:a:l: option do case $option in d) DB_INSTANCE=$OPTARG ORACLE_SID=$DB_INSTANCE ;; a) APPLICATION_NAME=$OPTARG ;; l) LISTENER_NAME=$OPTARG ;; *) usage ;; esac done [[ -z $DB_INSTANCE ]] && { user_msg 30 19 $PROGRAM exit 1 } [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } [[ -z $LISTENER_NAME ]] && { user_msg 30 102 $PROGRAM exit 1 } set -a ORACLE_HOME=$(clodmget -nf value -q "name=ORACLE_HOME and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME ORACLE_SID set -a ORACLE_USER=$(clodmget -nf value -q "name=ORACLE_USER and application_id=$APPLICATION_NAME" HACMPsa_metadata) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER ## ## Stop a specific listener ## osaSetDBEnvs $DB_INSTANCE typeset command="stop" osaStartStopSpecListener $LISTENER_NAME $command (( $? != 0 )) && { user_msg 50 20 $LISTENER_NAME exit 1 } user_msg 50 19 $LISTENER_NAME exit 0  l/$o@@/םa՝a֝a&)2vT./usr/es/sbin/cluster/sa/oracle/sbin/cl_osa_modifyInstance@@   - aeinorst#=AEOR_cdlpu"$/CDIMNPSTfghmy&().01:BGHLUV[]vw2;Fbx{}!,3<>?Yk4679KWqz|*58\'X @JZ8 G2z%@HE "MB,fMdiՂ]syu^伌Nt岡H a  8,^57z^ӿz%@HE &ABN$DH=@CȓPN8Stw3Yu`\a|W9/#[N@.} }&s9LuPWf|Qå7*PUu%G(jK@1]^C8`P wF 4z'U󃗧yIɇΦȇw7ҳz'U󃗧"[NH E})ra)  6p0f}1giؑ\>BϜM>5ĨM^ ;ĨY%Sv(37ҳz(U 2z̮|YZ𩜈q,|VӽdC(Q4RQd,~Ӱ T`\f@T"9U٥_1pMʮB#]IQ.liWEWPP88`(.p`p,^PN9@!8Uu%G(jK@1]^ӎie(TCZqJK@M•LiMʮ㇂GEqqުү^ F8vaD&XkN9䤴 <?@N;O?`JxFv"OCc# Zql`K,+M\Bϟ,X@HQ\KN;\ @1(5 XE bϞ4Ű$Mbay$@kI'u\ u"@ GZq8K`uadaGZq8%%\ޙEr8 <݁.avʑ 4'2YWu |>2YqbT˦0eTS"=PDD?AWJkSl>UȏEBh &3AW}E056QLLT@9 &$3~DO_bo/[jmʈ Hc S,i Ǔڛa}q")0gw%9v_@x*$I$e*TR xĦWxHDLHօc> G*4:)U:Dqf*ү8tWx(c> G*4:)U:Dq*xVZsC_tfoWUw¹3\V0ӛSl> EaE3Ƅ*4a"O]z/#;/9v_q(P%`^FZX/Eƃ]z((&  )ykNi%XJ4iߚ.l ;QĤ @NTq)-5]ݴU%֝-ʠӚvQ*<5~I3%jK@Dƃ /]XJ9WY=2Ċ*xN^ӿZϫj~.f Ih%fKuH xSNi0ɧƴ i߄印! 杦85~=UWҍ;Q˺ 7f*jK@` crEQPE $g3Fb8?Gװ[mm41I4Dj7AL`aDFg@TWJK@ P(PD HH`,}Yq[o0i`0#31Ih6@;B$GXD"C`/ oVg-ִ뻻i%XJ!;QĤ @NiFfĨ֝)-}7¦_=a^ f*7ӿ$SVF_/9eax*Q(iӮR^ Bz|ZwuWRTrYb1]_Y7ۖ[Z`*dӿ*%aBsNܱS.U%o,oS/٣Y-7LW'&X;g_720ua(|ş=R 5Wbef_&TH:Лլoe7=L@y"rW,껅1g/ES/ג_U悼~_QPA"HWrX\^ )է4 dZw0UՄƞӚv@֝_(eU_J49G..b_72:!J\jBݬiՑ%ƽL™vba(]~ES/x4sm9يʎ%%\pc1DL9""xya3#1Q\-6a,xƷ7J&1)#LJ/h2z{B&:{]IQ9eƕtUEg*QQ&TǢxЉQ}I>Yv51@x* UB$ʖ@B[()q&TH8()ݭI4DEpp|hj0 /5$"P2&=jI!Wė1I4TSaɖ%RLz*M[F_ m17*t뺔*HŜ/N4qq7$" D&TH:I|ُS0tVokiDMBDHDBA2dIAw\JoDs{ WUs}$~^SʚtJB}$~9254J$TM!"@ jl/%א"cVF:+f\452]*•7uޭ^̅9I baDB cAB#]UaqcCWPƔVQ/ Մڸ*cP=4,F`PUvk0GCT1x`XT$Pc pfqVZӮv f*kNYgUaJѧ43bTxkNљׅ+MYFxgөWt߳^N3m;En_!gό}:+U̸Y̰u_LeEӿ^sNЙM>5kN 0'؜ :fg8(7|_WK?^Nio3Zw|ѕU}(ӿ 3{Nivba(^ :'%# V1ₘhTTH<<0 a}{i6xz |3Ɓa}{C}, bp4pg/ k;4(Y⮪үƁx ~Vg1ㅷGhj0  EBSo}Yp^ ]ݴ쓡wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvDPL<@ 3ߘ}diAP4X4j &P4ho&+ EI꺏ɊQ HcW~\iWEWHdo  0ua(H7H@DR(YB$GXD"@ "=R&ciԅ_F,೪`?B$GXD"A/x.7;B:Bx$)GS/(YX (*3 WVGYo`0!Hdo >vt*aDO@8g=C 󲓁L,L4"xԊA0 OϦ^SՑ%ƴoqƠ 4"W$z S @=BiD5"L|d()qH8tIA ,DDƤP o`+Y4#,DD ="E&2OB&@!d::ɸET xԊA0 O|Š%5 zoTS"=PDD,a,eLo[~92&$TM!"OB&@!|WiRb\K& TOB&@!|-_}E05QLLT&``,aP'ʾbU=}cuE12#PEDT( 2Y)N=`v.hփͅ7aCT1Q4@n&D.e2U٥_>2Y);14UxP"=DDOJM^צ%p89g+ L֐xg• {AHg)Vq R2Y/ Tf**eoP `@^cH),*1 Ku/L&ү pjҮ0 (AH7|\"c2|~ү pjҮ†71 X#1QPGS/8<<<<<<<<<<<<==viWϣ-_N2䫗%$5uz~үGZ Eo챺&ejU,7<<<<<<<<<<<<UK<U]HgƟ "=R&-i7ALldƯ%\dQ\VQ"RD gc%&9@T"9U٥_1 °}*Λp0iRDfy"&TU٣桪0,c% p^ iEɼ_ܪS,09*¦vXYՄLi$agUMʮ yMc@? Bpp|Ư\3*Sx.5\+f_7.iF^brU蛩D\+Ӛvhg•^S؜ :fEn_!gͧkK(Ў,/]WwHD%Gˣ*%4YgUaJ(iG,DDmM>/dev/null | sed '/^$/d' | grep -v "^#" > /usr/es/sbin/cluster/etc/sa_inst.x filterinst_XML < /usr/es/sbin/cluster/etc/sa_inst.x KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------------------------------------------------------- # # Function: listProps_Oracle_RDBMS_CFC # # Description: List properties for the CFC component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Oracle Instance Name dw # #* Application Name [dw] #* Primary Node Node1 + #* Takeover Node(s) Node2 + # Service IP Label [] + # Netmask(IPv4)/Prefix Length(IPv6) [] #* Shared Volume Group(s) [] + # #--------------------------------------------------------------------------- function listProps_Oracle_RDBMS_CFC { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset Ora_inst_name_val typeset app_name_val typeset primary_node_val typeset takeover_node_val typeset serviceip_val typeset netmask_val typeset sharedvg_val typeset serviceip_picklist typeset primary_node_picklist typeset takeover_node_picklist typeset sharedvg_picklist #serive ip pick list serviceip_picklist=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') #primary_node_picklist primary_node_picklist=$(/usr/es/sbin/cluster/utilities/clvt query node | tr '\n' ',') #Takeover node pick list takeover_node_picklist=$(/usr/es/sbin/cluster/utilities/clvt query node | tr '\n' ',') #sharedvg_picklist sharedvg_picklist=$(LC_ALL=C /usr/es/sbin/cluster/utilities/cllsvg -s -S | \ awk -F'\t' '{if (!match ($1, /^[a-z,A-Z]/) && !match ($2, /Volume Group/) && !match ($2, /rootvg/)) print $2}' | tr '\n' ',' ) # : discover the possible properties # /usr/es/sbin/cluster/sa/oracle/sbin/cl_osa_discover -D -d -s "$INSTANCE_NAME" -n "$NODES" | grep -v "^#" > /usr/es/sbin/cluster/etc/sa_inst.x while IFS=: read instance application_name primary takeover service_ip shared_vg do Ora_inst_name_val="${instance:-}" app_name_val="${application_name:-}" primary_node_val="${primary:-}" takeover_node_val="${takeover:-}" serviceip_val="${service_ip:-}" sharedvg_val="${shared_vg:-}" done < /usr/es/sbin/cluster/etc/sa_inst.x #------------------------------------------- # display property tag for each field #------------------------------------------- #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" print_start_tag PROPERTIES #* Oracle Instance Name print_start_tag PROPERTY "1" "ORA_INST_NAME" "Oracle Instance Name" "" \ "$Ora_inst_name_val" "" "" "" \ "-d" "string" "false" "true" \ "false" "true" "" "oraclesa.cat,5,115" print_end_tag PROPERTY #* Application Name print_start_tag PROPERTY "2" "APP_NAME" "Application Name" "" \ "$app_name_val" "" "" "" \ "-a" "string" "true" "true" \ "false" "true" "" "oraclesa.cat,5,102" print_end_tag PROPERTY #* Primary Node print_start_tag PROPERTY "3" "PRIMARY_NODE" "Primary Node" "" \ "$primary_node_val" "$primary_node_picklist" "" "" \ "-p" "string" "true" "true" \ "false" "true" "" "oraclesa.cat,5,116" print_end_tag PROPERTY #* Takeover Node(s) print_start_tag PROPERTY "4" "TAKEOVER_NODES" "Takeover Node(s)" "" \ "$takeover_node_val" "$takeover_node_picklist" "" "" \ "-t" "string" "true" "true" \ "true" "true" "" "oraclesa.cat,5,117" print_end_tag PROPERTY # Service IP Label [] + print_start_tag PROPERTY "5" "SERVICEIP" "Service IP Label" "" \ "$serviceip_val" "$serviceip_picklist" "" "" \ "-s" "string" "true" "false" \ "false" "true" "" "oraclesa.cat,5,119" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) [] print_start_tag PROPERTY "6" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "" \ "-P" "string" "true" "false" \ "false" "true" "" "cluster_hlp.cat,25,51" print_end_tag PROPERTY #* Shared Volume Group(s) [] print_start_tag PROPERTY "7" "SHAREDVG" "Shared Volume Group(s)" "" \ "$sharedvg_val" "$sharedvg_picklist" "" "" \ "-v" "string" "true" "true" \ "false" "true" "" "oraclesa.cat,5,120" print_end_tag PROPERTY # : This command will be executed to configure the instance. # print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/oracle/sbin/cl_osa_addInstance -D" print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------- # MAIN STARTS HERE #--------------------------- # # these functions will be consumed by clvtsa # oracle_xutils=( typeset env_func="listEnv_Oracle" typeset inst_func="listInstances_Oracle_RDBMS_CFC" typeset prop_func="listProps_Oracle_RDBMS_CFC" ) ver k&$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/oracle/configaAA kh1$o/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/oracle/config/oracle_config.xmle -> k86$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/saple/AA k|$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/sap/sbinnfig/oAA kJ$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/sap/configig/oAA li<$od/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_addsapinstance.xsddd   -_aeinorst"$AEIPRScdglpu=CLNOT\fhm#()./01BDFGMUVbvwy%&2:HKX[]kx{|} !'39;?,4>WYqz674yX(+܆ƣ2R: ʷf "2ЬU,v)V*^lZyz3;()A^rkg0R'ƺ5"Рɴ(+m3_@IA_` ) CH0R'ZcF+.tV hPW>4yX(+܆ƣ2R: ʷf "ƣ2R9j]A_|- \\RhPW (vyʫ)== hPWG}1(+m3_@IA_` ) CH0R'ZcF+.tV hPW>4yX(+܆ƣ2R: ʷf "ƣ2R9jVL+qqK]A_$"*zINׄԋB8v礛B91^% p/ Рt0 /%!yR|^ A_pb:+V8fJGAyV}@/B8fJG#R (+/"eXX XM/fk ʓhPWf؅wxax^8@AM tV6m؍}0Q$.(WbЬUh%Z2śq#hL{"yѨ̔:o$q4 z_g0R'%scj6ۍFg"BN 9$"qm؍}3LLR' m79"g& zCLHcq#hHUDO"M m؍})83Н  ŷb6RBIIq#h<$Iq#hLS@K3wlE1F  sJp\޲p;p\޲l^"] T'@E ![E̗myZe8.|YFV#!eu8)@ek@Z7+V+ѬFeFmwn3I+ H^6o^7NqRo(^Ȣ[ S0䈑y!!PIa/*MTq"1P3>p/cjvb8B+88&cj7ZN8KભhM s9s9s9s9s9s9s9s9s9sblKʓ+boQXPЭj-KB'N /3ew 8x6RT+hSB%;Я H^TB pf M ҍ٬ hW+ٕ#k4+ NKX)Ns9s9s9s9s9s9s9s9s9s֕fj^TW>T*+JB-sEHDg!ADcfŌ7lFѾa*8m7>3e4FDHQQzVŤVD`Ɖq0P$9T:6^C@o%Û 9(89T8bSՊwS4y"$^HHWp̃ /%!yRo IS2d:lq7fk͌YF8Eb6וFf5o؍~p/m7`1o؍~3kWZ( kV,f1-+J)w`+V@Pj680R&*80ĕ5yGfèuboH3  ƣf`9XM!M@P5 ZN-@_Y^,Mb_ xՊ͌YFh V<Ј W^V4pM/h cQA7Q$ 8xM\f ƄU88&c@P9T8bSՊwS4y"$^HHWp43Pb26W_P8 4@Zx@_i8kB9s9s9s9s9s9s9s9s9s9X3R- Ȋ ЦhV)hZ:c^8(TM^֭c+J8-)r8 xkBU/~FkBYЯ:W*FhW+fhSB9s9s9s9s9s9s9s9s9s9*Լ> Ȋ [ 拞$yB-%7kr"b 1E4q#hqV qqP39jg"FbA0 pEw UbQX3BjfFn73 kV,n5YV*^} 1,n/Jѝp8 h͠/,/L^^Db;A@5H_0hʱR+s+Fw<(LahEFob+kRjʱRfdzg"zX"&Kj`nͪ1)YIȜ$*DY4 "E{-DL Oh1h xZC#1(L8q0PL`e (TjfjT*63v@RopÙC-HٿHUDO"M 13"Ȋ gUhZѸٴU#ͪӁxV65R/ZeX\R/XQ(.HH)VN5A/XQ(jg.@7G*Ƚ!GOJ65R8hٖor8xo,/L^^D`?-!|ÕVS[[J65R8hٖor8x )33j^-oQʫ)H#WoU8fJEH@b+.]jU^zգ,firE$NH$$zc5"HHg"HH2LDq"fQg "pXo=! DH%[ 9sעzIKGh1h N!"֕5(\h %ؼzjV0zfGZeNIUok8.}kJ1Jݿ6E˭\Qzգ,fir$@XT$HY.HH)o&I I"c+2$Ğ.r@H%Z "E{-D@A@5H_0Zq1/xִFgx*Ex^.5/EdTomFjuFXkZp/.]j+xT֭c6N 5>Nn& E@zvyx /ץ`v!r`|+ bi mq D "8EayMn.[+%n׉~WUb5LokJ M2 xn M2 +r(/ {CAB/E-VKǔDQz A{z\d)f(cͪӁxg0V7-h"§Q"BȦfh"§Q"BȦf3*4ffZ@&# `03P h-4@,/4 a~E,/L^^$I,  ZB$80{R㕒7kľVx /ץ`v!r&c'xp\֕8b 'ŽUYMl&/JkҰZ;l+r8mQrW/EdTomFj^hZp/@TH]缁'ayO fQ("§Q"BȎ0rDOxDḶ@QqG,LDDV &eHyO9 H {Ḍ@Q4ǂ y2D0h &O$AeL4@tɞ*82O"I"o@tɞ*p8O"I"oA#2L$zd$pD`q D "FxLLQ*HX7 H%Z "E{-D@A@5H_0Zq1/xִFgx*Ex^.5/EdTomFjuFXkZp/.]j+xT֭c6N 5>Nn&oVuE% ǹha/*Ow-֭a/U r(@y$E eHyH#6NfQ霊`2g8TȦ&xO3(NHɦdހ LT䉜h&M oB"yo@Hq$*"'&7Q HȜ*x 9H ゎ*XڌHۄQjі2^Қg#X/+Q)hNׄԈ]reX7G4ǧv&mՙS[kHf39a^%ZQ@ 8x9xN F.[^_v^=cj3U#Z2kBU/~FkBYЯ:W*FhW+fhS9s9s9s9s9s9s9s9s9s5Y'US9ǦxMHA"I3@E1ó Ib`vq#hߔxMH۔xMHtFoekYb6 /@Hq"MD^F^# ȼS91ɜDy=!Cq#hqbp/ƅBLS@HǘjS&q01b6 sx4.*jg"Fo,/L^^$I,Š/-8kZWԣ3kq^={klr8i2JL;Ƴִk”--Ь%kۄZFkƼngzvc-%.7f^ (9Qz A|NKLn׉pܤoO oR<+ܴv+" yXۅcr8}cFVϝnF٩g"A+Jo,/L^^$I, ZBxMHxp5[R+%UNϤXkcRnG[-% rV^#|9|-x*ckLGH$$~jg.@7 5>NnɭPM!dL#1ó `s~=C^S[J65R8hZW/ iMm1 7Ar/LEm"dTUYMl m(ڌH╣,wfXbOxMHRffisP"3=\ઽcj3U"FXͪӁxH "HHj) DDe3&, Ḍ @D3(3$.zC"0KAr/LEl$b RB EK^5+jQ5i/KyMnԬaxTh bͪӁx 5>Nn|S=!t'Ēóq0p8 Z3kWs A7b R@ N+EdTnS[mFjuFX(mt'kjG(`P04ڭ8jS&qE˭\Qzգ,fir@P\aS(!dGh"§Q"BȦfQ( +%/*O3ҹC CL@d"<¸ovcޘ f$<w1)x+ +JX3R:S["k\aS(!dSaC c["753@y"y0 I ^8vaC foZz+"}cj3U"FXͪӁx.(󅉒zH {ḌE88`x8-\YQZ2mV (H]缁'ayO fQ8X'*$0L7Q Hc6 18VMWzB=O&$  Hy Wrџ@E霋9b[@,@h1h DL'!E >+%/*O3ҹC CL@d"<*!)[Fdy1ޘsq; WᕥzĬkVk)D5鞐yO 8!k\YQZ2mV (rDOxDa D "Fb RB EK^5+jQ5i/KyMnYQjі8&fmV ſ.]j+xa/*M9^̓ oZx<ay) ʓ̓ N.wՊzfEVUok8.}kJ1Jݿ6+9UubffVġxQjі,nhB ;0"'ܴg+PT+$"*7z+)^SL䉼2g+ZLcRn! ZٵZp/ek4-Eu}WZeZKf-Z2؅c;4HE!NWV,Fjj lDrdH&zF`UaÍ U kҺ)ekZ7\ 5yZXpj86 HO"$yGD!=1X+&Iſ\ A7D"<H4%ó ,y8Y^Ƚ3/ejbDsVS[xԮ[(`@(`iB) 5ڡѰu%0f׍C(uUubffޙ3&8ڭ8p3hB d:l@ၘZyɀbIvaC fͪXbSQvmx9y^QrZx=Q)ɌH]缁'oY79T:6Ħs7`.wՊzfEVUos6tlaL9EٵPo%yF.]j+xT֭c4HE!F3jFÔ]^5f^Wl֮⺱^7^JB^\0zNp/3jFÔ]^5f^Wl֮⺱^7^JB`x6+&gZRP{^JB\rQjі"4j #$,ޑɞ$f8v`<rћ[U[B 1"7#$,(!dGmV ̣9:d"p53LLR' fQLG' @d"<2@d"<=$jS&q缉#2A"bz8S=!t@̣9"g& zC51S&ri7$fQ HI!<$D3(D&"/"p4QzFe.HH#4\aS(!dS3(H]缉1$c53@y"y0 I YF!48QH3(&pjg"L#y72g$M<1yFL䉼Hqod"h HX72dx3($&H.yog=3x1$@7LxNn[Eશct3NE%og"LNa&qGxgó ,y8e;* `1f ,*{$,yK- u0QQ^772 0IJ4Qz\&8rDOxD1x ;08Zk8/Zҭ@E霋9b[=$%#0$$Zq1/xִFgx*Ex^.5ӅE% ǹi[ /%!yRxԮ[FQ(1^%eZҡ&cНYsZTV&kW|PMHd3;0BǙa&zG&x ;0BǙsZ3oVS`(/X^f vjg.@fa.P&}GFyx <0R&*8ӑE p^#H)@ၘp 5ϭiV "E{-DzIH-8kZWԣ3kq^4sDí GbD`>ƔܾH䅈.76 cDz4,~æV>֬X5Ȧ4p!pg"*Dȉ8вfw\h[KZcpjg"XK?,VSh# DM1+  U^壦r8WiL{7Ar/LEm"d@~ ! ZB$ ŘV9P!&c9$"qBL^(@1Ȧ&xO3qƅRFFday) ʓ|jg"BN 8x6V֬XL^(@ oX^hð03^ hA7C53xB'O(y4j fex1ILqr"IfeDM7 "&Ḍ@_$&fQ霉Bɞ LN",FeȞD\q@"e@Y`C}#}6m;-K^p/vRϝq#hqȢr(@y$E 7lFѾ:8Bjf&r/0E4yE2gyHPm7@' qqP3S91ɜDy]1ƅBLS@HǘjS&q RDL o؍}bDqqP39jg"F]1ƅMER0/ϬWyzO2 0I'+Ҧ7Ьx4/RÙC-H kV,nLS@K kV,g4p0  3,VSh &53zg=z,^h%-!|W-^XWkŋp+x׳*)X+UY^TB'v&{Ӏ$V 9'6+pܤo,/L^^D`@~;A@5H_1'1W1Red5Ԯ[FQ(+-5+" BkF&fkY/o,/L^^D`@~Š/ >wZ:u);Sf[ o,/L^^D`@~b R+-yN:Q[j񁾱ax))^ѭ 1%GͪXbSQvmx9y^QrRFfN9)8DXTD5q.G0ЍKfay) ʓ|GFyx o4 >Ya+[ 9sעzIK@}Š/-8 /j霎NׄԏXڌHR+%U>壨6jahRed5OxMHfҚe[Zҵ򴮙ȆBwgϭiS)[&MI B֍X6aRσ IPb6KnVyMI uiY󢱰4x8qoXXE{c)x+ -U^3er 8x6V5+QyO 9^DSͪXbSQvmx9y^QrRFfN9#$,(!dxM\f iLW /%!yRo(/X^WwO4QyO-E$8ӑEN= 9sע춁2X ?;A@5H_1"d:+:^=BGxMH 6 ƤuFXԮ[HS(`P3\^JBءfE2g~mV 4QzMɿdҲkWsS=!t'Ē0@6ƣ2R("B\*6%UL{"yȮb`cZ3o]JxvZ=Q)ɎVcFbVS ; NѾVAMlfzd==2B=,C,{A7o,/L^^$I,j`0{+)r:c;^R=cj3U#mJLfWn񅣩I:g#=>S5#mJkiokJҺg"Rf7 5>Nn[h0)g8иZ|^8K?+Y300 bC`8c[Ȧ=4ͪXbSQvmx9y^QrRFyxH $<$HYW /%!yRo}Tq.pQQ^7h0)gɁƅ3jFÔ]^5f^Wl֮iyO!cQ!LE1)  3,VSh &E^ X1x̘h\T-LAKY2c j3}D7* >Y`@qdRͲ|V#!eu7ܨTC j3}ʀ)gɀ@Bjf >Y2c j3}Axce,0hY8Եl& d:lf{a-FoP"4h0)gɁ pAK>L0p9-e,08me,0 c⽢} }m쥟&7e,08иZ|\ŽySY5X M礛"pĸ^7ج|QQ^78f8C0%R֏(/X^G^JB%Gh0)g$ 9zI' 1%xM^p/LG"¢'0]ࣇhƋIBGQ3)ƨ3#Z2U h Ȣ' 8аmP:rkơK򍃔^Z7=#̜ rS&q缈'j0]5y&$W /%!yRo(/X^WwO4QyO-zGHY!#œS5#lj5V\jW-Focy'=X„Yڅ㊠Lj׉[+HSҥyRa2Ҷ^K1b*AG\ H^TXƥrfg~S5#FS["U Rt@f=騼a^ƵFm#{gv A2hx xfgI7LƅBʹ}0m쥟& x xh\T-LAK>p/ >Y`1 PT+G-霎Y/vKRed5LE9Ph^ͪXbSQvmx9y^QrRFfN8Q HȜ* 7QƊ&sE7`1GFyx o4r"i( `v "E{-c#j`9"(RW/+)AL+|ZVaxLdi( '%7kĸiIo;lktrk2]ʓZyNVazW- l*^xxܵ(`"&).Z5]^5u;Ӵni,Yq0^9Fb r^:cvK&cxH%o E@xWhBbEcniVϝnF٩g"AҼyO5&8EDZo,/&A2o)yZlX6tV8H%[ 9sעzIK@vjbg#/A/x_Y,bIksƋFBc>^*^*VfRf:+L#ok8.}kJ1Jݿ'kh|-VRLBm±91zI eٵ>\oX-Lz|kjF+JLfW:6m7[>Y󢱳[>Y󢱰B֍X6aRσ IPyXj'$M"q4Szϲ|m:+$-@E霋9b[=$% -!|GLz|kjD. ǝ/I*:+hk l-F3zufa+y)&!yMntV:x]BG~tǧv&lRffΊ5)8 Zҧ Ro')GAVK(Z3ǖWn༡hJVEcy4"($MFȮ zB=O&$ aل 88]Fmbٳf1)(6jhZ XbSQwZ*б9Uk <8D7/;*6&VQ b=ɿIſ"4&V\p? 9sעzIK;A@5H_0h#Uk[(`@(gf"*i]3Н `AClP̻61JLfWOવ|&7qWh󢱶+y)&!yMnSZV;^R!fzB=Nn+&Ws A7zd{5j3U#Vr)𚑳dzg"zX"&K#TUYMl m(ڌH╣,wfXb礟)𚑰'XͪӁxE2g{[֯UQZ2aZp/2E$NH$$zc4"+y)&!yMgΊA32LDqDL7LN a128B82(3 dzg"zXI"I`@~-!|i TUZҼfX{ĻMJXڌHV )33j^-BwgϭiS)[&+&Ws L{ȞLHf Hy +hͭ\ 5ނ/Hd3;0L f]FmH Ev|na&LCzG&xقgL0p9rћ[ayMn 0IRw^5CC[ 9sע춁2Xb R)q/)Avݯⲭi^ 0IRw^5kaZ^ LS9鈠D9Eh0[iȢoF,djg"LE!.AF7C4QzF5QrWa/*O6 18Q9"iII0^FL)II0^YJɋodH/$$x ұZfjx ;08Ar/LEl$A@5H_0Zq1/xִFgx*Ex^.5RAvݯⲭi^ 0IRw^5ka[ Zҧ RoMk±/)ͯBay) ʓr*Ar/LEm"d ZB.>5h5\VU+<'+Ҡ b36 0^ ŭQx*`'80zNp/I@$LxF>Q!dd*H$80^9FD\HzMj9kFdyɠH^1oGL䉼T`BC6ׅoe+&.fQqd^*y0Q!!kы)Y1s2$EdxDjg"LE!.AZNWwC4QzFe*H$=!s<7,DQ⤈LOMB' >Q8Eq4 zIjdzIoGL䉼y!b$FzdH"L 8 FC k@ၘ[ 9sעzIKjf-8kZWԣ3kq^5h5\VU+<'+Ҡ b365^k^ /Ix65^7T I:'ٴjHy&I⤈LC NoE8פ֫3oH<u3FzdHO& $$8mxVRbe<E⧓a3(RDP&I'LHHqr)P"=$/ZNWwC4QzFe*H$=!s<7,DQ⤈LOMB' >Q8Eq4 zIjdzIoGL䉼y!b$9"o@38+鲺 /a`f "E{-D}Š/N!"֕5(\h %ؼzjV0th5\VU+<'+Ҡ b365^ok8.}kJ1Jݿ6VMAX*UxBݥQv- k6Eph70zGHY!#œp/X^hÃ;I7LƅB͵ c6aRϜ aAb RB EK^5+jQ5i/KyMnYQjі8&fmV ſZ^7hfJGAh_BVk.wՊx0R&J sxQrWq]Xǃ /%!yRya[;Ƴִo zB$$&⽢Ws A7b R@ N+EdTnS[mFjuFX(mt'kjG(`P04ڭ8jS&q.rVEFfEVU4@_rDOxDa D "F( .(󅉒zH {Ḍ@PA18Ì4x x1( AƁmh@E霋9b[@,@T"&HYQjі2 bei] 6 36N㚁ɜDy\YQZ2mV (T#8OI7LAƁm ͪ ;08Zk8/ZҭY^Ƚ3/eHXh1h N!"֕5(\h %ؼze謊Th b36N+V+Vօ%kki QrWq]Xǃ /%!yRo/Il`'8.wՊx0R' ſk8.}kJ1Jݿ zB$$&PM礛$,FcfHX085zI!G@MČ8gZ3oֱ2E=E6kFddS=!tA<d"(H]缁'LqaڡѰu%0f׍C(ug.@`!oHS6Nㄸ  3,VSh &{089`zB=< <d"(H]缁'O53@y p k 4<\Q1ƅ3jFÔ]^5f^Wl֮b D #cQ!Lڭ84'8YNUP.HH)0&M"O4\aS(!dS1@E霋9b[@,@T"&HYQjі2 bei] 6 36N㚁ɜDyQrW/EdTomFj^hZp/=!t@qzB=S[+J 6 35)8¸o5zc Hy Lb;,+ ^SVVfuY$E <8DqE˭\Qzգ,fir$@XT$HY.HH)o xaPL{Ď&qFb RB EK^5+jQ5i/KyMnYQjі8&fmV ſ.]j+xa/*M9^̓ oZx<ay) ʓ̓ N.wՊzfEVUok8.}kJ1JݿMdr)M!Aƅ3jFÔ]^5f^WlTѿyxH $<$HYW /%!yRo}Tq.pQQ^7Ȧ=4LSB  lnj xDNn&ַ ?mx[h\r!vcxjRedJ=zMn#1@)QrW/EdTomFj^hcHS"HH@z$ </K_(!#ފHI` Ǥ$ͪXbSQvmx:ĦLzbpHX-yFI R@HDw@TBh &=G8qE2gyox ;08Zk8/ZҭY^Ƚ3/eHX ?Š/-8 /- &gyyZWL^ސiIQrWq]Xǃ /%!yRo/Il`'8E˭]ubo 0I'ouW65R/Zeڭ8[N*p+vMdدh'4b @PL{Ď&vm6o8Í@d"<{EиZLE*c$q3yE2gxc+&u*765R/ZeE1)LzIHgx ;08Zk8/Zҭ@E霋9b[=$% ZBӀMBКfwxQy(7tEM QrWq]Xǃ /%!yRo/Il`'8\WV+ H^Tlbp/uW65R/Zeڭ8НYsZTV  εx- 0IRn65R:գ,5+A=2B=,Fcf A3ܴfVЃ niȢH $<$HYU3(E03H*x LSNn["4j ^ɞ$f8va43|PMHd3fHX0p9-+)0pTm/N3َ;4\aS(!dS].hMh*ya/*MTq"5yG ,*{$,,/4 a~G НY|֕o,/L^^$I,@$"ӈAxƵxJ3;ƱW-%v/)ޜ-j)(^=Jay) ʓƥr4AGi.+*֕ )3 Zҧ Ro6["4ozG&xل< A7Nnm+&[JPf5x 3  @E霋9b[@,@jbDq)YJ Ʋ4L*^&c[DM7$,DBљ p9\:elv+)4 >4sDí GbD`>ƔܾH䅈.76o"&DM7Bљ p9\:el-jōYh a.@YNL o霈o"&Bљ p9\:el-jōYh a.@YN&7+-DM1+&+9U{b ۑ^Wդm0BY^Ƚ3/eh1h DL'aX^S[LqBN iog"BN BZ8ftV6o؍}&p"LplFѿ){Y/S5"_^AwΊxlFѿ)} VdyN{Y/E EbGͪXbSQvmx9y^Qrѻע]󢱜 Pb26W\1 HI!&r$@3M)8o #$,ޑɞ$83&yA7Nn[hWhVdm!+^&r;^R<.1ۅcJ*\59"oE"Bh= hVKq)@H$`rdH5)8yzB=<[ZqɜDyE"Bh=+B^#LQHA#53M#aLGc53@y pW+xMHׅn+B^!<w-;^R/b+%8ЌkjE+wZ M+-Nׄԋح x4#)b+%dA lkjEVdpp;dzg"zXI"I`@~;A@5H_0Zp^=镔Ӽ+vXح xkei^S5#Rffv&^hVK5)8 Zҧ RoM ͒ fìD!R"ɥLg qAS9 uXr 6S5"+B^:g"L` FC7,/6S5"_fE2g{Ȓ08Ar/LEl$ ZBRb)q+J  nVKu JkKZC &)xV챱Z )33P"3?6S5"+B^-BwgϭiS)[&!48аmPL:LN",[̌r?7Rh6S5"_(Y' ovcr(HM+J)Y1|Ct]|%X?⠍Ʒ sQH-dzg"zX"&K A@5H_0$'[iћ~aJNZWbR6kؤE"B*%|A63zS&qa fìD!R"ɥLg qAA);֋se;^R/%UyRz0 f8 E{c)x+ -U^3er 8x6V5+QyO ENoBP^Pʫ\H]缁'oO ]lR@!#C` Ja.ͯZփÔ],rUZzB=< ,/4 a~E3zg=z,^g$ ?h1h &r:5# mJLfW:>EcJOA lh-Z35{ I^PUવRffE2g~j) DyO 'xp\֕8bm+&\ 5ޑHyHd3;0L f7=C^S[J65R8hZW/ iMm1 7Ar/LEm"d@~ >b R9Ue55j3U#VޝaVg#)kZp/L#kWH]缉1$xل 88uUzfEVmV ̣ISI  E$<̣&rDőa!3o<8"b&e&qHqdQ"f a "E{-D ZBӈAxƵxJ3;ƱW-%v/)ޚ/֭`Rffi[ Zҧ RoM3zg=z,^`@>b R$D)z)Ԥfk ʓmX*^*<Қǝ5FWWc ^WhجJƱƨXp5@d"<{E.]jU^zգ,fU3(R@T9BG8QI$&p,$3(ɜ1dGHL&e&q'0F@!s`HXE3zg=z,^g$ ?vj`b*^*i^3RUƋIx]kwc ǬmFjuFXkZp/;Ƴִɭ\ 53@y"y0 I Y ;0!36Ȯ oAxg&q36USFdPD"ɿdna&LCzG&xقgL0p9rћ[ayMn 0IRw^5CC[ 9sע춁2Xb R)q/)Avݯⲭi^ 0IRw^5kaZ^ LS9鈠D9Eh0[iȢoF,djg"LE!.AF7C4QzF5QrWa/*O6 18Q9"iII0^FL)II0^YJɋx ;08Ar/LEl$A@5H_0Zq1/xִFgx*Ex^.5RAvݯⲭi^ 0IRw^5ka[ Zҧ RoM 06 a/*O/Idzg"zX"&K}Š/R^S[FQ(1^%eZҼay) ʓr* )33`9Z |^# 7T I:'ٴjHy&I⤈LC NoE8)r>Qg @Y#ph"8+נj9"o<( [JɋoDYLHHqbVL\̣I@$*y0Q!!Ȧs@r`V]9^F"2I=$H\p x"($@PHod@MD^g.q3^fe9"oHX1FQ3&=!s0$Pb26W_P8[0? |"Y^Ƚ3/eHXTRWkJfwb4ZKDž^S[5+^:4AGi.+*֕ H^T^PNI/I'xp\֕8bmР u!hҍTe5"4j #$,ޑɞ$f8va43rћ[Ȯ ɞ$f8va43ܴfc;Ѩ̔jg.@7b @=!tA1ƅ3jFÔ]^5f^Wl֮iyO!cQ!Lڭ84'8YNUP <8D4b @=!tA´'xp_>[ "E{-D@A@5H_0Zq1/xִFgx*Ex^.5/EdTomFjuFXkZp/jx=Q)r~! ZB\WV+ H^Tr+/IE˭]ubo 0I'o Zҧ Ro6^o+AE,FcfHX<o-FkXXq D " 4<\Q1ƅ3jFÔ]^5f^Wl֮b D #cQ!Lڭ84'8YNUP.HH)0&M"O4\aS(!dS1dWk+`0@w-Adzg"zX"&K-!|VEF5fGZeaءZWBv&r CLͪӁxE2g{@PE˭\Qzգ,fir@P\aS(!dGh"§Q"BȦfQ( NnɥdؐBV/ ʓLpTm/ kWsDRaلI<A7D"<H4%ó ,y8VЃ niȢĄRaB) x ;08Zk8/ZҭAdzg"zXI"Ib@=$$ B EK^5+jQ5i/KyMnkQIBZV H^T5+Ѡj ;Ln׉qYViI'xp\֕8bm+&+k +WYz A|f 9sע춁2X ?-!|Re5"iZT/*LƷoHX1ƅ34s@ t;VSh|%h Z ðe;|%)|1+M '\? oFmA7LpȉhYz3;.@4 L|%Xk53M,%h+)4C LEHy4^K?+` kV,nLS@K p8Ewa01^h o"& g*r9Qz A{r+߈BV 9sע춁2X ?-!|+ ki(@ 1L^(@h_ S53xB'Lǘjg"LN? kEKa/*MTq8fx(/X^KZc53xB'L1ay^-Qx* E A<MDa&"ioI$M1Ȋ&"io4ނ#4oA2Ȓ&aFr' &zC538HTiog"yqFc9oB xaPP`E{E7cy ,B#1\qeI1䈼*DqeI1䈼*0@̣&<"^zI0@ͭ B+ N79zbRVLdh 8аmP:rkơK򍃔^Z7?q^ѽה}^8(⨨6jS<2 ܴfmP:rkơK򍃔^ѽהּP&p@fゎ*Ԥ/J䄅r'8zWL&TxVތtb5IٿT}'8zTV7/ 9^QS&q缈&8P"3=IoHyH#6NfQg"LNZ=Q)u1UmPL8-|H]缁'(r+(Aay^- ɖhfJGAx E}HNt1 fѫl&jg.@7Ar/LEl$T&zIH-8fJGAx EpN+s\f ǤQx W-BPޜgfk壠"+u3(qFFJѺũk4L{"y!+ ^ QrW ƣ|xԬ֬XL{"yAXٕ.wՊyNX)H]缁'k2֮FF2R/yO!(r+'6+ܴfY^Ƚ3/e ~-!|—XݣQ)u18&fjg.@5b6XqI LYI wT?8RƅHƩP:+7&uU{F2R/yO!oɀbI8j,/4 a~E3zg=z,^g$ ?.b RB EK^5+jQ5i/KyMnԬaxj57kĸZWj3%#"'XL{"y;ƳִoYxWKFh-Ѩ̔:z ĬZx{BmhS9s9s9s9s9s9s9s9s9s4+fj^T%_HƩP{BX hWQj^Sr/q*M{hfJGAx EvIU> ƺfw؍yT?b5EbЦgUfKw%_c}bV5ԎyZ 󢱷zee5yNX)eiV4+$f8jxR=Q)u1MM ҍ٬ hW'ٕЯ:O+ .bЧ9s9s9s9s9s9s9s9s9s9kJ5/*OZ7N5#R"h74\I&{@8vai,X~Ѿ6mD4Ab6'Ē8е.pj77AK+}̆7lFѾ3jٿb67N}q#hqqT>oZWn5JO41$iZo,8е.pj77AƩP~o`9q90#YN&.Wts,P o4l,f8vd-L-Tn5J8gRј/%HT>7&i8&zBg=1ƅucQSjV G voyNX)S@38yZoG֮FNX)NX)$  sD0p$,VSh# KU089c8qj.]j!o͔M?p4C"y0 I XvbAL]X8h7tgEc88lFѾjQqX34ЌpΊ& ,/R7q2tV# 4#8&B3 oZFc0^JoZWn5JO4f R1*Fc0^JoZW)$$z`Vn 3;M7 ЌB`8v`p>o3'c0^Ja`fB͜n5JXݚoMqocvkJ Y wX8ng5Ʋ*6 sT֍YLNT,oѸk"iʗy8 4zD4\@y$Eh<§i^tV<:+Zo4lLaنE L-QwF3I7H0EI4MD^&Ȝ*~QΊi3&&h &H yOoMqk6mdl8е.pj7z]xyRzg"D` FC&Xk@K?pVSh# oZx9Y/E׊'r$@6d:l\હY/E׊'r$@6Qh=1VK٤L$Hq礀&"/@N<̣M"HPg @!d"("J Y wX8ng5Ʋ*6 sTҺfwJ6B(aoT-L.'4Cȑh>J07fkB9s9s9s9s9s9s9s9s9s9X3R- h^5QDKb c! hVuVdg{ZàЦiFv+ANs9s9s9s9s9s9s9s9s9s֕fj^Tn/Ȩg"r1dN6o4.zB$= DS;0,f`p?hpA #8wJɋ- R]pK›%>壦r9ʗd3/~壅"h X*\l5ftEcnSZ:kƸԮ[hx 5P3 L(´cR|f X^TVٴj LN",E&c[ S0pk"a֍CmWe =$$P S0pk"a֍Cb`hx86p/ 538HTi0Ʒ*8аmP JaٛF\D!R"ɥ  pe;0B/ȨhP؄%k @HqSXݚhMNs9s9s9s9s9s9s9s9s9sЬMyR`~n/Ȩg"r1DN6BX hWSvRbBԗ_Vr9jі;A - w-/~(I]~tV6Z؅o%$/SZ:ֱ0R&ЦgUfKw%_: hVng`KBt9s9s9s9s9s9s9s9s9s9iVfIF񬊍r'*^S@IkA"I3@E1ó Ib`vR3axۇxrо5%)Y8'uX۹h霎hh1aBm 䤘5Xۡ^6*aIVjV/y+ ʓҺգ,{A ؤŒkjfdTl4ReDf5CI"I0B/ȨhhJװ4<8Z Xn 1ZJ4,9T:rZeh1aa.@c#YN&5P3G Ʋ*6)Z2lB  $8դng&ִ)s9s9s9s9s9s9s9s9s9s5/*LЯ֍YٛUҼ'* Iw H^Tr*cj3U#Z2uЬx+`oJƱ+@gq# myOQrWRj zգ,a-_<%+0R&J>7P41M 3v%_ћRwnf^ ǜ šM ҍ٬ hW'ٕЯ:O+ .bЧ9s9s9s9s9s9s9s9s9s9kJ5/*OZ76`^8EnhL$((LpX8}lFѿ8Dq#h߸h!b6jp/FcfW6m5^ QrW ƣyb9^8 +鲺\ <̯|4ZKwO6+Z5azfw,01 $38kf5R+":+yZ W-\ofΊǤԏ)FGb/ xAם{ng7&i85ЛZ9s9s9s9s9s9s9s9s9s9 ٚ& hWq5xTlBX hWF ۹hEQ4VoZ35G7&i8,/4~E3zg=z,^g$$?;A@5H_1ȼ*7(m|f ^SZ:kơ&fkxTmok8.}kJ1Jݿ6Ч9s9s9s9s9s9s9s9s9s9hV&Լ0KBPT5S ƤhlЦhV)hZQZ:5xTl)K~壏$DMG@y+ &hܮЦgUfKw%_ `օѬtk"+tV1Ecaƅ.7!<4&L^*qc4HX E@yU8ܜjF7Ar/LEl$Š/h0KRl*CR+%/*O+%;3X`2^=aCJL;Ƴִo4 Ưp;dzg"zXI"I`H~-!|kA_![Jke 6 O*Լ<`AClP̤L^( S\i8AԍPT5S Ƥhlcdzg"zXI"I`H~! ZBփ ľ5+5)2Y^!5 f \*C+%ٖ^QT4ok8.}kJ1Jݿ6>1EcaƅBͼ_:+a-FoS 1>4_:+4.*mjX] | oZ35G7+tVoUV0&i8,/4[;08V0&i8ayh-@E霋9b[=$%!-!|SBG'|h3օ br:_WiIx3tV6ok8.}kJ1Jݿ6Ч9s9s9s9s9s9s9s9s9s9hV&Լ0KBPT5Sхo%$/)F hV5b%_+n壣 JI^SXL*^' -y""h NnZ![I1 k>tV6h\T-L![I1 k>tV6Zr3qP@c؅o%$/)XqqP3Xo%$/)X] | oZ35G7+:+SbEcfF^ oZW)慇3jFÔ]^5f^Wl󢱜 1ѿnlqóX`p>oUV0&i8,/4[;081Xդ散3W;08Ar/LEl$T N= -VRLBm 6 nt3)-EٵPғ35VRLBϝ Zҧ RoM6)s9s9s9s9s9s9s9s9s9s5/*LЯ]V2XN.'%ЦhV)hZʫLsay) ʓM F:пr62 *r2^! hVuVdg{ZàЦiFv+ʊFhW'fhS9s9s9s9s9s9s9s9s9s֕fj^T"RIuq9/"F,) Dž;]dYVO )gtV<,Vo؍~Rϴj3%"1YFd_&bVAR[Hq*k6mRϔwK>S6Kج:+Y>/e,F*6mRϴj3%"1K>Ѩ̔جJ!K5;]x|kgv[=VRLBϝq#h߅[>Ѩ̔ )gƶ}Q)ɇXC[S8e,ϔw͒e,bEcfm7쥟Fd_&;)gƶ}Q)ɇXC|kgK>5Hq*k[q#h߅) Dž)%{Ecϼ|xYUfm7g5|g5|{Y8Y+pHq*k[ 拞$yB-%7oB^]}H@r/8<4QnȽ03^c@ၘ[ "E{-D ZBփ Ŀ)B(m rUyRyCءIȽ03^.+qY,'Z1,/L^^$I, ;A@5H_1axƥr0T&VK3X^TVK7>vfy+Hed{2 *'xp\֕8bm|h\T-LA\%*`773LLR' 8AVr)$8AV'r9Qz A|^r1A$F霈g53M&I/X@KhDDx_53xE 䈉(ǂ;uEb NK1^%CR+%C0? |"Y^Ƚ3/eHX;A@5H_1ax=VҚC C;nSʳ5/*O(`P3)339/A.9/x(&VK3X"RIuq9/ 9sעzIKCb RF^%\ !I' ϝxc0^JRY/̰򊡥&cНYsZTV  o,/L^^$I, Š/h0K+iMlaء)Y'0 (mxcvK 93$G&I N& 32Eإn>+%Br^&7Ar/LEl$Š/h0KRl*CR+%/*O+%;3X`2^=aCJL;Ƴִk!h\BjfB{l%*`77 ܮh- $-dzg"zXI"I`H~>b RM^QWVUF bei\Dx <$;8+V:_BViI1 EB Zҧ RoM^.XqqP3F!h\s,P8 oɞqAY^rU^2.[93.)1 EB 93.(cXNb,8еf_u3G"& ~N",q$DMG<xۯr/^]r^)/2iE7 ɒH0? |"Y^Ƚ3/eHX;A@5H_1ax=VҚC C;nSʳ5/*O(`P3)339/A.9/x(M#$Nn[zv{aƅBͽa;=\f0q W6!r8XE3zg=z,^g$$?.b RM^QWVUF bei\GMH$xdD`ZF~! Z&fm B Zҧ RoMIDc!z~j!rÍ zv{l%*X8qiE70 "> 06!r4"3oXNb-i4" o4"rg\SfH)\S8\aS(!dSa'&{3Iq.(cxH%[.HH)0=7&^2񂲚&zKkvb FZо.HH)\aS(!dShD\aS(!dS , و)H8o"§Q"BȦ8Ј"§Q"BȦ, و)H8oI$MH$8F!h\m Bo!b$$B jg"*D FB{c0zf`cI &$4.*a4" Fް.X%޻RBIIh!b$$Bx  oqj/h nf$DMG@S9DXHLx(S_L^( S_ kV,h"r6W/a`f "E{-D ZBփ Ŀ)B(m rUyRyCءIȼQz Awx7kĹ@9UkY32Eإn>+%Br^&7Ar/LEl$Š/h0KRl*CR+%/*O+%;3X`2^=aCJL;Ƴִog.@4.*l j3}ʘ8Aoryܼ,32Eإn>+%Br^&7Ar/LEl$Š/h0KRl*CR+%/*O+%;3X`2^=aCJL;Ƴִog.ނ/ pG h\T-L`~f0qULE6JLf|,@KhDDx_53xE 䈉(ǂ;uNEMNׄԎjRed5c@ၘ[ 9sעzIKCGh1h #Z / S[(`@(gx-yVfI`A)339=7;^R%Tfk3$]V2XN.'%cdzg"zXI"I`H~! ZBփ ľ5+5)2Y^!5 f \*C+%ٖ^QT4ok8.}kJ1Jݿ6I/hZy/ۂ@Qh?q|E8ǒ"& Nn[>+%tǧ;^R!v o4y`2g8TR+%_ )lp$R+%_e-7[ I/8v`lf`p>o,) qj/h nf$DMG@S9DXHLx(S_8D^ބxMH-jō)8DS0? |"Y^Ƚ3/eHX;A@5H_1ax=VҚC C;nSʳ5/*O(`P3)339=7;^R%P"3=N<bL xY^Ƚ3/eHXvjb5/J` JLfS6Kv "E{-D@?TLz|kjG%#]HL1l)-̰0T'%cdzg"zXI"I`H~! ZBփ ľ5+5)2Y^!5 f \*C+%ٖ^QT4ok8.}kJ1Jݿ6Y\qqP3ae,N|/Lf⠀YVO o<骜nd^#EcpȽ1 3ج:+Y>/ o<骜nNf5#EclÄNEMNׄԉ,xXLAUj8еf_u3G"& ~N",q$DMG<xۯ"r/LzoBv&pbƂ'*ck>|^! v`p>o,/L^^$I, Š/h0K+iMlaء)Y'0 (mН "r6WfdJ}&VK օLo,/L^^$I, ;A@5H_1axƥr0T&VK3X^TVK7>vfy+Hed{2 *BwgϭiS)[&h7p ͓UZv "E{-D@CTLz|kjGj3%#&6W_fXayE\*C13zg=z,^g$$?-!|kA_`RY,ayRyY/ٚdž3 ! /(Rf7 5>Nn[ )g5|h\T-L1Uf0q`xB^]}H@r/8<4QnpȽ1 ZՋ5YJn^7,/4 a~E3zg=z,^g$$?vjb5/{5 bwܧfj^TP0 (fRff"r/LzoBv&JXA`y.+qY,'Z13zg=z,^g$$?-!|kA_`RY,ayRyY/ٚdž3 ! /(Rf7 5>Nn[ )g5|{Y S6qxXLf⠀ƷSެ8еf_u3G"& ~N",q$DMG<xۯ"r/LzoBv&pbƁɜDyA#Ǔ$ oX^hð03dzg"zXI"I`H~-!|kA_![Jke 6 O*Լ<`AClP̤8D^ބxMH @d"< ɒH"RIuq9/ 9sעzIKCb RF^%\ !I' ϝxc0^JRY/̰򊡥&cНYsZTV  se;]ʸ8E3zg=z,^g$$?vjaɏOxMHVdueXzToRG+}G,0 !xY^Ƚ3/eHXvjb5/J` JLf+%Br^&7Ar/LEl$Š/h0KRl*CR+%/*O+%;3X`2^=aCJL;Ƴִo4YFd_8jv "E{-Dh1h Q)n5J!0yܴ{2 *R@E霋9b[=$%!h1h #Z /Ԯ[ Ԥfk ʓx<1/%p` fXayEPғ1N*p+v )g5|qT8иZ}Q)7AKQTn* k[ )g8еf_u3G"& ~N",q$DMG<xۯ"r/LzoBv&pb.HH! v`p>o,/L^^$I, Š/h0K+iMlaء)Y'0 (mН  D "fdJ}&VK օLo,/L^^$I, ;A@5H_1axƥr0T&VK3X^TVK7>vfy+Hed{2 *BwgϭiS)[&h7p ͅV-@E霋9b[=$%!]Š/rc%V #͕>ٖ^QW Lo,/L^^$I, ;A@5H_1axƥr0T&VK3X^TVK7>vfy+Hed{2 *BwgϭiS)[&YKѨ̔R(8YK=QD&"/@HqqP39jg"LN<ǘjS&q7 Ȧ=4'kjGk)2YRكq8ERϔw8еf_u3G"& ~N",q$DMG<xۯ,`Ǧ'kjG kV,hLG' /a`f "E{-D ZBփ Ŀ)B(m rUyRyCءIН LG' fdJ}&VK օLo,/L^^$I, ;A@5H_1axƥr0T&VK3X^TVK7>vfy+Hed{2 *BwgϭiS)[' sl) 8Ar/LEl$Gh1h &=>S5# #͕>ٖ^QW Lo,/L^^$I, ;A@5H_1axƥr0T&VK3X^TVK7>vfy+Hed{2 *BwgϭiS)[&)gvh\T-L)gvZr3qP@c쥟)%@KhDDx_53xE 䈉(ǂ;uބxMH-jō)8DXTD0? |"Y^Ƚ3/eHX;A@5H_1ax=VҚC C;nSʳ5/*O(`P3)330zcz5"P5)8DXTD̑v)[a:и@E霋9b[=$%!h1h #Z /Ԯ[ Ԥfk ʓx<1/%p` fXayEPғ1N*p+v 9Rϔw͒8E3zg=z,^g$$?Š/Nׄԏ6KF|b<]~SZ=ap` NK "E{-DCT|jW-HjRed5IdCsfk0TVKdz,0iI'xp\֕8bm|klh\T-L)gv|%*`77YVO o<骜nd^#EcН ;)gY>tV-}Eb8h:j>4HX0`3=7;^R&vRϼ|Z1UB^]}H@r/8<4QnН %XʫXϥ_8c@ၘ[ 9sעzIKCGh1h #Z / S[(`@(gx-yVfI  be&f`fLzoBv&JʫXϥ_8.+qY,'Z13zg=z,^g$$?-!|kA_`RY,ayRyY/ٚdž3 ! /(Rf7 5>Nn'6LAUk[ 9sעzIKCjbc;^R=Q)u!0yܴ{2 *R@E霋9b[=$%!h1h #Z /Ԯ[ Ԥfk ʓx<1/%p` fXayEPғ1N*p+v)g5|h\T-L1Uf0q`xB^]}H@r/8<4QnН %XXA`xc@ၘ[ 9sעzIKCGh1h #Z / S[(`@(gx-yVfI  be&f`fLzoBv&JXA`y.+qY,'Z13zg=z,^g$$?-!|kA_`RY,ayRyY/ٚdž3 ! /(Rf7 5>Nn[e,F2R/b+ Bjf7/ 7ܩTvՕG@KhDDx_53xE 䈉(ǂ;uބxMH-jō)8$G&I /a`f "E{-D ZBփ Ŀ)B(m rUyRyCءIН LG$ٖ^QW Lo,/L^^$I, ;A@5H_1axƥr0T&VK3X^TVK7>vfy+Hed{2 *BwgϭiS)[&YeQƅB͔w*-FoS 1nsl)VU$-@E霋9b[=$%!}Š/,0/J 6 ҺS&qIL@+JOBv&uis%kRϔw* 5>Nn[e,F2R/n5J@KhDDx_53xE 䈉(ǂ;uބxMH-jō8fJEcqT/a`f "E{-D ZBփ Ŀ)B(m rUyRyCءIН ƣ2R/#R3$]V2XN.'%cdzg"zXI"I`H~! ZBփ ľ5+5)2Y^!5 f \*C+%ٖ^QT4ok8.}kJ1Jݿ6ANmHq*-@E霋9b[=$%!}Š/Q)n5J!0yܴ{2 *R@E霋9b[=$%!h1h #Z /Ԯ[ Ԥfk ʓx<1/%p` fXayEPғ1N*p+ve,F2R/n5J S6YFd_8j-FoS 1xÍ Q{@ ]vo%[pC4y""h o,/L^^$I, Š/h0K+iMlaء)Y'0 (m =1 (.HH&fHedh\NK "E{-DCT|jW-HjRed5IdCsfk0TVKdz,0iI'xp\֕8bmw)g[ 9sעzIKC >b RLzxdqJі5!0yܴ{2 *R@E霋9b[=$%!h1h #Z /Ԯ[ Ԥfk ʓx<1/%p` fXayEPғ1N*p+ve, S6Y+a-FoS 1zXqj/h nf$DMG@S9DXHLx(S_X MNׄԎ֬XĄRX^hð03Y^Ƚ3/eHX;A@5H_1ax=VҚC C;nSʳ5/*O(`P3)330zcz5"P4HE!C3$]V2XN.'%cY^Ƚ3/eHXvjb5/J` JLftV-&p,$m|_:+zB=O&$ mHq*oBzY"MD^Bjf&r/0E03H*y0L# oU3LzhNׄԎ[kԤfkY@KhDDx_53xE 䈉(ǂ;uNE礛Н Ԥfkx ;08Ar/LEl$b RF^%ObP0ClP[Kʓ6 LÄNE礛Н Red5.+qY,'Z13zg=z,^g$$?-!|kA_`RY,ayRyY/ٚdž3 ! /(Rf7 5>NnԤfkK>5B^]}H@r/8<4QnI7;^R;I! v`p>o,/L^^$I, Š/h0K+iMlaء)Y'0 (m +%Br^&7Ar/LEl$Š/h0KRl*CR+%/*O+%;3X`2^=aCJL;Ƴִk‡ed5zINׄԋLSjY,bYK>58v`lf fI/|klp|"h75JLf|,;0n638RύlN|^# Q{@ ]vo%[pC4y""h 5;]xv "E{-D@ -!|ÓzI p/HL1l)-̰0T'%cdzg"zXI"I`H~! ZBփ ľ5+5)2Y^!5 f \*C+%ٖ^QT4ok8.}kJ1Jݿ6Y) qqP3ae,ϔwㄵLf⠀Y)%@KhDDx_53xE 䈉(ǂ;uNE礛Н %XE2g{ȋ c@ၘ[ 9sעzIKCGh1h #Z / S[(`@(gx-yVfI  be&fa'"MNׄԉ@L#yaQ32Eإn>+%Br^&7Ar/LEl$Š/h0KRl*CR+%/*O+%;3X`2^=aCJL;Ƴִo4Y)%p;dzg"zXI"I`H~-!|ÓzI lu!0yܴ{2 *R@E霋9b[=$%!h1h #Z /Ԯ[ Ԥfk ʓx<1/%p` fXayEPғ1N*p+v )gƶ|klh\T-LYK>5;]df0q )gƶ{䤘5:+0Z*Κ·b#EclÄNE礛Н 8YK>5؅o%$/)X٭w*4-Euټm 䈉(4jg"SA@Q*vI7;^R8KZc@d"< ɒH7,/4 a~E3zg=z,^g$$?vjb5/{5 bwܧfj^TP0 (fRff"r/=$ބxMH @d"< ɒH"RIuq9/ 9sעzIKCb RF^%\ !I' ϝxc0^JRY/̰򊡥&cНYsZTV  se;]ʸ8E3zg=z,^g$$?;A@5H_0ǧ|kjGb+%*Kңz|b<]~SZ=ap` NK "E{-DCT|jW-HjRed5IdCsfk0TVKdz,0iI'xp\֕8bmo,eQƅB͔w*-FoS 1nsae,ϔw*v a "E{-Djbl򊺲T*70 P3+JLG$vfy+Hed{2 *BwgϭiS)[&h7p ͓UZv "E{-D@}Š/zI Ѩ̔:|b<]~SZ=ap` NK "E{-DCT|jW-HjRed5IdCsfk0TVKdz,0iI'xp\֕8bmo,Fd_& S6LAUkLf⠀ƷqxX8еf_u3G"& ~N",q$DMG<xۯ"r/=$ބxMH-jōĬ^F7/ 0? |"Y^Ƚ3/eHX;A@5H_1ax=VҚC C;nSʳ5/*O(`P3)339oBv&JXA`y.+qY,'Z13zg=z,^g$$?-!|kA_`RY,ayRyY/ٚdž3 ! /(Rf7 5>Nn[ )gƶ}Q)ɇX@qqP3gKQTn* k[ )gƶ}Q)7A Q{@ ]vo%[pC4y""h o,/L^^$I, Š/h0K+iMlaء)Y'0 (mI7;^R%SFd^F7AfHedh\NK "E{-DCT|jW-HjRed5IdCsfk0TVKdz,0iI'xp\֕8bmwYK>5Hq*-@E霋9b[=$%!jaɏO=$8fJG#RHL1l)-̰0T'%cdzg"zXI"I`H~! ZBփ ľ5+5)2Y^!5 f \*C+%ٖ^QT4ok8.}kJ1Jݿ6YhfJEƩPxBjfYhfJEƩP~f0qYK>5VhZy/ۂ@Qh?q|E8ǒ"& o,/L^^$I, Š/h0K+iMlaء)Y'0 (mI7;^R%E=DbL xY^Ƚ3/eHXvjb5/J` JLfNne,XqqP3ae,[ j3}ʘ8AoS&q缉!Y)%ɜDy㍅[>S8=E1Y29"hADQI ae,bEcfzB=5;]xv "E{-DvjbcI>S5# #͕>ٖ^QW Lo,/L^^$I, ;A@5H_1axƥr0T&VK3X^TVK7>vfy+Hed{2 *BwgϭiS)[&)gƶ|kp/ƅBͲ|kgvZr3qP@c쥟\qj/h nf$DMG@S9DXHLx(S_X 礛Н %XE2g{ȋ c@ၘ[ 9sעzIKCGh1h #Z / S[(`@(gx-yVfI  be&f`f=$ބxMH @d"<=#3$]V2XN.'%cdzg"zXI"I`H~! ZBփ ľ5+5)2Y^!5 f \*C+%ٖ^QT4ok8.}kJ1Jݿ6ANm[>S6Kv "E{-D@vjbcI>S5#͒&6W_fXayE\*C13zg=z,^g$$?-!|kA_`RY,ayRyY/ٚdž3 ! /(Rf7 5>Nn쥟\qqP3l_ j3}ʘ8A|kg JI^SY󢱰 o<骜n+y)&!yMb4V6X 礛Н ;)gƶ{䤘5:+5eQƅ.7!<4&L^*qcSެ8иZe\%*`77 ܮm[>SެH%[ 9sעzIKC ?TeUՕbQaءZW@d"< ɒHi]1礞xMH6KJ )33leV;ƳִkV Q{@ ]vo%[pC4y""h Nn[e,ϴj3%"08иZb \%*`75ƅ.7!<4&L^*qco,/L^^$I, Š/h0K+iMlaء)Y'0 (m Ѩ̔RƅBͲ|kg5|qTLf⠀ƷY2B^]}H@r/8<4QnI7;^R8KZc$@XT$HYx ;08Ar/LEl$b RF^%ObP0ClP[Kʓ6 L8\瞒oBv&J ,*{$,.+qY,'Z13zg=z,^g$$?-!|kA_`RY,ayRyY/ٚdž3 ! /(Rf7 5>Nn'6Y2`p>o,/L^^$I,  #TzI]+FXԄ{r /(Hbr^&7Ar/LEl$Š/h0KRl*CR+%/*O+%;3X`2^=aCJL;Ƴִo[Nn[ I/óc0p;gvhZy/ۂ@Qh?q|E8ǒ"& S8`p>o,/L^^$I, b R9>S5# #͕>ٖ^QW Lo,/L^^$I, ;A@5H_1axƥr0T&VK3X^TVK7>vfy+Hed{2 *BwgϭiS)[&YG S6|kp/%*`77|klhZy/ۂ@Qh?q|E8ǒ"& S6K4.*l,N|/Lf⠀b|Gc-MTtk"+Óz5"g =o,Ίq7BPtN7'|h3aɽ 3xXLAUj8еf_u3G"& ~N",q$DMG<xۯН %XʫXϥ_8c@ၘ[ 9sעzIKCGh1h #Z / S[(`@(gx-yVfI  be&faɽ ('*ck>|^&fHedh\NK "E{-DCT|jW-HjRed5IdCsfk0TVKdz,0iI'xp\֕8bmw1U`p>o,/L^^$I, #TOxMHFdtԄ{r /(Hbr^&7Ar/LEl$Š/h0KRl*CR+%/*O+%;3X`2^=aCJL;Ƴִkg5|h\T-L1Uf0q`xB^]}H@r/8<4QnroBv&pbƍbVAү# v`p>o,/L^^$I, Š/h0K+iMlaء)Y'0 (m&'kjDj5YJn^"RIuq9/ 9sעzIKCb RF^%\ !I' ϝxc0^JRY/̰򊡥&cНYsZTV HL=Ĭ 8ܼ,Zr3qP@c[)VUhZy/ۂ@Qh?q|E8ǒ"& o,/L^^$I, Š/h0K+iMlaء)Y'0 (m&'kjDjS&qIL@bL xY^Ƚ3/eHXvjb5/J` JLfSެH%[ 9sעzIK ZB *ʱRP0ClP̭+E2g{ĐH$rz5#H۝/!+\4ͅ)VUok8.}kJ1Jݿ6}Q)7A Q{@ ]vo%[pC4y""h Ѩ̔R%*`75VhZy/ۂ@Qh?q|E8ǒ"& +%Br^&7Ar/LEl$Š/h0KRl*CR+%/*O+%;3X`2^=aCJL;Ƴִo,F*BjfTba-FoS 1+ANl,F*76Ì"HM+&)8DagvvE2gxagvo"§Q"BȦ8Y+73@y p >Ѩ̔=!tAxϴj3%"0+7"HHb|[LYI 8Y>/=!t'Ē6}Q)7AHPqoȢA@$8иZ53LLR' c5)8ULNM oM Ns9s9s9s9s9s9s9s9s9sЬVB9s9s9s9s9s9s9s9s9s9sEHDg!ADcfŌ5Euz1{w L,IPOQPOF/*MѿBͣ'{Y1#Я)o0$3o7r)tɞ*DSȦI"LMgixMH`^-@d"<ƒD 7+ޚՋ5#V/;^R<^-\ m'5)8p8 Z3oS&q缉!ƄP"3<((ЊS&q灀X Mgg0R'$D&"/@Hq&rB9H +%Br^-BWVMhVF؏f"*>/e qANi08B օ4+>vfZS2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_instanceresourcesddd   -e acinorst#$:AENS_dlpu"/=CGILMOPRTfghmvy&()>BDF[]bk'012a[Ћ aEjp("ݶXf,3P‚-hEj0|"5, ,"İZӿ`bQAmuFٺ4杉6%KAm]ibe+[::+cN]lΰ{+0VQÚv[X9N1xӗf-GiӃ4IPim`%:杊]YhN'(N1}a(]Qg&ktvnݶǂ(ID HpaF \"#Bu.ݶ.\V <2^aNaVXaa`QDu]Eo{Ɯ7ֳBn[/nm\f8+ [fׄlV nme7mӗf8+ [fׄl+m9|)ڦ60 <|\f"m@Cx؝i˳xDD1qmk1)bv.9vlSvmz[vmJul`9vlSvmAehE;vf/%v-c'91s.\Ni؛3bTvج[9R/=vi[-)'@4IPi`J×^[3ck @Uw#W< Rj< +\1 :vvL92{VXt'o @%:4a4{VXt'o ab2f5 i;8iGQFGtfvӿ,_XJ9-c'91s.\m1ഊQ%H8zcQ0+KMt[6뇦TSE!۶iN6yg>r5L^zҷ0b'ܺfžb&V! Tpz&.uЄ6ݶa!lQ HNmڦغ]wG/ Um6%y=K^U("MUJ-t•nmdaJavmܼd<([4 B"޻4[5.U^OrK\\f 0Zh\Y]pdG-tnmc% ^OrׄDpHN|XEmi3Q=ugCkKvmm-L]]o]V.G0.P#J/$tUƤhKr۶mӺ<7mm0%;pvmmln[K >LSvwVghE;vf/%v-hbGNrbX]I]sm9bl͉RibuL^brbX]4j$$|l-)+ L2譚vڲBЦ^Or4.%i;f3Tv$$|V@%rZp'%T'8J Am%Cr]7NL@!^n4 ),9N)0  Xb ;m!^n4 ),zCsN.4AmQeQmQŝٝ洳1}a(瘷B9ɋat!'u{v@C Hi%T!Ç; s Ժn@-c8=B{\&$mbՙ۶Šݶ^ L\ B-iӰ{1}a(Ӷ1oAܺ4.%4M*Z ;l4żN6$$h/t7Jٜ7i]K ӚvFe3qidsN.4Amۆ`O4p)ӚYs[pz$.M: I{<@J$CLv3 1auMt91bthh3 ѢЛvڦغ]w5Ӻm]TD$҉zÛ1qhbkv4żO@( k6Ef$qpBТsոI{XaB٤J٥nb٬at䱒]QyɖDqtVqP5e.+rӗf Did'ֳB녵lve9J\>s \V1y\\feb 7m7(LV!9\Ջ gfŕ f5b60Q  a {4FaS+Ef$qp3 $""ŻmH*P(YLY<etrK@Of5b6ݶmmAPJ B:b9XS, |Z7mAjbu DdM) <([4 B"޻4[5.U^OrK\\f 0Zh\Y]p‹€ Hj$$hH"x "Tbth&ݶqsCE Ӻ8;vwVghE;vf/%vxR'91s.9bl͉RibuL^brbX]4j$$|l-)+ L2譚vڲB4IPi`J×^[3ck @Uw#W< Rj< +\1 :vvL92{VXt'o @%:4a4{VXt'o ab2f5 ilT)33ܺ-91oAܺ4.%4˲fZ Ӷ64杊]YhN 7ti`>>Sɧ41}a(JPΰ`{v@C Hi%T!Ç; s Ժkvڦغ]sb.3c $zÅ*8=AAmjbuQX0 ` uQcJ&nTŠ;3mAjbuscSEf}CJuUhO1Byˮ FMt/-ye/-c &..P+s`+ UWܺ W\-mG0f5ZxQ3/;c Ǩ2)PVgD. Z +ݶ.Z1b7G2)PVgD. Z +ݶ- <(̙pC7 4ѐbXax=Մq Am$.%\'r5skb.f&ob9bVg Ӷm(2(Ӷ}(΂w G<żM L\ $7a x-"IR0fb "8$'R9jbuӺmmMB5%SDCm ҝm|Jj٥n`<żO/'ùi3Q<żMB*B{\w\F`6 !:wVgna>4r뢠Ү`;<â^Ֆĩ! WB:U1sЍ*L쵖[.`3vmA*bB]tTU}ҮXnmQPΰcU}N`vwVghE;vf/%vxRNrbX]sNٛӶeb'ܺiOT5qaViWEFӱ&j5Am* @$,0QJ/b]ތ %b ;l '8t䵆 *;NK]s5OpӶةSf/% gum(o瘷BEBs:BOriإՙƈ4J:J4J83ifbQ•EBs:a x-"IR0fb "8$'R9mSl].tNr-jbuЍ*ՋjbuP)IT"5 X1U}'U}7mQ]u&>4RY`Z 5*ԜZ ť<'(x]:A{Ei7mzjE1*$RxQ{Ү79ȴx>tNr- B۶l !QLjJFt_jonmxPi1bP3=DIE0R7~q5"v=DI$<9 0%mmm]:A{Bb!$IB 0Zh\Y]pmvm]ڱ…IEѝ"M))𫉬A "M ! 0YO-mmm,0}*ԜZ Z&1BֳB녷mmma͌<*bXRTQ"M@bR"$RU}m{V2ZՋ…I "-JųX/ ,U.dofŕ nm[K :b[2#J/!U}  N]3hUw#W4)s5ڰ`SvmbXQ"M@bR"$R@Ft_jmU} {b.3hՌb6ݶmՙln-(vbXQs7Jٔ!U}ҮX0\fbp2BK>ՃPçk*hİA@SB-iӰ{1}a(Ӷ1oPj&.urri;flJNyxs*ST+sť<$TЍ*:Ӛv$Xf4%ATDPjPj|iWE@U*r %b ;l '8t䵆 *;NK]s5Op$%3xt i;8iGQFGtfvӿ,_XJ9-j Pΰ^BN]sxݶǂ(ID HpaF \"#Bu.6unTKQLjJne;ʔ1yJ>yx^Orf yx1X)UNrbX]I]sxUƤhH-m;Cv(+;0nmMt^vmmFK]2{-mmDQD•V2Z闅*ݶhk•!/'xkxPi1wAtEvi[kX]Ռ@`иmm-)kЎ>2ZݶmX`(/-b ϔkymm&j0𧮬c-x nmm…I "-JJՄiWE;=5 ԕM)n@P[vmwQmPV>w\0f`nnmҍm-kyaGɚnNNN<żMBT'91s.$.ӱ6fĩh4Yg.ZS1x \uMҮ191s."]ڱq hRݶmA`8#2a>#RBL(@-k4., nk(xiWEAnm(>%LYRˮƕt_tǃU}@ɘD#Bp=mm&j0J5Bs:41D-mmҮXʂLƢ# | W_0ݶmmmm]{5aH ܰ`@`иmmj\A1­%&j+fŕ mmmmj  k`kYqeu۶ln-(v]ڱd­%4V2pP([v( UY!TNͪ)]Cǃaӵ4^D"ݶD *<UVcfj WRj`1\Am 1[K Qj=DI PDSDB|#J/b6ݶu ҶeFt_hB4V2A1 fЫFhRj`İD E4H*Ջ4V,@0\f=y=˫-jmj nNNN/ UAFӱ6fĩh4Yg.ZS1x \uMҮ191s."ZMmQLjJ^>4Ml>r2Nr-]:A{Bb!cǦTSE,0f>]ڱq"8$'۶mơ:-LX".QhLM߅\Mb8`݀mmǨ4G0f]ڱq@Ft_jH'uc%X͠:>;YSE7mmufqf[J6ݶu ҶeFt_hB4V2A1 fЫFhRj`0ʚ.)mo1,)AЋZw_XJ(4[(9ɋatsNٛӶeb'ʔ1yJiO(LSvwVghE;vf/%v-hbR(9ɋat!'uʹ杉6%KAm<żO/'uҞj(iWELZSWQsNę <81JS*¨q Xb]NT %b ;m$:aՄK14RDv F^vY]N1}a(瘷BH&.uЄ7a x-"IR0fb "8$'R9mSl].]ڱqx7mmB4V2vڦغ]s]"*[Ժ1I˥[ҮXͷmuxncuf`ufqv{+Q.Eƕt_t]t(>4v(+9ˮEƕt_t!0f`ufqv#J/ <+[KҮXp4Op)QX nmmZSP00@@ N`@  \ W_mJyf5Ўx<4Ei7m,)\HJ/c* {j"!8ݶm5xRR(9ɋatǃU}@ɘD"ݶmiWEeA&cQ[K >LV Z + nmmmmڮC=nX0 0Zh\Y]pmms5ڰbLƢ# | W_0ݶmmmm/p3ٮ @V ֳB녵mҍmU}L<*bX|#J/c*ajp@B۶(AEGT ` ڢvmUJteM<C! <5PQQ =BC6UxR3P})j`0El­%(5E$(U")E!J>]ڱq n[K :b[2#J/!U} X0)mo1,(&1BM) |#J/b6*Ջ&P=1j nNNN/ U"Fӱ6fĩh4Yg.ZS1x \uMҮ191s."Q[mmmm<|#J/c,mmmmۖf/%Mqټ]ڱq@Ft_jH@teMݶmՙln-(vbXQs7Jٔ!U}ҮX0\fХj(aӵ4\SvbXR  )NNIL\ Ni؛3bTvu6fĩx1}a(Ҟ^"_191s.ԤVTtsNX:"_F' %pXK[L^P̖czhӚvFe3qi`8^EXJ97/i;8Ӷm(2(Ӷ}(΂w GIL\ m1ഊQ%H8zcQ0+KMt0xa 'DGYpj]wsv9|xSnf0ǹ b0DIM$ʪ<8-mKa (񤈓$ITxp0f$j1 "8$'۶lj 9ɋatǹ vmufqǀEa (񤈓$ITxp0f$j*cRDpHNm,&.umՙm0ƒ"Li&UQ°RLTS"#Bp=mơ`NrbX]1a,ݶiYq!ln7m0ƒ"Li&UQ°RLETS"#Bp=mơ`Ԋ(NrbX]1a,ݶiYq!lhENNGNrbX]sNٛӶe+b:陥Jyhfp|$vشbGơ`fd |FӲ3.ɛhN,0QɸxxsNiإՙiGQFGtfvӿ,_XJ8,8=Bs:a x-"IR0fb "8$'R9mSl].1nTKbp2pRj`ơNT}`%:'ɘU=-ts7JٜvbXQs7JٔqA˦m Nj.fV !CX9N fLƪ nFK]^꜖cX-mo1,|d4f'.W ܍\۶s7JّgU0"M@bR"$R n9"60R7W,dQU4HݶjIa-H,xԕ jD۶ԹX00ycs5ڰ`-mC /u)t3}[IQ maӵ4\aVçk*h[vJuUhLaE.fo{b ddTՃC`%:&djИ8 ЋZw_XJ(4X5AFӱ6fĩh4YeJ꘼ΰfikbҞ|Zٜ"_(<4#J/iOT+Bh7ƍ9df]7 Xax=ՄqӱK3 ;lҎ/}ҍ;lҎ,.ZYqX5ALnci $J$8pa0.`V!:]nTKbp2pRj`5 :v9l΄iWEMҮXʍjbua,0;vڦغ]rTqAP`&Q İ(n(B4B]ڱa͠e6\'r5sB3P}NTte15SqAa%f]'"^аu&*ZɚJuUk]Хdµ5B k+Cqz-D,ħUVЉj+[{ EUծ9RҙUK: )WN\AgA{Yd 01p U5q{Baf4r5Wr^ЌЕ(脨EBT|ݶV̌<(ԍ:ǹ Qj*"[v]^FWc[MB5%SDJ`pP([v]ڱ^FWc[MB5%S H!<\T ݶ <(9-tǹ [vbXkiۖN]3zmԺZL r1a,TqAPaZbX&Q E$(U")E,ԺZL r1"MQ AFm[cÃJaIM!XDG7mbݶ`҃@bn[K =DI PDSDH=5 ԕM)(P)ITDCR( 8t͠}\'r5s@XAHTy5<H(J(HMH,xԕM",@ y2ǐI *i=B*QR$ *DUC 1*HGH(T5C 1MET&5Ǩa z@A2E 釨h=ER(&i=2EGQT@ z$ Dy"U Hp@􆪡TJT=@􆪡TJUDǍIPGH9Q(UTT=@Dcʒ(P% P)4Ah i=!$*iTjjDrH$" Q"@T!$*<<I5I&H<=T(I5I&H<=Q y%MRIUd4"֝; ;lj EBs:Ӛv&ؕ-+,)]SL-lZSϔK@3K'aVRjU}iOT+Bh7ƍ9df]7 Xax=ՄqӱK3 ;lҎ/}ҍ;lҎ,.ZYqX5 L\ m1ഊQ%H8zcQ0+Kmm18tNjs5ڰcPçk*hVFt_tЍ*Ռݶ.\mm(5G$ Qj H5 n[K :b[2#J/!U}  N]3hUw#W4)s5ڰa teMA;6SU7Vebr- ZBhRU ܙUVm VL+X3T)Y0ֻq7 +BJuUhMaʰ-U^Z]-)AJuTtjtj*Y^@̣ j : I{@5Y3W(isAy/sUy-ʰ,m QΈJ_D%G.aMj9l‹H\{b e&1BM)mU}<(ԍ:ǹ QLjJ۶Ѝ*Ռ^FWc[MB5%S H[v2Z0Tmkyc%!n[18tNjvڗTkYIn]=1ݶQj H5 <+[K$@j$D E4HvڗTkYIn]=DI8 H( a xpiA`)2I+L\[lPp(lZkyaG5HhIǦTSE%ՃPçk*h A͠Z VХ]:X3T)WNkV3rfRaUwBEhn/BV%К-E``Zua(0ZS2tgA{Y*K>,/k!TFf.tppjf/hQ9c,.^.Z `X(J\ݶV̌<(ԍ:ǹ Qj*"[v]^FWc[MB5%SDJ`pP([v]ڱ^FWc[MB5%S H!<\T ݶ <(9-tǹ [v٭j]Qg&ktvn0kvDI8 H(0o1,zTqAPRQj*" j]Qg&ktvn&Q [Qj*"MB5%SDJ x*cRU0QԊ(a,D(TGQd℁D=DǍIT*HL @􀄆A$P% TyzQ(UP" @ &QR$ *$MP" @QU@*zLB za*<HQ*vЮ•'91s.n$P)IRiqP)Iq!IT kA$oda&/םa՝a֝a&a&2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_listsapinstancesddd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_listsapinstances.sh 1.2.1.9 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2014 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_listsapinstances.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_listsapinstances ## ## PURPOSE: ## Produces the output suitable for parsing by SMIT screen's ## command to list. The output contains the list of running SAP ## instances of different type. ## ## ## ARGUMENTS: ## ## Type: ## -t AS/SCS/ERS/DB ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include version='1.2.1.9' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Function: # allLocalSAPASInstances # # Purpose: # To list all local running SAP Application instances. # # Output: # List of SAP Application Server Instances. # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function allLocalSAPASInstances { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -i ret count typeset allASInstances ## this loop searches for SID whose mount directories are available instead ## of exiting if first SID directories are not available for SID in $( grep -w "^LIBPATH" "/usr/sap/sapservices" | awk -F"/" '{ print $4 }' | sort | uniq) ; do SAPMNTDIR=/sapmnt/$SID if grep -qw "$SAPMNTDIR" "/var/hacmp/log/sapmount_output" ;then setSAPGlobalEnv $SID ret=$? (( $ret != 0 )) && continue getAllRunningASInstances allASInstances for count in "${!allASInstances[@]}" do echo ${allASInstances[$count]} done else continue fi done rm /var/hacmp/log/sapmount_output } #---------------------------------------------------------------------------- # Function: # sapListASInstances # # Purpose: # List different SAP Application Server instances running in a SAP System # for SMIT screen's command to list. # # Output: # List of SAP Application Server Instances. # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function sapListASInstances { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset nodes=$* [[ -z $LOCALNODENAME ]] && { allLocalSAPASInstances return 0 } for node in $nodes; do [[ "$node" == "$LOCALNODENAME" ]] && { allLocalSAPASInstances } || { cl_rsh $node \ "/usr/es/sbin/cluster/sa/sap/sbin/cl_listsapinstances -t AS -I" } done return 0 } #---------------------------------------------------------------------------- # Function: # allLocalSAPSCSInstances # # Purpose: # To list all local running SAP SCS instances. # # Output: # List of SAP SCS Instances. # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function allLocalSAPSCSInstances { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -i ret count typeset allSCSInstances ## this loop searches for SID whose mount directories are available instead ## of exiting if first SID directories are not available for SID in $( grep -w "^LIBPATH" "/usr/sap/sapservices" | awk -F"/" '{ print $4 }' | sort | uniq) ; do SAPMNTDIR=/sapmnt/$SID if grep -qw "$SAPMNTDIR" "/var/hacmp/log/sapmount_output" ;then setSAPGlobalEnv $SID ret=$? (( $ret != 0 )) && continue getAllRunningSCSInstances allSCSInstances for count in "${!allSCSInstances[@]}" do echo ${allSCSInstances[$count]} done else continue fi done rm /var/hacmp/log/sapmount_output } #---------------------------------------------------------------------------- # Function: # sapListSCSInstances # # Purpose: # List different SAP Central Services (SCS) instances running in a SAP System # for SMIT screen's command to list. # # Output: # List of SAP Central Services Instances. At anytime this list will have # max. of one entry as in any HA SAP system one can have SCS for Java, SCS for # ABAP or both, however HACMP manages both these instances with a single RG. # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function sapListSCSInstances { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset nodes=$* [[ -z $LOCALNODENAME ]] && { allLocalSAPSCSInstances return 0 } for node in $nodes; do [[ "$node" == "$LOCALNODENAME" ]] && { allLocalSAPSCSInstances } || { cl_rsh $node \ "/usr/es/sbin/cluster/sa/sap/sbin/cl_listsapinstances -t SCS -I" } done return 0 } #---------------------------------------------------------------------------- # Function: # allLocalSAPERSInstances # # Purpose: # To list all local running SAP ERS instances. # # Output: # List of SAP ERS Instances. # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function allLocalSAPERSInstances { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -i ret count out typeset allERSInstances ## this loop searches for SID whose mount directories are available instead ## of exiting if first SID directories are not available for SID in $( grep -w "^LIBPATH" "/usr/sap/sapservices" | awk -F"/" '{ print $4 }' | sort | uniq) ; do SAPMNTDIR=/sapmnt/$SID if grep -qw "$SAPMNTDIR" "/var/hacmp/log/sapmount_output" ;then setSAPGlobalEnv $SID ret=$? (( $ret != 0 )) && continue getAllRunningERSInstances allERSInstances for count in "${!allERSInstances[@]}" do echo ${allERSInstances[$count]} done else continue fi done rm /var/hacmp/log/sapmount_output } #---------------------------------------------------------------------------- # Function: # sapListERSInstances # # Purpose: # List different SAP Enqueue replication server instances running in a SAP System # for SMIT screen's command to list. # # Output: # List of SAP Enqueue replication server instances. At anytime this list will # hava max. of one entry. User can setup ERS instance either for Java SCS # or for ABAP SCS or may be both if he is running ABAP+Java installation. # However, even if a SAP system has two ERS instances the HACMP manages both in # a single RG. # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function sapListERSInstances { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset nodes=$* [[ -z $LOCALNODENAME ]] && { allLocalSAPERSInstances return 0 } for node in $nodes; do [[ "$node" == "$LOCALNODENAME" ]] && { allLocalSAPERSInstances } || { cl_rsh $node \ "/usr/es/sbin/cluster/sa/sap/sbin/cl_listsapinstances -t ERS -I" } done return 0 } #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- LOCALNODENAME=$(get_local_nodename 2>/dev/null) typeset TYPE nodes while getopts t:IL option; do case $option in t) TYPE=$OPTARG ;; I) # List the accessible instances on this node nodes=$LOCALNODENAME ;; L) # List instances on all nodes typeset -A list KLIB_HACMP_list_nodes list nodes=${list[*]} ;; *) ;; esac done # No type specified, abort immediately [[ -z $TYPE ]] && exit 1 # If -L or -I options are not used, abort immediately [[ -z $nodes ]] && exit 1 mount > /var/hacmp/log/sapmount_output typeset -A listInstances listInstances=( [AS]="sapListASInstances" [SCS]="sapListSCSInstances" [ERS]="sapListERSInstances" ) if [[ -z ${listInstances[$TYPE]} ]]; then exit 1 fi ${listInstances[$TYPE]} $nodes | sort -u exit $? e SCS f k^B$od?</םa՝a֝a&?<2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapdiscoverncesddd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2014 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapdiscover.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapdiscover ## ## PURPOSE: ## Produces the Smart Assistant output suitable for parsing by the ## application discovery clquerysa command. Shows the user what ## types of instances are available on the local node. ## ## ## ARGUMENTS: ## ## Type: ## -t GFS/AS/SCS/ERS/DB ## ## ## OUTPUT: ## -t GFS ## SAP Smart Assist:SAPNW:SAP NetWeaver Global Filesystem:SAPNW_SAPGFS:{0|1} ## -t SCS ## SAP Smart Assist:SAPNW:SAP NetWeaver (A)SCS Instance:SAPNW_SCSINSTANCE:{0|1} ## -t ERS ## SAP Smart Assist:SAPNW:SAP NetWeaver ERS Instance:SAPNW_ERSINSTANCE:{0|1} ## -t AS ## SAP Smart Assist:SAPNW:SAP NetWeaver AS Instance:SAPNW_ASINSTANCE:{0|1} ## -t DB ## SAP Smart Assist:SAPNW:SAP Database Instance:SAPNW_DBINSTANCE:{0|1} ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include version='1.2.1.16 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapdiscover.sh 1$' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities #---------------------------------------------------------------------------- typeset NODE #---------------------------------------------------------------------------- # Function: # sapIsGFSInstalled # # Purpose: # Reports to clquerysa (Application Discovery) whether SAP Global Filesystem # is accessible & configurable. # # Output: # SAP Smart Assist:SAPNW:1.SAP NW Global Filesystem:SAPNW_SAPGFS:[0|1] # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function sapIsGFSInstalled { typeset ret sapmntdir saptransdir gfs_type gfs_type1 gfs_type2 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x for SID in $(grep -w "^LIBPATH" "/usr/sap/sapservices" | awk -F"/" '{ print $4 }' | sort | uniq) ; do SAPMNTDIR=/sapmnt/$SID if grep -qw "$SAPMNTDIR" "/var/hacmp/log/sap_mount_output" ;then setSAPGlobalEnv $SID else continue fi ret=$? (( $ret != 0 )) && print -n "0" print -n "$NODE:" /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 2 "SAP NetWeaver Global Filesystem" print -n ":SAPNW_SAPGFS:" [[ -h $SAPMNTDIR ]] && { print -n "0:$SID\n" continue } # Checking whether saptransdir is nfs3 (or) nfs4, if not continue for next SID # Here the logic illustrates that there is possibilty we get more than one value when # we try to grep using $SAPTRANSDIR since it is same for all SIDs as below example # mount | grep "/usr/sap/trans" # naruto /export/usr/sap/trans /usr/sap/trans nfs3 Mar 25 05:24 # prop /export1/usr/sap/trans /usr/sap/trans nfs3 Mar 25 05:45 gfs_type1=$(grep -w "$SAPTRANSDIR" "/var/hacmp/log/sap_mount_output" | grep -w "nfs3") gfs_type2=$(grep -w "$SAPTRANSDIR" "/var/hacmp/log/sap_mount_output" | grep -w "nfs4") if [[ -z $gfs_type1 ]];then if [[ -z $gfs_type2 ]];then print -n "0:$SID\n" continue fi fi # Checking whether sapmntdir is nfs3 (or) nfs4, if not continue for next SID gfs_type=$(grep -w "$SAPMNTDIR" "/var/hacmp/log/sap_mount_output" | grep -w "$SID" | awk '{print $4}') [[ $gfs_type == "nfs3" || $gfs_type == "nfs4" ]] || { print -n "0:$SID\n" continue } checkIsSAPVersionOK ret=$? if (( $ret != 0 ));then print -n "0:$SID" else print -n "1:$SID\n" fi done if (( $valid_version == 1 ));then exit -1 fi rm /var/hacmp/log/sap_mount_output } #---------------------------------------------------------------------------- # Function: # sapIsASInstalled # # Purpose: # Reports to clquerysa (Application Discovery) whether SAP AS instances # are installed on the local system. # # Output: # SAP Smart Assist:SAPNW:SAP NetWeaver AS Instance:SAPNW_ASINSTANCE:[0|1] # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function sapIsASInstalled { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset count=0 typeset ret ## this loop searches for SID whose mount directories are available instead ## of exiting if first SID directories are not available for SID in $(grep -w "^LIBPATH" "/usr/sap/sapservices" | awk -F"/" '{ print $4 }' | sort | uniq) ; do SAPMNTDIR=/sapmnt/$SID if grep -qw "$SAPMNTDIR" "/var/hacmp/log/sap_mount_output" ;then setSAPGlobalEnv $SID ret=$? (( $ret != 0 )) && continue checkIsSAPVersionOK ret=$? (( $ret == 1 )) && continue typeset allASInstances getAllRunningASInstances allASInstances if (( ${#allASInstances[*]} > 0 )); then if [[ $count == 0 ]];then /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 5 "SAP NetWeaver AS Instance" print -n ":SAPNW_ASINSTANCE:" print -n "1\n" count=1 fi else if [[ "$SAP_FORCE_DETECT" == "true" ]]; then if [[ $count == 0 ]];then /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 5 "SAP NetWeaver AS Instance" print -n ":SAPNW_ASINSTANCE:" print -n "1\n" count=1 fi fi fi else continue fi done rm /var/hacmp/log/sap_mount_output if (( $valid_version == 1 ));then exit -1 fi ##we execute this if condition when none of the SID mount points ## are available if [[ $count == 0 ]];then /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 5 "SAP NetWeaver AS Instance" print -n ":SAPNW_ASINSTANCE:" print -n "0\n" fi ## we execute this if condition when none of the SAP executables are ## found. if [[ $exe_check != 0 ]] then echo "No SAP executables are found " exit -1 fi } #---------------------------------------------------------------------------- # Function: # sapIsSCSInstalled # # Purpose: # Reports to clquerysa (Application Discovery) whether SAP SCS instances # are installed on the local system. # # Output: # SAP Smart Assist:SAPNW:SAP NetWeaver (A)SCS Instance:SAPNW_SCSINSTANCE:[0|1] # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function sapIsSCSInstalled { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset count=0 typeset ret ## this loop searches for SID whose mount directories are available instead ## of exiting if first SID directories are not available for SID in $(grep -w "^LIBPATH" "/usr/sap/sapservices" | awk -F"/" '{ print $4 }' | sort | uniq) ; do SAPMNTDIR=/sapmnt/$SID if grep -qw "$SAPMNTDIR" "/var/hacmp/log/sap_mount_output" ;then setSAPGlobalEnv $SID ret=$? (( $ret != 0 )) && continue checkIsSAPVersionOK ret=$? (( $ret == 1 )) && continue typeset allSCSInstances getAllRunningSCSInstances allSCSInstances if (( ${#allSCSInstances[*]} > 0 )); then if [[ $count == 0 ]];then /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 3 "SAP NetWeaver SCS Instance" print -n ":SAPNW_SCSINSTANCE:" print -n "1\n" count=1 fi else if [[ "$SAP_FORCE_DETECT" == "true" ]]; then if [[ $count == 0 ]];then /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 3 "SAP NetWeaver SCS Instance" print -n ":SAPNW_SCSINSTANCE:" print -n "1\n" count=1 fi fi fi else continue fi done rm /var/hacmp/log/sap_mount_output if (( $valid_version == 1 ));then exit -1 fi ##we execute this if condition when none of the SID mount points ## are available if [[ $count == 0 ]];then /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 3 "SAP NetWeaver SCS Instance" print -n ":SAPNW_SCSINSTANCE:" print -n "0\n" fi ## we execute this if condition when none of the SAP executables are ## found. if [[ $exe_check != 0 ]] then echo "No SAP executables are found " exit -1 fi } #---------------------------------------------------------------------------- # Function: # sapIsERSInstalled # # Purpose: # Reports to clquerysa (Application Discovery) whether SAP ERS instances # are installed on the local system. # # Output: # SAP Smart Assist:SAPNW:SAP NetWeaver ERS Instance:SAPNW_ERSINSTANCE:[0|1] # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function sapIsERSInstalled { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset count=0 typeset ret ## this loop searches for SID whose mount directories are available instead ## of exiting if first SID directories are not available for SID in $(grep -w "^LIBPATH" "/usr/sap/sapservices" | awk -F"/" '{ print $4 }' | sort | uniq) ; do SAPMNTDIR=/sapmnt/$SID if grep -qw "$SAPMNTDIR" "/var/hacmp/log/sap_mount_output" ;then setSAPGlobalEnv $SID ret=$? (( $ret != 0 )) && continue checkIsSAPVersionOK ret=$? (( $ret == 1 )) && continue typeset allERSInstances getAllRunningERSInstances allERSInstances if (( ${#allERSInstances[*]} > 0 )); then if [[ $count == 0 ]];then /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 4 "SAP NetWeaver ERS Instance" print -n ":SAPNW_ERSINSTANCE:" print -n "1\n" count=1 fi else if [[ "$SAP_FORCE_DETECT" == "true" ]]; then if [[ $count == 0 ]];then /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 4 "SAP NetWeaver ERS Instance" print -n ":SAPNW_ERSINSTANCE:" print -n "1\n" count=1 fi fi fi else continue fi done rm /var/hacmp/log/sap_mount_output if (( $valid_version == 1 ));then exit -1 fi ##we execute this if condition when none of the SID mount points ## are available if [[ $count == 0 ]];then /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 4 "SAP NetWeaver ERS Instance" print -n ":SAPNW_ERSINSTANCE:" print -n "0\n" fi ## we execute this if condition when none of the SAP executables are ## found. if [[ $exe_check != 0 ]] then echo "No SAP executables are found " exit -1 fi } #---------------------------------------------------------------------------- # Function: # sapIsDBInstalled # # Purpose: # Reports to clquerysa (Application Discovery) whether DB2 RDBMS instances # are installed on the local system. # # Output: # SAP Smart Assist:SAPNW:SAP Database Instance:SAPNW_DBINSTANCE:[0|1] # # Returns: # 0 on success # 1 on failure # function sapIsDBInstalled { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset db2out /usr/bin/dspmsg -s 21 sapsa.cat 1 "SAP Smart Assist" print -n ":SAPNW:" /usr/bin/dspmsg -s 21 sapsa.cat 6 "SAP Database Instance" print -n ":SAPNW_DBINSTANCE:" db2out=$(/usr/es/sbin/cluster/sa/db2/sbin/cl_db2smquery -S | awk -F":" '{print $NF}') print -n $db2out } #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- typeset TYPE while getopts t:n: option; do case $option in t) TYPE=$OPTARG ;; n) NODE=$OPTARG ;; *) ;; esac done # No type specified, abort immediately [[ -z $TYPE ]] && exit 1 # commenting this call as we learned that more than one AS # be defined for a single SID #check_sapservices mount > /var/hacmp/log/sap_mount_output typeset -A installedMethod installedMethod=( [GFS]="sapIsGFSInstalled" [AS]="sapIsASInstalled" [SCS]="sapIsSCSInstalled" [ERS]="sapIsERSInstalled" [DB]="sapIsDBInstalled" ) if [[ -z ${installedMethod[$TYPE]} ]]; then exit 1 fi ${installedMethod[$TYPE]} exit $? - k86W$oh /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_scsstandbycheckdhhaH @0 |0@0 1L.text@ .data0@0@@@.bss0 0 .loader B(= ,|nx|#x|+xb,0AA 8| S*N!A9<}{x~xH` ,Ab$HA| @__start,M H4N @__threads_init!|AfH| FN!Ab ,Ac| CN!Ab,Atc| CN!Ab,Ac| CN!Ab,Ac| CN!AH8!@}N b,AK A__threads_init@AF2_14@|`8!HA`e8a@8@HՀA8,888aA8H݀A88a`HyA`e8a;8`HA,8aAHA888a8088|9HuA88a`HA`e8a8@H%A,8a@A4HaA`e8a8@HuA88,888aAHA8 8a`HAa``8a`8@`HA,8a@AlHA`e8a8@HA,8`@8!}N aHA8`8!}N \8d8e@HA8`8!}N 8`8!}N \88e@HA8`8!}N \8H8e@HmA8`8!}N b\88c@H=A8`8!}N AmainDA L| N HA L| N LA L| N PA L| N TA L| N XA L| N `A L| N dA L| N 0 0 0 @(#)61 1.16 src/bos/usr/ccs/lib/libc/__threads_init.c, libcthrd, bos61B, b2007_33A0 8/2/07 13:09:21rrrrSAP_RG_SCSNo local node name echo %s | cut -d" " -f3No output from clRGmove No desired output for failover node No desired output from parsing clRGmove result /usr/es/sbin/cluster/utilities/get_local_nodename/usr/es/sbin/cluster/utilities/clRGmove -l online | awk '/%s/ {print}'/usr/es/sbin/cluster/utilities/clRGmove -l nodes_acquire_for_rg_or_set -g '%s' | grep -v "^#" | tail -n 10 0 0@0p0;Qerrno@_iob@exit@ strlen@ fprintf@ snprintf@ strncmp@ fgets@ pclose@ popen@ )@ __crt0v@6@__start0 |! 0@0D0L0 |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 /usr/es/lib:/usr/lib:/lib:/usr/lpp/xlC/liblibc.ashr.o%@VPDcl_scsstandbycheck/5765E6200/520 __mod_init__malloc_user_defined_name kf@C$od /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/sap/sbin/IOscsdd# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/sap/sbin/IO.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2009 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- # Read in the message catalog entries . /usr/es/sbin/cluster/sa/sap/cat/Catalog #---------------------------------------------------------------------------- # Functions: # getLogPath # # user_msg # log_msg # warn_msg # sapsaError # #---------------------------------------------------------------------------- function user_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -i s=$1 typeset -i id=$2 shift shift typeset args=$* typeset c="$s,$id" [[ -z $s || -z $id ]] && { return 1 } /usr/bin/dspmsg -s $s "${SA_Catalog[catalog]}" $id "${SA_Catalog[$c]}" $args echo # Log the information to the sapsa.log log file typeset msg=$(LC_ALL=C /usr/bin/dspmsg -s $s "${SA_Catalog[catalog]}" $id "${SA_Catalog[$c]}" $args) log_msg $msg } function InternalErrorAbort { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset date=$(date +"%m.%d.%y-%H-%M-%S") typeset logfile="/var/hacmp/log/sapsa.fatal.$date" cp -f $SAPSA_LOGFILE $logfile 2>/dev/null user_msg 30 100 $logfile exit 1 } function getLogPath { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset LOGFILE="sapsa.log" typeset LOGPATH=$(/usr/bin/odmget -q "name=sapsa.log" HACMPlogs 2>/dev/null | grep -w value | awk -F'=' '{ print $2 }' | sed -e "s/\"//g") typeset DEFAULTLOGPATH=$(odmget -q "name=sapsa.log" HACMPlogs 2>/dev/null | grep -w value | awk -F'=' '{ print $2 }' | sed -e"s/\"//g") [[ -z $SAPSA_LOGPATH ]] && { [[ -z $DEFAULTLOGPATH ]] && { LOGFILE="/var/hacmp/log/sapsa.log" } || { LOGFILE="$DEFAULTLOGPATH/$LOGFILE" } } || { LOGFILE="$LOGPATH/$LOGFILE" } echo $LOGFILE } function log_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo $DATE INFO: $* >> $SAPSA_LOGFILE } function warn_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo $DATE WARN: $* >> $SAPSA_LOGFILE } function sapsaError { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo $DATE ERROR: $1 >> $SAPSA_LOGFILE } #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- SAPSA_LOGFILE=$(getLogPath) O l\D$od_/םa՝a֝a&82vT./usr/es/sbin/cluster/sa/sap/sbin/SAPUtilitiescdd   -e ainorst#$cflpu"/=AEINPRSdgh&()1:CGLMO[]mvy'.02;>DFT_bkw{},BUVY\x|!+?HXz*34679<@q%8JKW5 7 ʐ&(TPHPD $L  #|e m֜\.b[/\d܋?F$230@7 ^`AA`F A@ <(a1bK=F@ &  r"$u̲!ӋQKe댗{qF}F esP2E8F^: :4qbED Pj7n$尒/bчrrRC$7nVa|Mqhr OQqBQRB $le\XN l21= F @! ܂(X`aK$}FAlEc+0|dU H M$Xz7sdEMa|"3!fKl^9 Osj7nH*($(""Lj(0r x(GP2E8F^: :4qbED A  20 #@@Pv A9A5(N0#P29xA=ʆ%c<0JQmmmmmmmmmȱ͂mmmmmmmmm@rpxXǢ#/8Ȱ"8% MLN08Se㠱ZC',@.)\FRLz@fO WZ,.hJ0Ue),@0x4U(mmmmmmmmmjmmmmmmmmmm7&4?QbXA\Z$Z0TnQ7Hzb1\91h8ńQa4c,@`(<2dA 5Fa1yl`"d ~I "d %_\5b3-&Q3cc2̓aɬ^Ai[3,&@L/=1s\v6[Oo?!L^[\!%,&@Lf)I}_c'# r=h9dϘAFfS|mmmmmmmmmmRMŎo bQpEhhWpD(X@HPDD1xi27Lz+#)L&<"4=12ci@fue)ca5b0_CǏ Ņ̷WA( TWŅ2 PXDL2#W R؆*+XBQ`y2d&ebP,@b%@BK Ņ|LUbbAK(I|( f"4=1؆6[ETł8hh/jq cIV܃h96 "T $ D8|7W WEp +ij3-{b3HEoi{b3P ༻9<˱{b27Mp70K+ij_3-Wb EDɐ"<<˱{b27Mp7KᣆpOccP> /#("XI_1_W h=: iv43 S,3ȾՋ΃/1܃& PXDL2# . B+|SH܃ E&8h((TF<˱ PI!%Ą0hag1 5Fa1yl`  )QA0Ջ ?[ufe+|SKIA5To'2_cbBQYolo܆QAmmmmmmmmmmH&711 %$Em>KEoi{b3 (Q\$PP"b8,0dn,- WFRLz'#0pr2cb<0t=1"{b3,&8h,naD8| "T $ D8 K{PT  t4xIlsAP> /#(*AȺEr{b3S,<b<@8v̓`CU]͕bۜQmmmmmmmmmڣprm>,sCo&$59( eFܢoIАL+iՋ΃0ng=1dd8zFKքeb9hpZ(8LK("+DFjI^ApG#8Q_⢹I8b!!ADqX`X[ 10=1(pr2c|XVyXOň &+ьH1(D*: I$[rOr FJ.&rD"&@L ^F54Q Wel"$/*|7*mmmmmmmmmm7&4=FbbAJֱ$Em>`TnQ7HzFc&g I^ApG#9EG#09!`j؆*+H`ybqhhH`ybq,, fZ@#wppl6ftKl"  Wg%T䅂/j3'@bMVmk`IǭFsEr F`*rBUb<xazDaq"e W`f0aAA.ʂRmmmmmmmmmic11 %SkX l"0Q7(t$=F#13E&g,@+i bؽh >al" P4LXOF1"Gx,@DH-$Io@y=1($( @H@`sSEt# aa{)rEm>IyXOň &+ьH1 DAI$܃"cpP0qyD5_⢽yl"$݋ aa{)r's(@&L,Web#0-_l^zeЎqB=kEm>I&7{@I9Ģ7g @`sSEpapRƊh c@Մ] $㰢Occ U~($$E_ݞ\g^ADZqozUHQ882O2h`ZPL.' ~Za0 $6(cEF{3i=aAi=ZOcb7.Ɔ WDmk`| ̻:2.q W[ѝ͝q3:Oqh=l^vCzmkc3/m.\l#9bDɁ& W~ n4I*BQ.%SkX8( T\X*,0  Ņl+9AU(mmmmmmmmmmQ9697"P, Xa*ZƘqEr'BCod6!BKEm>vCzmkcEǭFw?kQ7 c76A 5Ff)Qz ~30QtmmmmmmmmmmH&7<̞%6[Oi'QŠH  &#2FX_ @+@̞cbNs+{kX"{CAeEm>A 7$Ds ഏsb#I 3<"B2c dyS eЎ+iM:OqYXh)Id]!_Ja13ܛb0Q*ZƘ(02cEN*"ca' 3-Rca&NcGA> P4LXOF1"Gx(D*: I$[rOr Fr ȉ@`sSE*++iMذbۇ)_E[ǜ98 P4LXOF1"G`Z8@Qi"A%I$ g,@ (X7MCU*+eЎ,-ca&NcGA> P4LXOF1"Gx DAI$܃"cpP0qyD5_⢽yl"$݋ aa{)r's(@&L,Web#0-_iG]t#ֿ9V䛰-_icJ= $G9Ģ7g @`sSEpapRƊh c@Մ] $㰢Occ U~($$E_ݞ\g^ADZqozUHQ882O2h`ZPL.' ~Za0 $6(cEF{3i=aAi=ZOcb7.Ɔ WDmk`| ̻:2.q W[ѝ͝q3:Oqh=l^vCzmkc3/m.\l#9bDɁ& W~ n4I*BQ.%SkX8( T\X*,0  Ņl+9J Qmmmmmmmmmڣprm>,sCo癓DDbMVmk`IǭFTj& QP؆ / S"T+ikX.=h3]BQL^[ɹQ7+1Mzfs񙂍;ܣmmmmmmmmmmJA69d(*Xa*ZƘqE(Q\$PP"b8,0dn,- R ->!2׽61iB+|`'4&Y VrHmt@l'9h:p H6/r<]3+p+#)L&:Or FG0]l"$ݾc05I4^L/E[=ɶ*S HkEiq+#)L&IPMŎn#1(0!狮<{($$GMU y92BDp70K* -V t4,sx<̞؇3-d67d"TnA7FAX((@ Z)a+yd3:,TjS{`f`397(mmmmmmmmmmRMŎnh<̉2PQ_⢹I8b!!ADqX`X[ 1089_ E9p)JAcs{2*BP^]Ɲ(ȼ#q -n,-se_ FmmmmmmmmmjɴQ97*5FzNfx9 Kxi$\XXy局z087 HŎnMb fM `"Ab%@BBDr"A5F$d# &yA]e7!JOb FRr'sx&y(÷7AlE7ʍmmmmmmmmm)|X&%fMWpD(X@HPDD1xi27Lz+#)L&:Iǜ0&yp)_Ja1ʈpaYy"&3L.1DKW苘~iwϐ4csMba0A8SIlsXT$gXÌ Ww6TQmmmmmmmmmڣprm>,sCo&%fMȋܚPQ7(t$=F#1עGr &S|ɼ=ɥ ?%,=qcbTnA7܂I"95ʍQqI8ęC$o9794TnVb'sx&y(÷7AlE7ʍmmmmmmmmm)|X&%fMȋܚPŠH  &#2FX_ @e)ZI0ah*WX@%##ZI0(aM, fXŇǁX E9Ww+I]ՋjEq5b7?aM!0Sr8p4pU_ygI]0SU]͕TmmmmmmmmmmF|X懨LD+.FܢoIА$Aayˮ+s-a颷$Mi$\XV/;V/#rIlx!F܃&/-oE,srk`(7&y܇3b8ah:KcjI=F2fv^G -IlzQYohz<oۛ"Fmmmmmmmmmjm>,ss9ˮ+ŠH  &#2FX_ @e)ZI00ZKZI0)g5ba.pAU(mmmmmmmmmmQ9697n/0Q7(t$=F#1עGr\^a 9794e4q3:IQ7 c`pnA$aܚFQ8CoLw!6!mqynyy|+i%+z|j%,=.,i/:,A 5Ff)Qw7g0;stS|mmmmmmmmmmRMŎnbbMQ_⢹I8b!!ADqX`X[ 10I&pr2c&e)*"Xy&%fMȋܚPZI0jjf:YCk4&gZI"96ْ]bx//W̰a-&g|ɼ=ɥD25_9lnqQ VZ9.a/0ro>By >RɊH W&8Z, ˹_96 W~csqy/.NkӚŅ\xr˹K47 Wn/04^aU]͕seJ̻9oy7(*mmmmmmmmmm7&4=F(-(Eo0TnQ7Hz\8-(Eo104dL0b[ eF܃&/-o(=F 3A k{ sS|mmmmmmmmmmRMŎo(-(Eo1*+*"$LG?e ŅS ܃+#)L&;:L.8(܃ÀÀ,pU_0W(`na070K9'#8&D8$Qg$|78(*mmmmmmmmmm7&4=Fy<$҄aj& Q20ff&eGE8F_lV㓃Ai҄ao1sb6d6!;!bGkj`rqI8 J098G98a-79/*1Õ(UEsZ-qyŅq3-WōNU WN08Se㓋dY0z!s\^C' xc.-(K|s\^UC4qv 98BFH\k{|}!,23SkӶwǏz]N䃘qN>Skӽ7`wp!,liR86R an"NEG 3]䊃XqOn"Nw1D$ a B&S5F 8˞gD9'mzvÎXOAwԴP+3)ټs;mzwÎn5erm7`w] X5_&Е^ \8X]H7Fk\Pk;]N18<DcjbawGsK#|קl8%aKE#20|ק{n8CVYW&ٺv a7<)r`B7w'y"rEA8B7w'y;"!MÎae,Mwx?r;\k^6Îc!ʸXpJFawlx8(@P'=/i$V@sM^Q!gL:cG\HYwh5a4"P`,dF9yDutɪq&V!gknj7+ B27U^~@U`fAMUd2iܬVRQvqmaUZsUyY$ <&%`e%^nV@`e::`ޜwC[ 9eWЕwjkڢ^P8G.n~@Y5#w6ٵ0\ݾr*T@ (M"AؙA!)($W$X *dHQBKak|l;Ny.L;Vs ruUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSaw7A@Vmz(g42%"@DM8ɡekj9A炙#N16ekjܘjAPږ@Y5#w6ٷ3ՖUɶnrj9MS{Mv7,\sUVػUƋUC'FFblgGvZf.WH3hƄ "VMHͪ6mj*7A9L~{VY3{M?=7lڪs?ܮ"?œ6`n9KUA c?s^/, UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU0ӛ[(]" gw1D$ØvUx X-~KF.$WU֯8rZq'1jJexnaߺz<>J`ô"esvÿ]N[ksBL9ek<tӹI~ \UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUT]~F.QZ;"lƞ&D8$R(Hxxi47\Y1W>7%՜1W>Ww'i9a炙1W=1D$<3_򸋹;h_3?gxPqrvq]Up g`fxA' ?˚Ww'y"txAQ{Q/+Fg8(.',$@9$P*($ b `8'^MZM&A@"XBѸ;h $K|'E,3WY6fS`*Wj sof$WU֮qAQv+xۦjYxGsLqJr^7>Ww'i9fXܗVc MSfcFw>w Nf6|"Nr.Q\,-lz1jsq0>Ww'i9f3 $I +&g$LSդBm4#23.$WU֨/n|"NrqPS,H@8P)ˠ&P8**fr!O*X2sˠ&P8@=1D%axM﹌B!!qrvN1Kk?*gb?xL HH@(8Tn**+)r4T $@T &2QqP@=1D%axM﹌B!!qrvN1Kk?*c?T٘QNWw'i9l\Eܝ尋?ɑ.,=1D$ N6""TA%`d܌K([8(\MƉ>խ9ڝ0oN wS4olf֛g4m`1q!3)ٱF0+]VZH"򸋹;I3q{U#( B3gUx*1zst|קhNqpa6 cO"XQ)$Lj*7A9AeשxA!)($ToF1vR7sjCY1W> r ::Bx^S^nUurjCfn}?3ՖUɶnrj9MS{M2E ".W jFmQhk?2nǞ9yDutɪqܫՂ@f5,lՖr^刢PH)($ToF1vR7sjCY1W> x/(95W#trPٛO ƵermڲSkv=%"2%ڪ "VMHͪ6m gV\(mAhx`!s&rrCV 3s֬Mt{VYmznLJ.W jFmQhk?2k[Է&Gi|6L1nCbGi|6.d5PػxejPػ c?cCj D** j(mAh4BdFØ3ࡵg⢠fqPS|6LǏƓ(L,/ƞ,7I&Dn** j5-kRޘvS )]ȖԵ[3Xp8{?/(95W#tr2oRޘS]@\`?M3e7}-,A,\sU_j()> PZ&F i2ȍiq"7s5ogvtP+c=0Tgjh@t"[RַoLd kFRÁŃKkLd/h󆥫sfRַoLgqJl::Bx^S^nUurjʖKzc=Lt Iyr%I\)|L q ;ؙ1AN(/ lLQ^fr 9UyN9yWM!ɫ*Z-0:%,]$ȖI(/累bfgxp8~Ɠ(LTTս`GE3):SqFvt Iyr%-kzA?Y 3Wk[Է3`k=SjoKZޥ1C?/(95W#tr2oRޘS]@\`?RW fckt1/iœmrN&nlqPS ;~|7$x?ᡠɚ1ڪOnO*X2F⢸X^g^Qr!g \"Q㗔G\HYwh5as&IDlQHfW 0?5RglfܳfIR(  G/(95W#jä,MT5iI\ rYV`fxA' ? $I +&g"XB `դBm5 )^%Zpy^68q] ^%:f$W 93[S1k6nR^7<4KL?k63rnYs̤)rs.$D$^H0ЌVF.QZ;"r,&H.,gA8㰃^y61AWw'{hUM3MyȖG$ F͹qgaNI9 ^<~ CA5og1^Qr!gZʹ6zNPyYg)oiH%&@DĄAK"7U^JɩF͸SOpI9^^Qr!g0Hn >y0TrI((zbr0<45lgﱄ{M܇ixNIP*rNBPka&j}%$䓖-3P i$F4𛖒MQA@PT5ڲa)'$ixMI&$T*96&Gi{a)'$w!(c I9$el H]c ::Bx^S^nUurj3$ r#9`w07֋<* rgSpDhp mzvyࠨ56&Gi|6)iﱄk?Ù!s&rrCT٘࣌ Axi[>$e'$ r4F$Qh1^Qr!gkVYW&ٺI<J  E znǀD4@Dޟь]xA%dԍڣfTU5ogb%D @䈓@ D9$P6q^ƱeY[5|16gjigjܱNL0UůV0C7`ehH $\ $Q$L=!""V 3s ƙXy刢PH)($WkviuX%"ybEvM7cÐ.AĄȖ"L PL`,oO.W Axag2<15`7>iuX%"ybEFrׄ "T`Mi7sT!;Ih*GlFp`1ӴLd}f80Cy:vUɌ`c?7i-\|#x0Sg1j nmQnzJ rE H;Eh""M!^WA8ٸ A6o*T@ (M"AP(׋3?@ Z%Ȉ@Dդ3)ټr 9UyN:M&:BxI)&mzwY8x=?E,4(DoEyt$Ex"ĐHTFE Nrc,cgaO?ᡠf;-iex3Weq6?tab8À;b?Ĥc(t 9ek8>w)0X>5ʯaUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULc .?7`e AO ALidK"E!䉇ǏƚqCqQ\,/Ϡ5$%c,rIJǂ6vI^9O@QD.H4 ƞT"eƞ]$2FO$X *i,&H.,ƞ&P@HDA <8XSkӶòhJl;` rNqAxyumi<ΊtMN ;{)9Uxٸ UjܠSm;SW\vFnw.f0jػjbU{!0\ݾra;-s^/-~ %ӹI~ aUxc .?7`e 'mzw42%"@DM8ɡ$xx%묣gd)\,X*T@ (M"Aq,H@#q@ "Lq.$D7z$K E"dKE #q"ybEFOXê`ޜwp mh>90^+BV aߖpfj*7A=ӄdYe\f?^ krN1I~b07Ӄ8lwR1"#6Yl9Y3MV'erm()ՖǏƦdH\EY3V^aMQyZ;ڲʹ6~{V[㔱q]Up g`fxA' ?ו#r3&{VY;ک@Z?¬RYbgs \SuՖrH30^393NUN6f>F`k935beKZޥ1@e $ ԕ™ gmSYLӕQ1 ti66~49U⢬{?/(95W#tr2oRޘgLUIH@p0?a7zfYaMQyZ;rN3.|LX箪 303<` axM⑹pNse;ک@Z?¬R3쵛5{VYW&ٺ@7ӹf!f-ϔrkV[e?368hn)0+=,I󸽪a*_XcuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUS9ګl&vØvUx X-~&\g|^ՖUɶnzKON\pz,;v46-Nw0+@`(7Uɶnm7l9ek<W)~ w[.\c .?jQXMg42%"@DM8ɡrYgݏ<rjPx%6nmt(&!Q\TW l^WpP'=,_gnk%V0ꪪzst aߋW(8)bØvUx X-~E^7NZp|.f=w ^]hb2^6RUMiʹ6\.WJr0+@`(7f.6hb3 [0 ņxً;BW{)zs\׋ a߂x?rUl9zstW(8)b()yt$Ep@ "LqO.D@9 @x$hEܝZՓ?.$Dxp8~**ɚ4BdFab(@8D%iz(Dv( ]e P>,T dek䵦]Ќ7j9FX().#a} cȾKR])1ESBW{ԆON\EUɶw,1*)z3p4zv:~yRĉ#?<Ie⢬{?ګlJrʖ$LqIeØ:P,\EP.HzDGd[U$U䉇LqGMY)'$QRNI5eV 3s״ݏ$M E"bB %1v<'$ DhތmYe\f=') "VMHͪ6m c?AN>|RNI5e*+6H rHU$PIX7#9ŊpN/&&lOh=M Gs6;rNqjp3WxEU2oE$MN'<Ήz<#P@EY|/jcEhFl¬gR&P8# 3s'.YjI9$ՖrY[?*W,bສ<<ϙ N \ {b#/p\5AR嘌 A `&6f1i"I  ] U @DnP^)cy"h@#p@_FA DDyቫ o.iuK*f0]`3qPSR&P88?;N -1l隸3\Yl]r2 /`k3]0?$@9$P*($ b `8'VA x'Y[ ÞtH#^AxrӃ88?UyN"ªezpy^7]|קrדgDc= IҞb@ ">wR1"#6Øc+\}; +HrNI> \wKH"2Qg$P-၁!焀 H>@.^c7&7<)r@xT8dw>SkӹfהTgK0jz$MN7qjsr%$ɟ%$x DDk?B;~yT $@T &2QjA$$\B.rIR)xP)H rHU$PIX7#9ŊpN7&&lWD;)dwHsc{=8<ÌS -RW$M-vV;S8@Elfܳf/UҞmyO6٦k/Uҟ$MNn{&t "$^H0ЌVqsNaʫ\m/8F7%,8;|w>SkӾ2%1*n 8δ\m/dYqیniwlFwKctoZmzv()Yr͛e'K$T+rIR(  ⢠ɚc+\|Xy57,ٹR| EB+NgN t g͌ܛl)> \" ɹf2PBYr͛e'K >vmfs?aldV\C7`d6;7`d6;(DTxpQQ@x=AQMGE"I^g$4qP*I>Skӱ"YQMGEK"I^`k@<&n 8'mzv#s5."*EA[`kaa3pQI>Skӱ((yp,P, t3@ kK>$od?/םa՝a֝a&?2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_modifysapattributesedd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2013 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_modifysapattributes.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_modifysapattributes ## ## PURPOSE: ## Modifies the existing HACMP configurations for different SAP instances attributes ## types such as sap instance profile, instances executables directory, wait for start timeout, delay ## wait for stop timeout, delay, ENS monitor retries, monitor time out ## ## ARGUMENTS: ## ## Modifying SAP Global Attribute passed along with the instance attributes ## :== -t AS/SCS/ERS ## -N ## -E ## -I ## -S ## -u ## -l ## ## Modifying Application Server Instance ## :== -t AS ## -s SAP System ID ## -i ## -a ## -p ## -e ## -o ## -d ## -O ## -D ## -y ## -L ## -x ## -f ## -g ## -n ## -M ## -G ## ## Modifying SCS Instance ## :== -t SCS ## -s SAP System ID ## -i ## -a ## -p ## -e ## -o ## -d ## -O ## -D ## -y ## -r ## -L ## -x ## -f ## -g ## -n ## -M ## -G ## ## Modifying ERS Instance ## :== -t ERS ## -s SAP System ID ## -i ## -a ## -p ## -e ## -o ## -d ## -O ## -D ## -y ## -L ## -x ## -f ## -g ## -n ## -M ## -G ## ## RETURNS ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include version='1.8 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/sap/sbin/cl_modifysapattributes.sh 1$' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities typeset TYPE typeset SMARTASSIST_ID="SAPNW" typeset APPLICATION_ID # Application ID for App Discovery typeset SAP_GLOBALS="SAP_GLOBALS" typeset SAPSID typeset INSTANCE typeset INSTANCE_NO typeset PROFILE typeset EXECUTABLE typeset START_TIMEOUT typeset START_DELAY typeset STOP_TIMEOUT typeset STOP_DELAY typeset ENS_SYNC typeset IS_ERS_ENABLED typeset NOTIFICATION_LEVEL typeset SA_SAP_XPLATFORM_LOGGING typeset EC_START_FAILED typeset EC_START_SERVICE_FAILED typeset EC_START_NFS_FAILED typeset EC_MONITOR_SAPSTARTSRV_UNAVAILABLE typeset EC_MONITOR_FAILOVER_ON_GW_OUTAGE # SAP Globals typeset IS_NFS typeset EXPORTS typeset NFS_IP typeset NOTIFY typeset SAPADMUSER typeset LOGGER_LOGFILE typeset OSCON_ONOFF_CS typeset OSCON_ONOFF_ERS typeset OSCON_ONOFF_APP #---------------------------------------------------------------------------- # Function: # checkMinMax # # Purpose: # Used to check the allowed range of the variable. # # Arguments: # Minimum, Maximum and variables that needs to be verified. # # Returns: # 0 For success # 1 For failure #---------------------------------------------------------------------------- function checkMinMax { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -i MIN=$1 shift typeset -i MAX=$1 shift for i in $@ ; do eval "value=\${$i}" if [[ -n "$value" ]]; then if [[ $value < $MIN || $value > $MAX ]] then KLIB_SAP_SA_logmsg ERROR 120 19 sapsa.cat "ERROR: The value entered for %s is not valid" $i InternalErrorAbort fi fi done } #---------------------------------------------------------------------------- # Function: # checkFilePermissions # # Purpose: # Validates the file/directory permissions. # # Arguments: # None # # Returns: # 0 For success # 1 For failure #---------------------------------------------------------------------------- function checkFilePermissions { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x if [[ -n $NOTIFY && ! -x $NOTIFY ]]; then KLIB_SAP_SA_logmsg ERROR 40 13 sapsa.cat "ERROR: Specified Notification Script does not have executable permissions." InternalErrorAbort fi if [[ -n $PROFILE && ! -s $PROFILE ]]; then KLIB_SAP_SA_logmsg ERROR 40 14 sapsa.cat "ERROR: Specified SAP Profile is empty." InternalErrorAbort fi if [[ -n $EXECUTABLE && -d $EXECUTABLE ]]; then if [[ ! -f "$EXECUTABLE/sapstartsrv" ]]; then KLIB_SAP_SA_logmsg ERROR 40 15 sapsa.cat "ERROR: Specified Executable directory does not have SAP executables in it." InternalErrorAbort fi elif [[ -n $EXECUTABLE ]]; then KLIB_SAP_SA_logmsg ERROR 40 16 sapsa.cat "ERROR: Specified SAP Executables path is not a directory." InternalErrorAbort fi if [[ -n $LOGGER_LOGFILE && ! -w $LOGGER_LOGFILE ]]; then KLIB_SAP_SA_logmsg ERROR 40 17 sapsa.cat "ERROR: Unable to write to specified SAP Logger log file." InternalErrorAbort fi return 0 } #---------------------------------------------------------------------------- # Function: # changeODMAttributes # # Purpose: # To Modify HACMPsa_metadata variable values of a SAP and SAP globals. # Modify the attributes values if there is any change. # # Arguments: # Application_id and Attribute names are passed as arguments. # # Returns: # 0 For success # 1 For failure #---------------------------------------------------------------------------- function changeODMValue { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 shift typeset value for name in $@ ; do eval "value=\${$name}" [[ -n "$value" ]] && { print "HACMPsa_metadata: value = $value " | odmchange -o HACMPsa_metadata -q "application_id=$appid and name=$name" } done return 0 } #---------------------------------------------------------------------------- # Function: # modifySAPASAttributes # # Purpose: # To Modify HACMP SAP instance attributes. # Validate and change the odm values of particular SAP attribute # and SAP Globals # Ex: profile, Executables directory, start timeout, delay # stop timeout, delay, ENS Sync time and monitor time out # # Arguments: # None. # # Returns: # 0 For success # 1 For failure #---------------------------------------------------------------------------- function modifySAPASAttributes { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x checkMinMax "0" "1" "IS_ERS_ENABLED" "EC_START_FAILED" "EC_START_SERVICE_FAILED" "EC_START_NFS_FAILED" \ "EC_MONITOR_SAPSTARTSRV_UNAVAILABLE" "EC_MONITOR_FAILOVER_ON_GW_OUTAGE" "IS_NFS" "OSCON_ONOFF_APP" \ "OSCON_ONOFF_ERS" "OSCON_ONOFF_CS" checkMinMax "0" "99" "START_TIMEOUT" "START_DELAY" "STOP_TIMEOUT" "STOP_DELAY" checkMinMax "0" "20" "ENS_SYNC" checkMinMax "0" "8" "NOTIFICATION_LEVEL" checkMinMax "0" "3" "SA_SAP_XPLATFORM_LOGGING" checkFilePermissions changeODMValue $SAP_GLOBALS "IS_NFS" "EXPORTS" "NFS_IP" "NOTIFY" "SAPADMUSER" "LOGGER_LOGFILE" "OSCON_ONOFF_APP" "OSCON_ONOFF_ERS" "OSCON_ONOFF_CS" changeODMValue $APPLICATION_ID "PROFILE" "EXECUTABLE" "START_TIMEOUT" "START_DELAY" "STOP_TIMEOUT" "STOP_DELAY" "ENS_SYNC" "MONITOR" \ "IS_ERS_ENABLED" "NOTIFICATION_LEVEL" "SA_SAP_XPLATFORM_LOGGING" "EC_START_FAILED" "EC_START_SERVICE_FAILED" "EC_START_NFS_FAILED" \ "EC_MONITOR_SAPSTARTSRV_UNAVAILABLE" "EC_MONITOR_FAILOVER_ON_GW_OUTAGE" return 0 } #---------------------------------------------------------------------------- # Function: # modifySAPERSAttributes # # Purpose: # To Modify HACMP SAP instance attributes. # Validate and change the odm values of particular SAP attribute # and SAP Globals # Ex: profile, Executables directory, start timeout, delay # stop timeout, delay, ENS Sync time and monitor time out # # Arguments: # None. # # Returns: # 0 For success # 1 For failure #---------------------------------------------------------------------------- function modifySAPERSAttributes { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x checkMinMax "0" "1" "EC_START_FAILED" "EC_START_SERVICE_FAILED" "EC_START_NFS_FAILED" \ "EC_MONITOR_SAPSTARTSRV_UNAVAILABLE" "EC_MONITOR_FAILOVER_ON_GW_OUTAGE" "IS_NFS" "OSCON_ONOFF_APP" \ "OSCON_ONOFF_ERS" "OSCON_ONOFF_CS" checkMinMax "0" "99" "START_TIMEOUT" "START_DELAY" "STOP_TIMEOUT" "STOP_DELAY" checkMinMax "0" "20" "ENS_SYNC" checkMinMax "0" "8" "NOTIFICATION_LEVEL" checkMinMax "0" "3" "SA_SAP_XPLATFORM_LOGGING" checkFilePermissions changeODMValue $SAP_GLOBALS "IS_NFS" "EXPORTS" "NFS_IP" "NOTIFY" "SAPADMUSER" "LOGGER_LOGFILE" "OSCON_ONOFF_APP" "OSCON_ONOFF_ERS" "OSCON_ONOFF_CS" changeODMValue $APPLICATION_ID "PROFILE" "EXECUTABLE" "START_TIMEOUT" "START_DELAY" "STOP_TIMEOUT" "STOP_DELAY" "ENS_SYNC" \ "NOTIFICATION_LEVEL" "SA_SAP_XPLATFORM_LOGGING" "EC_START_FAILED" "EC_START_SERVICE_FAILED" "EC_START_NFS_FAILED" "EC_MONITOR_SAPSTARTSRV_UNAVAILABLE" \ "EC_MONITOR_FAILOVER_ON_GW_OUTAGE" return 0 } #---------------------------------------------------------------------------- # Function: # modifySAPSCSAttributes # # Purpose: # To Modify HACMP SAP instance attributes. # Validate and change the odm values of particular SAP attribute # and SAP Globals # Ex: profile, Executables directory, start timeout, delay # stop timeout, delay, ENS Sync time and monitor time out # # Arguments: # None. # # Returns: # 0 For success # 1 For failure #---------------------------------------------------------------------------- function modifySAPSCSAttributes { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x checkMinMax "0" "1" "IS_ERS_ENABLED" "EC_START_FAILED" "EC_START_SERVICE_FAILED" "EC_START_NFS_FAILED" \ "EC_MONITOR_SAPSTARTSRV_UNAVAILABLE" "EC_MONITOR_FAILOVER_ON_GW_OUTAGE" "IS_NFS" "OSCON_ONOFF_APP" \ "OSCON_ONOFF_ERS" "OSCON_ONOFF_CS" checkMinMax "0" "99" "START_TIMEOUT" "START_DELAY" "STOP_TIMEOUT" "STOP_DELAY" checkMinMax "0" "20" "ENS_SYNC" checkMinMax "0" "8" "NOTIFICATION_LEVEL" checkMinMax "0" "3" "SA_SAP_XPLATFORM_LOGGING" checkFilePermissions changeODMValue $SAP_GLOBALS "IS_NFS" "EXPORTS" "NFS_IP" "NOTIFY" "SAPADMUSER" "LOGGER_LOGFILE" "OSCON_ONOFF_APP" "OSCON_ONOFF_ERS" "OSCON_ONOFF_CS" changeODMValue $APPLICATION_ID "PROFILE" "EXECUTABLE" "START_TIMEOUT" "START_DELAY" "STOP_TIMEOUT" "STOP_DELAY" "ENS_SYNC" \ "IS_ERS_ENABLED" "NOTIFICATION_LEVEL" "SA_SAP_XPLATFORM_LOGGING" "EC_START_FAILED" "EC_START_SERVICE_FAILED" "EC_START_NFS_FAILED" \ "EC_MONITOR_SAPSTARTSRV_UNAVAILABLE" "EC_MONITOR_FAILOVER_ON_GW_OUTAGE" return 0 } #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- ALLARGS=$* while getopts t:s:i:a:p:e:o:d:O:D:y:m:N:E:I:S:r:x:f:g:n:M:G:u:l:L:X:Y:Z: option do case $option in t) # Type of instance TYPE=$OPTARG ;; s) # SAPSYSTEMNAME SAPSID=$OPTARG SAP_GLOBALS=$(echo $SAP_GLOBALS"_"$SAPSID) ;; i) # SAP Instance Name INSTANCE=$OPTARG # We need to grep Instance No from Instance name if [[ ! -z $INSTANCE ]]; then INSTANCE_NO=${INSTANCE##${INSTANCE%%??}} fi ;; a) # Application ID APPLICATION_ID=$OPTARG APPLICATION_ID=${APPLICATION_ID// /} ;; p) # SAP INSTANCE PROFILE DIRECTORY PROFILE=$OPTARG PROFILE=${PROFILE// /} ;; e) # SAP INSTANCE EXECUTABLE DIRECTORY EXECUTABLE=$OPTARG EXECUTABLE=${EXECUTABLE// /} ;; o) #SAP CONTROL WAIT FOR START TIMEOUT START_TIMEOUT=$OPTARG ;; d) #SAP CONTROL WAIT FOR START DELAY START_DELAY=$OPTARG ;; O) #SAP CONTROL WAIT FOR STOP TIMEOUT STOP_TIMEOUT=$OPTARG ;; D) #SAP CONTROL WAIT FOR STOP DELAY STOP_DELAY=$OPTARG ;; y) # ENS SYNC RETRIES ENS_SYNC=$OPTARG ;; N) # IS NFS IS_NFS=$OPTARG ;; E) # SAPMNT EXPORT DIRECTORY EXPORTS=$OPTARG ;; I) # NFS IP NFS_IP=$OPTARG ;; S) # NOTIFICATION SCRIPT NOTIFY=$OPTARG ;; r) # IS ERS ENABLED IS_ERS_ENABLED=$OPTARG ;; x) # SAP SA XPLATFORM LOGGING SA_SAP_XPLATFORM_LOGGING=$OPTARG ;; f) # EXIT CODE START FAILED EC_START_FAILED=$OPTARG ;; g) # EXIT CODE START SERVICE FAILED EC_START_SERVICE_FAILED=$OPTARG ;; n) # EXIT CODE START NFS FAILED EC_START_NFS_FAILED=$OPTARG ;; M) # EXIT CODE MONITOR UNAVAILABLE EC_MONITOR_SAPSTARTSRV_UNAVAILABLE=$OPTARG ;; G) # EXIT CODE MONITOR GW OUTAGE EC_MONITOR_FAILOVER_ON_GW_OUTAGE=$OPTARG ;; u) # SAP ADMIN USER SAPADMUSER=$OPTARG ;; l) # LOGGER LOGFILE LOGGER_LOGFILE=$OPTARG ;; L) # NOTIFICATION LEVEL NOTIFICATION_LEVEL=$OPTARG ;; X) # OSCON_ONOFF_CS OSCON_ONOFF_CS=$OPTARG ;; Y) # OSCON_ONOFF_ERS OSCON_ONOFF_ERS=$OPTARG ;; Z) # OSCON_ONOFF_APP OSCON_ONOFF_APP=$OPTARG ;; *) ;; esac done # No type specified, abort immediately [[ -z $TYPE ]] && exit 1 typeset -A modifyAttributesMethod modifyAttributesMethod=( [AS]="modifySAPASAttributes" [SCS]="modifySAPSCSAttributes" [ERS]="modifySAPERSAttributes" ) if [[ -z ${modifyAttributesMethod[$TYPE]} ]]; then exit 1 fi ${modifyAttributesMethod[$TYPE]} exit $? O lO$o@4/םa՝a֝a&V2vT./usr/es/sbin/cluster/sa/sap/sbin/sap_xutilspat@@    -t "aeinprs#/S_clou$:AENPRTdghmv',.019=CDGILO\bfkwxy()*2BFMVWY[]{}%+3K|&4578;>HU^jq6E;a-D1 yn|7HۋzEK"MEE$LIDwP DQaQa4AD X_= چoI;t&ۋ񒉨`3Y޳2MPI-tVr>c&>m>m|b38p`wU:q|tRJEұAP w쫧rzV1=Pg5;(*(&KbJ 5#/(`gdSO*nyWM615 P4^O*ܞU TV)&Ԇ|MI'rtOJ_#)U7b*Bԯ}@EID3Y޳@P1EE$LID \1&Z鞬|MYۤ||06m2fB )Ze!x-h!4< qqqqqqqqqqqqqqqqq,坂ՂV CMP6J,坉:iIc/ ˨-6uba;ve̚hmjHkw8f_<*+zY;#$*iйvlRY88888888888888888㖱`HivJ@B`$BP"j53bDIaxxx6$ؒfm!O1_@!x4PP&&@Ca2"qkEHE0jf2Hm I$CsM0ldža58888888888888888Y;@b :hD0r((& Ag,IJOHNmY$`{"2>mY$lg#؟rl&pTAg96a0YUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTCMR3E% @A0ZIk "SP""Kp1&ē7si -| `<ُ Z6* @"bbوl2YB8\}/r!>i(m˸9a7mMVr=>c&>m>m|I4_ `騬t~& CGga=$՝G>mE/sj)Q[A{|MYۤ||0h'IQY$L:mgn5q0ii!mr"t'"6`"J+ D$K@D@Iȉ e!6j 53fȩ+ ϛbjx "[=ÑRV |M6,D=ÑRV 6,DzlO6r*J ՜b}ɰٗPNi~mgn5v 42yw9Cn7Hr/3-lȩ+DQXZ%%]Elf;;qM1 MƠN!A6/lcr&ژBl_o.o(؀32QMֿv.:oI*( (D f՜b|Fޓ 65- qx°/V6e`(+oNab-!j+B̽7rsK_]EQX^$7ȩ+>mY|!e_o" 9%gͱ5 mY|pT6,Vr>m&`EIYGͱ>M  =@v.6e`(+oNab-!j,ZmZb"2f`j/M 7v.QM 5He   EIZ)wB+2/ÑRVo0{";`[٨1`6 ;Nn_";`5/ ``p:e_g:<ҊM"_ٗAVo0yl `5Kr ;Nn_b f bnB`p:eAÑRVo9#*lȩ+E7_Vo9#*liEah_/I>%"X9kgmm1*,PRAa73&ч&_mMW3&?I0$b;FNx?;3c088ҩܕa .N,a'bdZ3Ѷ(HaBH-"S@vvY6wH_h+Fc(TX"%X0a&l@Mۍdi]6cDSfytS|Sfܟ rUrU73eW3c6MCm KdZ.tm2E*X"S#oR6wD $dDh/gmm1*,PRl"P‚&DI"S#oR6s63_1M9mM1E7ٱl0͗%\͗%\]jss6\s63d1&XphXppkdZ.tm2E*Xp#@LM5 zn,7MB-H@ 'ѝVPBEK,& A`q4I fPa෦ۍbp| d.lf.iDSflfbeE'r| 3`S䫙-Nnf˒flc6$  2|-@6B ,_FYNPۥP #Q@0GdZ3Ѷ(H`~ͅDLXH YNPۥPc1u}iCn&ڛ6(m҂4M4S|Ew'6\s6\s1u䫙䫙&͡6ÃBÃA,_hѶ(H`zHv(ShÓ e #/gmm1*,PR$T("HP6 zN brl]ft'>( &63c1uw'6\s6\s1uerU͓lfěaaaKdZ.tm2E*Xp#@d5D4NJ+ba5>m2E*XYD! h6 eq|jv'%63_d0͌͌dOl*l*b`S䫙&͡6ÃBÀ(b E.PBEKֿ`jg>NJԓ>EI^& @$$=ÑRV 6,D{"2=Y'ܛ WdZ3Ѷ(H`~ ̀,, (,T6ޛ;;q$9+ROtS$9%x-`;63_r*J."m`EIZ)v͌]L;a.J.J2l*lfɶ3hbMа >]iQboM|'}V@&g%98l&g%՜b}ɰ=ÑRV |M+2|-ehLe $T?`fZD,f[tgn53ğ'%jIjdh`c1uy]DSfVoc63_(͓>䫙䫙-Nnf˒flI5gn&SbM b E.PBEKֿ_2_=% l oMc&>m>m|I4S|m;lt"B qi_7c.y:=f3՜tϘzI;tu|ڋ; _/N'vpVr=>c&=֑j/0qk "SP""Kp1&ē7si U6yֳg,o((L X1K9gbNR|m@*)J*K."P9( @b$5 ZY$aSṄ6ZJt- `wMg,En*2|.zo t$ivoziR(TXRcR[A̻R6 PnI9g4X35"S#oRKI6w4(& YbmHdi"QDI!ܚ#-,FYNPۥP"ۤe AHA ɺԐMCh:FޓBFTt 8TMSN䢱l[3f+;m6nʺj+$EcC+:CMR3E% "4 &"K /(TPQMCc,T,?ě{Lͤ2PI1f<5I IQa11Bbl6y,!.n_1'% \d]+{_91Vv66>/ItVI:Oc&=֑j/0qk9yC0˸!7%hӔ6pP_ѧ(mF r1zCIv < z|I5gn}=$Utx(]ܰxaAa@uvC0˸!7%4wܳdM0PMc՜tϘzI;tVޛ&n;B + k_d3̻|RX4Mg/f܌^o9#*b$Ep/aB ‚€9Gga=$՝G8&sFf['Dى^ѱ(\aK ^  + f܌^o 0.b| ï.;TM6rmI # !bbHʘ\ XPz|I5gn}=$ӜA! 65,(V LJ°/aB ‚€$4.b􆕊o A6܌^ұM,&;!ue^֛xʒāYQ5ˌH0PV)v < z|I5gn}=$әG/(,(ˌH0PV)v <$\bF܌^ұM,&kꪪ_e82R.ʒԌ/reUUUUUUUUUUUUUUUUUUUUTtdZ3Ѷ(H`yv Ng0hÓyv/a|$s?cMRl1#' qmMdU|]iTrnJٰa'˓Z8D=ā$e>m2E*XP _h+Fc(TX"%@"L؁ bL]6cDSflfbeM'r| 3`S䫙-Nnf˒flc6$  @/]Le $T=kF7ztX'mNɴӿā@4(j FvZ6B , f( @b$%21oI!tHNi3c1u{;lr&ڛ63c63_);aZ͗%\]jss6\s63d1&XphXph{dZ.tm2E*X7zɴӿ D%$ $  CB+2|-ehLe $T?`̈́J&DI)&ԆM͌`NDSflfbe5'r| 3eW3eW3_Z͗%\͌6m I>]iQbI!ܚTt'ѝVPBEK6l(TQbDiɨ]]]iQb4itjtTt86h$B?'ѝVPBEKFl,D $, $UbDFK&wMNPۤ̓NPۤ.b|Ew'6\s6\s1u䫙䫙&͡6ÃBÃ,_hѶ(H`zp#&RCY6w+ FvZ6B ,,L`pP)dAmI di]|cjHi(] +;flf.l0͗%\͗%\]Z͗%\͌6m IX]Le $T=k_4#oIءLUO* FZU>m2E*XbEI f#oIءLUMzNEDSflfbe 3dOljss6\s1uerU͓lfěaaaKdZ.tm2E*Xp#Ec? ضfWdZ3Ѷ(H`~ ͈%I Dٰjv'%ٱ>f['DلM6ll0PMlfbeYw'6\s6\s1uerU͓lfěaaaHb E.PBEKֳ&pSf쫦I؜V??"'ѝVPBEK`ADP$Q6lm6nʺj+$Eb͌lflf.Tw'6\s6 92l*lfɶ3hbMа>]iQbezJ4ޚx÷9%mSIH ²wf]'/dZ3ѶAbb -Gga=$՝Gͧͱ>c&KbNPؿ't m1AK_hѶ(HaBH/ @)`e%8obI*| `<ُ _ gUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU,坂ՂV CMHN4P"P9P&b$I,坉:iIs˷v$*K."P9P&b$Ii(j*Aе2H¦ % EH:_ k9gj+qVzo I pxʒ4Y:kV [Ԇb :hD0r((MIK "SP""Kp1&ē7si -| `<ُ _ <H(YH f !fsu8v.ICQyqbغn t<ů I(mC|'mN9i% l +qVGga=$՝Gͧͱ>c&oͱ|'mNW"B({|MYۤ||0hv$z(t+@Al*xX˅`^bNFg#30j#i6NӷI`\՜tϘzI;tu|ڋ; _ "SP""Kp1&ē7si U6yֳg,o((L( @b$rĝ4ԁ U2R.Tf]D0r((MIPTk9gddM:2i(j*Aз |'mN 5d8w3JEҷ~cTYڊUm駌;IH[_ QbKieInjFu{2HԂeAf]',"S@b@PKDp#@M"'mNLi"5g21oI!i@DKD(@Њe$MMBYFK&wO`x<?7Xڒɴӿp#A6Z0n g0ji؜V3P6`"&pSf쫦I؜V?<"kV [Ԇe$fJ",D,$Q@R(E5 R"$<<c&;lt5N(Blf;;qI `B2ytitM6Bf['Dمqb"d" "&P"ۤePm2$"/z|I5gnilOzIN'MEd X1H" $ Q,y°/1'G{YFz|I5gnQ|'aznh3N'#60iq6CitFޓ|yl]fuimLASlf;;qb|'mNDS`;lq '#6<$N!A6/0i"m0xIi(&Hm鞒fC. XP:r;!ue^֛xʒI;BY2yu(] &؀1Gga=$՝GoML7x Uw`_r…ֿ9:2/HkMeI`5͘F r1zCIv < 䌩 + 91VvG)l]f'{Fưepa.2|,g`1x0,xpL+/(,(͘F r1zCIv <$l0PM,&;!ue^֛xʒɺԐ_u!`w#4S|@xg#30j#շ{zI8 CclkXQ(%> `_r…cjHi(] +;mI # !b`8XMk9~vC0˸!7%k9~\bF܌^ұMc՜tϘzI;tVޛ&J8ܰxaAa@uqF r1zCJ7H0PV)vֵuUUUUUUUUUUUUUUUUUUUUU/Sh)J{ieInjFq2ꪪ_gmm1*,PRAa73&ч&_mMW3&?I0$b;FNx?;3c088ҩܕa .N,a&%4$ ,DMO;liQb$>m2E*X9"Q"($͈)@ f($͌ͱƑ6ٱeM'r| 3`S䫙 9.Jml,84,8 X't m1*,PRh)"PCIim44P@gmm1*,PRl"(MIf@(Bv$46p`vlf.= 9mMSٲw'6 9.J`S䫙&͡6ÃBÃ3dZ.tm2E*X8SzM M;J"X$P@WdZ3Ѷ(H`~%(L06SzM M9lcr&ڛ63c63_즳dOl*l*b-Nnf˒flc6$  b E.PBEK86C5 * FZ _h+Fc(TX"6*(1a"LRO4.lf.>2yumMTYw'6 9.J`S䫙&͡6ÃBÁ!_hѶ(H`z_2r,?!#-N* FZ /gmm1*,PR  ID&l,ѧ(mɨ]fbNPۤ̓NPۤ.b|efܟ rUrU.J.Jml,84,8>]iQbg2n$5i"gmm1*,PR̈́ &DI ԐM͌6܌^ұMlfbPfܟ rUrUerU͓lfěaaa 5 E.PBEKֿHv(ShÓn O;liQb؁"ABHv(ShÓfbzNEDSflfb(͓>erUZ͗%\͌6m I OFc(TX"&brQXP@ـ FvZ6B ,D! h6TMSN䢱63_3-l&ڛ66a(] &63c1udOl*l*b-Nnf˒flc6$  @#dZ.tm2E*XZěmM'brQXgmm1*,PR$DQ "TMmM'brQXc1u&l0͗%\̓-Nnf. 9.Jml,84,81OFc(TX"_/c/6񷦞0ÎI[q~R/0ٗoI>m1X0KaGga=$՝Gͧͱ>c&KbN>]iD&" _2|-@6B ,(IQ@R(E5 R"$<<)w6 :}^H $]ς|_ <c&=֑j/0q;t   =YL>HZGͨů(TPQMCc,T,?ě{Lͤ1W4cxjZΪZJޤivRJFhD0r$(MIY;tғoR1WHVOR]vH,D/ICQR坑F4\sk˅B\- 8. trV⭐'ޠ)JORFk9gj+qV񷦞0%!m|2E,1%˵#oR ;tp#@Mz1A/Y%2EP!;lp`|M8 0?H8SzM M;])nH"Ic&>m>m|I4_ `騬t*xhR:mgn4A 8;lr0Pc4ӈFO49Cn Fޓ|HLd0,DL"@DKDTHEAH@BiMJh0Ϊ՜tϘzI;tOb|Mv$:j+$?(MIDa&`yw> $o[YX g91VvHv86e C_vv[;lvNO4ѧ(mzNEeqtM__lf;;qM1 MƈPM 9mLAOI(&NDS`;lr0Pؿ &0idM&ژ'lHPM4 Hjb 9Cn 6≶ )Fޓ|Bl_28&"m0xJf['Dـu ՜tϘzI;tu|ڋ; ZraٗqzCZo*K,ѧ(mwMNPۤ.b|@xg#30j#շ{zIP/aB ‚€YaٗqzCZo*K)'h g/!`w#4bǫ91Vv73L5WHw݁} V^ ï.;T Yل`w#4bHʘ\ XPz|I5gnN*$zIљ6bxlk &Wv'vLJ°/aB ‚€ل`w#4bF# !;kY_f] iw,mI ,XڒF r1zCJ7Vr=>c&=[zogsH$61{Fƺ ‚QxV,(^XPXP6܌^ұM(:Ԑ0PV)vֵΪv]m%"Xm1-H2&]UUUUUUUUUUUUUUUUUUUUUK_FO;liQbǗg 4M 697b;jj7M38q$.2pع]фI5WؿN7&䭛 oMrqg 5Jh,H H_h+Fc(TX" >m2E*X9"Q"($͈)@ f($͌lf;;qM6lflf.Tٲw'6 9.J2l*lfɶ3hbMа$ b E.PBEKֿh)*) `iiEP _h+Fc(TX",EBh"LD6 DH'mNLifb`v$M6lflf.Sٲw'6 9.J2l*lfɶ3hbMаHb E.PBEKֵ7zɴӿ D%H>m2E*X f% " $̈́cޓmC&Nfb`0i"mc63c1u͓>䫙䫙-Nnf˒flc6$  f/]Le $T=kFRO4.EO;liQblP0Py1a"LRO4.l`>2yumMO4 !;fl`Qfܟ rUrU_Z͗%\͌6m IOFc(TX"FK&wMO;liQbXHXH1a"LYNPۥP͌_FImMFI(] &63c,͓>䫙䫘.\s6\s63d1&XphXp$92|-@6B ,Z8u!M;O;liQbl&H8X2 LM6m4lf.>$4.b􆕊oc63_ʃ6Nf˒f˒f.-Nnf˒flc6$  a_dZ.tm2E*Xp#A6Z0ۤeH_h+Fc(TX"+6 H4PDFlA6Z0ٱ`Fޓ|Q6ٱe 3dOljss6\s1u73eW3c6MCm 2|-@6B ,Z&brQXJhSDـ FvZ6B ,D! h6TMSN䢱63_3-l&ڛ66a(] &63c1udOl*l*b-Nnf˒flc6$  @2|-@6B ,ZX礡M|m駌;pV_4+'ve;lpb9O;liD&" z|I5gnilOzIؾ'uy"1OFc't m1*,PR„ZEHE0jf2Hm I$CsM0ldža5ꪪZJޤiv) `J"$ &b$I,坉:iIs˷v$*K."P9 P4 &"KPTk9gddM:2Jt- trV⭐; `$iuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUR2 7!;lt@B`DB,D,$ @)`e%8obIJ>0ldžl $T,$EE e p_;Mפ1]7_ b  b_/ 8ʰJޤ:|R'M P%b( EBbb_2CRWӞ2 P%EPD(*HA91Vv6\`|ˌQVޜؿ3 ā@@ AX! "t P%EPD(*I9 @)`d+8obIԗ 8zN br?CMR3E%  @b$EHE0jf2Hm I$C% t6cW6* @"bbوl2YB8\}/r!q`HuI)$ LX"Eh(LLT9kHr*Jq[zsUV!5$ `(I0g#30j#ˌOyqJ#ӛpCx(‚" $!B .3$ `(I/'7/Q@R(E5 Rp<</dev/null | grep "^0 :" | cut -f2 -d :) profile=${out/*profile\//} [[ -z $profile ]] && { user_msg 30 33 $PROGRAM exit 1 } /usr/bin/su - $SAPADMNUSR -c "env LANG=C sapcontrol -nr $inst_no -function GetProcessList" | tr -s ' ' '' | tr -d ' ' | tr ',' ' ' | while read name description rest do if [[ $description == "EnqueueReplicator2" ]] then replicatortype="EnqueueReplicator2" break elif [[ $description == "EnqueueReplicator" ]] then replicatortype="EnqueueReplicator" break fi done [[ -z $replicatortype ]] && { user_msg 30 33 $PROGRAM exit 1 } if [[ $replicatortype == "EnqueueReplicator" ]] then process=$(/usr/bin/su - $SAPADMNUSR -c "env LANG=C sapcontrol -nr $inst_no -format script -function ParameterValue _ER " 2>/dev/null | grep "^0 :" | cut -f2 -d :) elif [[ $replicatortype == "EnqueueReplicator2" ]] then process=$(/usr/bin/su - $SAPADMNUSR -c "env LANG=C sapcontrol -nr $inst_no -format script -function ParameterValue _ENQR " 2>/dev/null | grep "^0 :" | cut -f2 -d :) fi [[ -z $process ]] && { user_msg 30 33 $PROGRAM exit 1 } #Verify if the specific ERS instance is running locally. output=$(ps -aef | grep $SAPADMNUSR | grep -w $process | grep $profile) if [[ -z $output ]] then user_msg 30 33 $PROGRAM exit 2 else if [[ $replicatortype == "EnqueueReplicator2" ]] then #Exit with lowest value, so that SCS Instance can failover to other available node exit 1 else #Exit with highest value, so that, SCS instance can failover onto this node exit 2 fi fi #We have to return a non zero but less than 2, so that Adaptive failover works exit 1 t k4%o4/םaX՝a֝a&42vT./usr/es/sbin/cluster/sa/sap/config/cl_sap_manual_config.xsd  lm%of2/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/sap/config/cl_sap_manual_config.xml  e -<>ainorstAEINPS_cdhlm!/CMORTfgpuvBDGHLUbkwxy".JVY,012=F'47()356:?89WX#@Kh*NHJ @(((DB,-($pҍ@F X981h3' p%Y*~Bs}m,䤈r!1h3H|A:(2C`8 p@`8 o)E9u;̝1h3-($pҍ@FY(-cc3Epс#,PP?c f98S7y*WEidg%$@ [D1c f2o!0nDHTtJ@DJ*nbh4y(#@J*!GAWēAD|S[D1c fn4oR3"7: /1h3r!+8#[K)~`(1h3r! 84pّ/%#t-1R60 CN.d/1h3r!Nn5©s6YXNمRM"DT/%Scc4DT N+8#[K +(S)xFz5aTE2 occ?-Qh4`Ht 4c fȀ( 0T"QP+sGȉFQQQ < $#@ &p08&^68 sc*)Te!*hԀN"D@ )( $OE;UiWԀFF[g"Q**!GAWēAD|_HQƀ =WιT)\|QW/g"7:m\`6ep({ x}7NwzZE7$roPc9',Z9O(8h R2ƴrc0NoP=D|Cš2Tq D|_9u$`Jں2%;_D1ӂ%|^T:A0+o N}S z)}[W23\j~o RW<%nh_0dkh3%UK#s}m-HRH6W%|^ N}S z)}[WM,.^c fo R9 h~JjȔkMr9"w3d9"w3dg>T<[W }/Jk)šPYL? %Fr5dJ54 <7cc14ycQ'rOX .UO:pU ;%t/Z ,PA(P4H)G1K8`J8! fsYuN; 5M(NѬȒaw9R%X鱎_D1T<(ryӂ~xd+94O@0h%4O@0h%h30줒ҘjpE>7iuy*ZXO2a)G1K8`J8#|R (0ib  @lc ff'_T1iIRING/iSQ M[sDqI%;Ћշ-D1ӱBS@۪f9NrU}'N9 Mn_&'qI%;O(Ԑ[@ x}+jk_ fr_VNyJںo*<ӐG*t8(4Xߞ(ү6lcC;;8[K(N=[z)7)arxlS D|X]/!iuNr$A=! ^9D1ۤM"Dv1_ҁJ9_oFQ`@2h3c fexS6m.S2/|);&X  NJz()/9+ʩN a9"w>2J鱎_L4(X\&xZ ,PA.Z!($`Di`!Bƌ 9r!rPS)𦜩XDү7 5$T/%_oc -qsD -qr fyG`ϫKƃc aqϪw!Sh>OMϫKv@c`Qh`QZ!%J uNoPQx-4eiaKU)(GF|Qr!' iʕվ8[KA/h@PܿRIND%4"ma$BSB/VܵgN9 Mn:v>JhuU sD;%4 9k!Ϲ;@۪f>SޤHDK8#|c8#hu '@ۨl0Ɣ,/hJ9_m_;ɽ_oFQ`@2kh3<;ɿ }/_D1Ʒ>|NjpE=7Ӫw> }/V>SFQ1_AFAFkh3+|);ɽBW~yGi <8҅/iW"CUF1h3)*V/VS6m.|wޒSSciBrqI%;Ћշ4ISQ M[rC;%4 lc!)mW1t|6h3>NnOz}!.d#_dm6S sDs'mncH@Pܿ@&zF|Q-k!RK* T<[WMTr4_n'5vXF|QKƟUFMrc:a}kiu2QGzE8F,.UO aw(S W-.D'"AK/h3t)xӕ+UF;F~>SDE4c@e4`Qh@e4`QZ!%J uNoPQx-4eiaKU)(챧F|Qr!' iʕվ8[KA/h@PܿRIND%4"ma$BSB/VܵgN9 Mn:v>JhuU sD;%4 9k!Ϲ;@۪f>SޤHDK8#|c8#hu '@ۨl0Ɣ,-D Q4 *nZM4 *z2%;_D1McO̍*|^c Dno%3h;$h;c0RzS%|q9@ a(Yy*ZXjpRFzB$2 "_occ1šrbo;#h,.z}--%;610Ɣ,/iSQ M[sDqI%;Ћշ-D1ӱBS@۪f9NrU}'N9 MnZc3dN6!N;>NCe04I2pF6)9D /dev/null) [[ -z $my_inst_numbers ]] && { INSTANCE_TYPE=${my_inst_names%[0-9][0-9]} my_inst_numbers=${my_inst_names#${INSTANCE_TYPE}} } my_inst_numbers=$(echo $my_inst_numbers | awk '{gsub("\n"," ");print $0}') # For PHA 712 Style ODM entries like --> "01_02" my_inst_numbers=$(echo $my_inst_numbers | awk '{gsub("_"," ");print $0}') mycnt=0 for i in $my_inst_numbers do inst_numbers[$mycnt]=$i ((mycnt=mycnt+1)) done typeset SID=${SAPSYSTEMNAME} typeset my_sap_exe_dir=$(clodmget -n -q "application_id=$APPLICATION_ID and name=EXECUTABLE" -f value HACMPsa_metadata 2>/dev/null) [[ -z $my_sap_exe_dir ]] && my_sap_exe_dir="/usr/sap/${SID}/SYS/exe/run" my_sap_exe_dir=$(echo $my_sap_exe_dir | awk '{gsub("\n"," ");print $0}') mycnt=0 for i in $my_sap_exe_dir do sap_exe_dir[$mycnt]=$i ((mycnt=mycnt+1)) done typeset wait_for_started_delay=$(clodmget -n -q "application_id=$APPLICATION_ID and name=START_DELAY" -f value HACMPsa_metadata 2>/dev/null) [[ -z $wait_for_started_delay ]] && wait_for_started_delay=0 typeset wait_for_started_timeout=$(clodmget -n -q "application_id=$APPLICATION_ID and name=START_TIMEOUT" -f value HACMPsa_metadata 2>/dev/null) [[ -z $wait_for_started_timeout ]] && wait_for_started_timeout=0 typeset WaitforStopped_delay=$(clodmget -n -q "application_id=$APPLICATION_ID and name=STOP_DELAY" -f value HACMPsa_metadata 2>/dev/null) [[ -z $WaitforStopped_delay ]] && WaitforStopped_delay=0 typeset wait_for_stopped_timeout=$(clodmget -n -q "application_id=$APPLICATION_ID and name=STOP_TIMEOUT" -f value HACMPsa_metadata 2>/dev/null) [[ -z $wait_for_stopped_timeout ]] && wait_for_stopped_timeout=0 #this profile can only be used to start a SAP command. It is not relyable when grep for that string as there #are multible paths considering sapcpe and the links to SYS. typeset my_instance_prof=$(clodmget -n -q "application_id=$APPLICATION_ID and name=PROFILE" -f value HACMPsa_metadata 2>/dev/null) my_instance_prof=$(echo $my_instance_prof | awk '{gsub("\n"," ");print $0}') mycnt=0 for i in $my_instance_prof do instance_prof[$mycnt]=$i ((mycnt=mycnt+1)) done typeset -i is_local_vg=$(clodmget -n -q "application_id=$APPLICATION_ID and name=VOLUME_GROUP" -f value HACMPsa_metadata | grep -c LOCAL 2>/dev/null) #value is 0 or 1 as we do grep -c typeset -i is_nfs=$(clodmget -n -q "application_id=SAP_GLOBALS_${SID} and name=IS_NFS" -f value HACMPsa_metadata) typeset sapmnt_nfs=$(clodmget -n -q "application_id=SAP_GLOBALS_${SID} and name=EXPORTS" -f value HACMPsa_metadata) typeset nfs_ip=$(clodmget -n -q "application_id=SAP_GLOBALS_${SID} and name=NFS_IP" -f value HACMPsa_metadata) typeset -i is_ers_enabled=$(clodmget -n -q "application_id=$APPLICATION_ID and name=IS_ERS_ENABLED" -f value HACMPsa_metadata 2>/dev/null) typeset -i max_ensmon_retries=$(clodmget -n -q "application_id=$APPLICATION_ID and name=ENS_SYNC" -f value HACMPsa_metadata 2>/dev/null) # default = 10 what is 10 * 5 seconds typeset logger_logfile=$(clodmget -n -q "application_id=SAP_GLOBALS_${SID} and name=LOGGER_LOGFILE" -f value HACMPsa_metadata) typeset -i notification_level=$(clodmget -n -q "application_id=$APPLICATION_ID and name=NOTIFICATION_LEVEL" -f value HACMPsa_metadata) #0= no additional notification will be send == default #1= monitor will send notification for YELLOW core processes #2= monitor will send notification for all Yellow and worse processes where operation is continuing in addition. #4= startscript will send notification, not monitors #>4 = satartscripts will send notification for status Yellow and monitors as well #combinations by adding values allowed ==> 8 levels #the level is the same for all instance types for one SID notification_script=$(clodmget -n -q "application_id=$APPLICATION_ID and name=NOTIFY" -f value HACMPsa_metadata) typeset -l sapadmuser=$(clodmget -n -q "application_id=SAP_GLOBALS_${SID} and name=SAPADMUSER" -f value HACMPsa_metadata 2>/dev/null) typeset su_sapadm="/usr/bin/su - ${sapadmuser} -c" typeset SAPenv=$(clodmget -n -q "application_id=SAP_GLOBALS_${SID} and name=SAPENV" -f value HACMPsa_metadata) typeset my_virt_ips=$(clodmget -n -q "application_id=$APPLICATION_ID and name=VIRTUAL_IPS" -f value HACMPsa_metadata 2>/dev/null) [[ $my_virt_ips == "LOCAL" ]] || [[ -z $my_virt_ips ]] && { ${su_sapadm} ${sap_exe_dir}/sapcontrol -nr ${inst_numbers} -function GetVersionInfo > /dev/null [[ $? == 0 ]] || { ${su_sapadm} ${sap_exe_dir}/sapcontrol -nr ${inst_numbers} -function StartService ${SID} > /dev/null [[ $? == 0 ]] || { KLIB_SAP_SA_logmsg ERROR 151 74 sapsa.cat "clodmget failed to get value of %1$s.\n" "VIRTUAL_IPS" exit 1 } } my_virt_ips=$(${su_sapadm} ${sap_exe_dir}/sapcontrol -nr ${inst_numbers} -format script -function ParameterValue SAPLOCALHOST | grep "0 : " | cut -f2 -d : | tr -d " ") [[ -z $my_virt_ips ]] && { KLIB_SAP_SA_logmsg ERROR 151 74 sapsa.cat "clodmget failed to get value of %1$s.\n" "VIRTUAL_IPS" exit 1 } } # For PHA 712 Style ODM entries like --> "VIP1_VIP2" my_virt_ips=$(echo $my_virt_ips | awk '{gsub("_"," ");print $0}') mycnt=0 for i in $my_virt_ips do virt_ips[$mycnt]=$i ((mycnt=mycnt+1)) done sa_sap_xplatform_logging=$(clodmget -n -q "application_id=$APPLICATION_ID and name=SA_SAP_XPLATFORM_LOGGING" -f value HACMPsa_metadata 2>/dev/null) exit_code_start_sapcontrol_start_failed=$(clodmget -n -q "application_id=$APPLICATION_ID and name=EC_START_FAILED" -f value HACMPsa_metadata 2>/dev/null) exit_code_start_sapcontrol_startservice_failed=$(clodmget -n -q "application_id=$APPLICATION_ID and name=EC_START_SERVICE_FAILED" -f value HACMPsa_metadata 2>/dev/null) exit_code_start_nfs_failed=$(clodmget -n -q "application_id=$APPLICATION_ID and name=EC_START_NFS_FAILED" -f value HACMPsa_metadata 2>/dev/null) exit_code_monitor_sapstartsrv_unavailable=$(clodmget -n -q "application_id=$APPLICATION_ID and name=EC_MONITOR_SAPSTARTSRV_UNAVAILABLE" -f value HACMPsa_metadata 2>/dev/null) exit_code_monitor_failover_on_gw_outage=$(clodmget -n -q "application_id=$APPLICATION_ID and name=EC_MONITOR_FAILOVER_ON_GW_OUTAGE" -f value HACMPsa_metadata 2>/dev/null) # End of GLOBALS 0 or  kȆQ$odA/םa՝a֝a&A2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapERSrelocateMonitorldd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapERSrelocateMonitor.sh 1.8 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2013,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapERSrelocateMonitor.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapERSrelocateMonitor ## ## PURPOSE: ## Monitor script for SAP NetWeaver ERS instance(s). ## ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on no corresponding CS is running or starting ## 1 on detection of an corresponding starting/running CS instance ## . /usr/es/lib/ksh93/func_include #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities PATH=$PATH:/bin:/usr/bin export PATH #------------------------------------------------------------------------------- #Main #------------------------------------------------------------------------------- eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.8' fi typeset script_name="cl_sapERSrelocateMonitor" typeset -i rc=0 typeset -i mycnt=0 typeset -i count=0 typeset -i enq2=0 typeset enqrep_process="" if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { KLIB_SAP_SA_logmsg ERROR 151 73 sapsa.cat "\"%1\$s\": Application ID not passed as input Parameter. Quit immediately with Exit code 1. Please add application ID as input parameter to the PowerHA Smart Assist Application Servers.\n" $script_name exit 1 } # Define an array of instances from application_ID and get the appropriate SID from ODM. typeset myinst_names=$(clodmget -n -q "application_id=$APPLICATION_ID and name=INSTANCE_NAMES" -f value HACMPsa_metadata 2>/dev/null) [[ -z $myinst_names ]] && { KLIB_SAP_SA_logmsg ERROR 151 74 sapsa.cat "clodmget failed to get value of %1$s.\n" "INSTANCE_NAMES" exit 1 } myinst_names=$(echo $myinst_names | awk '{gsub("\n"," ");print $0}') # For PHA 712 Style ODM entries like --> "ASCS00_SCS01" myinst_names=$(echo $myinst_names | awk '{gsub("_"," ");print $0}') for i in $myinst_names do inst_names[$mycnt]=$i ((mycnt=mycnt+1)) done . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities_xplatform while (( $count < ${#inst_names[@]} )) do unset SAPSYSTEMNAME setSAPGlobalEnv -i ${inst_names[$count]} ret=$? (( $ret != 0 )) && { KLIB_SAP_SA_logmsg ERROR 151 72 sapsa.cat "\"%1\$s\": Environment setup failed. Quit immediately with Exit code 1.\n" $script_name exit 1 } . /usr/es/sbin/cluster/sa/sap/etc/SAPInstanceGlobals if [[ -z ${virt_ips[$count]} ]] then virt_ips[$count]=${virt_ips[$count-1]} fi ERS_RG=$(clodmget -n -q "application_id=$APPLICATION_ID and name=RESOURCE_GROUP" -f value HACMPsa_metadata) CS=$(clodmget -n -q "group=$ERS_RG and name=MISC_DATA" -f value HACMPresource) CS_IPs=$(echo $CS | cut -f2 -d,) CS_IP1=$(echo $CS_IPs | cut -f1 -d_) CS_IP2=$(echo $CS_IPs | cut -f2 -d_) if [[ -n $CS_IP2 ]];then CS_IP="${CS_IP1}|${CS_IP2}" else CS_IP="${CS_IP1}" fi #if CS ip is aquiring we need to invest [[ $(ifconfig -a | egrep -w "${CS_IP}") ]] && { CS_NAME=$(echo $CS | cut -f1 -d,) KLIB_SAP_SA_logmsg DEBUG 151 67 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Found the service IP alias of \"%4\$s\". No er process restart from now.\n" $script_name ${inst_names[$count]} ${SID} ${CS_NAME} #Relocation monitor should exit with failure, when both ERS and SCS instances are on same node and Enquque replicator2 is enabled, #so that RG will go to error state and it may try on other active node instance=${inst_names[$count]} INSTANCE_TYPE=${instance%[0-9][0-9]} INSTANCE_NO=${instance#${INSTANCE_TYPE}} # Get the process name based on the enqueue replicator type /usr/bin/su - $SAPADMNUSR -c "env LANG=C sapcontrol -nr ${INSTANCE_NO} -function GetProcessList" | tr -s ' ' '' | tr -d ' ' | tr ',' ' ' | while read name description rest do if [[ $description == "EnqueueReplicator" ]] then # call ensmon with PROFILENAME as parameter. option 2 /usr/bin/su - $sapadmuser -c "${LAN} ${sap_exe_dir[$count]}/ensmon pf=${instance_prof} 2" rc=$? enqrep_process="er." break elif [[ $description == "EnqueueReplicator2" ]] then # call enq_admin with PROFILENAME as parameter to get the replication status /usr/bin/su - $sapadmuser -c "${LAN} ${sap_exe_dir[$count]}/enq_admin --replication_state pf=${instance_prof}" rc=$? enq2=1 enqrep_process="enqr." break fi done if [[ -z $enqrep_process ]] then KLIB_SAP_SA_logmsg ERROR 151 89 sapsa.cat "\"%1\$s\" Unable to identify the enqueue replicator type for the instance \"%2\$s\".\n" $script_name ${inst_names[$count]} exit 1 fi if (( $rc == 0 )) && (( $enq2 == 1 )) then #Enqueue replicator2, both ERS and SCS instances are online on the same node, we need to exit with failure for ENQ2 KLIB_SAP_SA_logmsg INFO 151 90 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Start moving ERS away from here.\n" $script_name ${inst_names[$count]} ${SID} ${CS_NAME} exit 1 fi #the ers is now stopped by en. Now we can remove the filesystem [[ $(ps -fu $sapadmuser | grep "$enqrep_process" | grep ${inst_names[$count]}) ]] || { KLIB_SAP_SA_logmsg INFO 151 68 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Start to move ERS away after the Instance \"%4\$s\" took over the replication table.\n" $script_name ${inst_names[$count]} ${SID} ${CS_NAME} exit 1 } } ((count=count+1)) done exit 0 HACMPsa l`R$odZ/םa՝a֝a&;2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapMonitordd   enst$_acior "-[\]dlmp%&.1=AEGILPSfghuv{} #()/0235BDNORTbwy:>CKMWYjkx,4FHU|*+67;JVq!'9FyQW@'xf0[8|3ʈ?J"ܭN߱~"s#uOgJl`IuMⵕ3@'xcڝW ʞqZ͜a{.ec?c+@'Ó:͜a 䄋7K^"W|7GM  TD⢅ 8 @?po 9 xd9S džc xdv=T;)`760G4~=bXpq@8po  !8~!(2@`oDz e4BP R +!8̧/At?}‚,z!( DŌ @$'ah HO&Y^0~Wʉ HJ!

CBEEHɆV`l2 ͩV2B2bv3(̧PH$TU zdxɝ]gc+?h.\PA!bn*$Eʼn C@C&HI.X QA7Ib.0Hr4EEy{8~TDi"ex_*%[~e-ߞ67[S9aZ/\gGM`@.?+eex_*%ߞ6ob_M/!KaK29,?c+*gjx=KG!8H㼂@$', @'e|u.r$}6orĮ;)7]첼`z2eoJ?i\u"Ш/%5[Ҿ 轖W+iE˖*$,TPMD0HN(X &@4zFy׮rH /eЕCe> ZYhDM>ݦqπ j=UPuhbhRnmEP^K0j} {,?c+tV"ċ,THXﵽ"LLI&bh\p$ _ˡ+|8 A_m ahuh<(+bmXZ麴?P7.H /eЕCe07R@9DCQXa̘`l2K1oUҗIEl}2Eb-ތ_oy׮rԴz%D p Q3AkVhU@ܻXgÂHhBC3hi @'.w1+zk:WI ?DA ]obBo5+80x EȀBC3hi A27o5+ZHyXX[?AL 0ZWH ?ɆV`l2 ͩc1`l0"VxkewM zA]cyX*C^V& $ &iE/!wNz7{9z?uZPWlx,/!Ib.0Hr4EEy|{8~TDi"g+b~Vg|WG|Xb|>;%ېY[ؤ?@ ?ɆV`l2 ͩc1V0"o5 (޾!&zi]q6G/U?UnCW# HXZ _C󱞺,m^Ez賉PCN|&w>k紷|^k紷G+>;ߜb4ykX.11( C{8~TDi#kDhr3Dhzrw'_k3L߱)>|iaZ= ŝu=u TiH~仱{;%/:>vk箃 #+z7{9z 0 0,L&HLHi{.}9h6G/U?]z賉9znO$^Oy=s_=ɝqzY'f{W!D\`w$i5Ɋ 8yg>ފ qDy[}ºQ>FzQ=.,n=rg{3+3|Wz=K\vS ŝ龢#@u"=KG'u+o5+l$rS v|uВ%qMs_=ɝqywG|uВ%qMs_=ɝqyw\WO3?c+rv~WO}-[;W-[:V_pѼ[جMO<`7_k3̾+e_=T;)xti] -NbWݏg5ܙ|Wx|z_C|uВ%qMs_=ɝqywH~D\`w$i5ĉE9<;Ǐ#H(QV_p#Cn(#Cn(Kyzo@=KG'u+o5+l$rS t?Jr]Ѽ+K7P: ,HikV&HF;O$\00P Q3"}캁4 THv;&HE-<`z tCQC}8h?usySDiJ+0s\LTTPW;>;!Hs&Y^0~WvyVyO xk&}˓1jey 4`nto5 tȑ)Z^rfk &'Wt?$̧+To5 ?X.11( C{8~TDi#kDhr3DhzqcuyWyr:{z7{9zD=u T"G0P00ø$Q$] 9yc q"b QN@@=x?z*"4o5 "49F"4=FxzrW2`LO_pPxX}oݍLTǍ^S3x.s6g.flKP-ېY[خѼ[جMO*$q+\gW3)A[1yV!i@kÑ#NYJl`₤ɉUsߡD\`w$i5ĉE91+<]\+s@?M>}8p?i;e+Lk9 &'W‚`nto5 tiyZ9k &'CO3?c+rv~WO}-[;W-[:V_pѼ[جMO<`7^7x˸١V^0~WbSFq]qVZݧnto5 t|z1,XP|l9lqoKy+,S:xZ!}*"'/#La $*&TL Cq計 7G+#g#_p9w4?+sܷJ`ٮ1K?֜KPF∏R”Dh#:ex5o655m`^t2cd4ېY[خѼ[جMO*%zF_pNORƿc8La@YC~}¼s^>g.f4`nto5 tȑ)Z^rfkZ₤ɉUs*"'/#La$LD )Ǐ#H(QV_p#Cn(#Cn(K}»4o}-\^;S|ƾ{8;SR ŝu=u TiH"W]GjqїF_p^Ѽ[جMOv0Hab`2@gDOcuFi9z Ѽ[جMO$xC/;Cіk+zQ}׭Ց :iJV$ZAYG]8 )Z^rĖ 0VQNJV1I`pR1bK Ezމ!YG]8 )Z^r 9,VQNBVCbK E4jiyp0b€ iR1,XPW! ,TE qN^F\ Cg>ފ qDy[}ºQ>FzQ=.,n%:P׍ɚ'h7].NN% DhqDGaAXy?Vp,<4NrcnȋM0}7\ǎqyVr:{z7{9zDOet}y?4M p?iJhae ù?Ib.0Hr4EEy<?<|AFuqD|qDz\Xrxfrfxɚ'h7\Tf7Ks^.q߲85S_v?b8ߴi$n(-ېY[خѼ[جMO*%{( rؙz;K?!WO}-[;W-[:V_pѼ[جMO<`7\3ٜY9rfō9>\a&TyX0qw-Zrw -@nG]8}ZĮ;)⼎+qHr$yp@!?Wȑ)Z^r &X/}g"Giyc &X/}9=+KPq ,( *"'/#La $*&TL CdzEDFQ<]DF(Q#=DFQ7\̗^C]Y:l~ב &X,*gfPu@,gKX0qw-Zrw -@n#@u"=K FH7 Dǔ]XZN,WikV&HL=uӁ?O3?c+rv~WO}-[;W-[:V_pѼ[جMO<`7\̗^C]Y:l~ב &X,*gfPu@,gKX0qw-Zrw -@nG]8#VrX "hc}.zZ?Ib.0Hr4D@{8~TDi#kDhr3DhzpDcg+켙hzN,WikV&HL?$׮q_3)b9[}±M>Ѽ[جMO$x0ù?:ÁJVꛁUsKqE`0&**(+9g>ފ qDy[}ºQ>FzQ=.,n%:P3S~8ߴi$n(-ېY[خѼ[جMO*%{(>;!CM>ܣ9=+KPuMe ù?%"0Ik )8wdzEDFQ<]DF(Q#=DFQ7]YkF#<La@XTqO#ǯ)Ρ|΀YΖԱcu`[δZDF7DzN,WikV&HL=uӁ?O3?c+rv~WO}-[;W-[:V_pѼ[جMO<`7]YkF#<La@XTqO#ǯ)Ρ|΀YΖԱcu`[δZݧp>=KD-$Q$] 9yc q"b QN@@=x?z*"4o5 "49F"4=F"W^Lߴ=KG'u+o5+l$rS t?L8&Y^0~WT[}±M>Ѽ[جMO#(Y1S/;C)ZVEY^Ѽ[جMO 0 0,L&HLHi{.}9h6G/U?]z賉9znO$^Ph4E xiH"@Q"7"HDt??+ ^6@I I#f0^0cafzވ6BpR`$ZAYG]8 )Z^rsX0hXZ(oF&et4iy1% :hQJNbK E׭  :iJ0$ZAYG]8 )Z^rĖ [ʙdV쩆,VQNBHq2e+KPvT\Ė [Ř"uӀLJ0$ZAYG]8 !ɔ/9AسbK E%"0Ikr8{8~TDi#kDhr3Dhzrg^stߑI\,?c+S;Sō| qio:ӓIj7Q:r:{z7{9zDOet}#:Qڜtgτ]YﵾTǡ~}r${JVlPT1>py#%"0Ikr8!Qn(+yWQ7GQ7GōW|sl,n9ٜYb+]z/:_Θ|n6k0`-ېY[خѼ[جMO*$?ODiJ Us&nTvdV쩆 gU^8w<Grؙz;K? Ҿۖ` ŝ i` ŝ?+yWikV&H0THK.[ў֥cuﵾT3+3uɚԴB?X.1,Q2og>ފ qDy[}ºQ>FzQ=.leo_FzjoZōþSPף&jKR ŝu=u TiH}#O*|C)Z^ra2Ņ}UxG}-[ުp}+lLݐYުpЦlLݐYvbm^iDr᱕}Sb=j57K݇cS PdCiaZ!h~ ,TE qN^F\HTLN@@?dzEDFQ<]DF(Q#=DFQ\62?*q\gF`z:7_*a㞌m,=KG'u+o5+l$rS !?ϡia+KPp6,XPW!$Q$] 9yc rbǏ#H(QV_p#Cn(#Cn(K g%}uvP17ʉpe[|T/qOEub:or:{z7{9zD"A#ׯ>F|ojlR~frfVMw0a#퉮DiJN,XPW`_M>DiJ0a2Ņ}UxG rؙz;K?!WO}-[;W-[:V_pѼ[جMO<`\62>9֣Sz԰,nMwy &X,zZGD\`w$i5dDʉp=x?z*"4o5 "49F"4=Fr᱕}ε֥cuk `|l׍pa2ŅcԴnBqg]obOF]ob6G/U?`#?>\RDӁUXO0cJV ,( ?M>ۖ`_p}+lLݐYުpЦlLݐYvbm^iD5kJ~0cu[M[@$Q$] 9yc pY!Q2e9@7Ǐ#H(QV_p#Cn(#Cn(K]d;^L߱qZ?!8]yXa#0TKCWfSc8qў ̬3 νyARd}Hq2e+KPv,Ê &'W!@$Q$] 9yc pY!Q2e9@dzEDFQ<]DF(Q#=DFQ\62>9֣Sz԰,n,ǎ{PT11Z?!8]yXa#0TIO3?c+rv~C;Jn[12d'w;)[12d'tD]yXa#3xQ#.leo_F|sFaX|Y-9w55\2bcԴB@HHG2eoJ?*a&`ì1YoD!YG]8 )Z^rsX- /9A9,@4,-?^DBpRDӘiet4(iy1%cet4iysX- /9AуbK E׭LVQN@Hq2e+KPvT\Ė H+(@$82(;*abK E׭0D+(+KPrbKuӀТ(9a1%gYrpIa`Q46~ ,TE qN^F\HS!=x?z*"4o5 "49F"4=F3\zo;ee*gjc0qw-Zrw -^8"4Q#ԴnBqg]obOF]ob6G/U?`i죮G^;S9B+86ʙژ?ODiJ &'WOaDiJÊ &'W!$Q$] 9yc q"b QN@@q計 7G+#g#a+pnkZ83qCfrfUgz^Ρ#>9X=KG'u+o5+l$rS !|Gh6ҕ(8 ,( ە>$82(;*a(*HW!~iܶ&cen^zúi3?c+vBqgzûBz3?c+vBqgOJkz7{9z#=?AˆVg:joZōþ *a9ɚԴB?X.1,Q2 {8~TDi#kDhr3Dhzp c+z3j57KakJ*a9ɚԴnBqg]obOF]ob6G/U?`GCO)Z^rp0b€ M>Ն8iyXae ù?X.11QQA^@@q計 7G+#g#a+pnkd֎2F%0w|@+|b+|-ېY[خѼ[جMO*$>;!?&v3{Sb3+2 k}5ȑ)Z^rie , 1ȑ)Z^r &X/;C!4n[12/Gi~:úi3?c+vBqgzûBz3?c+vBqgOJkz7{9z#=?AˆVg:joZō׉[ wμ]x~,XP=KD-#Ib.0Hr4BeDr8q計 7G+#g#AˆVg:joZō׉[ wμ]x~,XP=KG'u+o5+l$rS ?C}5+KPtM8La@_U^}4c8iyp0b€py#lLܽҾۖ` ŝ i` ŝ?+yWikV&H0THK.[џQjX7^&o1:-fR #Ib.0Hr4EEy@{8~TDi#kDhr3Dhzp c+z3j57K};^L߱qZ?!8]yXa#0TK ^FO!)F{3+2t3:-IiγxUs ,TE qN^F\HTLN@@dzEDFQ<]DF(Q#=DFQ\62>F|sPdZ7})\g x6WNkh܄κvbm^Q$?M>ۖ`_p}+lLݐYުpЦlLݐYvbm^iDr᱕}3狚\﵃%?<_*`OB 39yrjuW_=KD-@C $ICFYG1k sCoF&et4iy1% :hQJNbK E׭  :iJ0$ZAYG]8 )Z^rĖ [X`VQNJVĖ H+(E+KPrbK E׭"uӀҕ(8Øiet4(iy40$aаP?*"'/#La$LD )Qn(+yWQ7GQ7Gɝz~F{$_ee*gjc0qw-Zrw -^8"4Q#ԴnBqg]obOF]ob6G/U?`i죮~} r${JVPT1>p ,TE qN^F\HS!0odzEDFQ<]DF(Q#=DFQ7]h bSx˸١Xs9B8W_x^u 0l׎aZ?!8]yXa#0TI#XcJV &X/;C X.11QQA^@@>=x?z*"4o5 "49F"4=FG;=|c+z*WW_>;#Z?!8]yXa#0TI#y?ϡ~} r${JV &X/;C X.1,Q2=x?z*"4o5 "49F"4=FG;=y3M[˯O񳵛Or:{z7{9zD?M>ۖ`_oU^8wM>ܶ&cenN,U^8whSO\&cenN,[}»OF]ob6G/U?gG\XuQLfקx͉R G^;S񽩱KE]X5kx?M>ؚH/9A4a2Ņ}UxH/9Aу,XPW!~}-[Ux4Wrؙ!8UxݡM=rؙ!8%o5 =u T p c+z3j57K})י˸ٯe ǩh~ ,TE qN^F\HTLN@@<|AFuqD|qDz\9p޾ZMR5kJ~0cur6kk0b€Z?!8]yXa#0TKC퉮)Z^rie , 1+KPt`ÁUs&mbf0~V/U^8wM>ܶ&cenN,U^8whSO\&cenN,[}»OF]ob6G/U?gG\Xxﵼ`|ܷɚ2=KD/?*"'/#LaLTTPW!0Qn(+yWQ7GQ7Gō׉[ wν|c+zԴnBqg]obOF]ob6G/U?`#??O/9AƆ &X/;CIb.0Hr4EEy|{8~TDi#kDhr3Dhzp c+zџ#<ǹoywCԴnBqg]obOF]ob6G/U?`&mbf0~V/U^8wM>ܶ&cenN,U^8whSO\&cenN,[}»OF]ob6G/U?gG\9p޼tg41[u]-?M>] -NbWe^Gjnäs^j/dev/null) == "101" ]] then echo "HACMPsap_connector: \ value=103" |/usr/bin/odmchange -o HACMPsap_connector -q "application_id=${APPLICATION_ID} and name=SAP_HA_GLUE_CODE" fi ## GLUECODE # Define an array of instances from the application_ID and get its appropriate SID from ODM typeset myinst_names=$(clodmget -n -q "application_id=$APPLICATION_ID and name=INSTANCE_NAMES" -f value HACMPsa_metadata 2>/dev/null) [[ -z $myinst_names ]] && { KLIB_SAP_SA_logmsg ERROR 151 74 sapsa.cat "clodmget failed to get value of %1$s.\n" "INSTANCE_NAMES" exit 1 } myinst_names=$(echo $myinst_names | awk '{gsub("\n"," ");print $0}') # For PHA 712 Style ODM entries like --> "ASCS00_SCS01" myinst_names=$(echo $myinst_names | awk '{gsub("_"," ");print $0}') for i in $myinst_names do inst_names[$mycnt]=$i ((mycnt=mycnt+1)) done . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities_xplatform while (( $count < ${#inst_names[@]} )) do unset SAPSYSTEMNAME setSAPGlobalEnv -i ${inst_names[$count]} ret=$? (( $ret != 0 )) && { KLIB_SAP_SA_logmsg ERROR 151 72 sapsa.cat "\"%1\$s\": Environment setup failed. Quit immediately with Exit code 1.\n" $script_name exit 1 } . /usr/es/sbin/cluster/sa/sap/etc/SAPInstanceGlobals if [[ -z ${virt_ips[$count]} ]] then ((ctl=count-1)) if (( $ctl >= 0 )) then virt_ips[$count]=${virt_ips[$ctl]} fi fi # prevent a restart of ERS in case the corresponding CS Instance is aquiring [[ ${inst_names[$count]} == @(ERS*) ]] && { ERS_RG=$(clodmget -n -q "application_id=$APPLICATION_ID and name=RESOURCE_GROUP" -f value HACMPsa_metadata) CS=$(clodmget -n -q "group=$ERS_RG and name=MISC_DATA" -f value HACMPresource) CS_IPs=$(echo $CS | cut -f2 -d,) CS_IP1=$(echo $CS_IPs | cut -f1 -d_) CS_IP2=$(echo $CS_IPs | cut -f2 -d_) if [[ -n $CS_IP2 ]];then CS_IP="${CS_IP1}|${CS_IP2}" else CS_IP="${CS_IP1}" fi #we exit here with zero as we can not assure the timing here. We must not relocate before the CS instance is completely recovered. [[ $(ifconfig -a | egrep -w "${CS_IP}") ]] && exit 0 } #if we run on a NFS we have to check its availability before starting [[ ${is_nfs} == 1 ]] && { # Format for consumption by cl_availability utility APP_ID=$(clodmget -n -q "name=INSTANCE_NAMES and value=${inst_names[$count]}" -f application_id HACMPsa_metadata) RG=$(clodmget -n -q "application_id=$APP_ID and name=RESOURCE_GROUP" -f value HACMPsa_metadata) amlog_trace $AM_SA_SAP_START_BEGIN "SAP NFS Availability check|$RG" KLIB_SAP_SA_logmsg DEBUG 151 1 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - has its SAP Global filesystem on a NFS based share.\n Availability is evaluated now.\n" $script_name ${inst_names[$count]} $SID Check_NFS_Service -V ${nfs_ip} -M ${sapmnt_nfs} [[ $? == $ERROR ]] && { KLIB_SAP_SA_logmsg ERROR 151 2 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The SAP Global filesystem is unavailable.\n Start procedure stopped. Please resolve any issues in the NFS Server/Client before continue.\n Exit code of start script is \"%4\$s\". \n" $script_name ${inst_names[$count]} $SID ${exit_code_start_nfs_failed} [[ $notification_level > 3 ]] && [[ -n $notification_script ]] && $(${notification_script} "Instance ${inst_names[$count]} of ${SID} - The SAP Global filesystem is unavailable.\n Start procedure stopped. Please resolve any issues in the NFS Server/Client before continue.\n Exit code of start script is ${exit_code_start_nfs_failed}. \n") amlog_trace $AM_SA_SAP_START_FAILURE "SAP NFS Availability check|$RG" exit $exit_code_start_nfs_failed # we expect customers to insert a notification method # that the monitor will give notification of an unavailable NFS. # The application Monitor will now handle restart/failovers if set to 0 otherwise the configured monitoring method will send notification. } KLIB_SAP_SA_logmsg INFO 151 3 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The SAP Global filesystem is available. Continue to start instance.\n" $script_name ${inst_names[$count]} $SID amlog_trace $AM_SA_SAP_START_END "SAP NFS Availability check|$RG" } # Format for consumption by cl_availability utility APP_ID=$(clodmget -n -q "name=INSTANCE_NAMES and value=${inst_names[$count]}" -f application_id HACMPsa_metadata) RG=$(clodmget -n -q "application_id=$APP_ID and name=RESOURCE_GROUP" -f value HACMPsa_metadata) amlog_trace $AM_SA_SAP_START_BEGIN "Prerequisites and Start Service|$RG" #ensure sapstartsrv is started or can be started otherwise exit Control_sapstartsrv -A "Prereq_and_start_cmd" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" [[ $? == $sapstartsrv_failed_to_start ]] && { KLIB_SAP_SA_logmsg ERROR 151 4 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The sapstartsrv process failed to start.\n Start procedure stopped. Please evaluate the SAP logfile /usr/sap/\"%4\$s\"/\"%5\$s\"/work/sapstartsrv.log.\n Exit code of start script is \"%6\$s\".\n" $script_name ${inst_names[$count]} $SID ${SAPSYSTEMNAME} ${inst_names[$count]} ${exit_code_start_sapcontrol_startservice_failed} [[ $notification_level > 3 ]] && [[ -n $notification_script ]] && $(${notification_script} "Instance ${inst_names[$count]} of ${SID} - The sapstartsrv process failed to start.\n Start procedure stopped. Please evaluate the SAP logfile /usr/sap/${SAPSYSTEMNAME}/${inst_names[$count]}/work/sapstartsrv.log.\n Exit code of start script is ${exit_code_start_sapcontrol_startservice_failed}") amlog_err $AM_SA_SAP_START_FAILURE "Prerequisites and Start Service|$RG" exit $exit_code_start_sapcontrol_startservice_failed # we expect customers to insert a notification method # that the monitor will give notification of inability to start sapstartsrv. # The application Monitor will now handle restart/failovers to try it on the other node } KLIB_SAP_SA_logmsg INFO 151 5 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The sapstartsrv is successfully started. Continue to start instance.\n" $script_name ${inst_names[$count]} $SID amlog_trace $AM_SA_SAP_START_END "Prerequisites and Start Service|$RG" #verify if the Instance is up and running already Control_instance -A "Check_cmd" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" -T "0" typeset -i rc_Control_instance_Check=$? ## Check if the Instance is working (( $rc_Control_instance_Check <= $EnqGetStatistic_err )) && [[ ${inst_names[$count]} != @(ERS*) ]] && { KLIB_SAP_SA_logmsg INFO 151 6 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Instance is already running. No restart is performed. \n" $script_name ${inst_names[$count]} $SID #For appservers we are fine, Nothing to do for startup #For (A)SCS instances we give notification if rc > EnqGetStatistic_GREEN (( $rc_Control_instance_Check >= $EnqGetStatistic_YELLOW )) && { [[ $notification_level > 3 ]] && [[ -n $notification_script ]] && $(${notification_script} "Instance ${inst_names[$count]} of ${SID} - Instance is already running. But ENSA/ERS replication status is not GREEN. \n") KLIB_SAP_SA_logmsg WARNING 151 7 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Instance is already running. But ENSA/ERS replication status is not GREEN. \n The PowerHA application monitor notification method is called if specified.\n" $script_name ${inst_names[$count]} $SID } } (( $rc_Control_instance_Check > $EnqGetStatistic_err )) || [[ ${inst_names[$count]} == @(ERS*) ]] && { #Appservers and ERS tend to hang. We ensure startup capability # make SCS clenaup only runs when there is no ERS instance is running on any of the cluster node,to avoid removing lock tables [[ ${inst_names[$count]} == @(*SCS*) ]] && { SCS_Appid=$(clodmget -n -q "name=INSTANCE_NAMES and value=${inst_names[$count]}" -f application_id HACMPsa_metadata) SCS_RG=$(clodmget -n -q "application_id=${SCS_Appid} and name=RESOURCE_GROUP" -f value HACMPsa_metadata) ERS_Instance_name=$(clodmget -n -q "group=${SCS_RG} and name=MISC_DATA" -f value HACMPresource) ERS_Application_id=$(clodmget -n -q "value=${ERS_Instance_name} and name=INSTANCE_NAMES" -f application_id HACMPsa_metadata) ERS_Instance_no=$(clodmget -n -q "application_id=${ERS_Application_id} and name=INSTANCE_NUMBERS" -f value HACMPsa_metadata) ERS_RG=$(clodmget -n -q "application_id=${ERS_Application_id} and name=RESOURCE_GROUP" -f value HACMPsa_metadata) ERS_Virt_ip=$(clodmget -n -q "application_id=${ERS_Application_id} and name=VIRTUAL_IPS" -f value HACMPsa_metadata) HOST_cmd="-host ${ERS_Virt_ip}" ERS_Nodes=$(clodmget -n -q "group=${ERS_RG}" -f nodes HACMPgroup) ERS_EXE_DIR=$(clodmget -n -q "application_id=${ERS_Application_id} and name=EXECUTABLE" -f value HACMPsa_metadata) # : check ERS is online on any of the participating nodes or not # for node in ${ERS_Nodes} do # : GetProcessList may fail with error "Command not found" on the nodes where ERS is not available # cl_rsh $node "${USER_cmd} \"${SAPenv} ${ERS_EXE_DIR}/sapcontrol ${HOST_cmd} -nr ${ERS_Instance_no} -function GetProcessList\"" 2>/dev/null rc=$? if (( $rc == 3 )) then # ERS is online on one of the node in the cluster, no need to coninue... break fi done # rc 3 means, ERS instance is running somewhere in the cluster, # so dont need to perform force cleanup, otherwise do cleanup. if (( $rc == 0 || $rc == 1 || $rc == 2 || $rc == 4 )) then # Cleanup SCS instance do_SCS_cleanup=1 fi } if [[ ${inst_names[$count]} != @(*SCS*) ]] || (( ${do_SCS_cleanup} == 1 )) then amlog_trace $AM_SA_SAP_START_BEGIN "Cleanup [A]SCS|$RG" KLIB_SAP_SA_logmsg INFO 151 8 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Start cleanup of remainders of a previous startup. \n" $script_name ${inst_names[$count]} $SID Control_instance -A "Stop" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" -T "0" [[ $? != $sapcontrol_0 ]] && KLIB_SAP_SA_logmsg WARNING 151 9 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The attempt to stop the instance using sapcontrol -function Stop failed. Cleanup will be done by killing processes and cleanup of shared memory segments.\n" $script_name ${inst_names[$count]} $SID Kill_instance -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" Control_sapstartsrv -A "Kill" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" sleep 5 Control_sapstartsrv -A "Prereq_and_start_cmd" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" KLIB_SAP_SA_logmsg INFO 151 10 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Cleanup finalized. Instance is cleaned up and sapstartsrv is running.\n" $script_name ${inst_names[$count]} $SID do_SCS_cleanup=0 amlog_trace $AM_SA_SAP_START_END "Cleanup [A]SCS|$RG" fi amlog_trace $AM_SA_SAP_START_BEGIN "Start SAP instance|$RG" #we start the instance after we had a clean stopped instance state or have cleaned up Control_instance -A "Start_cmd" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" -T "${wait_for_started_timeout} ${wait_for_started_delay}" rc=$? KLIB_SAP_SA_logmsg INFO 151 11 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Start instance returned with a returncode of \"%4\$s\".\n" $script_name ${inst_names[$count]} $SID ${rc} case $rc in ${instance_started} ) KLIB_SAP_SA_logmsg INFO 151 12 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Start completed successfully.\n" $script_name ${inst_names[$count]} $SID amlog_trace $AM_SA_SAP_START_END "Start SAP instance|$RG" ;; ${wait_for_started_timeout} ) [[ $notification_level > 4 ]] && [[ -n $notification_script ]] && $(${notification_script} "Instance ${inst_names[$count]} of ${SID} - Start completed successfully.\n But timeout specified for instance startup was not sufficient. \n") KLIB_SAP_SA_logmsg WARNING 151 13 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Start completed successfully.\n But timeout specified for instance startup was not sufficient. \n" $script_name ${inst_names[$count]} $SID amlog_trace $AM_SA_SAP_START_END "Start SAP instance|$RG" ;; ${wait_for_started_failed} ) [[ $notification_level > 4 ]] && [[ -n $notification_script ]] && $(${notification_script} "Instance ${inst_names[$count]} of ${SID} - The Instance startup finished without error. \n The call sapcontrol -function WaitforStarted exit with error.\n") KLIB_SAP_SA_logmsg ERROR 151 14 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The Instance startup finished without error. \n The call sapcontrol -function WaitforStarted exit with error.\n" $script_name ${inst_names[$count]} $SID amlog_trace $AM_SA_SAP_START_END "Start SAP instance|$RG" ;; ${instance_failed_to_start} ) KLIB_SAP_SA_logmsg ERROR 151 15 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The Instance startup failed. \n Exit start script with exit code \"%4\$s\".\n" $script_name ${inst_names[$count]} $SID ${exit_code_start_sapcontrol_start_failed} [[ $notification_level > 3 ]] && [[ -n $notification_script ]] && $(${notification_script} "Instance ${inst_names[$count]} of ${SID} - The Instance startup failed. \n Exit start script with exit code ${exit_code_start_sapcontrol_start_failed}.\n") #Instance could not be started amlog_err $AM_SA_SAP_START_FAILURE "Start SAP instance|$RG" exit $exit_code_start_sapcontrol_start_failed ;; esac } #The following check we do only for ASCS, SCS and ERS server instances (ensure the enqueue table is build) [[ ${is_ers_enabled} == 1 ]] && { [[ ${inst_names[$count]} == @(*SCS*|ERS*) ]] && { amlog_trace $AM_SA_SAP_START_BEGIN "Ensure enqueue table is build|$RG" KLIB_SAP_SA_logmsg DEBUG 151 16 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - For Central Services and ERS instances the replication health status is verified now.\n" $script_name ${inst_names[$count]} $SID #verify enqueue replication has caught up to prevent from too early fail overs #Now wait until ensmon returns rc 0, then ES has recreated the enqueue table or ERS has catched up with ES Check_replication_status -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" -T $max_ensmon_retries -P "${instance_prof}" rc=$? [[ $rc == $Check_Replication_OK ]] && KLIB_SAP_SA_logmsg INFO 151 17 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Lock table fully created. \n" $script_name ${inst_names[$count]} $SID && amlog_trace $AM_SA_SAP_START_END "Ensuring enqueue table is build|$RG" [[ $rc == $Check_Replication_CS_WARNING ]] && { [[ $notification_level > 4 ]] && [[ -n $notification_script ]] && $(${notification_script} "Instance ${inst_names[$count]} of ${SID} - The ERS has not finalized to build its content or is not started.\n") KLIB_SAP_SA_logmsg INFO 151 18 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The ERS has not finalized to build its content or is not started.\n" $script_name ${inst_names[$count]} $SID amlog_trace $AM_SA_SAP_START_END "Ensure enqueue table is build|$RG" } [[ $rc == $Check_Replication_ERS_WARNING ]] && { [[ $notification_level > 4 ]] && [[ -n $notification_script ]] && $(${notification_script} "Instance ${inst_names[$count]} of ${SID} - The ERS has not finalized to build its content or is not started.\n") KLIB_SAP_SA_logmsg WARNING 151 19 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Specified timeout was not sufficient to fully build up replication table.\n Not correcting this will result in a loss of information when failing over.\n" $script_name ${inst_names[$count]} $SID amlog_trace $AM_SA_SAP_START_END "Ensure enqueue table is build|$RG" } [[ $rc == $Check_Replication_ERROR ]] && { [[ $notification_level > 3 ]] && [[ -n $notification_script ]] && $(${notification_script} "Instance ${inst_names[$count]} of ${SID} - Replication is not working.\n Please correct this instantly if this installation is enabled for ENSA/ERS. \n") KLIB_SAP_SA_logmsg ERROR 151 20 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Replication is not working.\n Please correct this instantly if this installation is enabled for ENSA/ERS. \n" $script_name ${inst_names[$count]} $SID amlog_err $AM_SA_SAP_START_FAILURE "Ensure enqueue table is build|$RG" } } } ((count=count+1)) done exit 0 cat  kꆨT$od%/םa՝a֝a&%2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapStoprdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r721 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStop.sh 1.10 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2013,2016 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStop.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapStop ## ## PURPOSE: ## Stop script for SAP NetWeaver instance(s). ## ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 ## . /usr/es/lib/ksh93/func_include typeset version="1.10" #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities # Including Availability metrics library file . /usr/es/lib/ksh93/availability/cl_amlib typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities PATH=$PATH:/bin:/usr/bin export PATH #------------------------------------------------------------------------------- #Main #------------------------------------------------------------------------------- [[ $VERBOSE_LOGGING == high ]] && set -x typeset script_name="cl_sapStop" typeset -i rc=0 typeset -i mycnt=0 typeset -i count=0 typeset -i ctl=0 if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { KLIB_SAP_SA_logmsg ERROR 151 73 sapsa.cat "\"%1\$s\": Application ID not passed as input Parameter. Quit immediately with Exit code 1. Please add application ID as input parameter to the PowerHA Smart Assist Application Servers.\n" $script_name exit 1 } # Define an array of instances from application_ID and get the appropriate SID from ODM. typeset myinst_names=$(clodmget -n -q "application_id=$APPLICATION_ID and name=INSTANCE_NAMES" -f value HACMPsa_metadata 2>/dev/null) [[ -z $myinst_names ]] && { KLIB_SAP_SA_logmsg ERROR 151 74 sapsa.cat "clodmget failed to get value of %1$s.\n" "INSTANCE_NAMES" exit 1 } myinst_names=$(echo $myinst_names | awk '{gsub("\n"," ");print $0}') # For PHA 712 Style ODM entries like --> "ASCS00_SCS01" myinst_names=$(echo $myinst_names | awk '{gsub("_"," ");print $0}') for i in $myinst_names do inst_names[$mycnt]=$i ((mycnt=mycnt+1)) done . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities_xplatform while (( $count < ${#inst_names[@]} )) do unset SAPSYSTEMNAME setSAPGlobalEnv -i ${inst_names[$count]} ret=$? (( $ret != 0 )) && { KLIB_SAP_SA_logmsg ERROR 151 72 sapsa.cat "\"%1\$s\": Environment setup failed. Quit immediately with Exit code 1.\n" $script_name exit 1 } . /usr/es/sbin/cluster/sa/sap/etc/SAPInstanceGlobals if [[ -z ${virt_ips[$count]} ]] then ((ctl=count-1)) if (( $ctl >= 0 )) then virt_ips[$count]=${virt_ips[$ctl]} fi fi [[ ${is_nfs} == 1 ]] && { APP_ID=$(clodmget -n -q "name=INSTANCE_NAMES and value=${inst_names[$count]}" -f application_id HACMPsa_metadata) RG=$(clodmget -n -q "application_id=$APP_ID and name=RESOURCE_GROUP" -f value HACMPsa_metadata) amlog_trace $AM_SA_SAP_STOP_BEGIN "SAP NFS Availability check|$RG" KLIB_SAP_SA_logmsg DEBUG 151 1 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - has its SAP Global filesystem on a NFS based share.\n Availability is evaluated now.\n" $script_name ${inst_names[$count]} $SID Check_NFS_Service -V ${nfs_ip} -M ${sapmnt_nfs} [[ $? == $ERROR ]] && { [[ ${inst_names[$count]} != @(ERS*) ]] && { Kill_instance -N -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" KLIB_SA_logmsg DEBUG 151 85 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The instance finshed manual cleanup.\n" $script_name ${inst_names[$count]} $SID amlog_err $AM_SA_SAP_STOP_FAILURE "SAP NFS Availability check|$RG" } exit 0 } amlog_trace $AM_SA_SAP_STOP_END "SAP NFS Availability check|$RG" } # Format for consumption by cl_availability utility APP_ID=$(clodmget -n -q "name=INSTANCE_NAMES and value=${inst_names[$count]}" -f application_id HACMPsa_metadata) RG=$(clodmget -n -q "application_id=$APP_ID and name=RESOURCE_GROUP" -f value HACMPsa_metadata) amlog_trace $AM_SA_SAP_STOP_BEGIN "Stop SAP instance|$RG" #ensure sapstartsrv is started or can be started otherwise clean up manually for none ers instances and exit 0 Control_sapstartsrv -A "Prereq_and_start_cmd" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" typeset -i rc_control_sapstartsrv_Prereq_and_start_cmd=$? #sapstartsrv can not be used. Force a cleanup for none ERS instances [[ $rc_control_sapstartsrv_Prereq_and_start_cmd == $sapstartsrv_failed_to_start ]] && { KLIB_SA_logmsg ERROR 151 80 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The sapstartsrv process failed to start.\n The instance and its sapstartsrv process will be manually cleand up.\n The instance Type ERS will not be stopped.\n" $script_name ${inst_names[$count]} $SID [[ ${inst_names[$count]} != @(*ERS*) ]] && Kill_instance -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" #Here no kill for ERS instances is required. This would destroy all replicated enqueues Control_sapstartsrv -A "Kill" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" KLIB_SA_logmsg INFO 151 81 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The instance and its sapstartsrv is manually cleand up. ERS processes will be still running. \n" $script_name ${inst_names[$count]} $SID } # sapstartsrv is used to stop [[ $rc_control_sapstartsrv_Prereq_and_start_cmd == $sapstartsrv_running ]] && { KLIB_SA_logmsg INFO 151 82 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The sapstartsrv process is running. Stop the instance using sapcontrol.\n" $script_name ${inst_names[$count]} $SID [[ ${inst_names[$count]} != @(ERS*) ]] && { KLIB_SA_logmsg INFO 151 83 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The instance is not of Type ERS. Stop instance now.\n" $script_name ${inst_names[$count]} $SID Control_instance -A "Stop" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" -T "0" [[ $? != $sapcontrol_0 ]] && { KLIB_SA_logmsg ERROR 151 84 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The instance failed to stop using sapcontrol -function Stop. \n Instance will be cleaned up manually.\n" $script_name ${inst_names[$count]} $SID Kill_instance -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" KLIB_SA_logmsg DEBUG 151 85 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The instance finshed manual cleanup.\n" $script_name ${inst_names[$count]} $SID } || { #if we are running on a shared vg we must wait until the instance has stopped to ensure all executables remain available until completion. [[ $is_local_vg == "0" ]] && { ${su_sapadm} ${SAPenv} ${sap_exe_dir[$count]}/sapcontrol -nr ${inst_numbers} -function WaitforStopped ${wait_for_stopped_timeout} ${WaitforStopped_delay} } } } KLIB_SAP_SA_logmsg DEBUG 151 86 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - Now stop sapstartsrv process. \n" $script_name ${inst_names[$count]} $SID Control_sapstartsrv -A "Stop" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" [[ $? != $sapcontrol_0 ]] && { KLIB_SAP_SA_logmsg ERROR 151 87 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The instance's sapstartsrv process failed to stop using sapcontrol -function StopService. \n Sapstartsrv will be cleaned up manually.\n" $script_name ${inst_names[$count]} $SID Control_sapstartsrv -A "Kill" -I ${inst_names[$count]} -S ${SAPSYSTEMNAME} -E ${sap_exe_dir[$count]} -V ${virt_ips[$count]} -L "${SAPenv}" amlog_err $AM_SA_SAP_STOP_FAILURE "Stop SAP instance|$RG" } KLIB_SAP_SA_logmsg INFO 151 88 sapsa.cat "\"%1\$s\" Instance \"%2\$s\" of \"%3\$s\" - The instance and its sapstartsrv are stopped.\n" $script_name ${inst_names[$count]} $SID amlog_trace $AM_SA_SAP_STOP_END "Stop SAP instance|$RG" } ((count=count+1)) done exit 0 P lN7U$od+/םa՝a֝a&}2vT./usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities_xplatformrldd   t _ceinors#$=ENSadlmpu")-/ACGIOPRTfg{}&(02;DLY[]bhwy'+,.1:HJUWkv|3FKMVX\qx *49@B!57?jz%6>8<`8FC*ӼrqR p D4\/c^5Ԗ75ԸEPv)5d;w[ȍ-tRY%DIXCC`CCC!WYn2+u (* ;,A',P@'"{%;vL*XBN(&%츬kƺf溗JR&̂;,UHU@_Zn0RN+@v;*\RHqZMRɀ#iӲЭ/+ \)30m;vDQKpJ-kB+BрV A!m; hXP%v;J•BHZ&EnXuYahKΛNՍ^!EqA|d2t+YZHm;vL*XBNE  KkZw*aLB٭R2ƒFC TqZ7Uk )f'EU N A 40CAx`fTkN9@DѸ®XYK1:.ӎieA劔McN;Iֻ )f'Ei 2}rֈN9ӎA(J9Tӎ7.+YneezAu#.՟VXbt+%aM1zvwq 3րJ aƜw^ ̭=]TZՖ4e "箪٭FCg[Dw=uPhQH{f fn0bm`zIH$@ՃI e<,{5Hz^["‰@8`&'I@8b4.@@A xXHz^["U]TFC 7w=uP)PX"D4Ao@xd=4C@xd>UTD@xd=4:&͸@u"M чF&LP ]]TZY&>^lA@zE@{5FCכ2y4ʈp LAS.箪#!=]TFCQ2sU⑐Yo ]]TFCޥʦ箪#!UTxQ'=uP)b*97rbz9w>4RũK+ 3[:_39 d,iX^y&'I oA fH[4 4XD$8@% !px3꣪XYK1:.ddg7 xh(+5+Ûp@T oiU.@`4̙̘6~6miqqqqqqqqqqqqqqq8- f|ՅyVd]qqqqqqqqqqqqqqq6؅ax券 XDM"u'fON10gt䰾-:+\XV/՟)(A^褪k3'g'R%[de32 XUɭ8-IVc>rM`f CA ($4R@QxXޢuejap/^+5wم"IE”Qx\(Ӄ};RR6 ӹR6 FNڔ* FNb rЭKN E)+^lN|,&VeEؤ ̥:RpPZF՗V u[b|+XW͆ l]VU|t @1.+ G>rMg؅axQWI[bBtz+p bF9]&28% Eb-9xFx+2wWE#,`f\`K6؅axtbBtpHػ/Ŋ@58tΪVԥց,aX<"1(b㣑.jIp@dI[l]VDV2'Ȗ,Pig+uTb. ~V)%][R箮7s`v!CW1:eFXXEBišlO3 bBtzmJ]hu#(6؅axQڔ$ Eh*뛫jRYѕmI>jRƴB'Ebt9Z0r3DPz%qh[4*  Hh$m *ڒ|[RP m Ŕڔ*6-.+ GR6jRૌ)v!X^:q$m Bop=Tab㣒{E m Bop=( m Bop=ċ@5.+ G% +I D=R (YZMVػ/$ei7c=.+ G(YZM(EE$bBtppj(D@@AX```cl]V EPXP1ċ@40001.+ G(YZM(C؅axQ% +IUw/5P{l]V EPUWq"Ȣv!X^:885IBouU]( m JV{$Xv!X^:885IBouU]H mig+tJ,% FVԓ5u aE}u apoH3X`Q% +IzoH3X`Q% +IՅػ/$ei7^j m JV{EE$bBtppj((Emv!X^:885IBos\H[bBtppj((V؅axei7rUX`````gv!X^:9(YZM\H(cl]VJV{W P ,00001.+ G% +Iԫ "h````cl]VJV{WD=00001v!X^:9(YZMܼ@l]VJV{,) b㣒=( m BouEb㣒=ő@ kN#9]&QgV(R6.ʶ ɍi5؅ N\#r#,`f\`K4жi'XTb㣒Qċ"H6؅axei7p"bBtrP 8b(؅axei7qdCZӈR -q[R٫Nx(bt^ 'Lc-c0J YI>j ػ/qh0^rq@ػ/qh0^rq Y"i@l]VDVZ/R99ɸ @D$o؅axE`A.3,XdV888888888888888wH3qج)SnkԸ]Ef1 w@:[ԌڂAņ :lRa(+UIu٭ai+bՀJ M+q5H:A7: 'Na()Ho():)q,8888888888888889#9]&)uH,iԅay\ؾ2Vk|R@ & L0 l\g&oԬ3r&qg&%ɔI.@&ps8jIQxpd"`gɤr E.@&ps1rd@K,IDoj - >4tc=1փ&bBr؁&L=&߱v!X^M <Ё&L<ڊ1bBIpy2fUyɇyi&\DQ7]VI2"EI2"Dq1 L~؅ay4.A"("hI N<4.A"(TM.+ Geae o- +:Ɩʋ+JƼkET_xZRkd Bb oRY`Vbt3'g-,KN E% TlVu(1h) 1pTxV[dgXoQeaHŦ {|&4TXPV\V8I1VVRHj -犩%Vb .+ .箪 ηh -&T~؅ax=4K9몀փ#!gh%3oޥa<$3v/73'g,tΪVԥց v,c8-IVa[83^+5wY{Zefp/^+5wم"IE”Qx\( JXAH'NAH')1:'jR')1:'sa* B-8P% oymBoj!V^AX* YmMa^Q X],&VeEؤ sa*J&]]T L ԒDPIJwљv+)KYJo%vkg[ÌLAUc#;YlQ|)pWR+ج;50Ne[RO[RR+3HT.+Yn4b_UK\k */@ Z{[Rج8ʶSog=uM4 A#ypy2F9]&yiD˹o*g&e$E$P82}rӵ)i(&lf]VGx]y3 f22DHy@\LQWIhQ2zJ扤r E70̟qJZpJ/yɇ f`.CG |^rqdB٤t) f|Հ3G@,箩a$o< R.&X+4 (w=uMLDLfOXAHى8P%;RpXhf1ػ/@3'g'R%[deg=uM HH9a#f'D@_J\agH[45Gr>^p^{3'g'R%[dgH[4?oIg8;og #+3 #9]&)uH,ǹP!жi'XTAmR@QxXޢuejaR@QxXޢfTA% QEp87ӵ)a#`;#` l蝩K l͆ '- ڔ@_ͷ_% +Ik}Y{`'Qe)7µz3)FFwΔavpPZF՗V u[b|+XW͆ <=4K9oy 4ɖ6>05J&]]SxS<4.A"("3̈́@_v!X^:= u'fON-JH4Mz4 A#ypy2F9]&yiD˹o*g&e$E$P82}rӹ(%qhخy<( tQr3k982}ru!lUFFqI>jϣ!lYDV[GFW f3FrMgUF+jR@X܈r- f|ՅpN "+]Vԓ;87ȊFU$9Ŋote[RO $M"M؅axz@,箩a$o< R.&X+4 (w=uMLDLfOY(X V39oBY AYN0̟qH[4nh%7h@F""e>rMl@҉sT:T4M$ːH.Hqd咅0c9otQr3N0̟qH[4ne!lOa6Ig.jIq@o*4MyDQڔ$3 $Yz扤r D߷!,C ]y3 f22+0yzh72WVԥց-Msyi&\DQ6 Q5+z+4 (w=uMLDLfOY(X V39aHAX")uK^&Eo:r(9zs5לa>9:i*##8B٤5` mB٤ȊFU$8 @D$ͷu'fON-JH89XެU;FJH_Vԥց-Msyi&\DQ6 1|Lu'fON-JH2i'X4K(Xc-K<te[RO,Xf$jR(9zqL2}rWImJ]h )1IWVԥ 1Z$ 0H-F+jR@̥omJ]hq"uյ)mJTb. q[Ryz!ԥVFrMgUF+jR@80'hI M40xs""e〜@Lil2Hoz.5לa>9:i*##( >rMl@҉sT:T4M$ːH.Hqd咅0c9 oE/S8n{3'g'R%[dgH[4= gg.jIq@‚B٤)uIfRjRmJ]hog+uTb. cc)c1I2"ry&oy@\Lph -&T8Cy =oN0̟qH[4nUF9]&yiD˹o*g&e$E$P82}rӵ)i(&o-J 皣͂ oE/S8n{3'g'R%[dgH[4= ggF9]&11<(+ fϪVԥց'QJ22 fϪVԥց'R+AW\[Reg #+3 #9]&)uH,ne@\7B٤5aPf 9:i*##( 3FrMgUF+jR@Z ѱ^2 (U.L\g D2r>^pu'fON-JH f,E$ioUG5לa>9:i*##( 3FrMgUF+jR@aHAX!7=]y3 f22ߤ-K< HT]3k:2',iԅay\ؾ2Vk|R@ & L0 l\g&oԬ3r&qg&%ɔI.@&ps8jIQxpd"`gɤr E.@&ps1rd@K,IDoj - >4tc=1փ&04bbQk*X!(@3 z-jRӅQ|9a~a [nJ/ Z+-CQA[|l)7EeNJFF{[LqZl)cKeEeaH!Cee.xUhv+)p)bBQ2z0py怘QbeMo]VD hctl oI>j 0 oxZf[/|+S Zf[0V2 (UR/ K))#f'DJ\#f'Dl1A9hVԥ 6m(YZMD#[+A:-I+љJ23tk 7 B5TZ½nl1og=uM4 A#ypy2F9]&yiD˹o*g&e$E$P82}rӹ1ػ/@3'g'R%[deg=uM HH9i f`.CG ԅIVR$f3>oIgÃKsW>^pb2S0̟q3k:2',nKsTc8-IVaX$4>2'յ)pU e#n1::. &ͷ|YHیNK0V*ڒ|aH]sumJ[Y]SxHy@\LQWIhQ2zJ扤r E70̟qJXͿػ/@oay~f4noyzhsT0B7i),l}TakgLҦyi&\DQrE 3'g, l蝩K拓(.lf@o ԅIV@aY]Sy$o< R.&X+4 (w=uMLDLfOXAHى;Rs&"P\H[45Grg |^rqdB٤t) f|Հ3Gϣ11<(+-K>2'յ)pU}A]!lYFbtumJ\uxMoH[4x[R\aH[ ԅIV@aY]Sy$o< R.&X+4 (w=uMLDLfOZv/-J 皣͂ oE/S8n{3'g'R%[dgH[4=%Vԓ Eh*뛫jR7sW73'g,tΌjI .zꂀ oI>j 0 @PHoy(YZMD#[q"ȢtI>jÉDL%Q7 Da0 Ʒ~PKn/q"Ȣ]!lOc<4.A"(TM!K&Lk87ѐJqD@@C f|Շ扤r EJoA Y0Lc[/ 0-;R[ S.i'Xq1hI \\D&@Z% TȦ5,&VS,)7h%7<ЁD EU|t恥.箩thI \Cx % +Ikc6bBtz=`.4no$%hI \\D&@XLcq1<(+5%x % NԸfQ4G |Z+-wNY9h % NԸi(+ -qڗf1D @\7>^pu'fON-JH2i'X1{i,dj\kq{Q( ԅIV@eTakc3'g-iڗ_%u:A.3[RHt" 1%PKn/t)LⴛZ½# QԸ\|eԶk!&oyi&\DQqqChLn&'fX<"A.3j[5&e$Ery#i),ocKeE7h@FccBY~E`A.3Ig 0-;R[H(Ą3Ȋ E\g'"XBؘ%PKn/t)F!lY % NԸ P m-K<,&VdQImG!lh(+-K<,&VS,)75לa>9:i*##( <=4K9o<ЁD EU|t恥.箩thI \Cx % +Ik}!lPW<lcg |^rqdB٤t) f|Հ3GŢ!lY(YZMD#[tn$YR>šIp (*\;[Rٮ) S"r΀!lYei7µmҝdQI_k|^rqdB٤t0fOY5VԓElWJ-rK(3.LF@\77=]y3 f22 f,E$iops~Qu'fON-JH7 f,E$ii,e؀X[|B٤5aPc|q$ H@5u!X^f6/(T4Ņb30uɃ" Ap3ɾ+ qɿLoNU$i(8 L03L X8992aɇyB$o7D ٵA: 1FkAQM$ːH#ÂՀ3h>0=2aL|2o"e0^pb2S0̟qPrb.C Cf η1>4bbQk*X!(@3 z-jRӅQ|9a~a [nJ/ Z+-C;9G \m󁰤8-;)VYnR+q1i:8 -&T bt-zUw^pbb/bf}!V}!]01<(+-K7Ą !$ bxPWH[4Ϥ+085FbxPWH[4ߺ(9zq\]r&̕h,P'-K(!lX mi5: BwFU$4:/3 J o*\A±Z\غ `8\͋Vmz|ظ\d&7'*ڒ|4^FAYȦi&\DQ@K,ILo0dlљ7py2Pr7ÃH8 -ɕV9VԓƼe[Qe-LVu(6[*,L*\bM8š@i AIeC0oI.@&ps7/֎%1D^Pr7Ã&ͷ˓(. X89F΅):s,%שpsUVr[BXD EbbxPVɖ@{5&LDsm4i[TC",VԓPN -q(SjI-Me-!,D HH9dei7µobt]KE?Y"Bb(& 85\rJ,HD`Qp= "`Qre*M"A0pj(2 & 85\&tR F C 𠮐i,@P@\Wee. 'MVNȇcQe'ZQhlRok XgI2"GoLxGFW f3FrMg@$άPl]ѕmI>L`.C.+ G oh%7<ЁD EU|t恥.箩thI \Cx % +Ikc0tW|}O`pH|' htQxj¯XZ-6j[5jR+Â1X+q^UHK=XUA ` C0N B11<(+4V5b]1"C11<(+<,/FJV{E[BYƬVԶk0!11<(+<,/FJV{"V5b]1A]a}2Pܽ\Hhz-!D@@@f&'tz~Borp"ѭ6!,aW,\g-1 f 8P% ' g[RٮEE!#% +IГE[BYƬVԶk0!11<(+<,/FJV{'D?5$%jmKfc  "3‚=?dei7q"q[BYƬVԶk0E#% +IГQ(ƍo g b9h!F@c0f (P4f&'fjϣIgoª=Prby扤r D9؇~nq@g #+3 #9]&QgV(R6.ʶ y@( g=uM4 A#ypy2F9]&yiD˹o*g&e$E$P82}rBoj!'1t+> ±Z ^.3jmKf ږzڔಌV WUo6ϒA bi"3‚M!,cV+j[5CH(3‚=?dei7Qg,)cFĄՍXlA adCbbxPWGxX_G,&*,ȇFĄՍXlA a"FbbxPWGxX_G,&*,EFĄՍXlA `"11<(+<,/FJV{p"ѭ6!,(4DEr3‚M$%jmKfc EbbxPWGxX_G,&DˉE[BYƬVԶk0!11<(+<,/FJV{eőƍo g[RٮE𠮏@𰾏(YZM,@G5$%jmKfcQ(A]a}2P.D@@C5$%%"Tf&'fo g[RٮEE!#% +IEH(V5b]1A]a}2PdYőƍo g[RٮE𠮏@𰾏(YZM2,EFĄՍXlA `"11<(+<,/FJV{8E hBYQxh!RC11<(+5HK=XՊږt,) 𠮏@𰾏(YZMq"Ȣ4kHK=XՊږtD^pu'fON-JH2i'X1{i,=^78<@@(9zqL2}rWIYՀJ2'  1bBtz=Y]SxHy@\LQWIhQ2zJ扤r E70̟qPZF3 Lup>|'1|>xVH(%*E[Rٯpn^.8,[ͿCj ZtHK=XՊږt,) 𠮏@𰾏(YZMTYċ"Xѭ!,cV+j[5CY񘘞#% +Iʋ8!ѭ!,cV+j[5CH#% +Iʋ8b8ѭ!,cV+j[5C"@LO  E"@4kͷHK>J/ 1_5AYOV5b]1"C11<(+<,/FJV{,)cFĄՍXlA adCbbxPWGxX_G,&Q,~4kHK=XՊږt,@Df&'tz~BouEFĄՍXlA `"11<(+<,/FJV{ P!mϒA e*J!,cV+j[5CH(3‚=?dei7q"Ȣ4kHK=XՊږtDrMl@҉sT:T4M$ːH.Hqd僃QD,&V}\8 Lr> |,+ +,|^Wv!)|íK/e/)df̯):23FL՛ gE᠆1X 2eL AY}mKpj(=$Hf&'tz~JV{EE,h}mKpj(2 DjϣIgof78@ !73'g,t΀IEXHػ*ڒ|2 IP!b74Mzh@F""e>rMl@҉sT:T4M$ːH.Hqd咅 B5Oc>>W|'08$>Ņb:AEy(5aW,\g-XՊږ{u-)we Vm$%% gWIjڔfWWjڔ2沰H-+ JƼe1ER)qѱvz-!$YRA]a}2Pq"Ȣ4kHK=XՊږtD ±Z iBΗE{b![R j\:ڔ^QR^![RFlR+:dY |^cbbxPVi$%[R᠆0.,I"iPWGxX_G$ei7EE,h}mKpj(2 DA QEJEŁ$M"A0pj(@Cq1<(+<,/F EPUWp"ѭ!,ڗ 0 E&\R$.@ri QEAiE" Dn&'A]a}0pj(ꪻƍo gE᠆2/\f&'f1pX`3efO^ae )7µA `85\XD$3𠮏@𰾏(YZMq"Ȣ4kHK>A `85\rJ3‚=?dei7/]ċƍo gԸh!pj(Bȸ=$H& E(Hn&'tz~Bot^Q(ƍo gԸh!pj(2 & 85\rHL.H)H#q1?  w!mϒA ea@(3‚Y%ج:(P3}mKpj(=$Hf&'A]a}0pj($YRƍo gԸh!.PTCbbxPWGxX_G$ei7c #ϭpC`Qqq`zIHL.P LO  QD,&V p"ѭ!,ڗ 0 E&\R$.@ri QEAiE" Dn&'A]a}0pj(*C5Pok982}ru!lUFFPAevVRH[4IEAcE/S8n{3'g'R%[dgH[4=H[4}7Ʒ>k982}ru!lUFFPb w͕;Յ‹Pj<#ػraFVi'Xs1 oG ԅIVR$f3>o-K ops~Q}]y3 f22>9oQeFqjNFxɆlc~g |^rqdB٤tB٤p@D8EAm"+\ Q|ƚoZ$ 0H-pfPo ,Xfԅay\ؾ2Vk|R@A@0 ro6J>l\g.2o#|&4T[&WXi(SY^rhQ, X89 :^i. ]E btQc&LP!"HM.@&ps7/֎%1D^Pr7ÃkR:bRQzo7Qg(7>^pb2S0̟q"xEɹ8P%f߉ʓH$6 (gsrhQ,߱XIN0̟qH[4nh49oh4:&͸7rhQ,o0V.CtQr3k982}ru!lUFF[H[4z%-o= >JoL`Xi^z@2nMJ%VW׆ks^L) Fpxy^tˑ* օVLeȕ9Jb"[g*D@1G=uq&,[Vok982}ru!lUFFPgbr%u$+rq F Ejѱ^F+ B G ԅIVo%b o=z@2}a@_ R#<' B1z]]\'H%\?y.d͌ ƍ‚M|^rqdB٤t0@A@zE7,W=uM㟞i2@ 3y"`\7g |^rqdB٤ti,K([;xUK ^l9kM-ζ6|^rqdB٤t1 =5$Fe(( G ԅIVo%Piu zյ-5fmCQk$% W.`/Ij-YJ,VԓPc|05Ҧ0̟qdM -TakcL0̟qdj\kq{|B.l_+5Pri o hfasb& DapaPg6.3}YVb9q8jIQxpd"`gɤr E.@&ps1rd@K,IDoj - >4tc=1փ&>W|'08$>Ņb:AEy(5aW,\g.YcV}"rC` A.t VooQeH rbѱ\b11R #](Sa}äZ/R9u-D HH2' -qPQhreF7>^pu'fON-JH2i'X1{i,"xEŠzSp@dIay~ƍ‚& %\7BTƍo9Co`7 m|^rqdB٤t205 F@a(ZvƷIA]NahKԸs1 P 1E/S8n{3'g'R%[dgH[4=Ig.-ԸNDn,4mmu'fON-JH*[a>9h % NԸi(+ -qڗf2EYP!7=]y3 f23-IVf}ߤ-K<qh0^rr%-V|+XW2dd3} z˔ږrT$mk@x*ڒ|ƚoػ/#q2gr 0|dBɤ-,+͋0b`AH0@sb97՛ޥa6.37ɍʶ %QVA2){I PA~&:؀3h>0=2aɤr D|pZc٭FL$%|i&\DQqRlLO‚i&\DQqRdZ9oQeJZpJ/9,/ج1 bEEeHj=b+o !h))Hbޢw<‘[7M!Lil2)1hpbùZRJc]e.7]VJ&]]To<[*,L zhsU٭FC;<=4K^pU0J׹Vi EVZRlWe r6*<[*,LhI \C`g ±Z U]EUHVͿaW $Yz gUZaKU\ky!, PDy ,u` V P ɈǞ$"gHZa.teyb%L{TZLUǞT< ""y(/ OY \=en^biǟ*L T1ǟS*T@ǟn+Fxec &@pP 8scnYЕ (0ifЊŹ- z& LyUXB*a7ju0nt8PX9- t{Kz·:BQp,,sA=QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQZa(Ǣ(((((((((((((((((((- hDCHz@*&66n6B* zqh:SRuDCHG&66nnfj&Q%DI&66n "S ETST4 L@p(Q!È&M" |ƘzZ̋PD"1, $ xqɤT=<-8) R"LA@$UP:j fE",@0UH :nrIa" g ,ԅf1)@j"9B$X8 PEBŖPp)%,AYHX4SPWKMUHDr'cMEH@EH ntAHDjJh)EH@EH ntAHDjJƷX3 i 9i 4R &4Ru:*A<<<<<<<<<<<<<<<=}og(5$ ev,# QNFz= 0XK zǦPK$Mb ,s{9D%]uZ'HXD(U"~qDUsI& $D< EHHp/[S ^Z-.XJ:-p$Mb ,A%Hcڜmzjׁh/ү똵Nqyyyyyyyyyyy>-7]hHX"I!UEGItDA1,,CG8%(+TqĔ*@ e,,s(YeYes7 GfEN!2/ حQ q^AJ.wiB$Xo NM Hc@x &0 B!P W;5@jES7`vIa" ۍQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE7 D13%ѓmͩR̗{+FL\^fiL%NQd'Uۥ|X(̅\w{K̗{+FL\^fSnYeL^̗{\%].bɋ pSHx5nWں]xɋrE٥gKocͺ6]s\rK ðNWBkǸ3"[&/"Mv[n`>dlpfe\~Z۝LX^ģan=- hB2b71 n)Kr &-ҷ<_/;kD[:2b6v/X%4 [7ЉF..jptQB2b6sB%Š9ѓ)QIFɃ%_/;kD[:/3gbq c 58Fc1~ƍ(4"pѥ8ɋf FL[0F4۝PWKXT8ɋFL[0\ĝZSBHr Xd) ɋ.wiBkLIJP&o.ۮ 5&L$1k1;}}߳%DQ!-  ""WKt@^w{ OHnpnu{ L{iT+wL\]補dl pKA=KP{ LM2]Im1;{[ю!@*A" hiy0dD 8UxgFx7W1ҨV&&5G9ɋ {4&*̼'UbBmpSm*-¸1lb=K%~%b e>/{ N@A10#h w-)a*G@hiG P4D4?e/\"nl_]3X$Ð4 hفE7ų"7$%8vbk lLLN9FL\^fwWģnbQ1(ۜ{1 .xɋ7UI!*A@t `F' 1qw< 8ŲζinHyR*+?1l*fxHu @pSkp@#@p\ĝBZ1bbxwjG K@ hg"MN,C-W~2*9S 5&U%C KABeRT?DŲNw- hL@*bb}L\]IQ5"dO3nĄ& Me IPp1>..U2PTw2/3P3qcAT Kw2/3UU äXtcPTfEfrjl n1WBe>MV1gtS(™RpNwɺy-8V7VlDZ-L;c` bBZ&ʤ~8vqؘSLr *fEfqAan,rnbDfd_g&*Iɺ㱈(LJ "395UQPb n 8`촧ɪQ"L330!a-Az WθJɧ bBZ&ʤ~8vqؘS<&U%C̋$ äX޽qT`XF';[ّ|f& 2*0,#̋UEC1'lbeVo+&iOUE\_:Ҳh330!a-; w S!- YBeRT?;8LO ʤ{ّ|Drt ;B!19l̋UEC07:Av1 IPad_g&*V;c{-"J|%b( `AB!)) h; w#  bBZ&ʤ~8vqؘS$&U%C̋$ äXc$Nw4"395UQP:MŎ;ʤxNw2/3UU +`[pP5XJ8QeI(™RpNwLy-s 1nĄ& Me IPp1>..$jcPTw2/3P3qcc$jc19l̋UEC078Ɍv1 IPad_g&*V;c{-P50vZSa(F2c (8g faJB%19Z]S>Sş8%4.fEfpIRDIan,pك]7U3sPI Aw۾!-v 10oS- hL@*bb}L\] @]٥fEfrj_iy3)2홸ׄC1h XUHs3[lHK@pś+\)M׹qZ%A!$^QYL3"Wݎn)W0d"Nie@0]XicXKXz5WB5mqL^ZL!hD*Mwǒ0bi0];e4QzUdzI&OEAadI)R EJڼ &-7;e4QzWF2c$jxfFM" 3jQǘ]}dp" H1"#,%yqXh&fr$< p[-b(Zy Q w%T)&/ksf S(=c'!k5N/]lb>j|IMlZS oe^ŋcK{,VBag;s@^f-wbY1lQ,}bYپNwbYc Bw%͛i( &^f(zE*^@kpK-)\XK^C0sh.QNFqc;b`[wJ𦼌KK9Qy7I&f( `AB!a`D#J+wbYz=wI75[F$ײmqyJ{*ag;s@^fgtCыԉF/3`^p"|/Jɠv$11`3kpt'|nk D3m+]*m+&ج$ BVlp*ags@^f:(ɺ@tv3`BljDɣqK8BGL]6.301xكd-)V4⽅w bBZ /(5Hcʨ5JP&& b\ij5yFM̓QCA(2$\ij&D c.XJ8H%͛ˊE7\69g$L,,g .XJ<"ZS2Qwh9kW wfŌ\zU"_ڥ_:b-xRxSWZ1x*bMt^QX ¡7;V㏓7y΍Ҁx(36JcxF89Ld]J[<^ڜLP'̂N fRkrsy)rIx prTQb);`fBfEfqAkrzQT,#np,[fE○N$%z(=BK(qbxiȾ "H9@BEf%t*JoP , zD65d4 (PzP=`" w0fL` P , zD66wص+{d_fmRِ ů]|[kjv+ 7FBzّz;Ą (Pzq MF 844AXA@&m\Ɓ P DA3n2 Ɍ J%X8f1kҞf-s ͊.Dq NJ@i v[naw@\nasmk+s +s,jptfbXS"S4a(+NfENrjS4fZA.v;+Wm5)שP/K3fy );`,# &i[pS۽z-pZS%&^Q-wUۥ& S kmԛfs wBZcE!`{I*!H "&CCI,^  bFŶY_{-/SxKcF8h0q1<\_43"'95UQP̜d>eHQ-[MyD ;`,#i[pSw\%n[a)5Y4̗e1|V$UH8xATNw h8'|ӿّ|JL^,q[Juun:b`XF';wV6{4fҳ2^i󶳊X"%Nw h8'|ӿt^FL,S|iWͱ)׫!o3u|2a7My1DA=FuA,Rlui;s!#t8n=Ǹn4 q F^@~)^EVp|UtLZpn8"Q#aN=(qDA%*MUTWσ-ct"_U={ZA S(MZpn=e)Ȼq It8DUi>o3uӔ7VZ ޼e2)xZ\{q=΁lHK(5Hcʨ5JP L\]̋mzxCm1KVm >!Lq^Nl$%DA7ӄZnxl n67&S L)HDXF';unqUUX ՒT<5Šd_g$fg.+ 7]AD6qA,A!$ fֈv[naw@\nasp,Tl[e_/;k-ҷ0].b0błXP-!,8(+jptf9- hpvpӀ1qwe69C^f!NlHK1l^fó!5Yj=][1)@гN-[4 "Q,ԅfJ^QYLplBqy!5Yj=][1)8%&-GRz˲+sYyF6e?&h㈁B99 \% Ҷg)"H9E$ W^QYMif-s0eVmzz0ntlIA"jjR@ԛ&Ҟղ;,3V ,,,;`RR P.Bב% BUi Rz@P@2W&T2XAsHKF L&'"38$"$2/-oi"uyD" 1UB [^2 Mc@q;}ox*1s`̘]AD66Z%&T2XLh8fk&8h8fk&Hh" Z%&jAD6[pH5Šh50S[ $Ma$*MRT%ñ110oS"+8|^těeR՛}+9iOS,W%[4:HK@8x,,bb`ަ..d_g&*Z })loB'lm>o3uFM™RpNw㦪*@!!$y@kA-BZI)(.&& bɪd$ m>7ӄZnxl n67P330!awV5UQU Y%C\Zo(D7;8L\]"395UQP̔CxKc}8EV;ciy4Ph8g faJB%19:j$"J9I(Y." фeh% h(D4XF'9BZ7h8f1<\_;!%I$1yh3{O-($O@qA2`*^>v XF';ms&o=y|+Wsd" yHXKPq"' XT9XK zǦP=" DA%$ *R*s&Mb! n)Kt@͎"HTMbA)5Jon DyYyF6e<Ŋlmhoi` Eh1 c 58Fc1~ƍ(4"pѥ9"d"9EbZ &_/;k@Ч@$%2k ;b\ijUU Û]}wͱunүsǐPESDA%Lx=dUE]<=`T2T$8ƕ|WZ1HB!үJpW]sc<=aH㈁B99 \ pWz>!LD1_@%7ōCBuKwꇎ@5Lh"6L/u7LGz i.QZ @DɬD4vA!$^QYObb,yZ"ثn},a@lf/ѼeN4ؐbb}L\]krjsq^s Y2Ҟ2-ҷ;c#U^wHc(5$ ǐA&TQ"yүB2(D7B!|D1_$ّK1$,i40] 2k œe]v[w""""-s%œe](D7B!7ŌiW{6dR@%fZ/3c.ʡih*mhgeVy;,jptaNlHKAvV;bPzI"!rr̾//tպIx|Xȶ-ҷ--󶳔"I3-3i5UEV@5Lmm!+s`+ T>--󶳓UU8_,1#]aNin@BLr&A1UUwS(=R$ʑP$O#U^hTQ"e(D4`HF42)s D7ō&f r!&Mb!8St1@DS$Tq@ySzVҞQ"dCq"3|Xƕ|WbI(0,%hyz U3gHa*MrA&Tr=A7ށ" w8%Š8wfGA@&.bNwFLZТc3En/RmaaNlHKP89hɋZX Ogbd`1 prѓE;3g;%qDDBĒLrcE!`{f VH5^f$PD$S(vA!$^_^wtXX c 58Fc1~ƍ(4"pѥ9- h(Ihɋ;bǐA&TM{& x̴*x $Mb$H$c8SPI1x$d`Y!/A@&. 01>..PzI"! <=`T2T%APYfB>&,@b -1tX LfsyzLQ* ew-PzI"! <=`T2T%APd+s w Xz")*8C*3]񌫖|9<=bR* $Mb ,1-8\Ĵ  XTlÐ4<=aL=E@I@S(=R$ʑP@"""p;4DA3nsunq ŎEs%&-kOunqɋ<ѵ׺PqF^Lo)wy̔][ts^2|;Sy)rIx VMpNr/;1@NB2 ;X,PE!y3 ܛ[Ⱦ "H9@wλO4e HySaaMFΰ3c0 S)Ѷfƪe7H4b6Ti&U2e iPnn-yhE2šSx x׮UהkncE!`{ve*=5P LCI,^  bFŶYE *Cn!-';bxifENrjL\8T?Lu1|^f *C|یa#)t,xwVoqamۼUH H H KvUKK]/q{ۥ-ؐCgRN}L\\lHK@*%L_/;kDWP88@$|JP/tKX HH;fd_g$!vIqb/zQ[_:=JPYunqlHK@5Lh"6L/uLw`r&Mb!Ŏ/3c$Mb , MavA!$^QYObb,mhben,, #]Q-PhDK AGbb{1qpI(]`" \kж70fUZS4e juцPC n)Kt@0]XicR "T$EST vA!$^QYObb,mhben,, #]Q-PhDK p k:۝`fe % ANsֹgHx:=ckS 1Uc]l\ktHDl2Ľ t{K/(׬=% $LCM^f&H5bRXp ;s p4 bBZcE!`{f V42k 7,qyQ"kI`kP53 'Gmzx,5g/;kD[{-.u`v`^/X%4lh2B' \`V8vp( ;Ⱦ "H9@B<(3xbXI0RrҞS(l,PWK2H ktHDl2^=% $LCM^f*D@I"%*! 'Gmzx,5g/;kD[{-.u`v`^/X%4lh2B' \`S`@#]o7 (T,X/ sֹgHx:=ckS 1Uc]l\ktHDl2Ľ t{K/(׬=% $LCM^f&H5bRXp ;s pwJɯ$ @$ @$ @| bBZ +Jɣ1=S[.ʡih"I<_/;k@ҩ7]óLA4$v&' SȾ "H9@B<(3qcj"_zȷJɬiT 9`48plHK@5Lh"6L/uLw`r&Mb!Ŏ/3c$Mb , MavA!$^QYObb,mhben,, #]QKcF8hó'bb{1qpf,]VfK2^vP &BZN8v 847bY"Nie0B.{-P$v.5Lh"6L\^eHx:=ckSLw`r&Mb!Ŏ/3c$Mb , MaskqYyF6e0#^v8v.5Lh"6L\^eHx:=ckSLw`r&Mb!Ŏ/3c$BB Tg9p ̋$.ƒ0y.5h[3+&ҞS(l,Ӻ8bwbnP '[׬%ڸwJM}i+3%L_/;k(UbRw h8'|Ӽ ̋$.ƒ1JSrV(U (A0,B%XJ!g;Ӻ8y{F k9jOѶlbЩd, ʘ8S^떔 ;fKw h$<;8 1<ĄV8v 8չ̋$.ƒ2Rڸ޽a(XJzL n$fn^B|)% 9չ\ ';V㏓Mx$3kt7w .Ҙ/gSa)W~-ҷ;cV&潅e*ׄv"S -s ^wJbVL-xl 3|-LZoe [xj B}L\6OQwI752b/[w0^=7c]u+s {-8G~Q0+f^<:S2e$b T`B%S(w&뽦%w"38 5;4" 4PiDI(l,#BZ7h8f1<\_;ɪeL^Z Kc}8E4DA3{c *¼d,ۼ Y6AD7[eP h8f=#{i.QZSV",dI(`[pӬK%Q,7mQ [ƊB#d]/8Uc4Pic(JLDB)"NieX8k*6-/%/X%4 z[7ЉF/Sx,b ;{^f{w|Dri0BRkɲ7f r! Ƿ9k 5aaů+sYLwD4ZSbS̤^H[kb$1@SaⰉ~/^S]4}a(Czbs3S&&w10dD {M3XJ+Aٽc$H$TA!$^QYObb,yZPۿĄpp>ig0]͛wI(f i` G"1_fE.zP h{M3XJ+Aaan$%Lwc|ӿ5[w5C<n;i.QȆT@5Lh"6L/u69T(Tzk@% =% 'Gmzx,5g/;kD[{-/ c 58Fc<^ƍ(4"pѥ;x@TX kt۠ B#WeV5VA|"ZZ+*L_xKD; jptb-eN4_c~//ubCx[\ŮK1 j^Ed&/ʸWDewSq}eO%7:.V69E3%ѓL_*P52bNĄdŝ2]1kElLMS ?{ u1 j']L^DA=cչ \ij4Pi $ *Ca{M3XJ+Aa (U5V$je Lx+|OHD71 eͻunq>-(۽F!-f Vfd_g&*f r!i72ҟүų"=DI(o-)''JٝE xwV-yi78{M3XJ9y;ّ|f=[;œe\aunqn\Zoœy7n:h!<& E셸QU2[n|nkYb(re`/E]!qJXJ8"|6CLVºНp^ĴQ('Jy FLBZu1{J/%2bչ&.tmu<]]{1#[^s x,3%*eVlj$װ UNEt(ZA'2\#LP'̂N<`P@89b(Ax ?+7&3"38 59i@ҩ7i!M$jf19ΨMF*HFMFjK~ҝialjS}4F/3nT/][I2a($jc9 h(PzR*,M5q1<Ą&Mb$x ;`@PTbbxpY!%I$1zLk E؅(ͱ=L^DG1)^pjyYw3}e]L^Ľ m>1iȶs|JBi` D,unq{pHc3JM}i+3%L_/;k8{sƽ*ؾu, c Ef0)BZ(U"g*BB |f-ҷ=w2׶+ɘD'k2ӑUnq{=$׺L^-ҷ=OaX>Ƽ;^JUC(U" ;pn1ve3;޽a(#;q^(nNソ!-I*o;:|v&&NZ.85›mTZZ,lKSn}vUKK}7{5&L9EbZ &PM<_]谰Pޑ2`-sH5iD+E!-$L/|ӿĄ &6hj 65I& 7mhJa q1<{d_&*Ҳke3;CXJQ1ag;wV6| bBZcE!`{f V42k 7,qyQ"kI`kP53 'Gmzx,5g/;kD[{-.u`v`^/X%4[7ЉF }L\\fEfqAkaM4}a(^ W-)U2pkt۠ B#WeV6G6Zh_:@DɬD4ۀBZN89x)jU␍GhIFɃ% ^si.QZ @DɬD4lqBDDR*X"; t{K/(׬XQmqrEW]hłXMN([Х^)hQbnT`5j)WB5pFnУ7mB5ws t{K/(׬bpnNƷIFɃ+|Kތ 'Gmzz ^si.QZ @DɬD4lqDA% =@sunq.68HK@CʛΥdؘ벨|"ZZ4L/H@$BZN8̋UEC5ʹ ,YFCC͆hU2SH@$G|B|dŅ[pS۝- hIFɃ% ^si.QZ @DɬD4lqDA% =@$U/uX#D LT<̅oD4U/uXz&pp;AB$Ow h8'~wVչ;6չ\#8n81tx$3kt7q2){0naVlbciy΀ǨZntem{AkYe+qÈ&#}!9 `W<}-1@y3(e4qJnnkE`Z7={-ҷ<>rm.nm0~/M{q"Ĕ LNp퍘Ru y%S7šS2e  šSStϩ^M6Inqҙ3TbDɬD40xAUV$ja"Ĕ L̋$ {,:&o@ҩ6q{wJtmM&M͹PfL/u69T(Tzk@% *CghD*[CI,^  bFŶY q{wJtmMF/3nH5@2`{ʦQ@X=UŌUc4e i.QZ d"NieX8k*6-S$%8z &LONfENrji9XJ;4fJ{:J파iW{ 98sȖM3 cU2)L1ykuCW#:!yIFـ /|Fnn?MXLZ ^z1y1ktXnZr3"!-*p>i&U2e iPn6*Ĕ Lr$ 8~5Lmm!+s`+ T>-- *CbyY"I3xKD; jpt9ʦPĔ L[ƊB#d]/8C4e Hx2m`p,Tl[e_/;kD[b]h-PhDK sE^vYsjb u1yi2̅bx$OկZc %SBx;k9EFؐ UU(&&꘸[k8ʼ#`>^N_01{ƼH1s8W}5ۜ5&/wI@ KATX#]QN-:1, *CaH5 @I@͆ iTX6v4DA3n\xS:N k F$od./םa՝a֝a&.2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapMonitorERSer_codd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapMonitorERS.sh 1.3.1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapMonitorERS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapMonitorERS ## ## PURPOSE: ## Monitoring script for ERS instance(s). ## ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Function: # checkIsSCSRunning # # Purpose: # To Monitor SAP SCS instance processes using sapcontrol for healthiness. # # Arguments: # 1) Instance Number # 2) Virtual IP used by the instance # 3) Instance Name # # Returns: # 0 For sucess # exit with 1 For failure # function checkIsSCSRunning { if [[ $VERBOSE_LOGGING == "high" ]] then PS4_FUNC=checkIsSCSRunning set -x fi typeset instance_num virtual_ip typeset processDisplayStatus processNames instance_num=$1 virtual_ip=$2 instance_name=$3 #If NFS RG is not online then check using ps [[ ! -x $SAPEXEDIR/sapcontrol ]] && { /usr/bin/su - $SAPADMNUSR -c "env LANG=C ps -e -u $SAPADMNUSR -o args | grep \"er\\.sap\"$SAPSYSTEMNAME\"_\"$instance_name" > /dev/null 2>&1 || exit 1 return } out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C sapcontrol -host $virtual_ip -nr $instance_num \ -function GetProcessList -format script" 2>/dev/null | grep "[0-9] " \ | awk -F":" '/dispstatus:/ {print $2}') [[ -z $out ]] && { user_msg 70 7 $PROGRAM exit 1 } processDisplayStatus=(${out}) out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C sapcontrol -host $virtual_ip -nr $instance_num \ -function GetProcessList -format script" 2>/dev/null | grep "[0-9] " \ | awk -F":" '/name:/ {print $2}') [[ -z $out ]] && { user_msg 70 8 $PROGRAM exit 1 } processNames=(${out}) for count in "${!processDisplayStatus[@]}"; do [[ ${processDisplayStatus[$count]} == "GREEN" ]] && { user_msg 70 9 $instance_name ${processNames[$count]} \ ${processDisplayStatus[$count]} } || { user_msg 70 10 $instance_name ${processNames[$count]} \ ${processDisplayStatus[$count]} exit 1 } done return 0 } #------------------------------------------------------------------------------- #Main #------------------------------------------------------------------------------- typeset ret SID instances inst_names virt_ip inst_nos typeset instance_start_profile inst_profile if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.3.1.4' fi while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { user_msg 30 30 $PROGRAM exit 1 } set -a eval $(clquerysaapp -a $APPLICATION_ID | grep SAPSYSTEMNAME) set +a export SAPSYSTEMNAME [[ -z $SAPSYSTEMNAME ]] && { user_msg 30 34 $PROGRAM exit 1 } user_msg 40 10 $SAPSYSTEMNAME setSAPGlobalEnv $SAPSYSTEMNAME ret=$? (( $ret != 0 )) && { user_msg 30 12 exit 1 } inst_names=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NAMES/ {print $2}' 2>/dev/null)) [[ -z $inst_names ]] && { user_msg 30 31 $PROGRAM exit 1 } virt_ip=$(/usr/bin/hostname -s) [[ -z $virt_ip ]] && { user_msg 30 32 $PROGRAM exit 1 } inst_nos=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NUMBERS/ {print $2}' 2>/dev/null)) [[ -z $inst_nos ]] && { user_msg 30 33 $PROGRAM exit 1 } for count in "${!inst_names[@]}"; do # Set START_PROFILE instance_start_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/START_"${inst_names[$count]}"_"$virt_ip # Set INSTANCE_PROFILE inst_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/"$SAPSYSTEMNAME"_"${inst_names[$count]}"_"$virt_ip if [ -f ${instance_start_profile} ]; then profile=${instance_start_profile}; else profile=${inst_profile}; fi checkForRunningSapstartsrv $profile ret=$? (( ret == 0 )) && { user_msg 70 13 ${inst_names[$count]} } || { user_msg 70 12 ${inst_names[$count]} exit 1 } checkIsSCSRunning ${inst_nos[$count]} $virt_ip \ ${inst_names[$count]} done exit 0 h kG$od./םa՝a֝a&.2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapStopERSdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStopERS.sh 1.3.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStopERS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapStopERS ## ## PURPOSE: ## Stop script for ERS instance(s). ## ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include typeset version='1.1' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH #---------------------------------------------------------------------------- typeset ret SID instances inst_names virt_ip inst_nos typeset instance_start_profile inst_profile profile if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { user_msg 30 30 $PROGRAM exit 1 } set -a eval $(clquerysaapp -a $APPLICATION_ID | grep SAPSYSTEMNAME) set +a export SAPSYSTEMNAME [[ -z $SAPSYSTEMNAME ]] && { user_msg 30 34 $PROGRAM exit 1 } user_msg 40 10 $SAPSYSTEMNAME setSAPGlobalEnv $SAPSYSTEMNAME ret=$? (( $ret != 0 )) && { user_msg 30 12 exit 1 } inst_names=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NAMES/ {print $2}' 2>/dev/null)) [[ -z $inst_names ]] && { user_msg 30 31 $PROGRAM exit 1 } virt_ip=$(/usr/bin/hostname -s) [[ -z $virt_ip ]] && { user_msg 30 32 $PROGRAM exit 1 } inst_nos=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NUMBERS/ {print $2}' 2>/dev/null)) [[ -z $inst_nos ]] && { user_msg 30 33 $PROGRAM exit 1 } #stop the sap ERS instances along with it's sapstartsrv process for count in "${!inst_names[@]}"; do #If the instance is not running then startsap check will return 1 /usr/bin/su - $SAPADMNUSR -c "env LANG=C $SAPEXEDIR/startsap check ${inst_names[$count]} $virt_ip >& /dev/null;exit $status" (( $? == 1 )) && continue out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C $SAPEXEDIR/stopsap ${inst_names[$count]} $virt_ip" 2>/dev/null) (( $? == 0 )) && { user_msg 70 4 ${inst_names[$count]} $virt_ip } || { user_msg 70 3 $PROGRAM ${inst_names[$count]} $virt_ip var=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C $SAPEXEDIR/cleanipc ${inst_nos[$count]} remove" 2>/dev/null) } # Set START_PROFILE instance_start_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/START_"${inst_names[$count]}"_"$virt_ip # Set INSTANCE_PROFILE inst_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/"$SAPSYSTEMNAME"_"${inst_names[$count]}"_"$virt_ip if [ -f ${instance_start_profile} ]; then profile=${instance_start_profile}; else profile=${inst_profile}; fi stopsapstartsrv $profile (( $? == 0 )) && { user_msg 70 6 ${inst_names[$count]} } || { user_msg 70 5 $PROGRAM ${inst_names[$count]} } done exit 0 r k8H$od /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapStartERSSer_codd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStartERS.sh 1.2.2.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStartERS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapStartERS ## ## PURPOSE: ## Startup script for ERS instance(s). ## ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH #---------------------------------------------------------------------------- typeset ret SID instances inst_names virt_ip typeset allSCSInstances if [[ $VERBOSE_LOGGING == high ]] then set -x version='1.2.2.1 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStartERS.sh 1$' fi if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { user_msg 30 30 $PROGRAM exit 1 } set -a eval $(clquerysaapp -a $APPLICATION_ID | grep SAPSYSTEMNAME) set +a export SAPSYSTEMNAME [[ -z $SAPSYSTEMNAME ]] && { user_msg 30 34 $PROGRAM exit 1 } user_msg 40 10 $SAPSYSTEMNAME setSAPGlobalEnv $SAPSYSTEMNAME ret=$? (( $ret != 0 )) && { user_msg 30 12 exit 1 } getAllRunningSCSInstances allSCSInstances if (( ${#allSCSInstances[*]} > 0 )); then user_msg 30 40 exit 1 fi inst_names=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NAMES/ {print $2}' 2>/dev/null)) [[ -z $inst_names ]] && { user_msg 30 31 $PROGRAM exit 1 } virt_ip=$(/usr/bin/hostname -s) [[ -z $virt_ip ]] && { user_msg 30 32 $PROGRAM exit 1 } #start the sap ERS instances for count in "${!inst_names[@]}"; do out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C $SAPEXEDIR/startsap ${inst_names[$count]} $virt_ip" 2>/dev/null) (( $? == 0 )) && { user_msg 70 2 ${inst_names[$count]} $virt_ip } || { user_msg 70 1 $PROGRAM ${inst_names[$count]} $virt_ip exit 1 } done exit 0 t kLI$od/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapMonitorASer_codd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapMonitorAS.sh 1.3.1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapMonitorAS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapMonitorAS ## ## PURPOSE: ## Monitoring script for AS instance. ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Function: # checkIsASRunning # # Purpose: # To Monitor SAP AS instance processes using sapcontrol for healthiness. # # Arguments: # 1) Instance Number # 2) Virtual IP used by the instance # 3) Instance Name # # Returns: # 0 For sucess # exit with 1 For failure # function checkIsASRunning { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=checkIsASRunning set -x fi typeset instance_num virtual_ip typeset processDisplayStatus processNames instance_num=$1 virtual_ip=$2 instance_name=$3 out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C sapcontrol -host $virtual_ip -nr $instance_num \ -function GetProcessList -format script" 2>/dev/null | grep "[0-9] " \ | awk -F":" '/dispstatus:/ {print $2}') [[ -z $out ]] && { user_msg 60 7 $PROGRAM exit 1 } processDisplayStatus=(${out}) out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C sapcontrol -host $virtual_ip -nr $instance_num \ -function GetProcessList -format script" 2>/dev/null | grep "[0-9] " \ | awk -F":" '/name:/ {print $2}') [[ -z $out ]] && { user_msg 60 8 $PROGRAM exit 1 } processNames=(${out}) for count in "${!processDisplayStatus[@]}"; do [[ ${processDisplayStatus[$count]} == "GREEN" ]] && { user_msg 60 9 $instance_name ${processNames[$count]} \ ${processDisplayStatus[$count]} } || { user_msg 60 10 $instance_name ${processNames[$count]} \ ${processDisplayStatus[$count]} exit 1 } done return 0 } #------------------------------------------------------------------------------- #Main #------------------------------------------------------------------------------- typeset out SID inst_name virt_ip profile typeset PROGRAM=${0##*/} typeset instance_start_profile inst_profile if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.3.1.4' fi while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { user_msg 30 30 $PROGRAM exit 1 } set -a eval $(clquerysaapp -a $APPLICATION_ID | grep SAPSYSTEMNAME) set +a export SAPSYSTEMNAME [[ -z $SAPSYSTEMNAME ]] && { user_msg 30 34 $PROGRAM exit 1 } user_msg 40 10 $SAPSYSTEMNAME setSAPGlobalEnv $SAPSYSTEMNAME ret=$? (( $ret != 0 )) && { user_msg 30 12 exit 1 } inst_name=$(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NAME/ {print $2}' 2>/dev/null) [[ -z $inst_name ]] && { user_msg 30 31 $PROGRAM exit 1 } virt_ip=$(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/VIRTUAL_IP/ {print $2}' 2>/dev/null) [[ -z $virt_ip ]] && { user_msg 30 32 $PROGRAM exit 1 } inst_no=$(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NUMBER/ {print $2}' 2>/dev/null) [[ -z $inst_no ]] && { user_msg 30 33 $PROGRAM exit 1 } # Set START_PROFILE instance_start_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/START_"$inst_name"_"$virt_ip # Set INSTANCE_PROFILE inst_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/"$SAPSYSTEMNAME"_"$inst_name"_"$virt_ip if [ -f ${instance_start_profile} ]; then profile=${instance_start_profile}; else profile=${inst_profile}; fi checkForRunningSapstartsrv $profile ret=$? (( ret == 0 )) && { user_msg 60 13 $inst_name } || { user_msg 60 12 $inst_name exit 1 } checkIsASRunning $inst_no $virt_ip $inst_name exit 0 ATH=$ k"J$od/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapStopASAdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStopAS.sh 1.3.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStopAS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapStopAS ## ## PURPOSE: ## Stop script for AS instance. ## ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include typeset version='1.3.1.1' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH #---------------------------------------------------------------------------- typeset out SID inst_name virt_ip profile inst_nos typeset instance_start_profile inst_profile if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { user_msg 30 30 $PROGRAM exit 1 } set -a eval $(clquerysaapp -a $APPLICATION_ID | grep SAPSYSTEMNAME) set +a export SAPSYSTEMNAME [[ -z $SAPSYSTEMNAME ]] && { user_msg 30 34 $PROGRAM exit 1 } user_msg 40 10 $SAPSYSTEMNAME setSAPGlobalEnv $SAPSYSTEMNAME ret=$? (( $ret != 0 )) && { user_msg 30 12 exit 1 } inst_name=$(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NAME/ {print $2}' 2>/dev/null) [[ -z $inst_name ]] && { user_msg 30 31 $PROGRAM exit 1 } virt_ip=$(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/VIRTUAL_IP/ {print $2}' 2>/dev/null) [[ -z $virt_ip ]] && { user_msg 30 32 $PROGRAM exit 1 } inst_no=$(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NUMBER/ {print $2}' 2>/dev/null) [[ -z $inst_no ]] && { user_msg 30 33 $PROGRAM exit 1 } #If the instance is not running then startsap check will return 1 /usr/bin/su - $SAPADMNUSR -c "env LANG=C $SAPEXEDIR/startsap check $inst_name $virt_ip >& /dev/null;exit $status" (( $? == 1 )) && exit 0 #stop the sap AS instance along with it's sapstartsrv process out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C $SAPEXEDIR/stopsap $inst_name $virt_ip") (( $? == 0 )) && { user_msg 60 4 $inst_name $virt_ip } || { user_msg 60 3 $PROGRAM $inst_name $virt_ip var=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C $SAPEXEDIR/cleanipc $inst_no remove" 2>/dev/null) } # Set START_PROFILE instance_start_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/START_"$inst_name"_"$virt_ip # Set INSTANCE_PROFILE inst_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/"$SAPSYSTEMNAME"_"$inst_name"_"$virt_ip if [[ -f ${instance_start_profile} ]]; then profile=${instance_start_profile}; else profile=${inst_profile}; fi stopsapstartsrv $profile (( $? == 0 )) && { user_msg 60 6 $inst_name } || { user_msg 60 5 $PROGRAM $inst_name } exit 0  kꪊK$odP /םa՝a֝a&P 2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapStartASdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStartAS.sh 1.1.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStartAS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapStartAS ## ## PURPOSE: ## Startup script for AS instance. ## ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include typeset version='1.1' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH #---------------------------------------------------------------------------- typeset out SID inst_name virt_ip if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { user_msg 30 30 $PROGRAM exit 1 } set -a eval $(clquerysaapp -a $APPLICATION_ID | grep SAPSYSTEMNAME) set +a export SAPSYSTEMNAME [[ -z $SAPSYSTEMNAME ]] && { user_msg 30 34 $PROGRAM exit 1 } user_msg 40 10 $SAPSYSTEMNAME setSAPGlobalEnv $SAPSYSTEMNAME ret=$? (( $ret != 0 )) && { user_msg 30 12 exit 1 } inst_name=$(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NAME/ {print $2}' 2>/dev/null) [[ -z $inst_name ]] && { user_msg 30 31 $PROGRAM exit 1 } virt_ip=$(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/VIRTUAL_IP/ {print $2}' 2>/dev/null) [[ -z $virt_ip ]] && { user_msg 30 32 $PROGRAM exit 1 } #start the sap AS instances out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C $SAPEXEDIR/startsap $inst_name $virt_ip") (( $? == 0 )) && { user_msg 60 2 $inst_name $virt_ip } || { user_msg 60 1 $PROGRAM $inst_name $virt_ip exit 1 } exit 0  k<L$od/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapMonitorSCSer_codd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapMonitorSCS.sh 1.3.1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapMonitorSCS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapMonitorSCS ## ## PURPOSE: ## Monitoring script for SCS instance(s). ## ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Function: # checkIsSCSRunning # # Purpose: # To Monitor SAP SCS instance processes using sapcontrol for healthiness. # # Arguments: # 1) Instance Number # 2) Virtual IP used by the instance # 3) Instance Name # # Returns: # 0 For sucess # exit with 1 For failure # function checkIsSCSRunning { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=checkIsSCSRunning set -x fi typeset instance_num virtual_ip typeset processDisplayStatus processNames instance_num=$1 virtual_ip=$2 instance_name=$3 out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C sapcontrol -host $virtual_ip -nr $instance_num \ -function GetProcessList -format script" 2>/dev/null | grep "[0-9] " \ | awk -F":" '/dispstatus:/ {print $2}') [[ -z $out ]] && { user_msg 50 7 $PROGRAM exit 1 } processDisplayStatus=(${out}) out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C sapcontrol -host $virtual_ip -nr $instance_num \ -function GetProcessList -format script" 2>/dev/null | grep "[0-9] " \ | awk -F":" '/name:/ {print $2}') [[ -z $out ]] && { user_msg 50 8 $PROGRAM exit 1 } processNames=(${out}) for count in "${!processDisplayStatus[@]}"; do [[ ${processDisplayStatus[$count]} == "GREEN" ]] && { user_msg 50 9 $instance_name ${processNames[$count]} \ ${processDisplayStatus[$count]} } || { user_msg 50 10 $instance_name ${processNames[$count]} \ ${processDisplayStatus[$count]} exit 1 } done return 0 } #------------------------------------------------------------------------------- #Main #------------------------------------------------------------------------------- typeset ret SID instances inst_names virt_ips inst_nos typeset instance_start_profile inst_profile if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.3.1.4' fi while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { user_msg 30 30 $PROGRAM exit 1 } set -a eval $(clquerysaapp -a $APPLICATION_ID | grep SAPSYSTEMNAME) set +a export SAPSYSTEMNAME [[ -z $SAPSYSTEMNAME ]] && { user_msg 30 34 $PROGRAM exit 1 } user_msg 40 10 $SAPSYSTEMNAME setSAPGlobalEnv $SAPSYSTEMNAME ret=$? (( $ret != 0 )) && { user_msg 30 12 exit 1 } inst_names=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NAMES/ {print $2}' 2>/dev/null)) [[ -z $inst_names ]] && { user_msg 30 31 $PROGRAM exit 1 } virt_ips=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/VIRTUAL_IPS/ {print $2}' 2>/dev/null)) [[ -z $virt_ips ]] && { user_msg 30 32 $PROGRAM exit 1 } inst_nos=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NUMBERS/ {print $2}' 2>/dev/null)) [[ -z $inst_nos ]] && { user_msg 30 33 $PROGRAM exit 1 } for count in "${!inst_names[@]}"; do # Set START_PROFILE instance_start_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/START_"${inst_names[$count]}"_"${virt_ips[$count]} # Set INSTANCE_PROFILE inst_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/"$SAPSYSTEMNAME"_"${inst_names[$count]}"_"${virt_ips[$count]} if [ -f ${instance_start_profile} ]; then profile=${instance_start_profile}; else profile=${inst_profile}; fi checkForRunningSapstartsrv $profile ret=$? (( ret == 0 )) && { user_msg 50 13 ${inst_names[$count]} } || { user_msg 50 12 ${inst_names[$count]} exit 1 } checkIsSCSRunning ${inst_nos[$count]} ${virt_ips[$count]} \ ${inst_names[$count]} done exit 0 ------- kM$od/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapStopSCSdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStopSCS.sh 1.3.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStopSCS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapStopSCS ## ## PURPOSE: ## Stop script for SCS instance(s). ## ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include typeset version='1.1' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH #---------------------------------------------------------------------------- typeset ret SID instances inst_names virt_ips inst_nos typeset profile instance_start_profile inst_profile if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { user_msg 30 30 $PROGRAM exit 1 } set -a eval $(clquerysaapp -a $APPLICATION_ID | grep SAPSYSTEMNAME) set +a export SAPSYSTEMNAME [[ -z $SAPSYSTEMNAME ]] && { user_msg 30 34 $PROGRAM exit 1 } user_msg 40 10 $SAPSYSTEMNAME setSAPGlobalEnv $SAPSYSTEMNAME ret=$? (( $ret != 0 )) && { user_msg 30 12 exit 1 } inst_names=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NAMES/ {print $2}' 2>/dev/null)) [[ -z $inst_names ]] && { user_msg 30 31 $PROGRAM exit 1 } virt_ips=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/VIRTUAL_IPS/ {print $2}' 2>/dev/null)) [[ -z $virt_ips ]] && { user_msg 30 32 $PROGRAM exit 1 } inst_nos=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NUMBERS/ {print $2}' 2>/dev/null)) [[ -z $inst_nos ]] && { user_msg 30 33 $PROGRAM exit 1 } #stop the sap SCS instances along with it's sapstartsrv process for count in "${!inst_names[@]}"; do #If the instance is not running then startsap check will return 1 /usr/bin/su - $SAPADMNUSR -c "env LANG=C $SAPEXEDIR/startsap check ${inst_names[$count]} ${virt_ips[$count]} >& /dev/null;exit $status" (( $? == 1 )) && continue out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C $SAPEXEDIR/stopsap ${inst_names[$count]} ${virt_ips[$count]}" 2>/dev/null) (( $? == 0 )) && { user_msg 50 4 ${inst_names[$count]} ${virt_ips[$count]} } || { user_msg 50 3 $PROGRAM ${inst_names[$count]} ${virt_ips[$count]} var=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C $SAPEXEDIR/cleanipc ${inst_nos[$count]} remove" 2>/dev/null) } # Set START_PROFILE instance_start_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/START_"${inst_names[$count]}"_"${virt_ips[$count]} # Set INSTANCE_PROFILE inst_profile="/usr/sap/"$SAPSYSTEMNAME"/SYS/profile/"$SAPSYSTEMNAME"_"${inst_names[$count]}"_"${virt_ips[$count]} if [ -f ${instance_start_profile} ]; then profile=${instance_start_profile}; else profile=${inst_profile}; fi stopsapstartsrv $profile (( $? == 0 )) && { user_msg 50 6 ${inst_names[$count]} } || { user_msg 50 5 $PROGRAM ${inst_names[$count]} } done exit 0  kh N$od /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/sap/sbin/cl_sapStartSCSSer_codd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStartSCS.sh 1.1.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2008,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/sap/sbin/cl_sapStartSCS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: cl_sapStartSCS ## ## PURPOSE: ## Startup script for SCS instance(s). ## ## ## ARGUMENTS: ## ## Type: ## -a Application ID ## ## ## OUTPUT: ## ## ## RETURNS: ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include typeset version='1.1' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/sap/etc/SAPGlobals . /usr/es/sbin/cluster/sa/sap/sbin/SAPUtilities typeset PROGRAM=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) export PATH #---------------------------------------------------------------------------- typeset ret SID instances inst_names virt_ips if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR while getopts a: option do case $option in a) APPLICATION_ID=$OPTARG ;; esac done [[ -z $APPLICATION_ID ]] && { user_msg 30 30 $PROGRAM exit 1 } set -a eval $(clquerysaapp -a $APPLICATION_ID | grep SAPSYSTEMNAME) set +a export SAPSYSTEMNAME [[ -z $SAPSYSTEMNAME ]] && { user_msg 30 34 $PROGRAM exit 1 } user_msg 40 10 $SAPSYSTEMNAME setSAPGlobalEnv $SAPSYSTEMNAME ret=$? (( $ret != 0 )) && { user_msg 30 12 exit 1 } inst_names=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/INSTANCE_NAMES/ {print $2}' 2>/dev/null)) [[ -z $inst_names ]] && { user_msg 30 31 $PROGRAM exit 1 } virt_ips=($(clquerysaapp -a $APPLICATION_ID \ | awk -F"=" '/VIRTUAL_IPS/ {print $2}' 2>/dev/null)) [[ -z $virt_ips ]] && { user_msg 30 32 $PROGRAM exit 1 } #start the sap SCS instances for count in "${!inst_names[@]}"; do out=$(/usr/bin/su - $SAPADMNUSR -c \ "env LANG=C $SAPEXEDIR/startsap ${inst_names[$count]} ${virt_ips[$count]}" 2>/dev/null) (( $? == 0 )) && { user_msg 50 2 ${inst_names[$count]} ${virt_ips[$count]} } || { user_msg 50 1 $PROGRAM ${inst_names[$count]} ${virt_ips[$count]} exit 1 } done exit 0 turn kLN$oABםaBםa֝a&2vT./usr/es/es/sbin/cluster/sa/ihsAA kꬊN$oABםaBםa֝a&2vT./usr/es/es/sbin/cluster/sa/ihs/sbinsapAA kN$oABםaBםa֝a&2vT./usr/es/es/sbin/cluster/sa/ihs/configpAA kPL_$od /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/ihs/sbin/cl_configihsSdd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_configihs.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)54 1.1 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_configihs.sh, hacmp, 61haes_r714 11/28/11 15:24:10 ################################################################### ## ## NAME: cl_configihs ## ## DESCRIPTION: ## Modify the LISTEN directive in the httpd.conf file. This ## utility will varyon the volume group and mount the file ## system if necessary to gain access to the httpd.conf file. ## It will also stop the HTTP server by calling "apachectl stop" ## and will leave it in a stopped state. ## ## This utility is meant to be called remotely from ## cl_ihsimport and execute on the node where the IBM Http ## Server was originally installed. ## ## ARGUMENTS: ## Volume Group ## Install Path ## New Listen Directive ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_IHS_log_message ## KLIB_IHS_ch_httpd_directive ## ################################################################### ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the message catalog entries #. /usr/es/sbin/cluster/sa/db2/cat/cl_db2discovery # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/ihs:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/ihs/sbin/ [[ "$VERBOSE_LOGGING" == "high" ]] && set -x IHSSA_HOME="/usr/es/sbin/cluster/sa/ihs" IHSSA_SBIN_DIR="$IHSSA_HOME/sbin" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/ihssa.log KLIB_HACMPLOG_ENTRY=ihssa.log KLIB_OUTPUT_CONSOLE=false typeset vg=$1 typeset install_path=$2 typeset new_value=$3 typeset HTTPD_CONF="${install_path}/conf/httpd.conf" KLIB_IHS_log_message "IHS INFO: Modifying LISTEN directive in $HTTPD_CONF" # Make sure the VG is varied on and the file system is mounted KLIB_IHS_mount_fs_for_directory $vg $install_path if (( $? != 0 )) ; then KLIB_IHS_log_message "WAS ERROR: Could not mount the file system for the directory ${install_path}" exit 1 fi #Make sure the IBM Http Server is stopped. typeset stop_script="${install_path}/bin/apachectl stop" KLIB_IHS_log_message "IHS INFO: Stopping IBM Http Server ($stop_script)." $stop_script > /dev/null if (( $? != 0 )) ; then KLIB_IHS_log_message "WAS ERROR: Failed stopping IBM Http Server." exit 1 fi KLIB_IHS_log_message "IHS INFO: Setting LISTEN directive." KLIB_IHS_ch_httpd_directive $HTTPD_CONF "Listen" $new_value typeset ch_count=$? KLIB_IHS_log_message "IHS INFO: Changed $ch_count LISTEN directives in $HTTPD_CONF" exit 0 ] kb$ods /םa՝a֝a&s 2vT./usr/es/sbin/cluster/sa/ihs/sbin/cl_discihssSdd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_discihs.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)17 1.1 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_discihs.sh, hacmp, 61haes_r714 11/28/11 15:26:32 ################################################################### ## ## NAME: cl_discihs ## ## DESCRIPTION: ## Perform IBM Http Server (IHS) Discovery. Discovers all ## installed instances of IHS and returns information ## about them. ## ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Colon delimiter list of IHS installations ## where each line contains info info about a ## separate installation. Information is: ## ## Total number IHS Installations ## Installation Path ## Version ## Installation Volume Groups ## Installation PVIDs ## Listen Directive Host ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_IHS_get_installations ## KLIB_IHS_log_message ## KLIB_IHS_get_ihs_plugin_path ## KLIB_IHS_get_ihs_listen_host ## ## KLIB_AIX_add_vg_by_path ## KLIB_AIX_get_pvids_by_vgs ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all IHS / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/ihs:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/ihs/sbin/ KLIB_DEFAULT_LOGFILE=/var/hacmp/log/ihssa.log KLIB_HACMPLOG_ENTRY=ihssa.log KLIB_OUTPUT_CONSOLE=false typeset IHS_VGS="" typeset LISTEN_HOST="" typeset IHS_INSTALLATIONS="" integer count=0 integer install_count=0 typeset version="" typeset install_path="" typeset plugin_path="" typeset tmp="" IHS_INSTALLATIONS=$(KLIB_IHS_get_installations "*IHS*") echo $IHS_INSTALLATIONS | IFS=: read install_count installations if [[ -z $installations ]]; then KLIB_IHS_log_message "IHS WARNING: IHS installation is not found" else KLIB_IHS_log_message "IHS INFO: installations found - $IHS_INSTALLATIONS" fi count=$install_count # Get information about each installation while (( $count > 0 )) ; do echo $installations | IFS=: read version install_path tmp installations=$tmp IHS_VGS="" LISTEN_HOST="" KLIB_AIX_add_vg_by_path IHS_VGS $install_path "$IHS_VGS" IHS_VG_PVIDS=$(KLIB_AIX_get_pvids_by_vgs $IHS_VGS) LISTEN_HOST=$(KLIB_IHS_get_ihs_listen_host $install_path) KLIB_IHS_log_message "IHS INFO: cl_discihs returning - ihs:$install_count:$install_path:$version:$IHS_VGS:$IHS_VG_PVIDS:$LISTEN_HOST" echo "ihs:$install_count:$install_path:$version:$IHS_VGS:$IHS_VG_PVIDS:$LISTEN_HOST" count=$count-1 done 2> /d kv4c$od7/םa՝a֝a&72vT./usr/es/sbin/cluster/sa/ihs/sbin/cl_getihssSdd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_getihs.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)93 1.1 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_getihs.sh, hacmp, 61haes_r714 11/28/11 14:54:19 ################################################################### ## ## NAME: cl_getihs ## ## DESCRIPTION: ## Script to discover IHS and output IHS information for SMIT ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Colon delimiter IHS related configuration ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_AIX_ODM_get_odm_fields ## KLIB_HACMP_get_cluster_nodes ## ################################################################### # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x IHSSA_HOME="/usr/es/sbin/cluster/sa/ihs" IHSSA_ETC_PATH="$IHSSA_HOME/etc" IHSSA_SBIN_DIR="$IHSSA_HOME/sbin" KLIB_MSGCATALOG="ihssa.cat" KLIB_MSGSET=7 if set -- $(getopt A:h:no $* 2>&1); then while [ $# != 0 ]; do case "$1" in -A) APPLICATION_NAME=$2 shift ;; -h) HTTPServer=$2 shift ;; -n) # lists only IBM Http Servers not managed by HACMP USEHACMPODM="FALSE" ;; -o) # lists only IBM Http Servers managed by HACMP USEHACMPODM="TRUE" ;; --) shift break ;; esac shift done fi node="" primary="" secondary="" serviceip="" takeover_nodes="" group="" prefix="" # Get the data from the discovery file if [[ "$USEHACMPODM" == "FALSE" ]]; then instancekey="IHS_"$HTTPServer applicationname=${instancekey:0:64} cl_rsh $HTTPServer $IHSSA_SBIN_DIR/cl_discihs 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids listen_host # Check for multiple installs. This is the only check being performed as it is # assumed that the checks made during the inital discovery that just ran are # still valid if (( $install_count > 1 )); then dspmsg -s $DISC_MSGSET $IHSSACAT 40 " - Multiple installations were found. Only one installation per node \n\ is supported.\n" exit 1 fi # Passed checks primary=$HTTPServer secondary="" serviceip=$listen_host break; done fi if [[ "$USEHACMPODM" == "TRUE" ]]; then if [[ -z $APPLICATION_NAME ]] ; then exit 1 fi typeset INSTALL_NODE_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_NODE_NAME) set +a if [[ -z $INSTALL_NODE_NAME ]] ; then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "INSTALL_NODE_NAME" "HACMPsa_metadata" exit 1 fi applicationname=$APPLICATION_NAME primary=$INSTALL_NODE_NAME node=$primary HTTPServer=$primary instancekey="IHS_"$HTTPServer group=$(KLIB_AIX_ODM_get_odm_fields "sa_key = $APPLICATION_NAME" "HACMPgroup" "group") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "group" "HACMPgroup" exit 1 fi secondary=$(KLIB_AIX_ODM_get_odm_fields "sa_key = $APPLICATION_NAME" "HACMPgroup" "nodes") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "nodes" "HACMPgroup" exit 1 fi secondary=$(echo $secondary | cut -d' ' -f2-) serviceip=$(KLIB_AIX_ODM_get_odm_fields "group=$group and name=SERVICE_LABEL" "HACMPresource" "value") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "SERVICE_LABEL" "HACMPresource" exit 1 fi serviceip=$(KLIB_AIX_ODM_get_odm_fields "group=$group and name=SERVICE_LABEL" "HACMPresource" "value") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "SERVICE_LABEL" "HACMPresource" exit 1 fi prefix=$(KLIB_AIX_ODM_get_odm_fields "ip_label=$serviceip" "HACMPadapter" "netmask") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "SERVICE_LABEL_PREFIX" "HACMPadapter" exit 1 fi fi for node in $(KLIB_HACMP_get_cluster_nodes); do if [[ $node != $HTTPServer ]] ; then cl_rsh $node $IHSSA_SBIN_DIR/cl_discgskta 2>/dev/null | read line echo $line | IFS=: read component install_count version if (( install_count != 0 )) ; then if [[ $takeover_nodes != "" ]]; then takeover_nodes="${takeover_nodes}," fi takeover_nodes=${takeover_nodes}${node} fi fi done echo "#node:primary:secondary:serviceip:instancekey:takeover_nodes:applicationname:resourcegroup:prefix" echo "$node:$primary:$secondary:$serviceip:$instancekey:$takeover_nodes:$applicationname:$grou:$prefix" ) kd$odE /םa՝a֝a&E 2vT./usr/es/sbin/cluster/sa/ihs/sbin/cl_ihsmonsSdd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_ihsmon.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)50 1.1 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_ihsmon.sh, hacmp, 61haes_r714 11/28/11 14:56:10 ################################################################### ## ## NAME: cl_ihsmon.sh ## ## DESCRIPTION: ## Used to monitor a HTTP Server instance. ## ## This script must return one of the following values: ## 0: If the application is healthy ## 1: If the application is dead or otherwise unhealthy ## ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all HACMP functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm:$FPATH_BASE/ihs export PATH FPATH [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos } export ODMDIR [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_HACMPLOG_ENTRY=ihssa.log KLIB_DEFAULT_LOGFILE=/var/hacmp/log/ihssa.log KLIB_OUTPUT_CONSOLE=false KLIB_MSGCATALOG="ihssa.cat" KLIB_MSGSET=7 # These are the exit status codes. EXIT_NOTCHECKED=2 EXIT_DEAD=1 EXIT_HEALTHY=0 # Get the application name APPLICATION_NAME=$1 if [[ -z $APPLICATION_NAME ]]; then KLIB_IHS_log_message "WAS ERROR: Please specify the Application ID." STATUS=$EXIT_NOTCHECKED exit $STATUS fi typeset INSTALL_PATH set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_PATH) set +a if [[ -n $INSTALL_PATH ]] ; then KLIB_IHS_log_message "WAS INFO: Checking the status of IBM Http Server..." PIDFILE=$INSTALL_PATH/logs/httpd.pid PID="" if [ -f $PIDFILE ] ; then PID=$(cat $PIDFILE) if [[ -n "$PID" ]] && kill -0 $PID 2>/dev/null ; then KLIB_IHS_log_message "WAS INFO: IBM Http Server is healthy." STATUS=$EXIT_HEALTHY else KLIB_IHS_log_message "WAS ERROR: IBM Http Server is not healthy." STATUS=$EXIT_DEAD fi else KLIB_IHS_log_message "WAS ERROR: IBM Http Server is not healthy." STATUS=$EXIT_DEAD fi else KLIB_IHS_log_message "WAS ERROR: No Metadata information Found." STATUS=$EXIT_NOTCHECKED fi exit $STATUS  ke$od /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/ihs/sbin/cl_ihsstartSdd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_ihsstart.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)13 1.1 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_ihsstart.sh, hacmp, 61haes_r714 11/28/11 14:58:04 ################################################################### ## ## NAME: cl_startihs.sh ## ## DESCRIPTION: ## Starts the IBM HTTP Server ## ## ARGUMENTS: ## application name - Used to fetch the data from metadata odm ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ### 1 - failure ## ## KLIB Functions: ## KLIB_IHS_log_message ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all HACMP functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm:$FPATH_BASE/ihs export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_DEFAULT_LOGFILE=/var/hacmp/log/ihssa.log KLIB_HACMPLOG_ENTRY=ihssa.log KLIB_OUTPUT_CONSOLE=false KLIB_MSGCATALOG="ihssa.cat" KLIB_MSGSET=7 # Get the application name APPLICATION_NAME=$1 if [[ -z $APPLICATION_NAME ]]; then KLIB_IHS_log_message "WAS ERROR: Please specify the application name." exit 1 fi typeset INSTALL_PATH set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_PATH) set +a if [[ $INSTALL_PATH != "" ]] ; then IHS_SCRIPT="$INSTALL_PATH/bin/apachectl start" KLIB_IHS_log_message "WAS INFO: Start IBM HTTP Server by calling $IHS_SCRIPT" # Start the HTTP Server $IHS_SCRIPT else # error KLIB_IHS_log_message "WAS ERROR: No Metadata information Found." exit 1 fi exit 0  k"f$od /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/ihs/sbin/cl_ihsstopSdd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_ihsstop.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)44 1.1 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_ihsstop.sh, hacmp, 61haes_r714 11/28/11 14:59:04 ################################################################### ## ## NAME: cl_stopihs.sh ## ## DESCRIPTION: ## Stops the IBM HTTP Server ## ## ARGUMENTS: ## application name - Used to fetch the data from metadata odm ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ### 1 - failure ## ## KLIB Functions: ## KLIB_IHS_log_message ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all HACMP functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm:$FPATH_BASE/ihs export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_DEFAULT_LOGFILE=/var/hacmp/log/ihssa.log KLIB_HACMPLOG_ENTRY=ihssa.log KLIB_OUTPUT_CONSOLE=false KLIB_MSGCATALOG="ihssa.cat" KLIB_MSGSET=7 # Get the application name APPLICATION_NAME=$1 if [[ -z $APPLICATION_NAME ]]; then KLIB_IHS_log_message "WAS ERROR: Please specify the application name." exit 1 fi typeset INSTALL_PATH set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_PATH) set +a if [[ $INSTALL_PATH != "" ]] ; then IHS_SCRIPT="$INSTALL_PATH/bin/apachectl stop" KLIB_IHS_log_message "WAS INFO: Stop IBM HTTP Server by calling $IHS_SCRIPT" # Stop the HTTP Server $IHS_SCRIPT else # error KLIB_IHS_log_message "WAS ERROR: No Metadata information Found." exit 1 fi exit 0 it 0  lCg$od/םa՝a֝a&U2vT./usr/es/sbin/cluster/sa/ihs/sbin/cl_ihsimportSdd   # ASerst"$CEIMNOPRT_adilno-=GHLcfghmpu()./01BDFUV\bvy&'2:;>[]wx!%3?KXYk{|} ,469Wq+58yR g& |A t.DGc2L4yo%#Vr$^K Ud䚓lI׌'*VUa*.̛ddרi.VUa*>"d.,VUa*.,LY2 }ﻻI9>zi/F +*QrqAN%Pɗ+'+@_}eRr]79T}䋸F:^%f&z&8r 370D U_IW]-60+1[]hgg\cYH `=e-)YqAGIU22"댱1tfA4 ₏SHb q`IsJU*gLY2A@n((,YVq& v0:&܁="EK;: +Ye"zg) R2d Ś#$IȓA攪U.2DdPQ` śhi`yh*YxfX*ȩTtʙ'g=e)J|J:vfL yo"U-fX/22}2dh u>9EXobm0*ܨ }eRrnD8# *{wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwo$]5i1"̱Y+*:^deL {DT=8A!cFhC0x?:J,.lPAdIt<:^na$QrҤD8Qr<CI'\*Ś#& 0y$D R\GǨstnAZnqڀMn$NHu)'9ȫڨ[-*J1%N=qʦ$%\caВ-`lcQBM%҂'ĕ8*Otpa `|STbJ`x3I8hX )*&ˣ=l0: ` H$8RZFX\˲jsQЄ>EYEم8c>)*qU1%@=q9''%6+%` @,i.<̙r*Nn,`S$JbE@=x .+WujMLsta|STbJl8d6'&ǮB30|EIʎ,e`S,͉ꉠq렢 y ILY2hΥ$zhz(As!ǍM?бZS5TMUF#z٨`tÁAȫ8OIs/22U>)*qU1%30ObJzLICЧ9Q#,.[ur@C.ZTxaaaВ-W%1~rFKf|STbJ`vNr-L %\X%3b?3b?F&""A33b?Fffh,~H I0<:YQ#,.[jt&r@&˸8AΎWBhOLQ5V]f>1[ y:n-LIS\r)Ni\m$W*^t&rB+"N\Uf'Ԥ!X))9ҥrNT,Q3 T$Ǯ9TĔ1K9ȷ2[O5S☒SQBs@A@Υ$١b'j.GDP-ṇjnLWEp9Q#,.[5S☒SS%7J:È+"90G 5S☒SP8?ry?OV0X1(&AObJzLIGiqI2NrADeݿX8@AE@< > ?7gRq$rOfО2"j1@|cCsN)4F[l ɼ؞ .B pbzhz(@$^0]Y^2DdAY7@AE@<=Q4=t\ "v+BxftO[5p =USTrg#91V'BS"bdlOTM]!8fa=Q4=t\ f 9Tß&Yn'gShSiJbE.bٓrJbͤ, fBm ?\4VCLV\GǨstg١b'j.GDP-naӓiz%1/JȪ-NnVTt7KT$Ǯ9TĔ pU>)*qU1% .ZTt Aq1aiRUJ+@ԂƘc.ZTt At=tL1-*Jɢiˠ 4QrҤȨOTLWJ4QrҤV %\c 愑lc͂@,i.?A(YBHKbaűfE tA4JV ?B7E^S -c6 (A PD]$]("xS,y$[%1z0b3`: KOMH]YBHKbaűfE tA4JȨOTLWJ 0hIIyL^0X1(&A Aq1 %\Xȶ,ц 1 Y]("~LIS\r(4U>)*qU1% D#FPP3I8hX )riGDP-70UMP^"MɝYix (m0(m:Ԥ9(eVbi"(ᚧ1%N=qʦ$aĕ8*a@)K9ȶ,la)*qU1% S1n;9s0A*HB fc#S' ID8x' ӓED=%@CE tA4Ja!9FpgRqбZS5TMUF#z٨`tÀ8naꪚE9Ɋ=GBqdU7g*:^def|STbJ8faĕ8*a@)K9{l2L]7K-]JK,d{TseL䘡Fq]YBC a8QW6'&Ǯy0;"^pN ŸILY2]dBC aeZp0eYL0Zm*m4KG8m2ƚeeAXѹŚ##0@#48ѻEenZm9\<w!Oeʘy|STbJD8@<L6Ddl ɳ8(&FhDUtbL'9TĔa%@cf" Hh$ @Qcɮ*&A5yq.+F'<%uLI*8#q""&G=Q4>#qG($Y\ 1N\B @k,$'4Qn RN?+BxftO[5(470UMP^"MɜfXNt!)zVEQjsvzFX\j1%N=qʦ$XfLIS\r(f 9TßI qŚ#-2 ɼF'&wKbzhz(As!Fy`~ RN?e@|spD,4Q4Ie"\,UNVb'gSho" F,[lPAdItOTM]! 0؞ .B1Bs@A@Υ$١b'iɤ"1@|cpU5Ax 7&ve 0p`PRT Xe Xq=Q4=t\!lOTM]!AU/70i{*kgt`fX/22HQ{`z넚&}ȫҦ2aXGǨvzYN2ī QWad*.*ʎP-.X*JθIod˕/q$xaMr-ՕKỮq8v똌 $ݼwէ\Օ%T\$< {*]vagO\c 1s 4L<%\`Eq%]\LtFc.ZTt Au %]]$]("{*o4$`$/F,[lPAdIt Eh ?B7E^S -c6 (A PD]H,<)aВ-`lcQBM%҂'%@& zAŸIW`va&zK.cFYe"zgf:iRU!IqaJ!f " /)ц 1 Y]("~AzKN+?,=fО2"j1@|c0ndeZ1A%T0kuMh3PJ+@G5]H,?4XV33!` % 7 ‚gRqбZS5TMUF#z٨`t0 Xi3UN5JAȍZIKqť=7fX @3 A(I1Jf 9TßIi^naqYʒshHQ{`z*贇TVTtʏެ-*a#&ȩTtʙ'g бIN\J:vfL yo"U-*贇TVTtʏd˕/q$xaMr-ՕKỮq8v똌 $ݼwէ\ՑWE>"FT׿4LCӉLpf4naF3@#KKbrJrJIΎJ4<I3^m8OhggP }JKaRWbrsR.VUa*BmVYg9z׿HԤʎdr܂-Rݞ EJLIS\r(IWo4$`$/F,[lPAdIt1%N=qʦ$S%\XDp;ĕ8*< RN?+BxftO[5* y:n-쩸yZvt!)zVEQjsvabʥM="KbʹEe1iO%7J),|E@\*r*/=U҂'U0!f " /)ц 1 Y]("~>"=Q3]("xS%\X{%3GT^'&zOgRq"t-s4|EEzgPD3!` ,$'4ƍpgRqбZS5TMUF#z٨`t( VE]iz%1/JȪ-NnρbʹEe1iO5GBqdU7fOTLWJuJc^TZݘXf L| /JȪ-Nnxꮔ=[ZJbنȨOTLWJfa!9FpgRqбZS5TMUF#z٨`t( Xi3E]iz%1/JȪ-NnρbʹEe1iO5GBqdU7fOTLWJuJc^TZݘXf L| /JȪ-Nnxꮔ?O=USThs47I?+BxftO[5" Cz%BS",DXNSTt!)zVEQjsvkDUt.ʛאEWiGBqdU7f(ᙆBS8Ҳ*S^'&zO&&'BhOLQ5V]f>1[ U$ )-GBqdU7gf"Zu2쩸yZvt!)zVEQjsvtar V1YtZ\ m,U\uƪQrҤȨ)ɪPD:J,y$[%1z0b3`: KOT]Ad]("xS%\XDp;hH,OԤ4,VAUeш螶j aȫ8OQЄ>EYE,YVsEQЄ>EYEٮi j?%7J:È+"90G 5GB^TZݚ覒 &AE`b>"覒 &An̅.x(D#FPP3I8hX )*&ˣ=l0: ` Xi3E]iz%1/JȪ-NnρbʹE.]j%1/JȪ-NntSIUt)WQЄ>EYEم8fa:"E4Y5WJA49&ՑWESh0+&StRT EJ@AE@<tq<YBHKbaűfE tA4JD8Qr1[+"4>%Tt'7KT$Ǯ9TĔ pU>)*qU1% Tc |STbJ?XHNhp((Ԥ4,VAUeш螶j70UMP^"Mɞr*N*:^def|STbJd]GBqdU7f(ᙆ|STbJA49&ʥiꪚqYȫQYQ#*o& U/22i`+Sy2N@=z)SbuJ5J9Q#*l790ȿ T})!| m"IRNl2̙ ܬڕ0Me2gJIȩF+*cLA}V eeGǨ|&LY9ZrOmV؛L *oYTܠ-#>1}nJ}pZu y05 =Pz9Qe */q%'fU=]R]$܈LYN2`va&zK.cFYe"zgffM!aKJI[^t)=eꉞj/\AC-PE)X1@M˜gm$ u"QrX#raK:䜮Ӕ K]]H,?Ӯh%@c*mXYiB+ӊؿ90ib"zKF* m))ˡGK+'ޤIٕw"RD@b"zKGi,nra|VRse$Yɀ0]rO&QZ.b2DeAY7@AE@<blOTM]!AU/70NLV[6*Ӯtť?>"=Q3]("xB@>"daQBM%҂'`1v(f`ť33` 4,VAUeш螶jNLU :È+"9>6*Ӯqť<Jc^TZݚ=Q3]("xXf L| /JȪ-Nnxꮔ=" F,[lPAdItDUtL4|EEzgPD,$'4Qn RN?+BxfB+=l0: `8 =USTrgaZp L N),|EJ0YUXb8f>"=Q3]("~ar*/=U҂'AU/70i" IL[LGT^'&zO3\Px*lVDPQl(&A2Y>1A%T0ج9T[6 (A PDa!9FpgRqбZS5TMUF#z٨`tsUT,4ܙLU :È+"9>6*Ӯqť<Jc^TZݚ=Q3]("xXf L| /JȪ-Nnxꮔ?O^na$yӓRXmb:拮5Wf9E4Y5WJ4А$돁Ȩ99)Y.elPAdIt`\5Wff`]q33 Uvf?l2`lcQBM%҂'r*.i j"覒 &A QtSIUta@)K9{١b'j.GDP-CsNt!)zVEQjsvyWJ,YVsEQЄ>EYEٮi j<,Q3 QЄ>qdU7f)ɪPDmY`bH,x+!Ȩ)ɪPDQĕ8MtSITir*/=U҂'E4Y5WD 4Px*j)AE`: KO3 tA4[us.8L?Ad]=Q8 x M%Ic TV\ĒXh$ˠǪ'A! `%O^,i a8 |QtOXzbL5z . dԉʠٰQBM%҂'?SYtOXzbL5z . h*NU͂@,i.)*qU1%@=q9''%6+%` @,i.<̙r*Nn,`S١b'j.GDP-naӓiz%1/JȪ-NnVTt7KT$Ǯ9TĔ pU>)*qU1% e0b3`: KO>)*qU1%j1%N=qʦ$h`(7 u)' "\,U1B3T$Ǯ9TĔ5S☒SP8?ry?Oes-'j1%N=qʦ$f4Mg#1f#@؞riAP,dpJc")('R!rhGc(&A,$'4Qn RN?+BxftO[5p =USTrg#91V'BS"eGǨtlObJzLI@G 5S☒SP8?ry?OmYvfqVKIqŚ#,ojNlZɜ(Ӯ?˰3hHazL0U ;JD8Qr<dK 8@8S)4FKhHazL2T Nl+)MV@-Fcw1 X'-YYZ, <h+72Ddff7h < M+p;.@$)" 9SO0ObJzLIC8@iShmY6g Y҈ Qxꮔ1[ Xi3,iz%1/JȪ-NnVTt7KT$Ǯ9TĔ pU>)*qU1% ÁS*s4K 94TM#Yu370z)=S0x<Ԥ4,VAUeш螶j s#*է d F K$֥bҞ뛎, At=t]RX (a=Q4=t\ (`XfQZ.b1}nJ}pZu =ey05 =Pz9Qe */e0b3 @,i.<̂XVaǤⱏh`(7 u)' "\,U1B3 V=%ǧ V=%ǧÁS*s4U/70ׁ,2RrFT 1}ݾzL/,Ryo+6Nrmɞ6RȺTI qť<0HVJrXmb:)JzN me3ޥ%ȩF+*cLA}V e*U/22}2dh u>9EXobm0*ܨ }eRrnD8# *{wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwo$]5i82Ε*듕/22vagO\c 1s 4L<%\`E" F,[aQBM%҂'V Oa%@& zAD#FPP3I8hX )riGDP-70UMP^"MɝYix (m0(m:Ԥ9(eVbi"( Eh IPDPJ+@L@҂'AU/70i" F,[aQBM%҂'V 0 Au ,$'4Qn RN?+BxfB+=l0: `8 =USTrgaZp L N),|EJ0YUXb8fQZ.j Eh Xyp4 Rs&-4aűf Y]("y Eh 0 Aq11Bs@A@Υ$١b'iɤ"1@|cpU5Ax 7&ve 0p`PRT Xe Xh%@cj Eh 虇AU/70i^naqYe*U'*:^de@ݾzL/hggSpDfQJfj뀷j"Nmra%йbʹE 4O$rqd"ʎS\$2  RY'g[d˕-N'VU/7( }sr$eJ>naOݼwէ\*Y\$1TE偯 =Pz9Qe */ CLaLɢiˬx=Q31ƚE0*z2iɤ"P ~0j0HJ94PNz0W=XAO 0n`F+BxfAsHEP-\&r+Yѧ 0q=2E#VsFQ13Պ TθIb3tMOfО2!(\@r=l0: aيMVW5R hyVs$r r-Yg!it.XmIG ÁSjsPM!ȉGsE<ȗ1$ {1RM "lZoL`G4@r(?W5]$% B(^'=c+kXA3#FPV`k١b'j0HJ94PO[5Rn"NepNs$]5i0m3R ]dgGhggSpDfQ  1[MVWi̳N`iՂ{NdF:jML]'YRΧ:&Ң-7,8?+BxfAsHEP-f)7E[\ J`R$2.IeZu̓M/=1fi DIйb͵&B3OEZmbb2hLw4*qe2`1AO$wNqehHazL2T Nl+)MV@-2q .qeZmbb2t]rO $wƍpBhOL`.ri9xjVbhu`56qfi:E(ᙆEX:̌ÁSjsP,iV&.'Հ1iMwfThIDexc9&@¹!(\@r8y]f:-)2SBs@AX fО2!(\@r=l0: `1I*܊9btix m:Oȋwէ\`Qpf:-)2RΧ:&Ң-7,8?+BxfAsHEP-f)7E[\ J`R$2.IeZu̓M/=1fi DIйb͵&B3OE:-)ʃM Հ1iMwfTz0i@Հ2NJk2BdD` tZS]Y<<8'?dhs;>:̶ͫdqeG61$f[Nf%@ aҲazUjT "ێ'+ fXѹqe $Ƈ?.'mxѸnNqˮI $wƍpBhOL`.ri9xj17%KIk0IiOqepTv ӝJK"zVS pj'E5uP8?A?{yɤ!@Հ2NJk2ffcM "lZoL`G4@r(?W5]$% B(^'=c+jv[AH2J.q HNhp(+05бZS5$% B(^'Al)7E[]2N8OV 9. 6frvkYm,sh*"rÁS١b'j0HJ94PO[5vbtU T"C"넚&^lU\4܂ܡycaHdn] ,Rd,Q0h Z==Q4=t\ 4Й(kEevDq4a PSUM "lZoL`G4@r(?W5]$% B(^'=c+jv[Rr$EwfRV(?$'4QnhX )M!/@|csȮәf'F'ӫpZuAG Ԝ4]ٮUEK;:넚Jܰh hX )M!/@|cnEpU)HȺ&i2M7 (^rŘmp)&B6ԙ p8?A?OTM]!. 4&DJ;U/\c& 3HB+ӊMꉠq렢 yz)=QP-%@& zAƚ#@E tA4J4ƊQsTU`cgtcEK;:넚J܂B{wwwwvт >Y0ӝJK+*QrȱVt'+6GRȺTdF:&ۤИ&V')̭ MWgW0P1C8aJupZu(wV(c#0&4:5QT%OhHh=H,"FTV0X1(&AZM?mX8lY370fXԤfX/22,$'4Qn RN?A?O$xgi^Xv)F^.H^')I,U\ +-\[giWMK FcFNE]< RN?X8\(&Ax?u)'^js4 (2δ@'R*:^dee+)9E]!o넚&a!9FpgRq\9y&Z: k.h$od /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/ihs/sbin/cl_lsihsortSdd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_lsihs.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)75 1.1 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_lsihs.sh, hacmp, 61haes_r714 11/28/11 15:00:07 # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x IHSSA_HOME="/usr/es/sbin/cluster/sa/ihs" IHSSA_ETC_PATH="$IHSSA_HOME/etc" IHSSA_SBIN_DIR="$IHSSA_HOME/sbin" KLIB_MSGCATALOG="ihssa.cat" KLIB_MSGSET=7 # Get the arguments. if set -- $(getopt i:no $* 2>&1); then while [ $# != 0 ]; do case "$1" in -i) NODES=$2 shift ;; -n) # lists only IBM Http Servers not managed by HACMP USEHACMPODM=FALSE ;; -o) # lists only IBM Http Servers managed by HACMP USEHACMPODM=TRUE ;; --) shift break ;; esac shift done fi header="TRUE" found="FALSE" typeset APPLICATION_NAME # lists only IBM Http Servers not managed by HACMP if [[ "$USEHACMPODM" == "FALSE" ]]; then if [[ -n $NODES ]]; then NODES=$(echo "$NODES" | tr ',' ' ') for node in $NODES ; do APPLICATION_NAME="IHS_"$node clquerysaapp -a $APPLICATION_NAME INSTALL_NODE_NAME > /dev/null 2>&1 if (( $? != 0 )) ; then if [[ "$header" == "TRUE" ]]; then echo "#Server" header="FALSE" fi echo $node fi done else # Server data not found. dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 20 "ERROR: There is no %1\$s information in the discovery file.\n" "HTTP Server" exit 1 fi fi # lists only IBM Http Servers managed by HACMP if [[ "$USEHACMPODM" == "TRUE" ]]; then odmget -q "sa_type=$sa_type and name=INSTALL_NODE_NAME" HACMPsa_metadata | while IFS='=' read f_name f_value; do f_name=$(eval echo $f_name) if [[ "$f_name" == "value" ]]; then f_value=$(echo $f_value | sed -e "s/\"//g") if [[ "$header" == "TRUE" ]]; then echo "#Server" header="FALSE" fi echo $f_value found="TRUE" fi done if [[ "$found" != "TRUE" ]]; then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 100 "WARNING: IBM HTTP Server PowerHA SystemMirror Resources are not configured.\n" fi exit 0 fi  ki$odX/םa՝a֝a&X2vT./usr/es/sbin/cluster/sa/ihs/sbin/cl_ihssaquerydd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_ihssaquery.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/ihs/sbin/cl_ihssaquery.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################# ## ## Name: cl_ihssaquery ## ## Description: Performs application discovery query on the local node ## to determine if IBM Http Server is available ## ## Arguments: none ## ## Returns: n/a ## ############################################################################# . /usr/es/lib/ksh93/func_include version='1.1 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/ihs/sbin/cl_ihssaquery.sh 1$' ############################################################################# # Functions: # # ############################################################################# function displayIHSInstall { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x integer installed=0 # Perform volume group discovery clharvest_vg -w > /dev/null $IHSSA_SBIN_DIR/cl_discihs 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids listen_host # Check for version if (( $version < $IHS_MIN_VERSION || $version > $IHS_MAX_VERSION )) ; then break fi # Check for multiple installs if (( $install_count > 1 )); then break fi # Check for volume groups if [[ -z $install_vgs ]] ; then break fi KLIB_HACMP_are_pvids_shared $install_pvids if (( $? != 0 )); then break fi installed=1 break; done print -n $(dspmsg -s 10 ihssa.cat 10 "IBM HTTP Server Smart Assist") print -n ":IHS_6.0:" print -n $(dspmsg -s 10 ihssa.cat 15 "IBM Http Server") print -n ":IHS_SERVER:" echo $installed } ############################################################################# # Global Variables: ############################################################################# # Set the FPATH for all IHS / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/ihs:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/:/usr/es/sbin/cluster/utilities/ IHSSA_HOME="/usr/es/sbin/cluster/sa/ihs" IHSSA_SBIN_DIR="$IHSSA_HOME/sbin" IHS_MIN_VERSION="6.0" IHS_MAX_VERSION="6.1" ############################################################################# # Main: ############################################################################# displayIHSInstall exit 0  kUj$od /םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/ihs/sbin/cl_discgsktadd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_discgskta.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)88 1.1 src/43haes/usr/sbin/cluster/sa/ihs/sbin/cl_discgskta.sh, hacmp, 61haes_r714 11/28/11 15:25:20 ################################################################### ## ## NAME: cl_discgskta ## ## DESCRIPTION: ## Discovers if the package gskta.rte is installed. This ## package is required is IBM Http Server can fallover to ## this node ## ## This utility is meant to be called remotely from ## cl_wasdiscovery. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Colon delimiter list of number of gskta.rte installations ## and the version number of the first one found. It is ## assumes that there are either 0 or 1 installation. ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_IHS_log_message ## KLIB_IHS_get_installations ## ################################################################### ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the message catalog entries #. /usr/es/sbin/cluster/sa/db2/cat/cl_db2discovery # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 KLIB_DEFAULT_LOGFILE=/var/hacmp/log/ihssa.log KLIB_HACMPLOG_ENTRY=ihssa.log KLIB_OUTPUT_CONSOLE=false QUICK_MODE=false # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/ihs:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/ihs/sbin/ set -u integer install_count=0 typeset version="" typeset installations="" GSKTA_INSTALLATIONS=$(KLIB_IHS_get_installations "gskta.rte") echo $GSKTA_INSTALLATIONS | IFS=: read install_count installations if [[ -z $installations ]]; then KLIB_IHS_log_message "IHS WARNING: gskta.rte is not installed" fi echo $installations | IFS=: read version tmp KLIB_IHS_log_message "IHS INFO: cl_discgskta returning - $install_count:$version" echo "gskta:$install_count:$version"  kk$o@/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/ihs/sbin/ihs_xutilsa@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/ihs/sbin/ihs_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)06 1.1 src/43haes/usr/sbin/cluster/sa/ihs/sbin/ihs_xutils.sh, hacmp, 61haes_r714 11/28/11 15:01:20 ################################################################### # # Function: listEnv_IHS_6_0 # # Description: This component doesnt have any ENV settings. # but as per the framwework we need this dummy function # # Arcguments: none # # output: None # ################################################################### function listEnv_IHS_6_0 { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ################################################################### # # Function: listInstances_IHS_SERVER # # Description: Lists the IHS instances # # Arcguments: componentid , nodes # # output: list of instances in xml format # ################################################################### function listInstances_IHS_SERVER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # : Discover instances # /usr/es/sbin/cluster/sa/ihs/sbin/cl_lsihs -n -i "$nodes" | grep -v "^#" > /usr/es/sbin/cluster/etc/sa_inst.x filterinst_XML < /usr/es/sbin/cluster/etc/sa_inst.x KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ####################################################################### # # Function: listProps_IHS_SERVER # # Description: List properties for the IHS_SERVER component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # [Entry Fields] #* Application Name [IHS_Node1] # IBM HTTP Server Name Node1 #* Takeover Node(s) [] #* Service Interface [ipv6sample] # Netmask(IPv4)/Prefix Length(IPv6) [] # ######################################################################## function listProps_IHS_SERVER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset node typeset primary typeset secondary typeset serviceip typeset instancekey typeset takeover_nodes typeset applicationname typeset resourcegroup typeset prefix typeset takovernodes_picklist typeset Service_Interface_list typeset Service_Interface_picklist # : Discover possible property values # /usr/es/sbin/cluster/sa/ihs/sbin/cl_getihs -h "$NODES" -n | tail -1 > /usr/es/sbin/cluster/etc/sa_inst.x IFS=: read node primary secondary serviceip instancekey takeover_nodes applicationname resourcegroup prefix < /usr/es/sbin/cluster/etc/sa_inst.x #dicover the pick list for Service Interface Service_Interface_list=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 \ | awk ' { print $1 } ' ) # : get the picklist for serviceip # Service_Interface_picklist=$(echo $Service_Interface_list | tr ' ' ',' ) Service_Interface_picklist=${Service_Interface_picklist%,} # : get the pick list for Takover nodes # takovernodes_picklist=$(echo $takeover_nodes | tr ' ' ',' ) takovernodes_picklist=${takovernodes_picklist%,} print_start_tag PROPERTIES # Application Name print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$applicationname" "" "" "false" \ "-A" "string" "true" "true" \ "false" "true" "" "ihssa.cat,10,40" print_end_tag PROPERTY # IBM HTTP Server Name print_start_tag PROPERTY "2" "SERVER_NAME" "IBM HTTP Server Name" "" \ "$INSTANCE_NAME" "" "" "faslse" \ "-h" "string" "false" "false" \ "false" "true" "" "ihssa.cat,3,100" print_end_tag PROPERTY # Primary Node print_start_tag PROPERTY "3" "PRIMARY_NODE" "Primary Node" "" \ "$primary" "" "" "" \ "-o" "string" "false" "false" \ "false" "true" "" "ihssa.cat,3,35" print_end_tag PROPERTY # Takeover Node(s) print_start_tag PROPERTY "4" "TAKEOVER_NODES" "Takeover Node(s)" "" \ "" "$takovernodes_picklist" "" "false" \ "-n" "string" "true" "true" \ "true" "true" "" "ihssa.cat,3,110" print_end_tag PROPERTY # Service Interface print_start_tag PROPERTY "5" "SERVICE_INTERFACE" "Service Interface" "" \ "$serviceip" "$Service_Interface_picklist" "" "false" \ "-s" "string" "true" "true" \ "false" "true" "" "ihssa.cat,3,120" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) print_start_tag PROPERTY "6" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "false" \ "-P" "string" "true" "false" \ "false" "true" "" "cluster_hlp.cat,25,51" print_end_tag PROPERTY # : This command will be executed to configure the application # print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/ihs/sbin/cl_ihsimport -a -t 'HTTPSERVER'" print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------- # MAIN STARTS HERE #--------------------------- # # these functions will be consumed by clvtsa # ihs_xutils=( typeset env_func="listEnv_IHS_6_0" typeset inst_func="listInstances_IHS_SERVER" typeset prop_func="listProps_IHS_SERVER" ) e1 #*  kꂄAod/םa՝a֝a&2vT./usr/es/lib/ksh93/ihs/KLIB_IHS_get_installationser_codd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/ihs/KLIB_IHS_get_installations.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)05 1.1 src/43haes/lib/ksh93/ihs/KLIB_IHS_get_installations.sh, hacmp, 61haes_r714 11/28/11 15:19:20 # #=head1 NAME # # KLIB_IHS_get_installations - Obtain a list of all installed instances of a # fileset # #=head1 SYNOPSIS # # instances=$(KLIB_IHS_get_installations $fileset) # #=head1 DESCRIPTION # # Obtain a list of all of the installed instances of IBM Http Server # #=head1 ARGUMENTS # # 1: [scalar] fileset name # #=head1 RETURN # # echo to stdout the number of installed instances found followed by a # list of discovered fileset installations. Each item contains the version # and installation path. # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_IHS_get_installations { . /usr/es/lib/ksh93/func_include name=$1 installs="" integer count=0 LC_ALL=C; lslpp -Lc "$name" 2>/dev/null | while IFS=: read image fileset version tmp tmp tmp tmp tmp install_dir tmp; do if [[ ${fileset/$name/found} == "found" ]]; then echo $version | IFS='.' read a b c d e if (( $count == 0 )); then installs="$a.$b:$install_dir" else installs="$installs:$a.$b:$install_dir" fi count=$count+1 fi done echo "$count:$installs" return 0 }  kCodj/םa՝a֝a&j2vT./usr/es/lib/ksh93/ihs/KLIB_IHS_get_ihs_listen_hostr_codd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/ihs/KLIB_IHS_get_ihs_listen_host.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)93 1.1 src/43haes/lib/ksh93/ihs/KLIB_IHS_get_ihs_listen_host.sh, hacmp, 61haes_r714 11/28/11 15:15:46 # #=head1 NAME # # KLIB_IHS_get_ihs_listen_host - Obtain the hostname or IP address of the Listen # directive in an httpd.conf # #=head1 SYNOPSIS # # instances=$(KLIB_IHS_get_ihs_listen_host ihs_install_path) # #=head1 DESCRIPTION # # Function echo to stdout the IP Address or hostname of the first Listen # directive found in httpd.conf # #=head1 ARGUMENTS # # 1: [scalar] installation path to IBM Http Server # #=head1 RETURN # # None # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_IHS_get_ihs_listen_host { . /usr/es/lib/ksh93/func_include typeset ihs_path=$1 typeset httpd_conf="$ihs_path/conf/httpd.conf" typeset listen="" typeset listen_host="" if [[ -r $httpd_conf ]]; then listen=$(/usr/bin/grep -E "^Listen*" $httpd_conf | cut -d ' ' -f 2- | head -n 1) if [[ ${listen/*:*/found} == "found" ]]; then listen_host=$(echo "$listen" | cut -d ':' -f 1) fi fi echo "$listen_host" }  k꾿Bod/םa՝a֝a&2vT./usr/es/lib/ksh93/ihs/KLIB_IHS_get_ihs_plugin_pathr_codd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/ihs/KLIB_IHS_get_ihs_plugin_path.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)31 1.1 src/43haes/lib/ksh93/ihs/KLIB_IHS_get_ihs_plugin_path.sh, hacmp, 61haes_r714 11/28/11 15:17:22 # #=head1 NAME # # KLIB_IHS_get_ihs_plugin_path - Obtain the path to the WebSphere Plugin # used by the IBM Http Server # #=head1 SYNOPSIS # # instances=$(KLIB_IHS_get_ihs_plugin_path ihs_install_path) # #=head1 DESCRIPTION # # Function echo to stdout the path to the the WebSphere Plugin used # by the IBM Http Server # #=head1 ARGUMENTS # # 1: [scalar] installation path to IBM Http Server # #=head1 RETURN # # None # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_IHS_get_ihs_plugin_path { . /usr/es/lib/ksh93/func_include typeset ihs_path=$1 typeset httpd_conf="$ihs_path/conf/httpd.conf" typeset plugin_path="" if [[ -r $httpd_conf ]]; then plugin_path=$(/usr/bin/grep "^#" $httpd_conf | /usr/bin/grep "WebSpherePluginConfig" | awk '{print $2}') fi echo $plugin_path return 0 } == "f kIDod9/םa՝a֝a&92vT./usr/es/lib/ksh93/ihs/KLIB_IHS_log_messagein_pdd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/ihs/KLIB_IHS_log_message.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)51 1.1 src/43haes/lib/ksh93/ihs/KLIB_IHS_log_message.sh, hacmp, 61haes_r714 11/28/11 14:52:52 #=head1 NAME # # KLIB_IHS_log_message - print a message to the wassa.log # #=head1 SYNOPSIS # # KLIB_IHS_LOG_message "Message" # #=head1 DESCRIPTION # # Print a message to the console and to db2sa.log # # Global Variables: # KLIB_DEFAULT_LOGFILE = fullpath to log file name # KLIB_HACMPLOG_ENTRY = HACMPlog entry to obtain path for # KLIB_OUTPUT_CONSOLE = true / false # #=head1 ARGUMENTS # # 1: [scalar] Message: The message to be logged. # #=head1 RETURN # # 0: on SUCCESS # 1: on FAILURE # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_IHS_log_message { . /usr/es/lib/ksh93/func_include typeset MESSAGE=$1 DATE=$(date +"%m/%d/%y %H:%M:%S") if [[ -z $KLIB_DEFAULT_LOGFILE && -z $KLIB_HACMPLOG_ENTRY ]]; then echo "Fatal Error: KLIB_LOGFILE and KLIB_HACMPLOG_ENTRY not set!" return 1 fi LOGFILE=$KLIB_DEFAULT_LOGFILE if [[ -n $KLIB_HACMPLOG_ENTRY && -z $KLIB_HACMPLOG_VALUE ]]; then odmget -q name=$KLIB_HACMPLOG_ENTRY HACMPlogs | while IFS='=' read name value; do name=$(eval echo $name) if [[ "$name" == "value" ]]; then value=$(eval echo $value) KLIB_HACMPLOG_VALUE=$value/$KLIB_HACMPLOG_ENTRY fi done 2>/dev/null fi if [[ -n $KLIB_HACMPLOG_VALUE ]]; then LOGFILE=$KLIB_HACMPLOG_VALUE fi if [[ "$KLIB_OUTPUT_CONSOLE" == "true" ]]; then echo "$DATE: $MESSAGE" | tee -a $LOGFILE else echo "$DATE: $MESSAGE" >> $LOGFILE fi return 0 } n_/ kNEodu/םa՝a֝a&u2vT./usr/es/lib/ksh93/ihs/KLIB_IHS_ch_httpd_directiver_codd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/ihs/KLIB_IHS_ch_httpd_directive.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)55 1.1 src/43haes/lib/ksh93/ihs/KLIB_IHS_ch_httpd_directive.sh, hacmp, 61haes_r714 11/28/11 15:14:48 # #=head1 NAME # # KLIB_IHS_ch_httpd_directive - Change the httpd.conf directive to a new value # #=head1 SYNOPSIS # # KLIB_IHS_ch_httpd_directive "/usr/IBMIHS/conf/httpd.conf" "Listen" \ # "10.10.11.107:80" KLIB_IHS_ch_httpd_directive_port_equals # echo "Number of replacements: $?" # #=head1 DESCRIPTION # # This function changes the specified directive in httpd.conf formatted files. # # The 4th argument to this function is a comparison function, which is passed # four arguments, the return code from that function determines whether the current # value is replaced. # # A backup of the original file is created as filename.backup -- in the same path # as the original. # # The four arguments to the comparitor function are: # 1: Directive (current directive name - Listen) # 2: Current value in httpd.conf file # 3: Value we've been asked to use as a replacement # 4: Section name from config file, IfDefine, etc. # 5: Section arguments example: IfDefine HAVE_SSL, args=HAVE_SSL # If the return code from the function is 0, then a replacement will occur # If the return code is any value other than 0, then a replacement will not occur # # If the above function is not specified, then all values are replaced # # If a directive with the same name cannot be found, then a new entry is added # to the bottom of the httpd.conf file # #=head1 ARGUMENTS # # 1: [scalar] httpd.conf filename (required) # 2: [scalar] directive to search for (required) # 3: [scalar] new value for directive (required) # 4: [by ref] function to perform comparison (not required) # #=head1 RETURN # # returns the number of replacements / or additions performed # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_IHS_ch_httpd_directive { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset filename=$1 typeset directive=$2 typeset newvalue=$3 typeset regexp_function=$4 typeset tmpname typeset changed=false typeset -i ch_count=0 [[ -z $filename || ! -f $filename ]] && return 0 [[ -z $directive ]] && return -1 IFS=" " while read -r line; do tmpname=${line/\#*/} [[ -n $tmpname ]] && { # Did we find the start of an httpd.conf section? if [[ $tmpname != ${tmpname#\<} ]]; then section=${tmpname/\<\//} args=${section/*[[:space:]]/} args=${args/\>/} section=${section/[[:space:]]*/} section=${section/\>*/} section=${section//[[:space:]]/} # If this is the start of a new section if [[ ${section:0:1} == "<" ]]; then section=${section/\ $filename.new # If we couldn't change the value in the above logic, then # create a new entry at the end of the httpd.conf file for # our directive. $changed || { echo "$directive $newvalue" >> $filename.new (( ch_count += 1 )) } # Backup the file if a backup doesn't already exist [[ ! -f $filename.backup ]] && mv $filename $filename.backup [[ -f $filename ]] && rm -f $filename mv $filename.new $filename return $ch_count } # # k4!Fod/םa՝a֝a&2vT./usr/es/lib/ksh93/ihs/KLIB_IHS_mount_fs_for_directoryodd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/ihs/KLIB_IHS_mount_fs_for_directory.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)96 1.1 src/43haes/lib/ksh93/ihs/KLIB_IHS_mount_fs_for_directory.sh, hacmp, 61haes_r714 11/28/11 15:04:37 # #=head1 NAME # # KLIB_IHS_mount_fs_for_directory - Determine the pvids associated with a list of volume groups # #=head1 SYNOPSIS # # KLIB_IHS_mount_fs_for_directory vg directory # #=head1 DESCRIPTION # # Attempt to mount the filesystem on a volume group containing # the directory path # #=head1 ARGUMENTS # # 1: [scalar] volume group name # 2: [scalar] directory path # #=head1 RETURN # # 0 - success # 1 - failure # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_IHS_mount_fs_for_directory { . /usr/es/lib/ksh93/func_include typeset VG=$1 typeset DIRECTORY=$2 if [[ -z $(lsvg -o | grep $VG) ]] ; then varyonvg $VG 2>/dev/null if (( $? != 0 )) ; then KLIB_IHS_log_message "WAS ERROR: Unable to vary on volume group $vg." return 1 fi fi # Look for an existing FS on the volume group that might contain the directory and mount it typeset mountpoint for mountpoint in $(lsvg -l $VG | awk '$2 == "jfs" || $2 == "jfs2" {print $7}') ; do if [[ $mountpoint == ${DIRECTORY:0:${#mountpoint}} ]] ; then if [[ ${#mountpoint} == ${#DIRECTORY} || ${DIRECTORY:${#mountpoint}:1} == "/" ]] ; then if [[ -z $(mount 2>/dev/null | awk '$3 ~ /jfs2*$/ {print $2}' | grep $mountpoint) ]] ; then mount $mountpoint 2>/dev/null if (( $? != 0 )) ; then KLIB_WAS_log_message "WAS ERROR: Unable to mount filesystem $mountpoint." return 1 fi fi fi fi done if [[ -e $DIRECTORY ]] ; then return 0 else return 1 fi } (not kVm$o /םaX՝a֝a& 2vT./usr/es/sbin/cluster/sa/ihs/config/ihs_config.xmloryo p~B k*.n$o/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/ihs/config/ihs_config.xsdoryo urs=' k n$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/oraappsrv/ihs_AA k,n$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/oraappsrv/sbinAA kn$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/oraappsrv/confignfig.xAA k,$o$/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/ASConfigdoryo$$# @(#)69 1.1 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/ASConfig.sh, hacmp, 61haes_r714 11/28/11 15:03:40 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/ASConfig.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #----------------------------------------------------------------------------- # Global Definitions: #----------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oraappsrv/sbin/IO . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASUtilities #----------------------------------------------------------------------------- # Functions: # osaASDumpCfg # osaASGetCfg # osaASGetResourceGroups # osaASGetMetadata # osaASGetNodes # osaASGetResource # osaASGetConfiguredInstances #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Function: # osaASDumpCfg # # Purpose: # Dump allASInstances and allASComponents to App Discovery database # `allASInstances' is just an array of strings (instance names) # `allASComponents' contains instance name with index as key and a # component as value. # # For instance, # allASComponents["as1_0"]="OC4J" # allASComponents["as1_1"]="OID" # allASComponents["as1_2"]="SSO" # where, `as1' is the AS instance name, consisting of three components # OC4J, OID and SSO. # # Used this since there is no easy way to handle array of arrays. # The following function is called after one has parsed the OPMN # configuration file, i.e., both arrays have been instantiated. # # Arguments: # (1) AS Instance Name # (2) Application Name (Smart Assist) for storing config data # # Returns: # 0 on success # 1 on failure # function osaASDumpCfg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset id=$1 typeset app_id=$2 typeset -A allcomps typeset comp typeset instance_name=${id//\./\_} typeset -i x=0 for comp in ${!allASComponents[*]}; do component=${comp##$instance_name} if [[ $component != $comp ]]; then # match found allcomps[$x]=${allASComponents[$comp]} (( x+=1 )) fi done if [[ (-z $id) || (${#allcomps[*]} -le 0) ]]; then osaError "No components for given instance ["$id"] found." else claddsaapp -a $app_id components="${allcomps[*]}" fi } #----------------------------------------------------------------------------- # Function: # osaASGetCfg # # Purpose: # Fetches component names that belong to a given instance name. # # Arguments: # (1) id: Instance name/ID whose components we are looking for. # (2) allcomps: Array name which is populated with all components for # `inst' # Returns: # 0 on Success # 1 on failure # function osaASGetCfg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset id=$1 typeset -n allcomps=$2 typeset comps=$(clquerysaapp -a $id components | sed 's/^components=//') typeset -i index=0 for comp in $comps; do allcomps[$index]=$comp (( index = $index + 1 )) done } #---------------------------------------------------------------------------- # Function: # osaASGetResourceGroups # # Purpose: # Get a list of HACMP resource groups for the specified application name # # Arguments: # (1) Application Name # # Output: # List of HACMP resource groups # # Returns: # 0 on success # 1 on failure # function osaASGetResourceGroups { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 typeset name value odmget -q "sa_key=$appid" HACMPgroup | while IFS='=' read name value do name=$(echo $name) [[ "$name" == "group" ]] && { value=${value//\"/} echo $(echo $value) } done } #---------------------------------------------------------------------------- # Function: # osaASGetMetadata # # Purpose: # Get HACMPsa_metadata for a particular HACMP application, name name/value # pair. # # Arguments: # (1) Application Name # (2) Name of the name/value pair # # Output: # Value(s) of the name/value pair # # Return: # 0 on success # 1 on failure # function osaASGetMetadata { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 typeset name=$2 clquerysaapp -a $appid | grep $name | awk -F= '{ print $2 }' } #---------------------------------------------------------------------------- # Function: # osaASGetNodes # # Purpose: # Get a list of nodes from resource groups that belong to the application # # Arguments: # (1) Application Name # # Output: # List of nodes, list of nodes is ordered based on appearance in # participating node list. # # Returns: # 0 on success # 1 on failure # function osaASGetNodes { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 typeset arrNodes typeset RGS=$(osaASGetResourceGroups $appid) # # Get a list of nodes for the application, need to preserve the order # in which the nodes are presented in the resource group list(s) # for rg in $RGS; do set -a eval $(clvt query resource_group $rg | grep NODES) set +a for nodeA in $NODES; do found=0 for nodeB in $arrNodes; do [[ "$nodeA" == "$nodeB" ]] && found=1 done (( $found == 0 )) && arrNodes="$arrNodes $nodeA" done done echo $arrNodes } #---------------------------------------------------------------------------- # Function: # osaASGetResource # # Purpose: # Get the value of a particular resource type given the application name # # Arguments: # (1) Application Name # (2) Resource type (i.e. SERVICE_LABEL) # # Output: # List of resources defined to HACMP of the specified type # # Return: # 0 on success # 1 on failure # function osaASGetResource { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 typeset rName=$2 typeset RGS=$(osaASGetResourceGroups $appid) for rg in $RGS; do clvt query resource_group $rg | grep $rName | awk -F= '{ print $2 }' | sed -e "s/\"//g" done } #---------------------------------------------------------------------------- # Function: # osaASGetConfiguredInstances # # Purpose: # Output a list of already configured to HACMP AS instances (AFC or CFC) # # Arguments: # n/a # # Returns: # 0 on success # function osaASGetConfiguredInstances { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -n dbinsts=$1 typeset -i index=0 /usr/bin/odmget -q "name=ORACLE_AS_INSTANCE" HACMPsa_metadata | while IFS='=' read name value; do name=$(echo $name) [[ "$name" == "value" ]] && { value=$(echo $value) dbinsts[$index]=${value//\"/} (( index += 1 )) } done return 0 } BOSE_ k\$o$/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/ASMonitororyo$$# @(#)94 1.1 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/ASMonitor.sh, hacmp, 61haes_r714 11/28/11 15:08:56 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/ASMonitor.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASGlobals . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASUtilities #---------------------------------------------------------------------------- # Functions: # osaASShowStatus # osaFindAliveComponents # osaCheckOPMN #---------------------------------------------------------------------------- typeset STATUS_OK=0 typeset STATUS_NOTOK=1 typeset AS_STATUS_DOWN="Down" typeset AS_STATUS_ALIVE="Alive" #---------------------------------------------------------------------------- # Function: # osaASShowStatus # # Purpose: # Return the status of a given component in a given instance. # # Arguments: # (1) inst: Instance name. # (2) comp: Component name. # # Returns: # 0 on Success # 1 on failure # function osaASShowStatus { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset inst=$1 typeset comp=$2 typeset status=1 typeset cmp # for BI we check individual components of it if [[ $comp == "BI" ]]; then typeset -i bifound=0 for cmp in ${AS_BI_COMPS[*]}; do typeset c # remove the instance name from the component for c in ${aliveASComponents[*]}; do c=${c/*\=\>/} if [[ $c == $cmp ]]; then status=0 (( bifound = $bifound + 1 )) break fi done done # next, validate that all BI components have been found. if [[ $bifound -eq ${#AS_BI_COMPS[*]} ]]; then status=0 else status=1 fi else # for others we do not need to worry about individual parts typeset c for c in ${aliveASComponents[*]}; do # remove the instance name from the component c=${c/*\=\>/} if [[ $c == $comp ]]; then status=0 break fi done fi return $status } #---------------------------------------------------------------------------- # Function: # osaFindAliveComponents # # Purpose: # Find out all alive components for a given instance. This will be # stored in the global variable `aliveASComponents.' # This shall read status for all components. # # Arguments: # (1) inst : [optional] instance name for which we want to look for alive # components. If `null' all instances are looked up. # # Returns: # n/a # function osaFindAliveComponents { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset instance osaCheckOPMN $OPMN_BINPATH/opmnctl status -noheaders -fsep : -fmt %ins%cmp%sta | { set -A aliveASComponents IFS=":"; typeset inst comp stat typeset -i x=0 while read inst comp stat; do if [[ (! -z $stat) && ($stat == "Alive") ]]; then # If an instance name was passed in we only take if [[ -n $instance ]]; then # into account component status for the given instance. if [[ "$inst" == "$instance" ]]; then aliveASComponents[$x]=$inst"=>"$comp (( x = $x + 1 )) fi else # Otherwise capture component status for all instances # returned by OPMN. aliveASComponents[$x]=$inst"=>"$comp (( x = $x + 1 )) fi fi done unset IFS } } #---------------------------------------------------------------------------- # Functions: # osaCheckOPMN # # Purpose: # Following function checks to see if OPMN is alive. If it is dead for # some reason, it shall start it using: opmnctl start # # Arguments: # n/a # # Returns: # 0 success # <0 failure # function osaCheckOPMN { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x $OPMN_BINPATH/opmnctl ping > /dev/null 2>&1 if [[ $? -ne 0 ]]; then /usr/bin/su - oracle -c "$OPMN_BINPATH/opmnctl start" fi } ed k$o$b/םa֝a֝a&b2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/ASControloryo$$# @(#)35 1.1 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/ASControl.sh, hacmp, 61haes_r714 11/28/11 15:06:21 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/ASControl.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #----------------------------------------------------------------------------- # Functions # osaASControl # osaASCompStart # osaASCompStop #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Function: # osaASControl # # Purpose: # Runs an OPMN start or stop command for a speficic component in a # specific instance. # # Arguments: # (1) type: Type of OPMN command (either: $OPMNCTL_START_ARG OR # $OPMNCTL_STOP_ARG) # (2) inst: Instance name. # (3) comp: Component name. # # Returns: # 0 on Success # 1 on failure # function osaASControl { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset type=$1 typeset inst=$2 typeset comp=$3 # # If type is attempting to start OPMN processes, ensure # OPMN is started itself # if [[ "$type" == "startproc" ]]; then $OPMN_BINPATH/opmnctl ping 2>/dev/null >/dev/null if (( $? == 2 )); then /usr/bin/su - oracle -c "$OPMN_BINPATH/opmnctl start" fi fi /usr/bin/su - oracle -c "$OPMN_BINPATH/opmnctl $type ias-component=$comp" | while read line; do log_msg $line done # using ASMonitor osaFindAliveComponents $inst osaASShowStatus $inst $comp return $? } #----------------------------------------------------------------------------- # Function: # osaASCompStart # # Purpose: # Starts an AS component # # Arguments: # (1) inst: Instance name # (2) comp: component name # # Returns: # 0 if Successful # 1 otherwise # function osaASCompStart { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset inst=$1 typeset comp=$2 typeset ret=0 if [[ $comp == "BI" ]]; then typeset cmp for cmp in ${AS_BI_COMPS[*]}; do osaASControl startproc $inst $cmp (( ret = $ret + $? )) done else osaASControl startproc $inst $comp ret=$? fi if [[ $ret -eq 0 ]]; then log_msg "Started $inst:$comp successfully." return 0 else osaError "Unable to start $inst:$comp." return 1 fi } #----------------------------------------------------------------------------- # Function: # osaASCompStop # # Purpose: # Notifies if a component is alive or not. # # Arguments: # (1) inst: Instance name # (2) comp: component name # # Returns: # 0 if Successful # 1 otherwise # function osaASCompStop { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset inst=$1 typeset comp=$2 if [[ $comp == "BI" ]] then typeset cmp for cmp in ${AS_BI_COMPS[*]} do osaASControl stopproc $inst $cmp (( ret = $ret + $? )) done else osaASControl stopproc $inst $comp ret=$? # Determine if there are any alive components remaining osaFindAliveComponents $inst [[ -z "${aliveASComponents[*]}" ]] && { # if not stop the OPMN daemon since no other # processes are running /usr/bin/su - oracle -c "$OPMN_BINPATH/opmnctl shutdown" } fi if (( $ret <= 1 )) then log_msg "Stopped $inst:$comp successfully." return 0 else osaError "Unable to stop $inst:$comp." return 1 fi }  k$o$/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/ASGlobalsoryo$$# @(#)66 1.1 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/ASGlobals.sh, hacmp, 61haes_r714 11/28/11 15:07:34 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/ASGlobals.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm:$FPATH_BASE/util export FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && { PS4='$LINENO |' set -x } # GLOBALS typeset -A allASInstances typeset -A allASComponents set -A aliveASComponents set -A AS_BI_COMPS AS_BI_COMPS=(ReportsServer Discoverer Personal) # End of GLOBALS 4 kP$o$#/םa֝a֝a&#2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/ASUtilitiesryo$$# @(#)29 1.1 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/ASUtilities.sh, hacmp, 61haes_r714 11/28/11 15:10:36 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/ASUtilities.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oraappsrv/sbin/IO #---------------------------------------------------------------------------- # Functions: # osaSetASEnvs # osaASFindComps # osaASGetVGs # osaASFindInstances #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Functions: # osaSetASEnvs # # Purpose: # Should be called before any AS-related operations are performed. # It is also VERY IMPORTANT to call (or re-call) it if $ORACLE_HOME # has been modified in current process and future operations are # going to be performed in this process. # # Arguments: # (1) ORACLE_HOME # # Returns: # 0 success # <0 failure # function osaSetASEnvs { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x if [[ -n $1 ]]; then ORACLE_HOME=$1 export ORACLE_HOME fi OSA_OPMN_CONF_FILE=$ORACLE_HOME/opmn/conf/opmn.xml OPMN_BINPATH=$ORACLE_HOME/opmn/bin export OSA_OPMN_CONF_FILE OPMN_BINPATH } #---------------------------------------------------------------------------- # Function: # osaASGetConfigChecksum # # Purpose: # Obtain the opmn.xml checksum to determine if the opmn configuration # file has changed since the last time we've run verification # # Arguments: # n/a # # Returns: # 0 on success # <0 on failure # function osaASGetConfigChecksum { typeset m n file [[ ! -f $OSA_OPMN_CONF_FILE ]] && return 1 /bin/cksum $OSA_OPMN_CONF_FILE | read m n file echo $m-$n return 0 } #---------------------------------------------------------------------------- # Function: # osaASFindComps # # Purpose: # Find installed components (i.e., resource groups for AS). # Done by looking up Oracle AS components configured within # $ORACLE_HOME/opmn/conf/ # # Arguments: # n/a # # Output: # List of Oracle Components installed # # Returns: # 0 success # function osaASFindComps { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -A allASInstances typeset -A comps typeset line expr instance component index [[ ! -f $OSA_OPMN_CONF_FILE ]] && return 1 while read line; do if [[ -z $instance ]]; then # not in an instance section yet # just keep looking for more the instance section expr=${line##""} # clean up instance name # echo "Instance definition found for: " $instance fi elif [[ $line == "" ]]; then osaASPushInstance $instance comps unset instance unset comps else # we are in an instance section so we now look for components expr=${line##""} # clean up instance name fi done < $OSA_OPMN_CONF_FILE if [[ $instance_name == $instance ]]; then return 0 else return 1 fi } #---------------------------------------------------------------------------= # Function: # osaASPushInstance # # Purpose: # The following function is used to dump an instance configuration # (i.e., instance name and all components associated with it) # # Arguments: # $1 - instance name # $2 - component reference (returned assoc array) by ref # # Returns: # function osaASPushInstance { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset inst=$1 typeset -n compref=$2 typeset comp index # For now we shall just populate it in memory, but eventually it should # call App Discovery config storage functions. (( index=${#allASInstances[*]} )) allASInstances[$index]=$inst # Need to change the name, remove . -> _ typeset instance_name=${inst//\./\_} for index in ${!compref[*]}; do key=${instance_name}"_"${index} allASComponents[$key]="${compref[$index]}" done } #---------------------------------------------------------------------------- # Function: # osaASGetVGs # # Purpose: # Returns the Volume Group containing $ORACLE_HOME # # Arguments: # -none- # # Returns: # Returns(echos) a VG name # function osaASGetVGs { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset vg=$(KLIB_AIX_get_vg_by_path $ORACLE_HOME) echo $vg } #---------------------------------------------------------------------------- # Function: # osaASFindInstances # # Purpose: # Find the Oracle Instances (Application Server) # # Arguments: # n/a # # Output: # list of instances # # Returns: # n/a # function osaASFindInstances { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x osaASFindComps typeset inst for inst in ${allASInstances[*]}; do echo $inst done } #----------------------------------------------------------------------------- # Function: # osaASRemoveComponents # # Purpose: # Remove the application monitors, application servers, and resource groups # from the PowerHA SystemMirror configuration. In addition the SystemMirror metadata stored for # this instance is removed from the cluster configuration. # # Arguments: # (1) application name # # Returns: # 0 on success # 1 on failure # function osaASRemoveComponents { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -L32 appid=$1 for app in $(osaASGetResource $appid APPLICATIONS); do MONITORS=$(clvt query application $app | grep ASSOCIATEDMONITORS | awk -F= '{ print $2 }' | sed -e "s/\"//g") for monitor in $MONITORS; do clvt delete application_monitor $monitor (( $? != 0 )) && { user_msg 30 21 $monitor InternalErrorAbort } done clvt delete application $app > /dev/null 2>&1 (( $? != 0 )) && { user_msg 30 22 $app InternalErrorAbort } done for rg in $(osaASGetResourceGroups $appid); do clvt delete resource_group $rg >/dev/null 2>&1 (( $? != 0 )) && { user_msg 30 23 $rg InternalErrorAbort } done #Remove Filecollection clvt delete file_collection $appid 2>/dev/null # Remove the application (SA) references for this instance clrmsaapp -a $appid (( $? != 0 )) && { user_msg 30 24 $appid InternalErrorAbort } return 0 } nst k1$o$(/םa֝a֝a&(2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/Catalog$$# ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/Catalog.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oraappsrv/sbin/Catalog.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: Catalog ## ## PURPOSE: ## This file includes an array with all possible messages ## to facilitate logging related functions defined in IO.sh to log messages from oraappsrv.cat ## [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -A SA_Catalog SA_Catalog=( [catalog]="oraappsa.cat" [10,1]="Oracle Smart Assist" [10,2]="Oracle RDBMS Database" [10,6]="Oracle Application Server AFC" [10,5]="Oracle Application Server CFC" [20,1]="Creating PowerHA resource group: %s to support\n\ MR Database: %s.\n" [20,2]="\tCreating PowerHA application server: %s\n" [20,3]="\tCreating PowerHA application monitor: %s\n" [20,4]="Adding MR Database: %s to the PowerHA configuration.\n" [20,5]="\tCreating service IP label: %s\n" [20,6]="\tAdding Oracle AS component: %s to PowerHA resource group\n\ \t%s\n" [20,7]="Creating PowerHA resource group: %s to support\n\ Oracle Application Server component: %s\n" [20,8]="\tAdding PowerHA application monitor: %s\n\ \tfor Oracle Application Server component %s\n" [20,9]="\tOracle MR Database version: %s\n" [20,10]="\tAdding Oracle MR Database Listener\n\ \t[ IP Label: %s, Listener Name: %s]\n" [20,11]="Adding RDBMS database: %s to the PowerHA configuration.\n" [20,12]="\tAdding Oracle RDBMS Database Listener\n\ \t[ IP Label: %s, Listener Name: %s]\n" [20,13]="Creating PowerHA resource group: %s to support\n\ RDBMS Database: %s\n" [20,14]="#\n# Oracle CORE Version: %s\n#\n" [20,15]="#\n# WARNING: Database is not running. Volume groups where\n\ # logs, control files, and tablespaces, reside will be missing\n#\n" [20,16]="Modifying Oracle Application Server: %s, removing existing\n\ PowerHA cluster components.\n" [20,17]="\tOracle RDBMS Database version: %s\n" [20,18]="Modifying Oracle RDBMS Database: %s, removing existing\n\ PowerHA cluster components.\n" [30,1]="ERROR: The PowerHA resource group: %s already exists.\n\ Please choose another name for the application.\n" [30,2]="Unexpected error encountered while attempting to create\n\ resource group: %s\n" [30,3]="ERROR: The PowerHA application server: %s already exists.\n\ Please choose another name for the application.\n" [30,4]="Unexpected error encountered while attempting to create\n\ PowerHA application server: %s\n" [30,5]="Unexpected error encountered while attempting to create\n\ PowerHA application monitor: %s\n" [30,6]="ERROR: The PowerHA application monitor: %s already exists.\n\ Please choose another name for the application.\n" [30,7]="Unexpected error encountered while attempting to create\n\ PowerHA service IP label: %s\n" [30,8]="ERROR: Unable to create the service IP label: %s\n\ There are no available PowerHA networks defined. Please either defined one\n\ or more PowerHA networks. Or, alternatively define the service IP label\n\ within the PowerHA configuration prior to re-running the Oracle smart\n\ assistant.\n" [30,9]="Unexpected error encountered while attempting to associate\n\ the PowerHA resource group: %s with the Oracle smart assist application\n\ %s.\n" [30,10]="ERROR: An application with the name: %s is already\n\ defined to PowerHA. Please choose another Oracle smart assist application\n\ name.\n" [30,11]="Unexpected error encountered while attempting to add \n\ Oracle Application Server component resources to the PowerHA resource\n\ group: %s.\n" [30,12]="Unexpected error encountered while attempting to add\n\ Oracle Application Server metadata to the PowerHA configuration for\n\ application server: %s.\n" [30,13]="ERROR: Unable to locate the OPMN configuration file\n\ %s on the local system.\n\ The ORACLE_HOME must follow the Oracle Flexible Architecture (OFA) directory\n\ hierarchy.\n" [30,14]="ERROR: The environment variable ORACLE_HOME must be set.\n\ Please set the ORACLE_HOME to an appropriate Oracle Application Server, or\n\ Oracle RDBMS database, then re-run the PowerHA Oracle Smart Assist.\n" [30,15]="Unexpected error encountered while attempting to add\n\ PowerHA application monitor: %s for\n\ PowerHA application server: %s\n" [30,16]="ERROR: %s missing argument -a application_name\n" [30,17]="ERROR: %s missing argument -c component id\n" [30,18]="ERROR: %s missing argument -i instance\n" [30,19]="ERROR: %s missing argument -d database instance\n" [30,20]="ERROR: The Service IP label: %s is not resolvable on the\n\ local system. Please check to ensure the IP label is resolvable via either\n\ DNS, or /etc/hosts.\n" [30,21]="Unexpected error encountered while attempting to remove\n\ application monitor: %s.\n" [30,22]="Unexpected error encountered while attempting to remove\n\ application server: %s.\n" [30,23]="Unexpected error encountered while attempting to remove\n\ resource group: %s.\n" [30,24]="Unexpected error encountered while attempting to remove\n\ application: %s Oracle smart assist component references from the PowerHA\n\ cluster configuration.\n" [30,25]="ERROR: The ORACLE_HOME directory used for Oracle application\n\ Server: %s does not exist on the local node: %s\n\ Please perform modifications on a node where the Oracle application server\n\ resides.\n" [30,26]="ERROR: Volume group: %s is already defined to PowerHA.\n\ Please only select volume groups that have not been added to an PowerHA\n\ resource group.\n" [30,27]="ERROR: Service IP label: %s is already defined to\n\ PowerHA resource group: %s\n\ Please choose a service IP label that does not already participate in an\n\ PowerHA resource group.\n" [30,28]="ERROR: Node %s was used more than once in the takeover or\n\ primary node lists. Please only use a node once in either the primary\n\ or takeover node lists.\n" [30,29]="Invalid application name: %s.\nValid PowerHA names must be at least one character long and can contain\n\ characters ([A-Z, a-z]), numbers ([0-9]) and '_' (underscore). A name cannot\n\ begin with a number and a PowerHA reserved word cannot be a valid name.\n" [30,100]="Please contact IBM support to resolve the error reported above.\n\ A copy of the Oracle Smart Assistant log file: /var/hacmp/log/oraclesa.log\n\ will be required to diagnose this error. A copy of this log file has been\n\ saved to the location: %s\n.\n\ This log file will be captured as part of a snap -e, or can be transmitted\n\ separately.\n" [30,101]="ERROR: The environment variable ORACLE_USER must be set.\n\ Please set the ORACLE_USER to an appropriate Oracle Application Server user\n\ then re-run the PowerHA Oracle Smart Assist.\n" [40,1]="Requested STOP of AS instance: %s component: %s\n\ in PowerHA application %s.\n" [40,2]="Setting ORACLE_HOME=%s\n" [40,3]="Failed to STOP Oracle component %s\n" [40,4]="Successfully STOPPED Oracle component: %s\n" [40,5]="Requested START of AS instance: %s component: %s\n\ in PowerHA application %s.\n" [40,6]="Failed to START Oracle component %s\n" [40,7]="Successfully STARTED Oracle component: %s\n" [40,8]="Monitoring AS instance: %s and component: %s\n\ in PowerHA application: %s\n" [40,9]="Component %s is NOT RUNNING\n" [40,10]="Component %s is running.\n" [40,11]="Setting ORACLE_USER=%s\n" [50,1]="DB Background Processes STARTED successfully.\n" [50,2]="DB Background Processes could NOT be STARTED.\n" [50,3]="DB Background Processes STOPPED successfully.\n" [50,4]="DB Background Processes was not STOPPED.\n" [50,5]="Successfully STOPPED Oracle DB Instance: %s\n" [50,6]="Failed to STOP Oracle DB Instance %s\n" [50,7]="Successfully STARTED Oracle DB Instance: %s\n" [50,8]="Failed to START Oracle DB Instance: %s\n" [50,9]="Oracle SID: %s is not in the OPEN state\n\ Marking DB as DOWN.\n" [50,10]="Oracle SID: %s is in the OPEN state.\n" [50,11]="Mandatory DB Process %s is NOT running.\n" [50,12]="Failed Oracle Database Process Test for Oracle SID: %s.\n\ See the message above for the missing process name(s).\n" [50,13]="All mandatory processes are running for Oracle SID: %s\n" [50,14]="Failed Oracle Listener are NOT running for Oracle SID: %s.\n" [50,15]="Oracle Listener(s) are running for Oracle SID: %s\n" [50,16]="Performing command: %s on listener: %s\n" [60,1]="Unable to start Background Processes. DB START FAILED.\n" [60,2]="Failed to start DB listeners, shutting down Database background\n\ processes.\n" [60,3]="Unable to stop listeners. DB STOP FAILED.\n" [60,4]="Unable to stop DB Background Processes. DBStopAll FAILED.\n" [90,1]="Problem with XML configuration file. Ensure a valid XML file supplied.\n" [90,2]="Supplied directory %1$s for ORACLE_HOME does not exist.\n" [90,3]="PFILE or SPFILE for the supplied ORACLE_SID does not exist at %1$s/dbs.\n" [90,4]="Volume Group %1$s does not exist.\n" [90,5]="User ID %1$s does not exist.\n" [90,6]="Primary Node %1$s is not valid in the cluster.\n" [90,7]="One of the Takeover node from %1$s is not valid in the cluster.\n" [90,8]="Problem in parsing %1$s tag in function %2$s\n" [90,9]="%1$s is not a valid Instance Name as per opmn.xml\n" ) local  kN$o$ /םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/IOalog$$# @(#)91 1.1 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/IO.sh, hacmp, 61haes_r714 11/28/11 15:13:00 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/IO.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG ## ## NAME: IO ## ## PURPOSE: ## This file includes logging related functions. Some of the fucntions makes use of an array ## called SA_Catalog defined in a file called Catalog ## #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- # Read in the message catalog entries . /usr/es/sbin/cluster/sa/oracle/sbin/Catalog function user_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -i s=$1 typeset -i id=$2 shift shift typeset args=$* typeset c="$s,$id" [[ -z $s || -z $id ]] && { return 1 } /usr/bin/dspmsg -s $s "${SA_Catalog[catalog]}" $id "${SA_Catalog[$c]}" $args echo # Log the information to the oraclesa.log log file typeset msg=$(LC_ALL=C /usr/bin/dspmsg -s $s "${SA_Catalog[catalog]}" $id "${SA_Catalog[$c]}" $args) log_msg $msg } function InternalErrorAbort { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset date=$(date +"%m.%d.%y-%H-%M-%S") typeset logfile="/var/hacmp/log/oraclesa.fatal.$date" cp -f $ORACLESA_LOGFILE $logfile 2>/dev/null user_msg 30 100 $logfile exit 1 } function osaGetLogPath { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset LOGFILE="oraappsa.log" typeset DEFAULTLOGPATH=$(odmget -q "name=oraappsa.log" HACMPlogs 2>/dev/null | grep -w value | awk -F'=' '{ print $2 }' | sed -e"s/\"//g") [[ -z $ORACLESA_LOGPATH ]] && { [[ -z $DEFAULTLOGPATH ]] && { LOGFILE="/var/hacmp/log/oraappsa.log" } || { LOGFILE="$DEFAULTLOGPATH/$LOGFILE" } } || { LOGFILE="$ORACLESA_LOGPATH/$LOGFILE" } echo $LOGFILE } function log_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo $DATE INFO: $* >> $ORACLESA_LOGFILE } function warn_msg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo $DATE WARN: $* >> $ORACLESA_LOGFILE } function osaError { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DATE=$(/bin/date +"%D %T") echo $DATE ERROR: $1 >> $ORACLESA_LOGFILE } #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- ORACLESA_LOGFILE=$(osaGetLogPath)  le kx$o@Z /םa֝a֝a&Z 2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_oraStartASo@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/cl_oraStartAS.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)00 1.1 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/cl_oraStartAS.sh, hacmp, 61haes_r714 11/28/11 15:16:19 ## ## NAME: ## cl_oraStartAS ## ## PURPOSE: ## Oracle AS Stop script for individual components ## ## ARGUMENTS: ## -a Application Name (smart assist) ## -i Oracle Application Server Instance Name ## -c Oracle Application Server Component Name ## ## RETURNS: ## 0 on success ## 1 on failure ## #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- typeset version='1.5' . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASUtilities . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASControl . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASMonitor . /usr/es/sbin/cluster/sa/oraappsrv/sbin/IO typeset PROGRAM=${0##*/} PATH=$PATH:/bin:/usr/bin PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities export PATH if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- while getopts a:c:i: option do case $option in a) APPLICATION_NAME=$OPTARG ;; c) AS_COMPONENT=$OPTARG ;; i) AS_INSTANCE=$OPTARG ;; *) ;; esac done [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } [[ -z $AS_COMPONENT ]] && { user_msg 30 17 $PROGRAM exit 1 } [[ -z $AS_INSTANCE ]] && { user_msg 30 18 $PROGRAM exit 1 } user_msg 40 5 $AS_INSTANCE $AS_COMPONENT $APPLICATION_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME | grep ORACLE_HOME) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME osaSetASEnvs $ORACLE_HOME set -a eval $(clquerysaapp -a $APPLICATION_NAME | grep ORACLE_USER) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER osaASCompStart $AS_INSTANCE $AS_COMPONENT (( $? != 0 )) && { user_msg 40 6 $AS_COMPONENT exit 1 } user_msg 40 7 $AS_COMPONENT exit 0 H$ k$o@' /םa֝a֝a&' 2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_oraStopASo@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/cl_oraStopAS.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)39 1.1 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/cl_oraStopAS.sh, hacmp, 61haes_r714 11/28/11 15:17:41 ## ## NAME: ## cl_oraStopAS ## ## PURPOSE: ## Oracle AS Stop script for individual components ## ## ARGUMENTS: ## -a Application Name (smart assist) ## -i Oracle Application Server Instance Name ## -c Oracle Application Server Component Name ## ## RETURNS: ## 0 on success ## 1 on failure ## #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- typeset version='1.6' . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASUtilities . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASMonitor . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASControl . /usr/es/sbin/cluster/sa/oraappsrv/sbin/IO typeset PROGRAM=${0##*/} PATH=$PATH:/bin:/usr/bin PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities export PATH if [[ -z $ODMDIR ]]; then ODMDIR=/usr/es/sbin/cluster/etc/objrepos/active/ fi export ODMDIR #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- while getopts a:c:i: option do case $option in a) APPLICATION_NAME=$OPTARG ;; c) AS_COMPONENT=$OPTARG ;; i) AS_INSTANCE=$OPTARG ;; *) ;; esac done [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } [[ -z $AS_COMPONENT ]] && { user_msg 30 17 $PROGRAM exit 1 } [[ -z $AS_INSTANCE ]] && { user_msg 30 18 $PROGRAM exit 1 } user_msg 40 1 $AS_INSTANCE $AS_COMPONENT $APPLICATION_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME | grep ORACLE_HOME) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME osaSetASEnvs $ORACLE_HOME set -a eval $(clquerysaapp -a $APPLICATION_NAME | grep ORACLE_USER) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER osaFindAliveComponents $AS_INSTANCE osaASShowStatus $AS_INSTANCE $AS_COMPONENT (( $? != 0 )) && { # Component is already down user_msg 40 4 $AS_COMPONENT exit 0 } # Otherwise stop the component if its still running osaASCompStop $AS_INSTANCE $AS_COMPONENT (( $? != 0 )) && { user_msg 40 3 $AS_COMPONENT exit 1 } user_msg 40 4 $AS_COMPONENT exit 0  lꎍ$o@/םa֝a֝a&Wx2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_addInstancector@@   -e anorst$AIO_cdilmpu"#=CEFLNPRSTfgh&()/01DGMUV[]bvy{}'.2:BH\x|!,39;>?kw468KYqz+7<%*5XWZ~J@2Ff Q"&z@!H -Yn~g5Sr N،GwwTѹ$֜\2$04!GU4nrrZhh<ǔHdISsӰD᠀hh용jbW-.3 ;;-rUNv Urg@!wvA{lWܥ93j各X` meM+wv"_,qU9ڙeMe`6,,nZf78LT_.~xq\fFV89j7 B,6$T$H@v8+@pu-D.B-5!rp\"0Ģ,!U^BNI(7=;H $$4!8ۀl!03* Ú8vP 鬔$䜢>SsӶò%\)yۧrыZ @s +2N2bɣ4p"J. h;QE^k<gh ?p<0+` {+"?< e1+W|+ 7k)rpzM;<O/؃ 0`E"M;[RSf ay/(l9pyt$"SGhOFj5 \$D8=apüUp-(x+a^SP^])1+W|+ 7k)r8wжͺ6$,#òL(]xge4Rh*1ւ0eZʊ6fYzi*eKlع\kǁA֎րìʯVjhꪪkA[2].B-5!rp\"0Ģ,!U^yp*F̢r Mfe;\1(UW\eSMkGUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSGhɭxp/.MUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUMh# fQ UW2.N \!U^ ZZMal!w fSpZ*Ád *h# fQ UW2.N \!U^ +5nMkJ`<⧘ٔBArUi̧q *T<0̢r Mfe;[3UefɶbTƶb\z%x?onc 8kB ,ʕ& Dosf/΍ͣ-hꪪ2 h\^̭B^9ňJM"r27{; WN 焹U7MX<׃՜"4wAynSG4v|M2r4w!X3q}orw b_XK+SUk ON 穴wAicaeStՃ~U7MX=%g0@SG4v3a;MH3=8>nUn 9U*r߆p&SN&7.Ufcm,9b/fVG/x , D@j679\7b\{ܽ85bs.ŏ8]}r<{oع\ܙZm+Jxk[+Ly)-<3qΘ^AjX[Y`gѹ2A@'{jxO΍ɕ :kBt`5EegqӝL!9# y7 {onlk̪/c{P`( o { >׹{8a827&VSXZxf/1v/9 Ա`MRUg>׹{hZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUMeX<NBBAreWڍVb%`L 8v3nh,caҕYo-reWڜ߃ U;>&^9;ЬJ 2,esGel4wᘴe{F _R̪S0a wḴe{F ,&5,ʯ9@@G4/Nj$$%^X=h۔*&'8H`Z%ȤM ǏƛTѱ9bsԳ"A oع\cRōq4x~pJk O EܠSF AƤ<Aic:&~j6$1)DDq @M5! XX4hX8W N47?rdH1~іuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSGdzsV4w𓐑{IV=h۔*hʳ!+4wNYU;mn\EN 8VՓܴm Y_jj*ߦ2՞-reWڀ7b;`gڲUbm4߄e"ʧzrn96bSG~gYT@mmYo,ʯ;+9p~eʬme5`r/qU;@7 ǭreWژ , D@j679\5bsqU;@[fkU)-<3qr1N52PćC7~7(3#Q,gDFˑ,$)<D6" @MU8aV$ 20U:o4X:WeS 0a5$3qU;@tM7 oԃAً֌;$Ӛx)zѷ(.fU}f,BV hîw}ݬ-^Q,Ktorѷ(/fU} ă;eh۔Գ*@@ ݿsaSp#6he{| hCBQ~6g& <\Z 2XG4vZ^ h8?)rG~q̹U6VaM,9𓐐|Z6ìʯ1N"Xr)D<=q4ln()roع\~,jC oع\cM3Ƶ_,j@N 9 AfWZ6ìʯ37$'8 Qnc fW 8XH>1~іuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSGdzsV4w2 dG4vU X)ev9YT5`ZT1tՃQ}7,5Noع\02[;@f;aeStՃ5Yn9{rѷ(.݃ng-M`^Ns tʕ& D-K {+-@g (( neqIyp438I@"Q$`gʭo$3ˑx,ydR" E+7*fDM8<ʦn$G^k׹GM L +8&qd * n$M ~a;#;/p^3wT@eSLV̪\R^F3 .zH(JHr[2N<%^.Ě)v |^f]VfJJz7(鹿.2k8Ǖ*MA ;8I@"Q$k,ydRsa0|0(D(H7*8%5n"`l"g> fo3C9xY<^1_22(282AM}B bg >22(<[1v.W>xUA3﹁g,.`l"H ԃxUA3∇.A!9RALR8aREq(+Ŝ oԃ!9ʼY*<~a3p} @_7eAً֌;$Ӛx)r*Tmfh1bSG~zKv [t*_+ށ]g Ӄ̪ijZ;g ܴm VS4sGg+ SG~4sGel4wɔӹI ˕YG4/NjPYT+kc Ɯ$D-R&xzMhPSs MZEI({7 Ȗ@ "O+K` \a$H$q{#'3o[1~іuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSGdzsV4wQCˈ\ܣ$vh1bSG~zK j:nt9ypyM3MX<Ӄ8ynPf)G~j0e0j"s0jzZ;\ )X&oGM۞y}W8ٍv |eG~n+x3T1B7jw+bX?fzpyM3՞mU7MX?U_r4sGg+ SG~4sGel4wɔӹI ˕YG4/NjP7(鸵 +8D_o4"%h"4C(7?mSFₘ@G+@b\}{pkٕ%ka4/y<ˑkhneqͺ[>LZjV@WJm°&' ,q\()qoع\&{T4aJ$pԈ R,5bs{ax=^ǜyR y(R HG$ Xk[{Z9YT5`Ms /M\^̭B^ rs ,nzK3wt*^+jGeMN;sev98<ʦ\{tIa/'UVSe Y  <N2 ܙZc Mai!YT5`0ܽ(-K {+,1>+O1+K`>sa^`geɕ<aMVIx=Y9a{ PZ,VX)b}?:7&V()c fW &sax=^`ger*TmfvB6[aeStՃ\E8 o2`{Stg$4K@\@Jqy3pd0x,zvqJ@DH o$UbcƜc"\(B./80 L`Yʕ& D(YT5`0ܽ0yc@N80R TJpbIV&7oHNp(+̮)/#X<0ܽ,F1OfvB6Zlp_s ,n~+K |0{ܽs /r<0{ܽ"QH*Dx\@5列DD)E!J as = o y(<j,,E#A\k.`"`pJnUbcpk"yA0 D8xӥ81$[ D "Y!&r% Ls. @Zk%BVpp/3 $yg#ӳ*T0%@8n o%0d(`a#ɏ@> o0DzB@%.yCɏ|M0%@%&<C5列0yc DD> ob%XH0Dǀ  ,X-쬶 [(3 1+K`s /|/rcDXFmoXZzQS"nPf)FXΉ{.DLYcƜ\a$H$"LD@A*%qxS~rPS̮)/#X$33e)A5];n0ʦj7AyQI91ӳ*T0%@;@Ï0zED,Ǎ8@Aǘ<yr#pkÁbDKAƜkBsaAX@F1|/ro2`8fgDܽT4aJ$s|/rcDXFmksf/2֙eX?N6\S1N"Xr)D<=q4ln()roع\&Or<]ωrNtnLNqs0\d Nqs.@Lb@F0eqIyp4a{s =|/rcDXFmkf ,/Nj2˙r\snL 9÷ɘs7zzu!rx{A~mr9{40{ܽD,T;2k.bR0B@%{ "@"Pxh o#&"XG0%8,E#Apk.`"`p0yc@5 7&VIv L .+Gv$}Ay30 X@;s˗GN &ܽ8I@"Q$@oM=M\^̭B^i^Ai`hS[;!ty7(352XZ{S ;H`4/x5K y`Q%Ǎ8d "G8DC.`JDSɢ$DE $y2`a x ? ‚a5':&>wb1"x#6𓐐|Z6ìʯ1$IH<"%Kr/qU;@7 ǭreWڙȖ@ "MUs7z֦ܲb@6p7z3꿙oytgRVS׹GMev.@ɬsf/rIayR y(b%,@A*<{x ? ‚a5OryR y(Aaae%c)QNf BG<khS7LOH8.G1E.!sr[Ei^x?͘8 o[;)`QN7(352ij0iQk~Qp]>97ses7zpyM3MX?Ua5`YWg]CtN2WظYNޝ3ڲ.bUa5`C'\>@ɬʕ& DӂI{rfJӂAY_jj/)6)Ŕ,rvfӂj8D@%0\ ԃ[;NN ܰ5Y 1v.W=8.Or<a` 2NN 7?px?rp] ad#n`owc3̀ج&mnzp]>9i?w^S6f[nJxͪܭEӶr1NQ,7&=7g HZ@p4NRhnYm;N ,%5q}m9"MrϰtP .]8.o[;) @ Ŧm@rs7x~,wWY¶ÙLO Y  <PS/qU;@7 o}9,峂SXZxf/bj0e{T4aJ oxb}ʕ& B752/bj0e{K @D&yR y(_1ࢦEܠSF Or[\a$H$ǜ\a$H$kđ&" E Ȉ4$IH<"%K76b5;>&^9;ֲ8e{F .p7i6e5`ғ+ܹpD ٌm * "LD@A*_37qUַ݃FW` op/GPPݽ2[;tҞmק؃󖥙UB-/SUވptl:.y7DMV偪^3jw+atܠS` r< {qJ@DH HD,ӓ7g HZ@p4NRhnYm;N ,%5q}m9"Mrwb1"x#6;8I@"Q$K"X""Ty4/m ~aٕ%k0#:&8I@"Q$q{#'3o[(naMVqr ,#_N  &+K .sa^75E70ʦ9.@Lr%wb1"x#6eA.7xS*OqUɿ1v.W=R<VbWLN*f< Ueg,7z1rk^j0eAWf.f=ܲ˙Oaњçznٌm *LoM߼-,9bWL&N"Xr)D<=q4ln()rkar>IV'ۧ);1rYmRZQ,`u\.o-TaUK<YT5`7 h5はWŜ:jG52+PU׎f%qTȸ >0eDZ4iő, 5cA\U2.``e9 x4jUA(UW#Q,tU5]gDqq8S[i4xS"VS` =UA͘ hZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUMeX<ߚ\U2. )qhʳ!+4w|-qTʩjU6$۔sGg+ SG~Au&{ D 1rkZGx$y" H$+=U7MX?(;EMtf|jAsGel4w sG4/NjS"rabxӄ\D@xxiM a}1v.W=5Tpk.*-oع\?d\BF+E$jC[&P)#&{ D 55 H<@Hɭi, \מH5cG^;@@&[i4v{ ,n~%qTʩN*<վڙD'$[i4v+8%GN xַi.o @us+L~ 5EWϧ \U2.!#R(xMUE[i44k[i4bR \4iqɭi, &^9;ЬbAK|2ţ gʦsGel4wɔӹI ˕YG4/Nj}ӱ+E˧X01+85bsPy]ϧ!+rςxUAoOs =XX@PX()c fW Fsa^1~_5-i^ՃeSL J0\eSDZN"Xr)D<=q4ln()roع\&Ors /.i8.ܽaw7i]bs8.ě1v.W> .02LO.59R!Ɛ$@k[5#p^ǜp9uu.(I LK"XʕH@'H% r"<YT5`kD % L@D7$'8 Qfc ٕ%k0 D HeSL J0\eSDZƷfW [^0Ⰼ2EɭiD HPS5':rkZFཷAaae=$JH% $IdGc"1!paw ]fT@@ <0yȖ<2)"xXog\* Q"$$ * Q Z `.MkIDy)'YRAHr%wb1"x#6rkZL# :rkZL8?Mz2 o[2\UxZfWEɭi3(V P@kBsaAX@F0eqIyAaaebc"r%5&eWi=SZN.3Un;8% $ |KyRPDiD$.@D@ *^-qH"?5cSsӼ_)/moHNp(+̮)/#XʾSI^q{#'3o[1v.W>@a{pMnʾSI^~3Ad0ܽ8a0/a`@X5!ya{ 2ra,ܽ8&7 0ܽ7I@"Q$2=[;@f;aeStՃ5Yn9{rѷ(.݃ng-M`^Ns tʕ& D-K {+-@g (( neqIyp438I@"Q$`gʭk؊"> XSZN.3Un;8% $ |KyRPDiD$.@D@ *^-qH"?5c+WtEAK oHNp(++K`V*苔7 iD F ̪hX5k;ܱ \p9uu.(I LK"XʕH@'H% r"<YT5`kD kH)r oHNp(++K`aeZR \SM3 H(ryMUk\R^F 3 oq{#'3o[7)rpMnpkO,Ph7n..C :n -qIRq0p/Pxk</Upp)roohxc;8$-D.!U^wf[Zk> [ܽ7H7LO9R)x74<5-RYƱ(+f Ao}!9`Ǐ0 #o2`@fAaae0x"Q#Λˀ'K[C Mi8U@$zD&G,yJ yAɤAHa{ ,ny{"`mAM ~aeqIyP< MN7 iD F ̪hX5k;ܱNq TJ(`()7wb1"x#6Wd`y6gJ,`6g҃G$)o8%5r35V]"P@D*O&J@="Dy0j"!Q1(,2Ă(3 15ƉAfW$7 iD F ̪hX5k;ܱ8ŗ7zp]w=L VfN.Nv+jT&' $yg# <̢r Mfe;\1(UWPr MN? HJ*M'{Ǖ*MA K Q=O8DCpd0x,zt"*BH"ydDJ .02LO.59R!ƞHַrkZFཏ8%5r35V]"P@D*O&J@="Dy0j"!Q4K@ oHNp(++K`c"1#qʦH(ryMUk\R^F 3 oq{#'3o&n m3p΄\֑/x?Mz2 ogXȤ D@&n S9ǐ&E b"qAL+K`Eɭi,F1Of\* Q"$$ r% L@Dd. .@9uQ(T"XȤ D@\]bbsDD"PD&GDDh*yc[5&e]ffKvqJ@="H#Ȗwb1"x#6bs{a^{fᜫ4> \is|x?p8 )`09Fi> \eg0)z fQ UW2-Vς/aMR |x/1YƇeA+8<~a<1-R$'8zfc fW >wb1"x#6O,a<(qaњO&WI%_)܇p9uu.(I LK"XʕH@'H% r"<YT5`kD )܂(3 15ƠyzA򛞝n58T1%.B2Jc[+Ka|/rcDXFmkӃ/u_)9WI%_)܀H7Wc 9Wx?5cnzv =Ph7LO]"D ₘ@CˤA"PqN8ŗ7zp]w=L VfN.Nv+jT&'&" E Ȉ/ <̢r Mfe;\1(UWPr MN?<UOrӳ*T0%@;< TH!K-$1)DD|ˤA"PvҶ(܂*YN'.s J"rUi$䜢>SsӾ$Cs|ܽʕ& DO,a<(qǗH"Q(D2Z2֎h/Nj঎U؄fB2QZ9ňJMkra0Ŝ7.6js\מ *\w=M8<ʦɣQS&n6`AAr w=ƯVyG*hxYª 4߼-k1|Mge4Rhx?2Vf62Ӛ~B3!T(rJx , D@j679\5M$*pJkIfjԺgD$$2=/c*U!M"$zEaeStՃE)$CiU4l)!9^0 #o̮)/#X\iJ@=#Wb<ʦF Uk\R^F 3 oq{#'3o3̦pyMaəM$*ǏƋ܆₀O3v*f6@Q *$+<1UopyM8%5r35V]"P@D*O&J@="Dy0j"$CiU4l)!9^0 #o̮)/#X\iJ@=#Wb<ʦF Uk\R^F 3 oq{#'3o3M$*3e4̪k?/r < i!T%V9Y2FZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUM9WuUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUSZ&'8H`Z%ȤM ǏƛTѱ9Mpbr8*` & x(+VjonAo^;.v&|m.p*`@+gʦ7I@"Q$SoJ@DH8`I@"Q$k^ׁ՝ɇ'mrʨ0QqJ@DH7$'8 QfvVxk%xyD8G< Ys7z%LX=9R#ƞ\o *-qoTh*`@㲱UwD_|,DC9,$ o¼vR \0y"p]>97LOHE"_y" D8qN<"Dr%LXNq10<(qN0x"Q9ȕ0y`@aeStՃkB r&ˤA"P|PSo TJ(`]"D "TƵb}ˤA"P|PSyt" UJ.qfAHȏ9,$ k [rrmRsG`3mQe^ksmWiX n5Lm-|T1`Qm.f7-ܭ|tgRVS:1rk^{ ,n~^-qhe/V]«ZfыZM®꿙eUkhg< BH7  - list HACMP AS components ## -V verify OPMN configuration files for each installed ## application have not changed ## ## is installed :== [ -i [ -A {CFC | AFC} ] ] ## run discover :== [ -d [ [ -A {CFC | AFC} ] ## -n "" ## -s "" ] ## list AS comps:== [ -c ] ## ## ## OUTPUT: ## ## -A CFC ## Oracle Application Server Smart Assist:Oracle_AppSrv:Oracle Application Server CFC:\ ## Oracle_AppSrv_CFC:{0|1} ## ## -A AFC ## Oracle Application Server Smart Assist:Oracle_AppSrv:Oracle Application Server AFC:\ ## Oracle_AppSrv_AFC:{0|1} ## ## RETURNS: ## 0 on success ## <0 on failure ## . /usr/es/lib/ksh93/func_include typeset version='1.15' #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASGlobals . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASUtilities . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASConfig #----------------------------------------------------------------------------- # Oracle DB Smart Assist related Global Definitions #----------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oracle/sbin/DBGlobals . /usr/es/sbin/cluster/sa/oracle/sbin/DBConfig . /usr/es/sbin/cluster/sa/oracle/sbin/DBUtilities PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities LSPV="/usr/sbin/lspv" RLSPV="/usr/es/sbin/cluster/utilities/cl_rsh" #---------------------------------------------------------------------------- # Functions: # oraIsInstalled_CFC # oraIsInstalled_AFC # # oraListProperties_CFC # oraListProperties_AFC # # osaListServiceIPLabels #---------------------------------------------------------------------------- # Function: # oraIsInstalled_CFC # # Purpose: # Reports to clquerysa (Application Discovery) whether CFC AS instances # are installed on the local system. # # Output: # Oracle Smart Assist:Oracle_AppSrv:Oracle Application Server CFC:[0|1] # # Returns: # 0 on success # 1 on failure # function oraIsInstalled_CFC { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -A dbinsts osaSetASEnvs osaASFindComps /usr/bin/dspmsg -s 10 oraappsa.cat 1 "Oracle Application Server Smart Assist" print -n ":Oracle_AppSrv:" /usr/bin/dspmsg -s 10 oraappsa.cat 5 "Oracle Application Server CFC" print -n ":Oracle_AppSrv_CFC:" if (( ${#allASInstances[*]} > 0 )); then echo "1" else if [[ "$ORACLE_FORCE_DETECT" == "true" ]]; then echo "1" else echo "0" fi fi return 0 } #---------------------------------------------------------------------------- # Function: # oraIsInstalled_AFC # # Purpose: # Reports to clquerysa (Application Discovery) whether AFC AS instances # are installed on the local system. # # Output: # Oracle Smart Assist:Oracle_AppSrv:Oracle Application Server AFC:[0|1] # # Returns: # 0 on success # 1 on failure # function oraIsInstalled_AFC { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -A dbinsts osaSetASEnvs osaASFindComps /usr/bin/dspmsg -s 10 oraappsa.cat 1 "Oracle Application Server Smart Assist" print -n ":Oracle_AppSrv:" /usr/bin/dspmsg -s 10 oraappsa.cat 6 "Oracle Application Server AFC" print -n ":Oracle_AppSrv_AFC:" if (( ${#allASInstances[*]} > 0 )); then echo "1" else if [[ "$ORACLE_FORCE_DETECT" == "true" ]]; then echo "1" else echo "0" fi fi return 0 } #---------------------------------------------------------------------------- # Function: # oraListProperties_CFC # # Purpose: # List the properties associated with a selected Oracle AS CFC # the AS has not yet been defined to the HACMP cluster configuration # # Arguments: # (1) Oracle AS Instance Name # (2) by ref List of Nodes # # Output: # SMIT cmd_to_discover List for SMIT Add Screen for CFC AS # # Returns: # 0 on success # 1 on failure # function oraListProperties_CFC { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset sid=$1 typeset -n nodes=$2 typeset primary takeover # # Get the list of resource groups associated with this instance (AS) # and MR Database # { osaSetASEnvs typeset as_vgs=$(osaASGetVGs) osaSetDBEnvs typeset db_vgs=$(osaDBGetVGs) typeset -A vglist for vg in $as_vgs; do [[ "$vg" != "rootvg" ]] && vglist[$vg]=: done for vg in $db_vgs; do [[ "$vg" != "rootvg" ]] && vglist[$vg]=: done typeset vgs="${!vglist[*]}" } 2>/dev/null # The application name (application_id) is the sid with . -> _ typeset -L32 appname=$sid appname=${appname/\./\_} appname=${appname/\.*/} typeset appfullname=$(echo $appname) comps=$(echo $(osaListASComps $sid)) # Flatten the list echo $nodes | read primary takeover echo "#instance:application_name:primary:takeover:shared_vg:as_comps" echo "$sid:$appfullname:$primary:$takeover:$vgs:$comps" } #---------------------------------------------------------------------------- # Function: # oraListProperties_AFC # # Purpose: # List the properties associated with a selected Oracle AS AFC # the AS has not yet been defined to the HACMP cluster configuration # # Arguments: # (1) Oracle AS Instance Name # (2) by ref List of Nodes # # Output: # SMIT cmd_to_discover List for SMIT Add Screen for AFC AS # # Returns: # 0 on success # 1 on failure # function oraListProperties_AFC { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset sid=$1 typeset -n nodes=$2 typeset comps appfullname { osaSetASEnvs } 2>/dev/null # The application name (application_id) is the sid with . -> _ typeset -L32 appname=$sid appname=${appname/\./\_} appname=${appname/\.*/} typeset appfullname=$(echo $appname) comps=$(echo $(osaListASComps $sid)) # Flatten the list echo "#instance:application_name:nodes:as_comps" echo "$sid:$appfullname:$nodes:$comps" } #---------------------------------------------------------------------------- # Function: # osaListASComps # # Purpose: # List Application Server Components, given the Oracle AS Instance (variable # sid) and the ORACLE_HOME path. # # Output: # List of Oracle AS Components defined to the instance # # Returns: # 0 on success # 1 on failure # function osaListASComps { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset sid=$1 typeset component [[ -z $sid ]] && return 1 typeset instance_name=${sid//\./\_} osaSetASEnvs osaASFindComps # Find Components that are already defined to another # Instance for comp in ${!allASComponents[*]}; do component=${comp##$instance_name} if [[ $component != $comp ]]; then # match found echo ${allASComponents[$comp]} fi done return 0 } #---------------------------------------------------------------------------- # Function: # osaModifyProperties # # Purpose: # General Purpose function for listing properties associated with an # existing HACMP application name/id. Used for the SMIT modify screens # # Arguments: # (1) Application Name / ID # # Return: # 0 on success # 1 on failure # function osaModifyProperties { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 [[ -z $appid ]] && return 1 set -a eval $(clquerysaapp -a $appid | grep COMPONENT_ID) set +a [[ "$COMPONENT_ID" == "Oracle_AppSrv_AFC" ]] && { osaModifyProperties_AFC $appid return $? } [[ "$COMPONENT_ID" == "Oracle_AppSrv_CFC" ]] && { osaModifyProperties_CFC $appid return $? } } #---------------------------------------------------------------------------- # Function: # osaModifyProperties_AFC # # Purpose: # List the SMIT modify screen properties for the AFC application server # instance. # # Arguments: # (1) Application Name / ID # # Returns: # 0 on success # 1 on failure # function osaModifyProperties_AFC { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 [[ -z $appid ]] && return 1 echo "#instance:application_name:nodes:concurrent_vgs:as_comps" instance=$(osaASGetMetadata $appid ORACLE_AS_INSTANCE) nodes=$(osaASGetNodes $appid) vgs=$(osaASGetResource $appid CONCURRENT_VOLUME_GROUP) components=$(osaASGetMetadata $appid AS_COMPONENTS) echo "$instance:$appid:$nodes:$vgs:$components" } #---------------------------------------------------------------------------- # Function: # osaModifyProperties_CFC # # Purpose: # List the properties associated with CFC Application Server components # defined to HACMP given the name of the application. # Used in the CFC Modify Screen # # Arguments: # (1) Application Name # # Output: # colon separated list of name value pairs for parsing by SMIT # cmd_to_discover # # Return: # 0 on success # 1 on failure # function osaModifyProperties_CFC { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appid=$1 [[ -z $appid ]] && return 1 print -n "#instance:application_name:primary:takeover:mr:" print "service_ip:shared_vg:as_comps" set -a eval $(clquerysaapp -a $appid | grep ORACLE_AS_INSTANCE) eval $(clquerysaapp -a $appid | grep METADATA_REPOSITORY) set +a AS_COMPONENTS=$(clquerysaapp -a $appid | grep AS_COMPONENTS | awk -F'=' '{ print $2}') nodes=$(osaASGetNodes $appid) echo $nodes | read primary takeover SERVICE_LABEL=$(osaASGetResource $appid SERVICE_LABEL) vgs=$(osaASGetResource $appid VOLUME_GROUP) print -n "$ORACLE_AS_INSTANCE:$appid:" print -n "$primary:$takeover:" print -n "$METADATA_REPOSITORY:" print -n "$SERVICE_LABEL:" print -n "$vgs:" print "$AS_COMPONENTS" return 0 } #--------------------------------------------------------------------------- # Function: # osaGetConfApps # # Purpose: # Obtain a list of configured applications (smart assist instances) # # Arguments: # (1) by ref Return list of arguments # (2) component_id as identified in HACMPsa_metadata # function osaGetConfApps { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -n ids=$1 typeset comp_id=$2 typeset name value odmget -q "name=COMPONENT_ID and value=$comp_id" HACMPsa_metadata 2>/dev/null | while IFS='=' read name value do name=$(echo $name) [[ "$name" == "application_id" ]] && { value=$(echo $value) value=${value//\"/} value=${value// /} ids[$value]=: } done } #--------------------------------------------------------------------------- # Function: # verifyOPMNConfigChecksums # # Purpose: # Report a list of applications that contain AFC or CFC components # whose Oracle OPMN configuration has changed since the time # the smart assist executed # # Arguments: # n/a # # Returns: # 0 on success (always) # function verifyOPMNConfigChecksums { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -A APPLICATIONS typeset checksum sa_id liveChecksum storedChecksum typeset ORACLE_HOME # Get the CFC and AFC configured applications osaGetConfApps APPLICATIONS Oracle_AppSrv_CFC osaGetConfApps APPLICATIONS Oracle_AppSrv_AFC for sa_id in ${!APPLICATIONS[*]}; do storedChecksum=$(osaASGetMetadata $sa_id OPMN_CONFIG_CHECK) ORACLE_HOME=$(osaASGetMetadata $sa_id ORACLE_HOME) if [[ -n $storedChecksum && -n $ORACLE_HOME ]]; then osaSetASEnvs $ORACLE_HOME liveChecksum=$(osaASGetConfigChecksum) if [[ -n $liveChecksum ]]; then if [[ "$liveChecksum" != "$storedChecksum" ]]; then echo $sa_id fi fi fi done return 0 } #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- typeset TYPE while getopts a:idA:s:n:c:V option; do case $option in a) APPLICATION_ID=$OPTARG osaModifyProperties $APPLICATION_ID exit $? ;; i) CMD="oraIsInstalled" ;; d) CMD="oraListProperties" ;; A) TYPE="AS"$OPTARG ;; n) nodes=$OPTARG nodes=${nodes//\,/ } nodes=${nodes//\:/ } ;; s) sid=$OPTARG ;; c) sid=$OPTARG osaListASComps $sid exit 0 ;; V) verifyOPMNConfigChecksums exit $? ;; *) ;; esac done # No type specified, abort immediately [[ -z $TYPE ]] && exit 1 [[ "$CMD" == "oraIsInstalled" ]] && { typeset -A installedMethod installedMethod=( [ASAFC]="oraIsInstalled_AFC" [ASCFC]="oraIsInstalled_CFC" ) if [[ -z ${installedMethod[$TYPE]} ]]; then exit 2 fi ${installedMethod[$TYPE]} exit $? } [[ "$CMD" == "oraListProperties" ]] && { typeset -A discMethod discMethod=( [ASCFC]="oraListProperties_CFC" [ASAFC]="oraListProperties_AFC" ) if [[ -z ${discMethod[$TYPE]} ]]; then exit 3 fi ${discMethod[$TYPE]} $sid nodes exit $? } t "se kM$o@ /םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_instancesector@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/cl_osa_instances.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)07 1.1 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/cl_osa_instances.sh, hacmp, 61haes_r714 11/28/11 15:05:11 ## ## NAME: cl_osa_instances ## ## PURPOSE: ## This script is meant to provide with list of instances defined ## for Oracle Smart Assist. It takes an argument (-A or -D) that ## tells it whether to search for DB or AS instances. ## ## ARGUMENTS: ## -n list nodes ## -m run KLIB function ## -D type is DataBase ## -A { CFC | AFC } command is related to application server ## -v list Volume Groups related to DB / AS (-d | -a) ## -d list DB instances ## -a list AS instances ## ## RETURNS: ## 0 on success ## <0 on failure ## PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities export PATH . /usr/es/lib/ksh93/func_include typeset version='1.2' #--------------------------------------------------------------------------- # Global Definitions: #--------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASGlobals . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASUtilities #--------------------------------------------------------------------------- # Functions: # osaFindInstances #--------------------------------------------------------------------------- # Function: # # Purpose: # Find AFC or CFC instances on the local and remote nodes as specified on # the command line. # # Arguments: # (1) type either AFC/CFC or DB # # Output: # a list of instances # # Return: # 0 on success # 1 on failure # function osaFindInstances { typeset type=$1 typeset -A insts if [[ $type == "AS" ]]; then osaSetASEnvs osaASFindInstances typeset inst for inst in ${allInstances[*]}; do echo $inst done fi } typeset TYPE NODES ASTYPE typeset CMD INSTANCE while getopts n:vA:da option; do case $option in n) # nodes NODES=$OPTARG NODES=${NODES//:/ } # currently not being used ;; a) # list AS instances CMD="LIST" TYPE="AS" ;; A) # command is related to AS of type OPTARG TYPE="AS" # application server ASTYPE=$OPTARG ;; v) # Volume Group for Oracle DB/AS CMD="VG" ;; *) ;; esac done if [[ -n $TYPE ]]; then if [[ $CMD == "VG" ]]; then # need VG info for a given DB or AS if [[ $TYPE == "AS" ]]; then osaSetASEnvs osaASGetVGs fi elif [[ $CMD == "LIST" ]]; then osaFindInstances $TYPE fi fi a $appi k($o@Y /םa֝a֝a&Y 2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_oraMonitorAS@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/cl_oraMonitorAS.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)63 1.1 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/cl_oraMonitorAS.sh, hacmp, 61haes_r714 11/28/11 15:15:04 ## ## NAME: ## cl_oraMonitorAS ## ## PURPOSE: ## Oracle AS Monitor Script for individual components ## ## ARGUMENTS: ## -a Application Name (smart assist) ## -i Oracle Application Server Instance Name ## -c Oracle Application Server Component Name ## ## RETURNS: ## 0 on success ## 1 on failure ## #---------------------------------------------------------------------------- # Global Definitions: #---------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASUtilities . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASMonitor . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASControl . /usr/es/sbin/cluster/sa/oraappsrv/sbin/IO typeset PROGRAM=${0##*/} PATH=$PATH:/bin:/usr/bin PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$PATH:/usr/es/sbin/cluster/utilities export PATH [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos } export ODMDIR #---------------------------------------------------------------------------- # Main: #---------------------------------------------------------------------------- while getopts a:c:i: option do case $option in a) APPLICATION_NAME=$OPTARG ;; c) AS_COMPONENT=$OPTARG ;; i) AS_INSTANCE=$OPTARG ;; *) ;; esac done [[ -z $APPLICATION_NAME ]] && { user_msg 30 16 $PROGRAM exit 1 } [[ -z $AS_COMPONENT ]] && { user_msg 30 17 $PROGRAM exit 1 } [[ -z $AS_INSTANCE ]] && { user_msg 30 18 $PROGRAM exit 1 } user_msg 40 8 $AS_INSTANCE $AS_COMPONENT $APPLICATION_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME | grep ORACLE_HOME) set +a user_msg 40 2 $ORACLE_HOME export ORACLE_HOME osaSetASEnvs $ORACLE_HOME set -a eval $(clquerysaapp -a $APPLICATION_NAME | grep ORACLE_USER) set +a user_msg 40 11 $ORACLE_USER export ORACLE_USER osaFindAliveComponents $AS_INSTANCE osaASShowStatus $AS_INSTANCE $AS_COMPONENT (( $? != 0 )) && { user_msg 40 9 $AS_COMPONENT exit 1 } user_msg 40 10 $AS_COMPONENT exit 0 H$ k]$o@ /םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_modifyInstancer@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/cl_osa_modifyInstance.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oraappsrv/sbin/cl_osa_modifyInstance.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ## ## NAME: ## cl_osa_modifyInstance ## ## PURPOSE: ## Modifies an Existing Oracle AS AFC/CFC, and RDBMS CFC HACMP ## cluster configurations ## ## ARGUMENTS: ## ## Modify AFC/CFC AS ## :== -i -a -A { CFC | AFC } ## -p -t (CFC only) ## -c ## -v ## -m (CFC only) ## ## -n (AFC only) ## ## Modify RDBMS DB ## :== -a -D -d ## -p -t ## -v ## ## RETURNS ## 0 on success ## 1 on failure ## . /usr/es/lib/ksh93/func_include typeset version='1.6' #----------------------------------------------------------------------------- # Global Definitions #----------------------------------------------------------------------------- PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/ PATH=$PATH:/usr/es/sbin/cluster/utilities/ export PATH typeset ORAAPPSA_SBIN="/usr/es/sbin/cluster/sa/oraappsrv/sbin" typeset TYPE TYPE1 # for distinguishing between AS[AFC/CFC] and DB typeset APPLICATION_ID # Application ID for App Discovery typeset PRINODE TAKENODE # primary and takeover nodes typeset SHAREDVGS # shared volume groups typeset SERVICE_LABEL # service IP label typeset SMARTASSIST_ID="Oracle_AppSrv" typeset COMPONENT_ID= . /usr/es/sbin/cluster/sa/oraappsrv/sbin/IO . /usr/es/sbin/cluster/sa/oraappsrv/sbin/ASConfig . /usr/es/sbin/cluster/sa/oracle/sbin/DBUtilities . /usr/es/sbin/cluster/sa/oracle/sbin/ASUtilities #---------------------------------------------------------------------------- # Functions # modifySA # osaModifyAS # osaModifyDB #---------------------------------------------------------------------------- # Function: # modifySA # # Purpose: # Method for modifying Application Server or RDBMS instances. Uses the # type to determine which modification method to invoke. # # Arguments: # (1) Type (AS | DB) # # Returns: # 0 on success # 1 on failure # function modifySA { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset type=$1 typeset rc [[ "$TYPE" == "AS" ]] && { osaModifyAS $APPLICATION_ID || return $? } return 0 } #----------------------------------------------------------------------------- # Function: # osaModifyAS # # Purpose: # Modifies either an AFC or CFC Oracle Application Server. Function removes # the HACMP components from the application (smart assist application) then # calls the cl_osa_addInstance script to re-add the components back into # the cluster configuration. # # Note: This function requires the user to modify the resource group on a # node where the application server exists. It will attempt to determine # if the ORACLE_HOME directory stored in the HACMPsa_metadata is valid on # the local system. If the ORACLE_HOME is not valid, it will abort # # Arguments: # (1) application name # # Returns: # 0 on success # 1 on failure, in cases where the smart assist fails to remove a defined # HACMP component this function will terminate the script immediately # function osaModifyAS { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -L64 appid=$1 # Remove existing HACMP components, then recreate using the # cl_osa_addInstance script ORACLE_HOME=$(osaASGetMetadata $appid ORACLE_HOME) ORACLE_AS_INSTANCE=$(osaASGetMetadata $appid ORACLE_AS_INSTANCE) [[ -n $ORACLE_HOME ]] && { [[ ! -d $ORACLE_HOME ]] && { user_msg 30 25 $ORACLE_AS_INSTANCE return 1 } } [[ -z $ORACLE_HOME ]] && { user_msg 30 26 InternalErrorAbort } user_msg 20 16 $appid osaASRemoveComponents $appid || return $? ORACLE_HOME=$ORACLE_HOME $ORAAPPSA_SBIN/cl_osa_addInstance $ALLARGS return $? } #---------------------------------------------------------------------------- # Function: # validateNodeLists # # Purpose: # Ensure the node lists contain nodes that are unique, primary # and takeover nodes should not have duplicates between the two # lists. # # Arguments: # (1) by reference - primary node # (2) by reference - takeover node list # # Returns: # 0 on success # 1 on failure # function validateNodeLists { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -n primary=$1 typeset -n takeover=$2 typeset -A nodes nodes[$primary]=$primary for node in $takeover; do [[ -n ${nodes[$node]} ]] && { user_msg 30 28 $node return 1 } done return 0 } #---------------------------------------------------------------------------- # Function: # validateAppName # # Purpose: # Validate the application name and ensure it contains only # valid characters # # Arguments: # (1) - Application Name # # Returns: # 0 on valid name # 1 name is invalid # function validateAppName { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset appname=$1 typeset -i invalid=0 [[ -n ${appname//[a-zA-Z0-9_]/} ]] && { user_msg 30 29 $appname return 1 } return 0 } #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- ALLARGS=$* while getopts A:a:p:t:s:i:v:m:c:n: option do case $option in i) # SID / Oracle AS Instance SID=$OPTARG ;; a) # Application ID APPLICATION_ID=$OPTARG APPLICATION_ID=${APPLICATION_ID// /} # Remove whitespace validateAppName $APPLICATION_ID (( $? != 0 )) && exit 1 ;; A) # An AS. CFC or AFC is the OPTARG TYPE="AS" # application server TYPE1=$OPTARG ;; p) # Primary node PRINODE=$OPTARG ;; n) # Nodes for AFC components [[ -n $AFC_NODES ]] && AFC_NODES="$AFC_NODES $OPTARG" [[ -z $AFC_NODES ]] && AFC_NODES=$OPTARG ;; t) # Takeover node [[ -n $TAKENODE ]] && TAKENODE=$OPTARG [[ -z $TAKENODE ]] && TAKENODE="$TAKENODE $OPTARG" ;; c) # Application Server Component Names [[ -n $AS_COMPONENTS ]] && AS_COMPONENTS="$AS_COMPONENTS $OPTARG" [[ -z $AS_COMPONENTS ]] && AS_COMPONENTS=$OPTARG ;; s) # Service IP labels SERVICE_LABEL=$OPTARG ;; v) # Shared Volume Groups VOLUME_GROUPS=$OPTARG ;; m) # Metadata Repository (optional) MR_DATABASE=$OPTARG ;; *) ;; esac done # # Ensure the node lists for primary and takeover # do not contain duplicates (a single node used more than once) # validateNodeLists PRINODE TAKENODE typeset rc=$? # # Function validateNodeLists will report an error, exit if # there were errors. # (( $rc != 0 )) && { exit $rc } if [[ -n $TYPE ]] then modifySA $TYPE exit $? fi exit 0 HAC k6$o@?/םa֝a֝a&?2vT./usr/es/sbin/cluster/sa/oraappsrv/sbin/oraappsrv_xutilsancer@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/oraappsrv/sbin/oraappsrv_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/oraappsrv/sbin/oraappsrv_xutils.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM #---------------------------------------------------------------------- # # Function: listEnv_Oracle_Appsrv # # Description: ENV variable ORACLE_HOME needed to disover the OAS # # Arcguments: none # # output: prints the env info in xml format # #---------------------------------------------------------------------- # # ORACLE_HOME=/u01/OraHome_1 # function listEnv_Oracle_Appsrv { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x print_start_tag ENVS print_XML_comment "ORACLE_HOME variable needed to discover Oracle Application Server" print_start_tag ENV "ORACLE_HOME" "ORACLE_HOME" "$ORACLE_HOME" print_end_tag ENV print_start_tag ENV "ORACLE_USER" "ORACLE_USER" "$ORACLE_USER" print_end_tag ENV print_end_tag ENVS KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #---------------------------------------------------------------------- # # Function: listInstances_Oracle_AppSrv_CFC # # Description: Lists the instances for the CFC component # # Arcguments: componentid , nodes # # output: list of instances in xml format # #---------------------------------------------------------------------- function listInstances_Oracle_AppSrv_CFC { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # : discover the instances # /usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_instances -a 2>/dev/null | grep -v -E "^$|^#" > /usr/es/sbin/cluster/etc/sa_inst.x filterinst_XML < /usr/es/sbin/cluster/etc/sa_inst.x KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------------------------------------------------------- # # Function: listProps_Oracle_AppSrv_CFC # # Description: List properties for the CFC component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Oracle AS CFC Instance Name infra01.haapp10.in.ibm.com #* Application Name [infra01_haapp10] #* Primary Node NodeA + #* Takeover Node(s) + # Oracle Metadata Repository [] + #* Service IP Label [] + #* Shared Volume Group(s) [oraasvg] + #* Oracle OID and SSO Components [DSA HTTP_Server LogLoader dcm-daemon OID] + # #---------------------------------------------------------------------- function listProps_Oracle_AppSrv_CFC { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset instance_val typeset application_name_val typeset primary_val typeset takeover_val typeset shared_vg_val typeset as_comps_val typeset primary_node_picklist typeset takeover_node_picklist typeset ora_meta_repositort_picklist typeset serviceip_picklist typeset sharedvg_picklist typeset as_comps_picklist # : discover few properties for the chosen instance # /usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_discover -d -A 'CFC' -s "$INSTANCE_NAME" | grep -v -E "^$|^#" > /usr/es/sbin/cluster/etc/sa_inst.x # output will be in this format # #instance:application_name:primary:takeover:shared_vg:as_comps # infra01.haapp10.in.ibm.com:infra01_haapp10:NodeA::oraasvg:DSA HTTP_Server LogLoader dcm-daemon OID while IFS=: read instance application_name primary takeover shared_vg as_comps do instance_val="${instance:-}" application_name_val="${application_name:-}" primary_val="${primary:-}" takeover_val="${takeover:-}" shared_vg_val="${shared_vg:-}" as_comps_val="${as_comps:-}" done < /usr/es/sbin/cluster/etc/sa_inst.x #primary_node_picklist primary_node_picklist=$(/usr/es/sbin/cluster/utilities/clvt query node | tr '\n' ',') #Takeover node pick list takeover_node_picklist=$(/usr/es/sbin/cluster/utilities/clvt query node | tr '\n' ',') #ora_meta_repositort_picklist ora_meta_repositort_picklist=$(/usr/es/sbin/cluster/sa/oracle/sbin/cl_osa_discover -m | grep -v -E '^$|^#' | tr '\n' ',' ) #serive ip pick list serviceip_picklist=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') #sharedvg_picklist sharedvg_picklist=$(LC_ALL=C /usr/es/sbin/cluster/utilities/cllsvg -s -S | \ awk -F'\t' '{if (!match ($1, /^[a-z,A-Z]/) && !match ($2, /Volume Group/) && !match ($2, /rootvg/)) print $2}' | tr '\n' ',' ) #as_comps_picklist as_comps_picklist=$(LC_ALL=C /usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_discover -c "$INSTANCE_NAME" | awk ' { print $1 }' | tr '\n' ',') #------------------------------------------- # display property tag for each field #------------------------------------------- #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" #* Oracle AS CFC Instance Name print_start_tag PROPERTY "1" "ORA_CFC_INST_NAME" "Oracle AS CFC Instance Name" "" \ "$instance_val" "" "" "" \ "-i" "string" "false" "true" \ "false" "true" "" "oraappsa.cat,5,101" print_end_tag PROPERTY #* Application Name print_start_tag PROPERTY "2" "APP_NAME" "Application Name" "" \ "$application_name_val" "" "" "" \ "-a" "string" "true" "true" \ "false" "true" "" "oraappsa.cat,5,102" print_end_tag PROPERTY #* Primary Node print_start_tag PROPERTY "3" "PRIMARY_NODE" "Primary Node" "" \ "$primary_val" "$primary_node_picklist" "" "" \ "-p" "string" "true" "true" \ "false" "true" "" "oraappsa.cat,5,103" print_end_tag PROPERTY #* Takeover Node(s) print_start_tag PROPERTY "4" "TAKEOVER_NODES" "Takeover Node(s)" "" \ "$takeover_val" "$takeover_node_picklist" "" "" \ "-t" "string" "true" "true" \ "true" "true" "" "oraappsa.cat,5,104" print_end_tag PROPERTY #Oracle Metadata Repository print_start_tag PROPERTY "5" "ORA_META_REPO" "Oracle Metadata Repository" "" \ "" "$ora_meta_repositort_picklist" "" "" \ "-m" "string" "true" "false" \ "false" "true" "" "oraappsa.cat,5,105" print_end_tag PROPERTY #* Service IP Label print_start_tag PROPERTY "6" "SERVICEIP" "Service IP Label" "" \ "" "$serviceip_picklist" "" "" \ "-s" "string" "true" "true" \ "false" "true" "" "oraappsa.cat,5,106" print_end_tag PROPERTY #* Shared Volume Group(s) [] print_start_tag PROPERTY "7" "SHAREDVG" "Shared Volume Group(s)" "" \ "$shared_vg_val" "$sharedvg_picklist" "" "" \ "-v" "string" "true" "true" \ "true" "true" "" "oraappsa.cat,5,107" print_end_tag PROPERTY #* Oracle OID and SSO Components print_start_tag PROPERTY "8" "AS_COMPS" "Oracle OID and SSO Components" "" \ "$as_comps_val" "$as_comps_picklist" "" "" \ "-c" "string" "true" "true" \ "true" "true" "" "oraappsa.cat,5,108" print_end_tag PROPERTY # : This command will be executed to configure the instance. # print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_addInstance -A CFC " print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #---------------------------------------------------------------------- # # Function: listInstances_Oracle_AppSrv_AFC # # Description: Lists the instances for the AFC component # # Arcguments: componentid , nodes # # output: list of instances in xml format # #---------------------------------------------------------------------- function listInstances_Oracle_AppSrv_AFC { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # : discover the instances # /usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_instances -a 2>/dev/null | grep -v -E "^$|^#" > /usr/es/sbin/cluster/etc/sa_inst.x filterinst_XML < /usr/es/sbin/cluster/etc/sa_inst.x KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------------------------------------------------------- # # Function: listProps_Oracle_AppSrv_AFC # # Description: List properties for the AFC component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Oracle AS AFC Instance Name infra01.haapp10.in.ibm.com #* Application Name [infra01_haapp10] #* Participating Nodes NodeA + # Concurrent Volume Group(s) [] + #* Oracle OID and SSO Components DSA HTTP_Server LogLoader dcm-daemon OID + # #--------------------------------------------------------------------------- function listProps_Oracle_AppSrv_AFC { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset instance_val typeset application_name_val typeset nodes_val typeset as_comps typeset participate_nodes_picklist typeset concvg_picklist typeset as_comps_picklist # : discover possible fields for the chosen instance # # Sample discover fields command output #/usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_discover -d -A AFC -s 'infra01.haapp10.in.ibm.com' #instance:application_name:nodes:as_comps #infra01.haapp10.in.ibm.com:infra01_haapp10::DSA HTTP_Server LogLoader dcm-daemon OID /usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_discover -d -A AFC -s '$INSTANCE_NAME' | grep -v -E "^$|^#" > /usr/es/sbin/cluster/etc/sa_inst.x while IFS=: read instance application_name nodes as_comps do instance_val="${instance:-}" application_name_val="${application_name:-}" nodes_val="${nodes:-}" as_comps="${as_comps:-}" done < /usr/es/sbin/cluster/etc/sa_inst.x #pick list for Participating Nodes participate_nodes_picklist=$(/usr/es/sbin/cluster/utilities/clvt query node | tr '\n' ',') #pick list for Concurrent Volume Group(s) concvg_picklist=$(LC_ALL=C /usr/es/sbin/cluster/utilities/cllsvg -s -S | \ awk -F'\t' '{if (!match ($1, /^[a-z,A-Z]/) && !match ($2, /Volume Group/) && !match ($2, /rootvg/)) print $2}' | tr '\n' ',' ) #picklist for Oracle OID and SSO Components as_comps_picklist=$(/usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_discover -c "$INSTANCE_NAME" | awk ' { print $1 }' | tr '\n' ',') #------------------------------------------- # display property tag for each field #------------------------------------------- #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" #* Oracle AS AFC Instance Name print_start_tag PROPERTY "1" "ORA_AFC_INST_NAME" "Oracle AS AFC Instance Name" "" \ "$instance_val" "" "" "" \ "-i" "string" "false" "true" \ "false" "true" "" "oraappsa.cat,5,110" print_end_tag PROPERTY #* Application Name print_start_tag PROPERTY "2" "APP_NAME" "Application Name" "" \ "$application_name_val" "" "" "" \ "-a" "string" "true" "true" \ "false" "true" "" "oraappsa.cat,5,102" print_end_tag PROPERTY #* Participating Nodes print_start_tag PROPERTY "3" "PARTICIPATE_NODES" "Participating Nodes" "" \ "$nodes_val" "$participate_nodes_picklist" "" "" \ "-n" "string" "true" "true" \ "true" "true" "" "oraappsa.cat,5,111" print_end_tag PROPERTY # Concurrent Volume Group(s) print_start_tag PROPERTY "7" "CONCVG" "Concurrent Volume Group(s)" "" \ "" "$concvg_picklist" "" "" \ "-v" "string" "true" "true" \ "false" "true" "" "oraappsa.cat,5,112" print_end_tag PROPERTY #* Oracle OID and SSO Components print_start_tag PROPERTY "8" "AS_COMPS" "Oracle OID and SSO Components" "" \ "$as_comps_val" "$as_comps_picklist" "" "" \ "-c" "string" "true" "true" \ "true" "true" "" "oraappsa.cat,5,108" print_end_tag PROPERTY # : This command will be executed to configure the instance. # print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/oraappsrv/sbin/cl_osa_addInstance -A AFC " print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------- # MAIN STARTS HERE #--------------------------- # # these functions will be consumed by clvtsa # oraappsrv_xutils=( typeset env_func="listEnv_Oracle_Appsrv" ) oraappsrv_cfc_xutils=( typeset env_func="listEnv_Oracle_Appsrv" typeset inst_func="listInstances_Oracle_AppSrv_CFC" typeset prop_func="listProps_Oracle_AppSrv_CFC" ) oraappsrv_afc_xutils=( typeset env_func="listEnv_Oracle_Appsrv" typeset inst_func="listInstances_Oracle_AppSrv_AFC" typeset prop_func="listProps_Oracle_AppSrv_AFC" ) in.ib k$o/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/oraappsrv/config/oraapp_config.xmler  k$\$o /םaX՝a֝a& 2vT./usr/es/sbin/cluster/sa/oraappsrv/config/oraapp_config.xsder elem kA$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/filenetv/confiAA k$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/filenet/sbinfiAA kd$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/filenet/libfiAA kW$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/filenet/configAA l&$oĜ/םa֝a֝a&i2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_db_ce_pe_import   e -E_ainorst "#$ACINORSTcdlpu/2=BDGLMPfghmv&().1:FHUV[\]by!',0;>Kkwx{}%34?WYq|579QX+6$SRL"Ezcuw61<љؿ-:rnŃ?y+8/z/_Eu\18Hh  bǾngZ ?I0*HʒT 0QFf@P[)y;*1v11hr3Ԩ[Z7ɡi3seCZ pG@ ƆL pƂFH`PLy9YRJMI0LyFfbo<]ٻ ?Q5NymÔ_دLy>y%J+&DAsKVmc%]Jp3{Zmε?ަ68㭸u <84uKW[3z3k + S}ijg<L'ҵ ?NETeIHB!B!B!B!B!B!B!B!B!By?3nEhs&͕ 9k@x޹=bϡ-|՜m6Kyկ}1c4n D{,<fyVw2hZLPÖxp/ȯ1^p'\fugUV,[4Mx10nK5aL3RhP[M4S"ugVuPuvෞif-tm -|zir;z3-^Vtm[4v¨a_<޵w~m΍}MRv[>!B!B!B!B!B!B!B!B!B q7n PaWj̩V[uy)jgCWKp1\fQ3+FF2܊ѽM I*rf B!B!B!B!B!B!B!B!B!B?noҴ3KW>!B!B!B!B!B!B!B!B!B L Lp̘pc-ɡi3seCZamį^Vh֊JE`&I 0[Bgdʆ%ۉ_Y0#ɮEw\ゞhh rjĶ*/J3: JDA0㢲ʬ\fug}}n=mc aJDA TqYeV3:aۋ/qgslv*s P=P4oJWY0͌S*sh@Q&zKoBoLfug}WYJDƂQQEeX;_y}+ά1ڶ1n-fgF,ށ*s1TqYeVWYagorsnؿf+BZmJ3;߀ T&4Gq- ҥKjy6Zͯqaw%Zͮ)Sh@:+,܄1ix շ鏛qm3:71f.61ĹVRaJDƂ P=P%QzT}s]=`uiR޶kC*s㢲ʬ/gVwZT`/:_0nhVP 10NycATqɨwШ*[Ͷqz٭ǝtk"2kp)Sh@h$TqYeVY&=1l[w٭ T&4*8謲qJ3;*[oZ7lgof+|øn;[5 T&44TqYeV՜ۋ;vw޴4Lh 4tVYUt泝k7Ö|-_f;}h )Sh@htVYU|޵ogZTuϠc4o}ŝ;0N&4b*wR;vwݯMk@aJDƂ@ 㢲ʬFyKqR&Sљ斯_ngogVw T&44*8謲pѽkͦRAb\L6/|1i@•9才 tVYU|޵پ4n Dr;rv3k򶿥q՝&•9才 *8謲pѽkͦRA/fwZf}3'O4Lh h *8謲pѽk}iRAn,FuV3:R<10㢲ʬFO4n Duv#{:+kWY` )Sh@*8謲pѽkͦRAn,Fuϛ|Os>ByaJ&4EGU`:7{KrάE3-^ߕqR&P )Sh@ *8謲pѽkLX*[7\fugzۋ;vwsqR&P )SDƂQE"e=w \LzcY7(')n )Sh@ :+,=ڳZ"5:q΍@aJ18EePw`ugVwљ斯_ngoڶ3^ D*s"M@C7\fugzۋ;vwsmǭLgҼA T&4:+,>toZgT\Zfvt7 j٭&•9才EGU`:7|f9J/gVw` )Sh@ 959J3:ǵ}laJDƂ`TqB+(CugVwcmZҥ•9才 Tqɨw])RܭL|k6XNo?fm&>5U T&4P=Pq՝&=flR<1 :+,:3;L{Wo1^ζbuvm/8ŴW4`0NycA0Gtά1[g֕-_:٭ T&4QQEeX;1J)_ZgLmrzrR<1 tVYU|޵TnA Ț&«|{ŧ T&4QQEeX;΍]JL_nfL%1mo+ά04Lh AQEeX;΍^biR܀:3;ۙ;)L[[ocA T&4*8!MB!݂Ӯ3:}32ŵշ}1JR&P )Sh@*w`WYߍoYδLzcͻiZWZ}LEn;~ͪVKWn8ijp9oyE"$9ik3B!o(@)zX;7Lp1[s''ms" "pqqԨp!`Z.1E`Z.3p3Ԩ[wی`ZxyDXW7n P`@r`BC^# ͓ Q$=3@<,Hz+cBC(:ÅyDXW2@<,Hz+cBF,yDXWsFÐ(h錿AZ`CE=_=R&ᛖFXX a{yWFB ; *1v11 9r KEmؿSbiR* /;vwHHO37f43 bck ޓ͌u1.NզmpJ?٬E&SnfLnbwf ;Z3<S%_oљ斨EniǝZk[8 X/A销zAָ7mѝ[[Pl/ !w/}1Tf+ByŒY,օTQסj;K=mŝ;ι}Ú~mɻfc;~ͪVKT0R/-YmVۋ;vws5ۓw.ͿvvT ;y斨`N{A xE*Y-_&'@J+UxȒH,\*+B~7>w7^nEn}כ++ $6N^̌n12F Eq41!FB'tB!B!B!B!B!B!B!B!B!B?33n,9Z_^ͽŌҥsqg\P0c`J'"ۙY+Mms9t\r_Eˣ"Ƨ\fugN8A-{:׳^&'׳qQPW}1o/{"n7?s4gdŵ &>Hr-1":1ID|Iyծ(׳@sHK,ӹfۺp[,pv6\ޛV1H@m1c;qKW3oc%"2+T ;y斫6|+MEED%'7FgZ122 ЯpO|ڿcs=]TJ2Qq:HtfyЯ ⢠W0[('։5D( Z?k1o@/Ō_nfL%1mo| D?lx_nfAx$Q$GėiuXHkxPW@pO |ڿbk|'^+ &dI$b}»눤W]^dVyWjij ? EaT"w;^ExHOWY`uvftwp0[FJ"N/6cz d$|cZde]m4^&'+EA_% ptQvQ(DIxk?7~@xJ3;Lg/:3;S _f-=+_y= bƆ?1ooyXDz+J"N#I)"H0c@x5L3"ۙRwz d$ Exwkt"#^2QqiuXHkxa(8QPW}1o>XDz+J"N/}3_hJ[¡`Lz>m>~Kc;[5X PXcos-QR$bJixæ)Rޙ =+adUQR]՟BLOsMEED%@PTN⢠W&T8i\fug}եKz٭ε|Ÿ'|/3l jxPWAEHFD]* s'pW}1oA5aMB2QR02*Ei(<5V|o۸n8T-|*}fL?1o򶿭JQvQ(P!D#%!"Va$A1 mlf[5^&'+EA_%`A= ٭c}3_V]{N`vLB=1*[Q9OS' t8^ DWraIID%т۟+Y;I)VHJAָ7|+';pB(+0 a`Wc&RJE!U}3_h.޼B!B!B!B!B!B!B!B!B!B=jij#:c;quٽygk_}ۋ3z9:ܢlw/K_bfyt8WY@xJ3;3"݅1f?E%D$]hVdo=.޸>~e Wϕv.yWjij;]k63]LOV%HMB'qùXTWn|]ҸΎ@5w7 q BIUI(8Ȼ-{:$ST9Zkmc违Z.]5:3;Vkj.*%(8%v"2g\;ZuÂsqۙ;&-@(I1E0%Hm̬щ9ՙVM(Ȓ#Kέr׳@sHK,ӹfۺp["n7>n8ijs;q &>BLne7ߠZu w-JF;n Ds g\kྂIQ("d%.0Zf5wAݝk Zuø,Z)*%$Ld R,ц["2nf?+3-YQ"P$ERJ"N'pX/RTJ+2H{s;FY k{E"e13fcG!7n4e -L&Aw^QhZ|-HI73s!3nb -L&Aw5TMV\rD$Kٜ)ݸ7FgZ tfy,m:+IHUDUe \@ ּ7 X[_$b@&«.jKۜ1\`*2k[)(bզm+i\rqN_AhVd2 ڵu8cjTe0ַ qR&R6mYk$ ^θw E%D$]8cjTe0ַ qR&R6mYk$z6 ^θw E%D$]8cjTe0ַ qR&RݙZխ"W-{:39׳`IQ("d{cjTe0[sr׳@A-{:JE`&J&.0Zf\냐-{:E"e/gx,Z)*%*@cjTe0[ssљ斬(Pi"j%'))mO3_AhVdoQhmπάh&љ斬3;"2ۙ JE`&J&.0Zf\9&-Cs4gdŵ))6v -L MVq}+&˿ڳ;FY>W8ūL㐛HŪwE"e Zͯ`IQ(RZ.0Zf\rwrg\L5mZڲ/`IQ(R R,т۟+rLm@Afͫ[VE,Z)*%*@cjTe0[sr׳J1-{:E"e.ZMٙ5mZڲ/`IQ(R=){Toesnb-\?w-Jd5 AhVd2 ;F2\Ś?RTJ+2T7^B!B!B!B!B!B!B!B!B!B=jijYڭ]voG2!fs4CY}fv ގgέ{63(F1y?noN{QX D.RTJ+2T7ۗo\B]m +΍}eo}i缫g4zmfvz9s 9(=U"J"Nsбs :qqԨn PRTJ+2HXƴʺoQhkRTJ+2T>4122/y!B!B!B!B!B!B!B!B!B!{g4C,gVlgn.7y?3z9Z߭,g~Kᄈc;qoG3ѽ+{2a?^;Tyt8E M%;b֊JE`&I IQ(R{n]p} :;u0'Я+:6ٖ]՜iյۋxA'_b|W*Dj;/B⢼$'ss1WRTJ+2T>IQ("dxE<<<<<<<<<<<<<<<<<<<<=Y-PMH%gp!fs4Cqqm~|jZ}ŝ;J[_cƥ]y暱:ѝvcyqz`ZjD(Ȥe}ŝ;+Ĉuqm{ܳ6w=-Zm)ޓopMEED%'iXDz+J"N/m_}v-{:e9, ,sA5aDB2[qgnΑp(*HDdEeDJ9"2$(Pi"jDBI qGx$Q$GĐ^+ &dI$wUdBBH9YGHaY&L08~BH&T9\2 GhVdN,*@pmzV( x;m 𠮀ø'K^i{n7 d$M׆Ҵ{+k+ ExDIY6 BIUI(8%"j 8 d$2\'j6 A{n7o^ڵu4e4,5X/L|ەgo烋ђs3k<}*׳/AiR܀|ۘi_qR&Sڞg MH^DQ6Xq<ב5TMVS-٣>W:n8ijʍA &,&Qq\QA Ț&«Wn\qR&SڞfhWW@z&TT_jM =yUDUa^DQ6X`C^i"j 8^DQ6[A񒈓7[ƼH^DQ6XqEGd$s+GXs|(Pi"j%'"#^2aYUDUa @z&p, n0[ M׆"Y &>Hr-1"8wG MEED%'Y۳og\^n8ijʍA &,&Qq; Dbr1SVf4ේw1<'DBI Dz{X%"ĈH(hFDVTD5Xs}J$HIDINJ?9j.*%(8dݝ#{: A曷xM׆"}˷"B!B!B!B!B!B!B!B!B!ByIM-gp!fs4CyXP_E"e=v9[_7bwG2e~Kݝ4ٷ}BAA%_|[}Ō^ukͦ\ޛmMx6־m_x))mO3&.8ij63ymߒ︳gqٵqu,/^]9\^<9[qgnѹgLms[W^yv|Jwś 8H"ɪaʕgVvFfۻMEED%'qD' 8-XH L|&d[s*WYnA5aDyʰ!p[qV \q4ARqEa"+m_~ "V/gVuw7;vvUZ9a$ȀjfE2q՝QvQ(DIǜ!؊QR8-]3-Ww7@|Ȼ >IFKysqȤdw7@|FIFK{fҽEQ(%!]?I1 EU(ԉTW6n8ij@(I1E0%Hm̬щ9ՙFJ"N>uknQvQ(DIp))mO3;7n4eF yWq3<;y@|"9a$< NE2F$VXVf4pzdXJ2Z+"Q)Vq3<Օq3<; Dbr1Sno4HH(b# L|LR[s+4bEiufcGJ*E"Q]QO:љ斬&љ斩R&Sڞfw8wN y&'^J2X ^)%,GyiJ2X(b# 0"M4a$td݋nokyBy񼭯^1VVvjWAZ/}k_Zݫ[@xJ3;@D0MR vֽv*('O(I*QEB) 3-Q &>Hr-1":1QvQ(DIέs3mj.*%(8E"e19ͩgsљ斬o9 tfyw!< R2X$ST9ZkmcY钊bDȤdWTEd"+*"Sέytfy*49 tfyw8Acs636ӂ@|FIFKP0c`J'"ۙY+Mms38=2QR,HꈬdEeDJyկ7n4eF!7n4N"2nf3fۺp[+ >E#%"Qx i"G  >E#%(p4A%ѓv,cjCx ѽ fy0_y b){3ǝZZƥ]qkd7a}hRvm&cy}+άE#m5J)_ZY۳Wf-DjT3:ͤcs6QvQ(DIǢP$ERJ"N/rȻ8ёS3:?.8QvQ(DI_g/}32ŵ-ͦfmѝr a$Ҍ">$e$XXsx@O|ڿos-QvQ(DIܻzZ=3%3-_+K Jgϛwٴ/Lg5cs=]TJ2Qq:Htfy ֙W[oJ<}Yދ7FgZ}XۙA5aDN.8ij3;?7 s r(I4a5TQA Ț&«9ב5TMV;`_?1o`.޼5^?}wά){3'j6Sq&` )^138 d$Kٝ ڴͮwj]QVDQ6XqQvQ(DI#$\q3<_ngnwy"j8ݪZִ`?iEJ+|24ҋ*W^J Ea FJ"N'qGjj.*%$5v$ERIVD8MZ+I%DT`pGj]VbIVD8h @QdVIPpnv~(4ԉEJHXT r ;LT >E#$%+%YQqQ^4LO¼"w 9%B|+@d k-ܳZխ"uEf${X׃< FK;r FK9w]xk"XppzdXJ2Z+"Q(w!< D+A(b'qQ^4[fͫ[VE3밊I"~ J2Xs&"QFKn,7M ;xX_ .޼5^hy#%,D*+BxAw,ֹkjȿxvY"VOrIFK;r]TJ2Qqmŝ:FuÞiA]pO !/׆Ћ/x9J*E"Q]QC &'^r FK;y5mZڲ/]VbHgQNsA5aDB2[qgnΑphPW@aHKv4"&'^rIFK;-ܳZխ"uEf${X?y#%,D9QvQ(DI#%vyt~<,/o^hy"w!< Mek\ڵd_<đb+'9NsA5aDB2[qgnΑphPW@aHKv431fn"*,&sjՑ6olc{3ږwGέ?@+k;}jWz_{n6mY"J ~ &"QFKn,7t FK9w]xk"ׂ^{|!B!B!B!B!B!B!B!B!B!AsC|!B!B!B!B!B!B!B!B!B!At _:Aa{ +_@ ⢼$'׼^- rAul8ij?ٞ7g3KWү [qkc} gK{U%GDx yq3$ FX zAָ73FwS1moC;e$XX9J0x(I os%}ҥ6Zv-^bP1f-5H&Ț";7wx(kq6^ի~ܵTdI5r djAATJ+IEHEsA]H]Qp a|$'t5D%+%_%`` ehco>b~z]Mt(QPW}3@xёJA钋kx9Ra5T;ΛMEA_%v17>xkVyKoBuhWuh9_}+άҶ3Jc͜NξxPW@a_%`a]TJ2Qq&"QBFJ*B/<5hЯ L&qùi+xEjuqBLOWx'K_x >{m1c;_{h>*[jgo|?"2T ;y斯 f+BZ-bwϞ1Ld-{}do÷:%;vws%f73-_Y^x<[v7ZN-bwϞ1Ld-{n8ij@(I1E0%Hm̬щ9ՙWTEd"+*"Sέs3mA5aDB2[qgnΑpp))mO3;7n4eF {LO½ tfyExHO<ݽ`&"QBn8ij<5Kn,?W QPW}[LXέgp[ۋsq (Pi"j%' #*m񠰐t~8we"P$ERJ"N/_kcn烯jo|j-︳gpNޕ-/:bn8ij8;|gŦ7^YٵJгij?&TNswt*+BxA;Uۋ^iiյۋ_0[_g1>r x"jpvnExHK[LXέ]voG2-n[2 ;xX_ xk߭_{n7g<K4] l>$o-i/םa֝a֝a&lF2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_db_ce_pe_preimport    -e _acinorst"#$AEIOdghlu/2=BCDGLNPRSTbfmpv&()1FMUV[]ky,.0:;HK\wx{}|!%3489?Yqz'*67WX5>Zj@+< f^S%eHq1&QB*xԈ&I!,o 3z0[g^jb{ ^gB?b(eͪ*1Qa_j*bLl^SbLlT55]T_B2گ ֆ1?P (Inﵜ/*N qS[+{n:4`n,1IenSm7y :[rkQIeo:iF'^XYF.'G<+VX:adLhoJ y2P$=!xP jPl)TUb6U(ĘX*,<Ęީw^k^j#&[l46Ϩ~(X P8 q$j@vŇ=.kWdd+w{?H≓,EU|'ӝ @uv`--=l-iZ<{Zલ?ujnQޙ> {pe*%omcc}WjU+̙ޞT5J5\y+/ oq絭.xN:Jwֈ|'YDQ].<'@KhojJ=h#YW\y<~fffffffffffffffffffffffffffffffffffff9^)TVS.(Jˀ (38ʺ{[JA`PZ3X Z> 8^aLڢ^SF$n*1Qa$nK:ZU5J e ?33333333333333333333333333333333333331 Pħ+ʓsv &`O1J04_( '38TE13j bE YpMLho&,@0cE/4@0cE*\X)qb@0cE3y0@0cE3y0)Zt4T$ @0cEB@TTȠ:S*q4KF M8mQ[aV/) QVKb8mQ[aV/) QLLJ fb򘨰ͯͪ+l*1Qa_j*b8xeQxv _X'M5h^B޻j0oUqkZK_!o:_mF =o*O}7(krTEB$@0g9y,DG{m\ۉm| @-͖ *@$(H-~T9'DjDx+Mp֟!&5W5ZX 涻vk>8Zګ-g3333333333333333333333333333333333333{7&k["Of]=hF*L֦c}kׅ}Ͷ ^T1J=kZ֕vւ5| kZx_}pa2ͯ5Zqɝke;^|g} {x|8x)wޜF{6vzO٘mgֵ 1 0uǸ3I{66W4@CzEU'P;^K.w6S8z x#}ݭLn, s[]5 sLImmX^mADSEYZ/[nNׄ7ބkqpK"58)͸߳mew6f~e+_ -]1)^V @ S8sO/ oLĖfJ(vWcC{Q? ٶAO zO\ {.S_~ܫI٘/ՕC{Q?Oڙ?}&wZ2k֤e +뱡=1JKO/գ(v  "׏-zwv'y0%;^x8.q"E2G9f] LkǍehm;^gz yƼpar 8H@c `qD(@w Ͷ s$w{sZC7 tJɢX,Q4y4K@L(QB&`K̳֟ksZV+޼.ADSEYZ/[nNׄ7ބkqpH{(8zO&`IMsZ-75 1QƼxoVV۾S8w)wºͭgk#W&qh| º7F3jѓVF;kHV|cǺKhokEvO // <#v`~ºMk_{[C\{fL`;ke;^\{[:+ˉ鍮:J1ͯ8{ӛk\)fǵof1Yǵ='BL3]q0yR~+De]Uַ9(5B<&H`rYsq3[mxN:16fa wLosq3[m^t LkǍehm;^gz yƋLouְADSEYZ/[nNׄ7ބkqr) T6fj3XEtb )xެ|kqכ BS88q⥒(JH6f^mk95kXa/C:mn.9iF=޽ 7F3jѓ\ LՕC{]T ^#@C /C:mn""_f[ДxN:易N~34,ayR|'A2iL·ҵ1yE)k80mǍʙoѵkyNׄzެFXWIҗ6]'^xy/N~LĖf? g)n ,+^Oޝf^f[wx_v'e_e i3YW$ _:+4@C3;έ)skDx@G;kS6[^r NVwmrSkXK"!O5n c7(raͬ春y6Z9lqKUy ADDkcISg\֘د^mk maw5Zt 湭?3}utWmkc#|-? ɝ38T/Z:+і]1+)ͬsZb>գ!:+p3cӸ#}QƼxo ]yrUP-Fk|'Ewmn浭lqr;AzkDAֵn֦l%;^Azk浭nmsZֵZX 浭k`^ s6-Fk|讝BtWN!)t5kLIkZwLIV5Z, sUͮݚρsq?_b$kY@1q?F5yR`v+ Ǎ;^ta;֭5o frkL')OKƋ {6{Ko7F3jѓVq?U3xN;;0b2 }+ SqݚvzO٘mgօ1 0uǸ3Iyg s !@="T*Ȩ@d /%;mkq3[mxN:16fa wmfΊADSEYZ/[nNׄ7ބkqp!K$QNsn&kmjfqa} Nׄlq7)w=ٹ͖g5۳Y4ĜLo, Hy LkǍehm;^gz z) T)͸߂T H<ADSEYZ/[nNׄ7ބkqOe]Uַ{sZjfq``3ֶ[`nkq,+Jv֘sUn֦l ٬8(;["O6N,ֻ;Y0;kZ$/7F3jѓVѡ]4YvwqkLRﱭKUƋNׄ_1|+4YvwqkC[MRVr_{6MYF^} 8k!nf~fX;=j&vwǵxN;;wǔxN;Nn IX_}BֵkgIi8Z)fnbf1[Ξ4Yvw,օ_kN,ֻ;qo*O}ͭgƓ5sH * "q9e"< #oLo;^@-n֦l/)ulq7)w=ٹ͖g5۳Y4ĜLo, Hy LkǍehm;^gz z) T)͸߂T H<ADSEYZ/[nNׄ7ބkqON/6#}ݭLn, s[ ДxN;$i8sLI͖``3]58%:_b$N;^Y0?؉[}c~So#{Ǎ;^ǺǍǍѡRayR~V؄ĹW8/ mhok=V S[j0ͶULOUeyRpc ޵hɫr'Iv'ta;֭4q?U3)wxN;:)f NׄV#y7uv'[7q0yR~+D)7|kqsD9PjRyLq wLo;^9oBS8vk>6f~/b )xެ|kqכ BS8dFU"N7/ۈ]5 sfɫ3+/> `GVy1>!^So#zNׄ Nׄsv3eXy Nׄ9_b$mlДxN;=Kޟgfk 1c}&wZ2j*%[}7 4nJ~J4ͯoumc[hܕV{ӗmic@7_xy+yt3*ɪV{iMou⹣rWf)a}J1Ev)wƌ/FMR}&="Ok[)wΊ/3-fцLZdռ+3i;_y[/v#irw»OKѡǍ;^ۃ%u'i]sO1@ta;֭5`+sbIֳٜc;ДxN;EvsOsO؉{w}kׅ8pS8JM?:O#IŚgw4n2gzգ&sOsbIֳIŚg~kq9DvfaxXU o)4_xN:jfp!)tr / kGzT9,JTb )xެ|kqכ BS8dFU"NiW^p3SD#Q*PGV1Ff3RR3IO/yNWAZ;F89Kt0g9K&w{w35FvN1'ILǺՅ^ ~bP'o?*!<`A@un͖g+~: yO)u$i=s-g6vk>p=fffffffffffffffffffffffffffffffffffff8@΁n:1%+C!c\{Ѭ^T0yR|&+2hWƓ1%1Wƻ 84vf{Ɠ1%E RǸVd\{6vzO٘mg𿞓!&:FMRI1!\ AIT A2Ds˝Dx@G5f$5рgᒚ߃ۯ5{6[wOƓ1%/'}iO]9P4$X0g8u'}ޔ֔ax"#;LĖfK|i;Ҟ@&,Z,3y1 L" I"E$ H5P4$[ހ=2EK"DǦS=ٻkS6[.boǕI*Y$^=2sdf|讌@$D,Z,3y1 L"=E5Aȑx &AGR G &$?Zk¢d;Bz+A ‚@G;+~,;UTM1¢o0;DSJ#IVx Ewj3 tW]!= A\ #t VFaQ7Ί&Q0JPzC5YD:+wT7|b$G=$Fbaɏ Pbd-ᨒD(H12*8j?/i5 $H\)\ n89[`!w}Ew} Khoj]Z9)x%+|gB!= A\ #^;વv+ӡU*pþT9'DjDF!U,$1##xhL|(H12 L_ I"E$ H5P4$[jNb@ү%3 ;Bz+A ‚@G;+~,;I D)$D ^ \f8a s0$ ®Lڢ¬^SJ*1Qac0U_@DQ(IApqJSe8f3333333333333333333333333333333333333 qq_)[|ax1E^)TVUb6U)RFqf2j)W~~a/J 1W@kS6X  3j bE YpFLo0yRvYpMS_xbSI^)TVUb6U)Rm)RޮyRvs3 |+P`aJ s6 O}ƋhO3^T>♵EmX*,3kEZ.,V"., "#/ͪ+l*1Qa_j*qbq`Ueh}]1XV+[Sx m zhoj&v`~ڸuv'c_}%7fa9WUe5;^b?u[C{_:+ pYWU6f$5I\{q3[m4[Q$PbdTp% F)TVUb6U(ĘF1%E=lƓ1%*s ^Lo[oCWDX40909<@*M͌- ?) ?6UlyMoLĖf>f3Et)kC@ð45 Pza-Heιh 5D2)Djy$CR"PւkK9֟LRzhoj'?u[C{_:+$+U_ NׄNo$zE=2H zkZ9浣 &$zc 2Ȕ 浠CS&Q0JPzCPdJsZ@!S֖Dy%Tb ,Bo$zEIAyeILiNzt " I@<+mW+,pS,)%(JHv+ӠYRJQ^j7a@8)ch )֦HdIHb ,BkZ;;Dj%Ry$CR"PւkNEȢ5"#PdJsZ@!h`S֟%[_mFkV2ك4,ayRnoQ TaD_9h 洨S֟i5}vf޵hɯ),ݘ1I&浡Q TaD_NsZ@!i05?ۙJd̀pD$ vk]~3`浤,PSɔH10y ABe(AkA90l&3YmH9/ YPbd 2Ȕ @!kb浧2j|6f xf$5I4W\ִr$"PdJsZ@!ݴ"i=sqnw Ħ-O"^F83z7Ifkhg8iI"E$0gY""_f !' L"{w4f|_ P,a~,9Ӂv7ޞ}LĖf>bLhcam;3]_|iZoB٬[ĝ2jLĖ Iwn1 ! qLڢ¬^SJ+oJVVw}S6Em}@RŊRŁU-mv|-bN1'8@C "L"Y5 x[yW#;ҚҞn_v|1]~4,uP\nJj3X!Z2kPZ]DѦ%^ThXDPrO Q@o HAdȦ9ɨIlsq2SVS[ћyW#٭)')NƓ1%%?~ѕqW/ W`&bK3]UǸ@CII"EȤI"5(9"^" H"#89(UI (M$qiDPrO Q@o Hxb2 Nt`bdR$giSrFR(E8+~R(Es)S=YZ47-p-1dAI(GL(@G9.2d*'릩[k9vop.ƫKآJk9EmX*,3kEZ.,Ub..` [%}ȂP="$􊼲&45Nkt+Ss)]4_VV D1/润)S2YZ47sO-9 qLڢ¬^SJ+oJVVhfb򘨰ͯh T[xT*\s)S>{pe*%ՕC{Q?*Khoj L{+[}ۃ)Q/zvmq;{Sr _XbDbS}( &I" @PADSJ#Im;LB:@EȢ5"!Nq3Sr _X W`WLJzfWv7n D.dD-kZַ 2dSd$HwkZWK"5r$zEIAyeILi;ֵkpw9PD=1p[ֵjQ U ŁU k>n$o/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_common_variablestKLIB_OUTPUT_CONSOLE="true" KLIB_HACMPLOG_ENTRY="filenetsa.log" TRACE_FLAG="true" INFO_FLAG="true" WARN_FLAG="true" DEBUG_FLAG="true" ERROR_FLAG="true"  l$o/םa֝a֝a&u2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_pe_importiable   #e E_ainorst "$AINOPRcdglpu-/=CDGLMST\fhmv&().1BFHUVby'02:>KY[]kwx{}!%,4;?q|3WX56789:!䠢LAQ?C,6{XWVр 8vШX`Kl1Te%12ݯh-&v{q, I l$aV/ÃAm~J7,ۋVmn+[K?vqɨ U%:3q8۴%{n:h7~2VLm_?vq"| fcg~%mkK_Wɂĭ7]Ѽ?Jg^VYY M95u'zk_KZ ݝPQTȦBH| C8 PCAUvFXRS-QggaILbFnb7/4p/*8 Àxap` . Pvfffffffffffffffffffffffffffffffffffffffffffffff;(OY;=HTݎΥhbS# R囚ו'R+)5t lu(ڈɊ`ZWmF5gxA.γ0-&v{x5[h ̃4Y w pFvfT_ANM4hpAѼ>Lh)i.|D3Jp4R T_AS4EJm6%=4Mr{S2[HSY; 4E-@pWKH#عpT2aah6gyjWۋ=jLn0S:a;v,y'F(@i-ʓD|6x-4̖I/Kjv,ɥ'E)m(.ŋlo,kF6(zVrԯ}kVijJmħJPa[ܾVx]B2or+e)bu_gkJ_z64a/"¼cu5]1C;=6(zVrԯ}kVijm͉O{vچVmlJ{۶!9M://+y[ܾ}/}viy0_m~eJ⡮ajk}?hgkE./:/ 2ٯܾ 6S5!9MgEkkj,W]D3vl辳+_j3IkhhbSݶE}vE|LLQk(gW y[l5yR~7* _g(fSccn_}vnm]EiBPb*{mLmو۶zkw͉O}֡ KF~4\ŦѼ?ymm5Rfe]hFvڮЌyM&ZL7XT 1EXWv-CRۘhd t<͋ EC v,ͦ9"<mW \MʺR#yRngWng`K?6[mn# RPL~ѻiPaޓ5 [avJB5]='#&[j-3zvdZKFhɖ롎@/du# R&u~{NZ2eW^ScmF궆;;33333333333333333333333333333333333333333333331 Fm3!A` 0sZ̶ҤƁAy:7U 8vШpcv Jce_j2ZL,))Y;=HTl_Svfffffffffffffffffffffffffffffffffffffffffffffff;9h)x-) vfffffffffffffffffffffffffffffffffffffffffffffff9ʼrboTǒ20-&v{x5WL+ujڊ‹r@q!ƌ, I l ]ZvXsU2 IO 0&("4ڣ6,))Y}&eym,ܿ,8AD =o1Tfc2pQ#OQ0@ `7\P dHL{Ɯs"+~Q[zI1&4㝡["oV IN9jI Lx ^ӎvZoɽQ4G>PyH$$M!H@@iFmXRS-Qgg&ZL Y;= FmŘ-I.s"L(yG<|ެ"R > INDyH((yG<|ެ"L8HD@M "PIOuEֆ͉O`gk"Z7&s PH&4Ƚh,!@q%BHc۷YmK۬ݙ,ּ>ݢ &C&LR w7^L;(+oń\D>Ѓ4`Ř ܴգ~pƂzFo/2!q_PN׌J(ʸπ9HvQ}JD3J 444 hϛ[j +2+ql'3%E5WyFT2 RZAGf˅ѐ ph@*[9͸֤I΂̫̫XJ7YOQ} +2fM(g>gj)Ko1E4ʻ\b67Ŗ|mQ^Q=vnmjWܾ5H~hbS%miYq/j7U,bЌpܾgo_kVe\iB򷕽Xfƌ1EXWVe]jbwŖx)붣u[mR٭ZE+E+mCJ̫] R[mn)!9M://+y[ܾ}/}}U++WhbS%mAC;_:/v }}Ix}_ޞvfW@6<r>mm_ޜ3bqs*po"}fVfmj5pҳ*٪Vm6%=V' b+/& +f2f"}t ῔/+y[ܾWI+Iܫ}M.mF4ʻŲiBPb*{mLmو۶zkw͉O}֡ KFK2Z7&Ve\m嵷J +2dܾ#+^ScI 7'Qy(W?Knb60b;6.\- aYw-3iH-&wFf7BW/Sr2ԩTYe~vtcA=]1C:ڍm햬0Kjbv,]C;TmDPQ^hbSfI 6bv,_{TmDPQnwڵߖnk^T ޲xz ڍm@q%-x=1BLͨ4M3h5P75*L_rRFBLڬF6Dެ@ݟDGgA/I avuvv?IbC<7g;|AH*fffffffffffffffffffffffffffffffffffffffffffffffcYyR}]1C:ڍm 8h7xLE2Hhqy0\pmsU|4{müxWз}3d͜aqViЀԶVm)~8P#(iA$ <;LJ{[ܾN׌]حkFViVVT=t l;*oحhik3E1u~<3_0Z4FkNv+F\-~pӸ(hA+FxIѶ *pE4ŀO=Ѷ8{ٸYCM3F YB oh[lJ{Qh]zmЌ~Vg;IP pY;[nZ1PI@ut AѼ>OjgkV=@q%8Ln7̙ڊ2Z7'Q&`tido*L #&,@((9",/xnY7;}ido*O$M$ < LhT=nx7``_fEB уcUSWp I Z7FLbe6:kr|ؔLhT'3CJ6(rb%*֕+3꼒boU5F;͵,!&,E!wi3!F+E[Ηns|辕s:bwڙSV=@q%]2f oj+3%kMꉢ9"{W6gAAa|'00/w̙_Y̖Iy7&"a|'xn7dQ4 1f;U5xw.ZLjѿ8B2gW3)ԭ[sħ̖ފE5Z1ԠCj"&+kRiR9&&=USThsI\h,!&,E!w>ZLjѿ9Jmħ̖ފk=zmЌ~Vg;Iޮڍm+FC8jLn7tgз}6^7Ixo_}c}Tcox[LPήn sZ6r77:be6=_Zk Ef+~sܾHp{ q605t }BW/F(fSaz}¿B2r qƬɛ5zh\81}22mqWLP̦ǹ}Cf[jLn7Y7;}Qbm{m;EX_< ၀G}YCM3F YUM^;=ot lu+E\)WmFmrաQ91[_LkJ^I17ꪚCZNs3fzv-%yR}b=3~76 I81}22ma|'03pY7;}j2έyR|H"F Q7H'H{ <03py$jwMs3k i-ʓՁI+[7ƻ3ido*LSc^3cFXwA&=d &=qyŢʹpqo[QAT(07#(i@A/IOw qn))yG)SLު"@)H$ =sv>z$UMWv;:Q1NiJm6%=v;8>c()Nb n_|kkoV9M t7K;9j75[6oago1ޞף^W v;:a;=v;9h)xk(3 Q&`5$ǾQ&Q۬ v&$8sɓv> $D{ٙkʓFYbSwAިzd) DFɂpp;{mmB-R&=ePi9}VXC= {oIzZvi68CxB2-JS5ޞףAm(DHDjM{rԯ}q;^3[}z4[m.Lޤ "I@򟶭IgZmrd^ 88Ƈr("{ ("&ER$y2/z E01{Yף^vfns w|Oc((^YVڱzp/n))|_=GHՂH8 DSN,Wv_*+qrN \![N8 \bdde;,/xpq MA:/8Vf~zIx D &JTbhٱ)-z5Q&`wq鑓mx MD>Ѓ4`Ř  I Z7jScZ-|ؔ~t_ySPةfw8A2s פh7zIx Dw ' "| h1HA>;=oR[mn)#;?}+3]uЛՁ-_|kkoFo"t Y/Z6fwZw;3W)] w ɝa|d^ 88+`cz;fa[礘 MNv^ F Jc,Q&`ŭʜDt"Dh)`+xݻp/sָrZwr8 #&,@((9-O7``_goȢhA0btROp?-&v{{D5hߜhbSI}NCby[eV9M;zIx D9,!&,E!woh󉳺Ԧ-J8]mZ^ܨ[m{ޗ> *}jM{ +3ǔL`Lޤ "Is(DHDs&ER$;2/z Eo<H"/p6h,!&,E!wգ~rkw͉O}'E8*}okѦr;zIx D9]uz,!&,zZLjѿ8B2gWjScܾE6%=T8*qY=$ǼLjݺχ8&fffffffffffffffffffffffffffffffffffffffffffffffc҉`z3iVM^T%x`Sk[F[I+ʓM"ftyMb ҾVvs68wu6Dެ@wf|X$'W6gAAa|'xn4EB уcUSWpohޥhbSݶ(qST6tzqM33Ft$M$ <FWsD}Brt_xXy[ΗfF-_}} g 0,!&,E!wnZLjѿ8Ok"²!9M:/(qST+v[]xvt_Bʜ bvek"$<&`cLI|L41)p5`jW|ޘՂIy7wph7|FL$D cwr7I|L} ly}FsY8[/ |wi;פa|DH& F? =h,!&,z?-&v{{D5hߜP')E8*}ʹhtkB |辅38>N+3ǦE"I1;yDoLM$ǼЌÝrQuY2ݯn.+gw2_8t_lD>Ѓ4`Ř ZLjѿ8Ok"²,M3-_΋WFř/ԠCj"&+kRi_:/ +3_:/SE"I1@ެL{ɻףdQ) Z!8N>t_]",/o#ܾ,!&,zG-&v{{D5hߜT8*w-_:/fw8}9,!&,z I Z7kko*')Ek3`a_oY}9^;nwfffffffffffffffffffffffffffffffffffffffffffffffcו& Cg]Zv֬햬0O?rPWjɫ]Zv"SYR3]΅Xli3E6%=kvr R,8Qgl vWLM 8nɉPdI۬ EYm6˳ ȷ-2weuwc33333333333333333333333333333333333333333333331śו'lPTՓW'43_Z6حh,3[-~pӸ)]̖3Mdi+mLm1F *pm-4̖IS;QȢR mמhAwݪ0RSE/@q%km =Ѷz@q!zs7jQs ;}PIJV, V4+F;\^917 Cɻb n))vӈ8 mo, ido*N\i(G Q҂Hy ɉPdM8cvILe0.EĔ׋cFfKFm ɉPdM8cvILe0.EĔj^, j SY}dk'pP+&&AHy7$DjxY@̙ڊ2Z7'ϋM3%yRpׁ|u2iEI4(ʻ j~ڿ *p-J R~SM$J&7qzs7jQs ;}PICJ`W1IP1I@z@q!zՋӜ1T`2_YN"J,ݯCX4D&JoUG Q҂Hy ɉPdM8cvILe0.EĔ-&uj2έyR|X4H"F Q7H'Hy ɉPdM8cvILe0.EĔ,i3X- ƍ sxި2 $ݪ0RSE1qe8ѧ"E0QP$Ux X"E<|@($eIW=WLM Nڣ%1\~, V]ƞh\EĔ [5k P+&&ALy'Q.av+FڂObm"JU5x(Uz&Dެ@3Ech,!A6nXJe۶ց y>Dެ@Vf+hŦAE9@*'A"oV IOQ&`Vf+hŦAE9@*'A"oV *$@(4v!=kmjuq(G Q҂HyESd""'A/& &Q䆞"'EW1]{F-5ǜz (EE4wQT<8="I 4HA Vf+hŦAE9@*'A$G<$ݶOjܗ ՙ1i.>VZvMI}t }QRv[Z/+rkʓv;91Y!K.j7UUl`O'Yq(5GHՂH{2HB &=J zboV &=݆zh|.QR <MP[ԓDGazO)h@==]& A/I۬ v&$8sɓv> $D{ٙkʓ.j7U$yljPɾS Aƍw a8ۊۚ94!2O D>"X zIO!s8k#+^ScmFۖ}-4̖I.]1C:ڍm <03p4EB уcUSWp;;=oWLPY-=1Jڍm*ѓ:iYMݺχ8Л]+;ܾRсWK}M3%yR~KkdTɢL5(OHY=" "PIO;$&Me aH'r%I#Ɯx(OHwAE9@Ɯz (EE4wQT<8=" zIOq>Dެ@s.*֍8:Jm6%=9Q$M$ <;_y=-9k.4EB]xڙF"<DsE& A/K`_ ;YCM3F YUM^I Z7FLjo)ʹJ6(rb%*֕dTb)ԯR[mn)Yn4&]1C;_|Zi-ʓڙҭyOoYq_Zq2f}go-4̖I ( zIO fKFLNࡋ鑓mx ;uv7rѝfKF=j̙2Z7'Q&`tido*LUƓ( U 8H'4 PfoEֆ͉OakƷ焔|X$'\i2LrPiLj"E< RU0-&v{x5Z-6lJ{ ^sJ>Dެ@g;O? A\$AdQ4 1f;U5xw-&v{{D5hߜ!3R  JyW LhT'3^hfħmySPةܬ$M$ <ngÜhM㫱ތxmGzU3׋M$Dj1Gn_8ѧQ&`0%IܫUTsQ8M$J&ӏ ( zIO fKFLN\j) 934nsr4i"Q5`IS4"RЀz)@z*Y;=Z6%=NWx>Dެ@\i$Dj=Q4nUƈ$BIhI#@ \i2E@)R(D"4 nUƪeT&$A` \j&QJA=Q48 ʸ"$∦1h @ܫE$$ Ѓ4`ŘUTգ~pdί֮Cj"&+kRi^Ldy*NWyjWZ-|ؔ[kʜ>Nfw8"oV I8kn4&1]{F-5ǜz (EE4w*M5ESd"Ld`I4(N<$$M$ <'`"JS4EB уcUSWp@ggCV:lu(ڈɊ`ZWq09^}xFVg8kn4&q}Fvf+E9^wW^-4bI5mcFxIGHՂHxN VmJSWi*9( &%TiDŽ|X$'M3%yRdvr4RLrM!fi6*)]暢y2o&4 P*()ZBTqcL=Q$M$ lJ{J>Dެ@pWmF궐hUƚ.|L{Ee\i2b)A%qa xqCho 焐QB(@)$qȢhA0bwjCi3!Fɝ_]6:mDPm}0JU+ʹ]VRJmħJ^T8*qY=GHՂHy7v>Bnq3״b\\y(G Q҂H*Lsɓ O& $ӔYbSQ&`j7UhGp, ' "| h1ުørggCV:lu(ڈɊ`ZWrj7UkޞǏ)iYn Auڍm=ڍmVVd/"¾j7U VR[mg͉O`xIGHՂHxN VmʸIQ4G>PyMꉢ9"{ȝʻ5" "DƜxIGHՂHxN42Z7&Ojgjw*ML'(4&$ &@Uƚ >h* M!bf]&B NQ5J ^`_ 8MD>Ѓ4`ŘUT^ZLjѿ8B2gW]yM]ozuvno!Z6YM6v>M ΂lucȴId)XWޝJ6(rb%*֕v-%yRa7hQa,vcw2f+v qwv,+Ϟ8HD@M "PIO)Z-ٱ)3i-ʓ;p̅+OS̫NQ91[_LkJ;YѼ>^6&ur;1Tfe%12ݯh-&v{qPc23-&v{{D69ƛ]uq78wt_Z-ٱ)Y^9IhTfBE}PIKF6^73״b\\y(G Q҂H$Ld&QDrM(D=T 8D&JoUG Q҂Hyw8.j[mobSݶ+@q%-x.7j hϛ[jR^7n86{X{QLm_ȴIZL ~,̶E6%=k5mykկ#;佀g3_ܾK۷5m͉O{UWZ6kkEIY5~x(OHAE9@hX_< ၜ(+ngÜVf+hŦQB(@)$ rdHqDSHiLj"E0QP$Ux X"E<|@skQX_ZٯZ[gvE6%=k+ڭ[ؔAfKF͉Oz=ѶWkE6%=wR[mn)T[׭IgbSީ9 \ڍmnM3%yR}bSRw߾lJz;ȷ_Zfnk}c|Zi-ʓڙچ9TfcoŁ\ƍDyH |y4ĕU1%s1e ;8 moA*@i$ς *p '9TPW 8qido*OlJ{ q> xZs m+8Ѩ(G Q҃ O& $Ynf,ZqRсWP| 4 *pnsﳿ|ؔA> xZs m+8ѣH)A^M1%G>LICYoxN($x1Ǝ| 4R8`MsC%rj7UޅZVmlJ{5N;͉O@gy┹~<>jLnnk}cxGxm wx| 4𵙢`W:q1D"R9UTsATĔ;-Ŗ_4"JZ01CR8`M `Hpp;px-JM^hbSީH <-fh6XΜLhH'(*i*9 bJŖb{ůw@q%-x!4x|| 4(*@`§ qLJԯ;6%=q*@ik3E1tcF"E<sɦ$(w[-8iEĔ`cox8*@i!*@`§ nwR[mn)T> xZs m+8Ѫ*'A^M1%G>LICYoxN($x3QTJ> 0nwȷxLJR=jՅ5x12*Rzn. ;kx(*@jBF? A\$M4EB уc|;?-&v{{D5hߜT8jVm6%= *w&QJt =^TTr RJmħRN[5k ݟ^"r;z<> > 9ƚqA8PS4۬si(̬^ScL Q[5k ZZݪm͉Oz > *@hX_< ၜ()ƚmv|9Ƅph7=sn5fj}¼]D) =P7-nq> ;kzR8G < qa|GqxpqȢhA0btROpi3!FO AѼ>);ʹbSީ§reT@@NAO R[mn)TaS}¼m7g׈2}_|> ;zq7Tw? AN4۬sYh78ςw 'h4Ϝzw o>qs<>H|$M5fj}¼]D) =P7-nq> ;kxR8MTpia|Gqxpqh,!&,E!w;=o*p TpԝwH;(:*ۅZ-|ؔ@0}kfa^^6⛳kQXqH=GR8M M ;xpingÜi7sxATA\$Mx*@p s<> ;`_>q9TA\$M5fj}¼]D) =P78Hŵ6v;:ժ[A.oe&^7 23doZ-|ؔm حhv۷5j+حkk5mtGOŖ|xߵKI|_zֻ;2Z7&vt*f6w%j[mobSݶgWng`K1v;33333333333333333333333333333333333333333333333YyR}ETYbS$G#Sm~wAިzd) DFɂpp;{mkmli() $MwUߨ$T $X$'*oے$mm]kmفw$T $X$'<-7mkmC*$@)"oV IO ($T $X$'с7;ȢL7LilيѶ=EQ$U1% $M$ <1Ee RcO DH&!"oTwDH&!"oTbDH&!"oT~g1w!o}x߄$ ;󗉝Vm6%=V~Bmq+mmۚ^hfħm{UWZ6ӿՋӜVxVyږLs1fKjWm'mJs.4ڣ,))fk~{[_@ň `j;b'aP+mCmvʜUMRՋӜ"ECD Ќ{@ƍ*qlԩ;b'aP+mCt#+^884IOnK;ؒO ݪ2’lh\\|稪$T $X$'/ 0KYNG zsPȰi ѶmvʜUMRՋӜ"ECHVZTUH* SRDެ@ʜsV/Np{Y !Z6nekDxؒ9Zk>yIb&Iz8h7{vڝAҗ;snS7{[;(+iqnaILc6n^.>K۶ׁ~! 7]w8L MՋӜ"ECD o*sU5Js7V/Np{Y 7B2 >m&4iSnRMՋӜ"ECD Ќ{OfH{r\hX_f8|1ø`c פ7;33333333333333333333333333333333333333333333333AyR`gEDv+]ΣujKCgܾ;YѼ>k}'WZj}Ы g,83LhTJ&5v%&dMޞ^۬ v2.fffffffffffffffffffffffffffffffffffffffffffffffc75*OȰ} ;qoT=2oE"qys8‚XEqVcF^+7O<-xC ;ڬ~.|0'jQ1[fD;ڬ~.|+EՋӜTՋӜ:w %fFᨏx ^0'i+0:7 'xՋӜ:w %fFᣣxF8TggCVʜsV/Npj5*/ySDy@JOMBq1N97;33333333333333333333333333333333333333333333333AyR`g7= ZjgQKh%!ore_kdZKFQLm_jɫԫhfħm@or>v//K[ޞ/ggS/f[gB6cg{]:w诳Kj: 4̖Ic]ήݺg?f[mgg;|duc33333333333333333333333333333333333333333333331śו'c}Ȱ5&Nh7xLE2Hhqy0\pmqmwU߭%ƞ[mMBq1O;*o٢ft_F h }LhcoUG QҀ$^4Zj  -%gڜ4ŀO>-5 , 'w ۷YIm,*#_kϋMBq1cn'aU+E|ؔI _$M$ =yG)SLު"@)H$ =ԯ)L{Ee Ӹ7{4Z,΋A\$YUfLM2z"9"$U΋$&R ATDDSJzH{n=sfLui3Z^THI0BxZ! y3ۋ&$ f9HI0B1/$~x(OH&ZL7] wA| `94 wvpp;pݺq"oV IO ":"4wYD"a&xqaxD",< FHA&8E%I_b&` <03pD>Ѓ4`ŘUT^ZLjѿ9JQ1~ReuIgC{ftNj1t_]a|'xpq(fꪚ;գ~rT_ySPةVz̷k|辕E_;nD c4#'EC;XN톞Dt"Dh6D-Lv<ɤ "EYy$@&$ Lp!ߞ92J&)uR T_l <03pD>Ѓ4`ŘUT^ZLjѿ9JQ1~ReuIgC{fv  a:/wG "|PIHJ΁ t_yx7`g 'h,!&,zG-&v{{D5hߜT8*w-_:/fw8}9ƛ_8ЛzO\(-鉽X$x^^3ہ~ڿ F0pc]zidGA$F3hL2n,#B$_ŘA!$ri"B]$i=" WZ訂mhRLhc,/oN4EB уcUSWpyi3!F+AFtJ$GI 7'I 1fKH-&wٶfZiYt#+Ml4X9]zہ}fŮpӸ;ɽQ4G>Pyug;1ƞDt"Dh6D-Lv<ɤ "EYy$@&$ Lp!ߞ92J&)ut0`l w ~‚IƂȢhA0bwj/-&v{{D5hߜh(Θ \2ai3uf,~6LW +3ne~ yBHE^ 4X9ۘ 7~-sŖ9DrM($'9mbS7mQ&`s-.|PpQW"Epp8/wnaILb̷kFZ# Ie%13gg[ j,=GHՂH*M4M4=" "PIO\iizh|<4M4]9*$A$ǿqio8ޘՂIy8L;qioڄf% O03v5;ѫۏ@Hk@L-Y , jܽFϣW'7 O FMꇦMC$@hwgfKFc\oQDSJ IOMB*CC̆|{QJ[}&zxg΂vnm-q꼒bo&L4o88nv-'"CN@x*i*9Ƈp q 3]gph7zWLIQ&w7wr7EwM!WLPΜU|y4ĕcC;:Wv΋x!;{)L$D c4(8;a9;k n} gx#]E3zZvf zboV &=ƜzjAR; zboV &=ƞ<&`cO~ڿ * 0pgfӊo133Fu$M$ PyD!!ƒ ;}/הReuI^Ey/7&=d &=oVCP3Knb6W]- gf˸I Lx ^P @K|6Z-&o*O FHAoVD"8;!5^8rdM'Rp$^AESd"s+f23yM@n}X[7Z-&աv:E4$BHD7ޭr7ph7YnxD"n^]unچ@FwޞZ-&o*O:gcm;7]/jVQs]uwFn:-&+Cg]ŤhEV$ǾQ&PiǦE"I1@ެL{ɜH <|y4ĕ|hၜ(+y$^M1%G<7``_fD>Ѓ4`ŘUTգ~q)Zқ7*5a;3ޞFnVg;۴XOk"¾3\-纾{^{)4+ lzL5FYbSH <00/wȢhA0bwj@;=oR[mn)WN*p T;ؽe~)fYdWi_ijWzԝ66 qdHL{wFW-':E4=M#Ѽ讹/q3h]w/ћMa|'xn4EB уcUSWp գ~pY?BޓJܫڍm-3ЌÝ;(g}Z-&o*LZ6bȰ[XTo8ID@IyhuޝN4k꺵 EIY5~z7$of,d oj+hŦQB(@)$ɦ$(mmLm1F4\~, N&4i7&#5W1Z6y4ĕU1%s1e ;8Q̖I3Mdi+mLm1F *p.|mLm1x8‚&ov3%km-Pf"˝ήMrֵ} 7o]_z8C|kJl{LPΆ8޴f/R7Jt l;N*]}-)/J6(rb%*֕+2Y}Z-&o*O%r-4̖Iةfw8"oV IsM3%yRg89sWmF",/o#ܾƫ(gUQẃMEmz (EE4\bdde;,/xpwţAE9@sPܼlg|W^ScmF]luloofKFnÍ)ҲbS=jLn04 I1 I1;ν[Ӹ8‚IƚsWV5&MWLPΫPTՓWq7 "| h1ުøohQjo*OҾ+)Srʺj7UQѶhɝ\4we~-';q2Ѽս;(+jbu]Zv֬&YEZYX_< ၜ(+FWvmq(fꪚ;ZLjѿ8JzkVԭ[lJ{aV+^T٭F}Vg89ŤhFWw1 k$$o )/םa֝a֝a& )2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_pe_queryiable#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_pe_query.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_pe_query.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################ # # Name: cl_filenet_pe_query # # Description: Performs application discovery query on the local node # # Arguments: # # Returns: n/a # ############################################################################# . /usr/es/lib/ksh93/func_include ############################################################################# # Functions: # # listUsers # isPrimaryNodeForInstance # ############################################################################# ############################################################################ # # Name: listUsers # # Description: Lists the process engine users # # Arguments: list of nodes # # Returns: Always returns 0 # ############################################################################# function listUsers { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset nodes=$* [[ -z $LOCALNODENAME ]] && { LC_ALL=C ps -efa | grep TM_daemon | grep -v grep | grep -v root | awk '{print $1}' | uniq return 0 } for node in $nodes; do [[ "$node" == "$LOCALNODENAME" ]] && { LC_ALL=C ps -efa | grep TM_daemon | grep -v grep | grep -v root | awk '{print $1}' | uniq } || { cl_rsh $node \ "/usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_pe_query -I" } done return 0 } ############################################################################ # # Name: isPrimaryNodeForUser # # Description: Checking the primary node for the process engine user # # Arguments: N/A # # Returns: If local node primary node, return 0 # else return 1 # ############################################################################# function isPrimaryNodeForUser { [[ "VERBOSE_LOGGING" == "high" ]] && set -x LC_ALL=C ps -eaf | grep -w TM_daemon | grep -v grep | grep -w $user_name > /dev/null 2>&1 (( $? == 0 )) && { mount | grep $user_name/local > /dev/null 2>&1 (( $? == 0 )) && { return 0 } } return 1 } ############################################################################ # # Name: saPEdiscover # # Description: Initial process engine discovery for smart assist to find out # Process engine has been installed or not. # # Arguments: N/A # # Returns: N/A # ############################################################################# function saPEdiscover { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset -i pe_installed=0 lslpp -cw '*/bin/initfnsw' > /dev/null 2>&1 (( $? == 0 )) && pe_installed=1 print -n $(dspmsg -s 8 filenetsa.cat 1 "FileNet P8 Smart Assist") print -n ":FILENET:" print -n $(dspmsg -s 8 filenetsa.cat 2 "Process Engine") print -n ":FILENET_PROCESS_ENGINE:" echo "$pe_installed" } ############################################################################ # # Name: saCEdiscover # # Description: Initial content engine discovery for smart assist to find out # content engine has been installed or not. # # Arguments: N/A # # Returns: N/A # ############################################################################# function saCEdiscover { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset -i ce_installed=0 ce_installed=$(eval $(KLIB_AIX_ODM_get_odm_fields "name=DISCOVERY_COMMAND and \ component_id=WAS_6.0_APP_SERVER" HACMPsa value) | cut -d ':' -f 5) print -n $(dspmsg -s 8 filenetsa.cat 1 "FileNet P8 Smart Assist") print -n ":FILENET:" print -n $(dspmsg -s 8 filenetsa.cat 3 "Content Engine") print -n ":FILENET_CONTENT_ENGINE:" echo "$ce_installed" } ############################################################################ # # Name: saAEdiscover # # Description: Initial application engine discovery for smart assist to find out # application engine has been installed or not. # # Arguments: N/A # # Returns: N/A # ############################################################################# function saAEdiscover { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset -i ae_installed=0 ae_installed=$(eval $(KLIB_AIX_ODM_get_odm_fields "name=DISCOVERY_COMMAND and \ component_id=WAS_6.0_APP_SERVER" HACMPsa value) | cut -d ':' -f 5) print -n $(dspmsg -s 8 filenetsa.cat 1 "FileNet P8 Smart Assist") print -n ":FILENET:" print -n $(dspmsg -s 8 filenetsa.cat 4 "Application Engine") print -n ":FILENET_APPLICATION_ENGINE:" echo "$ae_installed" } ############################################################################ # # Name: DbPEdiscover # # Description: Initial DB for process engine discovery for smart assist to find out # DB2 installed or not. # # Arguments: N/A # # Returns: N/A # ############################################################################# function DbPEdiscover { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset -i db_installed=0 db_installed=$(eval $(KLIB_AIX_ODM_get_odm_fields "name=DISCOVERY_COMMAND and \ component_id=DB2_NON_DPF_SINGLE" HACMPsa value) | cut -d ':' -f 5) print -n $(dspmsg -s 8 filenetsa.cat 1 "FileNet P8 Smart Assist") print -n ":FILENET:" print -n $(dspmsg -s 8 filenetsa.cat 6 "DB for Process Engine") print -n ":FILENET_DB_PROCESS_ENGINE:" echo "$db_installed" } ############################################################################ # # Name: DbCEdiscover # # Description: Initial DB for content engine discovery for smart assist to find out # any DB2 instances are configured or not. # # Arguments: N/A # # Returns: N/A # ############################################################################# function DbCEdiscover { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset -i db_installed=0 db_installed=$(eval $(KLIB_AIX_ODM_get_odm_fields "name=DISCOVERY_COMMAND and \ component_id=DB2_NON_DPF_SINGLE" HACMPsa value) | cut -d ':' -f 5) print -n $(dspmsg -s 8 filenetsa.cat 1 "FileNet P8 Smart Assist") print -n ":FILENET:" print -n $(dspmsg -s 8 filenetsa.cat 5 "DB for Content Engine") print -n ":FILENET_DB_CONTENT_ENGINE:" echo "$db_installed" } ############################################################################# # Global Variables: ############################################################################# FPATH=/usr/es/lib/ksh93/aix:/usr/es/lib/ksh93/filenet:/usr/es/lib/ksh93/hacmp/:/usr/es/lib/ksh93/util/:/usr/es/lib/ksh93/util/list PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/:/usr/es/sbin/cluster/utilities/ LOCALNODENAME=$(get_local_nodename 2>/dev/null) ############################################################################# # Main: ############################################################################# typeset option nodes instance ACTION while getopts q:n:ILPDd:u: option do case $option in n) nodes=$OPTARG nodes=${nodes//:/ } nodes=${nodes//,/ } ;; q) # Perform a query for a modify screen application_id=$OPTARG ACTION=query ;; u) # User name to run discovery on user_name=$OPTARG ;; I) # List the accessible instances on this node nodes=$LOCALNODENAME ACTION=list ;; D) # Run discovery ACTION=discover ;; L) # List instances on all provided node names ACTION=list ;; P) # Check the primary node for selected instance typeset ret_val isPrimaryNodeForUser ret_val=$? exit $ret_val ;; d) # configuration assist discovery saDiscover=$OPTARG [[ "$saDiscover" == "AE" ]] && saAEdiscover [[ "$saDiscover" == "CE" ]] && saCEdiscover [[ "$saDiscover" == "PE" ]] && saPEdiscover [[ "$saDiscover" == "DB_PE" ]] && DbPEdiscover [[ "$saDiscover" == "DB_CE" ]] && DbCEdiscover exit 0 ;; *) ;; esac done [[ "$ACTION" == "list" ]] && { [[ -z $nodes ]] && { typeset -A list KLIB_HACMP_list_nodes list nodes=${list[*]} } listUsers $nodes | sort -u exit 0 } [[ "$ACTION" == "discover" ]] && { echo "#primary:takeover:application_name:config_vg" # # Check the primary node for selected process engine user # typeset primary_node typeset config_vg for node in $nodes; do if [[ "$node" == "$LOCALNODENAME" ]]; then isPrimaryNodeForUser else cl_rsh $node "/usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_pe_query -u $user_name -P" 2>/dev/null fi [[ $? == 0 ]] && { primary_node=$node break } done config_vg=$(KLIB_AIX_get_vg_by_path /${user_name}/local) echo "$primary_node: :FileNet_ProcessEngine_user_$user_name:$config_vg" exit 0 } [[ "$ACTION" == "query" ]] && { echo "#primary:takeover:process_engine_user:process_engine_config_vg:service_ip:netmask_prefix_len" RESOURCE_GROUP=$(clodmget -q sa_key=$application_id -f group -d "=" HACMPgroup) # remove quotes RESOURCE_GROUP=${RESOURCE_GROUP//\"/} [[ -z $RESOURCE_GROUP ]] && exit 1 set -a eval $(LC_ALL=C clquerysaapp -a $application_id | grep PROCESS_ENGINE_USER_NAME) eval $(LC_ALL=C clquerysaapp -a $application_id | grep PROCESS_ENGINE_CONFIG_VG) eval $(LC_ALL=C clvt query resource_group $RESOURCE_GROUP | grep SERVICE_LABEL) set +a [[ -n $RESOURCE_GROUP ]] && { NODES=$(LC_ALL=C clvt query resource_group $RESOURCE_GROUP | grep -w NODES | awk -F'=' '{ print $2 }') NODES=${NODES//\"/} echo $NODES | read primary takeover } PREFIX_LEN=$(cl_harvestIP_scripts -u $SERVICE_LABEL | tail -1 | cut -d ":" -f 13) echo $primary:$takeover:$PROCESS_ENGINE_USER_NAME:$PROCESS_ENGINE_CONFIG_VG:$SERVICE_LABEL:$PREFIX_LEN exit 0 } # Des k궟$o/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_process_engine_monitor#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_process_engine_monitor.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)88 1.3 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_process_engine_monitor.sh, hacmp, 61haes_r720, 1539B_hacmp720 9/11/15 15:16:42 #----------------------------------------------------------------------------- # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # usage() { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u KLIB_SA_logmsg WARN 4 1 filenetsa.cat "Usage:\ncl_filenet_process_engine_monitor [-D | -v] -u PROCESS_ENGINE_USER_NAME\n" exit 1 } #---------------------------------------------------------------------------- # # Name: doCMon # # Description: # Verify process engine is healthy # # Arguments: none # # Global Variables: # PE_USER_NAME # # Returns: # 0 on SUCCESS # 1 on FAILURE # doCMon() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=doCMon set -x fi KLIB_SA_logmsg INFO 6 2 filenetsa.cat "Process Engine Health check initiated\n" echo | /usr/bin/su - $PE_USER_NAME -c "LC_ALL=C initfnsw -y status | grep -i \"software started\"" >> $LOG_FILE 2>&1 (( $? == 0 )) && { KLIB_SA_logmsg INFO 4 2 filenetsa.cat "Process Engine is active\n" return 0 } KLIB_SA_logmsg INFO 4 3 filenetsa.cat "Process Engine is not active\n" return 1 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=${0##*/} PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm # # Process Engine path is set to PATH variable # PE_BIN_PATH=$(lslpp -cw '*/bin/initfnsw' | tail -1 | cut -d ':' -f 1) PE_BIN_PATH=${PE_BIN_PATH%initfnsw} PATH=$PATH:$PE_BIN_PATH export PATH FPATH # Load the common variables . /usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" # We need to set this so that we can gather enough details in # /var/hacmp/log/clappmond..monitor.log for debugging. export VERBOSE_LOGGING=${VERBOSE_LOGGING:-"high"} eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.3' fi DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} PE_USER_NAME="" BASENAME=${0##*/} while getopts vDu: option do case $option in u) # Process Engine User name PE_USER_NAME=$OPTARG ;; D) # Verbose on + Debug on VERBOSE=1 DEBUG=1 shift ;; v) # Verbose on VERBOSE=1 shift ;; *) # Usage usage esac done echo "######################################################" >> $LOG_FILE dspmsg -s 4 filenetsa.cat 3 "# PROCESS ENGINE MONITOR LOG" >> $LOG_FILE echo "######################################################" >> $LOG_FILE if [[ "$PE_USER_NAME" == "" ]]; then KLIB_SA_logmsg ERROR 2 6 filenetsa.cat "Process Engine user is missing\n" usage fi doCMon # We will error out if doCMon() returns non-zero. exit $? @@ k2N$o/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_process_engine_startr#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_process_engine_start.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)26 1.2 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_process_engine_start.sh, hacmp, 61haes_r720, 1539B_hacmp720 9/11/15 15:21:55 . /usr/es/lib/ksh93/func_include ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ usage() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_SA_logmsg WARN 2 1 filenetsa.cat "Usage:\ncl_filenet_process_engine_start [-D | -v] PROCESS_ENGINE_USER\n" exit 1 } ############################################################################### # # Name: isRunning # # Check to see if the process engine is running # # Arguments: none # # Returns: # 0 on RUNNING # 1 on NOT RUNNING # ################################################################################ isRunning() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x if echo | /usr/bin/su - $PE_USER_NAME -c "LC_ALL=C initfnsw -y status" | grep -i "software started" >> $LOG_FILE 2>&1 then KLIB_SA_logmsg INFO 4 2 filenetsa.cat "Process Engine is active\n" return 0 fi KLIB_SA_logmsg WARN 4 3 filenetsa.cat "Process Engine is not active\n" return 1 # Process engine not running } ############################################################################### # # Name: doStart # # Becomes the DB2 INSTANCE_OWNER and starts the instance. # # Arguments: none # # Returns: # 0 on SUCCESS # 1 on FAILURE # ################################################################################ doStart() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x echo | /usr/bin/su - $PE_USER_NAME -c "initfnsw -y start" >> $LOG_FILE 2>&1 sleep 10 if echo | /usr/bin/su - $PE_USER_NAME -c "LC_ALL=C initfnsw -y status" | grep -i "software started" >> $LOG_FILE 2>&1 then KLIB_SA_logmsg INFO 4 4 filenetsa.cat "Process Engine has been started\n" return 0 fi KLIB_SA_logmsg ERROR 4 5 filenetsa.cat "Process Engine unable to start\n" return 1 } ############################################################################### # Main program procedure. ############################################################################### . /usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_common_variables PROGNAME=${0##*/} PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/db2:$FPATH_BASE/aix:$FPATH_BASE/aix/odm # # Process engine path is set to PATH variable # PE_BIN_PATH=$(lslpp -cw '*/bin/initfnsw' | tail -1 | cut -d ':' -f 1) PE_BIN_PATH=${PE_BIN_PATH%initfnsw} PATH=$PATH:$PE_BIN_PATH export PATH FPATH LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" [[ $VERBOSE_LOGGING == "high" ]] && set -x DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} PE_USER_NAME="" NUM_ARGS=$# (( $NUM_ARGS == 0 )) && usage set -- $(getopt Dv $* 2> /dev/null) (( $? != 0 )) && { usage } while [[ $1 != -- ]] do case $1 in -D) # Verbose on + Debug on VERBOSE=1 DEBUG=1 shift ;; -v) # Verbose on VERBOSE=1 shift ;; *) usage ;; esac done shift # get rid of the trailing -- PE_USER_NAME=$1 echo "######################################################" >> $LOG_FILE dspmsg -s 2 filenetsa.cat 8 "# PROCESS ENGINE START LOG" >> $LOG_FILE echo "######################################################" >> $LOG_FILE [[ -z "$PE_USER_NAME" ]] && { KLIB_SA_logmsg WARN 2 6 filenetsa.cat "Process Engine user is missing\n" usage } isRunning if (( $? == 1 )); then KLIB_SA_logmsg INFO 2 7 filenetsa.cat "Starting Process Engine\n" doStart exit $? fi exit $? d b k$o/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_process_engine_stopr#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_process_engine_stop.sh 1.1.1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)60 1.1.1.1 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_process_engine_stop.sh, hacmp, 61haes_r720, 1539B_hacmp720 9/11/15 15:32:05 ############################################################################### # # Name: cl_filenet_process_engine_stop # # Command used as the PowerHA Application Server "Stop Script" for FileNet # Process Engine. # # Syntax: # cl_filenet_process_engine_stop [-D | -v] PROCESS_ENGINE_USER # # Arguments: # -D Turn on debug mode. # -v Turn on verbose mode. # PROCESS_ENGINE_USER Process Engine User # # Returns: # 0 on SUCCESS # 1 on FAILURE # ############################################################################### . /usr/es/lib/ksh93/func_include ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ usage() { [[ $VERBOSE_LOGGING == "high" ]] && set -x KLIB_SA_logmsg WARN 3 1 filenetsa.cat "Usage:\ncl_filenet_process_engine_stop [-D | -v] PROCESS_ENGINE_USER.\n" exit 1 } ############################################################################### # # Name: isRunning # # Check to see if Process Engine is running or not. # # Arguments: none # # Returns: # 0 on RUNNING # 1 on NOT RUNNING # ################################################################################ isRunning() { [[ $VERBOSE_LOGGING == "high" ]] && set -x if echo | /usr/bin/su - $PE_USER_NAME -c "LC_ALL=C initfnsw -y status" | grep -i "software started" >> $LOG_FILE 2>&1 then KLIB_SA_logmsg INFO 4 2 filenetsa.cat "Process Engine is active\n" return 0 fi KLIB_SA_logmsg INFO 4 3 filenetsa.cat "Process Engine is not active\n" return 1 # instance not running } ############################################################################### # # Name: doStop # # Becomes the PE USER OWNER and stops the process engine # # Arguments: none # # Returns: # 0 on SUCCESS # 1 on FAILURE # ################################################################################ doStop() { [[ $VERBOSE_LOGGING == "high" ]] && set -x echo | /usr/bin/su - $PE_USER_NAME -c "initfnsw -y stop" >> $LOG_FILE 2>&1 echo | /usr/bin/su - $PE_USER_NAME -c "LC_ALL=C killfnsw -DAyS" | grep -i error >> $LOG_FILE 2>&1 RC=$? echo | /usr/bin/su - $PE_USER_NAME -c "killfnsw -r" >> $LOG_FILE 2>&1 (( $RC == 0 )) && { KLIB_SA_logmsg INFO 5 3 filenetsa.cat "Process Engine has not been stopped\n" return 1 } KLIB_SA_logmsg INFO 5 2 filenetsa.cat "Process Engine has been stopped\n" return 0 } ############################################################################### # Main program procedure. ############################################################################### # Load the common variables . /usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_common_variables PROGNAME=${0##*/} PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm # # Process Engine path is set to PATH variable # PE_BIN_PATH=$(lslpp -cw '*/bin/initfnsw' | tail -1 | cut -d ':' -f 1) PE_BIN_PATH=${PE_BIN_PATH%initfnsw} PATH=$PATH:$PE_BIN_PATH export PATH FPATH LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" if [[ $VERBOSE_LOGGING == "high" ]] then set -x version='1.1.1.1 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_process_engine_stop.sh 1$' fi DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} PE_USER_NAME="" NUM_ARGS=$# (( $NUM_ARGS == 0 )) && usage set -- $(getopt Dv $* 2> /dev/null) (( $? != 0 )) && { usage } while [[ $1 != -- ]] do case $1 in -D) # Verbose on + Debug on VERBOSE=1 DEBUG=1 shift ;; -v) # Verbose on VERBOSE=1 shift ;; *) usage ;; esac done shift # get rid of the trailing -- PE_USER_NAME=$1 echo "######################################################" >> $LOG_FILE dspmsg -s 3 filenetsa.cat 5 "# PROCESS ENGINE STOP LOG" >> $LOG_FILE echo "######################################################" >> $LOG_FILE [[ -z "$PE_USER_NAME" ]] && { KLIB_SA_logmsg ERROR 2 6 filenetsa.cat "Process Engine user is missing\n" usage } isRunning if (( $? == 0 )); then KLIB_SA_logmsg INFO 3 4 filenetsa.cat "Stopping Process Engine\n" doStop exit $? fi exit $? ####### l\$o#/םa֝a֝a&ڊ2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_was_AE_CE_importopr   # AES_e"$CILMNOPRTadilnorst-=DGcfghmpu()/01BFHUVW[\]vy} &'.:;Ybwx{!%,2>?Kkq|369Xz+4578`*@Z^j,΅l, xph HQhz{ev˾Ud41uuwYp+/t@ y!`/W˼[[ "wo.I_ xadZ&Zu~ޤeCFJqOAA/z oU߫G\-W_% ^rjU7z6r2Ewqx^/iNj]ڼ~`ጄzȔڮs_S<9,  F* ECl(AAB^yз̶E?WB\,-U9ȵBLVHʇJ,㯂(e"T @ҋ: ,0X .Z&Zu~ޤeCFJqw |r +u{|vF<$2.7(dNEMvw'Pts"W~ԫ2LC櫉2*tb7 ,Ӄj+:n; z ]L[a[&kDTݫtrn\eur.wƻN6O=kIƚpdyл]dtU]ıf"ދ%4ez ~^pjȻU߫6JuLJ\K8[}MpW.Y߫m2oqۨ?zFm.@]L[ݩWl R(deuruB|- I_=wPQujH)9*%%A8Ҙ].VڎUwFq[WawFq{]dOSlVZ&Zu~ޤeCFJq_1QIQ)* ƑΫM$ZRbv8qd$Ʒή6${vsK8[:.*ج.ȵBLVHʇJ,WƿGR * ƑΫM$ZKj:UI+o\mI*5ut]5=AVawEeW]FT:Tdg5 NJIPN4 WEK*ج.ȵBLVHʇJ,]ƿbRT#VIrƥ2*Rq⭊T$UnԌtR:5k$z((iK ]ǭL nr$jл ep˶E\m\.OLz4'WhIл<: 밻 @N4bU1@.|`hV )è!RJqoKл<:9(N߭\aw xu'.+Wawׅ.\/Ir\apGYm.NZB JpB|]&\[}_ujw[xÕ{mjw[E\o.a_?3 TA2Hم&PX[74!4!ŊOeW\Ew'PXdZ&Zu~ޤeCFJq_" ,䨔Npgo⭊Ɣ|]IrƖu0W: 0Uk$jzb-P-U@zR2ң%K8䨔HU\qbuLJTbӳ*YڎUwFq[WawFq{]dOSlVEeW]FT:Tdg5=bHIPN4uZi%[QJN1\k|l.N1Ws쑩 +" 2[#**2Tw Ye'%D'S}ӫu%lVEeW]FT:Tdg5iK5,N)WjWlVEeW]FT:Tdg5=bHIPN4uZi%lC_`3Bp%aw^pj.aw4V!Sv8]5{$㸝A)Wk̪yv8bņt^B|}p.f~q6Ipeշa|/ ӀėuU\.W˺_f|N:S/7q>'"p"}K0V8]5{ₙIP* @pŒ(f,-eC82d()QD:+TJ(*?ݫo &a UJtzB!BE"Iv?-W]dY,8!/|wj#\- Ͻۏ/n$-)VjUz zitATTa&$= %%ri-$ zR3#e4U:T b*4$N0T_ƁVM%ԒDJTVSLESB "hqf3Ȩ+Waw YM1N*)"ҡSP,,TCPS VSLESB "a)"ҡSPq$Zq4 mrzJKR2Ңb**U1 `4.Ec0qNEGZ Tue4U:T b*4"JLE@SaP ?aALNMJI-CǙzJKR*(EcJHHX[0?ՔTP8В-8Ruf6Z yXҤ zRb**U1 `4.Ec0qNEGZ TitATThEYM1N*abₘjb**U1 Ņ@#YM1N* "ӌ'WfckВRZTPf+u/\k"r*< ] )"ҡSPqe4U:T b*3ʇHpl?a3jb**U11a`fJ,Ux׳OEDZ̄hg8 ^J F\.[aʽB xNE@PfCYM1N* <:9(N߭\s EMn6-翕.Z$-lVIkR =bv,umPffJLEC!_.xl?3R =ةjVȌ$RR0}uݮM['J/PT?Ev/ԫ)]R6ev\epv6*ZVȌu2`_)RPh]WRmDcTUTPlT\-5@ 6"ӥI[O5YM1N*d 3 opa^'{4TMUNKfs[ aUTXݩWl^pkuUTPu¸NE@Pff)"ҡSR0XHNleCA@nZtˮX5|بM*%eԌtJLEHէIb*&Z3;0<$TQΊǦ$ґ3|[*-_6*(EcJEqQD:+TDJTVSLESB "?Շ*-_6*(EcJEg&IjI"*+)"ҡSR䙇&aIy*D 8At]5\Vwwwwwwwwwwwwwwwwwwwwwwpd()9*$yҡQI !K;}ŅfJȻU߮AjRXM5@ s@b bƽz*&Fd'%D9譆fg%UMP^l2<\v=@PfCZ]qVzF TJ(*]В-ˮX5|بM*%e*&Z Ek4$@az0-_6*(EcJEb9)9*%%hQT?.Y$Z ч\ljQD:+TJ(=) C꿀 $ʇK; ‚*? 8<$eCEe4U:T b*C=XK4Q4gH*&$"qX##%8YwWi @z=QKA8?MUz6kI+SIj Dv|蔖MP(v+EYRTVSLES1x|fM$rԜgP|VCXHNh((Rx5Q5V3!9-''El ̒/]\ dyA VSLESB "(U3UTPjw[aICs쑮z D퓫?% fJtzB!BE"tqalRawagO92N3 94TM)$#1óYIQ)*f,, )VŊOi訚Q fdOAx]IsÑ|:/Wwq枔֊Q$ʉEoR*aG*t0*ٙ5I1QFYG*t3OJkE(cD L8TJ($㸫bN)WkV:H i8sD5$csw5/Whj 3530ҚA $Q(#3 :H farVTI130ת]kvu6䙇7XfZp^1DTyz밻mF2N;WE#]jZtˮX5|بM*%eJtzB!B,1P~!QVշ8]dvUivyuƯ@DQ#ΕRD:H0Ќ䨑JD"$L$'aPP3|[*kI*'5_xBM-qN;j7zSZ(!D*%eqUX~'PtΫMft:H!Dm'hgD*%dsw5/Whj 3530ҚA $Q(#3 tBEhgD*%dfaUzF+S!_.xl?3n$!_.xd 3Bp%R B'"yи^J/Wb97j#WN;bvʮ^ya!|XaZwHT.aR B'"yоeշa|/ ӀėuU\.W˺_f|N:S/7q>'"p*D"r*+W.aALDrsL f8vaFI3꿍CK]*@moyµ|-.X[e{%K86?]W]{|]/B}v}}i\R/UTCTRyM ewmP|`^b**U1 zW뵚E0]yuƯ@De4U:T b*@_xKƀ|e4U:T b*bndj(' 2gD*%d8Ћ-푨gD*%d,3L<%De]5QTBTJ(XfHzNk4"o>dj)$-A氰!59SXqZ=w*ɩ3=EEy>c!iLOQaj`W2ix5Q5V3!9-''Elf`^"]2v͂_./]8UejMwXexim\]8'PtΫMfN [34"t@f䙇&aI|Xc]oRNEGZ rN;R4eXc1Uhgj?]3EDҒKPivyuƯlTQΊǦ231UhgjojRXM5@ s@b bƽz*&Fd'%D9譆fg%UMP^l2<\v=@PfCZ]]rűĒhg8C3$ e OCEM{@qS^s|q/B}v}}1肅[30B'"'%D234"!RRVE ھ]f"0]ƽhNEJNJIZ%df+B"qIYZ*3=EbtV=4Q?0Јg8aǥA2lMI-@D?%8; ‚*?xW^=Uj#2٢qtV 3$ evdKi+ˍw4B'"'%D2 fhNEJNJIZ%ejw[aIBW~+ıf"ދB'"M#MZ%d8А)è!R]]ѵ0ЌTQΊǦ23`>e /陂9 /际\mtivyuƯ@DE4Y5hQ DT)zɫDL$'aPP3|[*^%4e\mw4B'"M#MZ%d lE4Y5hQ?ݫo &as]^pkuJLEAƄHA'V֍VbtV=4Qɘ ̣ȨM 30,`T?xW^=Uj#2٢qtV@30jOȩW.ple4U:T b*[35YM1N*!DÌ2ₙ*&Z3;0<$ɤZHHX[0?1*֊QH! `Fԉ1B˾S!D٧J5R+fzSZ(!A"20"0-_6*(EcJEg&IjI"*+)"ҡSPqUTP2d?%8; ‚*?xW^94NKfs[`32J=vZ0d4Tװ57WȨ+Waw(U3TPfhEYM1N*0vu6䙇?3 94TM)$f8v`yI)-HM*I"#1al0ƷPPBEa X[0?O](.N] |͌zSZ(!E"a5!3!3ivyuƯ@DM*I"*+)"ҡSPqUTP2d?%8; ‚*?xW^94NKfs[`32J=vZ0d4Tװ57WȨ+Waw(U3TPfhEYM1N*0vu6䙇?E` VSLESB "׳&ێkyPnlri1)$ ƧCQ N4; 4Q4<~4 ͊ yXҢQFPd 3 opa^'{4TMUNKfs[ UTXȻUexNEMZwH f)"ҡSP*ٙitATT|$!()o0"@f,-FRPEcТjm0hb2 |4PBD'$B5!()c1al0<:+>kPl@.iĈQa5!3!3ivvcIJLEC9Q#ΕtaG*t3 yXҘ ȩIQ)+Da$(ʄLEA$B5TUI%zVD)訚zpДZHpi8I X'91)* 2XA1%uv@>tzjʇ $OT@DZ)fE1yJ`٭$GiΉIa4bU-%Ee4U:S>`P'jkPJG-IQ#Δb94QHDH uh?%8; ‚*?xW^=Uj#2٢qtVp*jje0OȩW.ple4U:T b*[35YM1N*vu6䙄?aw2*s*Y6Ie]\nwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwK4Q4XYe'%D3|[*TJ(ˇ|$?3K4Q4X̊NJIS04 4Q4X1J$$3|[_-Q U꿽WE\aIb*&ZTّQIQ)*f,-7U0Z:eU,YH.7ή!V?-Qf+V]!ICUzF+]D:NJIZ%d rTJ($㸫bN)WkV:H i8sD5$csw5/WhkJ^g%D:T=J! 2*`(U3 |`L4PB&>TJ(NhL|5/WhjfaG*t2Z=)I24N3i0Ҡ "E2M/WsOJkE($By5R+fa*%e' 2cD^vVG*t3ب[ejBs@aAX3|[*M-qN;j7zSZ(!D*%eqUX~'PtΫMf$brVTI1z]mrjiMhL|Q$309MA +*$kt^ѵW˺L?3B+밻\*URm9¥\mڼwHK pv7UbƽriAUTX˖awl!QVﯦ=PfCھ]f3 94TM)$#1óYIQ)*f,, )Vz1RZ Vշ-R,d)W.(^pj?$ALNMJI-EHpȨ䨔3opv)\_]_EjoI2G}NXL]\o]N1]ڼwHT? 8]t^Zd()iɢiI%5I=bHIS1a`fJa]Vjd$wxJ^%4ezݫt^C,0=j#WIK pv7UbƽriAUTX˖awl!QVﯸS!_.xl?3?ϮilT[bfkuǞrŚd}[&u!V6[òN;XL]\odn!8E߫ol-T?θF=ղl]R4?d9z{]닮K*ʇJhI`:3\GԌtJLEC1u/\k3Ȩ+Waw eCEH4#PQRabPSc***C#̄hg8C3$ e OCEM{@qS^s|q/B}v}}1肅[31洒sXJ hW˺Lvu2. \A|X` qj#WpM5{v.Xs]W"R7V{ Ye9zbvKi+ˍut^8B{-5c}"r*< ]Ǣ \/o R6^pj/trm{n7X_ 49v%epsUx .1 o(\.*n FaPS0)*D @Qe Ņ@#zBa\ljE`A,R׉b2Ewqut^_)V`kkƓWIrW^iڮE2Lc.w,>D8·I(QhgD*%e C0t^4%vEh쵍{94!@Ж4hyI)-CHʈ!CH<F8QB1B&y(5I`nMږ%D2 HNh(+0?xW^F) A琤hg8pJ_)dPȸ&Iuwq-Tɷ]|]vcȡe,Yj(U! l?a'rTJJ(!ƄԉG3^wr%ư`1pu1Fb @EiZ.-c^Ƅ3NM P<%+zJKPR21HF(P<&p5bPɤy , RXvd$ HNh(+0?xW^F) A琤hg8pJ_)dPȸ&Iuwq-Tɷ]|]vcȡe,Yj(U!P/ᰇ?:Un1QƄԉG3K:Un1\ ȗƒ¡I82wm+:W2Y] .-25x,M[\@kn1\pβUwF(یW#Nm7XplcaPVabƽR94!Il8q:+`1GY*N1\{ei6[)\E~[34]ъ6B f*z1T8βUwF(یV/WhیUƄu"ȴ}cB&y(zƕ= %%tQ#(riB8BHj1HF(P<, ɻRˁup^x*/WhیUƄԉG3_\ p^ѷ.5$C/WhیUƄԉG3_\ p^ѷﻂ@`N !P$vN;یWe]n1WÐ$Cv[]B[[ "wee_fikaÐm+n1\X[0?417XirxfF.!3n$'4c; ‚@#x5bPɤy NKfs[,ۮ-\ wm+u¸ n?,lR] fkup^ѷ?#H|U5/WhیUCe4%vEh쵍{94!@Ж4hyI)-CHʈ!CH<F8QB1B&y(5I`nMږU0Е2 HNh(+0?xW^F) A琤hg8pJ_)dPȸ&Iuwq-Tɷ]|]vcȡe,Yj(U! l?aQBjDp-Wr%ư`1pChJR( 8O.*wk4!riB,i\ВRZJB1B&y)3$qbM Q`jܛ-֊QH 'aPVabƽR94!Il8q:+a:9SȡqL.y&Z+ov2C$U.XLՀPfCAPBEaƄԉG3K.L ȗƒ¡)é5a 8b|zSZ(!A"5R+fzSZ(!A"BD(8А)é5 e7 =)K.4%vEh쵍{94!@Ж4hyI)-CHʈ!CH<F8QB1B&y(5I`nMږR,0^z;F+P8; ‚@#x5bPɤy NKfs[ QTeE dwW}2A\xi0 &ZrŚf[2B fHzNk4&J9ea ȗƒ¡9*$yҡQIƄd=% ?۫Wx hJR( 8O.*wk4!riB,i\ВRZJB1B&y)3$qbM Q`jܛ-I2*Uw8; ‚@#x5bPɤy NKfs[ QTeE dwW}2A\xi0 &ZrŚf[2B fG*t< 8К(ku|x.5$BZp^1\&Z?+%'4|ΠyJ8Ж~ X F0@ f`T!R%̳0 >gP<%(ee x{trL\:WW~n7>+H3D9ƃϙ= CJ9x4[]J\m-򌽒eFhg8y:(ԉG3,3D9ƃϙ= @DzEgP<%(c_6*(EcJEFhg8y:(ԉG3 yXҢQFCqQS0 >gP<%(`qQ(!a¦tBE fqAR%|PN3I2*a8Ή&>TJ(dT0 >gP<%(`q'%D2*a8ΓRVE fqAR%|PN3$,8TȨM*NJIQS #4N3h<@Д!,PS5^#G W;1ebrǦ 3opf (=$Q(!a¦QSъёS #4N3h<@Д?ՇHs0UCҚA $Q(!a¦QSъёS #4N3h<@Д?3ԉG3_QTBTJ(XpTU0Е203D9ƃϙ= B3Xe4|`qóV)N',zi 1a`fJ(`*yJEaa¦,넙j,EL38quBPf (zSZ(!E"S ֊QH 2*afs3zHs0UA)+3HXpDM!S #4N3h<@Д?D tFHIZRXpFhg8y:(C=XԉG3_=)X@XpOJkE(V03D9ƃϙ= CJ9*MhLXpҚA 03D9ƃϙ= CJ9* ($x0Ј ($xfqAR%|RIQ3Z aa¦̄訚Qg8A4d8:W2Y] ypz8q:Ea'4M&@N3i0ҠaqAѐ[[2qAhg8KE"X=wL2 zJKPR21HF(P<&p˼]^ xadZ.t-2[d\l$ȵBLV uڡ$0PA "tV=4Q /!WW]eշA[74$_pAm HD,-@Y Y/ @hP3|[<-Wͼb͇!Ewhi-bE&1); then while [ $# != 0 ]; do case "$1" in -i) NODES=$2 shift ;; -d) # lists only Websphere Application Server node managed by HACMP TYPE="DEPLOYMENT_MANAGER" ;; -n) # lists only Websphere Application Server node not managed by HACMP TYPE="APPLICATION_SERVER" ;; -C) # component id COMP_ID=$2 shift ;; --) shift break ;; esac shift done fi if [[ -z $TYPE ]] ; then exit 0 fi header="TRUE" # Check that the WebSphere Smart Assist etc directory exists. if [[ ! -d "$WASSA_ETC_PATH" ]] ; then mkdir -p "$WASSA_ETC_PATH" fi # Remove old discovery file rm -f $WASSA_DISC_FILE DATE=$(date +"%m/%d/%y %H:%M:%S") echo "#" >> $WASSA_DISC_FILE echo "# This ksh93 source file was generated on $DATE" >> $WASSA_DISC_FILE echo "# Do NOT alter the content of this file" >> $WASSA_DISC_FILE echo "#" >> $WASSA_DISC_FILE echo "" >> $WASSA_DISC_FILE # display only components not managed by HACMP if [[ -n $NODES ]]; then NODES=$(echo "$NODES" | tr ',' ' ') for node in $NODES ; do cl_rsh $node $WASSA_SBIN_DIR/cl_wasdiscserver -q 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids profile_count profile_name profile_path ismanaged wascell wasnode servername typename endpoint_host # Make sure values were returned. Sometimes with bad installs, these values can be missing. if [[ -z $version || -z $profile_count || -z $profile_name || -z $profile_path || -z $typename ]] ; then continue fi # Check for version if (( $version < $WAS_MIN_VERSION || $version > $WAS_MAX_VERSION )) ; then continue fi # Check for multiple profiles if (( $profile_count > 1 )); then continue fi # Check for volume groups if [[ -z $install_vgs ]] ; then continue fi KLIB_HACMP_are_pvids_shared $install_pvids if (( $? != 0 )); then continue fi if [[ $TYPE == "APPLICATION_SERVER" ]] ; then # Check for federated if (( $ismanaged != 0 )); then continue fi # Check for APPLICATION_SERVER if [[ $typename != "APPLICATION_SERVER" ]] ; then continue fi APPLICATION_NAME=$(clodmget -q "name=WAS_CELL_NAME \ and value=$wascell" -f application_id -d "=" HACMPsa_metadata) APPLICATION_NAME=${APPLICATION_NAME//\"/} CONFIG_COMP_ID="" [[ -n "$APPLICATION_NAME" ]] && { # Look for already configured instances CONFIG_COMP_ID=$(clodmget -q \ "application_id=$APPLICATION_NAME and name=COMPONENT_ID" -f value -d "=" HACMPsa_metadata) CONFIG_COMP_ID=${CONFIG_COMP_ID//\"/} } [[ -z "$APPLICATION_NAME" ]] && { APPLICATION_NAME="WAS_NODE_${wascell}_${wasnode}" } [[ -n "$CONFIG_COMP_ID" ]] && { if [[ $CONFIG_COMP_ID == $COMP_ID ]]; then continue; else # # Check whether the WAS (app server) has been configured # using WAS smart assist. # RG entry would be added to HACMPsa_metadata with # "name = RESOURCE_GROUP" # RG=$(clodmget -q "application_id=$APPLICATION_NAME \ and name=RESOURCE_GROUP" -f value -d "=" HACMPsa_metadata) RG=${RG//\"/} [[ -n "$RG" ]] && { continue } # # Check whether the existing RG have resources for both # application engine and content engine # If it has then RG entry would be added to HACMPsa_metadata with # "name = FILENET_AE_CE_RESOURCE_GROUP" # RG=$(clodmget -q "application_id=$APPLICATION_NAME \ and name=FILENET_AE_CE_RESOURCE_GROUP" -f value -d "=" HACMPsa_metadata) RG=${RG//\"/} [[ -z "$RG" ]] && { configure_CE_AE_resources $CONFIG_COMP_ID } continue fi } if [[ "$header" == "TRUE" ]]; then printf "#Cell Node\n" printf "#---------------------------------------------------------------------\n" #printf " 1 2 3 4 5 6 7\n" #printf "1234567890123456789012345678901234567890123456789012345678901234567890\n" header="FALSE" fi printf "%-38s %s\n" ${wascell} ${wasnode} fi if [[ $TYPE == "DEPLOYMENT_MANAGER" ]] ; then # Check for DEPLOYMENT_MANAGER if [[ $typename != "DEPLOYMENT_MANAGER" ]] ; then continue fi APPLICATION_NAME="WAS_DM_${wascell}" # Look for already configured instances clquerysaapp -a $APPLICATION_NAME INSTALL_NODE_NAME > /dev/null 2>&1 if (( $? == 0 )) ; then continue; fi if [[ "$header" == "TRUE" ]]; then printf "#Cell Server Name\n" printf "#---------------------------------------------------------------------\n" #printf " 1 2 3 4 5 6 7\n" #printf "1234567890123456789012345678901234567890123456789012345678901234567890\n" header="FALSE" fi printf "%-38s %s\n" ${wascell} ${servername} fi echo "unset $APPLICATION_NAME" >> $WASSA_DISC_FILE echo "typeset -A $APPLICATION_NAME" >> $WASSA_DISC_FILE echo "$APPLICATION_NAME=( \\" >> $WASSA_DISC_FILE echo "\t[WAS_CELL_NAME]=\"${wascell}\"" >> $WASSA_DISC_FILE echo "\t[WAS_NODE_NAME]=\"${wasnode}\"" >> $WASSA_DISC_FILE echo "\t[WAS_SERVER_NAME]=\"${servername}\"" >> $WASSA_DISC_FILE echo "\t[WAS_TYPE]=\"${TYPE}\"" >> $WASSA_DISC_FILE echo "\t[INSTALL_NODE_NAME]=\"${node}\"" >> $WASSA_DISC_FILE echo "\t[PROFILE_NAME]=\"${profile_name}\"" >> $WASSA_DISC_FILE echo "\t[INSTALL_PATH]=\"${install_path}\"" >> $WASSA_DISC_FILE echo "\t[INSTALL_VGS]=\"${install_vgs}\"" >> $WASSA_DISC_FILE echo "\t[VG_PVIDS]=\"${install_pvids}\"" >> $WASSA_DISC_FILE echo "\t[ENDPOINT_HOST]=\"${endpoint_host}\"" >> $WASSA_DISC_FILE echo "\t[VERSION]=\"${version}\"" >> $WASSA_DISC_FILE echo ")" >> $WASSA_DISC_FILE echo "" >> $WASSA_DISC_FILE done done echo "" >> $WASSA_DISC_FILE exit 0 else dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 20 "ERROR: There is no %1\$s information in the discovery file.\n" "WebSphere Application Server" exit 1 fi "$AP k$o/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_manual_configr#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_manual_config.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)14 1.1 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_manual_config.sh, hacmp, 61haes_r714 11/28/11 15:19:40 ############################################################################### # # Name: cl_filenet_manual_config # # FileNet smart assist manual configuration with input XML file # populated with required information to configure. # # Syntax: # cl_filenet_manual_config -f # # Arguments: # -f Input XML file # # Return: # N/A # ############################################################################### function usage { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_SA_logmsg WARN 9 1 filenetsa.cat "Usage: \ cl_filenet_manual_config -f \n" exit 1 } typeset CONFIG_FILE="" KLIB_OUTPUT_CONSOLE=true KLIB_HACMPLOG_ENTRY=filenetsa.log FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/sa NUM_ARGS=$# (( $NUM_ARGS == 0 )) && usage while getopts f: option do case $option in f) # Input xml file for manual configuration CONFIG_FILE=$OPTARG ;; *) usage esac done [[ -z "$CONFIG_FILE" ]] && usage FILENET_SA_SBIN_DIR="/usr/es/sbin/cluster/sa/filenet/sbin" # # Configuration of DB for Content Engine # $FILENET_SA_SBIN_DIR/cl_db_ce_pe_preimport -c "Content_Engine_db2_database" -f $CONFIG_FILE # # Configuration of DB for Process Engine # $FILENET_SA_SBIN_DIR/cl_db_ce_pe_preimport -c "Process_Engine_db2_database" -f $CONFIG_FILE # # Configuration of Process Engine # $FILENET_SA_SBIN_DIR/cl_filenet_pe_import -f $CONFIG_FILE # # Configuration of Application Engine # $FILENET_SA_SBIN_DIR/cl_was_AE_CE_import -C "FILENET_APPLICATION_ENGINE" -f $CONFIG_FILE # # Configuration of Content Engine # $FILENET_SA_SBIN_DIR/cl_was_AE_CE_import -C "FILENET_CONTENT_ENGINE" -f $CONFIG_FILE  kB$o*/םa֝a֝a&*2vT./usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_pe_etc_rc_dt_collector#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_pe_etc_rc_dt_collector.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)09 1.1 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_pe_etc_rc_dt_collector.sh, hacmp, 61haes_r714 11/28/11 15:05:11 ############################################################################ # # Name: cl_filenet_pe_etc_rc_dt_collector # # Description: 1. This script is used to have following entries # at the beginning of file /etc/rc.dt # # /usr/sbin/no -o tcp_sendspace=16384 # /usr/sbin/no -o tcp_recvspace=16384 # /usr/sbin/no -o tcp_keepidle=80 # /usr/sbin/no -o tcp_keepintvl=20 # /usr/sbin/no -o tcp_ephemeral_high=65535 # /usr/sbin/no -o tcp_ephemeral_low=42767 # /usr/sbin/no -o udp_ephemeral_high=65535 # /usr/sbin/no -o udp_ephemeral_low=42767 # # Any missing entries will be automatically # updated. If /etc/rc.dt file doesn't exist # file will be created after updating above # entries. # # 2. Below mentioned commands would be excuted # # /usr/sbin/no -p -o tcp_sendspace=16384 # /usr/sbin/no -p -o tcp_recvspace=16384 # /usr/sbin/no -p -o tcp_keepidle=80 # /usr/sbin/no -p -o tcp_keepintvl=20 # /usr/sbin/no -p -o tcp_ephemeral_high=65535 # /usr/sbin/no -p -o tcp_ephemeral_low=42767 # /usr/sbin/no -p -o udp_ephemeral_high=65535 # /usr/sbin/no -p -o udp_ephemeral_low=42767 # # With the execution of above commands, entries will # be made under "no" section in "/etc/tunables/nextboot" # # At first availablity of entries would be verified using # "no" command, any missing entries will be updated # after executing above respective command. # # Arguments: n/a # # Returns: n/a # ############################################################################ # # Required entries in /etc/rc.dt file # # # Checking /etc/rc.dt file exists or not # typeset TOTAL_COUNT=8 typeset INDEX_LIST="tcp_sendspace tcp_recvspace tcp_keepidle tcp_keepintvl \ tcp_ephemeral_high tcp_ephemeral_low udp_ephemeral_high udp_ephemeral_low" typeset -A VALS VALS=( \ [tcp_sendspace]="/usr/sbin/no -o tcp_sendspace=16384" [tcp_recvspace]="/usr/sbin/no -o tcp_recvspace=16384" [tcp_keepidle]="/usr/sbin/no -o tcp_keepidle=80" [tcp_keepintvl]="/usr/sbin/no -o tcp_keepintvl=20" [tcp_ephemeral_high]="/usr/sbin/no -o tcp_ephemeral_high=65535" [tcp_ephemeral_low]="/usr/sbin/no -o tcp_ephemeral_low=42767" [udp_ephemeral_high]="/usr/sbin/no -o udp_ephemeral_high=65535" [udp_ephemeral_low]="/usr/sbin/no -o udp_ephemeral_low=42767" ) if [[ -f /etc/rc.dt ]] then for index in $INDEX_LIST do cat /etc/rc.dt | grep -v "#" | grep -v -e "^$" | \ head -n $TOTAL_COUNT | grep -w $index > /dev/null 2>&1 (( $? != 0 )) && { line_num=$(cat -n /etc/rc.dt | grep -v "#" | head -1 | awk '{print $1}') if (( $line_num != 1 )) then # # Insertion of required entry at line number "$line_num" # in /etc/rc.dt file # echo "${line_num}i\n${VALS[$index]}\n.\nwq" | ex -s /etc/rc.dt else # # If "$line_num" is 1 then insert at first line of /etc/rc.dt # echo "1i\n${VALS[$index]}\n.\nwq" | ex -s /etc/rc.dt fi } done else # # As the configuration file /etc/rc.dt doesn't exist, we are # creating here and is required for process engine (one of the # sub-components of FileNet P8) # typeset DATE DATE=$(date +"%m/%d/%y %H:%M:%S") echo "#!/usr/bin/ksh93" > /etc/rc.dt echo "#" >> /etc/rc.dt echo "# This file was created \ by \"/usr/es/sbin/cluster/sa/filenet/sbin/cl_filenet_pe_etc_rc_dt_collector\"" >> /etc/rc.dt echo "# as part of FileNet P8 smart assist on \"$DATE\" during" >> /etc/rc.dt echo "# verification process, and is required for \ Process Engine (one of the sub-components of FileNet)" >> /etc/rc.dt echo "#" >> /etc/rc.dt echo "/usr/sbin/no -o tcp_sendspace=16384" >> /etc/rc.dt echo "/usr/sbin/no -o tcp_recvspace=16384" >> /etc/rc.dt echo "/usr/sbin/no -o tcp_keepidle=80" >> /etc/rc.dt echo "/usr/sbin/no -o tcp_keepintvl=20" >> /etc/rc.dt echo "/usr/sbin/no -o tcp_ephemeral_high=65535" >> /etc/rc.dt echo "/usr/sbin/no -o tcp_ephemeral_low=42767" >> /etc/rc.dt echo "/usr/sbin/no -o udp_ephemeral_high=65535" >> /etc/rc.dt echo "/usr/sbin/no -o udp_ephemeral_low=42767" >> /etc/rc.dt fi # # Executing below commands to have entries # under "no" section in /etc/tunables/nextboot # /usr/sbin/no -p -o tcp_sendspace=16384 > /dev/null 2>&1 /usr/sbin/no -p -o tcp_recvspace=16384 > /dev/null 2>&1 /usr/sbin/no -p -o tcp_keepidle=80 > /dev/null 2>&1 /usr/sbin/no -p -o tcp_keepintvl=20 > /dev/null 2>&1 /usr/sbin/no -p -o tcp_ephemeral_high=65535 > /dev/null 2>&1 /usr/sbin/no -p -o tcp_ephemeral_low=42767 > /dev/null 2>&1 /usr/sbin/no -p -o udp_ephemeral_high=65535 > /dev/null 2>&1 /usr/sbin/no -p -o udp_ephemeral_low=42767 > /dev/null 2>&1 p_ephe l$o@%/םa֝a֝a&3P2vT./usr/es/sbin/cluster/sa/filenet/sbin/filenet_xutilstc_@@    -e "_ainrst/ENclopu#AILOPRSTbdfgmv$',0129:=CDG\hkwxy().3BFMY|%*KV[]{}&456>HW^q7S1_+(r:EIYNtqrHr)4`jFz!=LɘVQ:t>"'I|%0H0q|%6(4y'\gRVSsD9 Z椙R3&8D;J.R798?!n6i3 XXӀ~2QMI4<U@&DDzc=cV7#7=Hof1[Z$ i"dDO(Q&=S4pMcV7Lj9s˅"o.Jn6ܖ5ct՚?R/OLƤSR7ܽ %N&5X5fޒYkNs&D2n3N=]3oMI8,o!TmcV6 8i>S%ԓAZ$ i"dDO(Q&=1k <҃fMHT888;({HNi3 _P <,C@وlyV`X0T\"NM%1.W>n[ܚm/rQDrKc*\|&ލFrKc*\yKm L9jOT\oF>r6OT\"NM&MeKϛ3w2&rMIʗ+Jm\5?|Lǘ')/N"ρȤq:s_ L04Lǘ=m'y.&ލ;#{_Q5IӽS4iܭKe\Km L9jO'\gRVS'\i,M.X6FHkiUѶ֔~ql'5"O '/oF>r6OxAKm L9jO88N_.&ލ|'q0m=d).&ލ|'q0m=d)@j>HnVQyDge_ErMI@eGHr)+)NVoI}R7<q{ㄊ@' HӢ2nI>S:#-6䚓0( Z'y7 Zf</zO7 &nܚm5'bsN"ρȤq9Y'#J 8qE 7 &nܚm5'bd,/ri$ԟ)@j|Lǘ#r|ƯSljԟ)VQ:t>"8NgRir4]G?pH!A8!`W&L@ |%6ƮMI fM'8'bsN"ρȤq:N8`ӤY9\l|/1:7 f.-f_ )ip|ӋR| ES MMZ<8N"M6rDȒSflf(Rl)2͓͓QUlUlfdJ.PhXPh)Hmf9"dIL9khpn㠙{ԋ6n7"HeALTpy$m@3w@lf(Mɛ2&rL7 &nܚm5'l͌ʃ6Jq| d⭳d⭳_'m'm`8ԋ6 n3&Dʃƀ,7 MFj|&Mћf9"dIL;`f*Of Xn>8ճc1E z @D8{6>`Vԟ)c63_))2͓͓QUlUlfdJ.PhXP`ԋ6 n3&Dʃƀ,7 MF'Mŝ+ NqR/)3lg$L#ɕl=ZTAPT6l)$鸳|N,QfSliMEٲSe'm'maJٲqVٱ (aAaA_En7"HeA_@|Ѽy,ZKHlͳq2$&T3aCɁ#OI \Mǒ8͌l)q6m;#mQ$MI3d6N*6N*1EÒd⭳c6,'QtƒBƒBؿԋ6 n3&Dʃԋ6n7Ab -+(r:EIYNtqp"ρȤJsirFڥH(gЎ @* [I""yB=1]Hmf80LD$_ ]q2$&Tym(9&dԌI?Ã8`N[pLְ5kUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUT3zp|>ɠ@DO@O@LzjW$b&|.b0y @* [DHT Ǡ~fN j㢉M\' (.y|+eKjEf>S1|1IfMcV6k0ӆ1nM zh-$P*zZzc?@x-5$̚1'pppw' Qt"3f+`@y0Y11 *"/`ϡ1.W=(  bʗ+܄ů?."1[|c|%7AVQ:t>"8NgRir4ոC{ {0u|E%e;4NJ`aNJmPi N"ρȤq:s_ L0 iAI3&g*Lpv]=nrp~Bm3f5kUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUK1X#7'dh0ypLlO& "P"&&=6b^dU 01.W=HӢ2nIeKϛ3w2&rKc*\{Q'8Aƭܒʗ++oQܒʗ+RmGwFړ51.W<Ѷ&G,51.W=HӢ2nI>S_RskLŰLɦܓR|2`W&Mkjğ$S7q+zO,E5.3͹%nKj9YD,Jw㋖ :EI V3З'W6 DHPOjs3'\gRVSsD9 ZzWn/tFyZ7ql/rܢ=M5kkHӢ2nHAbyDd>/Z7ql/ri$ 2n[܃ br$]78մے`@IoNq5pr#Y9'I,t>"K =mAf`eq6m8,\[ H07 Ѷ&G,1=*RmGwFړ<8NRmGwFڣI@RmGwFڣI _f"f7܎E#sZ 8Hpԋ:#-6䚓11HӢ2nI>Sկ?|Lǘpn2M_pf0LɦܓR| 9YD,Jw|r9{^$R8HPN_pf0LɦܓR| Mɛ2&rMI _wyJn7-'kj|%6ƮMI@eGHr)+)N.X4|E&,#E$~ N)5rjOSljԟ)@j)ip|ӋR| 9YD,Jw㋖ :EIw?3S{P`NjE8!fM'8'b{DUiũ>S8HPNZR/)3lg$L#ɕyEEe7Fm䉑$y2Aƭqd']o6䕶ğ)d]6c{tLF9Ez.ӆZR/)3lg$L#ɕl fĉ 8{6QDV͌(OEzp[M&lflf(Plf[f[f(rRlUlfdJ.PhXP(1Hmf9"dIL9khqo"/΂emn3&Dʃ`,GPH#ٰH#yx>t/lQR/4茴ےf"NM&MId6N*6N*1EqVٲqVٱ (aAaA/"M훌䉑$y2>U֙e BR/)3lg$L#ɕl3aQA@ɵ"Gf®t/`y7 &nܚm3`D,/ri$ԟ)c63_* )2͓͓QUlUlfdJ.PhXPhbR/p.ٸHG*Z@|%7Aq_Ee7Fm䉑$y2PP =aJn7V͌*9ڀiJm[R|͌Q짳d6N*6N*1EqVٲqVٱ (aAaAbR/p.ٸHG*Z@|%7Aĝ7tx58>ikHlͳq2$&T` iR-@yR$ٰH#xΕO8c1E MMZ6lfbefN/lUlUba%+f[fl.X6N1mlg$L#ɕ-oF-i/"M6rDȒ"L=+ͥ5j#o4qB8H0y"E&=')JnЎ @*(==1(&^h{_ڪ_416AaQ`L^*Ơ{h /jUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU-'\gRVS'a\.gHr)4Ҹ\.4q=JWwp`yV@i @Lɘh8: 'mNCY|eGHr)+)NtS-;)A0VQ:t>"'I|%0HPsRLɩʓ"~rp%Ob)| 4`j65cpbFoNOE5$`yV@i @XJ^ޜ"N"'I|%0HG-O0rx&^Ư&^O+(r:EIYNrzOG"-["N08" BA _eqyަ|q6m5G,19'\gRVSޓȤWDc6HN_Ӄ~ql'5"O М8HpBѷO\MzQ$L VUUUUUUUUUUUUUUUUUUUUR|I:MKya8EsUUUUUUUUUUUUUUUUUUUUT5Hlͳq2$&T]8ճbN,$֓˳_a$$M"E%Kۢex?R˾n,eي/ҩMa咶{m%[IkHlͳq2$&TyƀIoN5@$qFDHU h |&Mћf9"dIL;`c6$Iٰr$]7 lf(9Ez.ӄjٱCSe'm'maJٲqVٱ)8ؿԋ6 n3&Dʃ 9Ez.ӆRnIbW4FH,1400,ԋ6n7"HeAYDb o=M)q7qm$63c63_)lfJV͓Q0l8l͂ E mlg$L#ɕ-e(+qUA2 _Ee7Fm䉑$y2퀦l<̀&PVz lf(A2͌͌A%8YÒd⭳_ 9)[6N*63`'QtAAl_En7"HeA_|r$]7 _&!Hlͳq2$&T3`DL <6QDᔸɛ/QIDܙqVي/)2͆ 9)[1EÒd⭳c6 Rp%L( bR/p.ٸHG*ZN΂e_ StfٸHG*Y1J/4&^ٱ^iflfbe&͒_,aJٲqVي/'m]ғ(a@PbR/p.ٸHG*Z\-i&^kHlͳq2$&T3aQA@ɳaW Zf: < Q #,ܚI63c1E͒_,8l8l[f[fltJ.P((mlg$L#ɕ-oFÑ_ StfٸHG*LP`Hǒf—oFÑlf(Jmf\MzQ$MRfN/lUlUba%+f[fltJ.P((mlg$L#ɕ-йtFS MF`yV$HGA&=5cq+1zzp>S1[ MFNpL[ɂȔ=@MWfx|} -RsLҏ. /c*\|/r`@kğ$S7qSt/j4eGHr)+)N03Y9a\.mt8ԥ+B80y{6_ejTL^*ƈI4qFQ1{Ce400,u|E%e;qt>"L=+͢Gڔq7qG zhDTyzc?A2&al*X?NA ڝ'\gRVSsD9 Z=)_ M !r#Y9'\:Nk)F [JjI5#9RcOðNE#so0 ZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUURƬn V?I( @*ĉ"8(4ǠzƬn%rF/RoNzMKr'b=ʴq"D*< =1keSW ?\)(.ypSt&^䱫Va|'-'zf5"0i,q4j5.^p 2$sqqȊ+zjMcy / Vk>9Ez.ӆ_P Q=&/qphcDm$8Ce(+qr$]7 D" hXcGh``X)c|b oA2&/qphcPLqF7(OEzp\MenJ/4&^LX*kLA2#( 4\MwF %Z+fLSRM zhDTyzc? iAI3&g*Lpv]=nrp~|'q| 4 '({H1 2* \ZƯ?|LtVw%Z8҉^f:՚=NVQ:t>"8wH|E&FnpL#U h !UA2 I2M=HӢ2+E8tFCq6m0Stkr$]78Շ䚱F5T_416AaQ`41&^8CA򸛸{GjDjE\I Ǝ(STL^*Ơ{h #ڢbW4FH,1400,=k|%62 9YD,Jw=+|E&zW E&=')JnЎ @*ĉ"8(4Ǡ@16@QOf.-f_ ZVQ:t>"8wH|E&FnpL# z @D8{:C`C) u gATp 8N5VQ:t>"'I|%0H<PAn/i%2E%rԋ:#<]q6mjFSu|E%e;>oF瀵n#</x?3S{:#,ㄊ@' -zD[IѷO+(r:EIYNrzOG"E]w)$#9N Ű ԋ< 3Bp8" BA WoFޣTz">S%q6m5G,0( ZUUUUUUUUUUUUUUUUUUUUUKn]Q' E5.39ۑ>.UUUUUUUUUUUUUUUUUUUUR"M6rDȒSԊj\fa8<U_ j$.hSF,|/"/΂e@_h3w@Vƀ E4nRρAƭbc}7)gxp0*zp6H3)q6o L9gUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUKY`ޜ4)jI@$L 4Ǡ~/ <҃fMHT888;({HNi3 _lO& "P"&&=6b^dU 0 [JjI5#9RcOðNE#so0iwwNqyegr_ӕN"ρȤq:N8Ҹ\ΑgRipKh V3З0/cL~LBB:ƩtFCkL=(tޜSi+ep~ zVͤ7)/Y\Zb${MZVQ:t>"8Js:EI--[B_P#3v@QOgsٳI`V_ 8\'cjto` +(r:EIYNu$a6yDgkLr$]7ƯE8y3r#Y9'\:Nk)F-(Tr' b>Hnz">Sğ$S7q+|-iL>S_W,/ri$ԟ)VQ:t>"f7܎E(&^W N,/ri$ԟ)pf0LɦܓR|_eqyަ|q6m5G,19'\gRVSޓȤWDc6HN_Ӄ~ql'5"O М8HpB>܈SR15kj|&Mћf9"dIL;_ Wlf()mVW8ճc63c1EfN/l0l8lJV͓͌a\.rp%L(F/"M훌䉑$y2QMeE8yb8`H?_Ee7Fm䉑$y2H &$M E4nRρaU"lQE8y2͓͌QfN/l0laJي/'mҸ\J.P _En7"HeA_@}.&ލ;#l_Ee7Fm䉑$y2 L "{Gf—oFÑlf(3`D&ލFE|͌Q3d6N*6N*1EÒd⭳c6zW E @Hmf9"dIL9knӤ,HJ6a ǒ6 Hlͳq2$&TʃG HX<8l23$l͌͆(Q&lf[fJVQ0l8l͈qhJQtƒ@(P fԋ6 n3&Dʃ5E_-t I,1h;/=aUlƯ"M6q`4Ka'\gRVS'a\.gHr)4Ҹ\ڥN3 @$L 4ǠxOEXԋ6 n3AK_En7"HeGQk <҃fMHT888;({Hg -`j67PeJ` gmUUUUUUUUUUUUU-cV7*+r°FoNޒYkNT՗ nrrƭfхf \T\V1'gAXBa\.m.YKh³zRc*\}L+D3m@\T\Si`|>ɠ@2"'(\T\"0bOSt4<U@&DDzc=-f呶+7!:2 °DA>S> @*eK|%6V1'c)ܚ @* [DHT Ǡ{1.W=HL+D2QMI4<U@@i @,Ҹ\ڍaY)1.W>m" I6`yV.c*\{)°DA>S MF`yV@i @.c*\zMFV1'dh0yS> @*eK|%6V1'c)ܚ @*ĉ"8(4Ǡ{1.W=HL+D2QMI4<U S> @*eK|%6V1'c)ܚ @*DȈPO@LzsRsԊj4°DA>S%ԓAZHi @,1 kp%o$/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/filenet/config/cl_filenet_manual_config.xmlor$$ 6.1 sriniCell1 sriniNode1 server1 Node1 Node2 AppSrv01 /opt/IBM/WebSphere/AppServer/ /opt/IBM/WebSphere haapp08 6.1 sriniCell1 sriniNode1 server1 Node1 Node2 AppSrv01 /opt/IBM/WebSphere/AppServer/ /opt/IBM/WebSphere haapp08 /opt/IBM/db2/V9.5/ db2inst1 SAMPLE Node1 Node2 haapp09 /opt/IBM/db2/V9.5/ db2inst1 SAMPLE Node1 Node2 haapp09 fnsw Node1 Node2 haapp09 _man k%o$./םaX՝a֝a&.2vT./usr/es/sbin/cluster/sa/filenet/config/cl_filenet_manual_config.xsdor$$ t nam lC$o$*/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/filenet/lib/libverfilenetsa.so$$$,& _acert 01238:;dilnos ,-./4567=@AH`bfgmpv| !$%(*9LPThku "#CDEIKNVX\wxy&')?BSZ[]^qJOWYj~Q{`1ƀF0 )2Q)V݉I: Cp9{BxPsyM |bAR 8$R;&'pjc|:_58!݈~*A;YCɹb6ˋc1ZY 7jVXV6.p[Z!J5 -=-X6{@ x R5 ch@x9Hؔ+.Gr7ZCcť(u `ևR R6lJT@6p%-@*]ֵ+-BE#P"d@-; +-ZB--`xfj:tCH*.Wplq:ړGdǙPC4^ˊt:j:pC"+9T!uvӆ E8*.Bh-֛ %˻b6\派 u(@-T3q-6 M1pZ&@DAL@\l `esAuhQeH аIlܶ)-ւid[ 2A6#eU0!Cq@m5Zf,Zl&b%L#T  Zk@'<GV%ZQ1] ±w--`L35:! 4[?ŬXS4;-uyAe;O4ǝt DWsv#BFP-ťvi ZY 7j$.\nCC --Rr}#C奱..DAt` Z06;Z0Z܀^RLjZil0@n2Z2";.}l$ K$ZEr"-A| B_a0L]ֈC -H" R@H/3.ZIlHťvխC֡/j-n@/:)Z06 Z|֡z@)`6HԋOATX@n2Z2";.} >AjApid!v[`}kCl%-,$#ā*CևiܬmV -H, R4:Ziln@n2Z2";.}ht@v-h}qܰm"Z!, >Z@8ZA-BRq|$eAԂǒ@F/[ֈC -H"H](ǁwZz-; e5nykt膐T> b+8hX8 NړGdƃS6L)sj:pC"+81B|#@nf,ݣ7H]+ZjD< Rl‡ PkG7H!J--w.O.ͥxݣ֥ӹX)H1AKa(r[8-j Nch $'H\Ķ[`#-6< RٸfhmiQny!v V$O  kK$؅$j1- b@ R4y9l)B`˓K* H4xd[ @8@؇22*CqaiQA#QEl*bnkQE<, NcgeKMڌ s db xdD< !tH4y9lEv<QFR*ZY LS<֖H\.\PZ@"؜ H\\Yx. 5l- 7j0ZlyFVnkG#aZl0H"$'H!F) ` a ]pو`E<2H"NBRBBBa .Z--kK$ӹXxG-KsX< GNiGñ pE|G |iӌ~pjMu7mJ<;O8ˏ64Pۋ?t DWsv# ð<.H]+ZzD\B[`> r}!vnlxݡkGErR ` x.b[p!@[o%7hx7ZnDv`:[@[3 `Hnn܈X6 jADH\B>])?H0HFl(pd/`H!@):#P"P K$ BZY Hlxb4pݡkCܬmB8ܷ--`x95:!b+8hX8A jMuԨqŞP.2f l67,-֌'BSh?a:nY Z?OD0ia|ܲ@Z05 Na> }K`=3P\m[`! + |!J&,Ͼ-H]gX |_H[23#= ҂QzJh-"@|vu&^,# .DP63Ӄs! W:7 E,<\*Ȃ\  F+ KbB! W t$" pP66‚X# ,p @@V` mN 0tt^,p @@V` m afL`A@| $`BPP6C2P6ġ 0 oiT$ } @|"`pP6€l> O(O F+ ȣӉ`$X󭙇Fhܲ@Z05 Na> 棧0b"#Kˍ`0D`` ,Z_ H"Cf Ķ<eݰitـ(Z!0ֈŢ+ن񰩀~lX)bdLuhx4ZxT@[Zt膐Tϖ-`u'i:v[yY&:: ?> ؆Ff&Dn"Ð` Ad@BtC7,)OO HfJsXƣD44[?ű?YqUQӂ~*| ڌͪM)xE 0Vx+Zfڥh+Z` kAjdLuhx4ZxT@7jV[Z65:!F!ϖ-X?HLt춭Jy[Qӂ~*|-Z_HlTfe1գ iR%Z[ZĴt膐U+ |nH \yN Jy[O ?>ؖ ֡͡hnY.փ|D3rфhidؖ ͡.7)ֵ CuhN!C`5dLuhx4ZxT@[ZĴt膐U+ |lvdjͦƌiGNavnĴݨlnm )qNlDJu Zl>"fbtC7,)OO H sX aϖ-cxm2fcFS_ ?>ؖ ֡͡hnkAjSdLuhx4ZxT@[ZĴt膐U+ |lPǙTpm ZlhvT'棧0T;7bZ16sUD3rфhidi|dX?Hmo|95#KaϕG Vf~>|8ddl67,-֌'BSh?aHFơ) 4ZxmM$ G P-<Xl67,-֌'BSh?annY Z?OD0ia?7,-֌'BSh?a $ G P-<Y棧0b"#@jfֈ4SZ:fK$ o-,-htf؍oP ZY 7ht0Z`-; bևC-,$.sX GNiCE|G |k 1tH鑂.nt?a Z"ֈRKZ>p3}yFa0@nykᱨ |bϖ-`ˢF)sGN`E|G7b:;Pfnznl:B7H O$֖H ڕ.:$ C7ׂĂ} -`b:PkRiܰm-j NchB-ht= ^, NGeo HcfmX~p(mIJec(m\T GCPa M͇WC vfCvFFZErLGrt-htZw+GeխnUiҳhBp}kCnBt>-V:M-7p#lf"RzA@C7 L@n0ZԬZw,DZӹX>-n7ht7--i<2H+YidZw,B:BݣũS!Ԃ <2 X,-hjaƧO%C֥a,K$ i3|!H\ִxiSfkCܬmh3|D@-;A*F0iܬ-Z0Z!DADQttb@C֡A 7kK$ D)ZF -:fidZw+>&ZnDw+Oj-Cբ (AXf֡fKK$ Zo%9H N 7`K #X>7 `.[疰: Lñ4[?Ŭc Yi:vV8领eO:aHFơ) 4ZxmфJtC ?,58!݈~*^\Bsp[ Z_.Zn X-H"A} ĸ 5P]-h5Z @(z@l. C7 t UBp[ Z_3Zn X-H"A|3| Bbk@!mZ}hDat,6dR[Zt膐Tϖ-bYXN58!݈~*|AMͦi Xz Hԭ Zj cP%p$.ڌ ڌVV<i1ai疛W$|d |krv%MVC]ֵZ25:~X>qqi`-j1ZmjtltRrd I[ H<ڹ x Lճ[֛Fi 15N .#v ڌnQ֣ёů6٪pHuF [疱 ؊-b~7[Rh㬧1qt DWpb">F&τPb݈~*sp!Av:7h2R5!@l<(d Ax @dٻWڇ&MMڭ7jMڮ7h?7h-3sbfX ~p0Ԛ8&nmŋqQN2f N||_Vf4*+T40X膐 ,@A 2bVrEHp\ObA,"Xx Ha τX 8,l?3&C@A'ECIXX6AD$4P6H9|!>#TbA,"XL ObA,"XDIA$F)`$!  B8,l<-`$+ C@N!1X 0l+"ǝm(7,-֌'BSh?gguK,5)q:)ꕧqSFNziTѓ^Vɠ+tCn,d(yǛ%PC4_bǒdtCn,@X((%,ń,@;"jMu L0P,!J E>)@((b@XB|RړGdǙPC4^ˊt:TJٙbŇ*w U T4qB[RO2BƋԸ˭*Xb"NJ,@LO D($E'LKŋVꕼ}BǏT}R%>,X=i:v[V6Gi+Tvi:5m᫮,4qBLe*T#S4<.<+tCn,Rɂ.*qLVۋ2 e:q[0T8iF'ƦgŋT}R,> |X)LX iF'ƦgŋT}R,> |X)LX iF'ƦgŋT}R,> |X)`ږL)qS2fXT#S4<.<+tCn,UazDyIF(R,%mK.(yh`[ /Rnhj&P4՘,>1Plh53>ajVńGŋNp9POKtG(c,%X^Q+jFqQyC [RɐC EV``X-4QWlc(mŃ*1>J͒qE }O:b"(a(`#>ꕧq)a0bS0h2 AHhX0>RRdѥ*NX}qAȏO!>a h2 AHhX0>RRdѥ*NX}qAȏO!>a h2 AHhX0>RRdѥ*NX}qAȏO!>a !*1>75yYO(lǚu]Vۋ UT d(yϫT}R%>,B+X=q[jMuAt+  qN|:>ZXT(m+T|JRV>uyAyBKO8|/uƞq:SŃp2}̚yCg<ӯV`|maTՍTT>BƋԸG\yU +NS".4M*Ht}:p75yYO(lǚu,> T.yY>J͒qE }O:b"(a(`#>QJӸV)LX xbƖ8} ]p7pN}R:hT8pnXѓպ 'NmkRof:ɒǝyZGe]VX+Pdsu*L:pӪ*1&m64e;O5.<ʧ[i IӲڵ*\mndjͦƌieBEcGmJ='NcU+2dT\YRı+Tɒb̪p8e-64q;*u*KyBLݘ*mZ.6YPu*KyBL :Bsv;38;9 tc{8Xg,20Pͳ3 \8<ԧyו2h9<*4Pۋ9+6JM6J͒qE dtCn,.<Ը@+sDab• H)NJ,)YYi:vV8领eO:IK*%tbh;TԚ8.dV8领eO:df|abh;T)Nl̕&::%X㦊qa#y%4iQMTDtCn,$u9䦍:J3i#2VԚ8c(mń:<ѧIFm6dfJړGP`qE T<璚4(ͦ̌[Rh U:h:pꇜSF%ّ+jMuAtJM6G\PJhӤ623%mI0V8领XHêsŋQbŁ(JqS·GNã奁x(y)Nl̕&::%X㦊qa#y%4iQMTDtCn,$u9Ł(JrQb% BPbC'NsKKt B]VbZCS621N,%PVԍV<㤭yIdGQDm("> />$@/JNJšp$>} "#:)21N,%tazDyIV4J`KxJSGP` ȏl̈BN,eҔ$С%F Q%''J ZDHT$ϬuRdc6XJ5X* [R5X󎒶TD4qVԚ8+4JAM6TDGqc.&>LJ*gД&B/+ϟ>|BslͧV:JBVԍV<㤭4q+jMt&:M(R#623$mI0!])BL| 3Q%'DNV- "cϟ>} "3lͧV:JBVԍV<㤭4q+jMt&:ɋJAM6TDGqc.&>*d Ϣ@^ rY&4K-vY,5)qLX z1, CǝyZLTdf2bŞ,XX(`4qV<ӯu:M=&:sYmIǖE>)@(:Q` P J,YRh㬙,eF*8˭*XL)qS6Y3u[n,XˊT*q[0T88&nmŋqQN2hˏ64Pۋ-4qLVۋ2 eїm:hs \Tč4qLVۋ2 eїm:hrh\ )NL2bm8B[R5X󎒶j$)DPD}bZR&ps"B}):Q ZR;O(Tb}R%>,B+X}:T6> ^Vd>xUŇF*8}Mq9 d(yDzh\ 'ϟBHJLfӋ F%X^Q+jFqU(R%RTD2#623">PfӋt 1(IQ%BIIңC \uAt}jqSΨqaf.mŋ*T*pG\yU:h+T|ͧ^Pڃ6PiX}Yqbኣ >]m.CWP`xfqbኣ >fM<i׏X}:q8GRiX|ͧ^Pڃ6PG.mŋ*T*p,V5ujf{C7]Vۋ UT+2i XN}Mq9jVħňEk*\icӨXz3pCW4Ϭy^>maQNP+6JRh{ pa'>+Nb!Z6>5T ZR|[NႅJPR%qV8领X|[.mŋ*T*pxx4VħňkX}c(m*yVVXP+X<+NS‘Z6X㦊pt:>,H+X|X/%!@+XH<<1RK>ͥF.xf<VNV`}ᛇ+N+>^nXѓX}ᛇռ3qꕧp{9@#|@J(e7-oΕ7Q(@w߁ҼF,+oy@AoܠFr>BWߊ72(o( ˲NP#aHߒl9@V(Foā)H5AR2s 1 AĂ6R Cā\H GA$𓎊n: ` a-AF?0{$Rd.Mc<1%eK[+ ;aX\UV=fn*v< 0V=ԫXXc\yFcݏX+ǻ'?ǬTfO~V=Y+zō{P3P'F:ɒNC9H5 ?<)PШs t*e t*r( ?̛VK* t*2mT'y:ZCRvs_`9pHCCŽFzBF9̌ {9̙'2bs&-2pk9̜s89N9̜s'N9s'!dCo!dC'2p!ds8G22݂P?9̠M!eg2O`9 9 {9̡2ns(C 9̠s@ðC^Cns(.PCs(32sA`9Cs(7Ps@3P s@4P {9̠ys(=P9G`9!eC2,29̠ s@!es@D9s((!e2¢P#9`COpć9LCG'!e"nZCH8dCB@CE<+!e'sHR-t9p9x9qAs)I2R x!e%}RqIs)-98!!e#BCF\s) 9-!e%.!e)s)9s)SRRgbR sHs’RksJs)89x9bRoń9̤?9.s)~CD%!V:JU* ҒV:JAzRU* ҒV:J̔9RP_TH`Ex5 T8邅.*q,VJNRPN"@ J,8ddJ[icUҗ9FM'NcU+2dTXPdt춭Jy[Rdb̶Jy[O&MʅFƎ2ڕ*{6#UFm64e;O5i68<&21q[hbcGI)2LOmu /R.``pʄNcE\e,3i*-4qBLVۋ2 e,1Kjԩqu /R.``pʄmLeǛec(mŌOd\yV8领XɛMP4qBLVۋ2 eїm:hbթRo+um:h2>V^ҖS^51:ɛqb\TbSق+4qLVۋ2 eїm:hacjMueB<{.*y!mI2ڕ*y4^]lRm4qBLe*T#S4<.<+tCn,IӲڷ]q8MZSLyѫo ]qfY/i͓ \seS-ʄ2OGeJPS!NP 4qT1,m 2㮫w Mu*KyBL,1†djͦƌi>ړGe 84PیC,mItqE ˊt:Ǎu4إ&:ɛqb\TbSقRh㬙,eF*8c1.<+tCn,Rh㬧1qRt5X&MuAu8.:p3i)yNLThh-P⧱)Y*24qT1,m 2d ̍u*KyBL鑣Yco(VU(Tc8*U,1ĦF:ˎ&24qCTQYe; Tc6J$H8bY{JYN% ʀ`6<(G%x 4NM:2)e (&e!@TF&P&^J%HPc^B P$M:2+J ud &)LFM#q$%%K!0N,JA9:2ɰ;+y+R!)w8^D,qje"BTF@' RdRď2Ң@D$25XiQ!"F$ɱ"&*0#B P&@2<)J"@dD aJW4"'(LF !SNL2̞eB<{.*y(brd u*"$H&tjK)JFLo(V*"$HP"D3ǰT*$DJ$DdW*0#B%y"@dH#ǒ\FFH,F7J4ImSHБ#DDfKXTdEH&dj`iQ LɂR"B!̘(RR4dHI&e'PBthH "F3,p8/icIȐ#D*%FRD14Ic2)^F/*F LP&@ DɈc^&DT`F6&J22@d%)ddLLTCLqhH#D&L*JF"$hLP.2f  jhqKm2f.<+tCn,ecUO%#C̲`5T, Iq&:{Ml(RPLF0PM8̟mT'JfF Pd*2ҢA64`KI1:mR*hĤJrcWJF *3uBuhpLe2<&:^XɛCdjfeǛec(mʼnA18R*hĤNLqE )>2ɀSl5'(m4qB[RO2BƋԸ˭*X%hPB/ecΨTb2ɀSl5(Ce:q[0T8eBt[i4^]lR62:PNF Rh㬅匙,eF*8˭*X%d\yV8领XʄA93qm:h2fcFT'J m4qBLVۋ2 eїm:h%uS`K̶3iԯ!&(*#'… (&e"*#F *xɠ嗒%y @azb|J(ʌУM ^BLTӨ LR P&@1>6YmZ.6&N,XыFHK2XbO2:R4$HL@+q)$hLbӭ8JF$N,XыIȅH&3i֌yRHDB$(&M5F+ѕAiy$dK$N2fI$h8X$hL4 V%F$ʃ]VĤhHH&TTQĤhHHDe[Q"BP$:RFD^$ɰhZwN%#)*XiTѓIȐ#DN%FPD4Iq% yĤhH LNʄHБ L[cDhHHDfՙ2㮫u)$%LM6R4$HE舑Lڳ#5.&J2@azb4 uAyBL3q+tjFHJ#(Hh 6e0m*4HLō %F""d͌lhћHБ L'!D$ͫRV* ubTh "FbR5T 2DH&ʴL+NCRcQ"'BfjuIQ"&(&"BP3m2:TeH#D2lJi СM^TӨ L2%J224(Sbd4!)Lx ؙ+M:2ETB%x!SNL2$)T ʌСMNP&@ *WЕB NP&@^%J:24(Sbd4!B'J99SNL1BhpBڵ*\mnFʕ J2'(*X6%x!SNL24tړGejT̙8cF.%ʖ#DdŶeBthH#DbVR4$H#DPŧZ2qX A14IX Lfӭ8'HDB$(&MpK!zG y"EK(T)$H&0PĤH#D;uAJNDPLDe[HБ LJNDB$h*sNPbR4$HJ#DPbX z"$h8X $DH&uRF+!"DNPDdؕ+FhPjԩqǝQAARE 'qS 8R4$HLtfR4$H#D;uAJ A1A2fթRo+ubRr$(#Df*ә,JNNDy:$ͫRdjHDDdؙ+ ud L%xSNL2$ /,dͦƎ'e;O4ǝQJQ(N⧔(qԤhH#D;O4"$h,P JF$ɱMRRPT`F l*JJB@d(#LFiժN %ʜ#B/)d/,d1  APh ph^0 CR^Xb!x*,ab Y C3d/@ " b Y  C`/C Ő0 AQ&ǒQڷ]q8MZV<շ"*XL ^XɓJ2`5TRr$H& mJ<ɀSiJJH"F2JNDPLDd,mo(V*4$B"d#HD4IVKT'qS 8ĥ)#DRP1x)JF!yB$h8ȑ#DU8f⠽Hc:,FiHБ#F14IKi׃WP`PRR4$HѠ'("F0^Xʅŏ4"uR!"FDH&3i-y)$hТ@Dc62^"F :"$h&„$&*i &(L%y!ASNL2i^HRT`F6&JDM:2ET$B%x^P&@ $2Wʚud &G/'*i &BP%JJP ĩ^BQؕ+P#*!@y b4)*W'*!@MRAQؕ+P (ĩ^B!Qؕ+P ʅP$ĩ^BQؕ+P*!BJ(СMR 2r(!BLT`F lJ(IʅPc^B ؕ+P (Ҽ B4(SbT!B/*!BJH СMRrH1!D ؕ+Q#*!DJDFhPĩ^B\6%JEFhSbT!DRT.By $FhSbT!D/*0B6>(ЕF'NcU+2dTIA18 Lє3, U6)CTb&4qLhPS%,N̍<`&JfO̲* ҙ()fY0mRp:h㬩VbXdaPLF2ɀSl5&&񣎲Yco(Vu[A18L&UMPԘ:ʕf%ZCTQPLF&4qT12XbC̲`5T, IaA㮫u(&#B djYJ:pӪ*1J СfY0mRRt춭Jy[A1}jYV^eL&UMPԡ&\yN Jy[NfY0mR(0PX[RO%hp<ڷ]q8MZT'JfFT;2q)>2ɀSl5Km25TfcFSIA1><Ӧ*3#C̲`5T, E𥶙3i)y N(N⧔(qԦdhpLe*mMNʄA1ycUO%3#C̲`5T, R$“eS-ʄA1&ee(j;-ĭʲ%3H djYJ&&eǕ2h  "'24qLQaYco(V%)A:HAYco(Vu[A:HqIYco(VU(TbB/F:ʕf&K Rt(Jq1㮫u('B LuU(TbB 2i:v[VKԠ 821q[VKT'J Р1jԩeBt i e*TPN/) i62J +2mLlhvSIA:pǙmMN'J РG\yeBt |JdLNc&et( ~D 2hQs\7un(8qG58n(6x! 7l9qF6|w`gq`.v<Wtpn(g3;B@ yX|w O0'8´\0X|p8IC'`|wC/!,w8>;!Fn`xØp< (;' x^(;PPws0( {APOx>;xqF(8n(<a {^7`||w<a&1I^887b1HyѸ\ qn(npG0@n(3hQqCqF<_4!Q{ !  xqFBgn(C CqFB n(Dlppn(B>887g9733n7g-373x! <6T(;XPwqF* p*3qP6|wQ.t@1R>;NCZ:87ah: Z>;8Q C㸬C`,.>;#.0D2qF"950FIӇpFs8QL8QAtG0H3/0Hsj7b E1qn887b\ッqF.n(1p<|w<h|w1" nȒgBq" \7dC;Lppn(sn(žr2,#r0:cqFI΄$p$?%qm y8?NN8>+!8<"Y'<#Y(rP{y@yP&PgB(Y(@DCVCg@6C \ +!^CVC[lCn+!ZCY(S(3PPkd<<LVC (CC^:CV<<BR𤇔0! 8d<)ysX-:xKQMO)p DM4l b\e; ěl@=b]XOBM5)¬2g tGy40< `<ř8" ?mx"3<=K XW cc1zca8 1 ?1 Gq A#BlHl$= Y SH)BiXH[ p<.@( $]ExIIqt85A&:Љ+S͂ A%JcJ&lw B$ B,Mb|x~'DŽ x+Lj^<q1C n<Řx4qq)SbAAbub E8!8#AVзp.t[1n$*7`H@(p@@h@@dmFs!S 0Bg З!K%5!Qy pB!"BzrY2FBW# Fr!]Y3<Ź9L "Pghs<>WSglyu;8 |Toc)T gP9b; B\-0 Nah;{  a&$q\%%?ap8\b\VBV-bhW1dM9 60001A)d aVE Ȋ⬈ -ȍ@g",Pbj<di#[L9' xP3P cP"LL+3"0<Ёt189? GaHY;%)ę}c @w cT&3_ X e;@9@$ eK[1O1OE?I=_cy.*1ǿ0Vfq=u+ С^FNTFRQ?_y 9Q7_y "4?}~yQ4?}~EDh}~%DhQW }W}~rq/]JAPo_ ̽[S_~w={ԯ! _o}~?]J$eBH{}~E`{ RP_p%뿜 W ]?}~+^&@T.F/뿜>wi:Ǿ]URLNT.&&뿝}~@΁]O<Wѕ {ԯ ]^w_x 뿞}~4뿎{羿]p-뿎{7]pԯ* ?}~EB>wǽWI(w(뿎' =W *@_y""$u+ "뿄^HNT.D_s_y!IQ:o}~H}~H}~H/_/ Gs_:I=W h}WtwԾw}~kO/}~}뿎뿎O}~H_h%?$5~œ-og_!y__x`foͿN>6:ki!zJl}~ ,78aKcqtMß 0 o`Q7QNH^a{|(e/ͿdH^<> ]$qg%>Ҝ]?:;| 9J_!y󡽍>2P cJ>P׌>6)__SIy̓&I㥯Ϳ*__L ғ ziH}so( 1w H>6<cgy}x,.8H!|?bB~txBH^aHXcag;O4̜< _ǁW _/寯ͦo8ͪ2q)9O__LV3'5n_'}~mP1VH}~muh~x9}~m$/Y}~w`G_0ln1 ?*~x VB(3ǰ @ǃjvi)96<ڱ@+q)+}~mx>6< ůͪh*!<1}~muh~<6>tşG ?{OdV"d4c Y8s8N=tW9cN9 gB 1117xsħ=Vds8N=X31~'(#^)1~'(_` ,31ß%O:s8N=Rd[9c'B>p>t@ 88Ġ_xQu+ У^FRTF]J24}~dDd}~$Dd}~(У^W~u+JѡĠ_%羿]J9PЍ_x\Oԯ }W }~( 뿉@G+_~w={ԯ! _o}~?]J$eBHĢ?]|&뿏}~ }w/]|=W ߾]|>뿄Ğu+J=__}~L{f@_ }1]&>w` ``/뿄k ǽ8!뿄8 {p{p_ ^('*0F_x7]q/]p{uww]pgRw-Ă#F  lO O Becq8c7kfIңG4~:>6pL>RIY}~o$p$lB8+>49=/?v ?ҙڝŏ%3)__'J_I 8&}~ G_0|:8v's`'.[_$/0 >hĦepe{€:_!yB]cqTѓLxzm3VLɱϯ7U)N:nm'GoBZPA-}~m(sRt>xdPG_ l`j:R48nH^3P :}~ ,78aA'+ё`2 h5ƌc?>xV 3 _@=WP A]$qgegǿ(Ngǿ$0PϜkLNx_?aO]J𼘨 ?}~t%Di>u+AR }~$Dd}~(WDhWWG^FT4#E^&*#Wʅhu+B_}~3_2o]O}~QR^T.B_}~ u+ȑ "뿰W`aŞw0)^F\_R P}~~w0{ԯ#'*#&^FPT.FOԯ#HT.FS G}W Io]){“}~R] @{ {0뿅 k P_O}~T_ }R}~T}~TG]q/]p{uw}~_o}~w WIʅ$w R}~_@{ _뿅a]+}~V4뿅aǾ]+]+^w X=X} w^wG]Jy9P}*[c1q؟8sp~p~p~sX| !z}+fIY}~o$pZeahb|8 yYû_!yXcJfL/W__}~6p zm >L%&G[jh_T*Nr6i!z},_#?,n1}؟8s GȻ88 ?986_!yX7w{w:w_@s_i撙 `)1Gu[H_LլJFjiJF__}~mՍU<__LU'JF}~m_l~' _ OͿ2fYB[.8H7瀟's]p~s`K__!yln15/}~JfL__q)+}~m3V)ͮ:R寯Ϳ`X!g/ͤ?G_0F,n1J4c1" %I9xsB[XowFp]$qgP]9c'byq _p%q?_xYB8h41~'tH[iH~qOuq9c'RM9tH^ڳ09g"BՙX?c8u$dYgαN6fptH^ u_lgI꿔9w8 '<o?yw]7]s_SR'_yAQ>u+Iʈɾu+Qԯ ʈѡԯ"*#Eԯ!*#BRhFRLT.Gԯ }W ]~wg]e}~w31_y\']>w{ W#*"E`__WR!PO]PǾ]J4BB}~'뿊/}~^w@-뿊]K_]7]g__M_뿁?]R}wIW]R}~7뿊LW뿊D}~rq9G]R>wH?^(@T.'ԯ!* 뿂_xP]]JA9P_DwľwB7뿄}wB}~EB>u+(ʅ(#u+$Bo}~YRRRT.)(뿐=)} W!*$A!=Xi =X_*}~_* 뿊~u+%B4>u+EFW뿊{B}~yIP^QR/HT`N_x^/* {R@@뿊׾]T}~ A_*o}~Z$뿅W]-? Hjo}~Z[ C_}~Z߾]-/}~Z}~Z_hw{.뿅e @_뿅}~\}W_9uh< pßl~sqB9>,`>I <}. _#? Xc u%8PWb|p::\_ _$/0)\\fm.Rm.ZtbRd^VH^寯p߉_#? >_>&؟8s3:/:\ vH^aL+W _ S2˟_hf)?7i2S2ԾI <}.8:}~ ,78aL>ㅸA>ppSt ?9 _!y0W8 D/OV|錐*9qmh'~H`ڕk8qA* sb2G9<4c?$yAgPhHcΘ <4c?H'3e'*T*,\2CqQ4c?$1qp<lgOTT4$Yw׏1$x Xƌqoq'83g7PhHΘ P Pz4c?$03uB1A3m'*T*,^>tH:X\PEc1ſğ,<X1_'*T*,#Θ<q@4c?$X\U+1ÿ~bB"8>2E:*?c1ſğ,ynQ1 ?1RPБg|錑4c?$ij~*-c 8$JCBE}׏1$Y(mc1ſğ$Y(mc88pI$DH,WeL22Vh䑖Y2pY:KlΥ[m)yA&eǕ2h Yco(V%3#GeJPS.:fF:ʕf%ZCTQYRaYqU24qCTQɤmZ.6fF.TI D2P|6 φ*q7T,pbC>`偐lD|5qՊ>/$@H223FԚ8&.<ʅJy\Tԑm[ ePS)yV<շHړGdƃS6L)rHړGd/,d[RO253N2ͲM6#jMuԨqŞP.2f BBRBBRBBRBBRBBRBBRBBRBBRBBUJLfӋ F%X^Q+jFqVԚ8蕵&:JړGecW)XHܑ&:ˮ+4q:hqS·RFԚ8-'N4PیC!!)!!)!!)!!)!!)!!)!!)!!)!!*[%&F3ińU/P#U8*ƉL)qSP^JړGdB8+$nHh㬬y^6YNb$4qLVۋ2 eїm:hIRh㬙,eF*8˭*XI I I I I V:)21N,%RJԚ8`2%mI C"Fq9YD JTi@ #IӲc̙4qԐYRı+Tɒ!Yco(Vu[CGeJPS!NPHh㬩VbdHh㬸ݒ8!NPHt춭Jy[CeS-RV*i e*T3i)y#m2fcFSRCeS-1iPHb̪p8ePH[m)yAEP "ǝm6dgd^ k$oABםaBםa֝a&2vT./usr/es/sbin/cluster/hawslenetAA kH$oABםaBםa֝a&2vT./usr/es/sbin/cluster/haws/sbinAA k $oABםaBםa֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsysbAA ku$oABםaBםa֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsys/db2filenAA k$oABםaBםa֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsys/dmfilenAA k4~$oABםaBםa֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsys/tdsfilenAA k$oABםaBםa֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsys/wasfilenAA k'o/םaםaםa&2vT./usr/es/sbin/cluster/haws/sbin/haws_msg.shilenMSG__H_HAWS_MSG= MSG_MF_HAWS="haws.cat" MSG_HAWS_=1 MSG_WAS_MISSING_NODES=1 MSG_RDB_UNSUPPORTED_RDB=2 MSG_BEGIN=3 MSG_PROCARG=4 MSG_NOACTION_SET=5 MSG_VALIDATE_SET=6 MSG_DEBUG_SET=7 MSG_TRACE_SET=8 MSG_MSGDEBUG_SET=9 MSG_SUBSYSTEM_SET=10 MSG_PROCDONE=11 MSG_SUBSYSTEM_INVALID=12 MSG_MISSING_SUBSYS=13 MSG_UNKNOWN_OPTION=14 MSG_IMPORT_START=15 MSG_CREATE_IMPORT=16 MSG_CREATE_REMOVE=17 MSG_SCRIPT_NAME_IS=18 MSG_CREATE_CONFIG=19 MSG_CALL_SUBSYSTEM=20 MSG_CLHAWS_IMPORT_DONE=21 MSG_CLHAWS_IMPORT_USAGE=22 MSG_NO_FALLOVER=23 MSG_FALLOVER_NODE_NAME_SET=24 MSG_PARSE_XMLFILE=25 MSG_CALLING_SCRIPT=26 MSG_READING_CONFIG=27 MSG_NO_SERVICE_LABEL=28 MSG_SERVICE_LABEL_SET=29 MSG_RGNAME_EXISTS=30 MSG_ASNAME_EXISTS=31 MSG_VG_NOT_FOUND=32 MSG_APP_SERVER_CREATED=33 MSG_RESOURCE_GROUP_CREATED=34 MSG_APP_MON_CREATED=35 MSG_RESOURCES_CREATED=36 MSG_IMPORT_CREATE_COMPLETE=37 MSG_APP_SERVER_DELETED=38 MSG_RESOURCE_GROUP_DELETED=39 MSG_APP_MON_DELETED=40 MSG_RESOURCES_DELETED=41 MSG_IMPORT_DELETE_COMPLETE=42 MSG_NOT_ENOUGH_FREE_SPACE=43 MSG_MKDIR_ERROR=44 MSG_COPY_ERROR=45 MSG_CONFIG_FILE_NOT_FOUND=46 MSG_CLUSTER_NOT_STABLE=47 MSG_WAS_VER5_DETECTED=48 MSG_WAS_VER6_DETECTED=49 MSG_WAS_VER6_NOTSUPPORTED=50 MSG_WAS_UNKNOWN_VERSION=51 MSG_WAS_NOT_INSTALLED=52 MSG_WAS_NO_CELLS=53 MSG_WAS_SPECIFY_CELL=54 MSG_WAS_UNKNOWN_CELL=55 MSG_WAS_CELL_NAME_SET=56 MSG_WAS_NODE_SET=57 MSG_WAS_PROCARG=58 MSG_WAS_PROCDONE=59 MSG_WAS_UNKNOWN_VG=60 MSG_IHS_UNKNOWN_VG=61 MSG_WAS_VG_FOUND=62 MSG_IHS_VG_FOUND=63 MSG_WAS_NONODES=64 MSG_WAS_NODE_NOT_FOUND=65 MSG_WAS_TOO_MANY_NODES_MATCHED=66 MSG_WAS_TOO_MANY_NODES=67 MSG_WAS_NODEFOUND=68 MSG_WAS_GET_SERVERNAME=69 MSG_WAS_FOUND_SNAME=70 MSG_WAS_START_SERVER=71 MSG_WAS_STOP_SERVER=72 MSG_WAS_START_NODE_AGENT=73 MSG_WAS_STOP_NODE_AGENT=74 MSG_IHS_START_SERVER=75 MSG_IHS_STOP_SERVER=76 MSG_IHS_WARN_SERVERNAME=77 MSG_WAS_NO_MATCH_SERVER_NAME=78 MSG_WAS_NO_MATCH_INSTALL_DIR=79 MSG_WAS_NO_MATCH_CELL=80 MSG_WAS_NO_MATCH_VG=81 MSG_WAS_NO_MATCH_SERVICE_LABEL=82 MSG_IHS_NO_MATCH_INSTALL_DIR=83 MSG_IHS_NO_MATCH_VG=84 MSG_WAS_NO_MATCH_NODE=85 MSG_DM_UNKNOWN_VG=86 MSG_DM_VG_FOUND=87 MSG_DM_VER5_DETECTED=88 MSG_DM_VER6_DETECTED=89 MSG_DM_VER6_NOTSUPPORTED=90 MSG_DM_UNKNOWN_VERSION=91 MSG_DM_NOT_INSTALLED=92 MSG_DM_GET_SERVERNAME=93 MSG_DM_FOUND_SNAME=94 MSG_DM_PROCARG=95 MSG_DM_PROCDONE=96 MSG_DM_NOSERVERXML=97 MSG_DM_USINGCONFIG=98 MSG_DM_NO_CELLS=99 MSG_DM_SPECIFY_CELL=100 MSG_DM_UNKNOWN_CELL=101 MSG_DM_CELL_NAME_SET=102 MSG_DM_START_SERVER=103 MSG_DM_STOP_SERVER=104 MSG_DM_NO_MATCH_VG=105 MSG_DM_NO_MATCH_SERVICE_LABEL=106 MSG_FINDVG_USAGE=107 MSG_FIND_VG=108 MSG_FOUND_LV=109 MSG_FOUND_VG=110 MSG_WAS_MON_SERVER_CHECKING=111 MSG_WAS_MON_SERVER_IS_HEALTHY=112 MSG_WAS_MON_SERVER_IS_DEAD=113 MSG_WAS_MON_NODE_AGENT_CHECKING=114 MSG_WAS_MON_NODE_AGENT_IS_HEALTHY=115 MSG_WAS_MON_NODE_AGENT_IS_DEAD=116 MSG_WAS_MON_IHS_CHECKING=117 MSG_WAS_MON_IHS_IS_HEALTHY=118 MSG_WAS_MON_IHS_IS_DEAD=119 MSG_DM_MON_CHECKING=120 MSG_DM_MON_IS_HEALTHY=121 MSG_DM_MON_IS_DEAD=122 MSG_DB2_VER81_DETECTED=123 MSG_DB2_UNKNOWN_VERSION=124 MSG_DB2_NOT_INSTALLED=125 MSG_DB2_UNKNOWN_VG=126 MSG_DB2_VG_FOUND=127 MSG_DB2_PROCARG=128 MSG_DB2_INST_HOME_SET=129 MSG_DB2_PROCDONE=130 MSG_DB2_NO_INST_HOME=131 MSG_DB2_INSTALL_DIR_SET=132 MSG_DB2_INST_NAME_SET=133 MSG_DB2_NO_INST_NAME=134 MSG_DB2_USING_DEFAULT_DB=135 MSG_DB2_DATABASE_NAME_SET=136 MSG_DB2_START=137 MSG_DB2_STOP=138 MSG_DB2_NOT_ACCESSIBLE=139 MSG_DB2_WARN_DB2NODESCFG=140 MSG_DB2_WARN_DB2RHOSTS=141 MSG_DB2_NO_MATCH_INSTANCE_DIR=142 MSG_DB2_NO_MATCH_INSTANCE_NAME=143 MSG_DB2_NO_MATCH_DATABASE_NAME=144 MSG_DB2_MON_CHECKING=145 MSG_DB2_MON_NO_PROFILE=146 MSG_DB2_MON_CONNECT_FAILED=147 MSG_DB2_MON_PING_FAILED=148 MSG_DB2_MON_IS_HEALTHY=149 MSG_DB2_MON_CONNECT_SUCCEEDED=150 MSG_DB2_MON_PING_SUCCEEDED=151 MSG_TDS_PROCARG=152 MSG_TDS_PROCDONE=153 MSG_TDS_START=154 MSG_TDS_STOP=155 MSG_TDS_VER51_DETECTED=156 MSG_TDS_UNKNOWN_VERSION=157 MSG_TDS_NOT_INSTALLED=158 MSG_TDS_UKNOWN_VG=159 MSG_TDS_VG_FOUND=160 MSG_TDS_DB_UKNOWN_VG=161 MSG_TDS_DB_VG_FOUND=162 MSG_TDS_ADMIN_SET=163 MSG_TDS_PASSWORD_SET=164 MSG_TDS_PORT_SET=165 MSG_TDS_DB_USER_SET=166 MSG_TDS_NO_PASSWORD=167 MSG_TDS_NO_PORT=168 MSG_TDS_NO_DB_USER=169 MSG_TDS_WARN_CONF_COPY=170 MSG_TDS_WARN_IBMSLAPD_CONF_SUM=171 MSG_TDS_NO_MATCH_INSTALL_DIR=172 MSG_TDS_NO_MATCH_VG=173 MSG_TDS_NO_MATCH_DB_DIR=174 MSG_TDS_NO_MATCH_DB_VG=175 MSG_TDS_NO_MATCH_ADMIN=176 MSG_TDS_NO_MATCH_PASSWORD=177 MSG_TDS_NO_MATCH_PORT=178 MSG_TDS_NO_MATCH_DB_USER=179 MSG_TDS_NO_MATCH_CONF_FILE=180 MSG_TDS_MON_CHECKING=181 MSG_TDS_MON_IS_HEALTHY=182 MSG_TDS_MON_IS_DEAD=183 MSG_MISSING_MSG_DEFINITION=184 MSG_DEBUG_MSG=185 MSG_AS_CREATE_FAILED=186 MSG_RG_CREATE_FAILED=187 MSG_ASMON_EXISTS=188 MSG_ASMON_CREATE_FAILED=189 MSG_RGMON_EXISTS=190 MSG_RGMON_CREATE_FAILED=191 MSG_TDS_SERVICE_ADD=192 MSG_TDS_SERVICE_REMOVE=193 MSG_TDS_SERVICE_ADD_FAIL=194 MSG_TDS_SERVICE_REMOVE_FAIL=195  kf%o/םa֝a֝a&2vT./usr/es/sbin/cluster/haws/sbin/clhaws_importen#!/bin/sh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/haws/sbin/clhaws_import.sh 1.9 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)23 1.9 src/43haes/usr/sbin/cluster/haws/sbin/clhaws_import.sh, hacmp.assist, 61haes_r714 11/28/11 14:54:28 # ############################################################################### # # This is the main import script used to import either was, dm, tds, or rdb # configuration information into HACAMP. The primary intent of this script # is to provide a wrapper around the actuals scripts that perform the # import. This wrapper will also provide extensive error checking so # that the underlying scripts can focus on their specific task rather # than repeatedly checking for the same error conditions. # # This script will call the following low-level scripts: # # clhaws_functions - A collection of constants and functions used by all # scripts. # # import_was - Perform the actual import of the Websphere configuration # data # # import_dm - Perform the actual import of the Deployment Manager # data. # # import_tds - Perform the actual import of the TDS configuration # data. Note that this script is a wrapper for calling # into the vendor specific import script. # # import_db2 - Perform the actual import of the RDBMS configuration # data. Note that this script is a wrapper for # calling into the vendor specfic import script. # # # # MYOPTIND="" ############################################################################### # Function: usage ############################################################################### # # Usage message ############################################################################### usage() { /bin/dspmsg -s 1 haws.cat $MSG_CLHAWS_IMPORT_USAGE "Usage: clhaws_import [-d] [-m] [-t] [-v] -s dm -n node -l service_label\n\ Usage: clhaws_import [-d] [-m] [-t] [-v] -s was -n node -l service_label [-c cell_name] [-o websphere_node]\n\ Usage: clhaws_import [-d] [-m] [-t] [-v] -s db2 -n node -l service_label [-d database_name] -i database_instance_user\n\ Usage: clhaws_import [-d] [-m] [-t] [-v] -s tds -n node -l service_label -w tds_password -p tds_port -i database_instance_user [-o websphere_node]\n\ \n\ Type 'man clhaws_import' for more information.\n\n" } ############################################################################### # Function: init ############################################################################### # # This code block is common to virtually every script in this package. # It's intended to setup basic functionality in common function definitions, # variable initialization, etc. ############################################################################### init() { # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [[ "$HAWS_HOME" = "" ]]; then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -f "$clhaws_functions" ]]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # Once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } # end of init() ############################################################################### # Function: call_subsystem ############################################################################### # # The intent of this design is to be able to handle additional subsystems in # the future. This top-level "import" script is used as a front-end to # the application-specific import utilities. Given the command line # 'subsystem' option, call down into the application specific import # script ############################################################################### call_subsystem() { # Make sure the user specified a subsystem to call if [[ "$SUBSYSTEM" = "" ]]; then logmsg HAWS_ERROR "$MSG_MISSING_SUBSYS" "You need to specify a subsystem when calling this utility\n" exit $HAWS_EXIT_FAIL fi subsystem_import=$HAWS_HOME/sbin/subsys/$SUBSYSTEM/import if [[ ! -f $subsystem_import ]]; then if [[ "$SUBSYSTEM" = "" ]]; then SUBSYSTEM="unspecified" fi logmsg HAWS_ERROR "$MSG_SUBSYSTEM_INVALID" "Subsystem '%s' was not found!\n" $SUBSYSTEM exit $HAWS_EXIT_FAIL fi logmsg HAWS_INFO "$MSG_CALL_SUBSYSTEM" "Subsystem system called: %s " $subsystem_import echo "$*" . $subsystem_import $* } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### init logmsg HAWS_LOGONLY "$MSG_IMPORT_START" "Import script starting up on node %s\n" `hostname` setup_defaults generic_process_arguments $* shift `expr $MYOPTIND - 1` call_subsystem $* exit $HAWS_EXIT_SUCCESS t l(x%o^/םa֝a֝a&<2vT./usr/es/sbin/cluster/haws/sbin/clhaws_functionstsa.so    #e ailnorst"$AES_cdfghmpu/GHLMORTWv -.1;=BCDFINPU[\]bwy',2:`kx%&()04>Vq{|}!369JXYj+57?Kz8^~*@p8Eq$E "Lz!ǏD~*L3Y.'By[մ$Voٿ`tF`M!XYAc2J ҷ18j2J 8jRQl ~Ҹĝ[ `)91sޒH8oٿE+[]W.fҘY`M , ~:զ)t~U >Eq^\+K1KfiUjZX+&zN)%FgzwJV#xzc2 -i f䫆Uq,)oAđ(L1& SHI8 :9Lu_AV9g Pu_Ag QU|@, 9% u(T0Zκ#0 XXXG00 ooUMD+jƙІדYw%9Pf)UZꖪΫ~tF;O xŐ9 s E(2Ft3W}VZVX7ɚdUѭZS[U;ZoQKƺUW] /pHYDbv2ʦ4ŐDHLDi1,'(Li9f4ŐDLtcHYJ8<+7%f4ŐD1Ȁ!%e Oe|rW`s/-6c/]N qd$$&CEC 0X5}rRNAHTDN" i $H( S[ dt0@VD2GftArPf<P 4 L㙫9(94s.% y@44D2Gf5s.'((Hi$(d_AAɦ^Qhy$LL4D2Gf5 -"p򂁦8<$ *y).zLUj9V@m,Ug)+MK+VczުגTz|@BMo,eѦ}5e:wuq g%(Y,vᥝ\5z> -&`BiD*z"$N`c[Z㪳锃Ϧ}RQY+(no;ՖMbK:^S{ϦNO6fi3W!Mb=' 0 1o-qYAR ɾAz^<8T~^G+t V&j5n|xikϦRW>Q:8fzRY[mo_(f£"pݶUL}5.7Uϊ3\ҎV۶19%tV-y9jaI {YOVYGImXo;03O/thʸfropݧiVaMbH<8Tz"$N`c[Z㪳锃ϦA5:#yUfUiɕVZ۶/*Q^zJuakA5p:Vˡ[cIF]NϊMa2g&&Eo1JA["{~*Lxt_YϦf΄4Ϳ%%ؔn5|uVAV Up:tILߐƓ3ВN.0j%(ώNs0.3t V}2*Qϣ~ Oi\)0WUkIubh["@m>pEvpͬ۶Ժ)ڎf[̱riWFԖkUkJob n|UgQ)-&`Y 9wU:,#z^$uXSv^5aUM侪ש&fr|.Yn}D+dZ[rJ9[Sv{4A:/5DWTYl0%M5{00Żm֒ZI(neJ>*L+ ejaX8nnm\ݶQ`jJ9[[-iRч%m[=%2E}@%~f)U319%t.qM00ή#4m|a|U]NV] 3mm$i%5 Ld Ҟ:[%Zjx[A Ŗ]AXj0.=7V 7J*=VfQ ooUk* ueb>ibos ҎV›1]uV9*QAʅb\u.g%W4O0.jJk`2[k/sϊKO5*C,b>fIOQi >*I{mmYYJobiNXiZL9*@o''\gPJBYWUk(o19%t⮥YQ@MqVgY'](@3G+mUޒ,NI](+k@ {vUz+YJ8jyIB|UΚqx7QިafzJ1 ( ," 7A!1zS,%(&ߍUg>ڕ⮪ή;ƴZJ9[I; V}5+7V4C ެAմYjyUC/tWRSéGVUkхf6ߍ'Zvu+7VhqoC:jƴ VW)oC:jƴoϦu-=(y{G|Uz*8nQi >F5m`-IU ВNIfwIZd;J}1;ƭb$Lj<4x @0T$`1,$ aѻOVY;w۶=MU/t,3y7ш8nn=L,-4, qd*P\Z00ҥ='3\ZZCOif4!G!aala DD0fm`YQeݶzX[hY7@" xp0f=L,-4@Q舑8y7f ZЍ}CL 1 =l۶S c 3YDI5V"Hi 0,n=L,-4, qd*7mԦOg@x£"p0n0,00šIUIЅBBBBBBBBBBBBBBBBBL v4ŐD2GH"$DZKK.h/ CV@"@#BJqI"{B-%4ax%A:V"Lx۶=o^YVYwQv^G+z,3sNbr.0%PM1{v䤺򎬵V|AnL^wArZΝ 7m;.QW'j>/4C9-ΦtuF+7\B(xKkb^QXϦNQ27u⮪מVW!r0$$Bc$D*$LLݶza۶S c qaU-za@z$@HLz$"BbED!aali$*='0fm!!! f$QWZDjcHYH$xIZ41"DOhBn([.ջ.Ɛ8&HВicDݶzX[MHD@Q@~ ZЋIic /x LhqjcHYH$xIZ41"DOn\)mN/EpM0^YT Iƽ)Uoo/z^/(2g&Xʼ;&U±ULdΦRP ooaXήt!ki +k:)I'VVtm}UVW>4Z)Tp<4В\@"Ta h1/xIOж SShYNˎ05\`g $boq`$ݶzX[Ll a`cjqhD$W8(pyi$"LTLA i3$t1yAj l mEOUkWIOUg@h˩qrpkBRp;@0A (LTP`&" "Uz+YJ8<4&*& <`x`j h=lݶzX[0 ZЈIU qd0 yHqaU-^A&Si$X@P!yH*yvaW ŬeJ dG R^ҍhxЋAHTDN"ݶQgI ,rD7f ZЂ yHR\ ݶQn|IfwisbzUW%pvI3@QT|.94!+A.5GzX[jWq9C"D00šlamQdn=L,-RL<`vfBJEq )4,r02hD&u<ĻWh{`3X<X=Ɛ8D"pnBJEq £0HD@Q@y2 \%p4"y8[L^&5m𜆵Vup^V.^XjnՖoђwL4MULXϦ}2|7ՖNAX3JmVY9 GUkɾve1nK E= HUc$FFS|*caMoe=nIliVSI ДQz^ᔔd׆QJe$SjqYϦv.=='aMnݶe|SZdTjz.^ZLw; n(]A N N"E"TzB,rD;p!4?=LcB&;95ƀpD n%&cP)l2aݶRS>j3'& Xh4eԸ{ƨX5S c ,r<30ѕ 3 ,r<00šlCAbxԤk Z۶6ůQi3/yڏ'aXIL5ygz:8,Ukn|.xizbzz^{V LUS cR1 ;X``3UkBX& y7f\ZВ\@"yBlacDL13+ e|SŎCFIؼLhE–Ѝ^A&Sc $K"dDLTDIaz>)!$j icDLQ{ qd<DD"-eݶzX[pJx``3UkBX& y7f\ZВ\@"yBlacD2h8L"&L@ ,r2N铵L+aH[zZOPoJ7⮪ׂe_(xЋ-m *,'(LI9J&#R"dAG x²]ŎCFI2viT`3X& {B{B,HYO"EQ8HvGl00 10 ZЂ 1L4eGn(m-z28z2N۶В\@"TacDL$D ɘ!$j icDLf-k߄YU| Q̽{߄.5Z\IMU9 W:20Ug>7izK\p3sZ*M%5VK{+ ^Ibzz^%5VߜzNK{)V.eh'hIU qd*PcDyQ@i$~0}֯^,r2=/aAAB1ojx8r:ibrJMU|ˠZe n|觧ufqZ\)\±kNEޝf'%fVZFؽ%5VK{+imGM,r T$Q(9)EG9+(8 yH4"&L@Թ)<(В\@" xpi$(qDD""$D`G]UDr0 Ax n9P<yDD$xh4pv4)yT(PLGAG‚D*$LM(Pݶ^A?I9DI"ďɘ\\S O(ďh"ַEW ̔մhQ7>vުקt3J,bI|s/sΊzMWE:+7ny7Ҭt 7yV6%uׄa&&ߪ67WvJv4Job'j23AV 4-m/a۶:{1vhn/(!(6cS[Z\ѭnR&f,a7/{=wVXK:nJ:7m\FFh7JMTL6.^۶S c@5b*P^\ZQ.\DmvMrЉ/aIickk n($W8*?c $D$(? {٫/b1ns A:r2=/x'A뾺 ,*ݶu"423AV1Dbl04\8%Z ၌šbu$@0k 5ԋ:r 6kvGm%WŐD@Qi$ xpI vJQQ;JޔtyVdm3H;.M,cHYH$x Ó!``ݶzX[&aš\@" xpa£$1|,$ 8PLƐ8&HX=Ɛ8D"ph"ַEW s߄xsD'ox.0jKUgW ^I:-ݘvW [Uk:rIЃ.ܽ 4K"Bh8Dn./nӃL JuVƖ9D*q( ҺLicDHM"Ax n0A:/n|UkNVܽ5Vupʠy@4g<4} {4k["RfJK D+Fnz^Vsum=D+L]+R똹Q3JL m6ҎޔnZ$^$+aЀ+V U3KYՖNM6SԤ4Jobl 'am޻rSVثv%yRثvUz+YJ8<4@ՖP+axBKIULxfԔ%(eT(^&cS]m%7\j$^dm{[)EGW:MUl<PIEQS{nBJEq R@z(*ďDI1%7]/y5f5%FMUlLcRQThq:{1v 5%FMWrv\tY0, ۶S c@015V"Uz+YD4<8Tz$f0>L>J*=VfQJobђwQЄь [B!%WŐD@QI =ÅGIcMʸjSЈIU qd,qA:p-ROVX/J\ƟK oڭ+sFulpݶ"*S"S7m*iD)IaL)YCYg;u*0d PS0`ݶzX[jP][3>0ԡJf́TP*pq85(R n3 *y11!3>0ԡJf́TDĊ0f@@O n(-Ó kh%o /םa֝a֝a& 2vT./usr/es/sbin/cluster/haws/sbin/clhaws_snapions#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/haws/sbin/clhaws_snap.sh 1.8 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)79 1.8 src/43haes/usr/sbin/cluster/haws/sbin/clhaws_snap.sh, hacmp.assist, 61haes_r714 11/28/11 14:55:25 # ############################################################################### # # This script gathers HAWS information for support. # # ############################################################################### # # # # Set the LC_MESSAGES and LC_TIME variables to C. clsnap only works # for the C locale. It's not internationalized. # export LANG=C export LC_MESSAGES=C export LC_ALL=C export LC_TIME=C ############################################################################### # o usage message usage() { echo "Usage: clhaws_snap [-d destinationdir]\n" echo "-d Destination directory to put the data" echo echo } ############################################################################### # o Function build_log_files_list build_files_list () { FN=$1 for CPF in `ls -1 $FN*` do LOG[$numlogs]=`basename $CPF` LOG_PATH[$numlogs]=$CPF LOG_DIR[$numlogs]=$2 LOG_PATH_LIST="$LOG_PATH_LIST $numlogs" ((numlogs=$numlogs + 1)) done } ############################################################################### # o Function build_log_files_list copy_files_from_list () { for F in $LOG_PATH_LIST do cp -pf ${LOG_PATH[$F]} $tmp_path/${LOG_DIR[$F]}/${LOG[$F]} done } ############################################################################### # M A I N MAIN main ############################################################################### PATH=$PATH:/usr/bin:/usr/es/sbin/cluster:/usr/es/sbin/cluster/utilities:/etc:.: export PATH # Initialize variables destdir= # get the command line parameters. set -f set -- `getopt d: $*` if [ "$?" != 0 ] then usage exit 1 fi while [ "$1" != -- ] do case $1 in -d) destdir=$2 # Directory to put information shift;shift;; *) usage; exit 3 esac done set +f if [ -z "$destdir" ] then tmp_path=/tmp/haws.snap else tmp_path=$destdir fi HAWS_HOME=/usr/es/sbin/cluster/haws CURR_DATE=`date +%m%d` CURR_HOUR=`date +%H` CURR_MINUTE=`date +%M` filename=haws.$CURR_DATE$CURR_HOUR$CURR_MINUTE.tar if [[ ! -d $HAWS_HOME ]] ; then echo "PowerHA SystemMirror Smart Assist for WebSphere installation directory does not exist.\n" exit 0 fi mkdir -p $tmp_path/config mkdir -p $tmp_path/logs mkdir -p $tmp_path/scripts LOG_PATH_LIST="" numlogs=0 build_files_list $HAWS_HOME/config/ config build_files_list $HAWS_HOME/logs/ logs build_files_list $HAWS_HOME/scripts/ scripts copy_files_from_list tar -cf $tmp_path/$filename $tmp_path/config $tmp_path/logs $tmp_path/scripts rm -rf $tmp_path/config rm -rf $tmp_path/logs rm -rf $tmp_path/scripts exit 0 a k2o%o/םa֝a֝a&2vT./usr/es/sbin/cluster/haws/sbin/BasicXmlParser.classso1U &' & ( )* +, -./ 0 12 +3 14 -5 16 78 79:;sccs_idLjava/lang/String; ConstantValue< copyright=()VCodeLineNumberTable readXmlFile*(Ljava/lang/String;)Lorg/w3c/dom/Document; writeXmlFile+(Lorg/w3c/dom/Document;Ljava/lang/String;)Vtraverse(Lorg/w3c/dom/Node;)V SourceFileBasicXmlParser.java #org/apache/xerces/parsers/DOMParser >? @Aorg/xml/sax/SAXExceptionB CDE FGjava/io/IOException "#H IJ KD LM F? NOP QR STBasicXmlParserjava/lang/Object}sccs @(#)41 1.2 src/43haes/usr/sbin/cluster/haws/sbin/BasicXmlParser.java, hacmp.assist, 61haes_r714 1/14/04 08:17:42(C) Copyright IBM Corp. 2003parse(Ljava/lang/String;)V getDocument()Lorg/w3c/dom/Document;java/lang/SystemerrLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/Object;)Vorg/w3c/dom/Node getNodeType()Sout getNodeName()Ljava/lang/String; getChildNodes()Lorg/w3c/dom/NodeList;org/w3c/dom/NodeList getLength()Iitem(I)Lorg/w3c/dom/Node;!!* )*2YM,+,N:N:N-$ 2 16 7>89:!>$;&<.=0? !"*+  FG"#|D+ = + +N-#6-*- & LM NOP#Q1R=QCT$%l k@%o/םa֝a֝a&2vT./usr/es/sbin/cluster/haws/sbin/GetServerNames.classso1n - ./0 1 2 3 4 .56 789:; <= <>? @A <BC DE <FG <H IJ IKLsccs_idLjava/lang/String; ConstantValueM copyrightNmain([Ljava/lang/String;)VCodeLineNumberTable'(Ljava/lang/String;Ljava/lang/String;)Vusage()Vtraverse'(Lorg/w3c/dom/Node;Ljava/lang/String;)V SourceFileGetServerNames.java '(O PQGetServerNames %& %( RS )* TU$Usage: GetServerNames file-name typeV WXwhere file-name: XML file to parse0 type: either APPLICATION_SERVER ot NODE_AGENTY Z[ \] serverEntries^ _` ab serverNamec de f] serverType ghi jk lmBasicXmlParser}sccs @(#)42 1.2 src/43haes/usr/sbin/cluster/haws/sbin/GetServerNames.java, hacmp.assist, 61haes_r714 1/14/04 08:17:48(C) Copyright IBM Corp. 2003java/lang/Systemexit(I)V readXmlFile*(Ljava/lang/String;)Lorg/w3c/dom/Document;outLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)Vorg/w3c/dom/Node getNodeType()S getNodeName()Ljava/lang/String;java/lang/String compareTo(Ljava/lang/String;)I getAttributes()Lorg/w3c/dom/NamedNodeMap;org/w3c/dom/NamedNodeMap getNamedItem&(Ljava/lang/String;)Lorg/w3c/dom/Node; getNodeValue getChildNodes()Lorg/w3c/dom/NodeList;org/w3c/dom/NodeList getLength()Iitem(I)Lorg/w3c/dom/Node;!  !"#D* Y*2*2L$'( ) +,%&#P *+, *+N*-,$/0 12456 '(#I!    $9:;< =)*#+>J+<+:::,  +:&6*,$6 ABD"E2FBGKHSJ[K`LoM}LO+,##### kκ%o?K/םa֝a֝a&?K2vT./usr/es/sbin/cluster/haws/sbin/subsys/db2/importssso#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/haws/sbin/subsys/db2/import.sh 1.22 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)27 1.22 src/43haes/usr/sbin/cluster/haws/sbin/subsys/db2/import.sh, hacmp.assist, 61haes_r720, 1539B_hacmp720 9/11/15 17:33:12 # ############################################################################### # # This script performed the low-level task of importing the DB2 # configuration into HACMP. # DB2 Package name DB2_PACKAGE_NAME="db2_08_01.db2.engn" # Version variables DB2_VERSION_81="8.1" DB2_VERSION="" # The directory where DB2 is installed DB2_INSTALL_DIR="" # The volume group where DB2 is configured. We'll need to make sure # this is made highly available. DB2_VG="" # Specifies the name of the node where DB2 will fallover to. DB2_FALLOVER_NODE="" # Specifies the instance home and name DB2_INSTANCE_HOME="" DB2_INSTANCE_NAME="" DB2_DATABASE_NAME="" # Specified thed default installation directory DB2_DEFAULT_INSTALL_DIR="/usr/opt/db2_08_01" DB2_DEFAULT_DATABASE="sample" # ############################################################################### # # SCRIPT DEFINITION SECTION # ############################################################################### # Define Functions # # This section should be used to define functions used by this script. # The following functions are defined: # # verify_db2_version - Verifies that the DB2 version is # at the correct level. # # get_db2_install_dir - Find the websphere installation directory. # This function will also determine the vg # that websphere is installed under. # # parse_db2_config - Parses the websphere configuration files and # loads internal variables # # validate_db2_config - This name is a little misleading. What it # does is to make sure the Websphere config # files contain nodes that are defined in # hacmp. It will peform other checks too, but # the intent is to make sure the import process # will work. # generate_import_script - Generate the actual script that will be used # to import db2 configuration information # into hacmp ############################################################################### ############################################################################### # Function: verify_db2_version ############################################################################### # # Make sure that DB2 is at version 8.1.1 ############################################################################### verify_db2_version() { logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Checking DB2 version..." DB2_VERSION=$(lslpp -Lc $DB2_PACKAGE_NAME 2>/dev/null | sed -e '/^#/d' | cut -f3 -d':' | cut -f 1,2 -d '.') logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "DB2 Version = $DB2_VERSION\n" case $DB2_VERSION in $DB2_VERSION_81) logmsg HAWS_INFO "$MSG_DB2_VER81_DETECTED" "IBM DB2 UDB v8.1 detected\n" ;; "") logmsg HAWS_ERROR "$MSG_DB2_NOT_INSTALLED" "IBM DB2 UDB could not be found. Please install IBM DB2 UDB v8.1\n" exit $HAWS_EXIT_FAIL ;; *) logmsg HAWS_ERROR "$MSG_DB2_UNKNOWN_VERSION" "Unsupported version of DB2 UDB: %s. Please install IBM DB2 UDB v8.1\n" $DB2_VERSION exit $HAWS_EXIT_FAIL esac } ############################################################################### # Function: get_db2_install_dir ############################################################################### # # It doesn't seem possible to figure out where DB2 is installed # by looking at the results from lslpp. We'll have to hardcode this # location for now. Keep this function in place though just in case # we are able to programmtically figure out where the darn thing is # installed. ############################################################################### get_db2_install_dir() { logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Getting db2 installation directory..." if [[ -z $DB2_INSTALL_DIR ]] then DB2_INSTALL_DIR=$DB2_DEFAULT_INSTALL_DIR fi logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Directory = $DB2_INSTALL_DIR" } ############################################################################### # Function: parse_db2_config ############################################################################### # Get the DB2 Instance Directory. This should be on a shared volume group ############################################################################### parse_db2_config() { DB2_INSTANCE_DIR=$(lsuser -a home $DB2_INSTANCE_NAME | cut -d'=' -f2) logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "DB Directory = $DB2_INSTANCE_DIR" } ############################################################################### # Function: get_db2_vg ############################################################################### # # We need to figure out where our filesystem is located. For now, force # the user to pass this information into us. ############################################################################### get_db2_vg() { logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Getting the vg for DB2 Database Instance: $DB2_INSTANCE_DIR\n" VG="" if [[ -d "$DB2_INSTANCE_DIR" ]] ; then findvg $DB2_INSTANCE_DIR"/sqllib" if (( $? == $HAWS_EXIT_FAIL )) then exit $HAWS_EXIT_FAIL fi DB2_VG=$VG fi if [[ -z $DB2_VG ]] then logmsg HAWS_ERROR "$MSG_DB2_UNKNOWN_VG" "Can't get the volume group for DB2 directory: %s\n" $DB2_INSTANCE_HOME exit $HAWS_EXIT_FAIL fi logmsg HAWS_INFO "$MSG_DB2_VG_FOUND" "DB2 Volume group = %s\n" $DB2_VG } ############################################################################### # Function: validate_db2_config ############################################################################### # # Validate the DB2 configuration information against HACMP. Make # sure it makes sense to import this stuff. ############################################################################### validate_db2_config() { logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Validating DB2 configuration..." DB2NODES=$(/usr/bin/su - $DB2_INSTANCE_NAME "-c echo \\${VWSPATH}/db2nodes.cfg") if [[ -z $(grep -w "$DB2_SERVICE_LABEL" "$DB2NODES") ]] ; then logmsg HAWS_WARN "$MSG_DB2_WARN_DB2NODESCFG" "The supplied PowerHA SystemMirror service label (%s) is not found in the db2nodes.cfg.\n" $DB2_SERVICE_LABEL fi DB2RHOSTS=$(/usr/bin/su - $DB2_INSTANCE_NAME "-c echo \\${HOME}/.rhosts") if [[ ! -f "$DB2RHOSTS" ]] ; then logmsg HAWS_WARN "$MSG_DB2_WARN_DB2RHOSTS" "Missing .rhosts file for %s.\n" $DB2_INSTANCE_NAME fi #Try to ping database. if ! /usr/bin/su - $DB2_INSTANCE_NAME -c "db2 connect to $DB2_DATABASE_NAME" > /dev/null 2>&1 then logmsg HAWS_WARN $MSG_DB2_MON_CONNECT_FAILED "Unable to connect to the database: %s.\n" $DB2_DATABASE_NAME logmsg HAWS_WARN $MSG_DB2_NOT_ACCESSIBLE "If database %s cannot be accessed, application monitoring will fail.\n" $DB2_DATABASE_NAME else logmsg HAWS_TRACE $MSG_DB2_MON_CONNECT_SUCCEEDED "Connected to the database: %s.\n" $DB2_DATABASE_NAME if ! /usr/bin/su - $DB2_INSTANCE_NAME -c "db2 ping $DB2_DATABASE_NAME" > /dev/null 2>&1 then logmsg HAWS_WARN $MSG_DB2_MON_PING_FAILED "Unable to ping the database: %s.\n" $DB2_DATABASE_NAME logmsg HAWS_WARN $MSG_DB2_NOT_ACCESSIBLE "If database %s cannot be accessed, application monitoring will fail.\n" $DB2_DATABASE_NAME else logmsg HAWS_TRACE $MSG_DB2_MON_PING_SUCCEEDED "Ping'ed the database: %s.\n" $DB2_DATABASE_NAME fi /usr/bin/su - $DB2_INSTANCE_NAME -c "db2 disconnect $DB2_DATABASE_NAME" > /dev/null 2>&1 fi # If not Validating, there is no need to do anything else. if (( $VALIDATE_FLAG != 1 )) ; then return fi # Check for the configuration file logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking Configuration file $cfg_script" if [[ ! -f $cfg_script ]] ; then logmsg HAWS_ERROR $MSG_CONFIG_FILE_NOT_FOUND "The configuration file %s was not found.\n" $cfg_script return fi # Check the Configuration script for matching items logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking DB2_INSTANCE_DIR $DB2_INSTANCE_DIR" if [[ -z $(grep -w "DB2_INSTANCE_DIR=$DB2_INSTANCE_DIR" $cfg_script) ]] ; then logmsg HAWS_ERROR $MSG_DB2_NO_MATCH_INSTANCE_DIR "The DB2 Instance Directory %s does not match value in %s\n" $DB2_INSTANCE_DIR $cfg_script fi logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking DB2_INSTANCE_NAME $DB2_INSTANCE_NAME" if [[ -z $(grep -w "DB2_INSTANCE_NAME=$DB2_INSTANCE_NAME" $cfg_script) ]] ; then logmsg HAWS_ERROR $MSG_DB2_NO_MATCH_INSTANCE_NAME "The DB2 Instance Name %s does not match value in %s\n" $DB2_INSTANCE_NAME $cfg_script fi logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking DB2_DATABASE_NAME $DB2_DATABASE_NAME" if [[ -z $(grep -w "DB2_DATABASE_NAME=$DB2_DATABASE_NAME" $cfg_script) ]] ; then logmsg HAWS_ERROR $MSG_DB2_NO_MATCH_DATABASE_NAME "The DB2 Database Name %s does not match value in %s\n" $DB2_DATABASE_NAME $cfg_script fi } ############################################################################### # Function: generate_import_script ############################################################################### # # Write the script that will be used to import the db2 configuration # information into HACMP. ############################################################################### generate_import_script() { # Setup the variable names here db2_start_script="$HAWS_HOME/sbin/subsys/db2/startDB2" db2_stop_script="$HAWS_HOME/sbin/subsys/db2/stopDB2" db2_monitor_script="$HAWS_HOME/sbin/subsys/db2/monitor_db2" # This is the script that does the actual import logmsg HAWS_TRACE "$MSG_CREATE_IMPORT" "Generating the import script...\n" echo "#!/bin/sh" > $create_script echo "# Script Automatically created on $(date)" >> $create_script echo "# Any changes made to this file will be lost next time" >> $create_script echo "# the DB2 UDB configuration information is imported" >> $create_script echo " " >> $create_script echo ". $clhaws_functions" >> $create_script echo " " >> $create_script echo "get_cluster_state" >> $create_script echo "if [[ \$CLUSTER_STATE -ne 0 ]] ; then" >> $create_script echo "logmsg HAWS_ERROR $MSG_CLUSTER_NOT_STABLE \"Cluster is not in stable state.\\\\n\"" >> $create_script echo "exit 1" >> $create_script echo "fi" >> $create_script echo " " >> $create_script echo "# Create the application server " >> $create_script echo "$CLADDSERV -s'$asname' -b'$db2_start_script $cfg_script' -e'$db2_stop_script $cfg_script'" >> $create_script echo "logmsg HAWS_INFO $MSG_APP_SERVER_CREATED \"Application Server %s created.\\\\n\" \"$asname\"" >> $create_script echo " " >> $create_script echo "# Create the resource group " >> $create_script echo "$CLADDGRP -g '$rgname' -s 'ignore' -n '$(hostname) $DB2_FALLOVER_NODE' -S 'OHN' -O 'FNPN' -B 'FBHPN'" >> $create_script echo "logmsg HAWS_INFO $MSG_RESOURCE_GROUP_CREATED \"Resource Group %s created.\\\\n\" \"$rgname\"" >> $create_script echo " " >> $create_script echo "# Create the application monitor" >> $create_script echo "$CLADDAPPMON MONITOR_TYPE=user name='$asname' INVOCATION='$mon_mode' RESOURCE_TO_MONITOR='$asname' MONITOR_METHOD='$app_monitor_script' MONITOR_INTERVAL='120' STABILIZATION_INTERVAL='240' RESTART_COUNT='3' RESTART_INTERVAL='1440' FAILURE_ACTION='fallover' CLEANUP_METHOD='$db2_stop_script $cfg_script' RESTART_METHOD='$db2_start_script $cfg_script' HUNG_MONITOR_SIGNAL='9'" >> $create_script echo "logmsg HAWS_INFO $MSG_APP_MON_CREATED \"Application Monitor for application server %s created.\\\\n\" \"$asname\"" >> $create_script echo " " >> $create_script echo "# Create the resource to monitor now" >> $create_script echo "$CLADDRES -g '$rgname' APPLICATIONS='$asname' VOLUME_GROUP='$DB2_VG' SERVICE_LABEL='$DB2_SERVICE_LABEL'" >> $create_script echo "logmsg HAWS_INFO $MSG_RESOURCES_CREATED \"Resources added to resource group %s.\\\\n\" \"$rgname\"" >> $create_script echo " " >> $create_script echo "logmsg HAWS_INFO $MSG_IMPORT_CREATE_COMPLETE \"%s import create complete.\\\\n\" DB2" >> $create_script echo " " >> $create_script # This is the script that backs out the changes logmsg HAWS_TRACE "$MSG_CREATE_REMOVE" "Generating the remove script...\n" echo "#!/bin/sh" > $delete_script echo "# Script Automatically created on $(date)" >> $delete_script echo "# Any changes made to this file will be lost next time" >> $delete_script echo "# the DB2 UDB configuration information is imported" >> $delete_script echo " " >> $delete_script echo ". $clhaws_functions" >> $delete_script echo " " >> $delete_script echo "get_cluster_state" >> $delete_script echo "if [[ \$CLUSTER_STATE -ne 0 ]] ; then" >> $delete_script echo "logmsg HAWS_ERROR $MSG_CLUSTER_NOT_STABLE \"Cluster is not in stable state.\\\\n\"" >> $delete_script echo "exit 1" >> $delete_script echo "fi" >> $delete_script echo " " >> $delete_script echo "# Remove the resources " >> $delete_script echo "$CLRMRES -g '$rgname'" >> $delete_script echo "logmsg HAWS_INFO $MSG_RESOURCES_DELETED \"Resources removed to resource group %s.\\\\n\" \"$rgname\"" >> $delete_script echo " " >> $delete_script echo "# Remove the application monitor " >> $delete_script echo "$CLRMAPPMON $asname" >> $delete_script echo "logmsg HAWS_INFO $MSG_APP_MON_DELETED \"Application Monitor for application server %s deleted.\\\\n\" \"$asname\"" >> $delete_script echo " " >> $delete_script echo "# Remove the application server " >> $delete_script echo "$CLRMSERV $asname" >> $delete_script echo "logmsg HAWS_INFO $MSG_APP_SERVER_DELETED \"Application Server %s deleted.\\\\n\" \"$asname\"" >> $delete_script echo " " >> $delete_script echo "# Remove the resource group " >> $delete_script echo "$CLRMGRP -g $rgname" >> $delete_script echo "logmsg HAWS_INFO $MSG_RESOURCE_GROUP_DELETED \"Resource Group %s deleted..\\\\n\" \"$rgname\"" >> $delete_script echo " " >> $delete_script echo "logmsg HAWS_INFO $MSG_IMPORT_DELETE_COMPLETE \"%s import delete complete.\\\\n\" WAS" >> $delete_script echo " " >> $delete_script # Create the configuration script where application specific settings are stored logmsg HAWS_TRACE "$MSG_CREATE_CONFIG" "Generating config file...\n" echo "#!/bin/sh" > $cfg_script echo "# Script Automatically created on $(date)" >> $cfg_script echo "# Any changes made to this file will be lost next time" >> $cfg_script echo " " >> $cfg_script echo "DB2_INSTANCE_DIR=$DB2_INSTANCE_DIR" >> $cfg_script echo "DB2_INSTANCE_NAME=$DB2_INSTANCE_NAME" >> $cfg_script echo "DB2_DATABASE_NAME=$DB2_DATABASE_NAME" >> $cfg_script echo "#!/bin/sh" > $app_monitor_script echo "# Script Automatically created on $(date)" >> $app_monitor_script echo "# Any changes made to this file will be lost next time" >> $app_monitor_script echo "# the DB2 UDB configuration information is imported" >> $app_monitor_script echo " " >> $app_monitor_script echo "# DB2 UDB monitor script " >> $app_monitor_script echo " " >> $app_monitor_script echo "$db2_monitor_script \"$cfg_script\"" >> $app_monitor_script echo " " >> $app_monitor_script echo "exit \$?" >> $app_monitor_script complete_scripts $DB2_FALLOVER_NODE } ############################################################################### # # Function: process_arguments # This is a subsystem-specific version of the routine that processes # command line arguments. # # -i Specifies the instance home directory # -n Specified the fallover node ############################################################################### process_arguments() { logmsg HAWS_DEBUG "$MSG_DB2_PROCARG" "Processing 'db2' arguments...\n" while getopts :i:n:d:l: c do case $c in i) DB2_INSTANCE_NAME=$OPTARG logmsg HAWS_INFO "$MSG_DB2_INST_NAME_SET" "DB2 Instance Name is specified as %s\n" $DB2_INSTANCE_NAME ;; n) DB2_FALLOVER_NODE=$OPTARG logmsg HAWS_INFO "$MSG_FALLOVER_NODE_NAME_SET" "Fallover Node specified as %s\n" $DB2_FALLOVER_NODE ;; d) DB2_DATABASE_NAME=$OPTARG logmsg HAWS_INFO "$MSG_DB2_DATABASE_NAME_SET" "DB2 database name set to %s\n" $DB2_DATABASE_NAME ;; l) DB2_SERVICE_LABEL=$OPTARG logmsg HAWS_INFO "$MSG_SERVICE_LABEL_SET" "Service Label set to %s\n" $DB2_SERVICE_LABEL ;; \?) logmsg HAWS_ERROR "$MSG_UNKNOWN_OPTION" "Unrecognized command line option specified\n" exit $HAWS_EXIT_FAIL;; esac done logmsg HAWS_DEBUG "$MSG_DB2_PROCDONE" "Done processing 'db2' arguments...\n"; status=0 # Make sure that a fallover node was specified if [[ -z $DB2_FALLOVER_NODE ]] then logmsg HAWS_ERROR "$MSG_NO_FALLOVER" "You must specify a fallover node using the -n flag\n" status=1 fi # Make sure that a service label was specified if [[ -z $DB2_SERVICE_LABEL ]] then logmsg HAWS_ERROR "$MSG_NO_SERVICE_LABEL" "You must specify a service label using the -l flag\n" status=1 fi # Make sure that an instance name was specified if [[ -z $DB2_INSTANCE_NAME ]] then logmsg HAWS_ERROR "$MSG_DB2_NO_INST_NAME" "You must specify an instance name using the -i flag\n" status=1 fi # Make sure that a database was specified. If not, then default # to the "SAMPLE" database if [[ -z $DB2_DATABASE_NAME ]] then logmsg HAWS_INFO "$MSG_DB2_USING_DEFAULT_DB" "No database specified. Using default database: %s\n" $DB2_DEFAULT_DATABASE DB2_DATABASE_NAME=$DB2_DEFAULT_DATABASE fi if (( status != 0 )) then exit $HAWS_EXIT_FAIL fi } ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # to perform the actual script execution. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### process_arguments $* verify_db2_version parse_db2_config get_db2_vg create_script_names "db2" $DB2_INSTANCE_NAME"_"$(hostname) $DB2_FALLOVER_NODE validate_db2_config # If not Validating, generate the scripts if (( $VALIDATE_FLAG != 1 )) then generate_import_script fi f k%o/םa֝a֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsys/db2/monitor_db2#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/haws/sbin/subsys/db2/monitor_db2.sh 1.8 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)28 1.8 src/43haes/usr/sbin/cluster/haws/sbin/subsys/db2/monitor_db2.sh, hacmp.assist, 61haes_r720, 1539B_hacmp720 9/11/15 17:34:50 # ############################################################################### # # This script is used to monitor a DB2 instance # # This script must return one of the following values: # 0: If the application is healthy # 1: If the application is dead or otherwise unhealthy # ############################################################################### # These are the exit status codes. No other values are useful so we break # down the possible returns as either Healthy or Dead. EXIT_DEAD=1 EXIT_HEALTHY=0 STATUS="" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=init set -x fi # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [[ -z $HAWS_HOME ]] then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -s "$clhaws_functions" ]]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: check_db2_status ############################################################################### # # Check the status of the DB2 database. We do this by the following # process: # 1. Connect to the specified database. # 2. Ping the database # 3. Disconnect. ############################################################################### check_db2_status() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=check_db2_status set -x fi logmsg HAWS_TRACE $MSG_DB2_MON_CHECKING "Checking the status DB2...\n" STATUS=$EXIT_HEALTHY if ! /usr/bin/su - $DB2_INSTANCE_NAME -c "db2 connect to $DB2_DATABASE_NAME" then logmsg HAWS_ERROR $MSG_DB2_MON_CONNECT_FAILED "Unable to connect to the database: %s.\n" $DB2_DATABASE_NAME STATUS=$EXIT_DEAD else logmsg HAWS_INFO $MSG_DB2_MON_CONNECT_SUCCEEDED "Connected to the database: %s.\n" $DB2_DATABASE_NAME if ! /usr/bin/su - $DB2_INSTANCE_NAME -c "db2 ping $DB2_DATABASE_NAME" then logmsg HAWS_ERROR $MSG_DB2_MON_PING_FAILED "Unable to ping the database: %s.\n" $DB2_DATABASE_NAME STATUS=$EXIT_DEAD else logmsg HAWS_INFO $MSG_DB2_MON_PING_SUCCEEDED "Ping'ed the database: %s.\n" $DB2_DATABASE_NAME fi /usr/bin/su - $DB2_INSTANCE_NAME -c "db2 disconnect $DB2_DATABASE_NAME" fi } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. # ############################################################################### read_config() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=read_config set -x fi cfgfile=$1 logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.8' fi init generic_process_arguments $* read_config $* check_db2_status exit $STATUS ###### k?%oV/םa֝a֝a&V2vT./usr/es/sbin/cluster/haws/sbin/subsys/db2/startDB2b2#!/bin/sh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/haws/sbin/subsys/db2/startDB2.sh 1.9 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)29 1.9 src/43haes/usr/sbin/cluster/haws/sbin/subsys/db2/startDB2.sh, hacmp.assist, 61haes_r720, 1539B_hacmp720 9/11/15 11:26:56 # ############################################################################## # # This is a wrapper script for starting up DB2 # ############################################################################### DB2_INSTANCE_NAME="" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [ "x$HAWS_HOME" = "x" ]; then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [ ! -f "$clhaws_functions" ]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: start_db2 ############################################################################### # # Start the database ############################################################################### start_db2() { logmsg HAWS_TRACE $MSG_DB2_START "Starting DB2...\n" /usr/bin/su - $DB2_INSTANCE_NAME "-c db2start" } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. This will contain the following # variables: # # DB2_INSTANCE_HOME - Home directory of our instance # DB2_INSTANCE_NAME - Name of the instance # DB2_DATABASE_NAME - Name of the database we're making highly available # ############################################################################### read_config() { cfgfile=$1 logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### init generic_process_arguments $* read_config $* start_db2 exit $HAWS_EXIT_SUCCESS ME k|%oV/םa֝a֝a&V2vT./usr/es/sbin/cluster/haws/sbin/subsys/db2/stopDB2b2#!/bin/sh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/haws/sbin/subsys/db2/stopDB2.sh 1.7 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)30 1.7 src/43haes/usr/sbin/cluster/haws/sbin/subsys/db2/stopDB2.sh, hacmp.assist, 61haes_r720, 1539B_hacmp720 9/11/15 11:28:06 # ############################################################################### # # This is a wrapper script for stopping DB2 # ############################################################################### DB2_INSTANCE_NAME="" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [ "x$HAWS_HOME" = "x" ]; then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [ ! -f "$clhaws_functions" ]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: stop_db2 ############################################################################### # # Stop the database ############################################################################### stop_db2() { set -x logmsg HAWS_TRACE $MSG_DB2_STOP "Stopping DB2...\n" /usr/bin/su - $DB2_INSTANCE_NAME "-c db2stop" } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. This will contain the following # variables: # # DB2_INSTANCE_HOME - Home directory of our instance # DB2_INSTANCE_NAME - Name of the instance # DB2_DATABASE_NAME - Name of the database we're making highly available # ############################################################################### read_config() { cfgfile=$1 logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### init generic_process_arguments $* read_config $* stop_db2 exit $HAWS_EXIT_SUCCESS ME lN%oNB/םa֝a֝a&*2vT./usr/es/sbin/cluster/haws/sbin/subsys/dm/import2b2   #e "_cinorst$AEMRSadghlmp>DGILNOT\fu'-./=BCFHPUVWvy %;[]bw)01:`kx(,23456KX!Yz{|}*79?^q8@Z BgÃpGF F 21ȕFz*+ѭa9f|:`@N@BaTB!OT+s Qm BTAZ$T^SMHH>|qF8"0FWHvgٟS %F8XJ( SԄn6S\'p  @ U5+L})if}l.qZ\#K1JjV#6H>JzYޝҳi``iVlYl*v 38@#ȍq8s> p$$ zxP  #t +IP=R)DA 2 PehPYyN4Pez˄JB*#tt0€ @v|IHSQJkZZ^V@ЅlRFfMᖺZV|r1E;|R 5pKð/NQZ0 kqm@5JHJ8QbF 9F$@a4 5p8AxMU/EHsmݥ,r1]Yd5g)hS)hUBq%!L(o`x-,29H&ϗFh-U/-(²@WQIU,EiY9L{qmId3J^JS.wZUkqzЍ*L1 #pDžgĔ)%Jy9Ȫô)(egi;U]eD B}U!M eJMEEr"TAK!mk RMU/EH$TުU\QUVA,s<`Ü 5 4x[Z|IKԹ\ VW(FZ"RSYQѻKVZ%x 08ymkv|i a 8$2D;?φYHFqXhω) j[ GQIU, VVRP_XJ4ii``ω)xV@Emmmez˄*^JkiUKz2µgmmmmU/B5B"^Yުrgmmml l74knuu8/]n74kz^E*`x-&}mmmՖu-(efa(D5϶mmme1gbQ\?ώD BUv25—:BQ($  \PU,K!(P;6Y& ᆆ,a#\r[ S—:BQ 'm#O@q`ZUu@0 kqXRV(#R€ ’V  @3H!,mkQ<`h`ݚY pCF4aJHJ8/0 z'm ލZFv \)s%aZ\r1E;6Ͷz4XÜ$i"CB,0 zp edO&#Y pÜ$i) $hi#F74aJHJ8+8}X,a4 50M G48H[HFnhðΐp 2W[}m"qklZqD@k#On D"O$h\ G#B2UהiXka\Xyh88=}Xk@vY& O< 9p0xF74a*Z2^)"H'am^iTUW ; Z>X AƀĜ`$8vY& O< 9$a"d$i"A1UהiaK!(";+h#JaPXÜ$i"A}6Ň&88ٶD^ c?σdIgB4*6 yY=Q.wᖺZ] hFEUm buT|)%Jy9ȪòBϔJA2FqH+t g؝,FEU\&@|edO&"7fr\09u"ImҨ5BBBZͶ1 #pDžjUߚXÜ `h 0i aƷqaIXTJKK^ 7 HFyZ @[6Y& ᆆ٥ 40Dk@ksFBvb/&bAF჏k%>+%(?φiI*UkEW.wg% YXJ8kaJNp`ͶVIDyh8a#vig 5 ѷZ)xQX AƀĜ`pвĆmAm ,a uTZqD@k02b\UK’TדJxa(NYLT qbf $`8 qa @hN0pmH3mkQ<`@8,a"$74aJJZsU^P[sX}a(XQ`5$(l;>EX$oUKϔJA2Ft"RSYQȦ#JN "[>YޅrȁMK/VZ /)UHSRJ g(IےYϔJA0 f+$֢x<404ᆆq nh*$k(efa(oѕp*$kTޅ4evRVB)VͶL bČ8appp,:\XԬͶ)3m Rb(efa(Vٶ50M 40Dn,a#\rsCTx6Q)Q Q7Qk60(żn` R:Mj'Aƞyg 5Hq$DDJ^|R 5A[`j4ѕqIA$[&>p^Vqfo5T(efa(>p^FROB50M 40Dn,a#\rsCTxL{q3r$i aƵm 3r$i aƅibf p^;>+z^몢5*^+KKVZ /)UK-(efa(D5pK?74knuu8/P c6.WR3 oEKmYԪ3zpy 2 PehT3ÚͶIgR]|BXyh8<ƅPP2 I`VK9drҌ+)[K0M8Ъ!PVI, nIfm%!M jz%+}Juf+$֢x<4HM٥ipIn74k,]G $$$ZmIf B!TQ^-knͶ,ߐ|qk%ѭl n/5Qf[ԖoDW=Db,W-U!LR Up2tl bo[u8/VmIfU/ Ր㑊)LѬ%Ft)m&bo[u8/VmIfbo[u8/VmIfުhbQpxѭ6ޤspxѭ%T+su*mX[hG ՛moRY)@L(4 HF0,:\[žvm|Y%ZqDY ph {$ ΥQ]G 򉺏>rYԬu8/\[&>p^;F>p^kzVIDyh8q8{O4FbXJ9 );FI2děq6"M;F>p^kz;F>p^f[Ԗokz^EfEW;F>p^kz,4y 8Ĉ x 8x$8 HČ jp^M|Ax8Ĉ `p |ۨzmK5Y& @kqH84L$hM.z5aYO+a(\.xL5I&N$ۉiVmn/5Qf[Ԗnn/5Qc6ޤ~ [R+7ެҌ+),^-knͶ,G0a桂8 0$ -E "qyr!Okhr "}"V+7Nr*P$2dMKqEk&bo[u8/VmIfbo[u8/V3mK5Y& @k DN < '4AYyNkyYunL2q&0bo[u8/VmIfbo[u8/V3m$)MU/QQb/)V^z;6Y& Gn,4L$k4"F4maT;ZBzXͶ,@D*7 ťjm|Y%0d5UQ\5mҵn>p^kzȊ稌SeJe)A[*^VTՂ,^-+VnͶ,ߪᖺZ\r1E;|R 54^S,^-+VnͶ,,^-+VnͶ,М[QmP_XJ4n/uQf[Ԗnn/uQc6ޤSꕥnnQ JպۨzmK60(p^kz)biZ[u8/VmIfbiZ[u8/V3mK7i ^tY雅ťjm|Y%Xh<0BxVvbiZ[u8/VmIf$֢x<48qY qDDPpGHјOHtӵ)ijN"}"EI&N$ۉVmn/uQf[Ԗnn/uQc6ޤ~>֐yVFrҌ+)biZ[u8/VmIf<8 Z4+[px[6ޤUkQ<`@8,Dp^kz,4y iXiVbiZ[u8/VmIf$֢x<48qY q@č= i#Fbm1uՃѬ%RZ[H$2dMKFEk&biZ[u8/VmIfbiZ[u8/V3mK7i ^tYsUpx[6ޤK yO QZۅťjm|Y%Zpqg 5ǚMpȈ8a$hM$Vo6r*S%jm dɓ6m.i[ťjm|Y%ťjm|XͶ,dO&#9p8a$kH p^kzeVQNeLѬ%:%%5%,^-u8/VmIfbo(zmK4L{qdX9O40IX[&>p^kz1 #pDžibf $`8mn/򉺏6ޤF!dXÜ$4[żnͶ,ч9Okhm,a@ć=ۅżnmIf B!TQ^-rҌ+)6ޤ~AFz*+;Fp5-XZ+VSu8/VmIfdEsF)2ȥzR lW/+*WFkn/iFG ՛moRYUK-ud*Ƹbwp^kz]w-(²zmK4rҌ+)&Q7Q&bhaYM|Y%ŢZQe7Qf[Ԗm&X[ŢZQe7Qc6Yun>p^Ō9DH@X,gqX@*ƴgĔ4)* +kQ{| ARHJ:E5T9#z#\.YdbV*ƴ `.^}+^ZXN$)M}҈W@X}dgy+)Z^Eu.b0OQ2\k@ f+$֢x<40 9 0t"I`|*ƴ 'XͶo'u%,ͶgKſB,mÜ`D=4,"HE<UkhN-mȁVw5∪.z2JKj/oHZLhVicpqǑ4"0X,ŀudO&<'r\@<4dW,V^QUFI^+HE=U/GUŬ AƀĜ`bc6/PUDkԹADj^)@ p^Kѭ%cteV֘18rK8RHJ,Nt#JJbwW$chG EkjK7jJ+Xs<Q`5$(lgÊhʸI`5S;ުzѐ)@X 0`N'UK6;۠]G Յ  kV%o#/םa֝a֝a&#2vT./usr/es/sbin/cluster/haws/sbin/subsys/dm/monitor_dm2#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/haws/sbin/subsys/dm/monitor_dm.sh 1.8 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)32 1.8 src/43haes/usr/sbin/cluster/haws/sbin/subsys/dm/monitor_dm.sh, hacmp.assist, 61haes_r720, 1522B_hacmp720 5/29/15 09:22:11 # ############################################################################### # # This script is used to monitor a Websphere Deployment Manager instance # The DM is monitored by calling into the "serverStatus.sh" shell # script provided by Websphere. The following is an example of what # this script will return if Deployment Manager is healthy: # # root@bede/usr/es/sbin/cluster/haws/sbin> /serverStatus.sh dmgr # ADMU0116I: Tool information is being logged in file # /usr/WebSphere/DeploymentManager/logs/dmgr/serverStatus.log # ADMU0500I: Retrieving server status for dmgr # ADMU0508I: The Deployment Manager "dmgr" is STARTED # # This script will look for the string: # "The Deployment Manager is STARTED" # Failure to detect this string will assume the worst and return the # a failure status. If the string is detected, then a zero is returned # # This script must return one of the following values: # 0: If the application is healthy # 1: If the application is dead or otherwise unhealthy # ############################################################################### # These are the exit status codes. No other values are useful so we break # down the possible returns as either Healthy or Dead. EXIT_DEAD=1 EXIT_HEALTHY=0 STATUS="" # Determine where Deployment Manager is installed WAS_INSTALL_DIR="" DM_SCRIPT="" # This will be filled in by sourcing a config file WAS_SERVER_NAME="" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=init set -x fi # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [[ -z $HAWS_HOME ]]; then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -s "$clhaws_functions" ]]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: check_server_status ############################################################################### # # Check the status of the server ############################################################################### check_server_status() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=check_server_status set -x fi logmsg HAWS_TRACE "$MSG_DM_MON_CHECKING" "Checking the status of the DM Server...\n" logmsg HAWS_TRACE "$MSG_CALLING_SCRIPT" "Calling script: %s %s\n" $DM_SCRIPT $WAS_SERVER_NAME if $DM_SCRIPT $WAS_SERVER_NAME | grep -q "The Deployment Manager \"$WAS_SERVER_NAME\" is STARTED" then logmsg HAWS_INFO "$MSG_DM_MON_IS_HEALTHY" "The Deployment Manager is healthy.\n" STATUS=$EXIT_HEALTHY else logmsg HAWS_INFO $MSG_DM_MON_IS_DEAD "The Deployment Manager is not healthy.\n" STATUS=$EXIT_DEAD fi echo $STATUS } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. This will contain the following # variables: # SERVER_NAME - The server name we need to monitor # ############################################################################### read_config() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=read_config set -x fi cfgfile=$1 logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile DM_SCRIPT=$WAS_INSTALL_DIR/bin/serverStatus.sh } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.8' fi init generic_process_arguments $* read_config $* check_server_status exit $STATUS : If  lN%ol/םa֝a֝a&G2vT./usr/es/sbin/cluster/haws/sbin/subsys/tds/importdm2   #e"S_ciorst $>ADERTaghlnpBCGILMNOW\dfmu'-./=FHPUV[]v %1;bwy()02:`kx5?Xz{|}!,34KYq&69*78^@Zj TXφ䈎"14=uQUj%tLgσ݆HNkb>:da[)V#.񂕌Ҟ3⑤ a[)`1΂PɊHW#UCMgφ䈎"1A3 m$P*]aTŀ.^,2Tŀ@TK3)&&YHd%JR4`VR l  A8@H 93kF41e+0Fn+hfS'kӵ SUk3v+KJLb^`b[tXiLJj3pX$XNMk/VKHѦ'kL=HN,Ue+xϠMYfnee2ګ^R.%eO<8' 4Pxq񈼁 hCЌӑBL3 #&0 q" h >2cP'&Mp'D0i"C9i"@g +/b0av!Xɀ+ Tt3s>zz)]RѦRNHɌB@ 'sPkR2` 3m <"f="<{74Z2,+ANHɀl4ͶM/%KQ\y'="i1燐rIx)8i bfSw:FLiEɠ+(r/EUEEɠ&B@l7x)8iy'=574qmtR bWԥ)U]#3?g3]U/()XɌ Zy4M)U^?bWԥ)U]#0$Ͷ^J4NzMAA=2XMhJV2c!!-3mAAɞ8sXe:sÏEN )baL]|,/ (Vzp,Ͷ^J4NzMAA=gp xsƐrg dső  i 9 H*Qu( 0UmTsDPxGcDPxǏp榃$X{xső im#=sƐrg,bm3m <"f="<{74XT]|gp xGH93zRi,?g؅c&ʓ(ITeUkɠyBc(L)UjR²4ʓ(IT 0ͶM< ;g Y`.%(Z, @ Ʀ,dž Y@`K3Ɓ ,K)‚3mA@SXjh9 x"Li54dH<0hp /\T |,@8f/%KQ\y'=E4{=Ex nj²7SA@SL0g0d(5Lφ]i9.\g"b;Zh;BLc&1Xtƕ 3+u}JQj>&mTsDPx͚h zїZŅuV&+)pHHI6f kLh"8 i 9 IHKV 54=4&mTsDPx͚h zїZŅuV&+)pHHI6f kLh"8 i) IHKV Ʀ5&PW^ \"#"'IDMᇍZ[y'=574qr0z 0,mX+DsMM=O$%Z[ג URWIE$M<=1a@SfvAJ R$r׆NEbf%\YJl&E6M=OU_HN,Ͷ+ ej+O$砈134Z2,+A=HcSA=H4Ͷ\"#F4VvfzƐ &SA=Hkq* ŚHKV %KQ\y'="4{=4^<ņ!דAiYYO)J阕qe+0"n5446U}!8S6جL3m <"cGcDPxǏpk\ȰM<88imDGh  M<88 &SA=$E$ U@|$%Z[ג URWIE$M<=1a@S܊Yy4Rԥ\"WR[ {c(MSA@S܊XULb0Ͷ^J4NzAA=3Ep"¹4dH<0hq"@1G"6%pY8 x$4r!djh9Ȑ x`ȓkq* ŚHKV %KQ\y'="4{=4^<ņY 9ּX^jV2cE{bf%\YJl&E6MURWIE$${@Ǟ׹Ijk^${bwURWIE$${@Ǟ׍ 9 K55=kc&2²7)J阕qe+0"n4xLÞԱ* Śba,?g؅c&sRfS Ś9kz^'kȮ/K)-uZh;BLc& ,)Xɍ+,x&mij2_HN, 0ͶRxMI@ZP-s6ڥ(UIBhi# .,P.TU'TsLjY2Bqfm44NxiP\@mRTM4ͶJR}*BqfUAER}+&_HN,Y;qca;RBqfmifĮ!FUvmLk^J4Nz)$E,h yx=4^xȡY^0R1;;R1HeI&Mmn8l'jVHN,Ͷ-,K͌ n8l'jVHN,Ͷ-,ұn8l'jVHN,Ͷ-,qNԭYmif%KQ\y'I&zIY (>I&zIiH@` 4pzHi"@,!;>9Ma B,ΩfuK3YRgT:,ΩfuK3Pe㱰[}!8S6ളbW6&h (Z^;+Uka㱰[}!8S6ളW <88pg4P#Ǣ 54<@`>"ÈX=f^H" @EvTk"hqjh9E!x"8㱰[}!8S6ളbWfl# `Vqca;RBqfmif%KQ\y'="4{=!Ȑx=4^xȡ"ºwI.ӺHyYȻ8^&LqNԭYmpZYqNԭYmpZYbqNԭYmpZY㱰[}!8S k^J4Nxq1"! E'RHt)e5etyvp"$ɓ&6m6jk&vmLkJ Śf\jTsƐ #<8IZH/DxpSGh"%;R"̯udɓ`rh9㱰[}!8S6ളsqca;RBqf&iMUR5YJZ)^^0Ͷ^J4Nzi-h x=4^#Ȉ"іJŅuV;-!;ԄBBBI k TYiK^o'jf\o΄q"V0Qu+e4YE+`[qcJZ[}!8S6ള~=n0PUh]| \ŁՉkn8iK^o'jf\oZC²7:'sГbyXɍ edƍ4K3)7v4u53m K77v4u53m K4'PG.+1FƔBqfmifƔBqf\+s}*m㱥-{YmpZY+Dq3Erh&zh/HKV;R׺ Ś-EpiRHXcܚ)<9M/JitXԪRVI&Mmn8iK^o'jf\mv4u53m K4[;R׺ Ś;R׺ Śf\oYi ުקty雎;R׺ ŚhI`p9U X;qcJZ[}!8S6ളW <4ah zHzBsDr)&Ԯ/8]4촄즬/8^Vr.P$2d&MV-dqҖHN,Ͷ-,qҖHN,6ള~B׺uN04;Pkⳑl e4m+esqcJZ[}!8S6ളW <4ah zh9E!zH" &Ԭ¹18캀_)Et0󁴭S &L6 iEmn8iK^o'jf\lf$RBMM=Ȥ 4Z/xGkqcJZ[}!8S6ളbW6&hUƔBqfmif%KQ\y'="4{=4"h$GEᇍ"SNHN,+s/ ÔLVr- lrI2dɰMMM=Ȥ 4Z/xGkqcJZ[}!8S6ളJŸ㱥-{YmpZY㱥-{YmifyFY^0ReF>M=Ȥ 4Z/xGD93`m <4aGc܊BENJDs܊muN09@]uՖP ƦR-${@D93`m <4aGc"/r)4$R.aG}m&sl-EpiRHYpLJrIyƑ 'pDYM ,2bdƣ7&Lmkc\hi@8xVͶmtRͶؤf/%KQ\y'=E4{=4䈋@[ "¸([HHI6amJR  3mzz)\*N瘑K)%ce h"9xDIp^kpjl^J4Nz)$E,GcxaE&D]Fn* b.y^a]U1izUJX$Ͷ+ o^yުW)s/..)%ce h"9R-MhRXɍ"^'kL^SVZ .ׄԜd^K+,VYYLהK'k dIϓZX]"F LhVYN%/)/bv4 Z43BqfLԭ$ .Zح1`%AJ/dev/null | sed -e '/^#/d' | cut -f 3 -d':' | cut -f 1,2 -d '.'` logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "WebSphere Version = $WAS_VERSION\n" # We need to be prepared to support version 6 of WebSphere so # case $WAS_VERSION in $WAS_VERSION_5) logmsg HAWS_INFO "$MSG_WAS_VER5_DETECTED" "WebSphere Version 5.0 detected\n" ;; $WAS_VERSION_6) logmsg HAWS_INFO "$MSG_WAS_VER6_DETECTED" "WebSphere Version 6.0 detected\n" logmsg HAWS_ERROR "$MSG_WAS_VER6_NOTSUPPORTED" "Version 6.0 is not supported\n" exit $HAWS_EXIT_FAIL ;; "") logmsg HAWS_ERROR "$MSG_WAS_NOT_INSTALLED" "WebSphere could not be found. Please install WebSphere v5.0\n" exit $HAWS_EXIT_FAIL ;; *) logmsg HAWS_ERROR "$MSG_WAS_UNKNOWN_VERSION" "Unsupported version of WebSphere: %s. Please install WebSphere v5.0\n" $WAS_VERSION exit $HAWS_EXIT_FAIL esac } ############################################################################### # Function: get_websphere_install_dir ############################################################################### # # Get the location where WebSphere is installed. Also, get the volume group # where websphere has its configuration files. ############################################################################### get_websphere_install_dir() { logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Getting websphere installation directory...\n" WAS_INSTALL_DIR=`lslpp -Lc $WAS_PACKAGE_NAME 2>/dev/null | sed -e '/^#/d' | cut -f9 -d':'` logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Directory = $WAS_INSTALL_DIR\n" } ############################################################################### # Function: get_ihs_install_dir ############################################################################### # # Get the location where IBM HTTP Server is installed. Also, get the volume group # where websphere has its configuration files. ############################################################################### get_ihs_install_dir() { logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Getting IHS installation directory...\n" IHS_INSTALL_DIR=`lslpp -Lc $IHS_PACKAGE_NAME 2>/dev/null | sed -e '/^#/d' | cut -f9 -d':'` logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Directory = \"$IHS_INSTALL_DIR\"\n" } ############################################################################### # Function: get_websphere_vg ############################################################################### # # Gets the volume group where the websphere configuration files exist. ############################################################################### get_websphere_vg() { logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Getting the vg for WebSphere...\n" VG="" if [[ -d "$WAS_INSTALL_DIR" ]]; then findvg $WAS_INSTALL_DIR"/bin" if [[ $? -eq HAWS_EXIT_FAIL ]]; then exit $HAWS_EXIT_FAIL fi WAS_VG=$VG fi if [[ "$WAS_VG" = "" ]]; then logmsg HAWS_ERROR "$MSG_WAS_UNKNOWN_VG" "Can't get the volume group for WebSphere directory: %s\n" $WAS_INSTALL_DIR exit $HAWS_EXIT_FAIL else logmsg HAWS_INFO "$MSG_WAS_VG_FOUND" "WAS Volume group = %s\n" $WAS_VG fi } ############################################################################### # Function: get_ihs_vg ############################################################################### # # Gets the volume group where the ihs configuration files exist. ############################################################################### get_ihs_vg() { logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Getting the vg for IBM HTTP Server...\n" VG="" if [[ -d "$IHS_INSTALL_DIR" ]]; then findvg $IHS_INSTALL_DIR"/bin" if [[ $? -eq HAWS_EXIT_FAIL ]]; then exit $HAWS_EXIT_FAIL fi IHS_VG=$VG fi if [[ "$IHS_VG" = "" ]]; then logmsg HAWS_WARN "$MSG_IHS_UNKNOWN_VG" "Can't get the volume group for IBM HTTP Server directory: %s\n" "$IHS_INSTALL_DIR" else logmsg HAWS_INFO "$MSG_IHS_VG_FOUND" "IHS Volume group = %s\n" $IHS_VG fi } ############################################################################### # Function: validate_webpshere_config ############################################################################### # # Validate the websphere configuration information against HACMP. Make # sure it makes sense to import this stuff. ############################################################################### validate_websphere_config() { logmsg HAWS_DEBUG "$MSG_DEBUG_MSG" "Validating WebSphere configuration..." conf_file="$IHS_INSTALL_DIR/conf/httpd.conf" if [[ ! -f $conf_file || $IHS_INSTALL_DIR != "" && -z $(grep "^ServerName" $conf_file | grep -w "$WAS_SERVICE_LABEL") ]] ; then logmsg HAWS_WARN "$MSG_IHS_WARN_SERVERNAME" "The supplied PowerHA SystemMirror service label (%s) is not found in the IHS ServerName in httpd.conf.\n" $WAS_SERVICE_LABEL fi # If not Validating, there is no need to do anything else. if [[ $VALIDATE_FLAG -ne 1 ]] ; then return fi # Check for the configuration file logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking Configuration file $cfg_script" if [[ ! -f $cfg_script ]] ; then logmsg HAWS_ERROR $MSG_CONFIG_FILE_NOT_FOUND "The configuration file %s was not found.\n" $cfg_script return fi # Check the Configuration script for matching items logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking WAS_SERVER_NAME $WAS_SERVER_NAME" if [[ -z $(grep -w "WAS_SERVER_NAME=\"$WAS_SERVER_NAME\"" $cfg_script) ]] ; then logmsg HAWS_ERROR $MSG_WAS_NO_MATCH_SERVER_NAME "The WAS Server Name %s does not match value in %s\n" $WAS_SERVER_NAME $cfg_script fi logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking WAS_INSTALL_DIR $WAS_INSTALL_DIR" if [[ -z $(grep -w "WAS_INSTALL_DIR=\"$WAS_INSTALL_DIR\"" $cfg_script) ]] ; then logmsg HAWS_ERROR $MSG_WAS_NO_MATCH_INSTALL_DIR "The WAS Installation Directory %s does not match value in %s\n" $WAS_INSTALL_DIR $cfg_script fi logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking WAS_VG $WAS_VG" if [[ -z $(grep -w "WAS_VG=\"$WAS_VG\"" $cfg_script) ]] ; then logmsg HAWS_ERROR $MSG_WAS_NO_MATCH_VG "The WAS Volume Group %s does not match value in %s\n" $WAS_VG $cfg_script fi logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking WAS_SERVICE_LABEL $WAS_SERVICE_LABEL" if [[ -z $(grep -w "WAS_SERVICE_LABEL=\"$WAS_SERVICE_LABEL"\" $cfg_script) ]] ; then logmsg HAWS_ERROR $MSG_WAS_NO_MATCH_SERVICE_LABEL "The WAS Service Label %s does not match value in %s\n" $WAS_SERVICE_LABEL $cfg_script fi if [[ $IHS_INSTALL_DIR != "" ]] ; then logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking IHS_INSTALL_DIR $IHS_INSTALL_DIR" if [[ -z $(grep -w "IHS_INSTALL_DIR=\"$IHS_INSTALL_DIR\"" $cfg_script) ]] ; then logmsg HAWS_ERROR $MSG_IHS_NO_MATCH_INSTALL_DIR "The IHS Installation Directory %s does not match value in %s\n" $IHS_INSTALL_DIR $cfg_script fi logmsg HAWS_DEBUG $MSG_DEBUG_MSG "Checking IHS_VG $IHS_VG" if [[ -z $(grep -w "IHS_VG=\"$IHS_VG\"" $cfg_script) ]] ; then logmsg HAWS_ERROR $MSG_IHS_NO_MATCH_VG "The IHS Volume Group %s does not match value in %s\n" $IHS_VG $cfg_script fi fi } ############################################################################### # Function: generate_import_script ############################################################################### # # Write the script that will be used to import the websphere configuration # information into HACMP. ############################################################################### generate_import_script() { # Setup the variable names here was_start_script="$HAWS_HOME/sbin/subsys/was/startWAS" was_stop_script="$HAWS_HOME/sbin/subsys/was/stopWAS" was_monitor_script="$HAWS_HOME/sbin/subsys/was/monitor_was" FALLOVER_VG="" # Compare IHS_VG and WAS_VG. If different, then both must be handled by the cluster. if [[ "$WAS_VG" = "$IHS_VG" ]] ; then FALLOVER_VG="$WAS_VG" else FALLOVER_VG="$WAS_VG $IHS_VG" fi # This is the script that does the actual import logmsg HAWS_TRACE "$MSG_CREATE_IMPORT" "Generating the import script...\n" echo "#!/bin/sh" > $create_script echo "# Script Automatically created on `date`" >> $create_script echo "# Any changes made to this file will be lost next time" >> $create_script echo "# the webshphere configuration information is imported" >> $create_script echo " " >> $create_script echo ". $clhaws_functions" >> $create_script echo " " >> $create_script echo "get_cluster_state" >> $create_script echo "if [[ \$CLUSTER_STATE -ne 0 ]] ; then" >> $create_script echo "logmsg HAWS_ERROR $MSG_CLUSTER_NOT_STABLE \"Cluster is not in stable state.\\\\n\"" >> $create_script echo "exit 1" >> $create_script echo "fi" >> $create_script echo " " >> $create_script echo "# Create the application server " >> $create_script echo "$CLADDSERV -s'$asname' -b'$was_start_script $cfg_script' -e'$was_stop_script $cfg_script'" >> $create_script echo "logmsg HAWS_INFO $MSG_APP_SERVER_CREATED \"Application Server %s created.\\\\n\" \"$asname\"" >> $create_script echo " " >> $create_script echo "# Create the resource group " >> $create_script echo "$CLADDGRP -g '$rgname' -s 'ignore' -n '`hostname` $WAS_FALLOVER_NODE' -S 'OHN' -O 'FNPN' -B 'FBHPN'" >> $create_script echo "logmsg HAWS_INFO $MSG_RESOURCE_GROUP_CREATED \"Resource Group %s created.\\\\n\" \"$rgname\"" >> $create_script echo " " >> $create_script echo "# Create the application monitor" >> $create_script echo "$CLADDAPPMON MONITOR_TYPE=user name='$asname' INVOCATION='$mon_mode' RESOURCE_TO_MONITOR='$asname' MONITOR_METHOD='$app_monitor_script' MONITOR_INTERVAL='120' STABILIZATION_INTERVAL='420' RESTART_COUNT='3' RESTART_INTERVAL='1800' FAILURE_ACTION='fallover' CLEANUP_METHOD='$was_stop_script $cfg_script' RESTART_METHOD='$was_start_script $cfg_script' HUNG_MONITOR_SIGNAL='9'" >> $create_script echo "logmsg HAWS_INFO $MSG_APP_MON_CREATED \"Application Monitor for application server %s created.\\\\n\" \"$asname\"" >> $create_script echo " " >> $create_script echo "# Create the resource to monitor now" >> $create_script echo "$CLADDRES -g '$rgname' APPLICATIONS='$asname' VOLUME_GROUP='$FALLOVER_VG' SERVICE_LABEL='$WAS_SERVICE_LABEL'" >> $create_script echo "logmsg HAWS_INFO $MSG_RESOURCES_CREATED \"Resources added to resource group %s.\\\\n\" \"$rgname\"" >> $create_script echo " " >> $create_script echo "logmsg HAWS_INFO $MSG_IMPORT_CREATE_COMPLETE \"%s import create complete.\\\\n\" WAS" >> $create_script echo " " >> $create_script # This is the script that backs out the changes logmsg HAWS_TRACE "$MSG_CREATE_REMOVE" "Generating the remove script...\n" echo "#!/bin/sh" > $delete_script echo "# Script Automatically created on `date`" >> $delete_script echo "# Any changes made to this file will be lost next time" >> $delete_script echo "# the webshphere configuration information is imported" >> $delete_script echo " " >> $delete_script echo ". $clhaws_functions" >> $delete_script echo " " >> $delete_script echo "get_cluster_state" >> $delete_script echo "if [[ \$CLUSTER_STATE -ne 0 ]] ; then" >> $delete_script echo "logmsg HAWS_ERROR $MSG_CLUSTER_NOT_STABLE \"Cluster is not in stable state.\\\\n\"" >> $delete_script echo "exit 1" >> $delete_script echo "fi" >> $delete_script echo " " >> $delete_script echo "# Remove the resources " >> $delete_script echo "$CLRMRES -g '$rgname'" >> $delete_script echo "logmsg HAWS_INFO $MSG_RESOURCES_DELETED \"Resources removed to resource group %s.\\\\n\" \"$rgname\"" >> $delete_script echo " " >> $delete_script echo "# Remove the application monitor " >> $delete_script echo "$CLRMAPPMON $asname" >> $delete_script echo "logmsg HAWS_INFO $MSG_APP_MON_DELETED \"Application Monitor for application server %s deleted.\\\\n\" \"$asname\"" >> $delete_script echo " " >> $delete_script echo "# Remove the application server " >> $delete_script echo "$CLRMSERV $asname" >> $delete_script echo "logmsg HAWS_INFO $MSG_APP_SERVER_DELETED \"Application Server %s deleted.\\\\n\" \"$asname\"" >> $delete_script echo " " >> $delete_script echo "# Remove the resource group " >> $delete_script echo "$CLRMGRP -g $rgname" >> $delete_script echo "logmsg HAWS_INFO $MSG_RESOURCE_GROUP_DELETED \"Resource Group %s deleted..\\\\n\" \"$rgname\"" >> $delete_script echo " " >> $delete_script echo "logmsg HAWS_INFO $MSG_IMPORT_DELETE_COMPLETE \"%s import delete complete.\\\\n\" WAS" >> $delete_script echo " " >> $delete_script # Create the configuration script where application specific settings are stored logmsg HAWS_TRACE "$MSG_CREATE_CONFIG" "Generating config file...\n" echo "#!/bin/sh" > $cfg_script echo "# Script Automatically created on `date`" >> $cfg_script echo "# Any changes made to this file will be lost next time" >> $cfg_script echo "# the webshphere configuration information is imported" >> $cfg_script echo " " >> $cfg_script echo "# WebSphere Application Server Configuration Information " >> $cfg_script echo " " >> $cfg_script echo "WAS_SERVER_NAME=\"$WAS_SERVER_NAME\"" >> $cfg_script echo "WAS_INSTALL_DIR=\"$WAS_INSTALL_DIR\"" >> $cfg_script echo "WAS_VG=\"$WAS_VG\"" >> $cfg_script echo "IHS_INSTALL_DIR=\"$IHS_INSTALL_DIR\"" >> $cfg_script echo "IHS_VG=\"$IHS_VG\"" >> $cfg_script echo "WAS_SERVICE_LABEL=\"$WAS_SERVICE_LABEL"\" >> $cfg_script echo "#!/bin/sh" > $app_monitor_script echo "# Script Automatically created on `date`" >> $app_monitor_script echo "# Any changes made to this file will be lost next time" >> $app_monitor_script echo "# the webshphere configuration information is imported" >> $app_monitor_script echo " " >> $app_monitor_script echo "# WebSphere Application Server monitor script for server: $WAS_SERVER_NAME" >> $app_monitor_script echo " " >> $app_monitor_script echo "$was_monitor_script \"$cfg_script\"" >> $app_monitor_script echo " " >> $app_monitor_script echo "exit \$?" >> $app_monitor_script complete_scripts $WAS_FALLOVER_NODE } ############################################################################### # # Function: process_arguments # This is a subsystem-specific version of the routine that processes # command line arguments. # ############################################################################### process_arguments() { logmsg HAWS_INFO "$MSG_WAS_PROCARG" "Processing 'was' arguments...\n"; while getopts c:n:l:o: c do case $c in c) WAS_CELL=$OPTARG logmsg HAWS_INFO "$MSG_WAS_CELL_NAME_SET" "Cell name specified as %s\n" $WAS_CELL ;; n) WAS_FALLOVER_NODE=$OPTARG logmsg HAWS_INFO "$MSG_FALLOVER_NODE_NAME_SET" "Fallover Node specified as %s\n" $WAS_FALLOVER_NODE ;; l) WAS_SERVICE_LABEL=$OPTARG logmsg HAWS_INFO "$MSG_SERVICE_LABEL_SET" "Service Label set to %s\n" $WAS_SERVICE_LABEL ;; o) WAS_NODE=$OPTARG logmsg HAWS_INFO "$MSG_WAS_NODE_SET" "WAS Node set to %s\n" $WAS_NODE ;; \?) logmsg HAWS_ERROR "$MSG_UNKNOWN_OPTION" "Unrecognized command line option specified\n" exit $HAWS_EXIT_FAIL;; esac done logmsg HAWS_DEBUG "$MSG_WAS_PROCDONE" "Done processing 'was' arguments...\n"; # Make sure that a fallover node was specified if [[ "$WAS_FALLOVER_NODE" = "" ]]; then logmsg HAWS_ERROR "$MSG_NO_FALLOVER" "You must specify a fallover node using the -n flag\n" exit $HAWS_EXIT_FAIL fi # Make sure that a service label was specified if [[ "$WAS_SERVICE_LABEL" = "" ]]; then logmsg HAWS_ERROR "$MSG_NO_SERVICE_LABEL" "You must specify a service label using the -l flag\n" exit $HAWS_EXIT_FAIL fi } ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # to perform the actual script execution. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### process_arguments $* verify_websphere_version get_websphere_install_dir get_websphere_vg parse_websphere_config init_java get_server_names get_ihs_install_dir get_ihs_vg create_script_names "was" $WAS_CELL"_"`hostname` $WAS_FALLOVER_NODE validate_websphere_config # If not Validating, generate the scripts if [[ $VALIDATE_FLAG -ne 1 ]] ; then generate_import_script fi # kj^'o0םa֝a֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsys/was/monitor_was#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/haws/sbin/subsys/was/monitor_was.sh 1.9 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)38 1.9 src/43haes/usr/sbin/cluster/haws/sbin/subsys/was/monitor_was.sh, hacmp.assist, 61haes_r720, 1522B_hacmp720 5/25/15 19:35:33 # ############################################################################### # # This script is used to monitor a Websphere Application Server instance # Websphere is monitored by calling into the "serverStatus.sh" shell # script provided by Websphere. The following is an example of what # this script will return if Websphere is healthy: # # # ./serverStatus.sh server1 # root@eenie/usr/WebSphere/AppServer1/bin> ./serverStatus.sh server1 # ADMU0116I: Tool information is being logged in file # /usr/WebSphere/AppServer1/logs/server1/serverStatus.log # ADMU0500I: Retrieving server status for server1 # ADMU0508I: The Application Server "server1" is STARTED # # This script sill look for the regular expressio # "The Application Server * is STARTED" # Failure to detect this string will assume the worst and return the # a failure status. If the string is detected, then a zero is returned # This script must return one of the following values: # 0: If the application is healthy # 1: If the application is dead or otherwise unhealthy # ############################################################################### # These are the exit status codes. No other values are useful so we break # down the possible returns as either Healthy or Dead. EXIT_DEAD=1 EXIT_HEALTHY=0 STATUS="" # Determine where WebSphere is installed WAS_INSTALL_DIR="" WAS_SCRIPT="" # This will be filled in by sourcing a config file WAS_SERVER_NAME="" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=init set -x fi # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [[ -z $HAWS_HOME ]]; then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -f "$clhaws_functions" ]]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: check_server_status ############################################################################### # # Check the status of the server ############################################################################### check_server_status() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=check_server_status set -x fi STATUS=$EXIT_HEALTHY WAS_NODE_AGENT_NAME="nodeagent" logmsg HAWS_TRACE $MSG_WAS_MON_SERVER_CHECKING "Checking the status of the WebSphere Application Server...\n" logmsg HAWS_TRACE $MSG_CALLING_SCRIPT "Calling script: %s %s\n" $WAS_SCRIPT $WAS_SERVER_NAME if [[ -n $($WAS_SCRIPT $WAS_SERVER_NAME | grep "The Application Server \"$WAS_SERVER_NAME\" is STARTED") ]] ; then logmsg HAWS_INFO $MSG_WAS_MON_SERVER_IS_HEALTHY "Websphere App Server is healthy.\n" else logmsg HAWS_INFO $MSG_WAS_MON_SERVER_IS_DEAD "WebSphere App Server is not healthy.\n" STATUS=$EXIT_DEAD fi logmsg HAWS_TRACE $MSG_WAS_MON_NODE_AGENT_CHECKING "Checking the status of the WebSphere Node Agent...\n" logmsg HAWS_TRACE $MSG_CALLING_SCRIPT "Calling script: %s %s\n" $WAS_SCRIPT $WAS_NODE_AGENT_NAME if [[ -n $($WAS_SCRIPT $WAS_NODE_AGENT_NAME | grep "The Node Agent \"$WAS_NODE_AGENT_NAME\" is STARTED") ]] ; then logmsg HAWS_INFO $MSG_WAS_MON_NODE_AGENT_IS_HEALTHY "Websphere Node Agent is healthy.\n" else logmsg HAWS_INFO $MSG_WAS_MON_NODE_AGENT_IS_DEAD "Websphere Node Agent is not healthy.\n" STATUS=$EXIT_DEAD fi if [[ -n $IHS_INSTALL_DIR ]] ; then logmsg HAWS_TRACE $MSG_WAS_MON_IHS_CHECKING "Checking the status of IBM Http Server...\n" PIDFILE=$IHS_INSTALL_DIR/logs/httpd.pid PID="" if [[ -s $PIDFILE ]] ; then PID=$(cat $PIDFILE) if [[ -n $PID ]] && kill -0 $PID 2>/dev/null ; then logmsg HAWS_INFO $MSG_WAS_MON_IHS_IS_HEALTHY "IBM Http Server is healthy.\n" else logmsg HAWS_INFO $MSG_WAS_MON_IHS_IS_DEAD "IBM Http Server is not healthy.\n" STATUS=$EXIT_DEAD fi else logmsg HAWS_INFO $MSG_WAS_MON_IHS_IS_DEAD "IBM Http Server is not healthy.\n" STATUS=$EXIT_DEAD fi fi } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. Set up the command line to get the server # status. # ############################################################################### read_config() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=read_config set -x fi cfgfile=$1 logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile WAS_SCRIPT=$WAS_INSTALL_DIR/bin/serverStatus.sh } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.9' fi init read_config $* check_server_status exit $STATUS  kla'o0םa֝a֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsys/was/startWASas#!/bin/sh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/haws/sbin/subsys/was/startWAS.sh 1.6 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)39 1.6 src/43haes/usr/sbin/cluster/haws/sbin/subsys/was/startWAS.sh, hacmp.assist, 61haes_r714 2/25/04 22:59:51 # ############################################################################### # # This is a wrapper script for starting up an application server # ensuring no port conflicts. # ############################################################################### # Determine where WebSphere is installed WAS_INSTALL_DIR="" # This will be filled in by sourcing a config file WAS_SERVER_NAME="" WAS_SCRIPT_NODE_AGENT="" WAS_SCRIPT_SERVER="" IHS_INSTALL_DIR="" IHS_SCRIPT="" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [[ "$HAWS_HOME" = "" ]]; then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -f "$clhaws_functions" ]]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: start_server ############################################################################### # # Start the server ############################################################################### start_server() { logmsg HAWS_TRACE $MSG_WAS_START_NODE_AGENT "Start WebSphere Application Server Node Agent by calling %s\n" $WAS_SCRIPT_NODE_AGENT $WAS_SCRIPT_NODE_AGENT logmsg HAWS_TRACE $MSG_WAS_START_SERVER "Start WebSphere Application Server by calling %s\n" $WAS_SCRIPT_SERVER $WAS_SCRIPT_SERVER if [[ "$IHS_SCRIPT" != "" ]] ; then logmsg HAWS_TRACE $MSG_IHS_START_SERVER "Start IBM HTTP Server by calling %s\n" $WAS_SCRIPT $IHS_SCRIPT fi } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. Set up the command line to start the # WebSphere Application Server # ############################################################################### read_config() { cfgfile=$1 logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile WAS_SCRIPT_NODE_AGENT="$WAS_INSTALL_DIR/bin/startNode.sh" WAS_SCRIPT_SERVER="$WAS_INSTALL_DIR/bin/startServer.sh $WAS_SERVER_NAME" if [[ $IHS_INSTALL_DIR != "" ]] ; then IHS_SCRIPT="$IHS_INSTALL_DIR/bin/apachectl start" fi } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### init read_config $* start_server exit $HAWS_EXIT_SUCCESS  k:'o0םa֝a֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsys/was/stopWASas#!/bin/sh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/haws/sbin/subsys/was/stopWAS.sh 1.6 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)40 1.6 src/43haes/usr/sbin/cluster/haws/sbin/subsys/was/stopWAS.sh, hacmp.assist, 61haes_r714 2/25/04 22:59:52 # ############################################################################### # # This is a wrapper script for stoping up an application server # ensuring no port conflicts. # ############################################################################### # Determine where WebSphere is installed WAS_INSTALL_DIR="" # This will be filled in by sourcing a config file WAS_SERVER_NAME="" WAS_SCRIPT_NODE_AGENT="" WAS_SCRIPT_SERVER="" IHS_INSTALL_DIR="" IHS_SCRIPT="" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [[ "$HAWS_HOME" = "" ]]; then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -f "$clhaws_functions" ]]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: stop_server ############################################################################### # # Stop the server ############################################################################### stop_server() { if [[ "$IHS_SCRIPT" != "" ]] ; then logmsg HAWS_TRACE $MSG_IHS_STOP_SERVER "Stop IBM HTTP Server by calling %s\n" $WAS_SCRIPT $IHS_SCRIPT fi logmsg HAWS_TRACE $MSG_WAS_STOP_SERVER "Stop WebSphere Application Server by calling %s\n" $WAS_SCRIPT_SERVER $WAS_SCRIPT_SERVER logmsg HAWS_TRACE $MSG_WAS_STOP_NODE_AGENT "Stop WebSphere Application Server Node Agent by calling %s\n" $WAS_SCRIPT_NODE_AGENT $WAS_SCRIPT_NODE_AGENT } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. Setup the command line to stop the # WebSphere Application Server # ############################################################################### read_config() { cfgfile=$1 logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile WAS_SCRIPT_NODE_AGENT="$WAS_INSTALL_DIR/bin/stopNode.sh" WAS_SCRIPT_SERVER="$WAS_INSTALL_DIR/bin/stopServer.sh $WAS_SERVER_NAME" if [[ $IHS_INSTALL_DIR != "" ]] ; then IHS_SCRIPT="$IHS_INSTALL_DIR/bin/apachectl stop" fi } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### init read_config $* stop_server exit $HAWS_EXIT_SUCCESS - P k%o0םa֝a֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsys/dm/startDMas#!/bin/sh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/haws/sbin/subsys/dm/startDM.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)53 1.3 src/43haes/usr/sbin/cluster/haws/sbin/subsys/dm/startDM.sh, hacmp.assist, 61haes_r714 2/4/04 14:28:39 # ############################################################################### # # This is a wrapper script for starting up an application server # ensuring no port conflicts. # ############################################################################### # Determine where Deployment Manager is installed WAS_INSTALL_DIR="" # This will be filled in by sourcing a config file WAS_SERVER_NAME="" DM_SCRIPT_SERVER="" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [[ "$HAWS_HOME" = "" ]]; then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -f "$clhaws_functions" ]]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: start_server ############################################################################### # # Start the server ############################################################################### start_server() { logmsg HAWS_TRACE $MSG_DM_START_SERVER "Start Deployment Manager by calling %s\n" $DM_SCRIPT_SERVER $DM_SCRIPT_SERVER } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. This will contain the following # variables: # SERVER_NAME - The server name we need to monitor # ############################################################################### read_config() { cfgfile=$1 logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile DM_SCRIPT_SERVER="$WAS_INSTALL_DIR/bin/startManager.sh" } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### init read_config $* start_server exit $HAWS_EXIT_SUCCESS  kΚ%o0םa֝a֝a&2vT./usr/es/sbin/cluster/haws/sbin/subsys/dm/stopDMas#!/bin/sh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/haws/sbin/subsys/dm/stopDM.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2004 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)54 1.3 src/43haes/usr/sbin/cluster/haws/sbin/subsys/dm/stopDM.sh, hacmp.assist, 61haes_r714 2/4/04 14:28:43 # ############################################################################### # # This is a wrapper script for stoping up an application server # ensuring no port conflicts. # ############################################################################### # Determine where Deployment Manager is installed WAS_INSTALL_DIR="" # This will be filled in by sourcing a config file WAS_SERVER_NAME="" DM_SCRIPT_SERVER="" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [[ "$HAWS_HOME" = "" ]]; then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -f "$clhaws_functions" ]]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: stop_server ############################################################################### # # Stop the server ############################################################################### stop_server() { logmsg HAWS_TRACE $MSG_DM_STOP_SERVER "Stop Deployment Manager by calling %s\n" $DM_SCRIPT_SERVER $DM_SCRIPT_SERVER } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. This will contain the following # variables: # SERVER_NAME - The server name we need to monitor # ############################################################################### read_config() { cfgfile=$1 logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile DM_SCRIPT_SERVER="$WAS_INSTALL_DIR/bin/stopManager.sh" } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### init read_config $* stop_server exit $HAWS_EXIT_SUCCESS k%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/wasin/AA kl %oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/was/sbinbsys/dAA k#o0 0םa՝a֝a&0 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasdiscihs#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdiscihs.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)80 1.3 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdiscihs.sh, hacmp.assist, 61haes_r714 5/1/08 00:06:09 ################################################################### ## ## NAME: cl_wasdiscihs ## ## DESCRIPTION: ## Perform IBM Http Server (IHS) Discovery. Discovers all ## installed instances of IHS and returns information ## about them. ## ## This utility is meant to be called remotely from ## cl_wasdiscovery. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Colon delimiter list of IHS installations ## where each line contains info info about a ## separate installation. Information is: ## ## Total number IHS Installations ## Installation Path ## Version ## Installation Volume Groups ## Installation PVIDs ## Listen Directive Host ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_WAS_get_installations ## KLIB_WAS_log_message ## KLIB_WAS_get_ihs_plugin_path ## KLIB_WAS_get_ihs_listen_host ## ## KLIB_AIX_add_vg_by_path ## KLIB_AIX_get_pvids_by_vgs ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset IHS_VGS="" typeset LISTEN_HOST="" typeset IHS_INSTALLATIONS="" integer count=0 integer install_count=0 typeset version="" typeset install_path="" typeset plugin_path="" typeset tmp="" IHS_INSTALLATIONS=$(KLIB_WAS_get_installations "*IHS*") KLIB_WAS_log_message "IHS INFO: installations found - $IHS_INSTALLATIONS" echo $IHS_INSTALLATIONS | IFS=: read install_count installations count=$install_count # Get information about each installation while (( $count > 0 )) ; do echo $installations | IFS=: read version install_path tmp installations=$tmp IHS_VGS="" LISTEN_HOST="" KLIB_AIX_add_vg_by_path IHS_VGS $install_path "$IHS_VGS" # Make sure WebSphere Plugin volume group will be part of the resource group. plugin_path=$(KLIB_WAS_get_ihs_plugin_path $install_path) if [[ -n $plugin_path ]]; then KLIB_AIX_add_vg_by_path IHS_VGS $plugin_path "$IHS_VGS" fi IHS_VG_PVIDS=$(KLIB_AIX_get_pvids_by_vgs $IHS_VGS) LISTEN_HOST=$(KLIB_WAS_get_ihs_listen_host $install_path) KLIB_WAS_log_message "IHS INFO: cl_wasdiscihs returning - ihs:$install_count:$install_path:$version:$IHS_VGS:$IHS_VG_PVIDS:$LISTEN_HOST" echo "ihs:$install_count:$install_path:$version:$IHS_VGS:$IHS_VG_PVIDS:$LISTEN_HOST" count=$count-1 done  k (#o&0םa՝a֝a&&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasdiscserveras#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdiscserver.sh 1.6 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)82 1.6 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdiscserver.sh, hacmp.assist, 61haes_r714 5/1/08 00:56:49 ################################################################### ## ## NAME: cl_wasdiscserver ## ## DESCRIPTION: ## Perform WebSphere Application Server (WAS) Discovery. ## Discovers all installed instances of WAS and returns ## information about them. The WebSphere command line ## utility wsadmin.sh is called to get some information. ## ## This utility is meant to be called remotely from ## cl_wasdiscovery. ## ## ARGUMENTS: ## -q run in quick mode ## ## OUTPUT: ## Colon delimiter list of WAS installations ## where each line contains info info about a ## separate installation profile. (Installations can ## contain more than one profile.) Information is: ## ## Total number WAS Installations ## Installation Path ## Version ## Installation Volume Groups ## Installation PVIDs ## Total Profile Count for Installation ## Profile Name ## Profile Path ## Is Managed? ## WebSphere Cell Name ## WebSphere Node Name ## The output from cl_wasserverdisc.jacl ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_WAS_get_installations ## KLIB_WAS_log_message ## ## KLIB_AIX_add_vg_by_path ## KLIB_AIX_get_pvids_by_vgs ## ################################################################### function parseElementForAttributeXML { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset filename=$1 # search ID typeset element=$2 # search ID typeset attribute=$3 # search ID typeset sid=$4 # search ID # Looking for an entry similar to: # # typeset xmiid value line while read line; do tag=${line/*<} # */ tag=${tag/\ *} if [[ "${tag}" == "${element}" ]]; then xmiid=${line/*xmi\:id=\"} # */ xmiid=${xmiid/\"*} value=${line/*${attribute}=\"} # */ value=${value/\"*} if [[ -z $sid ]]; then echo "$value" break else if [[ "$xmiid" == "$sid" ]]; then echo "$value" break fi fi fi done < $filename } ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the message catalog entries #. /usr/es/sbin/cluster/sa/db2/cat/cl_db2discovery # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 . /usr/es/lib/ksh93/func_include # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false integer install_count=0 integer count=0 integer profile_count=0 typeset profiles typeset profile typeset installations typeset version typeset install_path typeset wsadmin_path typeset profile_path integer ismanaged=1 typeset line typeset info typeset tmp typeset serverName typeset serverType typeset SERVERINDEX_XML typeset WAS_INSTALL_VG="" typeset PROFILE_VGS="" typeset PROFILE_VG_PVIDS typeset QUICK_DISCOVER=false WAS_MIN_VERSION="6.0" WAS_MAX_VERSION="6.1" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # Get the arguments. if set -- $(getopt q $* 2>&1); then while [ $# != 0 ]; do case "$1" in -q) # lists only IBM Http Servers not managed by HACMP QUICK_DISCOVER=true ;; --) shift break ;; esac shift done fi WAS_INSTALLATIONS=$(KLIB_WAS_get_installations "WSBAA*") echo $WAS_INSTALLATIONS | IFS=: read install_count installations KLIB_WAS_log_message "WAS INFO: installations found - $WAS_INSTALLATIONS" count=$install_count # Get information about each installation while (( $count > 0 )) ; do WAS_INSTALL_VG="" profiles="" # Cleanup from sourcing $profile_path/bin/setupCmdLine.sh. # If WAS_USER_SCRIPT is not reset, then wsadmin.sh executes # in first prfile space WAS_USER_SCRIPT="" echo $installations | IFS=: read version install_path tmp installations=$tmp KLIB_AIX_add_vg_by_path WAS_INSTALL_VG $install_path "$WAS_INSTALL_VG" # Check that wsadmin.sh is found and executable wsadmin_path="$install_path/bin/wsadmin.sh" if [[ ! -x "$wsadmin_path" ]] ; then KLIB_WAS_log_message "WAS ERROR: $wsadmin_path not found or not executable" echo "was:$install_count:$install_path:$version:" count=$count-1 continue fi # Check that wasprofile.sh or manageprofiles.sh is found and executable if (( $version == $WAS_MIN_VERSION )) ; then if [[ ! -x "$install_path/bin/wasprofile.sh" ]] ; then KLIB_WAS_log_message "WAS ERROR: $install_path/bin/wasprofile.sh not found or not executable" echo "was:$install_count:$install_path:$version:" count=$count-1 continue fi else if [[ ! -x "$install_path/bin/manageprofiles.sh" ]] ; then KLIB_WAS_log_message "WAS ERROR: $install_path/bin/manageprofiles.sh not found or not executable" echo "was:$install_count:$install_path:$version:" count=$count-1 continue fi fi if (( $version == $WAS_MIN_VERSION )) ; then profiles=$($install_path/bin/wasprofile.sh -listProfiles) else profiles=$($install_path/bin/manageprofiles.sh -listProfiles) fi KLIB_WAS_log_message "WAS INFO: profiles found - $profiles" # wasprofile.sh returns profiles as [profile1, profile2] and this needs to be made nicer profiles=${profiles//[\[\],]/} profile_count=$(echo $profiles | wc -w) # Only one profile is supported for fallover of App Servers and DMs, we do support # multiple profiles for the DM of a WebSphere Cluster for profile in $profiles; do PROFILE_VGS="$WAS_INSTALL_VG" if (( $version == $WAS_MIN_VERSION )) ; then profile_path=$($install_path/bin/wasprofile.sh -getPath -profileName $profile) else profile_path=$($install_path/bin/manageprofiles.sh -getPath -profileName $profile) fi KLIB_AIX_add_vg_by_path PROFILE_VGS $profile_path "$PROFILE_VGS" PROFILE_VG_PVIDS=$(KLIB_AIX_get_pvids_by_vgs "$PROFILE_VGS") # Source $profile_path/bin/setupCmdLine.sh so we can get the WebSphere cell and WebSphere node name if [[ ! -r $profile_path/bin/setupCmdLine.sh ]] ; then KLIB_WAS_log_message "WAS ERROR: $profile_path/bin/setupCmdLine.sh not found or not readable" echo "was:$install_count:$install_path:$version:" count=$count-1 continue fi . $profile_path/bin/setupCmdLine.sh # Determine of the profile is managed (federated). Default to managed if cannnot be determined if [[ -d "${install_path}/profiles/${profile}/config/cells/${WAS_CELL}/nodes/${WAS_NODE}/servers/nodeagent" ]] ; then ismanaged=1 else ismanaged=0 fi if [[ $QUICK_DISCOVER == true ]] ; then SERVERINDEX_XML="${install_path}/profiles/${profile}/config/cells/${WAS_CELL}/nodes/${WAS_NODE}/serverindex.xml" if [[ -r ${SERVERINDEX_XML} ]] ; then serverType=$(parseElementForAttributeXML ${SERVERINDEX_XML} "serverEntries" "serverType") serverName=$(parseElementForAttributeXML ${SERVERINDEX_XML} "serverEntries" "serverName") endpoint_host=$(parseElementForAttributeXML ${SERVERINDEX_XML} "endPoint" "host") echo "was:$install_count:$install_path:$version:$PROFILE_VGS:$PROFILE_VG_PVIDS:$profile_count:$profile:$profile_path:$ismanaged:$WAS_CELL:$WAS_NODE:$serverName:$serverType:$endpoint_host" else echo "was:$install_count:$install_path:$version:" fi count=$count-1 continue fi # Call a JACL script to get configuration information about the profile. $wsadmin_path -profileName $profile -conntype NONE -f $WASSA_SBIN_DIR/cl_wasserverdisc.jacl $WAS_NODE | while read line; do KLIB_WAS_log_message "WAS INFO: cl_wasserverdisc.jacl output - $line" if [[ ${line/SA_WAS:*/found} == "found" ]] ; then info=${line//SA_WAS:/} echo "was:$install_count:$install_path:$version:$PROFILE_VGS:$PROFILE_VG_PVIDS:$profile_count:$profile:$profile_path:$ismanaged:$WAS_CELL:$WAS_NODE:$info" fi done done count=$count-1 done  kJ#o 0םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasdiscclusras#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdiscclus.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)78 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdiscclus.sh, hacmp.assist, 61haes_r714 4/30/08 23:58:17 ################################################################### ## ## NAME: cl_wasdiscclus ## ## DESCRIPTION: ## Perform WebSphere Cluster Discovery. ## Discovers all configured instances of WebSphere Cluster ## and returns information about them. The WebSphere command ## line utility wsadmin.sh is called to get some information. ## ## This utility is meant to be called remotely from ## cl_wasdiscovery. ## ## ARGUMENTS: ## WebSphere Installation Path ## WebSphere Profile Name ## ## OUTPUT: ## Colon delimiter list which is the output from the ## cl_wasclusdisc.jacl ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_WAS_log_message ## ################################################################### ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the message catalog entries #. /usr/es/sbin/cluster/sa/db2/cat/cl_db2discovery # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WAS_MIN_VERSION="6.0" WAS_MAX_VERSION="6.1" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset QUICK_DISCOVER=false [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # Get the arguments. if set -- $(getopt qi:p: $* 2>&1); then while [ $# != 0 ]; do case "$1" in -q) # Does a quick discovery of websphere clusters QUICK_DISCOVER=true ;; -i) INSTALL_PATH=$2 shift ;; -p) PROFILE_NAME=$2 shift ;; --) shift break ;; esac shift done fi if [[ $QUICK_DISCOVER == true ]] ; then # Look for installed Deployment Managers $WASSA_SBIN_DIR/cl_wasdiscserver -q 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids profile_count profile_name profile_path ismanaged wascell wasnode servername typename endpoint_host # If not a deployment manager, continue to the next install/profile if [[ $typename != "DEPLOYMENT_MANAGER" ]] ; then continue fi typeset cluster_list="" # take profile path and wascell and look for clusters if [[ -d "${profile_path}/config/cells/${wascell}/clusters" ]] ; then cluster_list=$(ls -l ${profile_path}/config/cells/${wascell}/clusters | grep ^d | awk -F" " '{ print $NF }' | tr '\n' ' ') if [[ -n $cluster_list ]] ; then echo "cluster:$version:$cluster_list:$wascell:$wasnode:$servername:$install_path:$profile_name:$profile_path" fi fi done exit 0 fi ########################################################################## # Slow discovery. JACL script is called to get information about all cluster members. typeset wsadmin_path="$INSTALL_PATH/bin/wsadmin.sh" # Check that wsadmin.sh is found and executable if [[ ! -x "$wsadmin_path" ]] ; then KLIB_WAS_log_message "WAS ERROR: $wsadmin_path not found or not executable" else $wsadmin_path -profileName $PROFILE_NAME -conntype NONE -f $WASSA_SBIN_DIR/cl_wasclusterdisc.jacl | while read line; do KLIB_WAS_log_message "WAS INFO: cl_wasclusterdisc.jacl output - $line" if [[ ${line/SA_WAS:*/found} == "found" ]] ; then info=${line//SA_WAS:/} KLIB_WAS_log_message "WAS INFO: returning - cluster:$info" echo "cluster:$info" fi done fi clu k#o;_0םa՝a֝a&;_2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasdiscoveryas#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdiscovery.sh 1.13 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)81 1.13 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdiscovery.sh, hacmp.assist, 61haes_r714 5/1/08 00:32:21 ################################################################### ## ## NAME: cl_wasdiscovery ## ## DESCRIPTION: ## Performs Smart Assist for WebSphere discovery. All nodes ## in the HACMP cluster are first searched for installations ## of IBM Http Server and WebSphere Application Server using ## the cl_rsh utility. Afterwards, the discovered Deployment ## Managers are searched for WebSphere Clusters. ## ## Finally, the file /usr/es/sbin/cluster/sa/was/etc/was.disc ## is populated with the discovered information ## ## ARGUMENTS: ## None ## ## EXIT CODES: ## 0 - success ## ## KLIB Functions: ## KLIB_HACMP_get_cluster_nodes ## KLIB_HACMP_are_pvids_shared ## KLIB_HACMP_is_known_node ## ################################################################### # # Function: populate_ihs_disc # # Description: # Echo discovered information about IBM Http Servers by # interating through entries in IHS_ARRAY. Also echoes the # list of nodes where gskta.rte was found to be installed. # # Arguments: # none # # Returns: # 0 - success # function populate_ihs_disc { typeset varname typeset instances="" typeset ihskey echo "" echo "" for ihskey in ${!IHS_ARRAY[@]}; do varname="WAS_IHS_${INSTALL_NODE_NAME[$ihskey]}" if [[ -z $instances ]] ; then instances="$varname" else instances="$instances $varname" fi DATE=$(date +"%m/%d/%y %H:%M:%S") echo "# Discovery Info for IBM Http Server on node ${INSTALL_NODE_NAME[$ihskey]}" echo "unset $varname" echo "typeset -A $varname" echo "$varname=( \\" echo "\t[LAST_UPDATED]=\"$DATE\"" echo "\t[INSTALL_PATH]=\"${INSTALL_PATH[$ihskey]}\"" echo "\t[INSTALL_NODE_NAME]=\"${INSTALL_NODE_NAME[$ihskey]}\"" echo "\t[VERSION]=\"${VERSION[$ihskey]}\"" echo "\t[INSTALL_VGS]=\"${INSTALL_VGS[$ihskey]}\"" echo "\t[VG_PVIDS]=\"${VG_PVIDS[$ihskey]}\"" echo "\t[LISTEN_HOST]=\"${LISTEN_HOST[$ihskey]}\"" echo ")" echo "" done echo "" echo "IHS_INSTANCES=\"$instances\"" echo "" echo "GSKTA_NODES=\"${!GSKTA_ARRAY[@]}\"" return 0 } # # Function: populate_node_disc # # Description: # Echo discovered information about WebSphere Nodes by # interating through entries in NODE_ARRAY. Also echoes the # information about WebSphere Application Servers by # iterating through SERVER_ARRAY. # # Arguments: # none # # Returns: # 0 - success # function populate_node_disc { typeset varname="" typeset instances="" typeset nodekey typeset serverkey echo "" echo "" for nodekey in ${!NODE_ARRAY[@]}; do varname="WAS_NODE_${WAS_CELL_NAME[$nodekey]}_${WAS_NODE_NAME[$nodekey]}" if [[ -z $instances ]] ; then instances="$varname" else instances="$instances $varname" fi DATE=$(date +"%m/%d/%y %H:%M:%S") echo "# Discovery Info for WebSphere Node - Cell ${WAS_CELL_NAME[$nodekey]}, Node ${WAS_NODE_NAME[$nodekey]}" echo "unset $varname" echo "typeset -A $varname" echo "$varname=( \\" echo "\t[LAST_UPDATED]=\"$DATE\"" echo "\t[WAS_CELL_NAME]=\"${WAS_CELL_NAME[$nodekey]}\"" echo "\t[WAS_NODE_NAME]=\"${WAS_NODE_NAME[$nodekey]}\"" echo "\t[INSTALL_NODE_NAME]=\"${INSTALL_NODE_NAME[$nodekey]}\"" echo "\t[PROFILE_NAME]=\"${PROFILE_NAME[$nodekey]}\"" echo "\t[INSTALL_PATH]=\"${INSTALL_PATH[$nodekey]}\"" echo "\t[INSTALL_VGS]=\"${INSTALL_VGS[$nodekey]}\"" echo "\t[VG_PVIDS]=\"${VG_PVIDS[$nodekey]}\"" echo "\t[IS_MANAGED]=\"${IS_MANAGED[$nodekey]}\"" echo "\t[VERSION]=\"${VERSION[$nodekey]}\"" echo "\t[WAS_SERVER_NAMES]=\"${WAS_SERVER_NAMES[$nodekey]}\"" echo ")" echo "" done echo "" echo "WAS_NODE_INSTANCES=\"$instances\"" instances="" echo "" for serverkey in ${!SERVER_ARRAY[@]}; do varname="WAS_AS_${WAS_CELL_NAME[$serverkey]}_${WAS_NODE_NAME[$serverkey]}_${WAS_SERVER_NAME[$serverkey]}" if [[ -z $instances ]] ; then instances="$varname" else instances="$instances $varname" fi DATE=$(date +"%m/%d/%y %H:%M:%S") echo "# Discovery Info for WebSphere Application Server - Cell ${WAS_CELL_NAME[$serverkey]}, Node ${WAS_NODE_NAME[$serverkey]}, Server ${WAS_SERVER_NAME[$serverkey]}" echo "unset $varname" echo "typeset -A $varname" echo "$varname=( \\" echo "\t[LAST_UPDATED]=\"$DATE\"" echo "\t[WAS_CELL_NAME]=\"${WAS_CELL_NAME[$serverkey]}\"" echo "\t[WAS_NODE_NAME]=\"${WAS_NODE_NAME[$serverkey]}\"" echo "\t[WAS_SERVER_NAME]=\"${WAS_SERVER_NAME[$serverkey]}\"" echo "\t[WAS_TYPE]=\"${WAS_TYPE[$serverkey]}\"" echo "\t[WAS_CLUSTER_NAME]=\"${WAS_CLUSTER_NAME[$serverkey]}\"" echo "\t[ENDPOINT_HOST]=\"${ENDPOINT_HOST[$serverkey]}\"" echo "\t[TRANSACTION_LOG]=\"${TRANSACTION_LOG[$serverkey]}\"" echo ")" echo "" done echo "" echo "WAS_AS_INSTANCES=\"$instances\"" return 0 } # # Function: populate_dm_disc # # Description: # Echo discovered information about Deployment Managers by # interating through entries in DM_ARRAY. # # Arguments: # none # # Returns: # 0 - success # function populate_dm_disc { typeset varname typeset instances="" typeset dmkey echo "" echo "" for dmkey in ${!DM_ARRAY[@]}; do varname="WAS_DM_${WAS_CELL_NAME[$dmkey]}" if [[ -z $instances ]] ; then instances="$varname" else instances="$instances $varname" fi DATE=$(date +"%m/%d/%y %H:%M:%S") echo "# Discovery Info for Deployment Manager on cell ${WAS_CELL_NAME[$dmkey]}" echo "unset $varname" echo "typeset -A $varname" echo "$varname=( \\" echo "\t[LAST_UPDATED]=\"$DATE\"" echo "\t[WAS_CELL_NAME]=\"${WAS_CELL_NAME[$dmkey]}\"" echo "\t[WAS_NODE_NAME]=\"${WAS_NODE_NAME[$dmkey]}\"" echo "\t[WAS_SERVER_NAME]=\"${WAS_SERVER_NAME[$dmkey]}\"" echo "\t[INSTALL_NODE_NAME]=\"${INSTALL_NODE_NAME[$dmkey]}\"" echo "\t[PROFILE_NAME]=\"${PROFILE_NAME[$dmkey]}\"" echo "\t[INSTALL_PATH]=\"${INSTALL_PATH[$dmkey]}\"" echo "\t[INSTALL_VGS]=\"${INSTALL_VGS[$dmkey]}\"" echo "\t[ENDPOINT_HOST]=\"${ENDPOINT_HOST[$dmkey]}\"" echo "\t[VG_PVIDS]=\"${VG_PVIDS[$dmkey]}\"" echo "\t[VERSION]=\"${VERSION[$dmkey]}\"" echo ")" echo "" done echo "WAS_DM_INSTANCES=\"$instances\"" echo "" return 0 } # # Function: populate_clus_disc # # Description: # Echo discovered information about WebSphere Clusters and # Cluster members by interating through entries in # CLUSTER_ARRAY and CLUSTER_MEMBER_ARRAY. # # Arguments: # none # # Returns: # 0 - success # function populate_clus_disc { typeset varname typeset instances="" typeset clusterkey typeset memberkey echo "" echo "" for clusterkey in ${!CLUSTER_ARRAY[@]}; do varname="WAS_CLUS_${WAS_CELL_NAME[$clusterkey]}_${WAS_CLUSTER_NAME[$clusterkey]}" if [[ -z $instances ]] ; then instances="$varname" else instances="$instances $varname" fi DATE=$(date +"%m/%d/%y %H:%M:%S") echo "# Discovery Info for WebSphere Cluster - Cell ${WAS_CELL_NAME[$clusterkey]}, Cluster ${WAS_CLUSTER_NAME[$clusterkey]}" echo "unset $varname" echo "typeset -A $varname" echo "$varname=( \\" echo "\t[LAST_UPDATED]=\"$DATE\"" echo "\t[WAS_CELL_NAME]=\"${WAS_CELL_NAME[$clusterkey]}\"" echo "\t[WAS_CLUSTER_NAME]=\"${WAS_CLUSTER_NAME[$clusterkey]}\"" echo "\t[DM_NODE_NAME]=\"${DM_NODE_NAME[$clusterkey]}\"" echo "\t[WAS_SERVER_NAMES]=\"${WAS_SERVER_NAMES[$clusterkey]}\"" echo "\t[WAS_MEMBER_KEYS]=\"${WAS_MEMBER_KEYS[$clusterkey]}\"" echo "\t[INSTALL_NODE_NAMES]=\"${INSTALL_NODE_NAMES[$clusterkey]}\"" echo "\t[INSTALL_PATH]=\"${INSTALL_PATH[$clusterkey]}\"" echo "\t[PROFILE_NAME]=\"${PROFILE_NAME[$clusterkey]}\"" echo ")" echo "" done echo "" echo "WAS_CLUS_INSTANCES=\"$instances\"" instances="" echo "" for memberkey in ${!CLUSTER_MEMBER_ARRAY[@]}; do varname="WAS_CLUSMEM_${WAS_CELL_NAME[$memberkey]}_${WAS_CLUSTER_NAME[$memberkey]}_${WAS_NODE_NAME[$memberkey]}_${WAS_SERVER_NAME[$memberkey]}" if [[ -z $instances ]] ; then instances="$varname" else instances="$instances $varname" fi DATE=$(date +"%m/%d/%y %H:%M:%S") echo "# Discovery Info for WebSphere Cluster Member- Cell ${WAS_CELL_NAME[$memberkey]}, Cluster ${WAS_CLUSTER_NAME[$memberkey]}, Server ${WAS_SERVER_NAME[$memberkey]}" echo "unset $varname" echo "typeset -A $varname" echo "$varname=( \\" echo "\t[LAST_UPDATED]=\"$DATE\"" echo "\t[WAS_CELL_NAME]=\"${WAS_CELL_NAME[$memberkey]}\"" echo "\t[WAS_CLUSTER_NAME]=\"${WAS_CLUSTER_NAME[$memberkey]}\"" echo "\t[WAS_SERVER_NAME]=\"${WAS_SERVER_NAME[$memberkey]}\"" echo "\t[WAS_NODE_NAME]=\"${WAS_NODE_NAME[$memberkey]}\"" echo "\t[TRANSACTION_LOG]=\"${TRANSACTION_LOG[$memberkey]}\"" echo "\t[DEFAULT_TRANSACTION_LOG]=\"${DEFAULT_TRANSACTION_LOG[$memberkey]}\"" echo "\t[INSTALL_NODE_NAME]=\"${INSTALL_NODE_NAME[$memberkey]}\"" echo ")" echo "" done echo "" echo "WAS_CLUS_MEM_INSTANCES=\"$instances\"" return 0 } ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" IHS_MIN_VERSION="6.0" IHS_MAX_VERSION="6.1" WAS_MIN_VERSION="6.0" WAS_MAX_VERSION="6.1" WASSACAT="wassa.cat" DISC_MSGSET=6 KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=true # The following arrays hold specific information about a WebSphere # Component. They are keyed off the component name and each array # can hold information from more than one component. For instance, # INSTALL_VGS hold the installation volume group for Deployment # Managers, WebSphere Nodes, and IBM Http Servers. typeset -A WAS_CELL_NAME typeset -A WAS_NODE_NAME typeset -A WAS_SERVER_NAME typeset -A INSTALL_PATH typeset -A VERSION typeset -A WAS_TYPE typeset -A INSTALL_NODE_NAME typeset -A INSTALL_VGS typeset -A VG_PVIDS typeset -A PROFILE_NAME typeset -A IS_MANAGED typeset -A WAS_CLUSTER_NAME typeset -A ENDPOINT_HOST typeset -A TRANSACTION_LOG typeset -A DEFAULT_TRANSACTION_LOG typeset -A LISTEN_HOST typeset -A WAS_SERVER_NAMES typeset -A WAS_MEMBER_KEYS typeset -A INSTALL_NODE_NAMES typeset -A DM_NODE_NAME # The following arrays hold the components key for their specific # component type. For instance, DM_ARRAY holds the keys for all # Depolyment Managers found during discovery. typeset -A SERVER_ARRAY typeset -A IHS_ARRAY typeset -A NODE_ARRAY typeset -A CLUSTER_ARRAY typeset -A FAILED_CLUSTER_ARRAY typeset -A CLUSTER_MEMBER_ARRAY typeset -A DM_ARRAY typeset -A CLUSTER_DM_ARRAY typeset -A GSKTA_ARRAY typeset node typeset component integer install_count typeset install_path typeset version typeset install_vgs typeset install_pvids typeset listen_host typeset profile_count typeset profile_name integer ismanaged typeset wascell typeset wasnode typeset servername typeset typename typeset line typeset ihskey typeset dmkey typeset serverkey typeset nodekey [[ "$VERBOSE_LOGGING" == "high" ]] && set -x #Get the nodes that are in the cluster. NODE_LIST=$(KLIB_HACMP_get_cluster_nodes) # Perform volume group discovery on the nodes in the cluster. # This information is used to determine if the volume group a # component is installed on is avaiable on other nodes in the # cluster. dspmsg -s $DISC_MSGSET $WASSACAT 80 "Performing cluster wide volume group discovery.\n" clharvest_vg -w > /dev/null dspmsg -s $DISC_MSGSET $WASSACAT 90 "\nPerforming Smart Assistant for WebSphere discovery\n" # Loop though each node in the cluster for node in $NODE_LIST; do echo "" ##### Do IHS search dspmsg -s $DISC_MSGSET $WASSACAT 100 "Searching for %s on %s.\n" "IBM Http Server" "$node" cl_rsh $node $WASSA_SBIN_DIR/cl_wasdiscihs 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids listen_host dspmsg -s $DISC_MSGSET $WASSACAT 20 " - Found version %s at %s.\n" "$version" "$install_path" if (( $version < $IHS_MIN_VERSION || $version > $IHS_MAX_VERSION )) ; then if (( $IHS_MIN_VERSION == $IHS_MAX_VERSION )) ; then dspmsg -s $DISC_MSGSET $WASSACAT 130 " - Only version %s of %s is supported.\n" "$IHS_MIN_VERSION" "IBM Http Server" else dspmsg -s $DISC_MSGSET $WASSACAT 140 " - Only versions %s thru %s are supported.\n" "$IHS_MIN_VERSION" "$IHS_MAX_VERSION" fi fi if (( $install_count > 1 )); then dspmsg -s $DISC_MSGSET $WASSACAT 40 " - Multiple installations were found. Only one installation per node \n\ is supported.\n" continue fi if [[ -z $install_vgs ]] ; then dspmsg -s $DISC_MSGSET $WASSACAT 260 " - WARNING: Could not discover volume group imformation. Verify that the \n\ volume group is varied on and the file system is mounted for this component.\n" continue fi KLIB_HACMP_are_pvids_shared $install_pvids if (( $? != 0 )); then dspmsg -s $DISC_MSGSET $WASSACAT 50 " - Installation is on volume group(s) %s, and those volume \n\ groups cannot be shared with other nodes.\n" "$install_vgs" continue fi # Pre-import verification passed # Add IHS to discovery ihskey="ihs_${node}" IHS_ARRAY[$ihskey]=$ihskey INSTALL_NODE_NAME[$ihskey]=$node INSTALL_PATH[$ihskey]=$install_path VERSION[$ihskey]=$version INSTALL_VGS[$ihskey]=$install_vgs VG_PVIDS[$ihskey]=$install_pvids LISTEN_HOST[$ihskey]=$listen_host done ##### Look for nodes with gskta.rte installed cl_rsh $node $WASSA_SBIN_DIR/cl_wasdiscgskta 2>/dev/null | read line echo $line | IFS=: read component install_count version if (( install_count != 0 )) ; then dspmsg -s $DISC_MSGSET $WASSACAT 150 " - This is potential fallover node for IBM Http Server.\n" GSKTA_ARRAY[$node]=$verion else dspmsg -s $DISC_MSGSET $WASSACAT 160 " - This node cannot be a fallover node for IBM Http Server. The \n\ package gskta.rte is not installed.\n" fi echo "" ##### Do WAS Search dspmsg -s $DISC_MSGSET $WASSACAT 100 "Searching for %s on %s.\n" "WebSphere Application Server" "$node" cl_rsh $node $WASSA_SBIN_DIR/cl_wasdiscserver 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids profile_count profile_name profile_path ismanaged wascell wasnode servername typename clustername endpoint_host translog dspmsg -s $DISC_MSGSET $WASSACAT 20 " - Found version %s at %s.\n" "$version" "$install_path" if (( $version < $WAS_MIN_VERSION || $version > $WAS_MAX_VERSION )) ; then if (( $IHS_MIN_VERSION == $IHS_MAX_VERSION )) ; then dspmsg -s $DISC_MSGSET $WASSACAT 130 " - Only version %s of %s is supported.\n" "$WAS_MIN_VERSION" "WebSphere Application Server" else dspmsg -s $DISC_MSGSET $WASSACAT 140 " - Only versions %s thru %s are supported.\n" "$WAS_MIN_VERSION" "$WAS_MAX_VERSION" fi fi if [[ -z $install_vgs ]] ; then dspmsg -s $DISC_MSGSET $WASSACAT 260 " - WARNING: Could not discover volume group imformation. Verify that the \n\ volume group is varied on and the file system is mounted for this component.\n" continue fi if [[ $typename == "DEPLOYMENT_MANAGER" ]] ; then dspmsg -s $DISC_MSGSET $WASSACAT 170 " - Found Deployment Manager %s for cell %s.\n" $servername $wascell #Add to CLUSTER_DM_ARRAY so we can look for WebSphere Clusters later dmkey="dm_${wascell}" CLUSTER_DM_ARRAY[$dmkey]=$dmkey WAS_CELL_NAME[$dmkey]=$wascell PROFILE_NAME[$dmkey]=$profile_name INSTALL_PATH[$dmkey]=$install_path INSTALL_NODE_NAME[$dmkey]=$node if (( $profile_count > 1 )) ; then dspmsg -s $DISC_MSGSET $WASSACAT 60 " - Multiple profiles were found. Only one profile per installation \n\ is supported.\n" continue fi KLIB_HACMP_are_pvids_shared $install_pvids if (( $? != 0 )); then dspmsg -s $DISC_MSGSET $WASSACAT 50 " - Installation is on volume group(s) %s, and those volume \n\ groups cannot be shared with other nodes.\n" "$install_vgs" continue fi # Pre-import verification passed # Add deployment manager to discovery DM_ARRAY[$dmkey]=$dmkey WAS_CELL_NAME[$dmkey]=$wascell WAS_NODE_NAME[$dmkey]=$wasnode WAS_SERVER_NAME[$dmkey]=$servername INSTALL_NODE_NAME[$dmkey]=$node PROFILE_NAME[$dmkey]=$profile_name INSTALL_PATH[$dmkey]=$install_path INSTALL_VGS[$dmkey]=$install_vgs VG_PVIDS[$dmkey]=$install_pvids ENDPOINT_HOST[$dmkey]=$endpoint_host VERSION[$dmkey]=$version elif [[ $typename == "APPLICATION_SERVER" ]] ; then dspmsg -s $DISC_MSGSET $WASSACAT 180 " - Found Application Server %s in cell %s on \n\ node %s.\n" $servername $wascell $wasnode # Keep transaction log for later serverkey="as_${wascell}_${wasnode}_${servername}" TRANSACTION_LOG[$serverkey]=$translog DEFAULT_TRANSACTION_LOG[$serverkey]=$translog if [[ -z $translog ]] ; then DEFAULT_TRANSACTION_LOG[$serverkey]="${profile_path}/tranlog/${wascell}/${wasnode}/${servername}/transaction" fi if (( $profile_count > 1 )) ; then dspmsg -s $DISC_MSGSET $WASSACAT 60 " - Multiple profiles were found. Only one profile per installation \n\ is supported.\n" continue fi KLIB_HACMP_are_pvids_shared $install_pvids if (( $? != 0 )); then dspmsg -s $DISC_MSGSET $WASSACAT 50 " - Installation is on volume group(s) %s, and those volume \n\ groups cannot be shared with other nodes.\n" "$install_vgs" continue fi if (( $ismanaged != 0 )); then dspmsg -s $DISC_MSGSET $WASSACAT 70 " - WARNING: The WebSphere Node %s is federated. Only \n\ stand-alone WebSphere Nodes (non-federated) ar supported.\n" $wasnode continue fi # Pre-import verification passed # Add Application Server to discovery SERVER_ARRAY[$serverkey]=$serverkey WAS_CELL_NAME[$serverkey]=$wascell WAS_NODE_NAME[$serverkey]=$wasnode WAS_SERVER_NAME[$serverkey]=$servername WAS_TYPE[$serverkey]=$typename WAS_CLUSTER_NAME[$serverkey]=$clustername ENDPOINT_HOST[$serverkey]=$endpoint_host TRANSACTION_LOG[$serverkey]=$translog nodekey="node_${wascell}_${wasnode}" if [[ -n ${NODE_ARRAY[$nodekey]} ]] ; then # The WebSphere node exists, so just append the server name to the list of servers WAS_SERVER_NAMES[$nodekey]="${WAS_SERVER_NAMES[$nodekey]} $servername" else # A new WebSphere node was found, so create a full entry NODE_ARRAY[$nodekey]=$nodekey WAS_CELL_NAME[$nodekey]=$wascell WAS_NODE_NAME[$nodekey]=$wasnode INSTALL_NODE_NAME[$nodekey]=$node PROFILE_NAME[$nodekey]=$profile_name INSTALL_PATH[$nodekey]=$install_path INSTALL_VGS[$nodekey]=$install_vgs VG_PVIDS[$nodekey]=$install_pvids IS_MANAGED[$nodekey]=$ismanaged VERSION[$nodekey]=$version WAS_SERVER_NAMES[$nodekey]=$servername fi else # A comonent was found that is not supported. # Print a message and ignore it. dspmsg -s $DISC_MSGSET $WASSACAT 190 " - Found %s. This component is not supported.\n" $typename fi done echo "" done echo "" ##### Search Deploment Managers for WebSphere Clusters if (( ${#CLUSTER_DM_ARRAY[@]} < 1 )) ; then dspmsg -s $DISC_MSGSET $WASSACAT 200 "No Deployment Managers were found. Skipping search for WebSphere Clusters." else for key in ${!CLUSTER_DM_ARRAY[@]} ; do dspmsg -s $DISC_MSGSET $WASSACAT 210 "Searching for WebSphere Clusters in cell %s.\n" ${WAS_CELL_NAME[$key]} cl_rsh ${INSTALL_NODE_NAME[$key]} "$WASSA_SBIN_DIR/cl_wasdiscclus ${INSTALL_PATH[$key]} ${PROFILE_NAME[$key]}" 2>/dev/null | while read line; do echo $line | IFS=: read component clustername wascell wasnode servername hostname translog dspmsg -s $DISC_MSGSET $WASSACAT 220 " - Found WebSphere Cluster %s member %s.\n" $clustername $servername clusterkey="clus_${wascell}_${clustername}" memberkey="WAS_CLUSMEM_${wascell}_${clustername}_${wasnode}_${servername}" if [[ -n ${FAILED_CLUSTER_ARRAY[$clusterkey]} ]]; then dspmsg -s $DISC_MSGSET $WASSACAT 250 " - WARNING: Another Cluster member is on a node which is not \n\ part of the HACMP cluster.\n" continue fi KLIB_HACMP_is_known_node $hostname if (( $? != 0 )) ; then # A hostname in the WebSphere cluster is not in the HACMP cluster. # Remove the WebSphere Cluster from discovery. dspmsg -s $DISC_MSGSET $WASSACAT 230 " - WARNING: Cluster member is on node %s which is not \n\ part of the HACMP cluster.\n" $hostname unset CLUSTER_ARRAY[$clusterkey] FAILED_CLUSTER_ARRAY[$clusterkey]=$clusterkey typeset mk for mk in ${!CLUSTER_MEMBER_ARRAY[@]}; do if [[ ${WAS_CLUSTER_NAME[$mk]} == $clustername ]] ; then unset CLUSTER_MEMBER_ARRAY[$mk] unset WAS_CELL_NAME[$mk] unset WAS_CLUSTER_NAME[$mk] unset WAS_SERVER_NAME[$mk] unset WAS_NODE_NAME[$mk] unset TRANSACTION_LOG[$mk] fi done continue fi # Pre-import verification passed # Add CLUSTER_MEMBER_ARRAY entry CLUSTER_MEMBER_ARRAY[$memberkey]=$memberkey WAS_CELL_NAME[$memberkey]=$wascell WAS_CLUSTER_NAME[$memberkey]=$clustername WAS_SERVER_NAME[$memberkey]=$servername WAS_NODE_NAME[$memberkey]=$wasnode TRANSACTION_LOG[$memberkey]=$translog DEFAULT_TRANSACTION_LOG[$memberkey]=$translog INSTALL_NODE_NAME[$memberkey]=$hostname # if transaction log is empty, set the default transaction log location. if [[ -z $translog ]] ; then typeset serverkey="as_${wascell}_${wasnode}_${servername}" DEFAULT_TRANSACTION_LOG[$memberkey]=${DEFAULT_TRANSACTION_LOG[$serverkey]} fi if [[ -n ${CLUSTER_ARRAY[$clusterkey]} ]] ; then # The WebSphere Cluster exists, so just append the server name to the list of servers WAS_SERVER_NAMES[$clusterkey]="${WAS_SERVER_NAMES[$clusterkey]} $servername" WAS_MEMBER_KEYS[$clusterkey]="${WAS_MEMBER_KEYS[$clusterkey]} $memberkey" if [[ -z $(echo ${INSTALL_NODE_NAMES[$clusterkey]} | grep -w $hostname) ]] ; then INSTALL_NODE_NAMES[$clusterkey]="${INSTALL_NODE_NAMES[$clusterkey]} $hostname" fi else # A new WebSphere Cluster was found, so create a full entry CLUSTER_ARRAY[$clusterkey]=$clusterkey WAS_CLUSTER_NAME[$clusterkey]=$clustername WAS_CELL_NAME[$clusterkey]=$wascell DM_NODE_NAME[$clusterkey]=${INSTALL_NODE_NAME[$key]} WAS_SERVER_NAMES[$clusterkey]=$servername WAS_MEMBER_KEYS[$clusterkey]=$memberkey INSTALL_NODE_NAMES[$clusterkey]=$hostname INSTALL_PATH[$clusterkey]=${INSTALL_PATH[$key]} PROFILE_NAME[$clusterkey]=${PROFILE_NAME[$key]} fi done echo "" done fi echo "" dspmsg -s $DISC_MSGSET $WASSACAT 240 "Creating discovery file.\n" echo "\n" # Check that the WebSphere Smart Assist etc directory exists. if [[ ! -d "$WASSA_ETC_PATH" ]] ; then mkdir -p "$WASSA_ETC_PATH" fi # Remove old discovery file rm -f $WASSA_DISC_FILE # Create the discovery file DATE=$(date +"%m/%d/%y %H:%M:%S") echo "#" >> $WASSA_DISC_FILE echo "# This ksh93 source file was generated on $DATE" >> $WASSA_DISC_FILE echo "# Do NOT alter the content of this file" >> $WASSA_DISC_FILE echo "#" >> $WASSA_DISC_FILE echo "" >> $WASSA_DISC_FILE populate_ihs_disc >> $WASSA_DISC_FILE populate_node_disc >> $WASSA_DISC_FILE populate_dm_disc >> $WASSA_DISC_FILE populate_clus_disc >> $WASSA_DISC_FILE echo "" >> $WASSA_DISC_FILE exit 0 h for kl#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasdiscgsktaas#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdiscgskta.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)79 1.2 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdiscgskta.sh, hacmp.assist, 61haes_r714 4/7/05 16:07:11 ################################################################### ## ## NAME: cl_wasdiscgskta ## ## DESCRIPTION: ## Discovers if the package gskta.rte is installed. This ## package is required is IBM Http Server can fallover to ## this node ## ## This utility is meant to be called remotely from ## cl_wasdiscovery. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Colon delimiter list of number of gskta.rte installations ## and the version number of the first one found. It is ## assumes that there are either 0 or 1 installation. ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_WAS_log_message ## KLIB_WAS_get_installations ## ################################################################### ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the message catalog entries #. /usr/es/sbin/cluster/sa/db2/cat/cl_db2discovery # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 QUICK_MODE=false # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ set -u integer install_count=0 typeset version="" typeset installations="" GSKTA_INSTALLATIONS=$(KLIB_WAS_get_installations "gskta.rte") echo $GSKTA_INSTALLATIONS | IFS=: read install_count installations echo $installations | IFS=: read version tmp KLIB_WAS_log_message "IHS INFO: cl_wasdiscgskta returning - $install_count:$version" echo "gskta:$install_count:$version" VE kh#on0םa՝a֝a&n2vT./usr/es/sbin/cluster/sa/was/sbin/cl_waslsserveras#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsserver.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2006,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)56 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsserver.sh, hacmp.assist, 61haes_r714 5/1/08 01:03:26 # ############################################################################# ## ## Name: cl_wasslsserver ## ## Description: Discovers and Lists the WebSphere Application Servers ## or Deployment Managers that may be available to ## Application Discovery ## ## Arguments: ## -i Node list to search ## -n Return Application Servers ## -d Return Deployment Managers ## ## Output: Appropriate SMIT output for select panel and creates ## temporary discovery file for later use. ## ############################################################################# # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH umask -S u=rw,g=,o= [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" WAS_MIN_VERSION="6.0" WAS_MAX_VERSION="6.1" KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 TYPE="" # Get the arguments. if set -- $(getopt i:nd $* 2>&1); then while [ $# != 0 ]; do case "$1" in -i) NODES=$2 shift ;; -d) # lists only Websphere Application Server node managed by HACMP TYPE="DEPLOYMENT_MANAGER" ;; -n) # lists only Websphere Application Server node not managed by HACMP TYPE="APPLICATION_SERVER" ;; --) shift break ;; esac shift done fi if [[ -z $TYPE ]] ; then exit 0 fi header="TRUE" # Check that the WebSphere Smart Assist etc directory exists. if [[ ! -d "$WASSA_ETC_PATH" ]] ; then mkdir -p "$WASSA_ETC_PATH" fi # Remove old discovery file rm -f $WASSA_DISC_FILE DATE=$(date +"%m/%d/%y %H:%M:%S") echo "#" >> $WASSA_DISC_FILE echo "# This ksh93 source file was generated on $DATE" >> $WASSA_DISC_FILE echo "# Do NOT alter the content of this file" >> $WASSA_DISC_FILE echo "#" >> $WASSA_DISC_FILE echo "" >> $WASSA_DISC_FILE # display only components not managed by HACMP if [[ -n $NODES ]]; then NODES=$(echo "$NODES" | tr ',' ' ') for node in $NODES ; do cl_rsh $node $WASSA_SBIN_DIR/cl_wasdiscserver -q 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids profile_count profile_name profile_path ismanaged wascell wasnode servername typename endpoint_host # Make sure values were returned. Sometimes with bad installs, these values can be missing. if [[ -z $version || -z $profile_count || -z $profile_name || -z $profile_path || -z $typename ]] ; then continue fi # Check for version if (( $version < $WAS_MIN_VERSION || $version > $WAS_MAX_VERSION )) ; then continue fi # Check for multiple profiles if (( $profile_count > 1 )); then continue fi # Check for volume groups if [[ -z $install_vgs ]] ; then continue fi KLIB_HACMP_are_pvids_shared $install_pvids if (( $? != 0 )); then continue fi if [[ $TYPE == "APPLICATION_SERVER" ]] ; then # Check for federated if (( $ismanaged != 0 )); then continue fi # Check for APPLICATION_SERVER if [[ $typename != "APPLICATION_SERVER" ]] ; then continue fi APPLICATION_NAME="WAS_NODE_${wascell}_${wasnode}" # Look for already configured instances clquerysaapp -a $APPLICATION_NAME INSTALL_NODE_NAME > /dev/null 2>&1 if (( $? == 0 )) ; then continue; fi if [[ "$header" == "TRUE" ]]; then printf "#Cell Node\n" printf "#---------------------------------------------------------------------\n" #printf " 1 2 3 4 5 6 7\n" #printf "1234567890123456789012345678901234567890123456789012345678901234567890\n" header="FALSE" fi printf "%-38s %s\n" ${wascell} ${wasnode} fi if [[ $TYPE == "DEPLOYMENT_MANAGER" ]] ; then # Check for DEPLOYMENT_MANAGER if [[ $typename != "DEPLOYMENT_MANAGER" ]] ; then continue fi APPLICATION_NAME="WAS_DM_${wascell}" # Look for already configured instances clquerysaapp -a $APPLICATION_NAME INSTALL_NODE_NAME > /dev/null 2>&1 if (( $? == 0 )) ; then continue; fi if [[ "$header" == "TRUE" ]]; then printf "#Cell Server Name\n" printf "#---------------------------------------------------------------------\n" #printf " 1 2 3 4 5 6 7\n" #printf "1234567890123456789012345678901234567890123456789012345678901234567890\n" header="FALSE" fi printf "%-38s %s\n" ${wascell} ${servername} fi echo "unset $APPLICATION_NAME" >> $WASSA_DISC_FILE echo "typeset -A $APPLICATION_NAME" >> $WASSA_DISC_FILE echo "$APPLICATION_NAME=( \\" >> $WASSA_DISC_FILE echo "\t[WAS_CELL_NAME]=\"${wascell}\"" >> $WASSA_DISC_FILE echo "\t[WAS_NODE_NAME]=\"${wasnode}\"" >> $WASSA_DISC_FILE echo "\t[WAS_SERVER_NAME]=\"${servername}\"" >> $WASSA_DISC_FILE echo "\t[WAS_TYPE]=\"${TYPE}\"" >> $WASSA_DISC_FILE echo "\t[INSTALL_NODE_NAME]=\"${node}\"" >> $WASSA_DISC_FILE echo "\t[PROFILE_NAME]=\"${profile_name}\"" >> $WASSA_DISC_FILE echo "\t[INSTALL_PATH]=\"${install_path}\"" >> $WASSA_DISC_FILE echo "\t[INSTALL_VGS]=\"${install_vgs}\"" >> $WASSA_DISC_FILE echo "\t[VG_PVIDS]=\"${install_pvids}\"" >> $WASSA_DISC_FILE echo "\t[ENDPOINT_HOST]=\"${endpoint_host}\"" >> $WASSA_DISC_FILE echo "\t[VERSION]=\"${version}\"" >> $WASSA_DISC_FILE echo ")" >> $WASSA_DISC_FILE echo "" >> $WASSA_DISC_FILE done done echo "" >> $WASSA_DISC_FILE exit 0 else dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 20 "ERROR: There is no %1\$s information in the discovery file.\n" "WebSphere Application Server" exit 1 fi  kz'#o 0םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wassaclusqueryas#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wassaclusquery.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/was/sbin/cl_wassaclusquery.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################# ## ## Name: cl_wassaclusquery ## ## Description: Performs application discovery query on the local node ## to determine if WebSphere Cluster are available ## ## Arguments: none ## ## Returns: n/a ## ############################################################################# . /usr/es/lib/ksh93/func_include version='1.3 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/was/sbin/cl_wassaclusquery.sh 1$' ############################################################################# # Functions: # # ############################################################################# function displayClusTLInstall { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x integer installed=0 $WASSA_SBIN_DIR/cl_wasdiscclus -q 2>/dev/null | while read line; do echo $line | IFS=: read component version cluster_list wascell wasnode servername install_path profile_name profile_path # Check for version if (( $version < $WAS_MIN_VERSION || $version > $WAS_MAX_VERSION )) ; then break fi installed=1 break; done print -n $(dspmsg -s 10 wassa.cat 10 "WebSphere Smart Assist") print -n ":WAS_6.0:" print -n $(dspmsg -s 10 wassa.cat 30 "WebSphere Cluster Transaction Log Recovery") print -n ":WAS_6.0_TRANSACTION_LOG_RECOVERY:" echo $installed } ############################################################################# # Global Variables: ############################################################################# # Set the FPATH for all WAS / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/:/usr/es/sbin/cluster/utilities/ WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WAS_MIN_VERSION="6.0" WAS_MAX_VERSION="6.1" ############################################################################# # Main: ############################################################################# displayClusTLInstall exit 0 $WASSA_ kl#o 0םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wassaihsqueryas#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wassaihsquery.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2006,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/was/sbin/cl_wassaihsquery.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################# ## ## Name: cl_wassaihsquery ## ## Description: Performs application discovery query on the local node ## to determine if IBM Http Server is available ## ## Arguments: none ## ## Returns: n/a ## ############################################################################# . /usr/es/lib/ksh93/func_include version='1.4' ############################################################################# # Functions: # # ############################################################################# function displayIHSInstall { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x integer installed=0 # Perform volume group discovery clharvest_vg -w > /dev/null $WASSA_SBIN_DIR/cl_wasdiscihs 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids listen_host # Check for version if (( $version < $IHS_MIN_VERSION || $version > $IHS_MAX_VERSION )) ; then break fi # Check for multiple installs if (( $install_count > 1 )); then break fi # Check for volume groups if [[ -z $install_vgs ]] ; then break fi KLIB_HACMP_are_pvids_shared $install_pvids if (( $? != 0 )); then break fi installed=1 break; done print -n $(dspmsg -s 10 wassa.cat 10 "WebSphere Smart Assistant") print -n ":WAS_6.0:" print -n $(dspmsg -s 10 wassa.cat 15 "IBM Http Server") print -n ":WAS_6.0_IHS_SERVER:" echo $installed } ############################################################################# # Global Variables: ############################################################################# # Set the FPATH for all WAS / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/:/usr/es/sbin/cluster/utilities/ WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" IHS_MIN_VERSION="6.0" IHS_MAX_VERSION="6.1" ############################################################################# # Main: ############################################################################# displayIHSInstall exit 0 4  kꞩ#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wassatdsqueryas#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wassatdsquery.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)20 1.2 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wassatdsquery.sh, hacmp.assist, 61haes_r714 5/9/06 18:51:36 ############################################################################# ## ## Name: cl_wassatdsquery ## ## Description: Performs application discovery query on the local node ## to determine if Tivoli Directory Server is available ## ## Arguments: none ## ## Returns: 0 Success ## 1 Failure ## ############################################################################# ############################################################################# # Functions: # # # displayInstall: # If any package installed, Displays information # # Arguments: # Package Name # Display Name # Component Name # Message Id number # # Return: # 0 Success # 1 Failure # ############################################################################# function displayInstall { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x pkgname=$1 name=$2 component=$3 msgid=$4 integer installed=0 lslpp -l | grep $pkgname 1>/dev/null if test $? -eq 0 then installed=1 fi print -n $(dspmsg -s 10 wassa.cat 10 "Websphere Smart Assistant") print -n ":WAS_6.0:" print -n $(dspmsg -s 10 wassa.cat $msgid "$name") print -n ":$component:" echo $installed } ############################################################################# # Main: ############################################################################# TDSPackageName="IBMDirectoryProduct" TDSName="Tivoli Directory Server" TDScomponent="WAS_6.0_TIVOLI_LDAP" TDSMessageId=35 displayInstall "$TDSPackageName" "$TDSName" "$TDScomponent" $TDSMessageId exit 0 I kN|#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wassaserverquery#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wassaserverquery.sh 1.5 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2006,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/was/sbin/cl_wassaserverquery.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################# ## ## Name: cl_wassaserverquery ## ## Description: Performs application discovery query on the local node ## to determine if WebSphere Application Server (standalone) ## is available ## ## Arguments: ## -n query for Application Servers ## -d query for Deployment Managers ## ## Output: Application Discovery output ## ############################################################################# . /usr/es/lib/ksh93/func_include version='1.5 $Source: 61haes_r711 43haes/usr/sbin/cluster/sa/was/sbin/cl_wassaserverquery.sh 1$' ############################################################################# # Global Variables: ############################################################################# # Set the FPATH for all WAS / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/:/usr/es/sbin/cluster/utilities/ WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WAS_MIN_VERSION="6.0" WAS_MAX_VERSION="6.1" ############################################################################# # Main: ############################################################################# [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # Get the arguments. if set -- $(getopt nd $* 2>&1); then while [ $# != 0 ]; do case "$1" in -d) # lists only Websphere Application Server node managed by HACMP TYPE="DEPLOYMENT_MANAGER" ;; -n) # lists only Websphere Application Server node not managed by HACMP TYPE="APPLICATION_SERVER" ;; --) shift break ;; esac shift done fi if [[ -z $TYPE ]] ; then exit 0 fi # Perform volume group discovery clharvest_vg -w > /dev/null integer installed=0 $WASSA_SBIN_DIR/cl_wasdiscserver -q 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids profile_count profile_name profile_path ismanaged wascell wasnode servername typename endpoint_host # Make sure values were returned. Sometimes with bad installs, these values can be missing. if [[ -z $version || -z $profile_count || -z $profile_name || -z $profile_path || -z $typename ]] ; then continue fi # Check for version if (( $version < $WAS_MIN_VERSION || $version > $WAS_MAX_VERSION )) ; then continue fi # Check for multiple profiles if (( $profile_count > 1 )); then continue fi # Check for volume groups if [[ -z $install_vgs ]] ; then continue fi KLIB_HACMP_are_pvids_shared $install_pvids if (( $? != 0 )); then continue fi if [[ $TYPE == "APPLICATION_SERVER" ]] ; then # Check for APPLICATION_SERVER if [[ $typename != "APPLICATION_SERVER" ]] ; then continue fi # Check for federated if (( $ismanaged != 0 )); then continue fi fi if [[ $TYPE == "DEPLOYMENT_MANAGER" ]] ; then # Check for DEPLOYMENT_MANAGER if [[ $typename != "DEPLOYMENT_MANAGER" ]] ; then continue fi fi installed=1 break; done print -n $(dspmsg -s 10 wassa.cat 10 "WebSphere Smart Assist") print -n ":WAS_6.0:" if [[ $TYPE == "APPLICATION_SERVER" ]] ; then print -n $(dspmsg -s 10 wassa.cat 20 "WebSphere Application Server") print -n ":WAS_6.0_APP_SERVER:" fi if [[ $TYPE == "DEPLOYMENT_MANAGER" ]] ; then print -n $(dspmsg -s 10 wassa.cat 25 "WebSphere Deployment Manager") print -n ":WAS_6.0_DEPLOYMENT_MANAGER:" fi echo $installed exit 0 @(# k@#o 0םaY՝a֝a& 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasserverdisc.jacl# @(#)85 1.3 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasserverdisc.jacl, hacmp.assist, 61haes_r714 4/25/06 13:48:02 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasserverdisc.jacl 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG ################################################################### ## ## NAME: cl_wasserverdisc ## ## DESCRIPTION: ## This is a JACL script the searches for configured ## WebSphere Application Servers in WebSphere Node using the ## wsadmin.sh command line utility. ## ## This script is meant to be called from ## cl_wasdiscserver. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Colon delimiter list of WebSphere Application Server ## where each line contains info about a ## separate cluster member. Information ## gathered is: ## ## WebSphere Server Name ## Server Type ## WebSphere Cluster Name server belongs to ## The host or IP address the server listens on ## Transaction Log Location ## ## Each line is prepended with "SA_WAS:". This is needed ## because wsadmin.sh always outputs other lines that need ## to be ignored. ## ## EXIT CODES: ## None ## ################################################################### proc serverdisc {wasnode} { global AdminControl global AdminConfig # Get the node id for the provided WebSphere node name set nodeid [$AdminConfig getid /Node:$wasnode] if {$nodeid == "" } { return } # Get the application server on the node set servs [$AdminConfig list Server $nodeid] # Get the server entries on the node. This is needed to # get the transaction log location. set serverentries [$AdminConfig list ServerEntry $nodeid] foreach server $servs { set sname [$AdminConfig showAttribute $server name] set stype [$AdminConfig showAttribute $server serverType] set clusname [$AdminConfig showAttribute $server clusterName] # Get the host or IP address the server listens on set nslist [$AdminConfig list NameServer $server] set ns [lindex $nslist 0] # There are many ports a server listens on, only use # the BOOTSTRAP_ADDRESS set bootstraplist [$AdminConfig showAttribute $ns BOOTSTRAP_ADDRESS] set bootstrap [lindex $bootstraplist 0] set host [$AdminConfig showAttribute $bootstrap host] # Search for the transaction log location for this # application server set translog "" foreach serverentry $serverentries { if {$sname == [$AdminConfig showAttribute $serverentry serverName]} { set recoveryloglist [$AdminConfig showAttribute $serverentry recoveryLog] if {[llength $recoveryloglist] > 0} { set recoverlog [lindex $recoveryloglist 0] set translog [$AdminConfig showAttribute $recoverlog transactionLogDirectory] } break } } puts "SA_WAS:$sname:$stype:$host:$clusname:$translog" } } if { !($argc == 1) } { puts "SA_WAS:serverdisc: this script requires 1 parameter" } else { set wasnode [lindex $argv 0] serverdisc $wasnode } onent i ke#od0םaY՝a֝a&d2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasismanaged.jacl# @(#)84 1.1 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasismanaged.jacl, hacmp.assist, 61haes_r714 3/23/05 14:19:37 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasismanaged.jacl 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG ################################################################### ## ## NAME: cl_wasismanaged ## ## DESCRIPTION: ## This is a JACL script the determines if the local node ## is managed (i.e. federated.) ## ## This script is meant to be called from ## cl_wasdiscserver. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## 1 - node is managed ## 0 - node is not managed ## ## Each line is prepended with "SA_WAS:". This is needed ## because wsadmin.sh always outputs other lines that need ## to be ignored. ## ## EXIT CODES: ## None ## ################################################################### proc ismanaged {} { global AdminControl global AdminConfig # If there are any node agents defined on the node, then # it is managed. set nodeagents [$AdminConfig list NodeAgent] if {[llength $nodeagents] > 0} { puts "SA_WAS:1" } else { puts "SA_WAS:0" } } if { !($argc == 0) } { puts "ismanaged: this script requires 0 parameter" puts "" exit 1 } else { ismanaged exit 0 }  k^#o 0םaY՝a֝a& 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasclusterdisc.jacl_config# @(#)83 1.1 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasclusterdisc.jacl, hacmp.assist, 61haes_r714 3/23/05 14:19:35 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasclusterdisc.jacl 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG ################################################################### ## ## NAME: cl_wasclusterdisc ## ## DESCRIPTION: ## This is a JACL script the searches for configured ## WebSphere Clusters using the wsadmin.sh command line ## utility. ## ## This script is meant to be called from ## cl_wasdiscclus. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Colon delimiter list of WebSphere Cluster ## memebers where each line contains info ## about a separate cluster member. Information ## gathered is: ## ## WebSphere Cluster Name ## WebSphere Cell Name ## WebSphere Node Name ## WebSphere Server Name ## Host Name ## Transaction Log Location ## ## Each line is prepended with "SA_WAS:". This is needed ## because wsadmin.sh always outputs other lines that need ## to be ignored. ## ## EXIT CODES: ## None ## ################################################################### proc clusterdisc {} { global AdminControl global AdminConfig variable servernames "" variable hostnames "" set cells [$AdminConfig list Cell] foreach cell $cells { set cellname [$AdminConfig showAttribute $cell name] # Get the WebSphere Clusters that are in the cell. set serverclusters [$AdminConfig list ServerCluster $cell] foreach servercluster $serverclusters { set clustername [$AdminConfig showAttribute $servercluster name] # Get the cluster members (application servers) that are in the WebSphere Cluster set clustermembers [$AdminConfig list ClusterMember $servercluster] foreach clustermember $clustermembers { set servername [$AdminConfig showAttribute $clustermember memberName] set nodename [$AdminConfig showAttribute $clustermember nodeName] set nodeid [$AdminConfig getid /Node:$nodename] set hostname [$AdminConfig showAttribute $nodeid hostName] set translog "" set serverentries [$AdminConfig list ServerEntry $nodeid] # Search for a transaction log entry. foreach serverentry $serverentries { if {$servername == [$AdminConfig showAttribute $serverentry serverName]} { set recoveryloglist [$AdminConfig showAttribute $serverentry recoveryLog] if {[llength $recoveryloglist] > 0} { set recoverlog [lindex $recoveryloglist 0] set translog [$AdminConfig showAttribute $recoverlog transactionLogDirectory] } break } } puts "SA_WAS:$clustername:$cellname:$nodename:$servername:$hostname:$translog" } } } } if { !($argc == 0) } { puts "SA_WAS:clusterdisc: this script requires 0 parameters" } else { clusterdisc } eturne l#o@wK0םa՝a֝a&-2vT./usr/es/sbin/cluster/sa/was/sbin/was_xutilserd@@  "-e _ainrst/clopu#:AENOPRSTdgmv$,.019CGILY\bfhwxy'236=BDMVW]k|%&()FK[^{}*45>+7-EWH1e-LRp<<-E D Y`B,D<\ WH1e-LRp<<-E J=,5d Yb%AJbDā,Ah"d ʐ#4{#?"8 ƒUr"TL$#8,LN( ҕ~?n߲1{E_Rrpy,z 6ÆY,z d \?ͼaZ,e@D:HY$LZXpph$~8ADŏbIA='6>z.0ǍO='ػFЋ}l{Iȵ9{M%~9$Fm ,B@49d ,884=$Fm ,&-d ,884>v1d< @ZHXhrXpph%i"3o` 9d1k YaH4Df0@r-C@ÃG_Њ܉'p:qǠ#o: 8e:qǠABnH4iy\ ,\!+$@Fp'ԯN:tA8Ftp tAc,1G$Hrq!Mt""bx b͜C _itoږ][]J$ =j.s ^)2SKL@Y8m\O: [] )_W7#Z qt_`J7o܉܉i$€cθfNZbہǠn8o܉y])'78O8,"bചxI 1Ș-&A_jZM<%E_mRZM<$aXP rpy,z 6Pl[p80ǛDH{ڔa08?  `| {](;@O8,[ʹjKIl" !o6-&A_~;0$Va]1vꪪRc⸰P2JZb\W?d.-h4wm'sF{fLűgWbs͘lX,6N*&B-gy64Y A)AJ'\"qaRe.$D I${"]a ,DV#6!h W=>+ (DqNC  #+ (DqNAȁ19!bŒA$iQvZn߈ZO3BgqUڒi$33<sE؄.yӹyd HX ~aqaRe.(~9_ˌ64Z5g1\.)^B,q+Epņq D@ @Y8mA @Y824H=3r "TDUOkqņq D@ RItWn0P2J"YJ ,P3*@@`a'n0`Nm3(5@j:C;qj.DIЋ}a XjJ $]`*nE~&FF/k8.^ Y`D1@qE He3V~z&EPq6E>Ѥ1t^iPRqj.l"$E>ఁ,5`%Ɋ.qDH~XDɨ˕ G0h0G70~Eѷp( (D0b+&""$HFpX/"Pǡ+pi&PtpD!@R98<k=ya,k=BvM)ȘNg94y] X8N:tA8FuŵЈ`ҿjЊ98<k=y΃B!JWH1e-LRp<<w l L^`֓ig x ymKk8 XĒA-EapE7f^ixg'p:qǠ#o:ybD0iJr&l#V~L\~L\O Du 5p=q;xL^̾!@bOii=|'U|-}%H6iԖO D TUUUUUUUUUUUUUUUUUUUUURlAzOE+|F.am uUUUUUUUUUUUUUUUUUUUUU)_ItW\Xg(TB%K-1?.aP`? bqU~;6Pl#?3s&b3OvOFҹ6,B_`_f'WIг~c⸰ u 5p0@ 5YIǦu  "DUOkqņq D@ RItWn0P2J"YJ ,P3*@@`a'n0`Nm3(5@j:C;qj.DIЋ}a Xj˕ HD,Lʑ&"TQC;{RQpM8^B,q ] @K Yr  \H%YR"J(rdy[I[^L\9CSIGD_k8cFyEC:JMŨA8 ,՗*@bĉX1" LD+$LH&M@\8~A<.3(5_@W!@%AX1"B3|4.= )_m+=I4.B_m+r&. J\\q'΃d\q,eB>S1p1frh!/7@0,*pu 5pAk~.#ok '&rpy,z 6'-C1 bZ59rxxx z8 ƒTCC;qj.DJ ,RV\E&IbdVT0y6{ڔZmtVዢ# @K Yr  \H%YR"Jgi$]n(vALպ00z&E[][1pPN)'Ok :"OE+|[p4.2*)$㌵1kEc]*L8.a"F/E((wF][C;Ion/ g#o: >-Egn7p$ =j.0T;--Zdj;-- #o0'8e}N]AP A3W L0bh2#A(]7%PX@eH,@@2K&"D ȕ+ ,P3*@@`a'n0`ok$' Wr"TL$#8,LN( ҕ9_k`z&#Y89_Jqo6-&An8@lmjClvr1d!f6Cc̦jX.D,(98<k=ya,k=@y $LDq6sA '}Ѿ aS/ $XBVH8=!,Ok04_N:tA8Ftp tAc,'}pYp@y'mڐpfC_'p:qǠ#o: 8e:qǠ@Ӿ(Hb Y"33P@e 1bJg94y] X8N:tA8FuŵЈ`ҕX#}Dzg8[ʹjY:IE>V7$iQsjN:tA8FuŵЈ`ҕ[nZ U-}%H6'p:qǠ#o98ŷAc yD.F'ƒ4:OxI 2m>ڒi$`jftxI*ٕH6'p:qǠ#o: 8e:qǠA3/7@0,*pqW8XW̭&A,( 6ei4 @@5JuUUUUUUUUUUUUUUUUUUUUU+ن$7Ro 迶10UUUUUUUUUUUUUUUUUUUUUREpņrI"T !skA'WlA;37?͍f-38hm+lbd.bqU~;4l- >3ɶ\Z OZ 4ĩJ'\"qaRe.$D I${"]a ,DV#6!h W=>+ (DqNC  #+ (DqNAD琅A!}&qUS }<3h{\fyb]BW\s2A!`W=&PRW=>+ (DqNA3@e 1bJ! CNjU!G'yU_C3".!sȻ*b/NedB!`W=&PRW=>+ (DqN@,XPx"kyxoa<* O-Eؚ&r8)LȌO38撞ag;bqUȻ1zw<#,{" lEv (DqE+~\aDѦ82ů=8َ(vMbc~9_+X,3"o''p:qǠ#o: 8e:qǠAE=%_+\XgD+Ev (Dq"%1 bZ59rxxx z8 ƒTCCq"Yb -)T:bxn>-EZ&jbyP FҸ\{qra.6,6TC?-I${"]nߞu:qj n AlI(<ƓP,WJq. H ,WJqEb\DIЋ}a Xj(Jȕ'qAG Y`B,D(=cIŨ@+pkMǂ$\ma Xlpt"tx.Pl"$E>ఁ,5eʐ$Xq"d&LEeH*)*#i\.:OE%raE(, @K Yr  \H%YR"JJu kR5#oABםaBםa֝a&2vT./usr/es/lib/ksh93/wasaAA kno0םa՝a֝a&2vT./usr/es/lib/ksh93/was/KLIB_WAS_get_installationsc.jacl#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/was/KLIB_WAS_get_installations.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2009 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)36 1.2 src/43haes/lib/ksh93/was/KLIB_WAS_get_installations.sh, hacmp.assist, 61haes_r714 1/13/09 16:24:40 # #=head1 NAME # # KLIB_WAS_get_installations - Obtain a list of all installed instances of a # fileset # #=head1 SYNOPSIS # # instances=$(KLIB_WAS_get_installations $fileset) # #=head1 DESCRIPTION # # Obtain a list of all of the installed instances of IBM Http Server # #=head1 ARGUMENTS # # 1: [scalar] fileset name # #=head1 RETURN # # echo to stdout the number of installed instances found followed by a # list of discovered fileset installations. Each item contains the version # and installation path. # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_WAS_get_installations { . /usr/es/lib/ksh93/func_include name=$1 installs="" integer count=0 lslpp -Lc "$name" 2>/dev/null | while IFS=: read image fileset version tmp tmp tmp tmp tmp install_dir tmp; do if [[ ${fileset/$name/found} == "found" ]]; then echo $version | IFS='.' read a b c d e if (( $count == 0 )); then installs="$a.$b:$install_dir" else installs="$installs:$a.$b:$install_dir" fi count=$count+1 fi done echo "$count:$installs" return 0 }  knoM0םa՝a֝a&M2vT./usr/es/lib/ksh93/was/KLIB_WAS_get_ihs_listen_hostjacl#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/was/KLIB_WAS_get_ihs_listen_host.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2009 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)34 1.3 src/43haes/lib/ksh93/was/KLIB_WAS_get_ihs_listen_host.sh, hacmp.assist, 61haes_r714 1/13/09 16:24:41 # #=head1 NAME # # KLIB_WAS_get_ihs_listen_host - Obtain the hostname or IP address of the Listen # directive in an httpd.conf # #=head1 SYNOPSIS # # instances=$(KLIB_WAS_get_ihs_listen_host ihs_install_path) # #=head1 DESCRIPTION # # Function echo to stdout the IP Address or hostname of the first Listen # directive found in httpd.conf # #=head1 ARGUMENTS # # 1: [scalar] installation path to IBM Http Server # #=head1 RETURN # # None # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_WAS_get_ihs_listen_host { . /usr/es/lib/ksh93/func_include typeset ihs_path=$1 typeset httpd_conf="$ihs_path/conf/httpd.conf" typeset listen="" typeset listen_host="" if [[ -r $httpd_conf ]]; then listen=$(/usr/bin/grep -E "^Listen*" $httpd_conf | cut -d ' ' -f 2- | head -n 1) if [[ ${listen/*:*/found} == "found" ]]; then listen_host=$(echo "$listen" | cut -d ':' -f 1) fi fi echo "$listen_host" }  ko0םa՝a֝a&2vT./usr/es/lib/ksh93/was/KLIB_WAS_get_ihs_plugin_pathjacl#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/was/KLIB_WAS_get_ihs_plugin_path.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2009 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)35 1.3 src/43haes/lib/ksh93/was/KLIB_WAS_get_ihs_plugin_path.sh, hacmp.assist, 61haes_r714 1/13/09 16:24:41 # #=head1 NAME # # KLIB_WAS_get_ihs_plugin_path - Obtain the path to the WebSphere Plugin # used by the IBM Http Server # #=head1 SYNOPSIS # # instances=$(KLIB_WAS_get_ihs_plugin_path ihs_install_path) # #=head1 DESCRIPTION # # Function echo to stdout the path to the the WebSphere Plugin used # by the IBM Http Server # #=head1 ARGUMENTS # # 1: [scalar] installation path to IBM Http Server # #=head1 RETURN # # None # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_WAS_get_ihs_plugin_path { . /usr/es/lib/ksh93/func_include typeset ihs_path=$1 typeset httpd_conf="$ihs_path/conf/httpd.conf" typeset plugin_path="" if [[ -r $httpd_conf ]]; then plugin_path=$(/usr/bin/grep "WebSpherePluginConfig" $httpd_conf | /usr/bin/grep -v "#WebSpherePluginConfig" | awk '{print $2}') fi echo $plugin_path return 0 } l klo0םa՝a֝a&2vT./usr/es/lib/ksh93/was/KLIB_WAS_log_messagein_p# @(#)77 1.3 src/43haes/lib/ksh93/was/KLIB_WAS_log_message.sh, hacmp.assist, 61haes_r714 11/28/11 15:12:33 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/was/KLIB_WAS_log_message.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # #=head1 NAME # # KLIB_WAS_log_message - print a message to the wassa.log # #=head1 SYNOPSIS # # KLIB_WAS_LOG_message "Message" # #=head1 DESCRIPTION # # Print a message to the console and to db2sa.log # # Global Variables: # KLIB_DEFAULT_LOGFILE = fullpath to log file name # KLIB_HACMPLOG_ENTRY = HACMPlog entry to obtain path for # KLIB_OUTPUT_CONSOLE = true / false # #=head1 ARGUMENTS # # 1: [scalar] Message: The message to be logged. # #=head1 RETURN # # 0: on SUCCESS # 1: on FAILURE # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_WAS_log_message { . /usr/es/lib/ksh93/func_include typeset MESSAGE=$1 DATE=$(date +"%m/%d/%y %H:%M:%S") if [[ -z $KLIB_DEFAULT_LOGFILE && -z $KLIB_HACMPLOG_ENTRY ]]; then echo "Fatal Error: KLIB_LOGFILE and KLIB_HACMPLOG_ENTRY not set!" return 1 fi LOGFILE=$KLIB_DEFAULT_LOGFILE if [[ -n $KLIB_HACMPLOG_ENTRY && -z $KLIB_HACMPLOG_VALUE ]]; then odmget -q name=$KLIB_HACMPLOG_ENTRY HACMPlogs | while IFS='=' read name value; do name=$(eval echo $name) if [[ "$name" == "value" ]]; then value=$(eval echo $value) KLIB_HACMPLOG_VALUE=$value fi done 2>/dev/null fi if [[ -n $KLIB_HACMPLOG_VALUE ]]; then LOGFILE=$KLIB_HACMPLOG_VALUE fi if [[ "$KLIB_OUTPUT_CONSOLE" == "true" ]]; then echo "$DATE: $MESSAGE" | tee -a $LOGFILE else echo "$DATE: $MESSAGE" >> $LOGFILE fi return 0 } ] kfoP0םa՝a֝a&P2vT./usr/es/lib/ksh93/was/KLIB_WAS_ch_httpd_directivejacl#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/ksh93/was/KLIB_WAS_ch_httpd_directive.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)35 1.1 src/43haes/lib/ksh93/was/KLIB_WAS_ch_httpd_directive.sh, hacmp.assist, 61haes_r714 4/6/05 13:01:17 # #=head1 NAME # # KLIB_WAS_ch_httpd_directive - Change the httpd.conf directive to a new value # #=head1 SYNOPSIS # # KLIB_WAS_ch_httpd_directive "/usr/IBMIHS/conf/httpd.conf" "Listen" \ # "10.10.11.107:80" KLIB_WAS_ch_httpd_directive_port_equals # echo "Number of replacements: $?" # #=head1 DESCRIPTION # # This function changes the specified directive in httpd.conf formatted files. # # The 4th argument to this function is a comparison function, which is passed # four arguments, the return code from that function determines whether the current # value is replaced. # # A backup of the original file is created as filename.backup -- in the same path # as the original. # # The four arguments to the comparitor function are: # 1: Directive (current directive name - Listen) # 2: Current value in httpd.conf file # 3: Value we've been asked to use as a replacement # 4: Section name from config file, IfDefine, etc. # 5: Section arguments example: IfDefine HAVE_SSL, args=HAVE_SSL # If the return code from the function is 0, then a replacement will occur # If the return code is any value other than 0, then a replacement will not occur # # If the above function is not specified, then all values are replaced # # If a directive with the same name cannot be found, then a new entry is added # to the bottom of the httpd.conf file # #=head1 ARGUMENTS # # 1: [scalar] httpd.conf filename (required) # 2: [scalar] directive to search for (required) # 3: [scalar] new value for directive (required) # 4: [by ref] function to perform comparison (not required) # #=head1 RETURN # # returns the number of replacements / or additions performed # #=head1 COPYRIGHT # #(C) COPYRIGHT International Business Machines Corp. 2005 #All Rights Reserved # #=cut # function KLIB_WAS_ch_httpd_directive { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset filename=$1 typeset directive=$2 typeset newvalue=$3 typeset regexp_function=$4 typeset tmpname typeset changed=false typeset -i ch_count=0 [[ -z $filename || ! -f $filename ]] && return 0 [[ -z $directive ]] && return 0 IFS=" " while read -r line; do tmpname=${line/\#*/} [[ -n $tmpname ]] && { # Did we find the start of an httpd.conf section? if [[ $tmpname != ${tmpname#\<} ]]; then section=${tmpname/\<\//} args=${section/*[[:space:]]/} args=${args/\>/} section=${section/[[:space:]]*/} section=${section/\>*/} section=${section//[[:space:]]/} # If this is the start of a new section if [[ ${section:0:1} == "<" ]]; then section=${section/\ $filename.new # If we couldn't change the value in the above logic, then # create a new entry at the end of the httpd.conf file for # our directive. $changed || { echo "$directive $newvalue" >> $filename.new (( ch_count += 1 )) } # Backup the file if a backup doesn't already exist [[ ! -f $filename.backup ]] && mv $filename $filename.backup [[ -f $filename ]] && rm -f $filename mv $filename.new $filename return $ch_count }  kt#o0םaY՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasclusteraction.jaclonfig# @(#)15 1.1 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasclusteraction.jacl, hacmp.assist, 61haes_r714 3/30/05 07:40:18 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasclusteraction.jacl 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG ################################################################### ## ## NAME: cl_wasclusteraction ## ## DESCRIPTION: ## This is a JACL script the performs an action on ## all members of a WebSphere cluster. The action ## is normally startServer or stopServer. ## ## This script is meant to be called from ## cl_wasstartstopcluster. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## None ## ## EXIT CODES: ## None ## ################################################################### proc clusteraction {clustername action} { global AdminControl global AdminConfig variable servernames "" variable hostnames "" set clusterid [$AdminConfig getid /ServerCluster:$clustername] set clustermembers [$AdminConfig list ClusterMember $clusterid] foreach clustermember $clustermembers { set servername [$AdminConfig showAttribute $clustermember memberName] set nodename [$AdminConfig showAttribute $clustermember nodeName] # Continue if the cluster member is already at the desired state. catch { $AdminControl $action $servername $nodename } } } if { !($argc == 2) } { puts "SA_WAS:clusteraction: this script requires 2 parameter" } else { set clustername [lindex $argv 0] set action [lindex $argv 1] clusteraction $clustername $action } #  kB#o0םaY՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasclusterconfig.jaclonfig# @(#)17 1.2 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasclusterconfig.jacl, hacmp.assist, 61haes_r714 5/23/05 09:15:42 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasclusterconfig.jacl 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG ################################################################### ## ## NAME: cl_wasclusterconfig ## ## DESCRIPTION: ## This is a JACL script the searches for configured ## WebSphere Clusters using the wsadmin.sh command line ## utility. ## ## This script is meant to be called from ## cl_wasdiscclus. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Colon delimiter list of WebSphere Cluster ## memebers where each line contains info ## about a separate cluster member. Information ## gathered is: ## ## WebSphere Cluster Name ## WebSphere Cell Name ## WebSphere Node Name ## WebSphere Server Name ## Host Name ## Transaction Log Location ## ## Each line is prepended with "SA_WAS:". This is needed ## because wsadmin.sh always outputs other lines that need ## to be ignored. ## ## EXIT CODES: ## None ## ################################################################### proc clusterconfig {cellname clustername servername nodename log_path} { global AdminControl global AdminConfig set cellid [$AdminConfig getid /Cell:$cellname] # Get the WebSphere Clusters that are in the cell. set serverclusters [$AdminConfig list ServerCluster $cellid] foreach servercluster $serverclusters { if {$clustername == [$AdminConfig showAttribute $servercluster name] } { puts "SA_WAS: Found cluster $clustername" # Get the cluster members (application servers) that are in the WebSphere Cluster set clustermembers [$AdminConfig list ClusterMember $servercluster] foreach clustermember $clustermembers { if {$servername == [$AdminConfig showAttribute $clustermember memberName] } { puts "SA_WAS: Found application server $servername" if {$nodename == [$AdminConfig showAttribute $clustermember nodeName] } { set nodeid [$AdminConfig getid /Node:$nodename] set serverentries [$AdminConfig list ServerEntry $nodeid] # Search for a transaction log entry. foreach serverentry $serverentries { if {$servername == [$AdminConfig showAttribute $serverentry serverName]} { set recoveryloglist [$AdminConfig showAttribute $serverentry recoveryLog] if {[llength $recoveryloglist] > 0} { set recoverlog [lindex $recoveryloglist 0] $AdminConfig modify $recoverlog [subst {{transactionLogDirectory {$log_path}}}] puts "SA_WAS: Transaction log directory for Server $servername set to \"$log_path\"" } else { $AdminConfig create RecoveryLog $serverentry [subst {{transactionLogDirectory {$log_path}}}] puts "SA_WAS: Transaction log directory for Server $servername created and set to \"$log_path\"" } $AdminConfig save set Sync1 [$AdminControl completeObjectName type=NodeSync,node=$nodename,*] $AdminControl invoke $Sync1 sync return 0 } } } } } } } } if {!($argc == 4) && !($argc == 5)} { puts "SA_WAS:clusterconfig: this script requires 4 or 5 parameters: $argc" } else { set cellname [lindex $argv 0] set clustername [lindex $argv 1] set servername [lindex $argv 2] set nodename [lindex $argv 3] set log_path "" if {$argc == 5} { set log_path [lindex $argv 4] } clusterconfig $cellname $clustername $servername $nodename $log_path } es k#od0םa՝a֝a&d2vT./usr/es/sbin/cluster/sa/was/sbin/cl_waslsdmerc#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsdm.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)25 1.2 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsdm.sh, hacmp.assist, 61haes_r714 4/5/05 23:44:46 ################################################################### ## ## NAME: cl_waslsdm ## ## DESCRIPTION: ## List either WebSphere Deployment Managers managed by ## HACMP or not managed by HACMP. ## ## SYNTAX: ## cl_waslsdm [-o | -v] ## ## OUTPUT: ## List of WebSphere Deployment Managers uniquely identified by ## cell name ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_SA_get_key_by_type_metadata ## KLIB_SA_get_metadata ## ################################################################### ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ usage() { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u dspmsg -s $CONF_MSGSET $WASSACAT 550 "Usage:\ncl_waslsdm {-o | -n}\n" exit 1 } ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/sa:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSACAT="wassa.cat" CONF_MSGSET=7 WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" typeset WASsa_type="WEBSPHERE_DM" if set -- $(getopt no $* 2>&1); then while [[ $# != 0 ]]; do case "$1" in -n) # lists only IBM Http Servers not managed by HACMP USEHACMPODM=FALSE ;; -o) # lists only IBM Http Servers managed by HACMP USEHACMPODM=TRUE ;; --) shift break ;; esac shift done fi if [[ -z $USEHACMPODM ]] ; then usage fi typeset found="false" if [[ $USEHACMPODM == FALSE ]]; then # check discovery file exists or not. if [[ -r $WASSA_DISC_FILE ]]; then # source the discovery file. . "$WASSA_DISC_FILE" else # exit gracefully dspmsg -s $CONF_MSGSET $WASSACAT 500 "Could not find WebSphere discovery file. Please run WebSphere Discovery.\n" exit 1; fi if [[ -n $WAS_DM_INSTANCES ]]; then for dminstance in $WAS_DM_INSTANCES; do if [[ -z $(KLIB_SA_get_metadata "$WASsa_type" "$dminstance" "WAS_CELL_NAME") ]] ; then if [[ $found == "false" ]] ; then dspmsg -s $CONF_MSGSET $WASSACAT 520 "#Cell Deployment Manager\n" found="true" fi typeset -n instance=$dminstance printf "%-35s %s\n" ${instance[WAS_CELL_NAME]} ${instance[WAS_SERVER_NAME]} fi done fi if [[ $found == "false" ]] ; then # exit gracefully... dspmsg -s $CONF_MSGSET $WASSACAT 530 "No WebSphere Deployment Managers found.\n" exit 1 else exit 0 fi else # Get Deployment Managers currently managed by HACMP typeset dm_keys typeset dm_key typeset cell_name typeset dm_server_name typeset found=false dm_keys=$(KLIB_SA_get_key_by_type_metadata "$WASsa_type") for dm_key in $dm_keys ; do if [[ $found == "false" ]] ; then dspmsg -s $CONF_MSGSET $WASSACAT 520 "#Cell Deployment Manager\n" found="true" fi cell_name=$(KLIB_SA_get_metadata "$WASsa_type" "$dm_key" "WAS_CELL_NAME") dm_server_name=$(KLIB_SA_get_metadata "$WASsa_type" "$dm_key" "WAS_SERVER_NAME") printf "%-35s %s\n" $cell_name $dm_server_name done if [[ $found == "false" ]] ; then # exit gracefully... dspmsg -s $CONF_MSGSET $WASSACAT 540 "No Existing WebSphere Deployment Managers found.\n" exit 1 fi fi exit 0 #  k8#or0םa՝a֝a&r2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasgetdmrc#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgetdm.sh 1.6 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)21 1.6 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgetdm.sh, hacmp.assist, 61haes_r714 11/28/11 15:21:45 ################################################################### ## ## NAME: cl_wasgetdm ## ## DESCRIPTION: ## Get the properties of a WebSphere Deployment Manager for ## use by SMIT ## ## SYNTAX: ## cl_wasgetdm [-o | -v] -c CellName ## ## OUTPUT: ## Comma delimited list of Deployment Manager Properties ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_SA_get_key_by_type_metadata ## KLIB_SA_get_metadata ## KLIB_AIX_ODM_get_odm_fields ## ################################################################### ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ usage() { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u dspmsg -s $CONF_MSGSET $WASSACAT 560 "Usage:\ncl_wasgetdm {-o | -n} -c CellName\n" exit 1 } ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/sa:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/:/sbin:/usr/es/sbin/cluster/sa/sbin [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSACAT="wassa.cat" CONF_MSGSET=7 WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" typeset WASCell typeset USEHACMPODM if set -- $(getopt A:c:no $* 2>&1); then while [ $# != 0 ]; do case "$1" in -A) APPLICATION_NAME=$2 shift ;; -c) WASCell=$2 shift ;; # lists only IBM Http Servers not managed by HACMP -n) USEHACMPODM=FALSE ;; # lists only IBM Http Servers managed by HACMP -o) USEHACMPODM=TRUE ;; --) shift break ;; esac shift done fi if [[ -z $USEHACMPODM ]] ; then usage fi typeset WAS_CELL_NAME="" typeset WAS_NODE_NAME="" typeset WAS_SERVER_NAME="" typeset INSTALL_NODE_NAME="" typeset secondary="" typeset serviceip="" typeset dmkey="" typeset group="" if [[ "$USEHACMPODM" == "FALSE" ]]; then if [[ -z $WASCell ]] ; then usage fi dmkey="WAS_DM_${WASCell}" applicationname=${dmkey:0:32} # check discovery file exists or not. if [[ -r $WASSA_DISC_FILE ]]; then # source the discovery file. . "$WASSA_DISC_FILE" else # exit gracefully dspmsg -s $CONF_MSGSET $WASSACAT 500 "Could not find WebSphere discovery file. Please run WebSphere Discovery.\n" exit 1; fi typeset -n instance=$dmkey if [[ -n ${instance[INSTALL_NODE_NAME]} ]]; then WAS_CELL_NAME=${instance[WAS_CELL_NAME]} WAS_NODE_NAME=${instance[WAS_NODE_NAME]} WAS_SERVER_NAME=${instance[WAS_SERVER_NAME]} INSTALL_NODE_NAME=${instance[INSTALL_NODE_NAME]} serviceip=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | grep -w ${instance[ENDPOINT_HOST]} | awk '{print $1}') else dspmsg -s $CONF_MSGSET $WASSACAT 570 "Could not find Deployment Manager for cell $WASCell in Discovery file.\n" $WASCell exit 1 fi fi if [[ "$USEHACMPODM" == "TRUE" ]]; then if [[ -z $APPLICATION_NAME ]] ; then usage exit 1 fi typeset INSTALL_NODE_NAME typeset WAS_CELL_NAME typeset WAS_NODE_NAME typeset WAS_SERVER_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_NODE_NAME) eval $(clquerysaapp -a $APPLICATION_NAME WAS_CELL_NAME) eval $(clquerysaapp -a $APPLICATION_NAME WAS_NODE_NAME) eval $(clquerysaapp -a $APPLICATION_NAME WAS_SERVER_NAME) set +a dmkey="WAS_DM_${WAS_CELL_NAME}" applicationname=$APPLICATION_NAME typeset group=$(KLIB_AIX_ODM_get_odm_fields "sa_key=$APPLICATION_NAME" "HACMPgroup" "group") if [[ -z $group ]] ; then dspmsg -s $CONF_MSGSET $WASSACAT 580 "Could not find Deployment Manager for cell $WASCell managed by PowerHA SystemMirror.\n" $WASCell exit 1 fi secondary=$(KLIB_AIX_ODM_get_odm_fields "group=$group" "HACMPgroup" "nodes") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "nodes" "HACMPgroup" exit 1 fi secondary=$(echo $secondary | cut -d' ' -f2-) serviceip=$(KLIB_AIX_ODM_get_odm_fields "group=$group and name=SERVICE_LABEL" "HACMPresource" "value") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "SERVICE_LABEL" "HACMPgroup" exit 1 fi fi echo "#ascell:asnode:dm:primary:secondary:serviceip:instancekey:applicationname:resourcegroup" echo "$WAS_CELL_NAME:$WAS_NODE_NAME:$WAS_SERVER_NAME:$INSTALL_NODE_NAME:$secondary:$serviceip:$dmkey:$applicationname:$group" commo k#o;0םa՝a֝a&;2vT./usr/es/sbin/cluster/sa/was/sbin/cl_waslsclusc#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsclus.sh 1.5 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)24 1.5 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsclus.sh, hacmp.assist, 61haes_r714 5/1/08 01:00:16 ################################################################### ## ## NAME: cl_waslsclus ## ## DESCRIPTION: ## List either WebSphere Clusters managed by HACMP or not ## managed by HACMP. ## ## SYNTAX: ## cl_waslsclus [-o | -v] ## ## OUTPUT: ## List of WebSphere Clusters uniquely identified by cell and ## cluster name ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_SA_get_key_by_type_metadata ## KLIB_SA_get_metadata ## ################################################################### ################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################### usage() { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u dspmsg -s $CONF_MSGSET $WASSACAT 620 "Usage:\ncl_waslsclus {-o | -n}\n" exit 1 } ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/sa:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/ umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSACAT="wassa.cat" CONF_MSGSET=7 WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" WAS_MIN_VERSION="6.0" WAS_MAX_VERSION="6.1" typeset WASsa_type="WEBSPHERE_CLUS" if set -- $(getopt i: $* 2>&1); then while [[ $# != 0 ]]; do case "$1" in -i) NODES=$2 shift ;; --) shift break ;; esac shift done fi typeset found="false" # Check that the WebSphere Smart Assist etc directory exists. if [[ ! -d "$WASSA_ETC_PATH" ]] ; then mkdir -p "$WASSA_ETC_PATH" fi # Remove old discovery file rm -f $WASSA_DISC_FILE DATE=$(date +"%m/%d/%y %H:%M:%S") echo "#" >> $WASSA_DISC_FILE echo "# This ksh93 source file was generated on $DATE" >> $WASSA_DISC_FILE echo "# Do NOT alter the content of this file" >> $WASSA_DISC_FILE echo "#" >> $WASSA_DISC_FILE echo "" >> $WASSA_DISC_FILE if [[ -n $NODES ]]; then NODES=$(echo "$NODES" | tr ',' ' ') for node in $NODES ; do cl_rsh $node $WASSA_SBIN_DIR/cl_wasdiscclus -q 2>/dev/null | while read line; do echo $line | IFS=: read component version cluster_list wascell wasnode servername install_path profile_name profile_path # Check for version if (( $version < $WAS_MIN_VERSION || $version > $WAS_MAX_VERSION )) ; then continue fi for cluster_name in $cluster_list ; do found="true" printf "%-35s %s\n" ${wascell} ${cluster_name} APPLICATION_NAME="WAS_CLUS_${wascell}_${cluster_name}" echo "unset $APPLICATION_NAME" >> $WASSA_DISC_FILE echo "typeset -A $APPLICATION_NAME" >> $WASSA_DISC_FILE echo "$APPLICATION_NAME=( \\" >> $WASSA_DISC_FILE echo "\t[WAS_CELL_NAME]=\"${wascell}\"" >> $WASSA_DISC_FILE echo "\t[WAS_NODE_NAME]=\"${wasnode}\"" >> $WASSA_DISC_FILE echo "\t[WAS_SERVER_NAME]=\"${servername}\"" >> $WASSA_DISC_FILE echo "\t[WAS_CLUSTER_NAME]=\"${cluster_name}\"" >> $WASSA_DISC_FILE echo "\t[DM_NODE_NAME]=\"${node}\"" >> $WASSA_DISC_FILE echo "\t[PROFILE_NAME]=\"${profile_name}\"" >> $WASSA_DISC_FILE echo "\t[PROFILE_PATH]=\"${profile_path}\"" >> $WASSA_DISC_FILE echo "\t[INSTALL_PATH]=\"${install_path}\"" >> $WASSA_DISC_FILE echo "\t[VERSION]=\"${version}\"" >> $WASSA_DISC_FILE echo "\t[WAS_MEMBER_KEYS]=\"\"" >> $WASSA_DISC_FILE echo ")" >> $WASSA_DISC_FILE echo "" >> $WASSA_DISC_FILE done done done fi # if [[ -n $WAS_CLUS_INSTANCES ]]; then # for clusinstance in $WAS_CLUS_INSTANCES; do # if [[ -z $(KLIB_SA_get_metadata "$WASsa_type" "$clusinstance" "WAS_CLUSTER_NAME") ]] ; then # if [[ $found == "false" ]] ; then # dspmsg -s $CONF_MSGSET $WASSACAT 590 "#Cell WebSphere Cluster\n" # found="true" # fi # typeset -n instance=$clusinstance # printf "%-35s %s\n" ${instance[WAS_CELL_NAME]} ${instance[WAS_CLUSTER_NAME]} # fi # done # fi if [[ $found == "false" ]] ; then # exit gracefully... dspmsg -s $CONF_MSGSET $WASSACAT 600 "No WebSphere Clusters found.\n" exit 1 else exit 0 fi exit 0 ##### k.#oa0םa՝a֝a&a2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasgetclus#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgetclus.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)20 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgetclus.sh, hacmp.assist, 61haes_r714 11/28/11 15:20:40 ################################################################### ## ## NAME: cl_wasgetclus ## ## DESCRIPTION: ## Get the properties of a WebSphere Cluster for ## use by SMIT ## ## SYNTAX: ## cl_wasgetclus [-o | -v] -c CellName -w ClusterName ## ## OUTPUT: ## Comma delimited list of WebSphere Cluster Properties ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_SA_get_key_by_type_metadata ## KLIB_SA_get_metadata ## KLIB_AIX_ODM_get_odm_fields ## ################################################################### ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ usage() { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u dspmsg -s $CONF_MSGSET $WASSACAT 630 "Usage:\ncl_wasgetclus {-o | -n} -c CellName - w ClusterName\n" exit 1 } ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/sa:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/ umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/:/sbin:/usr/es/sbin/cluster/sa/sbin [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSACAT="wassa.cat" CONF_MSGSET=7 WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" typeset WASCell typeset WASCluster typeset USEHACMPODM if set -- $(getopt A:c:w:no $* 2>&1); then while [ $# != 0 ]; do case "$1" in -A) APPLICATION_NAME=$2 shift ;; -c) WASCell=$2 shift ;; -w) WASCluster=$2 shift ;; # lists only IBM Http Servers not managed by HACMP -n) USEHACMPODM=FALSE ;; # lists only IBM Http Servers managed by HACMP -o) USEHACMPODM=TRUE ;; --) shift break ;; esac shift done fi if [[ -z $USEHACMPODM ]] ; then usage fi typeset WAS_CELL_NAME="" typeset WAS_CLUSTER_NAME="" typeset serviceip="" typeset vg="" typeset TRANSACTION_LOG="" typeset cluskey if [[ "$USEHACMPODM" == "FALSE" ]]; then # check discovery file exists or not. if [[ -z $WASCell || -z $WASCluster ]] ; then usage fi cluskey="WAS_CLUS_${WASCell}_${WASCluster}" applicationname=${cluskey:0:32} if [[ -r $WASSA_DISC_FILE ]]; then # source the discovery file. . "$WASSA_DISC_FILE" else # exit gracefully dspmsg -s $CONF_MSGSET $WASSACAT 500 "Could not find WebSphere discovery file. Please run WebSphere Discovery.\n" exit 1; fi typeset -n instance=$cluskey if [[ -n ${instance[WAS_CLUSTER_NAME]} ]]; then WAS_CELL_NAME=${instance[WAS_CELL_NAME]} WAS_CLUSTER_NAME=${instance[WAS_CLUSTER_NAME]} else dspmsg -s $CONF_MSGSET $WASSACAT 510 "Could not find WebSphere Cluster for cell $WASCell and cluster name $WASCluster in Discovery file.\n" "$WASCell" "$WASCluster" exit 1 fi fi if [[ "$USEHACMPODM" == "TRUE" ]]; then if [[ -z $APPLICATION_NAME ]] ; then usage fi typeset WAS_CLUSTER_NAME typeset WAS_CELL_NAME typeset TRANSACTION_LOG set -a eval $(clquerysaapp -a $APPLICATION_NAME WAS_CLUSTER_NAME) eval $(clquerysaapp -a $APPLICATION_NAME WAS_CELL_NAME) eval $(clquerysaapp -a $APPLICATION_NAME TRANSACTION_LOG) set +a cluskey="WAS_CLUS_${WAS_CELL_NAME}_${WAS_CELL_NAME}" applicationname=${APPLICATION_NAME} typeset rg=$(KLIB_AIX_ODM_get_odm_fields "sa_key=$APPLICATION_NAME" "HACMPgroup" "group") if [[ -z $rg ]] ; then dspmsg -s $CONF_MSGSET $WASSACAT 640 "Could not find WebSphere Cluster for cell $WASCell and cluster name $WASCluster managed by PowerHA SystemMirror.\n" "$WASCell" "$WASCluster" exit 1 fi serviceip=$(KLIB_AIX_ODM_get_odm_fields "group=$rg and name=SERVICE_LABEL" "HACMPresource" "value") vg=$(KLIB_AIX_ODM_get_odm_fields "group=$rg and name=VOLUME_GROUP" "HACMPresource" "value") fi echo "#ascell:clus:serviceip:vg:logpath:instancekey:applicationname" echo "$WAS_CELL_NAME:$WAS_CLUSTER_NAME:$serviceip:$vg:$TRANSACTION_LOG:$cluskey:$applicationname" not re k,#o 0םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasstartstopclusterlonfig#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasstartstopcluster.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)16 1.2 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasstartstopcluster.sh, hacmp.assist, 61haes_r714 4/5/05 23:44:47 ################################################################### ## ## NAME: cl_wasstartstopcluster.sh ## ## DESCRIPTION: ## Starts or stops the members of a WebSphere Cluster. ## The WebSphere command line utility wsadmin.sh is called to perform the action. ## ## ARGUMENTS: ## WebSphere Installation Path ## WebSphere Profile Name ## WebSphere Cluster Name ## Action - "start" or "stop" ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ### 1 - failure ## ## KLIB Functions: ## KLIB_WAS_log_message ## ################################################################### ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the message catalog entries #. /usr/es/sbin/cluster/sa/db2/cat/cl_db2discovery # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset install_path=$1 typeset profile_name=$2 typeset cluster_name=$3 typeset action=$4 typeset wsadmin_path="$install_path/bin/wsadmin.sh" # Check that wsadmin.sh is found and executable if [[ ! -x "$wsadmin_path" ]] ; then KLIB_WAS_log_message "WAS ERROR: $wsadmin_path not found or not executable" exit 1 fi if [[ $action == "start" ]] ; then action="startServer" elif [[ $action == "stop" ]] ; then action="stopServer" else KLIB_WAS_log_message "WAS ERROR: cl_wasclusterdisc.jacl - Unknown action: $action" exit 1 fi $wsadmin_path -profileName $profile_name -f $WASSA_SBIN_DIR/cl_wasclusteraction.jacl $cluster_name $action | while read line; do KLIB_WAS_log_message "WAS INFO: cl_wasclusterdisc.jacl output - $line" done exit 0 ~B k#oB 0םa՝a֝a&B 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasconfigclususter#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasconfigclus.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)18 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasconfigclus.sh, hacmp.assist, 61haes_r714 5/23/05 09:16:17 ################################################################### ## ## NAME: cl_wasconfigclus ## ## DESCRIPTION: ## Modify the transaction log path for a WebSphere Application ## Server by using wsadmin.sh utility ## ## This utility is meant to be called remotely from ## cl_wasimportclus. ## ## ARGUMENTS: ## WebSphere Installation Path ## WebSphere Profile Name ## WebSphere Cell Name ## WebSphere Cluster Name ## WebSphere Server Name ## Log Path ## ## OUTPUT: ## None ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_WAS_log_message ## ################################################################### ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the message catalog entries #. /usr/es/sbin/cluster/sa/db2/cat/cl_db2discovery # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset install_path=$1 typeset profile_name=$2 typeset cellname=$3 typeset clustername=$4 typeset servername=$5 typeset nodename=$6 typeset log_path=$7 typeset wsadmin_path="$install_path/bin/wsadmin.sh" # Check that wsadmin.sh is found and executable if [[ ! -x "$wsadmin_path" ]] ; then KLIB_WAS_log_message "WAS ERROR: $wsadmin_path not found or not executable" continue fi $wsadmin_path -profileName $profile_name -f $WASSA_SBIN_DIR/cl_wasclusterconfig.jacl $cellname $clustername $servername $nodename $log_path | while read line; do KLIB_WAS_log_message "WAS INFO: cl_wasclusterconfig.jacl output - $line" done exit 0 @  k؇#o` 0םa՝a֝a&` 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wascopylog#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wascopylog.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)19 1.3 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wascopylog.sh, hacmp.assist, 61haes_r714 5/23/05 14:43:43 ################################################################### ## ## NAME: cl_wascopy ## ## DESCRIPTION: ## Copies the contents of the source directory to the target ## directory. The specified volume group will be varied on, ## the file system mounted and the directory created before ## the copy. Afterwards, file system will be unmounted and ## the volume group varied off. ## ## ## ARGUMENTS: ## Source Directory ## Target Directory ## Volume Group ## File System ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## None ## ################################################################### function CleanUp { unmount $fs varyoffvg $vg } ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset source=$1 typeset target=$2 typeset vg=$3 typeset fs=$4 typeset nfs_mount=$5 source="${source}/." target="${target}/." varyonvg $vg if (( $? != 0 )) ; then KLIB_WAS_log_message "WAS ERROR: Unable to vary on $vg before log copy." CleanUp exit 1 fi KLIB_WAS_log_message "WAS INFO: Varied on $vg before log copy." mount $fs if (( $? != 0 )) ; then KLIB_WAS_log_message "WAS ERROR: Unable to mount $fs before log copy." CleanUp exit 1 fi KLIB_WAS_log_message "WAS INFO: Mounted $fs before log copy." mkdir -p $target if (( $? != 0 )) ; then KLIB_WAS_log_message "WAS ERROR: Unable to create directory $target before log copy." CleanUp exit 1 fi KLIB_WAS_log_message "WAS INFO: Created directory $target before log copy." if [[ -n $nfs_mount && ! -d $nfs_mount ]] ; then mkdir -p $nfs_mount if (( $? != 0 )) ; then KLIB_WAS_log_message "WAS ERROR: Unable to create nfs mount point $nfs_mount." CleanUp exit 1 fi KLIB_WAS_log_message "WAS INFO: Created nfs mount point $nfs_mount." fi cp -rp $source $target if (( $? != 0 )) ; then KLIB_WAS_log_message "WAS ERROR: Unable to copy files from $source to $target." CleanUp exit 1 fi KLIB_WAS_log_message "Copied files from $source to $target." CleanUp KLIB_WAS_log_message "WAS INFO: Copied files from $source to $target." exit 0  k#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasdmmong#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdmmon.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2009 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)75 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdmmon.sh, hacmp.assist, 61haes_r714 1/6/09 06:12:10 ################################################################### ## ## NAME: cl_wasdmmon ## ## DESCRIPTION: ## Used to monitor a Websphere Deployment Manager instance. ## Websphere is monitored by calling into the "serverStatus.sh" shell ## script provided by Websphere. The following is an example of what ## this script will return if Websphere is healthy: ## ## $/dm_fs01a/IBM/WebSphere/AppServer/bin/serverStatus.sh -profileName Dmgr01 dmgr ## ADMU0116I: Tool information is being logged in file ## /dm_fs01a/IBM/WebSphere/AppServer/profiles/Dmgr01/logs/dmgr/serverStatus.log ## ADMU0128I: Starting tool with the Dmgr01 profile ## ADMU0500I: Retrieving server status for dmgr ## ADMU0508I: The Deployment Manager "dmgr" is STARTED## ./serverStatus.sh dmgr ## ## This script sill look for the regular expression ## "The Deployment Manager * is STARTED" ## Failure to detect this string will assume the worst and return the ## a failure status. If the string is detected, then a zero is returned ## ## This script must return one of the following values: ## 0: If the application is healthy ## 1: If the application is dead or otherwise unhealthy ## ## KLIB Functions: ## KLIB_WAS_log_message ## KLIB_SA_get_metadata ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all HACMP functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/was:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos } export ODMDIR WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" # These are the exit status codes. No other values are useful so we break # down the possible returns as either Healthy or Dead. EXIT_NOTCHECKED=2 EXIT_DEAD=1 EXIT_HEALTHY=0 STATUS="" APPLICATION_NAME=$1 if [[ -z $APPLICATION_NAME ]]; then KLIB_WAS_log_message "WAS ERROR: DM MONITOR: Please specify the Application ID." fi KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 typeset INSTALL_PATH set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_PATH) set +a typeset PROFILE_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME PROFILE_NAME) set +a typeset WAS_SERVER_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME WAS_SERVER_NAME) set +a WAS_SCRIPT="$INSTALL_PATH/bin/serverStatus.sh -profileName $PROFILE_NAME $WAS_SERVER_NAME" STATUS=$EXIT_HEALTHY KLIB_WAS_log_message "WAS INFO: DM MONITOR: Checking the status of the WebSphere Deployment Manager ($APPLICATION_NAME)" KLIB_WAS_log_message "WAS INFO: DM MONITOR: Calling script: $WAS_SCRIPT" if [[ -z $INSTALL_PATH || -z $WAS_SERVER_NAME || -z $PROFILE_NAME ]] ; then KLIB_WAS_log_message "WAS ERROR: DM MONITOR: Could not find install path in HACMPsa_metadata for $APPLICATION_NAME" exit $EXIT_NOTCHECKED fi if [[ -n $(LC_ALL=C $WAS_SCRIPT | grep "The Deployment Manager \"$WAS_SERVER_NAME\" is STARTED") ]] ; then KLIB_WAS_log_message "WAS INFO: DM MONITOR: Websphere Deployment Manager ($APPLICATION_NAME) is healthy." else KLIB_WAS_log_message "WAS ERROR: DM MONITOR: Websphere Deployment Manager ($APPLICATION_NAME) is NOT healthy." STATUS=$EXIT_DEAD fi exit $STATUS en k #o@ 0םa՝a֝a&@ 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasdmstart#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdmstart.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)76 1.3 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdmstart.sh, hacmp.assist, 61haes_r714 4/25/06 13:47:46 ################################################################### ## ## NAME: cl_wasdmstart.sh ## ## DESCRIPTION: ## Starts Websphere Deployment Manager by calling WebSphere ## utility startManager.sh ## ## ARGUMENTS: ## Component key - Used to fetch the data from metadata odm ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ### 1 - failure ## ## KLIB Functions: ## KLIB_WAS_log_message ## KLIB_SA_get_metadata ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all HACMP functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/was:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" APPLICATION_NAME=$1 if [[ -z $APPLICATION_NAME ]]; then KLIB_WAS_log_message "WAS ERROR: DM START: Component Key not specified." exit 1 fi KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 typeset INSTALL_PATH set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_PATH) set +a typeset PROFILE_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME PROFILE_NAME) set +a if [[ -n $INSTALL_PATH ]] ; then WAS_SCRIPT_SERVER="$INSTALL_PATH/bin/startManager.sh -profileName $PROFILE_NAME" KLIB_WAS_log_message "WAS INFO: DM START: Start WebSphere Deployment Manager ($APPLICATION_NAME) by calling $WAS_SCRIPT_SERVER" $WAS_SCRIPT_SERVER else KLIB_WAS_log_message "WAS ERROR: DM START: Could not find install path in HACMPsa_metadata for $APPLICATION_NAME" exit 1 fi exit 0  ks#o^ 0םa՝a֝a&^ 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasdmstop#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdmstop.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)77 1.3 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasdmstop.sh, hacmp.assist, 61haes_r714 4/25/06 13:47:47 ################################################################### ## ## NAME: cl_wasdmstop.sh ## ## DESCRIPTION: ## Stops Websphere Deployment Manager by calling WebSphere ## utility stopManager.sh ## ## ARGUMENTS: ## Component key - Used to fetch the data from metadata odm ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ### 1 - failure ## ## KLIB Functions: ## KLIB_WAS_log_message ### KLIB_SA_get_metadata # ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all HACMP functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/was:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" APPLICATION_NAME=$1 if [[ -z $APPLICATION_NAME ]]; then KLIB_WAS_log_message "WAS ERROR: DM STOP: Component Key not specified." exit 1 fi COMPONENT_TYPE="WEBSPHERE_DM" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 typeset INSTALL_PATH set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_PATH) set +a typeset PROFILE_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME PROFILE_NAME) set +a if [[ -n $INSTALL_PATH && -n $PROFILE_NAME ]] ; then WAS_SCRIPT_SERVER="$INSTALL_PATH/bin/stopManager.sh -profileName $PROFILE_NAME" KLIB_WAS_log_message "WAS INFO: DM STOP: Stop WebSphere Deployment Manager ($APPLICATION_NAME) by calling $WAS_SCRIPT_SERVER" $WAS_SCRIPT_SERVER else KLIB_WAS_log_message "WAS ERROR: DM STOP: Could not find install path in HACMPsa_metadata for $APPLICATION_NAME" fi exit 0  k<#o90םa՝a֝a&92vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasgetihs#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgetihs.sh 1.8 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)08 1.8 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgetihs.sh, hacmp.assist, 61haes_r714 5/16/06 20:28:11 # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 if set -- $(getopt A:h:no $* 2>&1); then while [ $# != 0 ]; do case "$1" in -A) APPLICATION_NAME=$2 shift ;; -h) HTTPServer=$2 shift ;; -n) # lists only IBM Http Servers not managed by HACMP USEHACMPODM="FALSE" ;; -o) # lists only IBM Http Servers managed by HACMP USEHACMPODM="TRUE" ;; --) shift break ;; esac shift done fi node="" primary="" secondary="" serviceip="" takeover_nodes="" group="" # Get the data from the discovery file if [[ "$USEHACMPODM" == "FALSE" ]]; then instancekey="WAS_IHS_"$HTTPServer applicationname=${instancekey:0:32} cl_rsh $HTTPServer $WASSA_SBIN_DIR/cl_wasdiscihs 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids listen_host # Check for multiple installs. This is the only check being performed as it is # assumed that the checks made during the inital discovery that just ran are # still valid if (( $install_count > 1 )); then dspmsg -s $DISC_MSGSET $WASSACAT 40 " - Multiple installations were found. Only one installation per node \n\ is supported.\n" exit 1 fi # Passed checks primary=$HTTPServer secondary="" serviceip=$listen_host break; done fi if [[ "$USEHACMPODM" == "TRUE" ]]; then if [[ -z $APPLICATION_NAME ]] ; then exit 1 fi typeset INSTALL_NODE_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_NODE_NAME) set +a if [[ -z $INSTALL_NODE_NAME ]] ; then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "INSTALL_NODE_NAME" "HACMPsa_metadata" exit 1 fi applicationname=$APPLICATION_NAME primary=$INSTALL_NODE_NAME node=$primary HTTPServer=$primary instancekey="WAS_IHS_"$HTTPServer group=$(KLIB_AIX_ODM_get_odm_fields "sa_key = $APPLICATION_NAME" "HACMPgroup" "group") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "group" "HACMPgroup" exit 1 fi secondary=$(KLIB_AIX_ODM_get_odm_fields "sa_key = $APPLICATION_NAME" "HACMPgroup" "nodes") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "nodes" "HACMPgroup" exit 1 fi secondary=$(echo $secondary | cut -d' ' -f2-) serviceip=$(KLIB_AIX_ODM_get_odm_fields "group=$group and name=SERVICE_LABEL" "HACMPresource" "value") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "SERVICE_LABEL" "HACMPresource" exit 1 fi fi for node in $(KLIB_HACMP_get_cluster_nodes); do if [[ $node != $HTTPServer ]] ; then cl_rsh $node $WASSA_SBIN_DIR/cl_wasdiscgskta 2>/dev/null | read line echo $line | IFS=: read component install_count version if (( install_count != 0 )) ; then if [[ $takeover_nodes != "" ]]; then takeover_nodes="${takeover_nodes}," fi takeover_nodes=${takeover_nodes}${node} fi fi done echo "#node:primary:secondary:serviceip:instancekey:takeover_nodes:applicationname:resourcegroup" echo "$node:$primary:$secondary:$serviceip:$instancekey:$takeover_nodes:$applicationname:$group" sr/ucb: k,#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasgetlogsizeuster#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgetlogsize.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)22 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgetlogsize.sh, hacmp.assist, 61haes_r714 5/17/05 11:50:32 ################################################################### ## ## NAME: cl_wasgetlogsize ## ## DESCRIPTION: ## Get the total size of all files in a specified ## directory and the sub-directories ## ## ## ARGUMENTS: ## Log Path ## ## OUTPUT: ## Total size of all files in the specified directory ## in kilobytes. ## ## EXIT CODES: ## 0 - Success ## 1 - Failure ## ## KLIB Functions: ## KLIB_WAS_log_message ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset log_path=$1 if [[ -d $log_path ]] ; then typeset size=$(du -kxs "$log_path" | awk '{print $1}') else KLIB_WAS_log_message "WAS INFO: Log path ${log_path} not found or not a directory." # The following "echo 0" is necessary for calling utilities that expect there to always be output. echo 0 exit 1 fi KLIB_WAS_log_message "WAS INFO: Log size at path ${log_path} is ${size}." echo $size exit 0 P k#o70םa՝a֝a&72vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasgetnode#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgetnode.sh 1.10 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)73 1.10 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgetnode.sh, hacmp.assist, 61haes_r714 11/28/11 15:11:48 # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 #Get the arguments if set -- $(getopt c:N:A:no $* 2>&1); then while [ $# != 0 ]; do case "$1" in -A) APPLICATION_NAME=$2 shift ;; -c) CELL=$2 shift ;; -N) WEBSPHERE_NODE=$2 shift ;; -n) USEHACMPODM="FALSE" ;; -o) USEHACMPODM="TRUE" ;; --) shift break ;; esac shift done fi if [[ -z $USEHACMPODM ]] ; then exit 1 fi WAS_CELL_NAME="" WAS_NODE_NAME="" WAS_SERVER_NAME="" INSTALL_NODE_NAME="" secondary="" serviceip="" group="" # Get the information from the discovery file. if [[ "$USEHACMPODM" == "FALSE" ]]; then if [[ -z $CELL || -z $WEBSPHERE_NODE ]] ; then exit 1 fi instancekey="WAS_NODE_${CELL}_${WEBSPHERE_NODE}" applicationname=${instancekey:0:32} # check discovery file exists or not. if [[ -f $WASSA_DISC_FILE ]]; then # source the discovery file. . $WASSA_DISC_FILE else # error dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 10 "ERROR: Disovery file %1\$s doesn't exist.\n" $WASSA_DISC_FILE exit 1; fi typeset -n instance=$instancekey if [[ -n ${instance[INSTALL_NODE_NAME]} ]]; then WAS_CELL_NAME=${instance[WAS_CELL_NAME]} WAS_NODE_NAME=${instance[WAS_NODE_NAME]} WAS_SERVER_NAME=${instance[WAS_SERVER_NAME]} INSTALL_NODE_NAME=${instance[INSTALL_NODE_NAME]} secondary="" expappsrv="WAS_AS_${CELL}_${WEBSPHERE_NODE}_$(echo ${WAS_SERVER_NAME} | cut -f 1 -d' ')" typeset -n servip=$expappsrv endpointhost=${servip[ENDPOINT_HOST]} if [[ -n $endpointhost ]]; then serviceip=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | grep -w $endpointhost | awk '{print $1}') else serviceip="" fi else # error dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 40 "WARNING: Discovery file doesn't have information regarding the specified Cell %1\$s and Websphere Application Server Node %2\$s.\n" $CELL $WEBSPHERE_NODE exit 1 fi fi # Get the information from metadata odm for the specified cell and websphere node. if [[ "$USEHACMPODM" == "TRUE" ]]; then if [[ -z $APPLICATION_NAME ]] ; then exit 1 fi sa_type="WAS_6.0_APP_SERVER" typeset INSTALL_NODE_NAME typeset WAS_CELL_NAME typeset WAS_NODE_NAME typeset WAS_SERVER_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_NODE_NAME) eval $(clquerysaapp -a $APPLICATION_NAME WAS_CELL_NAME) eval $(clquerysaapp -a $APPLICATION_NAME WAS_NODE_NAME) eval $(clquerysaapp -a $APPLICATION_NAME WAS_SERVER_NAME) set +a instancekey="WAS_NODE_${WAS_CELL_NAME}_${WAS_NODE_NAME}" applicationname=${APPLICATION_NAME} if [[ -z $INSTALL_NODE_NAME ]] ; then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "INSTALL_NODE_NAME" "HACMPsa_metadata" exit 1 fi if [[ -z $WAS_SERVER_NAME ]] ; then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "WAS_SERVER_NAME" "HACMPsa_metadata" exit 1 fi group=$(KLIB_AIX_ODM_get_odm_fields "sa_key = $APPLICATION_NAME" "HACMPgroup" "group") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "group" "HACMPgroup" exit 1 fi secondary=$(KLIB_AIX_ODM_get_odm_fields "group=$group" "HACMPgroup" "nodes") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "nodes" "HACMPgroup" exit 1 fi secondary=$(echo $secondary | cut -d' ' -f2-) serviceip=$(KLIB_AIX_ODM_get_odm_fields "group=$group and name=SERVICE_LABEL" "HACMPresource" "value") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "SERVICE_LABEL" "HACMPresource" exit 1 fi prefix=$(KLIB_AIX_ODM_get_odm_fields "ip_label=$serviceip" "HACMPadapter" "netmask") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "SERVICE_LABEL" "HACMPresource" exit 1 fi fi echo "#cell:node:appsrvs:primary:secondary:serviceip:prefix:instancekey:applicationname:resourcegroup" echo "$WAS_CELL_NAME:$WAS_NODE_NAME:$WAS_SERVER_NAME:$INSTALL_NODE_NAME:$secondary:$serviceip:$prefix:$instancekey:$applicationname:$group" " k<#o2 0םa՝a֝a&2 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasihsmon#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasihsmon.sh 1.7 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)16 1.7 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasihsmon.sh, hacmp.assist, 61haes_r714 6/5/08 07:10:46 ################################################################### ## ## NAME: cl_wasihsmon.sh ## ## DESCRIPTION: ## Used to monitor a HTTP Server instance. ## ## This script must return one of the following values: ## 0: If the application is healthy ## 1: If the application is dead or otherwise unhealthy ## ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all HACMP functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm:$FPATH_BASE/was export PATH FPATH [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos } export ODMDIR [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 # These are the exit status codes. EXIT_NOTCHECKED=2 EXIT_DEAD=1 EXIT_HEALTHY=0 # Get the application name APPLICATION_NAME=$1 if [[ -z $APPLICATION_NAME ]]; then KLIB_WAS_log_message "WAS ERROR: Please specify the Application ID." STATUS=$EXIT_NOTCHECKED exit $STATUS fi typeset INSTALL_PATH set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_PATH) set +a if [[ -n $INSTALL_PATH ]] ; then KLIB_WAS_log_message "WAS INFO: Checking the status of IBM Http Server..." PIDFILE=$INSTALL_PATH/logs/httpd.pid PID="" if [ -f $PIDFILE ] ; then PID=$(cat $PIDFILE) if [[ -n "$PID" ]] && kill -0 $PID 2>/dev/null ; then KLIB_WAS_log_message "WAS INFO: IBM Http Server is healthy." STATUS=$EXIT_HEALTHY else KLIB_WAS_log_message "WAS ERROR: IBM Http Server is not healthy." STATUS=$EXIT_DEAD fi else KLIB_WAS_log_message "WAS ERROR: IBM Http Server is not healthy." STATUS=$EXIT_DEAD fi else KLIB_WAS_log_message "WAS ERROR: No Metadata information Found." STATUS=$EXIT_NOTCHECKED fi exit $STATUS expa k#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasihsstarteuster#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasihsstart.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)13 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasihsstart.sh, hacmp.assist, 61haes_r714 6/5/08 07:11:04 ################################################################### ## ## NAME: cl_wasstartihs.sh ## ## DESCRIPTION: ## Starts the IBM HTTP Server ## ## ARGUMENTS: ## application name - Used to fetch the data from metadata odm ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ### 1 - failure ## ## KLIB Functions: ## KLIB_WAS_log_message ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all HACMP functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm:$FPATH_BASE/was export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 # Get the application name APPLICATION_NAME=$1 if [[ -z $APPLICATION_NAME ]]; then KLIB_WAS_log_message "WAS ERROR: Please specify the application name." exit 1 fi typeset INSTALL_PATH set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_PATH) set +a if [[ $INSTALL_PATH != "" ]] ; then IHS_SCRIPT="$INSTALL_PATH/bin/apachectl start" KLIB_WAS_log_message "WAS INFO: Start IBM HTTP Server by calling $IHS_SCRIPT" # Start the HTTP Server $IHS_SCRIPT else # error KLIB_WAS_log_message "WAS ERROR: No Metadata information Found." exit 1 fi exit 0 E ] ; t k/#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasihsstop#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasihsstop.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2008 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)14 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasihsstop.sh, hacmp.assist, 61haes_r714 6/5/08 07:11:28 ################################################################### ## ## NAME: cl_wasstopihs.sh ## ## DESCRIPTION: ## Stops the IBM HTTP Server ## ## ARGUMENTS: ## application name - Used to fetch the data from metadata odm ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ### 1 - failure ## ## KLIB Functions: ## KLIB_WAS_log_message ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all HACMP functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm:$FPATH_BASE/was export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 # Get the application name APPLICATION_NAME=$1 if [[ -z $APPLICATION_NAME ]]; then KLIB_WAS_log_message "WAS ERROR: Please specify the application name." exit 1 fi typeset INSTALL_PATH set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_PATH) set +a if [[ $INSTALL_PATH != "" ]] ; then IHS_SCRIPT="$INSTALL_PATH/bin/apachectl stop" KLIB_WAS_log_message "WAS INFO: Stop IBM HTTP Server by calling $IHS_SCRIPT" # Stop the HTTP Server $IHS_SCRIPT else # error KLIB_WAS_log_message "WAS ERROR: No Metadata information Found." exit 1 fi exit 0 it 0 lR#o0םa՝a֝a&S2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasimport  #AES_es"$-CILMNOPRTacdilnort=DFGWfghmpu'()1HUV\bvy%&./02:;>B[]wx{}!6?XYk| ,349Kq+57`z8*@Z^j +w"m8 HXG<TU4P|V$W&0ml]3y"p8^0  ^%< M,7PhG^|rXp 8G:+g]G"N Yo~ۯoX4Db⋴ma:%g6#(ۢ+<7^NxR>#, #Szt["Ja&o]3ۮ|+dmBM8GȩkU-xF?1m#(L.N>ЌPm0:K<)gȃ{|wJůِ J С+=mIu8M1T+fwj7[r.xQ-vlVszi |%#k&oU]rF0z)- ^(毚RjPX{.N٥5h 6g\ewRu_6,LX1'BKݢey_䢔3T/56KjX С+=df٥5h 6g\ewRu_6,LX1'BKݢey_"um%4]Tfٻ,댮NkߥiPn%2kٯa,& %JYK<8%^(潚%ygY\RN Y$6Ĝcu /vu^ 2JC^km'n#`Ag&2t1f*fiZ# x?Ui. c<YU1ԍ7c<ZJlI]֒6nڢb+WJZB#Rl\ 4*vէbׄc<P#g,ڮ.NЌBIUvY;>+#F1c1c1c1c1c1c1c1c1#1c1c1c1c1c1c1c1c1c1#.Ṋ#hFyV둶N׺m=m?}V<&aO*N?pg떄a[>U. e_qWa1c1c1c1c1c1c1c1c1c1c\as+u C2:Ǥ8XM$^p?{?iXC'r9=UjAԚكJH-PX+,B둰0II{L?kXz)I#5BIaRxR$;fyk*7sqIm|1cĜBKݢey_䢔3T/56KjX С+=df٥5h 6g\ewRu_6,LX1'7PhG^5|𱈣$:j汝fIrv)DxU'YnK:+*gbǨ$?^(潚RjPX{.NؓPI{L?k\RTFj汝fIrvKa:%gpJu /vu^ 2JC^km'lIVc1c1c1c1c1c1c1c1c1c1a%ew쭮WG(apֻ^b:>w(J[5e3T94FO*N?pfZsn".&ݮ a[>U. [t8Ґva1c1c1c1c1c1c1c1c1c1c\as([]ү1kHC 0FjӤcb4DxD#hNhf.dQΒǦR3!JC>U0j|TgMQΝORH4*p|1dn-{? 4Ś(,1c1c1c1c1c1?J[䭽kU-yҥ;ڻ{q&Hm,7YtRO!1c1c1c1c1c1-{?:& ӨSR5x? .`c xVPjQD:KUJHVtLASQʦ l+@!Ή*t9T!n+9nP0TMURkf)#VX*kW9Jvu6Ӛ| Eu@Y1NG* |EJywW'lQD:KUJH*^Cr*yҥ "J7{CxQ,AfGLb5#g$A6ȼRVtLASQʦ .N5DO:uB@^X|EGwJŋ],6hfRjtzB@/gb!JCTDSԪ $L[6?ٹBw#|Q5V4I>Tp,(ӄw[zt["Jf+:& ӨSP$yΉ*t9T?}]ү1lΕ)m9`EŖ\?gWo01I[<+kU-R/:Tbb :U10/"ei-1eakZKO(LhJep>eQysUT/(H$!JC:^b*Sj@m9` xnU)BNwwMQMl$tյ*U0jaxigD:ub C`f`V %g!QMl$tÀ(+.jj7fwMF#kU-yҥ3Tr)yz| Eu@+:& ӨSRY9CP NPjQD:KUJHVtLASQʦ ?51c1c1c1c1c1aV` :]L[mq;71c1c1c1c1c1?!':P>hT$:x{Vrz˿m\?ٹBw#|Q5V4I>Tpe}1m`RTDSԪ I':P>ha<ZJigb.'f)5DO:u=J |̤<*B+1HrG6jTh:[0|I%5UMPf5v;Ywp+<.~i{ig̤<*@$y':P>hC>U0aٻ?mr LX6̽i4P?lQ7g 4ŪLF`K6UX8]r ?1c1c1c1c1c1ulkYwkU-yҥ!1c1c1c1c1c17(Nsoz*&F5ʔ[+,笻8GQЕA[bhνkU-yҥ3Tr(pgD:ub CzTZH!QYp|TgҢA %Ŗ\?)kB&2uJHYeRMJi-S ,*R׳|EJjZ$f,K^EAeaE aV u_2J(IcJIE@Qvl·]r3W̒ yXҪRFyQi T0 +gn f%@TҢA )#0Qvl·]r3W̒ yXҪRFyɢiM%xQvl·]r3W̒ yXҪRFx|EJjZ$f .`c xVPjQD:KUJH=*-$]n f%@TgD:ub ,b :U1`f`V %g!CjRkf)#@8+.jj7fue`#/bF_}Vr*]z벻D$yjΉ*t9T/0(蘂NLA@?޳^s]HS4YΉ*t9T/6mq׬^kf(P'294IP$ai5% i 0Q4U0j /Z?Q6C|YFvojNlg 4hWe +w"m8 $̤<*C iUس%n&M,6VIWmڵ,6! +4hX0/4Sh)Ue,^,^]LXJeVb : @/EFʋTJg-ZMQΝP94QHTHP^:$3|n+9nP0TMURkf)# 檩 Ʈvg*Qi:| Eu[]ү1lsΕ)蘂NLA@@+:& ӨSRY9CPst1l4{p ̤<*B!ŋxGq$g:@!aɢiM%ŋYe)5DfxD" %g!QMl$t`K>NjcOYA׳Sۮn:ͳJI*c'T%lQv,MQΝORH4 8^aQi RLdꔑe&NT$arYEI1RFyf)*zUzI{"+TDu3JI*̤<*@ f€ ?!f /a7|7(Nsoz*&F5ʔ[ ˚3Mٞ}#߳ƞ)lg|K<)g\u`k =*-$IR3*t?5 B MJi-U&^,^\RTFj`^Y&4J//,b()7|-{?cOBuJHYeRʕJHYeR=%Yp|TgNU)#1eJZ*U$NI, .`c xVPjQD:KUJHQTƞꔑl?(y6J[BIE<,ziU)#<|ZMQTaaE aV u_2J(IcJIHbN‹`$)dQΒǦR3ʕ:h!TaaE aV u_2J(IcJIJ)#0!>T&ժRFb *VTFj)#< *i ;5,6|TgJXYeRg,\\aY&4J//.J)I#5K!JCRX С+=nE 6 Ӯt–xٻXnlp !A׻K=W'm3ʕJH?ٹBw#|Q5V4I>T `Yp7u;wKnzTZH!T:$guI(>t(J[:ͷt@i:ͳEc&:YK={<)g+bVؑf)5DO:u=J | p)b=*-$IR3/,æ>`(5gT2̽qrv/,MQΝORH4 =*-$IR30|IVҨBK݇\ K=zTZH!Q=*-$X?1ESzRFyJ4RFyJ)#jΩ&2`ٗ–z.N)b=*-$IR3/,æ>`(5gT2̽qrv.Y9CPe- Bձ7E-8|EKRv}vW}~>A׻Fvn6;BIE<,ziU)#>TDSԪG"ש;>+gxW L[mq;7]n f%@TMQΝORH4`RTDSԪph(wYrG6&ڣAԚكJH-P ˚3MٝvYi88H`Xw|^c 8^]&NT$)5DO:u=J | >U0j?޳^s@+Bc1c1c1c1c1c1c1c1c1ct'`fgʇ:0)kᆼT޵*AױBVz v,ٜLV*y\=\}p2[^Ϗu xGJ떄xGۢkKk!GVϕy˃!V:t#6G F1c1c1c1c1c1c1c1c1c1cW}\յP\ )VY3T'T8I$!gBp+*R׳Qi DGPYeRJI*Yp|TgҢA )#8 .`c xVPjQD:KUJH=*-$‹`$)dQΒǦR3JI* o01I[<+u(S5|(%M*$gU$NIaY&4J//,=e7|-{?}UN , .`c xVPjQD:KUJH@-4 +f ܎mEDZu&`R:K`0 ˥}5w1 [ p) Y7fهEI1RF{(embiP谑`' 0B&2uJH̼>M*E =*-$IR30|IVҨBK݇\ _0B#zTZH!U$~biPx8ͅ.mC ^ Cpn+9nP0TMURkf)#5UMPf5v=8GAg1=fhR^NxRn6zTZH!T:$g>U0j?!f*&Z*LX(&/MJi-U&^,^XQR5K!n+9JZQTƞꔑˇ-{?+I#5jˇ-{?!&zKT=:,,K^J4RFb.>TIR3Yp^]%l\L$t=4= )#0Qvl·]r3W̒ yXҪRFxR3VI‹`$)dQΒǦR3=% o01I[<+u(S5|(%M*$g*tBI‹`$)dQΒǦR3ʕI1RFaxC|ZMQTŘf ;>T&ժRFxUvk!xXl!K^ˇ-{? Y긹; ,C@!aɢiM%ŋ˒RjRG|T>t(J[B,.n,,(ۢ+<\?5uxRUii5DfR3nP0TMURkf)#+.}#uiNf>*RۮfU$NI{pJ γm*tBIM'Y`R&2uJHt–{2xRU}Vl" M!&zKT=:,,$yf>*RzTZH!T:$f^YJ4RFe>TIR3/,K=W'b̚CLztX^,ҢA )#<ʔh=*=PK $u هELҢA %U1:$g>TA $g>TIR3̽qrv̚CLztX f€ ?!f /a7|7(Nsoz*&F5ʔ[8+.jj7f{p7u;wKnzTZH!T:$guI(~>t(J[:ͷ>TA $f4fكJ)#0 YK=W'`A~YyfU$NI`RM*yf*c'T2xRUظgʼ C\?5gʼ #1c1c1c1c1c1c1c1c1c1#.N[tR9*#؛k|EM]ү1k{a;%gК?j͙aLW#U !ձ7E,#Q[]ү1k<#%I uB<#m5Wy۵#gʼ+u΂:Rs#Vp#1c1c1c1c1c1c1c1c1c1`)`y\07 BY3T'T8I$!gBpsa+kl%g;Nϒi9%gd8GhG^|wwuo|E+k]w#Rԝ]_'J'm^z?USTX*sY+|wJŲ/:T`W~n:"蘂NLAH;(y6J[BIE<,ziU)#=Y1NG*wah+:& ӨSSA?ٹBw#|Q5V4I>TAYcG8Jڶ^b*Se_qڻNj:+wMyׁNWP !؛Pm0:K<)g:O|*R׳|EJjZ$g{?o01I[<+u(S5|(%M*$gT&ժRFawC3\ȩZMQTDJB6g3\ȩZMQTv f€ á 030ŋXhh7|7(Nsoz*&F5ʔ[(ӄu Yt&O<܊m}\g,b| EujZ$gyz| Eu@(Jˠ߱4Zy^&ժRFpa e#R3VI`f`V %g!QMl$t0檩 Ʈvgzi:| EuE 6 Ӯt–{1GBVx>]n:i5DfR3<=GBVx>]n: It%gVؚ-JzCĭJˠ߱4Zy^Pm0:K<)gt%gVؚ-G"QM#MZ$gB87|7(Nsoz*&F5ʔ[ebn4GBVx>]n:"ii4]q{1GBVx>]n:QM#MZ$gyz| Eu@(Jˠ߱4Zy^)zɫTo\Bn#R&R3% \*x,D0E44JC'r9=UjAԚكJH-` ˚3MٝtQ:+wMy׹(L.N>ي:+wMyתij)#<Γt%gVؚ-</1GBVx>]n:QM#MZ$gjABձ7E- 4ų\Nt+a9|TgMQΝORH4 gW0 +gn f%@TMQΝORH4`g^ 3)5DO:u=J |!n+9nP0TMURkf)#Yj؛8Gig̤<*C  Yt&O<' ̤<*B67f٫I"yөU ph(wYrG6jTh:[0|I%P+.jj7fwMF# 4ų\NRjtzB@yz| Eu@RjtzB@jfhrG6jTh:[0|I%VX*kK<(SAq;7m]0^c 8\?5[tRڶ^b*S [ȨD0C5gD:ub a7|7(Nsoz*&F5ʔ[ձ7Ep+oZyd^tLgD:ub /1Y1NG*axigD:ub C`f`V %g!QMl$tÀ(+.jj7fwMF#kU-yҥ3Tr)yz| Eu@+:& ӨSRUT CP|fMUSVXBc1c1c1c1c1c1c1c1c1c1a%ɖU*#eᆮT޵*AױBVz v#!Jֻ^bm.ȯ`W|B;+mN&襙qVs]l#5k&o]]l9.I]"F*emwJů''g3q-9Do]nB0*B?:tHG;ul@AY0c1c1c1c1c1c1c1c1c1c1e[]ү1kHC 0FjӤcb4DxD#hNA%m:5i7ٝw[ٜ=eg,?!f*&Z*LXRTFjB Vs Ye)5Df`RQ a-]_,PV$Ieiv]$cm9l A`.ä:i˾mՇJzTZH!U$~)gӮgEM.R3}ҨztZYvw\N[ .]o|rNmN %fvar'olm.Ȯ'k9떇\ \?zTZH!T:$f,RTFjZJC=Eu /v^&T[ $%{BiPOQaeBKݢW&nq |]E,AakكJJz!n+9t[|ZY\M*RU}П?<ܡ;;aɤ6u&`R:K` eVuN3 j:)gr 7`Gݗ 5v ' Mo C MJi-U&^,^\RTFjB Vs-{?ӗ}wJI#P0& 39wqJI*c'T!\"=*-$IR3`Q.1`Qi RLdꔑD+ҢA %Ři˾X zTZH!U$xD+ҢA 9wqJI*":?JI*": =*-$`_{3ğBa}R1 4],>FIHtB*VTFj)#1fr+I#5jD+NU)#1fr*tBIB*U$NI0(ӗ}w@|T:$f ESzRFb 4],QTƞꔑD+1DIjEi˾X!4(-PD+CIUrn%&T[ $u]JSJ*z -^:͉pw?zܡ;;a訚U*RGIl`]E,A[%-^&:-8G| j'r(L.N Y'Y`|՝RLd\N YgYM' 0}I`P頀VherhSIj2b"^wYkN]b=*-$@DC3\ 4],=*-$IR3pG=*-$IR3`Q.1`Qi RLdꔑD+ҢA %Ři˾X zTZH!U$xD+ҢA 9wqJI*":?ʕJHYFłJjZ$f |SJHYFłJ4RFa?ʕI1RFb 4],*U$NIBQTƞꔑ9wqU1:$f i Q3ZafrM!&zKT=:, ZJC=Eu /vI|dԡʞa$ )C=Eu /vIufhrG6jTh:[0|I%]E,A[%-^&:-8Gb*N?^N YgYM' 4 P ?58ew;8»N>+a9.I]#uV(Q]si8DdҥU0j%Uf1dy':P>hfRjtzB@U ?ٹBw#|Q5V4I>Tp ˚3Mٝ8GQЕA[bhν 4ų\NRjtzB@pMQΝORH4!*t?°?~|EMrii;K=?r*VTFj)#1f>G"HG"i5DfR3/0(#R3VIa*t?5{<)|r*VTFj)#2('`P|IVҨ LUj-%@Tġm )*zUzPIY5(rdQΒǦR3.h(wYrG6jTh:[0|I% V\U5An=ei:| EuE 6 Ӯt–{1GBVx>]n:i5DfR3 8^b| EujZ$gWáABz˿mVPm0:拮4C>G"QM#MZ$f,T9g~qrv0)%@T¥Rn^X|EBn^Y7\i^,66,u_2J(IcJI9*ij)#1eȩTSHVIKD0E44JC'r994*RGIlpV\U5AnNF_Č䭇T'gew Ir*U=dժRFer*U=dժRFaXgʼ Bܡ;;a訚U*RGIl s]#Jˠ߱4Zy^+w'ȡFawu\i^QЕA[bhνTSHVIQЕA[bhνTSHVIe&)zɫU&,,E4Y5j%gD:uY:GȩZMQT(GFk0Yfʔh=*=P$)C=EI(%M*$f/t=4^*8D/)zɫSZjaaP_E=$SZja` ġ贕Z& (^贕ZÀ dz β9cHXYmK<C'$3X=10(>T@yTaA&QdԡʞْQD:KUJH̼J΋IUL` )*zUzPIZJC=E$t=4x?TSHVU0js|mwJű:T?՝Tr(,T9g~qrv0)%@T¥;./,>G"*P/:Taf ܎mEDZu&`R:Kae}:+wMy׵mwJű:Tbb :U1N蘂NLAHu(S5|(%M*$g:& ӨSPYfTr(.3|n+9nP0Th:[0|I% YsUTcWi3-8G | 2#Rԝ]_Lb ' VtLASQʦ yEgD:ub a*t?5E♤rVtLASQʦ yhb\1EOFJ9ɤ2J% L= (^h? Hhծ a 0/ YByEeJ/afbgbp>`]^™Gq^\h6,k1Y1NG*': |Y1j/ yXҠȩZMQTġ"ΣLAAezTZH!Q/LeDdB.CDud u=UaaoVxН-4Ehp|Y4BAx?ՙɈP&` (˶ݛ ҠMY$0b.C`BFi/ġb -Q:4ZhJ5CVc*UT^0|*6TZ&S9jjt/ɢG%M*z@"O%.h(wYrG6jTh:[0|I%X(5UMPf5v9RNt%gVؚ-NjcOYA׳Sۮn:ͳJI*c'T%lQv,MQΝORH4 8^aQi RLdꔑe&NT$arYEI1RFyf)*zUzI{"+TDu3JI*̤<*@ f€ ?!f /a7|7(Nsoz*&F5ʔ[ ˚3Mٞ}#߳ƞ)lg|K<)g\u`k =*-$IR3*t?5 B MJi-U&^,^\RTFj`^Y&4J//,b()7|-{?*R.{<)gC294TM)VTxyrQJMQ^VrN Yr(Q]s|T2tTEw#g Y긹;m9>T&ժRF`ݗaQMl$t`eϾӄyΣ8IۿuJ[uҢA )#`(5gT0 YK=W'mw[]ċ0)I"yөU TH@KaQi RLdꔑyf4/,@:ɗe𥞫yfRjtzB@\?n\aQi RLdꔑYJJF%^: YҢA aQi T*НR3*T項R3*U$NI^ Y긹;fRjtzB@^a@K[n3|JC'r9=UjAԚكJH-5UMPf5v=8G:ӏ䝻^|T\=*-$IR3:$?a:%gf:h 4fكVuI1,̽qrvKaQi RLdꔑyf4/,@:ɗe𥞫pzϕy:.hj?;䭓벻:LvndIuǭwJůa>Xhh7|7(Nsori 4I>TeUST]T+ӄp^c 8\?޳^s 0Q4X Re凬3T",NϮٲvq)f ,W&YYe*?D0C,ÓEDҚKU`%I%7|ug|v}vW}~͓߹K0wa;%gȡFawuΖxRi:ͷwJŮe'Yֻ^bׇherhSIj2b"^wY]w['gew;8 iqBVz܊m}\g,ztZɖF"WAC ^ CA?ٹBw#|ÓHmQMl$t0p+.jj7fr]#T'gewdpzϕy:?޳^s@+B1c1c1c1c1c1c1c1c1c1c:K3,6VtZ#j޳kfwN Yr(Q]sNl$mve3;#Rԝ]_Lb a>L&YIlWn:6+mFճ^rGA)n+8Fc1c1c1c1c1c1c1c1c1c0e'Yֻ^b @!`I=!h"GМ![nC'geweumV;w_ftT&,E]ү1k6,u_,(%M*$f^}*Y%!\?!f /aVrܡ;;aɤ6u&`R:K`檩 Ʈvg]Zp2$e%l>G"ש;>+AN}*/0#$:c!*t?5gʼ #1c1c1c1c1c1c1c1c1c1#.NL1mwJů<}}6g}e6;8.Fa&o,ٞw|^c|#q`G2U*#<"T~\#8]Ew\M\:|\\ qӥ!1=g1c1c1c1c1c1c1c1c1c1c,E]ү1kH 0FjӤcb4DxD#hNafPjfIE<,ziU)#2NU)#1et@C ^ CA?ٹBw#|ÓHmQMl$t(eUST]λ, $e0,H﻾J|EKRv}vW}}1/,|SJH̼æzϕy:?mvY)YQD:KUJH̼|T:$f,ʕI1RFe`f`V %g!CjRkf)#@8+.jj7fue`#/bF_}Vr*]z벻D$ycJ)#2ʕI1RFpzϕy:!k\L̒ yXҪRFeJjZ$f,ʕJH̸C ^ CA?ٹBw#|ÓHmQMl$t(eUST]λ, $e0,H﻾J|EKRv}vW}}1/,|ZMQT*VTFj)#8gʼ B6,u_,(%M*$f^= )#1e= )#2 030Qx+ f ܎mM!F5ʔ[5UMPf5v:ӄp0p#/+a9.I]"pLiNI= )#8gʼ B6,u_,(%M*$f_4(-P谲̚CLztXC ^ CA?ٹBw#|ÓHmQMl$t(eUST]λ, $e0,H﻾J|EKRv}vW}}1/.i Q3Zb&=%|a !** c1c1c1c1c1c1c1c1c1c0#;92z(WGկf~ﻇ,M6'mvY;#Rԝ]_Lb a>L&YYe*#<"T~\#8]Ew\M\:|\\ qӥ!1=g1c1c1c1c1c1c1c1c1c1ceQ]ү1kH 0FjӤcb4DxD#hNafPjfIE<,ziU)#2JaeZiT=:,\?!f /aVrܡ;;aɤ6u&`R:K`檩 Ʈvg]Zp2$e%l>G"ש;>+ANZiT=:,^biP?޳^sgʼ c1c1c1c1c1c1c1c1c1c1a%ɖNt7\VtZ#j޳kfwmVtG\ Ye:YK=GN Yr(Q]szYK=6 M6'mvY;#Rԝ]_Lb a>L&Y9dq[]ү1k<#%I uB<#m5Wy۵#gʼ+u΂:Rs#Vp#1c1c1c1c1c1c1c1c1c1a 2Γ&Zy\07 CY3T'T8I$!gBp 7]r3W2J(IcJIU$NI,ҢA )#2 030Qx+ f ܎mM!F5ʔ[5UMPf5v:ӄp0p#/+a9.I]"pҢA )#2JI*c'T*t?5u(S5|$t=4yQi T0BI` 030Qx+ f ܎mM!F5ʔ[5UMPf5v:ӄp0p#/+a9.I]"pҢA %=*-$X>Y9CP 7]r3W2J(IcJITDuaQi DGPC ^ CA?ٹBw#|ÓHmQMl$t(eUST]λ, $e0,H﻾J|EKRv}vW}}1/,B#^aQi DGRY9CP|`@+DM4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M6t'`g] j:)gFݡGkEij0Nm.+w*Pm3#ik]a9!޵*A%^>T]vi4#u>@FB?j:)gwJZulW26M>Ks MzЌz˿etR iHC6سnɶU;hO0x= *U$!$*ri XhnHrG6! !SHiI>T m؞әE޻N_}r;Nd :q'ΚU)#2z˿etR inP1$!$*ri XhnHrG6! !SHiI>T m؞әE޻N_}r;Nd :q'5DfR3/-Y]E,֛pf ܎mBB&V[0|I%-GnOPu *#*EiE M۹Rĵ m?C+i5DfR3`e$eXHa4MwjY7ud*M4'ri h5=U]ˮ:PtUY\ Ƚb4MwRu030Qx+ |)nP1$!$*ri TvΉbxI`B(l:ywũM˕z"AܩBfAN6á?<5afYNyk+WfUK^iXl?:UEA׷fN` +w6&m8 a~Jm>ծ af.N ]@!/0]Z6! W?uC030\g/a!#$$NM!&`R:K` Q扮𮓬}:(m3+l6V@yh Y?i:XP$Yh Y?\ tRUYŘw\&MmBy&TiO4`R! !SHiC挳_l߳Yܺ>ӮUH[0襞)gE,Nk030Qx+ |)nP1$!$*ri 襞k,6*"áA׷um9Uqmx?6`uYӘJM NXl߳OkXmYCaf86ŋ}Yp>",:X떇`fa# W VqXp>7(Nso94:كJH-l-7-C|襞udt2WuQvgiVl߳'\ z:ͯVM!T cVtRUY:A,2m}o94:OByʕFII COZ4esen.ar:FهE,^MESzRFa ^ Cp8 C'r9FII COZMl$tl-Gn.p2s Ui00,ˉ8= )#2z˿etR inP1$!$*ri ӮUH[0襞)cOBuRK030Qx+ |)nP1$!$*ri ӮUH[0襞)ZA ^ Cp8 C'r9FII COZMl$tl-Gn.p2s Ui00,ˉ8#5hzi],ƮâxTkMظrG6! !SHiI>TvΉbxI`B(l:ywũM˕z"AܩBfAN6áա,0IK={_de|nɶU;hO0x= *U$!$*ri XhnHrG6! !SHiI>T m؞әE޻N_}r;Nd :q'z ת&z˿etR inP1$!$*ri T0Q8B`e\̒ yXҪRFev`RuFf ;K^2J(IcJIكJJz$YQD:KUJHXf$$^f)*>TiN`bOʕ:h!T"ċ0(>TA $f,*RU}М?'rğ*c'T"ċ0(>TIR3 ^f)*>TiN`bOʕJH",HJjZ$f,*RU}М?'rğ*rZj)#0" *rZj)#0ev`RuFf ;$@b5I1RFabEQSђHTHp;0|ITa:OBp| = )#0" (cOBuJH*$Yx8>T0Q8قN>QTƞꤖ,G vE$,*RU}М?'rğUI,$YCҢA %¢EكJJz$XCH",H3VTHp;0|ITa:OBp| >T3D5j&",H"%Q= w,4*RU}М?'rp;0|ITa:OBpM4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4aGIrv=e߰ƮâxTkMq4Qp&*I޲r 6;A9=e߶#R]ү1kﻰ"UcM!mRvq\:(FB?j:)gwJZulW26M>Ks MzЌz˿aj:)gF݃p!Wb,b a&Wo6<ÓHi4'O0|Tdɤ4աFY,QEI.F`^EΚU)#0f /a!#$$NM!&`R:K`6Ήb{Nez8G}9*eĜ :h!Ta."1襞v.ܡ;;b2HBHTxkf)#m؞iXA%^]s vsr^(m3iw*PmY@pMa>TA $f,0I,xUK^iXl!Y7ud*M4'ri h5e6;8Q] ȽbIR3 `f`VRܡ;;b2HBHTxkf)#aj,^ Cpn+9nP1$!$*ri AyJ4RFyJ)#8&( B–xY7ud*M4'ri h5e6;8Q] Ƚb&ժRFa ^ Cp8 C'r9FII COZMl$tl-Gn.p2s Ui00,ˉ8I#5jyl=e߰F5v£Zn'r9FII COZMl$tðtMM>KCa4D˾Ӯdnn\mp!2 7nJm2p. ?ʕJHY`–{ b ?<5af0 l7|Оaɤ4z'>T2HBHTx,(ۢEw#g/"j<5IlE47?ٹBw#|dɤ4դ*RGIly6Oi̢]`/2\as̸yj<5Il^[Yw1]E,֛pf ܎mBB&V[0|I%-GnOPu *#*EiE M۹Rĵ m?BXyk+Wf (DxV:Ͱ/`,tCn:ͶVmpMpen}}\n:͜\C1Y,^aG&µqmB8!AҮ2,:X떇`faJ,^ Cp8 C'r9FII COZMl$t.]]'Y2WuQvgiVl߳' <5h&t?°QSђH <5h襞k01Le_iM!Оi襞k,6*"áA׷um9Uqmx?6`uYӘJM NXl߳OkXmYCaf86ŋ}Yp>",:X떇`fa# W VqXp>7(Nso94:كJH-l-7-C|襞udt2WuQvgiVl߳'\ z:ͯVM!T cVtRUY:A,2m}o94:OByʕFII COZ4e2tT~l^MESzRFa ^ Cp8 C'r9FII COZMl$tl-Gn.p2s Ui00,ˉ8= )#2z˿aj:)gF݋7(Nso94:كJH-ajT2HBHTx,(ۢEw#g/"gERK030Qx+ |)nP1$!$*ri h5e6;8Q] ȽbI^W^l?3|f ܎mBB&V[0|I% QD۱=2v#vqu 2N垤e^u긹;] DcWaK<*5\?ٹBw#|dɤ4դ*RGIl; QD۱<$!6pDJ:Aʽm|QvgC vTFڳ '`O i Q3ZafYN4QvY{ b &NT$ M!&zKT=:,?ܳ׸,2m}o94:OByʕFII COZ4e2tT~l^MGA]zYk `f`VRܡ;;b2HBHTxkf)#ajhUEf4 Y`Yk XHaYf0 l7|Оaɤ4z'>T2HBHTx,(ۢEw#g/"b3Vl?3|f ܎mBB&V[0|I% QD۱=2v#vqu 2NZE~tR inP1$!$*ri T0Q8قNkk%m\~?C|W4݋%Q= w.%v`RuFf ;^f)*>TiN$YW/g$t=4x8>T0Q8قN*R׳̒ yXҪRFev`RuFf ;dQΒǦR3 كJJz$XNU)#0" *tBID/ʔFC4'0Iܱ'J)#0" *c'T¢EكJJz$Xi5DfR3,R3VID/ʔFC4'0Iܱ'J0"MDQKU%!THp;0|ITa:OBp| zTZH!T:$f$YE=*D/ʔFC4'0Iܱ' *НR3,4'T¢EكJJz$XҢA %"ċ0(zTZH!U$xTHp;0|ITa:OBp| zTZH!Q/0(zTZH!QQ"%Q= w,I"xE`PDuTTiN`av`RuFf ;_كJJz"iiiiiiiiiiiiiiiiiii:K3a.A]E,֛#-vh:2bM_ Ui0Me%nJmvpDr 7mwz˿l>G"#ֻ^bwa4Dʙ^aO*N?pd#ƮâxW|TGVϕy˃!i$2 W5v£ZnRmf0 l7|Оaɤ4z'>T2HBHTx,(L.NZYK=yS:h!Ta(p>7(Nso94:كJH-Z:&݉9] e#@>Ӯ``Yp/,項R3/-5v£Zn'r9FII COZMl$tðtMM>KCa4D˾Ӯdnn\mp!2 7nJm2p. ?ʕ:h!TŘf ;śo b ?u 01Le_iM!ОiTIK0|SJH̺`R&2uJHtt :oYvEvpDJfvů%l\L$t=4zTZH!T:$gK6UX8a>,^ Cpn+9nP1$!$*ri AyJ4RFyJ)#8&( B–xY7ud*M4'ri h5E 6 ӮVxR`^E5DfR3 `f`VRܡ;;b2HBHTxkf)#ajh5E 6 ӮVxR`^Eyk*6ၙ>XhnHrG6! !SHiI>T m؞әE޻N_}r;Nd :q'yk*ؼTtR inP1$!$*ri T2HBHTx,(L.NZYK=ySYp*ΊYf `f`VRܡ;;b2HBHTxkf)#aj7(Nso94:كJH-Zĭu 4Vm&QPfV+`B(dn^ɵ{Vm/-e:)gu\&t?° Wi襞kaAȋCn:ͶVmpMpen}}\n:͜\C1Y,^c:ͰG?6a \?36Xp>JȰT?°e-ft47?ٹBw#|dɤ4դ*RGIlaim䭬gE, 0qھ⋶;Noen 8Uqmx&t?°&ri H\ z:ͯy 7af0 l7|Оaɤ4z'>T2HBHTx,(L.NZYK=ySQTƞꔑl?3|f ܎mBB&V[0|I% QD۱=2v#vqu 2N娪cOBuJH̼TtR inP1$!$*ri TiN`bOʕI1RFabE*U$NID/ʔFC4'0Iܱ'JjZ$f$YAi5DfR3 ^f)*>TiN`bOʕX RabEE<,ziVTFj^f)*>TiN`bOJI*c'T"ċ0(%@ev`RuFf ;$AESzRFabEQTƞꔑTHp;0|ITa:OBp| zTZH!U$xDXfJI* ^f)*>TiN`bOJI*":bEJI*"8*$Yx8>T0Q8قN>UO@" 'THp;0|ITa:OBp|!4(-PDXf)5DO:u=J | ^f)*>TiN`bOfM " ZAQ"%Q= w,4*RU}М?'rp;0|ITa:OBp M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4aGIrv(Ϝ"5IiB02a>Ӯ!$\as 4{]VTFga4G vqr*B?kU-}vpDJl|u>@FB?떄a[>U. fܫ Zs MzЌ 2θA#^t֛`n@!`I=!h"GМ!îhWPaf0 l7|Оaɤ4z'>T2HBHTx,(L.NZYK=îhWE47?ٹBw#|dɤ4դ*RGIly6Oi̢]`/2\as̸yr(Q]r–xHîhym(Ϝ"5IinP1$!$*ri hY': |ЪiAp !AC\ Z`c p6ʾy COQXhnHrG6! !SHiI>T m؞әE޻N_}r;Nd :q'Xn\0"^[D::ycZn'r9FII COZMl$tðtMM>KCa4D˾Ӯdnn\mp!2 7nJm2p. ! s1\ Z|pDJjO/,V/A!b#YQ7hC@!':P>hUEf4#A?*RU<0A,7PhG^5|"^l̒ yXҪRFe汖`RM*y*VTFj)#2]1EOFJ%湖e&ri Iy2TDSԪfh>T@yTaXn%2jE%!Te%@Tc,NU)#2I>T&ժRFe滖bKs,L%@oe&NT$橖e&NH4*x\?5ja4D֫$Řw\&MmBy&TiO4`R! !SHiC挳_l߳Yܺ>ӮUH[0襞_a4D `f`VRܡ;;b2HBHTxkf)#ajӮ\mDȀM2$Dvyw"5y0I[ -& HPK& Ui.HX@5f*-",:.QT%$f,5g'l(*$x 01qrv @ AIWmڵ,7R6~|m$xI[ iaI``&ϰ 0VJ& Mxkn&Ӏ+w&n&Ӑ>TI[ -& HX RK0jX>R`KL0I`In0I`IWh& 0jX>R` ]d,(I`jX>2:Ǥ8XM$^p?{?ʔXYa%u .p94p=UjAԚdɤ4դ BJJ1eJM NXl߳ /r>T5XT@yTa,%Pј&m8\ʔFC4&,ʔfRKBKW`*94:8>hYf)*,:BKެ:wdB#tMviq6x>*R׳RM*)k|T:$gJZ*VTFj)#8>*R׳4'TK^ERKRJI*":I"yөU )kTDSԪ ƞARVIRG,ziUTDt)ked$rǦPLuT$t=4˄)k$!$*ri z%e#pf` J[D0K[}݇\ [ !!4C3BB&bVD" %g! \&TiOA?ٹBw#|+w!`6Xmw;䭰"Ui2 7`Fv^ʽmVuE$\?޳^s2θA#^t֛?i Bhf.aɢiM%, \饄B87|[FMjD0C,^,^Z^yfHM"bʔew^wYC@!aɢiM%ŋ˒RjRDJphf.`P頀W >Y$L+B87|[FMj94TM)O,@`@*QJjRzTZI:"*U$Nj`P|P>jΩ&2aRAC@!aɢiM%ŋYe)5DfxD" %g8C3@0(RjPVrnC6áACQ4<`ʕJjRzTZI:"*TTz)I#5BPD0C,ÓEDҚKU`%I1dMRDJphf.`P頀Wpn+9\`O !rhSIj0YcJUFMDQKU%!TGN"`HʕL 4  B;zɮWHaQB  (P$+`^h)3HdB.`RTDSԪVrnC6áAC@!dX//-vY/pn+9C3@2J(IcJI %g!%@TŖaQi$t& B:J%ZzOtL ?pD?*y^3|n+9ǣ&#I\#݆컆)|N^Gov۴?ձ7E,#Q[]ү1k'u(S5|QΒǦR3   CPD0C,^,^YR!JC@+emwJůC ^ CA?i:;w]vwʐ lDawu$ovu nvP!fHM"bޱ7E,^wYC3@0)%@T¸D#wYm|W:ӏMV޵*ȼR%oXdkθA0h(wY&t?5 B H l#oF0םa՝a֝a&h2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasimportclususter  e#A_anst "$CELMNORSTilmor=GIPcdfghpuy{}()-/0DFHUW[\]bkv.12:;BVw!%'39?KYqxz|&,6>X+4578j*`@xZ0js_*b Dh"`4٧)-WY!&/۲ʺNf~A%%t . e]YYR]$*5|e\v-@E `@$ Nk2BK#*۬ɪaX\+nԾ,p5Te;R CBiI7xP?Aԭqh*^+b.5Y)2gl׼׿ ËLYrtI&>$ jR-Jř%"C^)!؇ĝݕn3vk$8##*׼׽{{{{{{{{$%x9RTh ;38$ ` @i{{{{{{{{{{yԓv RDך{δRDnIS#iԥ]plkInZnNyֺvtrK;3^k{{{{{{{{{yLYryjH  gE`j4rN (2b}.Po.QcM#BОLɏUf"WE.$38B'`9j QʸH4ZTJI m$B9Ƌ7c]p\(ʥ0kۢ쐱&oj QʸH4ZSQ i$@RnqpIM4׽{{{{{{{{{{k~^#h+n2Lךkm{Ntp.'lVJ[ܝ QW6G.k"ΐ y/: ֺ]D` m&Itfu/_kN ɬ'YW@Y5R΀_=qEu'rxt$ &׽{{{{{{{{{{I Q.E[u&IyM<WF)*4hQe0]p4\놧 F*A4MrK9E؂ID|7.1R oK]q/]VM\xj1R oK]p"oK]v*RTi.Vuʤ 1rK#)% &Թ[YYb5eDK#^Mgh -nT, TM58j1R oɬ ¥R Qv QMy5A0^RTǤ909U"GA!Eh 7xAzJEJRπB UH`TT5 7xAzJEJRπB UHÇ$Z"I/&4KR*W |Hr`rEH&Qx TJ 7xAzJEJRπB UHʤ 1My5A0^RTǤ909U"G&?vgH]9Ls6gԥA1Qn"2CS_^u 5m/aA1], InZ;5ƴଚu t_u, 5ᛓAW\w'@rB "k{{{{{{{{{{4i.OZp^cֺ8YL$%x9RTh ;38$ ` @iʬ00ߠR u){G :BnX`k47AԹ[YYb5eDK#^Mgh -nT, TMdWTAdՕo.IbBXP+ jʈJ\#BОLɏUf"WE.ge(4Rt]p\NnW5Wfx|5Ҷl뎂qK;<0Lo^dHV:}J^7tVA E!I)@G` A@gR3Ыt'S[m6]uAs;8X9b8|R57N7,E`pJR8IaN 0gR3Ыt'S[m6]uAs;8]QF#VT@y*I7&ԳEeXLii{{{{{{{{{{ךI7`Htp."F@Tp ۣ!t8#b*RݽvxRҠKKݺ8YNM;r"_5T,e[ݶ&>wYe#y/: DG :Bk_eրnN~k8+&tfB]f]K;:fA5Ț^{{{{{{{{{{$Zd*˓DG :B7HK8r+U]ѣv0fqFI;u€MrKݶ+nRn]lV݈7+t" FoK]uX9b8|R5|RjoK]t`>(A%&f,HK8 T;3:DH :,HK wǤ909U"GJ\vY2o{{{{{{ߠR u){G :BnX`k47@')٦"M3;{{{{{7\*Fؼ Z/IH\*Y=!Aʩ :Ȯ#* <$]pK€]QF#VT@~(( RongLz1,gu38F (9Atp/녊\srһ3ǸC^e\t'3]ÐF#(QJ(A`>(Ajoݺ8Yuw&3$+tqHYK, 7\,W=dWTAdՕ7lrAFo.% aS]0zApfrQb #3YeV;`=v 838A@)EDT;J\~ΐ+NnWp&Nu@&3LZnjongLz1,gu  ZgH^5 YYb5eDӥYiɴ㫶Z۽DfwLl3'ԥ6*R8W's Ngg+ jʈ8n 7&o{{{{{$轻WjBRTA{{{{{{nB*0)!pĝ.n$8*0]QF#VT@)&b1JR;8>&=ۣ!gg ɢpIK]ÐF#(QKgdWJ\]ÐF#(QJ(ALo{{{{{$]Ƌ7y7\,Wqޮt 'Je%LIL{{{{{7\*Fؼ Z/IH\*Y=!Aʩ ; AER)*4$]pKah(`rE%F `?J\IQ|ʺZ$ɿ7+tPٝ+)rKTT57.b %`<+tT8rHH&.Vu`PHAvZ*A4MrK9$Wa7\*Fؼ Z/IH\*Y=!Aʩ 8jqQPbD$Y [)+K>Ǥ909U"GA$> bk< @akt%"pgx!*ThT8rHH&I/&4KR*W |Hr`rEH&#B R oɬ ¥R IE0uFYL F*A4ETT57Ҳ A$>  qo<ݛ, #< Af:r$y]$/|"ەHRi74@RȉnQ吓MusQT .Vu9JMY*0RT<ݝ6FY?<[u<&Թ[nT+tp*oK]rN60olCc4f7LҦqn瘛miQ E 2.-7#qd 9JS«8F@ #bs,X- F@`% gQVrnS3nTPSu)s7݌8F7F3pWnBd.N7XI#F2Rj `Υ.fQVrngԥ6*R-Jۻ4vgԥA1R##BОLˡ,gu@8fwV#^E[wnvi>n(4q9dw u)x|L~Aԭg&n 7&d&#*6U8AԭmۦK§aҲ M)-qC8 Ro3e2$#)QZ R Z<3e2$#)QZ R Zs۶m؋Ysf:VS!bB0^)5"(0۶m؋Ys$ɿK§aҲ ]ȭ +0gR3ٝ+)!/XR Ï0YLxVM g&YΕXEh\Pag&2oĄ;<"s<3e2$9E؂IEECQM ~M+9JMN():,HK ygJd,Hr +0gR3ٝ+)!.J**Th(03:VS!bC]$TT5\PyG)Yɻ8jo3e2$9E؂IEECQMyG)Yɻ8LIftBď0ݶ+nZ˙1ygJd,HF tV"O0QVrnPј`*M6f#T8rH|2qΕXm؋Ys1]ȭ ">轻97gYLalV݈3/I(qP:VS!bGnb-eF aDPaǠ"Tho3e2$y[v"\D`TT5qRnftBď0ݶ+nZ˙ AER)*4PaN8Lٝ+)#7m۱btb,- UHAWe:43ftBď0ݶ+nZ˙b % F*A4EyG)Yɻ8LEٿqܣ<3e2$9E؂IEECQM ̋j.ЦyG)Yɻ+G)j P4!Kt^€ظ\4{"=-{v-3;d\7s>轻~89qۑ轻6UbY4H8Zun۱ftj%eR-{v"r}-{v,ΕMD\:[Y+&QvHӥ/nīe N-{v%]p-\g&梁/nīeYTKt^݋4nS;#b[MtE؃IF[in۳wcRnrn7r^M`vnz7uef1Yٝ+&Rx-tJxJ32`% a@v}-{v"rx@v}-{v%]p-\H8Zu? n۱*넙j97x@v}-{v%]p-\Jʥ0<€[j\M():Aՙ2oΕXEh`ݙ)n۱ʄ-E؃IFzʇI>轻I%eREٿ\o'۶m؋Y}ftBĄ`SE0j+D D \P3"g&a+)#7m۱b9E؂IEECQMC&BC0YLalV݈3/I(2o>Tla+)#7m۱b#⢡H&n۳v0 ΕXm؋Ys1]ȭ "MV4`WE`r+Dg&O0[M#fb=eC$Gٝ+)#7m۱b=eC$GAaҲ ]ȭr1<>T!m4f'ʓp1 o$!,(0YLalV݈3C ah(`rE%F0gR3ٝ+)#7m۱btb,- UHAaҲ 09U13D箊#q:ZALԥIbBY뢰8rpj)E(5`ήPSu)s7j{ܝIz[쐱gKt]PfE4/\u$.,ϥ. ?dl\.ek` 72iv[RvH^8~m߇32<Թ |8Rӥ. ڐ:ffJ_I7{wRR7rd&YU'ʔfihU©91S\j豞#ׂcfrܪE!{R.#d'30+ GPQUX x@lCcNbf"۔YmR!t]ÐF#(QH$!,(QUX ?< Af()0VO xǪMqx^AaȬ,nW$rjA:,ƛA#7-vH^ 8X9b8|R5,q3a! Υ.fVO xǪMqx^AC3YeVe#vVfO>zVM]q{t]![k=tVA E @=tVA E#vY2iĄE`pJRPj8]-x Roq8|L}%#*˹'nB+mA[T, TMtVA E#2o4¥R #0.#d%g83 BAJ\#BОLP:)5tX1@fr+,:Ldy"($L`((LusKc(uVZvr1>)@Gg]ÐF#(QHɿK;<o&M$ɿUkzVM]qk!x\,W=dWTAdՕǬ,14;r)zG :BX4¥R ,1y]QF#VT@yd 3 u)s7 BxU3U@覸ctM-:]po'fA[T, TMAʩi4¥|Hr`rEH& AER)*4aǤ؏, #< Af RongMqx^A3YeVe#ȉfOA"gABgӫJ^IEʲ L'3Z /IQg؏u,I7 :%"pgx!*ThÒEp-vL5"$i)+K8 TM"0Ç$Z"Kpf:F[<**tS\j豞#ׂcVYUxtj"EPHPPRQn"2CS "vxp\ ]S7۩ggM$ɿ7% g*0ft;J\7{{{{{{{{@V\Kv-JۺL$;*{{{{{{{{F[<*E5Ʈ0]x!0P$39'fdN;*jm4YɺbRMYQ9x9TF#VT@yƛ'K<]Ƌ7y7\,WIWY'Y3>/I;dz)D*˓pEl\ut'U!шՕ0Y f7X@Fx0$'u)s7 BxU3&=Uk]3`B `Pfr+, 4G}4YɺbRMYQ9x9TF#VT@ym/aA1], K;< 7&'8)J2xrRw,p^%]IALϩKI.O7NȲ퐫29iiדMdjmRn] N\fu7.ebI"0Rn\-] ҶÎ7Zu*3<)r&FcX%C<cgGf @`pIbBYZu*30fy@8Vb)*6#x,0yiԫΦLₘ3KĄ= N\fu3aqRTlG8DUf"b> 0-:q,g38,PSu)s7$iWKYj^ۅR3:ongLz1,gu@8fps-_BI[l'$]"e8O"˶B:_< z1`n ΕXm؋Ys1A$H&NrVU)aҲ T-{v3vdNggaҲ VMF 8((ongLz1,gu@K{v2/JyqRTlGMbbVMFg Y؏gbVMFdMzL^ݯW0RU PY52Xdh`7/!BAەorKY4f3:VS!bC]$TT5\P,ೀ!M UD6!*WLs*kQл]YYR]YYAօS !B¦q+&#t2v/0gU!шՕv.0dhgaME%F|; +΃l* ӄ$rwŰ^*3x$ TNȘ aR*U0¥Ș@cMd 3 J\#BОLɏUf"WE.(g"ʬ pDy\*;jm@8Vb)*6#~w,p\r&F@==UJ0vqRMYQཇǭtp.u,H0LI[laqRTlGM-6-:ezV7&zWMd-JۻvحCЫt'ShTyRӄ$vحk/< ΕXh EhHkd\7., q+)#7m۱btb,- UHC'Rn^taǘIQ̅aҲ A!Eh2ygJd,H bExj1R (d, ΕXm؋Ys1]ȭ "N7.\v'uqY؏B0YLx"Th <3e2$y[v"\D`TT52ygJd,H bExVMC'ongLz1,gup*]R)D*˓p./UʔoAԭm۹+)#7m۱b#+Z*A4E s>Ү;XNvq+)#7m۱b#+Z*A4E }\v'u8 E0YLalV݈3.J**Tht'30YLalV݈3/XR (d'IN7Qv33:VS!bAECQMC9Ljuh5|AɒdS<3e2$9E؂ID|3aҲ ÒF*A4E ftBď0ݶ+nZ˙Th0YLx"Th0YLalV݈3/XR (g<3e2$y[v"\D`TT53Y:Nq.T7{{{{{{{{oߣ29be[4ZrL${{{{{{{{i4¥|Hr`rEH&،Th8 ΕXTh8IaN 0gR3Ыt'S=Tk]3`B `8*/-YDH2x > >\R J-dFUj`9#)% 'gftBĄ`PE$DPɿK;<o&M ԈT,Ǥ909U"Dr +8 ΕXb % F*A4W2q3a! Υ.fVO z ,gup 39U`^&ZǤ909U"D텠Aʩ0TlGd 3 u)s7 BxU3U@覸c >\R J-dFUj`9y[v"\CQLEAʩvygJd,H bE AER)*4PɿK;<o&M ԈT,T 3 49!сe]-EBŨPhYjg$8RD* <9!а| <9!кHxrCe@Ò -VZ iTxrCrd h\B"YUkp0iBYǃX%Fӱ32LؠKh^AJHBU8ˡ, Mq4rcY``hlCQLE%FIbt,6T- JHӄ |LzJ*00*R@&hlU`xAUU$FTM!ꦈÂQл]YYR]$4F x^U4B4F  CG,0`zAVfq0]xD4rD8rH8."D| ʀ,ЁƚmK]tLz"0/  AER)*6+"V4ڗ+t$  &Թ[AMj\냕HA4b5eDRn]%F|6. /),j\C .+F -,M~6ԥtfu ItAYX<@@X,,X'K0:(Wga3"%K<v Ix!*Th<o 2J@$E$DaQU7 4xI"Th<o 2J@]ÐF#(QHaQU7 4p*hjʈx(dM 7(I؏BaB&"<o 2J  UAH 7)ГPan X$ Tqbe[8`0M 7%S]  tQU7I2iĄ;>09U1ALԥԑ;7kM$ɦK>09U Α'`x|`rXVJ\d$%"QR ~g"ThxRMYQ@vzJ0~g# `Υ.fٿ\o&M70/^'AM1< .+EH&7kWorvFi^,Hf$V8YC%g83 BpgR3% gcgHALԥԣ3'u2}5rQb+ʙW)FEZ /\"ɂ Zp^cֺ8YC4t¥bǤ909U"D dl\.ek` 7&`k5&d߆rܝ*QWK$$!*{E RE\M$ɦK>09U vp^J\d$% &1); then while [ $# != 0 ]; do case "$1" in -i) NODES=$2 shift ;; -n) # lists only IBM Http Servers not managed by HACMP USEHACMPODM=FALSE ;; -o) # lists only IBM Http Servers managed by HACMP USEHACMPODM=TRUE ;; --) shift break ;; esac shift done fi sa_id="WEBSPHERE_IHS" component_id="WAS_6.0_IHS_SERVER" header="TRUE" found="FALSE" typeset APPLICATION_NAME # lists only IBM Http Servers not managed by HACMP if [[ "$USEHACMPODM" == "FALSE" ]]; then if [[ -n $NODES ]]; then NODES=$(echo "$NODES" | tr ',' ' ') for node in $NODES ; do APPLICATION_NAME="WAS_IHS_"$node clquerysaapp -a $APPLICATION_NAME INSTALL_NODE_NAME > /dev/null 2>&1 if (( $? != 0 )) ; then if [[ "$header" == "TRUE" ]]; then echo "#Server" header="FALSE" fi echo $node fi done else # Server data not found. dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 20 "ERROR: There is no %1\$s information in the discovery file.\n" "HTTP Server" exit 1 fi fi # lists only IBM Http Servers managed by HACMP if [[ "$USEHACMPODM" == "TRUE" ]]; then odmget -q "sa_type=$sa_type and name="INSTALL_NODE_NAME"" HACMPsa_metadata | while IFS='=' read f_name f_value; do f_name=$(eval echo $f_name) if [[ "$f_name" == "value" ]]; then f_value=$(echo $f_value | sed -e "s/\"//g") if [[ "$header" == "TRUE" ]]; then echo "#Server" header="FALSE" fi echo $f_value found="TRUE" fi done if [[ "$found" != "TRUE" ]]; then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 100 "WARNING: IBM HTTP Server PowerHA SystemMirror Resources are not configured.\n" fi exit 0 fi J\ k#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_waslsihsnodesuster#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsihsnodes.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)06 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsihsnodes.sh, hacmp.assist, 61haes_r714 6/6/05 13:55:50 # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin: FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 # check discovery file exists or not. if [[ -f $WASSA_DISC_FILE ]]; then # source the discovery file. . $WASSA_DISC_FILE else dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 10 "ERROR: Disovery file %1\$s doesn't exist.\n" $WASSA_DISC_FILE exit 1; fi if [[ -n $GSKTA_NODES ]]; then for node in $GSKTA_NODES do echo $node done else dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 60 "WARNING: Discovery file doesn't have information regarding Take Over Node(s).\n" fi  kh#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_waslsnoded#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsnode.sh 1.8 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsnode.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin: FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 # Get the arguments. if set -- $(getopt no $* 2>&1); then while [ $# != 0 ]; do case "$1" in -i) NODES=$2 shift ;; -n) # lists only Websphere Application Server node not managed by HACMP USEHACMPODM=FALSE shift ;; -o) # lists only Websphere Application Server node managed by HACMP USEHACMPODM=TRUE shift ;; --) shift break ;; esac shift done fi sa_type="WEBSPHERE_NODE" header="TRUE" # display only cell and node list not managed by HACMP if [[ "$USEHACMPODM" == "FALSE" ]]; then # check discovery file exists or not. if [[ -f $WASSA_DISC_FILE ]]; then # source the discovery file. . $WASSA_DISC_FILE else dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 10 "ERROR: Disovery file %1\$s doesn't exist.\n" $WASSA_DISC_FILE exit 1; fi if [[ -n $NODES ]]; then NODES=$(echo "$NODES" | tr ',' ' ') for node in $NODES ; do cl_rsh $node $WASSA_SBIN_DIR/cl_wasdiscserver -q 2>/dev/null | while read line; do echo $line | IFS=: read component install_count install_path version install_vgs install_pvids profile_count profile_name profile_path ismanaged wascell wasnode servername typename # Check for version if (( $version < $WAS_MIN_VERSION || $version > $WAS_MAX_VERSION )) ; then continue fi # Check for APPLICATION_SERVER if [[ $typename != "APPLICATION_SERVER" ]] ; then continue fi # Check for federated if (( $ismanaged != 0 )); then continue fi # Check for multiple profiles if (( $profile_count > 1 )); then continue fi # Check for volume groups if [[ -z $install_vgs ]] ; then continue fi KLIB_HACMP_are_pvids_shared $install_pvids if (( $? != 0 )); then continue fi done done else dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 20 "ERROR: There is no %1\$s information in the discovery file.\n" "WebSphere Application Server" exit 1 fi if [[ -n $WAS_NODE_INSTANCES ]]; then for wasnodeinstance in $WAS_NODE_INSTANCES do typeset -n instance=$wasnodeinstance found="FALSE" # Eliminate the configured resources. existnode=$(KLIB_SA_get_metadata $sa_type $wasnodeinstance "WAS_NODE_NAME") if [[ -z $existnode ]]; then found="FALSE" else found="TRUE" fi if [[ "$found" == "FALSE" ]]; then if [[ "$header" == "TRUE" ]]; then printf "#Cell Node\n" printf "#---------------------------------------------------------------------\n" #printf " 1 2 3 4 5 6 7\n" #printf "1234567890123456789012345678901234567890123456789012345678901234567890\n" header="FALSE" fi printf "%-35s %s\n" ${instance[WAS_CELL_NAME]} ${instance[WAS_NODE_NAME]} fi done else dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 20 "ERROR: There is no %1\$s information in the discovery file.\n" "WebSphere Application Server" exit 1 fi fi # display only cell and node list managed by HACMP found="FALSE" header="TRUE" if [[ "$USEHACMPODM" == "TRUE" ]]; then typeset sa_keys sa_keys=$(KLIB_SA_get_key_by_type_metadata $sa_type) if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "KEYS" "HACMPsa_metadata" exit 1 fi for sa_key in ${sa_keys}; do # get the cell name cell_value=$(KLIB_SA_get_metadata $sa_type $sa_key "WAS_CELL_NAME") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM..\n" "WAS_CELL_NAME" "HACMPsa_metadata" exit 1 fi # get the node name node_value=$(KLIB_SA_get_metadata $sa_type $sa_key "WAS_NODE_NAME") if (( $? != 0 )); then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 400 "ERROR: Failed getting %1\$s from the %2\$s ODM.\n" "WAS_NODE_NAME" "HACMPsa_metadata" exit 1 fi if [[ -n $cell_value && -n $node_value ]]; then if [[ "$header" == "TRUE" ]]; then printf "#Cell Node\n" printf "#---------------------------------------------------------------------\n" #printf " 1 2 3 4 5 6 7\n" #printf "1234567890123456789012345678901234567890123456789012345678901234567890\n" header="FALSE" fi found="TRUE" printf "%-35s %s\n" "$cell_value" "$node_value" fi done # no resources are configured ... if [[ "$found" != "TRUE" ]]; then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 160 "WARNING: WebSphere Application Server Node PowerHA SystemMirror Resources are not configured.\n" exit 1 fi fi _VERSIO kꖱ#o60םa՝a֝a&62vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasnodemon#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasnodemon.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)15 1.3 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasnodemon.sh, hacmp.assist, 61haes_r714 4/25/06 13:47:59 ################################################################### ## ## NAME: cl_wasnodemon.sh ## ## DESCRIPTION: ## Used to monitor a Websphere Application Server instance. ## Websphere is monitored by calling into the "serverStatus.sh" shell ## script provided by Websphere. The following is an example of what ## this script will return if Websphere is healthy: ## ## ./serverStatus.sh server1 ## root@eenie/usr/WebSphere/AppServer1/bin> ./serverStatus.sh server1 ## ADMU0116I: Tool information is being logged in file ## /usr/WebSphere/AppServer1/logs/server1/serverStatus.log ## ADMU0500I: Retrieving server status for server1 ## ADMU0508I: The Application Server "server1" is STARTED ## ## This script sill look for the regular expression ## "The Application Server * is STARTED" ## Failure to detect this string will assume the worst and return the ## a failure status. If the string is detected, then a zero is returned ## This script must return one of the following values: ## 0: If the application is healthy ## 1: If the application is dead or otherwise unhealthy ## ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all HACMP functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/was:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos } export ODMDIR [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 # Exit Status codes EXIT_NOTCHECKED=2 EXIT_DEAD=1 EXIT_HEALTHY=0 # Get the component key APPLICATION_NAME=$1 if [[ -z $APPLICATION_NAME ]]; then KLIB_WAS_log_message "WAS ERROR: Please specify the Application ID." STATUS=$EXIT_NOTCHECKED exit $STATUS fi typeset INSTALL_PATH set -a eval $(clquerysaapp -a $APPLICATION_NAME INSTALL_PATH) set +a typeset PROFILE_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME PROFILE_NAME) set +a typeset WAS_SERVER_NAME set -a eval $(clquerysaapp -a $APPLICATION_NAME WAS_SERVER_NAME) set +a if [[ -z $INSTALL_PATH || -z $WAS_SERVER_NAME ]]; then KLIB_WAS_log_message "WAS ERROR: No Metadata information Found." STATUS=$EXIT_NOTCHECKED exit $STATUS fi WAS_SCRIPT="$INSTALL_PATH/bin/serverStatus.sh -profileName $PROFILE_NAME $WAS_SERVER_NAME" STATUS=$EXIT_HEALTHY KLIB_WAS_log_message "WAS INFO: Checking the status of the WebSphere Application Server..." KLIB_WAS_log_message "WAS INFO: Calling script: $WAS_SCRIPT $WAS_SERVER_NAME" # check the status of the WebSphere Application Server if [[ -n $($WAS_SCRIPT | grep "The Application Server \"$WAS_SERVER_NAME\" is STARTED") ]] ; then KLIB_WAS_log_message "WAS INFO: Websphere Application Server is healthy." else KLIB_WAS_log_message "WAS ERROR: Websphere Application Server is not healthy." STATUS=$EXIT_DEAD fi exit $STATUS  k/dev/null |read PSUSER WAS_PID RESTPS [ -n $WAS_PID ] && kill -9 $WAS_PID else WAS_SCRIPT_SERVER="$INSTALL_PATH/bin/stopServer.sh -profileName $PROFILE_NAME $WAS_SERVER_NAME" KLIB_WAS_log_message "WAS INFO: Stop WebSphere Application Server by calling $WAS_SCRIPT_SERVER" # Stop the WebSphere Application Server $WAS_SCRIPT_SERVER fi else # error KLIB_WAS_log_message "WAS ERROR: No Metadata information Found." exit 1 fi exit 0 ame $ kr#o 0םa՝a֝a& 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasconfigihsuster#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasconfigihs.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)36 1.1 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasconfigihs.sh, hacmp.assist, 61haes_r714 4/6/05 13:06:23 ################################################################### ## ## NAME: cl_wasconfigihs ## ## DESCRIPTION: ## Modify the LISTEN directive in the httpd.conf file. This ## utility will varyon the volume group and mount the file ## system if necessary to gain access to the httpd.conf file. ## It will also stop the HTTP server by calling "apachectl stop" ## and will leave it in a stopped state. ## ## This utility is meant to be called remotely from ## cl_wasimport and execute on the node where the IBM Http ## Server was originally installed. ## ## ARGUMENTS: ## Volume Group ## Install Path ## New Listen Directive ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_WAS_log_message ## KLIB_WAS_ch_httpd_directive ## ################################################################### ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the message catalog entries #. /usr/es/sbin/cluster/sa/db2/cat/cl_db2discovery # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset vg=$1 typeset install_path=$2 typeset new_value=$3 typeset HTTPD_CONF="${install_path}/conf/httpd.conf" KLIB_WAS_log_message "WAS INFO: Modifying LISTEN directive in $HTTPD_CONF" # Make sure the VG is varied on and the file system is mounted KLIB_AIX_mount_fs_for_directory $vg $install_path if (( $? != 0 )) ; then KLIB_WAS_log_message "WAS ERROR: Could not mount the file system for the directory ${install_path}" exit 1 fi #Make sure the IBM Http Server is stopped. typeset stop_script="${install_path}/bin/apachectl stop" KLIB_WAS_log_message "WAS INFO: Stopping IBM Http Server ($stop_script)." $stop_script > /dev/null if (( $? != 0 )) ; then KLIB_WAS_log_message "WAS ERROR: Failed stopping IBM Http Server." exit 1 fi KLIB_WAS_log_message "WAS INFO: Setting LISTEN directive." KLIB_WAS_ch_httpd_directive $HTTPD_CONF "Listen" $new_value typeset ch_count=$? KLIB_WAS_log_message "WAS INFO: Changed $ch_count LISTEN directives in $HTTPD_CONF" exit 0 rm k#o 0םaY՝a֝a& 2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasserverconfig.jaclonfig# @(#)94 1.1 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasserverconfig.jacl, hacmp.assist, 61haes_r714 4/7/05 16:03:04 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasserverconfig.jacl 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG ################################################################### ## ## NAME: cl_wasserverconfig ## ## DESCRIPTION: ## This is a JACL script that modifies the End Point hosts for ## a specified WebSphere Application Server. If a list of End ## Point names is given, only those will be changed. ## ## This script is meant to be called from ## cl_wasconfigserv. ## ## ARGUMENTS: ## WebSphere Cell Name ## WebSphere Node Name ## WebSphere Server Name ## Host Name ## End Point Names (optional) ## ## OUTPUT: ## Colon seperated list of the old values. Information ## includes: ## ## Cell Name ## Node Name ## Server Name ## ## Each line is prepended with "SA_WAS:". This is needed ## because wsadmin.sh always outputs other lines that need ## to be ignored. ## ## EXIT CODES: ## None ## ################################################################### proc serverconfig {cellname nodename servername endpoint_host endpoint_names} { global AdminControl global AdminConfig set endpoint_list [split $endpoint_names] set nodeid [$AdminConfig getid /Cell:$cellname/Node:$nodename] set servers [$AdminConfig list ServerEntry $nodeid] foreach server $servers { set sname [$AdminConfig showAttribute $server serverName] if {$servername == [$AdminConfig showAttribute $server serverName]} { set specialendpointlist [$AdminConfig showAttribute $server specialEndpoints] set specialendpoints [lindex $specialendpointlist 0] foreach specialendpoint $specialendpoints { set ename [$AdminConfig showAttribute $specialendpoint endPointName] set endpoint [$AdminConfig showAttribute $specialendpoint endPoint] set host [$AdminConfig showAttribute $endpoint host] set port [$AdminConfig showAttribute $endpoint port] if { ([llength $endpoint_list] == 0) || ([lsearch $endpoint_list $ename] != -1) } { puts "SA_WAS:$cellname:$nodename:$servername:$ename:$host:$port" $AdminConfig modify $endpoint [subst {{host {$endpoint_host}}}] } } } } # Save chanes $AdminConfig save #Synchronization is not always possible. If it fails, it can be ignored. catch { set Sync1 [$AdminControl completeObjectName type=NodeSync,node=$nodename,*] $AdminControl invoke $Sync1 sync } } if {!($argc == 4) && !($argc == 5)} { puts "SA_WAS:serverconfig: this script requires 4 or 5 parameters: $argc" } else { set cellname [lindex $argv 0] set nodename [lindex $argv 1] set servername [lindex $argv 2] set endpoint_host [lindex $argv 3] set endpoint_names "" if {$argc == 5} { set endpoint_names [lindex $argv 4] } serverconfig $cellname $nodename $servername $endpoint_host $endpoint_names } t k#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasconfigserverjac#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasconfigserver.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)95 1.1 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasconfigserver.sh, hacmp.assist, 61haes_r714 4/7/05 16:06:02 ################################################################### ## ## NAME: cl_wasconfigserv ## ## DESCRIPTION: ## Modify the End Point hosts for a given WebSphere Application ## Server. This utility will varyon the volume group and mount ## the file system if necessary to gain access to the ## httpd.conf file. It will also stop the App. Server by ## calling the WebSphere utility "stopServer servername" and ## will leave it in a stopped state. ## ## To make the change, the WebSphere utility "wsadmin.sh" ## will be used. ## ## This utility is meant to be called remotely from ## cl_wasimport and execute on the node where the App. Server ## was originally installed. ## ## ARGUMENTS: ## Volume Group ## Install Path ## Profile Name ## WebSphere Application Cell ## WebSphere Application Node ## WebSphere Application Server ## New End Point Host ## End Point Name List (optional) ## ## OUTPUT: ## None ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_WAS_log_message ## ################################################################### ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Read in the message catalog entries #. /usr/es/sbin/cluster/sa/db2/cat/cl_db2discovery # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/hacmp:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/:$FLIB/db2/vg umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/ [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset vg=$1 typeset install_path=$2 typeset profile=$3 typeset was_cell=$4 typeset was_node=$5 typeset app_server=$6 typeset endpoint_host=$7 typeset endpoint_names=$8 KLIB_WAS_log_message "WAS INFO: Modifying End Point host for Cell ($cell_name) Node ($was_node) App Server ($app_server)." # Make sure the VG is varied on and the file system is mounted KLIB_AIX_mount_fs_for_directory $vg $install_path if (( $? != 0 )) ; then KLIB_WAS_log_message "WAS ERROR: Could not mount the file system for the directory ${install_path}" exit 1 fi #Make sure the IBM Http Server is stopped. typeset stop_script="${install_path}/bin/stopServer.sh" if [[ ! -x "$stop_script" ]] ; then KLIB_WAS_log_message "WAS ERROR: $stop_script not found or not executable" exit 1 fi KLIB_WAS_log_message "WAS INFO: Stopping Application Server ($stop_script)." $stop_script $app_server -profileName $profile > /dev/null if (( $? != 0 && $? != 246)) ; then KLIB_WAS_log_message "WAS ERROR: Failed stopping Application Server." exit 1 fi # Look for wsadmin.sh typeset wsadmin_path="$install_path/bin/wsadmin.sh" if [[ ! -x "$wsadmin_path" ]] ; then KLIB_WAS_log_message "WAS ERROR: $wsadmin_path not found or not executable" exit 1 fi KLIB_WAS_log_message "WAS INFO: Setting End Point hosts." # Call a JACL script to get configuration information about the profile. $wsadmin_path -profileName $profile -conntype NONE -f $WASSA_SBIN_DIR/cl_wasserverconfig.jacl $was_cell $was_node $app_server $endpoint_host "\"${endpoint_names}\"" | while read line; do KLIB_WAS_log_message "WAS INFO: cl_wasserverconfig.jacl output - $line" if [[ ${line/SA_WAS:*/found} == "found" ]] ; then info=${line//SA_WAS:/} echo "was:$info" fi done exit 0  k #ov"0םa՝a֝a&v"2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasimporttdserjac#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasimporttds.sh 1.7 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)72 1.7 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasimporttds.sh, hacmp.assist, 61haes_r714 5/16/06 20:28:19 ############################################################################## ## ## NAME: cl_wasimporttds ## ## DESCRIPTION: ## This command is a wrapper around the Smart Assistant 5.2 ## commands that creates an HACMP configuration for a Tivoli ## Directory Server. ## ## SYNTAX: ## cl_wasimporttds -a -n takeovernodes -l serviceip -w tds_password -p tds_port -i dbinstance ## cl_wasimporttds -r ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_SA_add_metadata ## KLIB_SA_delete_by_key_type_metadata ## ############################################################################### ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ function usage { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u # message number needs to be changed. dspmsg -s $IMPORT_MSGSET $WASSACAT 700 "Usage:\ncl_wasimporttds -a -n takeovernode -l serviceip -w tds_password\n\ -p tds_port -i dbinstance \n\n\ cl_wasimporttds -r \n" exit 1 } ################################################################################ # Name: AddResources # # Entries related to Tivoli Directory Server will be added # to the HACMPsa_metadata ODM. # # Syntax: # AddResources # # Arguments: None # # Global Variables: None # # Returns: # 0 on SUCCESS # 1 on FAILURE # ################################################################################ AddResources() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x claddsaapp -a "$APPLICATION_ID" SMARTASSIST_ID='WAS_6.0' COMPONENT_ID="$COMPONENT_ID" APPLICATION_NAME="$appname" if (( $? != 0 )); then dspmsg -s $CONF_MSGSET $WASSACAT 390 "ERROR: Failed adding %1\$s %2\$s to the HACMPsa_metadata ODM.\n" "APPLICATION_NAME" "$appname" return 1 fi claddsaapp -a "$APPLICATION_ID" TDS_TAKEOVER_NODE_NAME="$takeovernode" if (( $? != 0 )); then dspmsg -s $CONF_MSGSET $WASSACAT 390 "ERROR: Failed adding %1\$s %2\$s to the HACMPsa_metadata ODM.\n" "TDS_TAKEOVER_NODE_NAME" "$takeovernode" return 1 fi claddsaapp -a $APPLICATION_ID TDS_SERVICE_LABEL="${serviceip}" if (( $? != 0 )); then dspmsg -s $CONF_MSGSET $WASSACAT 390 "ERROR: Failed adding %1\$s %2\$s to the HACMPsa_metadata ODM.\n" "TDS_SERVICE_LABEL" "$serviceip" return 1 fi } ################################################################################ # Name: RemoveResources # # Entries related to Tivoli Directory Server will be removed from the # HACMPsa_metadata ODM. # # Syntax: # RemoveResources # # Arguments: None # # Global Variables: None # # Returns: # 0 on SUCCESS # 1 on FAILURE # ################################################################################# RemoveResources() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x clrmsaapp -a ${appname} return $? } ########## # MAIN ########## # Read in the message catalog entries # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSACAT="wassa.cat" CONF_MSGSET=7 IMPORT_MSGSET=8 WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" HAWS_HOME="/usr/es/sbin/cluster/haws" HAWS_SBIN_DIR="$HAWS_HOME/sbin" HAWS_SCRIPTS_DIR="$HAWS_HOME/scripts" # Get the arguments. if set -- $(getopt A:n:l:w:p:i:ardu $* 2>&1); then while [ $# != 0 ]; do case "$1" in -A) appname=$2 shift ;; -n) takeovernode=$2 shift ;; -l) serviceip=$2 shift ;; -w) tds_password=$2 shift ;; -p) tds_port=$2 shift ;; -i) dbinstance=$2 shift ;; -a) action="add" ;; -r) action="remove" ;; -u) action="update" ;; -d) action="deleteonly" ;; --) shift break ;; esac shift done fi HOSTNAME=$(hostname) COMPONENT_ID="WAS_6.0_TIVOLI_LDAP" APPLICATION_ID="WAS_TDS_$HOSTNAME" #Call the Smart Assist 5.2 commands #Check the Action argument. if [[ -z $action ]]; then usage exit 1 fi # Configuring Tivoli Directory Server if [[ "$action" == "add" || "$action" == "update" ]]; then #Check all the arguments are specified. if [[ -z $takeovernode || -z $serviceip || -z $tds_password || -z $tds_port || -z $dbinstance ]] ; then usage exit 1 fi # If updating remove old stuff. if [[ "$action" == "update" ]]; then #Check all the arguments are specified. if [[ -z $appname ]] ; then usage exit 1 fi # Remove old HACMP resources /usr/es/sbin/cluster/sa/sbin/clrmrgs -a "$appname" # Remove HACMPsa_metadata odm entries. If this fails, attempt the add anyway. RemoveResources # Remove the entries created for configuring Tivoli Directory Server $HAWS_SCRIPTS_DIR"/"tds_import_delete if (( $? != 0 )) then exit 1 fi fi $HAWS_SBIN_DIR"/"clhaws_import -s tds -n "$takeovernode" -l "$serviceip" -w "$tds_password" -p "$tds_port" -i "$dbinstance" > /dev/null 2>&1 if (( $? != 0 )) then dspmsg -s $IMPORT_MSGSET $WASSACAT 710 "ERROR: Failed to create import scripts.\n" exit 1 fi # run the created import script $HAWS_SCRIPTS_DIR"/"tds_import_create rc=$? if (( $rc != 0 )) then if (( $rc == 2 )) then dspmsg -s $CONF_MSGSET $WASSACAT 99999 "ERROR: Already existing resources found. No changes made.\n" exit 1 fi dspmsg -s $CONF_MSGSET $WASSACAT 999 "ERROR: Import Failed. Removing all added entries.\n" # In case of error, remove all the added entries $HAWS_SCRIPTS_DIR"/"tds_import_delete exit 1 fi # Add the metadata resources AddResources if (( $? != 0 )) then dspmsg -s $CONF_MSGSET $WASSACAT 410 "ERROR: Failed updating HACMPsa_metadata ODM.\n" dspmsg -s $CONF_MSGSET $WASSACAT 99999 "ERROR: Import Failed. Removing all added entries.\n" # remove all the added entries. $HAWS_SCRIPTS_DIR"/"tds_import_delete RemoveResources > /dev/null 2>&1 if (( $? != 0 )) then dspmsg -s $CONF_MSGSET $WASSACAT 410 "ERROR: Failed updating HACMPsa_metadata ODM.\n" exit 1 fi fi # UnConfiguring Tivoli Directory Server elif [[ "$action" == "remove" ]]; then # Remove the entries created for configuring Tivoli Directory Server $HAWS_SCRIPTS_DIR"/"tds_import_delete if (( $? != 0 )) then exit 1 fi # Remove the entries created in Metadata odm for configuring Tivoli Directory Server RemoveResources > /dev/null 2>&1 if (( $? != 0 )) then dspmsg -s $CONF_MSGSET $WASSACAT 410 "ERROR: Failed updating HACMPsa_metadata ODM.\n" exit 1 fi elif [[ "$action" == "deleteonly" ]]; then # Remove the entries created for configuring Tivoli Directory Server $HAWS_SCRIPTS_DIR"/"tds_import_delete if (( $? != 0 )) then exit 1 fi fi exit 0  kV#o40םa՝a֝a&42vT./usr/es/sbin/cluster/sa/was/sbin/cl_wasgettdsd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgettds.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)93 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wasgettds.sh, hacmp.assist, 61haes_r714 11/28/11 14:59:05 ############################################################################### ## ## NAME: cl_wasgettds ## ## DESCRIPTION: ## This retrieves the information regarding existing ## Tivoli Directory Server HACMP resources ## when called with -n option it retrieves only primary node. ## when called with -o option it retrieves all the information. ## ## SYNTAX: ## cl_wasgettds -n ## cl_wasgettds -o ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_SA_get_metadata ## ## ############################################################################### ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ usage() { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u dspmsg -s $KLIB_MSGSET $WASSACAT 650 "Usage:\ncl_wasgettds [-o | -n]\n" exit 1 } # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 typeset _SHPATH=/usr/es/sbin/cluster/sa/sbin/ . $_SHPATH/saapp_common PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" HAWS_HOME="/usr/es/sbin/cluster/haws" KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 #Get the arguments if set -- $(getopt A:no $* 2>&1); then while [ $# != 0 ]; do case "$1" in -A) APPLICATION_NAME=$2 shift ;; -n) USEHACMPODM="FALSE" ;; -o) USEHACMPODM="TRUE" ;; --) shift break ;; esac shift done fi if [[ -z $USEHACMPODM ]]; then usage fi # primary node is where TDS is running typeset primary=`hostname` # Get the primary node only if [[ "$USEHACMPODM" == "FALSE" ]]; then # Default Application Id typeset appid="WAS_TDS_"$primary echo "#applicationname:primary" echo "$appid:$primary" exit 0 fi # Get the information from metadata odm for the specified cell and websphere node. if [[ "$USEHACMPODM" == "TRUE" ]]; then typeset TDS_TAKEOVER_NODE_NAME typeset TDS_SERVICE_LABEL set -a eval $(clquerysaapp -a $APPLICATION_NAME TDS_TAKEOVER_NODE_NAME) eval $(clquerysaapp -a $APPLICATION_NAME TDS_SERVICE_LABEL) set +a if [[ -z $TDS_TAKEOVER_NODE_NAME || -z $TDS_SERVICE_LABEL ]] ; then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 660 "WARNING: Tivoli Directory Server PowerHA SystemMirror Resources are not configured.\n" exit 1 fi # Get tds information from the config file config_file="$HAWS_HOME/config/HAWS_CFG_tds_$primary.cfg" if [[ -f $config_file ]]; then . $config_file else #errr: config file doesn't exist. dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 670 "ERROR: Config file %s for Tivoli Directory Server does not exist.\n" $config_file exit 1 fi echo "#applicationname:primary:secondary:serviceip:tdspassword:tdsport:tdsdbinstance" echo "$APPLICATION_NAME:$primary:$TDS_TAKEOVER_NODE_NAME:$TDS_SERVICE_LABEL::$TDS_PORT:$TDS_DB_USER" exit 0 fi n au k[#oa0םa՝a֝a&a2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wascollecttransportonfig#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wascollecttransport.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)61 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wascollecttransport.sh, hacmp.assist, 61haes_r714 4/25/06 13:47:42 ################################################################### ## ## NAME: cl_wascollecttransport ## ## DESCRIPTION: ## This script is used by clverify to gather the transport ## host information for each accessible WebSphere component ## on the local node. The WebSphere Components are ## determined by examining the HACMPsa_metadata ODM. ## ## The component home directory must be mounted at the time ## the script is executed. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Column separated list which includes: ## component_id ## app_id ## transport host ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_SA_get_key_by_type_metadata ## KLIB_SA_get_metadata ## KLIB_WAS_get_ihs_listen_host ## ################################################################### ########## # MAIN ########## # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/sa:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/ umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/:/usr/es/sbin/cluster/sa/sbin [[ "$VERBOSE_LOGGING" == "high" ]] && set -x ODMDIR=$CLVERIFY_DCD # ODM classes from verifying node WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset component_id="" typeset app_ids="" typeset app_id="" # The component_ids WEBSPHERE_NODE and WEBSPHERE_DM are similar, so use the same code. for component_id in "WAS_6.0_APP_SERVER" "WAS_6.0_DEPLOYMENT_MANAGER"; do app_ids=$(KLIB_SA_get_key_by_type_metadata "$component_id") for app_id in $app_ids ; do typeset PROFILE_NAME="" set -a eval $(clquerysaapp -a $app_id PROFILE_NAME) set +a typeset INSTALL_PATH="" set -a eval $(clquerysaapp -a $app_id INSTALL_PATH) set +a typeset WAS_NODE_NAME="" set -a eval $(clquerysaapp -a $app_id WAS_NODE_NAME) set +a # Is the wsadmin.sh untility available wsadmin_path="$INSTALL_PATH/bin/wsadmin.sh" if [[ ! -x "$wsadmin_path" ]] ; then continue fi # Call a JACL script to get configuration information about the profile. $wsadmin_path -profileName $PROFILE_NAME -conntype NONE -f $WASSA_SBIN_DIR/cl_wasserverdisc.jacl $WAS_NODE_NAME | while read line; do if [[ ${line/SA_WAS:*/found} == "found" ]] ; then host=$(echo $line | cut -f 5 -d':') echo "$component_id:$app_id:$host" fi done done done # Look for WEBSPHERE_IHS component_id. component_id="WAS_6.0_IHS_SERVER" app_ids=$(KLIB_SA_get_key_by_type_metadata "$component_id") for app_id in $app_ids ; do typeset INSTALL_PATH="" set -a eval $(clquerysaapp -a $app_id INSTALL_PATH) set +a host=$(KLIB_WAS_get_ihs_listen_host "$INSTALL_PATH") # If host is not NULL, the install_path was reachable. if [[ -n $host ]] ; then echo "$component_id:$app_id:$host" fi done  k(#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wascollectclusnodesonfig#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wascollectclusnodes.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)94 1.4 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wascollectclusnodes.sh, hacmp.assist, 61haes_r714 5/5/06 08:22:52 ################################################################### ## ## NAME: cl_wascollectclusnodes.sh ## ## DESCRIPTION: ## This script is used by clverify to gather the nodes that ## host the members of a WebSphere Cluster managed by HACMP. ## The WebSphere Components are determined by examining the ## HACMPsa_metadata ODM. ## ## The Deployment Manager home directory must be mounted at ## the time the script is executed. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Column separated list which includes: ## sa_type (WEBSPHERE_CLUS) ## sa_key ## hosting node ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_SA_get_key_by_type_metadata ## KLIB_SA_get_metadata ## KLIB_WAS_get_ihs_listen_host ## ################################################################### ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/sa:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/ umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/:/usr/es/sbin/cluster/sa/sbin [[ "$VERBOSE_LOGGING" == "high" ]] && set -x ODMDIR=$CLVERIFY_DCD # ODM classes from verifying node WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset sa_type="WAS_6.0_TRANSACTION_LOG_RECOVERY" typeset -A INSTALL_PATH_ARRAY typeset -A INSTALL_NODE_NAMES app_ids=$(KLIB_SA_get_key_by_type_metadata "$sa_type") for app_id in $app_ids ; do typeset PROFILE_NAME="" set -a eval $(clquerysaapp -a $app_id PROFILE_NAME) set +a typeset INSTALL_PATH="" set -a eval $(clquerysaapp -a $app_id INSTALL_PATH) set +a # Have the clusters from this install path been collected? If so, ignore it. if [[ -n ${INSTALL_PATH_ARRAY[$INSTALL_PATH]} ]] ; then continue fi INSTALL_PATH_ARRAY[$INSTALL_PATH]=$PROFILE_NAME # Is the wsadmin.sh untility available wsadmin_path="$INSTALL_PATH/bin/wsadmin.sh" if [[ ! -x "$wsadmin_path" ]] ; then continue fi # Call a JACL script to get configuration information about the profile. $wsadmin_path -profileName $PROFILE_NAME -conntype NONE -f $WASSA_SBIN_DIR/cl_wasclusterdisc.jacl | while read line; do if [[ ${line/SA_WAS:*/found} == "found" ]] ; then cell=$(echo $line | cut -f 3 -d':') cluster=$(echo $line | cut -f 2 -d':') hostname=$(echo $line | cut -f 6 -d':') clusterkey="WAS_CLUS_${cell}_${cluster}" # Only collect unique nodes if [[ -z $(echo ${INSTALL_NODE_NAMES[$clusterkey]} | grep -w $hostname) ]] ; then INSTALL_NODE_NAMES[$clusterkey]="${INSTALL_NODE_NAMES[$clusterkey]} $hostname" fi fi done done # Print the information for clusterkey in ${!INSTALL_NODE_NAMES[@]} ; do typeset -L nodes=${INSTALL_NODE_NAMES[$clusterkey]} echo "$sa_type:$clusterkey:$nodes" done  k@#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_wascollecttranslog#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wascollecttranslog.sh 1.5 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005,2006 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)95 1.5 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_wascollecttranslog.sh, hacmp.assist, 61haes_r714 5/5/06 08:22:53 ################################################################### ## ## NAME: cl_wascollecttranslog.sh ## ## DESCRIPTION: ## This script is used by clverify to gather the transaction ## log directories of the members of a WebSphere Cluster ## managed by HACMP. The WebSphere Components are determined ## by examining the HACMPsa_metadata ODM. ## ## The Deployment Manager home directory must be mounted at ## the time the script is executed. ## ## ARGUMENTS: ## None ## ## OUTPUT: ## Column separated list which includes: ## sa_type (WEBSPHERE_CLUS_MEM) ## app_id ## transaction log directory ## ## EXIT CODES: ## None ## ## KLIB Functions: ## KLIB_SA_get_key_by_type_metadata ## KLIB_SA_get_metadata ## ################################################################### ########## # MAIN ########## # Read in the db2 definitions #. /usr/es/sbin/cluster/sa/db2/etc/db2_definitions # Load the common klib functions, abort, logmsg, dbgmsg, etc. . /usr/es/lib/ksh93/common_functions.ksh93 # Set the FPATH for all DB2 / HACMP functions FLIB=/usr/es/lib/ksh93 FPATH=$FLIB/utils:$FLIB/sa:$FLIB/was:$FLIB/util:$FLIB/util/list:$FLIB/aix/:$FLIB/aix/odm/ umask -S u=rw,g=,o= PATH=$PATH:/usr/es/sbin/cluster/utilities:/usr/es/sbin/cluster/sa/was/sbin/:/usr/es/sbin/cluster/sa/sbin ODMDIR=$CLVERIFY_DCD # ODM classes from verifying node WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_SBIN_DIR="$WASSA_HOME/sbin" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wassa.log KLIB_HACMPLOG_ENTRY=wassa.log KLIB_OUTPUT_CONSOLE=false typeset sa_type="" typeset app_ids="" typeset app_id="" typeset profile_name="" typeset install_path="" typeset -A INSTALL_PATH_ARRAY typeset -A INSTALL_NODE_NAMES sa_type_memeber="WEBSPHERE_CLUS_MEM" app_ids=$(KLIB_SA_get_key_by_type_metadata "WAS_6.0_TRANSACTION_LOG_RECOVERY") for app_id in $app_ids ; do typeset PROFILE_NAME="" set -a eval $(clquerysaapp -a $app_id PROFILE_NAME) set +a typeset INSTALL_PATH="" set -a eval $(clquerysaapp -a $app_id INSTALL_PATH) set +a # Have the clusters from this install path been collected? If so, ignore it. if [[ -n ${INSTALL_PATH_ARRAY[$INSTALL_PATH]} ]] ; then continue fi INSTALL_PATH_ARRAY[$INSTALL_PATH]=$PROFILE_NAME # Is the wsadmin.sh untility available wsadmin_path="$INSTALL_PATH/bin/wsadmin.sh" if [[ ! -x "$wsadmin_path" ]] ; then continue fi # Call a JACL script to get configuration information about the profile. $wsadmin_path -profileName $PROFILE_NAME -conntype NONE -f $WASSA_SBIN_DIR/cl_wasclusterdisc.jacl | while read line; do if [[ ${line/SA_WAS:*/found} == "found" ]] ; then cell=$(echo $line | cut -f 3 -d':') cluster=$(echo $line | cut -f 2 -d':') server=$(echo $line | cut -f 5 -d':') translog=$(echo $line | cut -f 7 -d':') clustermemberkey="WAS_CLUSMEM_${cell}_${cluster}_${server}" clusterkey="WAS_CLUS_${cell}_${cluster}" echo "$sa_type_memeber:$clustermemberkey:$clusterkey:$translog" fi done done s k#o0םa՝a֝a&2vT./usr/es/sbin/cluster/sa/was/sbin/cl_waslsvgctt#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsvg.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)55 1.1 src/43haes/usr/sbin/cluster/sa/was/sbin/cl_waslsvg.sh, hacmp.assist, 61haes_r714 4/12/05 10:03:03 ################################################################### ## ## NAME: cl_waslsdm ## ## DESCRIPTION: ## List shared volume groups availble for transaction log recovery. ## ## SYNTAX: ## cl_waslsvg ## ## OUTPUT: ## List of shared volume groups not already in a resource group ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_HACMP_are_pvids_shared ## ################################################################### ########## # MAIN ########## # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin: FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x WASSA_HOME="/usr/es/sbin/cluster/sa/was" WASSA_ETC_PATH="$WASSA_HOME/etc" WASSA_SBIN_DIR="$WASSA_HOME/sbin" WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc" KLIB_MSGCATALOG="wassa.cat" KLIB_MSGSET=7 # Use the discovered list of volume groups. CONF_DIR="/usr/es/sbin/cluster/etc/config" all_vgs=$(cut -d: -f 4 "$CONF_DIR/clvg_config" | sort | uniq) for vg in $all_vgs; do pvids=$(awk -F: -v VG=$vg '$4 == VG && $3 != "none" {print $3}' "$CONF_DIR/clvg_config") # Make sure pvids are shared on more than one node. KLIB_HACMP_are_pvids_shared "$pvids" if (( $? == 0 )) ; then # Make sure the volume group is not used by the cluster. if [[ -z $(odmget -q "name=VOLUME_GROUP and value=$vg" HACMPresource) ]] ; then echo $vg fi fi done exit 0 et k #oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/was/config_wasAA k$of0םaY՝a֝a&f2vT./usr/es/sbin/cluster/sa/was/config/was_config.xmlslog haapp08 ri k $o(0םaY՝a֝a&(2vT./usr/es/sbin/cluster/sa/was/config/was_config.xsdslog ent ks$oABםaBםa֝a&2vT./usr/es/es/sbin/cluster/sa/tdsAA k2$oABםaBםa֝a&2vT./usr/es/es/sbin/cluster/sa/tds/sbinas_AA kP_$oABםaBםa֝a&2vT./usr/es/es/sbin/cluster/sa/tds/config_AA kx$oABםaBםa֝a&2vT./usr/es/es/sbin/cluster/sa/tds/scriptsAA kw$odv/םa֝a֝a&v2vT./usr/es/sbin/cluster/sa/tds/sbin/cl_gettdsig.xdd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tds/sbin/cl_gettds.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)45 1.1 src/43haes/usr/sbin/cluster/sa/tds/sbin/cl_gettds.sh, hacmp, 61haes_r714 11/28/11 14:59:04 ############################################################################### ## ## NAME: cl_gettds ## ## DESCRIPTION: ## This retrieves the information regarding existing ## Tivoli Directory Server HACMP resources ## when called with -n option it retrieves only primary node. ## when called with -o option it retrieves all the information. ## ## SYNTAX: ## cl_gettds -n ## cl_gettds -o ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_SA_get_metadata ## ## ############################################################################### ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ usage() { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 650 "Usage:\ncl_gettds [-o | -n]\n" exit 1 } # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 typeset _SHPATH=/usr/es/sbin/cluster/sa/sbin/ . $_SHPATH/saapp_common PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x TDSSA_HOME="/usr/es/sbin/cluster/sa/tds" TDSSA_ETC_PATH="$TDSSA_HOME/etc" TDSSA_SBIN_DIR="$TDSSA_HOME/sbin" HAWS_HOME="/usr/es/sbin/cluster/sa/tds" HAWS_HOME="/usr/es/sbin/cluster/sa/tds" TMPFILE=$HAWS_HOME"/tds_config_type" TDS_CONFIG_TYPE=`cat $TMPFILE` KLIB_MSGCATALOG="tdssa.cat" KLIB_MSGSET=7 #Get the arguments if set -- $(getopt A:no $* 2>&1); then while [ $# != 0 ]; do case "$1" in -A) APPLICATION_NAME=$2 shift ;; -n) USEHACMPODM="FALSE" ;; -o) USEHACMPODM="TRUE" ;; --) shift break ;; esac shift done fi if [[ -z $USEHACMPODM ]]; then usage fi # primary node is where TDS is running typeset primary=`get_local_nodename` # Get the primary node only if [[ "$USEHACMPODM" == "FALSE" ]]; then # Default Application Id typeset appid="TDS_"$primary echo "#applicationname:primary" echo "$appid:$primary" exit 0 fi echo `clquerysaapp -a $APPLICATION_NAME "TDS_INSTANCE_NAME"` | cut -d'=' -f2 | read instance # Get the information from metadata odm for the specified cell and websphere node. if [[ "$USEHACMPODM" == "TRUE" ]]; then if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then # Get tds information from the config file config_file="$HAWS_HOME/config/HAWS_CFG_tds_$instance.cfg" if [[ -f $config_file ]]; then . $config_file else #errr: config file doesn't exist. dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 670 "ERROR: Config file %s for Tivoli Directory Server does not exist.\n" $config_file exit 1 fi echo "#applicationname:primary:num_instances" echo "$APPLICATION_NAME:$primary:$NUM_INSTANCES" else typeset TDS_TAKEOVER_NODE_NAME typeset TDS_SERVICE_LABEL set -a eval $(clquerysaapp -a $APPLICATION_NAME TDS_TAKEOVER_NODE_NAME) eval $(clquerysaapp -a $APPLICATION_NAME TDS_SERVICE_LABEL) set +a if [[ -z $TDS_TAKEOVER_NODE_NAME || -z $TDS_SERVICE_LABEL ]] ; then dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 660 "WARNING: Tivoli Directory Server PowerHA SystemMirror Resources are not configured.\n" exit 1 fi # Get tds information from the config file config_file="$HAWS_HOME/config/HAWS_CFG_tds_$instance.cfg" if [[ -f $config_file ]]; then . $config_file else #errr: config file doesn't exist. dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 670 "ERROR: Config file %s for Tivoli Directory Server does not exist.\n" $config_file exit 1 fi echo "#applicationname:primary:secondary:serviceip:tdspassword:tdsport:tdsdbinstance:tdsinstance" echo "$APPLICATION_NAME:$primary:$TDS_TAKEOVER_NODE_NAME:$TDS_SERVICE_LABEL::$TDS_PORT:$TDS_DB_USER:$TDS_INSTANCE_NAME" fi # exit 0 fi e. ks$od N/םa֝a֝a& N2vT./usr/es/sbin/cluster/sa/tds/sbin/cl_importtdsxdd#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tds/sbin/cl_importtds.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tds/sbin/cl_importtds.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################## ## ## NAME: cl_importtds ## ## DESCRIPTION: ## This command is a wrapper around the Smart Assistant 5.2 ## commands that creates an HACMP configuration for a Tivoli ## Directory Server. ## ## SYNTAX: ## cl_importtds -a -n takeovernodes -l serviceip -w tds_password -p tds_port -i dbinstance ## cl_importtds -r ## ## EXIT CODES: ## 0 - success ## 1 - failure ## ## KLIB Functions: ## KLIB_SA_add_metadata ## KLIB_SA_delete_by_key_type_metadata ## ############################################################################### ############################################################################### # # Name: usage # # Prints usage message and exits the program. # # Arguments: none # # Returns: does not return # ################################################################################ function usage { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u # message number needs to be changed. dspmsg -s $IMPORT_MSGSET $TDSSACAT 700 "Usage:\ncl_importtds -a -n takeovernode -l serviceip -w tds_password\n\ -p tds_port -i dbinstance \n\n\ cl_importtds -r \n" exit 1 } ################################################################################ # Name: AddResources # # Entries related to Tivoli Directory Server will be added # to the HACMPsa_metadata ODM. # # Syntax: # AddResources # # Arguments: None # # Global Variables: None # # Returns: # 0 on SUCCESS # 1 on FAILURE # ################################################################################ AddResources() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x claddsaapp -a "$APPLICATION_ID" SMARTASSIST_ID='TDS_5.2' COMPONENT_ID="$COMPONENT_ID" APPLICATION_NAME="$appname" if (( $? != 0 )); then dspmsg -s $CONF_MSGSET $TDSSACAT 390 "ERROR: Failed adding %1\$s %2\$s to the HACMPsa_metadata ODM.\n" "APPLICATION_NAME" "$appname" return 1 fi claddsaapp -a "$APPLICATION_ID" TDS_PASSWORD="$tds_password" if (( $? != 0 )); then dspmsg -s $CONF_MSGSET $TDSSACAT 390 "ERROR: Failed adding %1\$s %2\$s to the HACMPsa_metadata ODM.\n" "TDS_PASSWORD" "$tds_password" return 1 fi if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then claddsaapp -a "$APPLICATION_ID" NUM_INSTANCES="$num_instances" if (( $? != 0 )); then dspmsg -s $CONF_MSGSET $TDSSACAT 390 "ERROR: Failed adding %1\$s %2\$s to the HACMPsa_metadata ODM.\n" "TDS_TAKEOVER_NODE_NAME" "$takeovernode" return 1 fi maxnum=`echo ${#instanceList[*]}` let maxnum=${maxnum}+1 i=1; while [[ $i -lt $maxnum ]]; do INSTANCE="INSTANCE"$i claddsaapp -a "$APPLICATION_ID" $INSTANCE="${instanceList[$i]}" INSTANCE_HOME="$INSTANCE""_HOME" claddsaapp -a "$APPLICATION_ID" $INSTANCE_HOME="${instanceHomeList[$i]}" let i=${i}+1 done else claddsaapp -a "$APPLICATION_ID" TDS_TAKEOVER_NODE_NAME="$takeovernode" if (( $? != 0 )); then dspmsg -s $CONF_MSGSET $TDSSACAT 390 "ERROR: Failed adding %1\$s %2\$s to the HACMPsa_metadata ODM.\n" "TDS_TAKEOVER_NODE_NAME" "$takeovernode" return 1 fi claddsaapp -a $APPLICATION_ID TDS_SERVICE_LABEL="${serviceip}" if (( $? != 0 )); then dspmsg -s $CONF_MSGSET $TDSSACAT 390 "ERROR: Failed adding %1\$s %2\$s to the HACMPsa_metadata ODM.\n" "TDS_SERVICE_LABEL" "$serviceip" return 1 fi claddsaapp -a $APPLICATION_ID TDS_SERVICE_LABEL_PREFIX="${prefix}" if (( $? != 0 )); then dspmsg -s $CONF_MSGSET $TDSSACAT 390 "ERROR: Failed adding %1\$s %2\$s to the HACMPsa_metadata ODM.\n" "TDS_SERVICE_LABEL_PREFIX" "$prefix" return 1 fi claddsaapp -a "$APPLICATION_ID" TDS_INSTANCE_NAME="$tds_instance" if (( $? != 0 )); then dspmsg -s $CONF_MSGSET $TDSSACAT 390 "ERROR: Failed adding %1\$s %2\$s to the HACMPsa_metadata ODM.\n" "TDS_INSTANCE_NAME" "$tds_instance" return 1 fi fi } ################################################################################ # Name: RemoveResources # # Entries related to Tivoli Directory Server will be removed from the # HACMPsa_metadata ODM. # # Syntax: # RemoveResources # # Arguments: None # # Global Variables: None # # Returns: # 0 on SUCCESS # 1 on FAILURE # ################################################################################# RemoveResources() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x clrmsaapp -a ${appname} return $? } #---------------------------------------------------------------------------- # # Name: importConfigFromFile # # Description: # This function will read the supplid config file and create HACMP # resources to configure TDS for HA. # # Arguments: # None # # Returns: # 0 - on success # 1 - on failure # importConfigFromFile() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x action="add" primary_node=$(clsaxmlutil -s -x $CONFIG_FILE -m $TDS_MANUAL_CONFIG_SCHEMA -t PrimaryNode) (( $? != 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 4 "Problem in parsing %1$s tag in function %2$s\n" "PrimaryNode" "importConfigFromFile" dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 1 "Problem with XML configuration file. Ensure a valid XML file supplied.\n" exit 1 } primary_node=$(echo $primary_node | cut -d"=" -f2) found=0 for node in `/usr/es/sbin/cluster/utilities/clnodename` do [[ $node == $primary_node ]] && { found=1 } done (( $found == 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 2 "Primary Node %s is not valid in the cluster.\n" $primary_node exit 1 } appname="TDS_"$primary_node pwd=$(clsaxmlutil -s -x $CONFIG_FILE -m $TDS_MANUAL_CONFIG_SCHEMA -t Server_Password) (( $? != 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 4 "Problem in parsing %1$s tag in function %2$s\n" "Server_Password" "importConfigFromFile" dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 1 "Problem with XML configuration file. Ensure a valid XML file supplied.\n" exit 1 } tds_password=$(echo $pwd | cut -d"=" -f2) if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then numinstances=$(clsaxmlutil -s -x $CONFIG_FILE -m $TDS_MANUAL_CONFIG_SCHEMA -t NumInstances) (( $? != 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 4 "Problem in parsing %1$s tag in function %2$s\n" "TakeoverNodes" "importConfigFromFile" dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 1 "Problem with XML configuration file. Ensure a valid XML file supplied.\n" exit 1 } num_instances=$(echo $numinstances | cut -d"=" -f2) else takover_nodes=$(clsaxmlutil -s -x $CONFIG_FILE -m $TDS_MANUAL_CONFIG_SCHEMA -t TakeoverNodes) (( $? != 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 4 "Problem in parsing %1$s tag in function %2$s\n" "TakeoverNodes" "importConfigFromFile" dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 1 "Problem with XML configuration file. Ensure a valid XML file supplied.\n" exit 1 } takover_nodes=$(echo $takover_nodes | cut -d"=" -f2) takeover_nodes=$(echo $takover_nodes | tr ',' ' ') found=1 for tnode in $takeover_nodes do flag=0 for node in `/usr/es/sbin/cluster/utilities/clnodename` do [[ $node == $tnode ]] && { flag=1 } done (( $flag == 0 )) && { found=0 } done (( $found == 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 3 "One of the Takeover node from %s is not valid in the cluster.\n" $takeover_nodes exit 1 } takeovernode=$takover_nodes port=$(clsaxmlutil -s -x $CONFIG_FILE -m $TDS_MANUAL_CONFIG_SCHEMA -t Port_Number) (( $? != 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 4 "Problem in parsing %1$s tag in function %2$s\n" "Port_Number" "importConfigFromFile" dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 1 "Problem with XML configuration file. Ensure a valid XML file supplied.\n" exit 1 } tds_port=$(echo $port | cut -d"=" -f2) inst=$(clsaxmlutil -s -x $CONFIG_FILE -m $TDS_MANUAL_CONFIG_SCHEMA -t DBInstance) (( $? != 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 4 "Problem in parsing %1$s tag in function %2$s\n" "DBInstance" "importConfigFromFile" dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 1 "Problem with XML configuration file. Ensure a valid XML file supplied.\n" exit 1 } dbinstance=$(echo $inst | cut -d"=" -f2) ipaddr=$(clsaxmlutil -s -x $CONFIG_FILE -m $TDS_MANUAL_CONFIG_SCHEMA -t ServiceIP | grep IPAddress_or_name) (( $? != 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 4 "Problem in parsing %1$s tag in function %2$s\n" "ServiceIP\.IPAddress_or_name" "importConfigFromFile" dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 1 "Problem with XML configuration file. Ensure a valid XML file supplied.\n" exit 1 } serviceip=$(echo $ipaddr | cut -d"=" -f2) netmask=$(clsaxmlutil -s -x $CONFIG_FILE -m $TDS_MANUAL_CONFIG_SCHEMA -t ServiceIP | grep Prefix_or_Netmask) (( $? != 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 4 "Problem in parsing %1$s tag in function %2$s\n" "ServiceIP\.Prefix_or_Netmask" "importConfigFromFile" dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 1 "Problem with XML configuration file. Ensure a valid XML file supplied.\n" exit 1 } prefix=$(echo $netmask | cut -d"=" -f2) tdsinstance=$(clsaxmlutil -s -x $CONFIG_FILE -m $TDS_MANUAL_CONFIG_SCHEMA -t TDSInstance) (( $? != 0 )) && { dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 4 "Problem in parsing %1$s tag in function %2$s\n" "DBInstance" "importConfigFromFile" dspmsg -s $MANUAL_CONFIG_SET $TDSSACAT 1 "Problem with XML configuration file. Ensure a valid XML file supplied.\n" exit 1 } tds_instance=$(echo $tdsinstance | cut -d"=" -f2) fi } ########## # MAIN ########## # Read in the message catalog entries # Load the common functions, logmsg, dbgmsg, errmsg, abort . /usr/es/lib/ksh93/common_functions.ksh93 . /usr/es/sbin/cluster/sa/tds/sbin/clhaws_functions umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=/usr/bin:$PATH:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH [[ "$VERBOSE_LOGGING" == "high" ]] && set -x TDSSACAT="tdssa.cat" CONF_MSGSET=7 IMPORT_MSGSET=8 MANUAL_CONFIG_SET=50 TDSSA_HOME="/usr/es/sbin/cluster/sa/tds" TDSSA_ETC_PATH="$TDSSA_HOME/etc" TDSSA_SBIN_DIR="$TDSSA_HOME/sbin" HAWS_HOME="/usr/es/sbin/cluster/sa/tds" HAWS_SBIN_DIR="$HAWS_HOME/sbin" HAWS_SCRIPTS_DIR="$HAWS_HOME/scripts" typeset MANUAL_CONFIG=false #Manual Configuration mode typeset CONFIG_FILE="" typeset TDS_MANUAL_CONFIG_SCHEMA="$TDSSA_HOME/config/tds_config.xsd" typeset primary_node="" HAWS_HOME="/usr/es/sbin/cluster/sa/tds" TMPFILE=$HAWS_HOME"/tds_config_type" TMP_INSTANCE_LIST_FILE=$HAWS_HOME"/instancelist" TDS_CONFIG_TYPE=`cat $TMPFILE` set -A instanceList set -A instanceHomeList #### END #### # Get the arguments. while getopts f:A:n:l:P:w:p:I:i:N:ardu c do case $c in A) appname=$OPTARG ;; n) takeovernode=$OPTARG ;; l) serviceip=$OPTARG ;; P) prefix=$OPTARG ;; w) tds_password=$OPTARG ;; p) tds_port=$OPTARG ;; i) dbinstance=$OPTARG ;; a) action="add" ;; r) action="remove" ;; u) action="update" ;; d) action="deleteonly" ;; f) MANUAL_CONFIG=true CONFIG_FILE=$OPTARG ;; I) num_instances=$OPTARG ;; N) tds_instance=$OPTARG ;; \?) logmsg HAWS_ERROR "$MSG_UNKNOWN_OPTION" "Unrecognized command line option specified\n" ;; esac done shift $(($OPTIND - 1)) appid=$1 # # Before handling anything else, check if we have to configure from XML # if [[ $MANUAL_CONFIG == true ]]; then if [[ ! -f $CONFIG_FILE ]]; then dspmsg -s 51 cluster.cat 26 "Unable to read the configuration file. Please ensure the correct path" return 1 fi importConfigFromFile fi HACMP_HOME=/usr/es/sbin/cluster if [[ -z $primary_node ]]; then PRIMARYNODE=$($HACMP_HOME/utilities/get_local_nodename) else PRIMARYNODE=$primary_node fi COMPONENT_ID="TIVOLI_LDAP_SERVER" if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then APPLICATION_ID=TDS_$PRIMARYNODE else APPLICATION_ID=TDS"_$PRIMARYNODE""_$tds_instance" fi #Call the Smart Assist 5.2 commands #Check the Action argument. if [[ -z $action ]]; then usage exit 1 fi # Configuring Tivoli Directory Server if [[ "$action" == "add" || "$action" == "update" ]]; then if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then if [[ -z $tds_password ]]; then usage exit 1 fi else #Check all the arguments are specified. if [[ -z $takeovernode || -z $serviceip || -z $tds_password || -z $tds_port || -z $dbinstance ]] ; then usage exit 1 fi fi # If updating remove old stuff. if [[ "$action" == "update" ]]; then #Check all the arguments are specified. if [[ -z $appname ]] ; then usage exit 1 fi # Remove old HACMP resources /usr/es/sbin/cluster/sa/sbin/clrmrgs -a "$appname" # Remove HACMPsa_metadata odm entries. If this fails, attempt the add anyway. RemoveResources # Remove the entries created for configuring Tivoli Directory Server if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then $HAWS_SCRIPTS_DIR"/"tds_import_delete else script="tds_"$tds_instance"_import_delete" $HAWS_SCRIPTS_DIR"/"$script fi if (( $? != 0 )) then exit 1 fi if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then typeset NUM_INSTANCES eval $(clquerysaapp -a $APPLICATION_NAME NUM_INSTANCES) if [[ $NUM_INSTANCES != $num_instances ]] then get_instance_list fi fi fi if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then $HAWS_SBIN_DIR"/"clhaws_import -w "$tds_password" -s $PRIMARYNODE -I "$num_instances" -A $APPLICATION_ID > /dev/null # Discover and create directory instance list get_instance_list elif [[ -z $prefix ]]; then $HAWS_SBIN_DIR"/"clhaws_import -n "$takeovernode" -l "$serviceip" -w "$tds_password" -p "$tds_port" -i "$dbinstance" -s $PRIMARYNODE -N "$tds_instance" -A $APPLICATION_ID > /dev/null else $HAWS_SBIN_DIR"/"clhaws_import -n "$takeovernode" -l "$serviceip" -P "$prefix" -w "$tds_password" -p "$tds_port" -i "$dbinstance" -s $PRIMARYNODE -N "$tds_instance" -A $APPLICATION_ID > /dev/null fi if (( $? != 0 )) then dspmsg -s $IMPORT_MSGSET $TDSSACAT 710 "ERROR: Failed to create import scripts.\n" exit 1 fi # run the created import script if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then $HAWS_SCRIPTS_DIR"/"tds_import_create else script="tds_"$tds_instance"_import_create" $HAWS_SCRIPTS_DIR"/"$script fi rc=$? if (( $rc != 0 )) then if (( $rc == 2 )) then dspmsg -s $CONF_MSGSET $TDSSACAT 99999 "ERROR: Already existing resources found. No changes made.\n" exit 1 fi dspmsg -s $CONF_MSGSET $TDSSACAT 999 "ERROR: Import Failed. Removing all added entries.\n" # In case of error, remove all the added entries if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then $HAWS_SCRIPTS_DIR"/"tds_import_delete else script="tds_"$tds_instance"_import_delete" $HAWS_SCRIPTS_DIR"/"$script fi exit 1 fi # Add the metadata resources AddResources if (( $? != 0 )) then dspmsg -s $CONF_MSGSET $TDSSACAT 410 "ERROR: Failed updating HACMPsa_metadata ODM.\n" dspmsg -s $CONF_MSGSET $TDSSACAT 99999 "ERROR: Import Failed. Removing all added entries.\n" # remove all the added entries. if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then $HAWS_SCRIPTS_DIR"/"tds_import_delete else script="tds_"$tds_instance"_import_delete" $HAWS_SCRIPTS_DIR"/"$script fi RemoveResources > /dev/null 2>&1 if (( $? != 0 )) then dspmsg -s $CONF_MSGSET $TDSSACAT 410 "ERROR: Failed updating HACMPsa_metadata ODM.\n" exit 1 fi fi # UnConfiguring Tivoli Directory Server elif [[ "$action" == "remove" ]]; then # Remove the entries created for configuring Tivoli Directory Server if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then $HAWS_SCRIPTS_DIR"/"tds_import_delete else typeset TDS_INSTANCE_NAME set -a eval $(clquerysaapp -a $appid TDS_INSTANCE_NAME) set +a echo $TDS_INSTANCE_NAME script="tds_"$TDS_INSTANCE_NAME"_import_delete" $HAWS_SCRIPTS_DIR"/"$script fi if (( $? != 0 )) then exit 1 fi # Remove the entries created in Metadata odm for configuring Tivoli Directory Server RemoveResources > /dev/null 2>&1 if (( $? != 0 )) then dspmsg -s $CONF_MSGSET $TDSSACAT 410 "ERROR: Failed updating HACMPsa_metadata ODM.\n" exit 1 fi elif [[ "$action" == "deleteonly" ]]; then # Remove the entries created for configuring Tivoli Directory Server if [[ "$TDS_CONFIG_TYPE" = "DISTRIBUTED" || "$TDS_CONFIG_TYPE" = "PEERTOPEER" ]]; then $HAWS_SCRIPTS_DIR"/"tds_import_delete else typeset TDS_INSTANCE_NAME set -a eval $(clquerysaapp -a $appid TDS_INSTANCE_NAME) set +a echo $TDS_INSTANCE_NAME script="tds_"$TDS_INSTANCE_NAME"_import_delete" $HAWS_SCRIPTS_DIR"/"$script fi if (( $? != 0 )) then exit 1 fi fi exit 0 type klx$od9 /םa֝a֝a&9 2vT./usr/es/sbin/cluster/sa/tds/sbin/cl_tdssaquerydd#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tds/sbin/cl_tdssaquery.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)05 1.1 src/43haes/usr/sbin/cluster/sa/tds/sbin/cl_tdssaquery.sh, hacmp, 61haes_r714 11/28/11 15:01:20 ############################################################################# ## ## Name: cl_tdssaquery ## ## Description: Performs application discovery query on the local node ## to determine if Tivoli Directory Server is available ## ## Arguments: none ## ## Returns: 0 Success ## 1 Failure ## ############################################################################# ############################################################################# # Functions: # # # displayInstall: # If any package installed, Displays information # # Arguments: # Package Name # Display Name # Component Name # Message Id number # # Return: # 0 Success # 1 Failure # ############################################################################# TDS_INSTALL_DIR="/opt/IBM/ldap/" HAWS_HOME="/usr/es/sbin/cluster/sa/tds" TMPFILE=$HAWS_HOME"/tds_config_type" TMP_INSTANCE_LIST_FILE=$HAWS_HOME"/tds_instancelist" set -A instanceList set -A instanceHomeList function displayInstall { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x pkgname=$1 name=$2 component=$3 msgid=$4 integer installed=0 lslpp -l | grep $pkgname 1>/dev/null if test $? -eq 0 then installed=1 fi get_instance_list maxnum=`echo ${#instanceHomeList[*]}` let maxnum=${maxnum}+1 i=1; while [[ $i -lt $maxnum ]]; do confpath="${instanceHomeList[$i]}""/idsslapd-"${instanceList[$i]}"/etc" let i=${i}+1 grep -x "objectclass: ibm-slapdReplication" $confpath/ibmslapd.conf 1>/dev/nulL if test $? -eq 0 then grep "Proxy Server" $TMP_INSTANCE_LIST_FILE if test $? -eq 0 then echo "DISTRIBUTED" > $TMPFILE break else echo "PEERTOPEER" > $TMPFILE break fi else echo "STANDALONE" > $TMPFILE fi done print -n $(dspmsg -s 10 tdssa.cat 10 "Tivoli Directory Server Smart Assist") print -n ":TDS_5.2:" print -n $(dspmsg -s 10 tdssa.cat $msgid "$name") print -n ":$component:" echo $installed } ############################################################################# # Main: ############################################################################# #PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH="$(/usr/es/sbin/cluster/utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm:$FPATH_BASE/ihs export PATH FPATH touch $TMPFILE . /usr/es/sbin/cluster/sa/tds/sbin/clhaws_functions TDSPackageName="idsldap" TDSName="Tivoli Directory Server" TDScomponent="TIVOLI_LDAP_SERVER" TDSMessageId=35 displayInstall "$TDSPackageName" "$TDSName" "$TDScomponent" $TDSMessageId exit 0 ANCE_NA lt$od/p/םa֝a֝a&H2vT./usr/es/sbin/cluster/sa/tds/sbin/clhaws_functionsslogdd  #e ainorst"$AES_cdfghlmp -/=CDGHILMNORTWu'.1;BFPU[]bvwy,2:\`k|!%&()0>VYx{}34679Xjq+5?JKz8^*<~@0(Dh: @a .E0H,mmmmmmX4)uO{,77Lpmmmmmmmmmmmmmg}ɱYv+VA3 @% @X$vAt'jmmmmmmmmm;C&,q M2mmmmmmmmmmmmmmmmw `BS D2ə@wX4)uO{,77LpﳾL>8PԚ@(aA1FɺV6Uh6PaMcqRhF0PH+;AK-\U ӓw:-;J V_[4 }qdI[_XJ/g#t*n|N`X/;gV'j}zXqj\K1g+j] NTlGVQPNYJڸHWI 쒌Zټ>Qޥp*&W ;aS0\r)XfP#'[u@*` }iLm2nZ "5FXxXT%рN M<0'ؖPV@,UwwX5RQgΫV99P7+ FuSU>wvuXIIfޠ9KAȏ&LXcImx/USQIHUa; + :2}NܣH 3yiO*Ilt"5WNMhV,%mXnuЦ&oNܣH ATWIg}Ud>*mҎ7JɫE3Ġ*+-bodcmr[PF]f >ixɑ;T%ws8ɵm\$++V.x`+ .o$nIF|k@N|eXZqfK;f$ `y+bF9Đ4dt"q$ $& 083II&i(@I0GYK9Đ4e .X8dȩw+mewԽ;f;WVZfeQ84ܧW@I&Y0ADp1>I[ i$$̦2N$D2AǢC;H*M>*:꣉ %CID$LdQ28laFsI02QLQt*xz/jbKu7KWX[ 'lM_3%ׄWss{V8- 7+ Du6j6h䮦7<̔{8Męj)(VykɻN2)7+ GB2Oe\f(+%=Yf:B+yI4f& F.u6j6hXsL\uX2̽} j]A:Ֆ{0UV/)(IC]ab[M j)&| 0H*L7;WVYYaHUmŒ>RXAbFW ^VP.`5 eJ DqYv|iYMK'+ 6qG5t׺3zQ>wՖVmF]V/QIS+(E|+Cu2aQ#sL\uX2̽} j]A9XQ^+](8n77Œ\uX2̽} iG(+,+zi;Ԗm}-m^Q D';m"E0҈psb)eSR \_B+Jm>sĤnmnrRHEpjbV*MI5uWL殬\H] 0+| 殔zMW \"VmڹINvY vHCȦQ#sL\uX2̽} j]A9YD"YgW=JQNSt^ZNFcUv|ԫ FKfkJmB+z 7)+(WUbԩ[oIgmiN.bdrɆ@〳 7+ Dp*,BnpSB0#uoUB-\$+:UbM7B:^+mux:|IloH2Q7f,W9[Yٮ{&8XT% ;m=EreWtnpe|$OF%^s0`Ao^$(VykSvRmյmoImy%U5%/(tV-zN ց.o j)87]F$ms%wuO{,#pfHWU^̈́m2fMW9XNԫ"iɭV/RF殔z7MIj ;mueW:^eW5t׺mQII&HTFJUh(T\&;m6ҏ^v bkQcyh3x z@ fJB+>/fek+g;mW;m'ҏ^mZ֢tm[}qWIlaP$ sMJQ%.M\Www !kB7L(lJL%p 7) kقM웺g`G h iOUZ; 䮴bقzL\u.)a }o@yP}IEh.no%w}rWZjy[6Y,\N2) 95eҏ^]#z2zeL\u.gXJ4e%yқV' mbw1Z^,V {mBq!M ct"FaF]V!ME' 9YaHUz6Y_>"b\%l1Bč殔zR_RX%l2ɹVoR_J.a ۻ78(sJ&mhXv3%ڢLɄkjZ"p[Q3y{0-5c@]Im3eelx4"m@ye&Q# 9mmv$2a*@ye&&N.$˖L4t)uDmmmmP iD8(mm3%ڢLɄ cc3ǀcǀsǀq ջ$$\#YyBCIEǕHCȦQ8v8(퀀# 0q1W ʤE2LDp b{mj1,p5Wf(vǒ@I.Uz zb2^ ='&Ma.N Ux(p6]`}f+92mF "H;m#9l̗jHI3&U"),A04E\&ZS=;dM:jc ;ؘ؛e|?0`qÁg@Vnpq! fKE$ $Gc*K Dpl\'&Myy`ims a xGDp^ fKE$ $& 1"Keg#jm&;ЦjSV(Rg+kB6'U|Қ^7KMFH- W 1[,GUJ+Ass}a(%.s &`i2@Z2A$ɖH &@mLLksfyx`^v@!QaP's8p#\!Dm7Ai*< &`i2@[,h8( Dž`7Y5ǀD RFQ[iO-oB8/+' e#O^=h3` RFQ۞=Ip`kYFݶ[cԑ ""ْQ|II&c* e=;ZXՉ$;[,+kB6H2';>ǒ@IIL5eAm=Ip낰c4IDCqDD/U%ڢM U")A$Dy091(v8;ϝ捳X6V$l\)lLڡ;3o7jAa](7HE}V/ SIQ Dqv¸HI4@I3)Lh;mǩ#q`/` iBa㰈^ 4IDADzUKems^ޫݩjX V_)lZF-l7zfl8$\^փ6 p-1ǩlv< &="!z\\/m8)փYFݶ[c֑X ^ blv$D1ǕHfI0 XɏDCt7jAhZЈقKe`I1(.WII& &e0 v-m2]/ i$"Gc*"E2;jĒm-qI1)}mPdNsa—xyKe`)z7jN8Xymd 0$s/US)l hS,M]o nv|Jb5ϊHV/FJ5 + ڕB]zޣXNԬ+ @(jS͉9iO?FJH9h3a.o b)L&`mv|fbB*z2VX}sO]5XzKjyCsƺ2V]Ak4gi0\4DS L-h4H$J+t@!qX<4jVnpq mpZ v-)GdbKA }./jA\ eD;vlj-l;yLrDBX^)#qmƸP5փYF1#lxB+z2Vq5'yNX|pP'U.xR v %ld^KIL!V[cԑ ""i,\'a㰈 b{l̗jHI4L.cc* e.ALެЊ h[D inv$D68L &XS,\a;3zB*H%%lz"v< &X\-h;>ǒ@IIL5eAm=Ip낰^ @CyLrc"8/U2]/ i$0`" h[Vքm]V\I2"kA]<MLa(ZvAl !< &XNña eDqlj-lmsW!LUђfKE$ $Gc* eD4ybcdn*x h[ȝ4I.Am9wa(Tstw ͨFXt[Um` GR's X4)v,( ^w,WUԫnKjz1;' ^QnԂº^ڽ%XlGN,ԣ nK8`Al̗jHI3&*R*fԺUǠdr{&-J)%l wܤSں V6%AZVxS/j v,Y8[xpDURӋڱǀW;mSjJ㙔W\moz/j @Cy &<`dS2"vcHɂaQ v@Ǚ c˖ &E3 pr'`v89L.&"!z\]Kg#mjPF7[,\׋ڱؕi[h鮙Yɜ}Up*i[4mc* Ҷ]3ڷ ZvAl !<׋ڰG ^\"#XXt +Vl(q^/j,\׋ڱQcm6 v-m2]/ i$"Gc*"E2;`,xD;m }a(bw=xff B|ޥntp-1Ǚ c˖ &E3 pr'`v84&ely &<`dS2"vcDȢ`""ž{V8+m&q{VrgUh#J*Zq{Vv-l-ڱؕi[h3ڷ ZvAl !;`pDGqpunu ` m6 {n-ڱQcm6 mٙ.Đ4d #ǕHd "T@8;$5ڼ;EX2'9dI.X4́ȝa2``yHlqH$ILEK"^ rrZӢuq4dDm} PVLiWKN/jN 7)5'orrZӢuq4dDm} PVLiWKN/jN 7)5mԔVQRpnaj,tRpn<LrRQZ $E3* Ҷ*,a}f >qYFJN l-R+)E'8 i$*%HI2&q6%AZV93N_-893ڳhlݶnSRvޢuv RvtRpn<Lruӏ* Ҷ:nSVٺޢuv VٺtRpn<Lruӏ* Ҷ:u\XJ:N l-ENN qǒ@I.UJ+Aq4cHq6%AZV8%E9l/lG+(²IImjQe4Gy$ $"QII&Td>Ĩ+JG&q{VpM9փ[f V.wMhݫ,+V!K vAl !P(LQL4px+V..;l{;-)J+IFŞջm#OPDL`P5[lyx`>kXDp^ fKE$ $ ǕHf@)Ie,q/HԼFr6ދڼ=•uX&[H2'c^ջmbe=`|)XE|mXJ9+{V@C < vRQZ a;R a a~<LrRQZ V..9XO oII&HTF(ݶAn>vRQZ a;RtVd\̐I1"89 ;@FL 2<\i2);ñȢ`pQ0v b)Όc{,Nd+ i$*% U168Nap[c "#XXlv$ `yqR"CȦU"'c+ i$*%td{,Ndl,XdT_@ID0<8L!S*WFU’8 -.Đ4f0[yTT0& 0v8JbRFWFUWtd ȝ<LrRQZ =ḡiJakAփ|E'L'jVSҎ*ތ @Cy &<`dS2"vcHɂaQ v@Ǚ c˖ &E3 pr'`v89L.&"!z\]e9ьze ӌs@a<1y$ $"QE'Cbcbmp( ǀ&`/xDGqpbْQ|II&A8ʤE2LDN4Vǒ@I.URpnҎze ӌ[̗jHI2U")D0M+bpj)87\z.2'8Z7QeӢuǂ ,tRpnKs<aؘ؛e msۏb؜$nf >qYF a 1l{m6VSNN qpdT_@ID0<U")D0` i$* B'9m.;bs{Ta—|remL5*7Tbw2jEwiXJ mE'G nz^^s}m]E'L ]4luڅ) FW)&uX}RGWJ7MYjyḡz2Vv ^"[eV/ 0+'}I47[NN րH;m{,Nd<)o딝]0ԕǩ;}m:)87Wm2]/ i$̘@z;yTÌYM#)87]z=;\iN[fzN l I\lzӢuv3%ڢLɄǕHi0L8e*d;u{WL7[NN l)F7[NN fBw4%lzӢufY0 vAl !L2^ blv$ `yqR"CȦU"'cɸZ[fzN VZ2V=d'sN2Vv[4 fKE$ $C*"E2;>M`%0q̗jHI3H-M`%0q̗jHI3H-Mm` G5(²uՖze ӌ-ْQ|II&A8ʤE2LDNbX+*ILs%ڢL c*ǗDbfL)&jFJ2!yI6+)7iNap ȝ{mԣ iI{,Ndm6{:ZSiQ۶ٙ.Đ4dU")(II&LqsS \'czN ֚IX,+ \!m<77aw㔝NȃfZ 7)UJ+Ass}a(tURpncz" qiRV/)( 7V/QIdA 1-[_\*QIed+sw8-XJ9W" ub`%Ye$loURBA;q7[NN \qRAy{j2nJ䮸y@a4e&LެQtBY GJxyWB:x6W,V.b^Ꚍniү Ve e(ݶ3J8$(Pp)50ifK?/;o#<f NvmXn Sl,ZsZqJ&LFP,=Ha"sͬ1lyɓ, E22i2sMJQ4⥦ĚSiWKM5`H iWKxS Dp52xaE0?/;odI <"e*U168jᗂT#,0Ba7\1l akQ02mF%@ k&Y#((fy &LFP(f8 8̐I05 .X &A"e dqǙ d$e L "6 •9,d&PFpX%C&Y#(e e0e UR,\#[^NabAӷml-Y;mҳ =F?(nb1`kl,\Yc=;qvmXVaCdz T , KW AhmabURx!J(9m-h;ml !>v8}a(DBXml,]+0Pmı7Cua?R/Pn5pkm4⥒V8 V`Dmmf8B;mŭ;m(Gdrd$eL4L'8\Ǚ*2@S(M#)( k`Ny$od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tds/sbin/clhaws_importdd#!/bin/sh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tds/sbin/clhaws_import.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)74 1.1 src/43haes/usr/sbin/cluster/sa/tds/sbin/clhaws_import.sh, hacmp, 61haes_r714 11/28/11 15:03:45 # ############################################################################### # # This is the main import script used to import either was, dm, tds, or rdb # configuration information into HACAMP. The primary intent of this script # is to provide a wrapper around the actuals scripts that perform the # import. This wrapper will also provide extensive error checking so # that the underlying scripts can focus on their specific task rather # than repeatedly checking for the same error conditions. # # This script will call the following low-level scripts: # # clhaws_functions - A collection of constants and functions used by all # scripts. # # import_was - Perform the actual import of the Websphere configuration # data # # import_dm - Perform the actual import of the Deployment Manager # data. # # import_tds - Perform the actual import of the TDS configuration # data. Note that this script is a wrapper for calling # into the vendor specific import script. # # import_db2 - Perform the actual import of the RDBMS configuration # data. Note that this script is a wrapper for # calling into the vendor specfic import script. # ############################################################################### # # # MYOPTIND="" ############################################################################### # Function: usage ############################################################################### # # Usage message ############################################################################### usage() { /bin/dspmsg -s 1 haws.cat $MSG_CLHAWS_IMPORT_USAGE "Usage: clhaws_import [-d] [-m] [-t] [-v] -s dm -n node -l service_label\n\ Usage: clhaws_import [-d] [-m] [-t] [-v] -s was -n node -l service_label [-c cell_name] [-o websphere_node]\n\ Usage: clhaws_import [-d] [-m] [-t] [-v] -s db2 -n node -l service_label [-d database_name] -i database_instance_user\n\ Usage: clhaws_import [-d] [-m] [-t] [-v] -s tds -n node -l service_label -w tds_password -p tds_port -i database_instance_user [-o websphere_node]\n\ \n\ Type 'man clhaws_import' for more information.\n\n" } ############################################################################### # Function: init ############################################################################### # # This code block is common to virtually every script in this package. # It's intended to setup basic functionality in common function definitions, # variable initialization, etc. ############################################################################### init() { # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/haws. But this can be changed by setting the # environment string HAWS_HOME. if [[ "$HAWS_HOME" = "" ]]; then HAWS_HOME=/usr/es/sbin/cluster/haws fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -f "$clhaws_functions" ]]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # Once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } # end of init() ############################################################################### # Function: call_subsystem ############################################################################### # # The intent of this design is to be able to handle additional subsystems in # the future. This top-level "import" script is used as a front-end to # the application-specific import utilities. Given the command line # 'subsystem' option, call down into the application specific import # script ############################################################################### call_subsystem() { subsystem_import=$HAWS_HOME/sbin/import if [[ ! -f $subsystem_import ]]; then if [[ "$SUBSYSTEM" = "" ]]; then SUBSYSTEM="unspecified" fi logmsg HAWS_ERROR "$MSG_SUBSYSTEM_INVALID" "Subsystem '%s' was not found!\n" $SUBSYSTEM exit $HAWS_EXIT_FAIL fi logmsg HAWS_INFO "$MSG_CALL_SUBSYSTEM" "Subsystem system called: %s " $subsystem_import echo "$*" . $subsystem_import $* } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### HAWS_HOME="/usr/es/sbin/cluster/sa/tds" HAWS_SBIN_DIR="$HAWS_HOME/sbin" HAWS_SCRIPTS_DIR="$HAWS_HOME/scripts" init logmsg HAWS_LOGONLY "$MSG_IMPORT_START" "Import script starting up on node %s\n" $PRIMARYNODE setup_defaults generic_process_arguments $* call_subsystem $* exit $HAWS_EXIT_SUCCESS ### lu$od/םa֝a֝a&b2vT./usr/es/sbin/cluster/sa/tds/sbin/importimportdd    # "S_ceiorst$ADEIORTaghlnp >CGLMNP\dfmu'-./=BFHUVW[]v%)1;bwy!(026:Y`kx{|}&34?Xz,579Kq+*8Ə@'5=w)hF=9L( EDiӀr 0<'=.lZ1/;]LDi pc ,ed􊗝sS986 c| 9 Dtxc։  c֦shS uZEK$I<kC| x`Y{T.V 6lreRi@i pc߉)u鮴 ? fzyьVkɽ " h Dr混R@xÐ"h"G<񩠉"bX8ś8eY-YVӣ {~ -b_\픾++y²F,VUP|.Rm:0ݶ^<'DgAqA㝜5iD ~m:0M7me[NvY# d13FcG&?HT-믁 i2`/|TPF4K0IL4Zg>'"J+S+*tc@pk6/!cvz*ZD  8 LVӣ3π=Ha7mLD$th9=' 8)ůEKY\hs LD Ls !9T I^Qa, h9=' SE^<'!A㠙π.SG8|OHp8;93@ JPh,|OI"FH4^/EKY\hs LD Ls !9T ؤ(E ``1SET>)gA㠙ρS^Ǟs !94.L/h][^JZZlZ.@4LP$(a.@t4I< @{E0`/m4I=$K8|1DD$] ŋ+y²F5 Hdx6 ė !9T v13zhr|`yO!jݶA8rZbQuRuo_]ie/:1J5vbQuP)j.RА9KBlZ. N0+ς^ q E> "π=Hl-epyOdžxxhxg:7A3ς^sZ,H/Lr 8|"> ,ڢn/EKY\hq 8 5-u_:7A3$kh9E~.o:0eex\0V u:WZYzEKΌjɜ6-uh\Vk+7VWZ`ʗX`=m4I88 ҽ¹3ŮyьRuoJ‚߶ɜ E<|A 1{.8$|q4h84RBl]|kH  { JAcZ.4`eK`-lπH@98[0ik.%F l-epyOdž0@D@;93F \Vkc9 <4k߃ΌY+iB-тUooå}u9҅Q3RTӬzT+iB-тT`=d| 8Ck&p@ 2P҅@bg>Q" 8 {5F5SX.,5W πH : dv 9 s bg>Q"&=38礚$='aA@fal-3H`d4MQ[A|D:?@pk6/kH\X T#i(S| H0 VgLX&˨C1kdc9 <en٬ؾ0B0!""q`0,-P1ͭd| $+Y3LDi v13r{F (`CZE0LEXZcvz*ZD adžvqQ*| $k߃ΌYY^)h ҽ֖K+Zgeg?FF1Y+iӵ›+-U@`V۶RW$xhadžvp^a]uUi\ &Û#hi@A02LO13HIPPhb͂πz$$s+yO!j3]i0ݶabNDB 8m+6Vmh|G"9m2LO8|G;g; `faע4I=$K8|"D`"9T`"Y_]iaZ.\vqZW&sIQ*&v133G$ݶEEKY\hvq: r"Nvrg?r奕 0&v13bh"b7.R( {~+]iaZ.\vp9iVZK&sE.5KKFF1Y+iӵ›+- ݶ^<'Dlhbxd<'p5PPh;|'Pefinvepq‚hk+|I$R0A3` Q#K r奕 ҹ3)uZX(ޕXbl;ρ9.@t4I< @{vج۶RW$ D9ag>Dt"s9#E˖V. a| -oqv#yр+ )yB-тUoo*/2^ZK&shY^^tcMe/:1UIkF$(ɿXe|Y@6V֓43J]iZʕ o*( #F PT> ;gAqA㝜"(¹3F RRAANkvi#5!&sh9+.`]FJFsvzEEb-@4ǚH Dv[\ hby&s5!`Y#݀Pzi  ;`6q DrH`38礚$='aA@faEyB^|=ҁN?:c :Q" )!P efݶ^<'DlƏ@'c+"Լb剰1Mt+&@S>XAL ZL4]eralVmn|5iD i]uF RRדvz*ZD  8 V@ٰF RRז2%UYw7mW Dk6o03]i0kRW$H @9)9'g&hY^^tc`rR P(Dk6nuՆYmե7]ia`/U/:1͛⴮,WN-fT> ;AqA㳆(a\ς^&sh9ݶ\&'@N0Vg9@4xAbg>zfHUahl03]i0kRW$H L0 jcCh9ZY3bQuԼ:uoJ&إ%l/)xT\a|"> 2%UYvYl-epyOdžxxhxJ lW&s";π7mW  |Gq&c"UXZ57aAL ZL4ZT>)cDv13`"9ibx$ek&pH;93`"80L&c"UXZ57aAL ZL4ZT>)c{đH֖LJZT)I[1K^+aU/-60&v2%UYvYl-epyOdžxxhxJ lW&sI&sIsvep 8ZɜL)&M&sI&c"UXZ57aAL ZL4ZT>)cA祌L<ݶ\&'@N0Vg986= n13` &c"UXZ57aAL ZL4ZT>)c ;AqA㳆(a\πH@99 <7mW  |D:<0Lj$CɹȕVfXPS5֓ -epyO$X|4>Q"ɜ6F0tזe/bl;πH@9"UXZ57n[+Dπ=H PPuvm4I8 5iD #_5xnm1<q28$$k4 #_MDk6n ‚h^<'E,a`@Ƈi&dmRVRUEM 65xȕVf۶lVmnmT> ;AqA㳆(a\$kE Dݶibx$ek&pH;8H'M DɹȕVfXPS5֓ RW$H 5"DZXH4), )I[1K^+aU/-60&v0H'Uahlݻmf/EKY\hq: :;8j҈6F=!ҁH5y@7mep 8Zɜ5y@n0H"zP"iɹȕVfXPS5֓ RW$H 5")czfK95~A]ERQ*b,QrclMc|"> 2%UYvvجo؍FT2ҷYv Vw֍fR5bMzifɜ0Vjo`*YKΌiz`F$Y1*yBeo Ff0+n|\:K Y ^Y JiVMk-u+xZ57 q><.ٰk[sݶKBף0k6n| x]`.ף)7mR-F'zVf`yOz$ 6l+ ݶ5m;k-hl]e/RVZYHܺfvz*ZD4i8jgI7g -2ҷ֍f‚mPX6lX@+dk%/(Z57nJ+S;Ƴfe/8KȦ (; d FfiEjg|kaY[P鮴y`t_e}yJ^Pk6nݶVwZYQ*ϕEe]0Vj`*YKΌiL4Q`dk%/(Z57nJ+S;; d FfiEjgc"؍F,0f25-͛m FRYvmHk /jk`c#Y)yBѬٻvQZčL<0čL>𵔉f@f50LF^xZf50ԘB FRYv33J50a1hlݻm(L0f25-͛m(LexEr ]K`dk%/(Z57nJ+S:ep&`LLİ03]i00f25-͛m-epyO$X@)בbiWa1hlݻm(Lk+|"0A3Omd¹,/6 &L6 qבbi\TVq@6KM&Mnbg>=!憞< FRYv3+0f25-͛mVnc#Y)yBѬٻvQZ`dk%/(Z57hhhEjg|5iD ZYFY^qRҨ FRYv3<{zB8%`P0,B.nc#Y)yBѬٻvQZ+3>  `fa`dk%/(Z57nJ+S9z*ZDI0@ב4< ߉5e/:1*ʹ Km^P?Hm65֖yT(2d&c 3Kf۶Ҋά^`!`dk%/(Z57nJ+S8݆ FRYv3J^Pk6nmiEjg|6RZYFY^qRҨ FRYv\&'bg>Q"&=38H&y6q DrH`Gh<IEjg4y61K0i`hA)hZVk6ndeZYpa1hlݢ佤b`sHG ,…A\k[Ѭپ133H>M xF A)hZff EDi"i FRYv+63W f|İ03]i00f25-͛m-epyO$X_jg8v&YeyKΌgʢY)yьב@dɓ` FRYv3+0f25-͛mVnc#Y)yBѬٻvQZ`dk%/(Z57kvQZRW$ D9aA"zPy؛e/:1*ʸmKȠQ2dɰM؛R(ZD0f25-͛m FRYvm(L(KVVzYZл9`dk%/(Z57nJ+S8ǼrD0,B.L* HT-므0f25-͛m2LO0>k& FRYv34I=$KcƏ@'_"QI! phF la@i sJ^Pk6nefݶVt1Ơ<7%+Pc,:.Y)yьב@dɓ` FRYv3+0f25-͛mVnc#Y)yBѬٻvQZ`dk%/(Z57kvQZRW$ D9aG" JR<;rR 2ëBMk%/"Dɓ&7bn2isJ^Pk6nݶVvv3Kf3,k,8yьBNv3Kf۶Ҋ0h4"1Y HHT-므0f25-͛m2LO0>k& FRYv34I=$KAk"F7&F1 1;Ҹl@t{iW/kʡDɓ&7;f- G d FfiEjgVW/V00f25-͛mVnc#Y)yBѬٻvQZ`dk%/(Z57kvQZ ֖QWT-F'zU`dk%/(Z57h\&'bg>Q"&=38H&y6q DrH`Gh<I(L4$H$qH)A0,*-  F@#MMHZ@ H#${HiMD `AY H#D z',XZ57Diµ.aPA(&P@g"hXghjD"<0 8FHjIj"S #ޙ'zB& h" JL= KBף0k6n=隒p zaeZ-͛`#A(&Pz<0 B2^FL0 " i!`dk%/(Z57h/i7m+S88I A(&PL $xa{J H0 ,…""SA!-BD|F"hbaB"h(0-F'zVf2DQjh"D0!z0KT#D "<0 54#zB& @=隒p(FHjI)`8F5 F$C B0D@z'rFahlς^F&<#${5$@80 ˔-u+xZ57&siG@$PM4x`@; d FfbkE+S:ep&`,KPS5֓c#Y)yBѬٻvQZRW$H 5#jg8v&YeyKΌbbwpKΌ`&&L0f25-͛mY\Xa1hlݻm(Lv3Kf۶Ҋc#Y)yBѬٻ[Ҋ^<'!D@`ADt M @)&zFH񨈞 U^KgOCObg>=!憞GA㠑DA!R<;rR 2PIצBvp&Dɓ&7bn2isJ^Pk6nݶVvv3KfݶVrT>GA㠁Hy$< fi[J^Z4,򼂉&Mnɜa1hlݻm(L0f25-͛mkNvZZѬپ_TmBZZ+(²vz*ZD4i8jg#""{IUKͅu֖PVZѬٸPPQ63  vYf0 FfiEjg|l^,\Y)yca1$(Z57nJ+S;X謣 ز%MulVk,-|Ā̴ hlݻm(L﮴1ӬzT*ʺ4`/U/:1ZTӶfi[ȣ’^W-͛m hlݻm(LdWY@uTŝ hlݻm(L0f0 FfnJ+S9Y^\*Rv3RKYv3W f  JL,KPS5֓c Iy^Pk6nݶVrT>)cGA㠙σHE#""~&Za\TVq@]@lblJT<}"'ZҡDɓ&7bn13OCOMc Iy^Pk6nݶVtWf(RX%LM&s@ihiɹ`aI/+f۶ҊΙ\ؙP3]i00f0 FfiEjg/EKY\hzI"0A3OGDDMǤ)X9I"-AY|+8 KP%&حh[:U7<kȱ ִQ2dɰM؛L"<Ǔs’^W-͛mVnc Iy^Pk6nݶVvv3RKYv+6mR-AYk,,8yьZNv3RKYv3="$A8,…0f0 FfiEjg/EKY\hq:%Ǐ=3k,8yьBN+JeyKΌkJ&L݉,…Mc Iy^Pk6nݶVvv3RKYvmR-AYk,,8yэiTVUc Iy^Pk6nݶVqGA#R(ZNc Iy^Pk6nݶVrT>GAi"PyD@ hq:R<πH 9äĪº4`fmPl 1*-͛mY|i{вT]p~dSQR Dk6nݶVwưYFe K^NجזMu6YzZיi; Uahlݻm(L﮴1ӬzT*ʺ4`/U/:1ZTӶfi[ȣȕVf۶Ҋc"UXZ57nJ+S;HcYF?>Up0Vj0V,F3ȕVf۶Ҋc"UXZ57hEjg!3H=a@4Mc"UXZ57hby&s5!`Y#݀Pzi  ;`@&s5!`Y#݀PGh<I Vrg>=!憞<0L"<ǓsȕVf,۶ҊL/Lr q E<|A"nv3ѬٻvQZɜ5E# | "0f2%UYv1'#&s"zOA0@6]i0r5@4xA`^&a1*-͛\3$HzMMH ISA0@nv3ѬٻE+S8HH <A`$@y9`dJ Ff(L#_@ &|zB'&< Dk6nݶ+63  vYf1FYj1;Ұk6nݶVwύfB^qQu5MF0QK v3,XZ57nJ+S;X謣 ز%MulVk,-|Ā̴ (0-F'zVf۶ҊK C:7A򨬫F RRlK)yэ;if; Q`ZN-͛m (0-F'zVf۶ҊQ*ϕEe\ZNk6o (0-F'zVf۶Ҋce+ Ffm(L.R-F'zVf7Ѭٹ7; Q`ZN-͛\1<9A0,(fq=4 L l9A0,(fq#I4IzN‚uEVti[3H>M xa7ς^F&< (0-F'zVf.KM.QZo""44Mce+ FfVm(L.R-F'zVffJѬٻvQZ`bbwahlݻm(LӾ&`v3,XZ57kE̮13@tgI9@ Lj$CGď=$$y; 5֓ aqfW Ff&sh舞q%&P.0;Kf,\V-BaI/+f,\V-BpѬٻEŨSQ`ZN-͛YYk߃ΌY2U.ZL^5m;e5lX&3+8YVӣu֖ lK]e/#+ZVoѡb0S/6%I+7fh)UK {vz*ZD ag>Divq*2¸",I(((kvזVW7@)*`U@QP*RQ(+G7m)Lݶhic#vmd|=ҁN<0I&jCl-z*ZD#aqǢ"zP"M.e\F%̣2L&v13GDDEh 4^+&s@ihi Df9ZT>G8OCO*2}i_^bl;σHEyh 4^H9y444$$h-epyOC0A"<ʢ_3Y+lMc9y444Ƌρ#^$R80I&jC/mEKY\hs Lx)9:)+aƋd| "a"I3R{l-z*ZD#ag>I8<ݜĩ[Ja| "mƋ ɜaLԇ4^ ^<'!A㠙ρyA~87P*Ja| IX0xZD@""4$HsE-epyOC0A3` ҃MKʺrg?M]F#+kJa" iŋ/ + D Df9ZT>G8#_(|zn5 KZWצ؛ D/mm* nm45!r 1Im0Xݶm$ H "dž$Hsvm hdAM,Zg>zf|@$hbƋh)ŋ4! 54# 1I, nm0 h^<'E,=n[ֺ/`-3@tEK H9灍hby&s5!`Y#݀Pzi  ;`6q DrH`38礚$='aA@fa/m -b_)s),R3+9n \&'bg>Ə@'()I-z*ZDI "=vpB{_YFeALUEנIb ,*a,]0ݶVmn lZ)|+8.6KrfQYȣv\1<9y444‚hbע4I=$K8("<ǻ8 |X̣2+8.6K ,*a,]0ݶVm{mkRMrҷ-̣2Fby&sIv vuvXk+|I$R0A3()&.b2ʃ3ol+K8*M7l,X]K`-l,b -b_)Rؠ7[YFeg"as+L<303]i0ݶakRW$Hag>Qy;8 |X̣2L]@j* ,M {fsk&,Xk+|I$R_/k3(̨?)9lZ1f-,^a\G]EIVmVmn|A@6Z-uS\*ZT)mfe7mW ρ#^$R939PS5֓ -epyO$Yx&sE5E#о,^fQP~S&s*ZT/i Uu&Ú.R n[+,AL ZL4\hxA8Yk[]t` Ցj^P-т{~FAK&shY^^tcrB -edTh]zk,UEנߘI7Rh>)hFXkv-ѐ|-u.^;vi#5!&sh9+.`]FJFsvi#5!4I&sh9+.`]FJF Y@uݶ^<'DgAqA㝜f¸Hl+@4ǚH Dv3),bg>Ə@'M4\Wb  A$tD;πqǢ"zP"ǁF A$tD;a,B.m2LOK>uET> ;8 dLbT &Ú/mRЍR hnI{Iע4I8xxhxg=AYb):I拹KB4d ]K`-lVmnL\2,AL ZL4ZT>FG8|HD:Q$8j1Kѐ~Lтז^( A$tD;πqǢ"zP"Ƿm͠[]t` ֑6^M{~Mi.o:1% []ib0]EhY^^tc0SZW.κՐdQIY֌צfS/[*鱭+l+9lbTJ0+:щbk5ek ftא {E̮13@trM$Dl+gB֍fahlܛnEUdhXZ57ahl f0YI ]u0۶f3  vYf24`-͛mY|i{вT]p~dSQR FYv35~0(RZZvf:kHI`dhXZ57nJ+S;,i t(ޕʢ+5KKΌiV,F4YV(0f24`-͛m FYv3@4:uoJQYW fzyьiR^tc; + FfiEjgga1ahlݻiby&s5!`Y#݃3A餀hgCgπH : dv $y&#IPPnmD@""4qDA/L#Oy7; + FfI{ImVrg>=!憞<0L"<Ǔsтk6nݱYmς^ &9@4xD0f24`-͛mπn130f24`-͛mρ9 | $Mc#F ѬٻvQZɜbg>Dq7; + FfiEjg&si"M&si"Mc#F ѬٻvQZɜ5E# | "0f24`-͛mρ$RL0L)&Mc#F ѬٻvQZɜa7ρysтk6nݶVrg>Q"M&s5!@y0f24`-͛mπ=HqD7; + Ffibx|OI"GLD$`l(( ZL7mQZFO<05x0f24`-͛mQZFQ8n0H'Mc#F Ѭٻvm$k=(4`HDDsтk6nݶiEjg  E<|A n0H/Lr sтk6nݶ+6Vq@i pa7i"Cjh"FMc#F ѬٻZ.+L8+ FfnL13@tgI9@ Lj$CGď=$$y; 5֓ mYFY|bg>Ə@'0VfRBl]| Yk[ IQ" <(( ZL7m#+Xm+5C%&2\+*tam 1;Ҹ mZU R+RVU^V1 ݶ\&'LD$px|OI"FH‚˭&mե7LlҬQYWNڥbl++JF6)`L '3l"L9@4xAj2ͪ*hVkL\d+ 5֓ mbd6 @)'&shS 3I$ReiVZҨl/]&¡D&J +J֕Ee\ ZVZ4`/YL3@thQ6c ݶm;[vmͻmKB@- k):mٕ+i@ mZU#F VM ݶeexZU`…f\&'XvY+C+Y3PaA@e֓ m)fKY\lb "p =>v\22P%bQ|q3&(.W,Xтk6n`yOz$p\hYh48t.Rq|صb2;\LɊ. U\֋-Y^)hF*]ldhVT,[*V҅ZfE UbQ>>vZ,Xex\PUZ,XJ^P+5`Vk0Vf,X}0 XbM-y_!3H=DA/L#Ox" -佤bŮ} H1hjFPZL/L#OHbF 2lZ1д22P%&sip\7m+-тeK*ʗYl-+iB-тUl-Y^)h FA-&ex\PUZ-ƌeKdصb2i8.e-edKL/L#OH^.nmhXZ57 0<'=.4` 4I:)h8|""44 U\bY)yB4`ՁY,dhXZ57hw,#F 57 0<'=.4` 4I:)`Uaqhl (ZVιK;I$E&sh舞q|""44Vm+6UEQK)hFoREEQKͅ@ +&%U/-u͛ٳ+&@S>XAL ZL4\1<9A0,(fq=4 L8|D9L ${ HMG3]i0b"Լ2ZZ,۶ɉUK,+xZ57iY Dv kWz$od"/םa֝a֝a&"2vT./usr/es/sbin/cluster/sa/tds/sbin/monitor_tdstdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/tds/sbin/monitor_tds.sh 1.2.1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tds/sbin/monitor_tds.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # ############################################################################### # # This script is used to monitor an TDS server # # This script must return one of the following values: # 0: If the application is healthy # 1: If the application is dead or otherwise unhealthy # ############################################################################### # These are the exit status codes. No other values are useful so we break # down the possible returns as either Healthy or Dead. EXIT_DEAD=1 EXIT_HEALTHY=0 STATUS="" TDS_DB_NAME_ID="ibm-slapdDbName" TDS_INSTAL_DIR="/opt/IBM/ldap/" HAWS_HOME="/usr/es/sbin/cluster/sa/tds" TMP_FAILED_DS_INSTANCES_FILE=$HAWS_HOME"/failedDSinsances" TMP_FAILED_ADM_INSTANCES_FILE=$HAWS_HOME"/failedADMinsances" TMPFILE=$HAWS_HOME"/tds_config_type" TDS_CONFIG_TYPE=$(cat $TMPFILE) ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { [[ $VERBOSE_LOGGING == "high" ]] && set -x # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/sa/tds. But this can be changed by setting the # environment string HAWS_HOME. if [[ -z $HAWS_HOME ]] then HAWS_HOME=/usr/es/sbin/cluster/sa/tds fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -f $clhaws_functions ]] then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: check_tds_status ############################################################################### # # Check the following: # 1) WebSphere server server status # 2) Do an ldap search to look for a response # 3) Ping the TDS DB2 Database ############################################################################### check_tds_status() { [[ $VERBOSE_LOGGING == "high" ]] && set -x TDS_LDAPSEARCH_PORT=389 logmsg HAWS_TRACE $MSG_TDSMON_CHECKING "Checking the status of TDS...\n" STATUS="$EXIT_HEALTHY" instance_name=$(echo $INSTANCE_NAME) if [[ -z $instance_name ]] then typeset NUM_INSTANCES eval $(clquerysaapp -a $APPLICATION_ID NUM_INSTANCES) let NUM_INSTANCES=$NUM_INSTANCES+1 i=1 maxnum=$NUM_INSTANCES while (( $i < $maxnum )) do INSTANCE="INSTANCE"$i echo $INSTANCE echo $APPLICATION_ID clquerysaapp -a $APPLICATION_ID $INSTANCE | cut -d'=' -f2 | read instance echo $instance cfg_script=$HAWS_HOME"/config/HAWS_CFG_tds_"$instance".cfg" . $cfg_script logmsg HAWS_TRACE "$MSG_CALLING_SCRIPT" "Calling script: %s %s\n" "$TDS_SCRIPT" "-D cn=$TDS_ADMIN -w $TDS_PASSWORD -p $TDS_PORT -b cn=monitor -s base objectclass=*" if $TDS_SCRIPT -D cn=$TDS_ADMIN -w $TDS_PASSWORD -p $TDS_PORT -b cn=monitor -s base objectclass=* then logmsg HAWS_INFO $MSG_TDS_MON_IS_HEALTHY "TDS is healthy.\n" else logmsg HAWS_ERROR $MSG_TDS_MON_IS_DEAD "TDS is not healthy.\n" echo "$instance" >> "$TMP_FAILED_DS_INSTANCES_FILE" STATUS=$EXIT_DEAD fi if ! ps -eaf | grep ibmdiradm | grep -q "$instance" then echo $instance >> $TMP_FAILED_ADM_INSTANCES_FILE STATUS=$EXIT_DEAD fi (( i++ )) done else cfg_script=$HAWS_HOME"/config/HAWS_CFG_tds_"$instance_name".cfg" . $cfg_script if $TDS_SCRIPT -D cn=$TDS_ADMIN -w $TDS_PASSWORD -p $TDS_PORT -b cn=monitor -s base objectclass=* then logmsg HAWS_INFO $MSG_TDS_MON_IS_HEALTHY "TDS is healthy.\n" else logmsg HAWS_ERROR $MSG_TDS_MON_IS_DEAD "TDS is not healthy.\n" STATUS=$EXIT_DEAD fi if ! ps -eaf | grep ibmdiradm | grep -q "$instance_name" then STATUS=$EXIT_DEAD fi if [[ "$TDS_CONFIG_TYPE" != "DISTRIBUTED" && "$TDS_CONFIG_TYPE" != "PEERTOPEER" ]] then DB_NAMES=$(grep -i "$TDS_DB_NAME_ID" "$TDS_CONF_FILE" | cut -d':' -f2 | sed -e 's/ //g') for TDS_DB_NAME in $DB_NAMES do if ! /usr/bin/su - $TDS_DB_USER -c "db2 connect to $TDS_DB_NAME" then logmsg HAWS_ERROR $MSG_DB2_MON_CONNECT_FAILED "Unable to connect to the database: %s.\n" $TDS_DB_NAME STATUS=$EXIT_DEAD else logmsg HAWS_INFO $MSG_DB2_MON_CONNECT_SUCCEEDED "Connected to the database: %s.\n" $TDS_DB_NAME if ! /usr/bin/su - $TDS_DB_USER -c "db2 ping $TDS_DB_NAME" then logmsg HAWS_ERROR $MSG_DB2_MON_PING_FAILED "Unable to ping the database: %s.\n" $TDS_DB_NAME STATUS=$EXIT_DEAD else logmsg HAWS_INFO $MSG_DB2_MON_PING_SUCCEEDED "Ping'ed the database: %s.\n" $TDS_DB_NAME fi /usr/bin/su - $TDS_DB_USER -c "db2 disconnect $TDS_DB_NAME" fi done fi fi # Check websphere status if [[ $TDS_VERSION < 6.4 ]];then logmsg HAWS_TRACE "$MSG_CALLING_SCRIPT" "Calling script: %s %s\n" "$WAS_SCRIPT" "$WAS_SERVER_NAME" if $WAS_SCRIPT $WAS_SERVER_NAME | grep "The Application Server \"$WAS_SERVER_NAME\" is STARTED" then logmsg HAWS_INFO $MSG_WAS_MON_SERVER_IS_HEALTHY "Websphere App Server is healthy.\n" else logmsg HAWS_ERROR $MSG_WAS_MON_SERVER_IS_DEAD "The App Server is not healthy.\n" STATUS=$EXIT_DEAD fi fi # Return return } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. Set up the WAS and TDS monitor scripts. # ############################################################################### read_config() { [[ $VERBOSE_LOGGING == "high" ]] && set -x cfgfile=$HAWS_HOME"/config/HAWS_CFG_tds.cfg" logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile if [[ $TDS_VERSION < 6.4 ]];then WAS_SCRIPT="$WAS_PROFILE_DIR/../bin/serverStatus.sh" fi TDS_SCRIPT="$TDS_INSTALL_DIR/bin/ldapsearch" } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### PROGNAME=${0##*/} PATH=/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH HACMP_HOME=/usr/es/sbin/cluster PRIMARYNODE=$($HACMP_HOME/utilities/get_local_nodename) if [[ $VERBOSE_LOGGING == "high" ]] then set -x version='1.2.1.2' fi init echo $TDS_PORT generic_process_arguments $* read_config echo $TDS_PORT check_tds_status exit $STATUS L k\v$od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tds/sbin/startTDSdstdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tds/sbin/startTDS.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tds/sbin/startTDS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # ############################################################################### # # This is a wrapper script for starting up TDS # ############################################################################### HAWS_HOME=/usr/es/sbin/cluster/sa/tds TDS_INSTALL_DIR="" TDS_VG="" TDS_DB_DIR="" TDS_DB_VG="" HAWS_HOME="/usr/es/sbin/cluster/sa/tds" TMPFILE=$HAWS_HOME"/tds_config_type" TDS_CONFIG_TYPE=`cat $TMPFILE` TMP_FAILED_DS_INSTANCES_FILE=$HAWS_HOME"/failedDSinsances" TMP_FAILED_ADM_INSTANCES_FILE=$HAWS_HOME"/failedADMinsances" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/sa/tds. But this can be changed by setting the # environment string HAWS_HOME. if [[ "$HAWS_HOME" = "" ]]; then HAWS_HOME=/usr/es/sbin/cluster/sa/tds fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -f "$clhaws_functions" ]]; then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: start_tds ############################################################################### # # Start TDS ############################################################################### start_tds() { logmsg HAWS_TRACE $MSG_TDS_START "Starting TDS...\n" instance=$1 if [[ ! -f "$TMP_FAILED_ADM_INSTANCES_FILE" && ! -f "$TMP_FAILED_DS_INSTANCES_FILE" ]]; then if [[ -z $instance || "$instance" = "" ]]; then typeset NUM_INSTANCES eval $(clquerysaapp -a $APPLICATION_ID NUM_INSTANCES) let NUM_INSTANCES=$NUM_INSTANCES+1 i=1 maxnum=$NUM_INSTANCES while [[ $i -lt $maxnum ]]; do INSTANCE="INSTANCE"$i echo $INSTANCE echo $APPLICATION_ID echo `clquerysaapp -a $APPLICATION_ID $INSTANCE` | cut -d'=' -f2 | read instance echo $instance cfg_script=$HAWS_HOME"/config/HAWS_CFG_tds_"$instance".cfg" . $cfg_script cat $TDS_DB_DIR/sqllib/db2nodes.cfg |grep `hostname` if (( $? != 0 )); then echo "0 `hostname` 0" > $TDS_DB_DIR/sqllib/db2nodes.cfg fi $TDS_START_DIR_SERVER -I $instance $TDS_START_ADM_SERVER -I $instance let i=$i+1 done else cfg_script=$HAWS_HOME"/config/HAWS_CFG_tds_"$instance".cfg" . $cfg_script cat $TDS_DB_DIR/sqllib/db2nodes.cfg |grep `hostname` if (( $? != 0 )); then echo "0 `hostname` 0" > $TDS_DB_DIR/sqllib/db2nodes.cfg fi $TDS_START_DIR_SERVER -I $instance $TDS_START_ADM_SERVER -I $instance fi else while read line cfg_script=$HAWS_HOME"/config/HAWS_CFG_tds_"$line".cfg" . $cfg_script do cat $TDS_DB_DIR/sqllib/db2nodes.cfg |grep `hostname` if (( $? != 0 )); then echo "0 `hostname` 0" > $TDS_DB_DIR/sqllib/db2nodes.cfg fi $TDS_START_DIR_SERVER -I $line done<"$TMP_FAILED_DS_INSTANCES_FILE" rm -f $TMP_FAILED_DS_INSTANCES_FILE while read line do $TDS_START_ADM_SERVER -I $line done<"$TMP_FAILED_ADM_INSTANCES_FILE" rm -f $TMP_FAILED_ADM_INSTANCES_FILE fi if [[ $TDS_VERSION < 6.4 ]];then logmsg HAWS_TRACE $MSG_TDS_WEB_START "Starting TDS WebSphere...\n" $TDS_START_WEB_SERVER fi } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. Set up the command lines to start TDS # # ############################################################################### read_config() { cfgfile=$HAWS_HOME"/config/HAWS_CFG_tds.cfg" logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile TDS_START_DIR_SERVER="$TDS_INSTALL_DIR/sbin/ibmslapd" TDS_START_ADM_SERVER="$TDS_INSTALL_DIR/sbin/ibmdiradm" if [[ $TDS_VERSION < 6.4 ]];then TDS_START_WEB_SERVER="$WAS_PROFILE_DIR/../bin/startServer.sh $WAS_SERVER_NAME" fi } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### umask -S u=rw,g=,o= PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=/usr/bin:$PATH:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH HACMP_HOME=/usr/es/sbin/cluster PRIMARYNODE=$($HACMP_HOME/utilities/get_local_nodename) init read_config start_tds $* exit $HAWS_EXIT_SUCCESS es and kz{$od7/םa֝a֝a&72vT./usr/es/sbin/cluster/sa/tds/sbin/stopTDSdstdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/tds/sbin/stopTDS.sh 1.2.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2009,2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tds/sbin/stopTDS.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # ############################################################################### # # This is a wrapper script for stopping TDS # ############################################################################### TDS_INSTALL_DIR="" TDS_VG="" TDS_DB_DIR="" TDS_DB_VG="" TDS_ADMIN="" TDS_PASSWORD="" TDS_PORT="" TDS_DB_USER="" HAWS_HOME="/usr/es/sbin/cluster/sa/tds" TMPFILE=$HAWS_HOME"/tds_config_type" TDS_CONFIG_TYPE=$(cat $TMPFILE) TMP_FAILED_DS_INSTANCES_FILE=$HAWS_HOME"/failedDSinsances" TMP_FAILED_ADM_INSTANCES_FILE=$HAWS_HOME"/failedADMinsances" ############################################################################### # Function: init ############################################################################### # # Initialize this script ############################################################################### init() { [[ $VERBOSE_LOGGING == "high" ]] && set -x # The standard directory for the HAWS software is in # /usr/es/sbin/cluster/sa/tds. But this can be changed by setting the # environment string HAWS_HOME. if [[ -z $HAWS_HOME ]] then HAWS_HOME=/usr/es/sbin/cluster/sa/tds fi # Source function library. This is standard for all scripts clhaws_functions=$HAWS_HOME/sbin/clhaws_functions if [[ ! -s $clhaws_functions ]] then echo "The file '$clhaws_functions' is missing! Unable to continue. Bye" exit 1 fi . $clhaws_functions # We now call into the generic initialization routine. This will # complete the initialization process generic_init # once the above clhaws_functions complete, we have all our variables and # functions defined. We can now safely log messages and begin processing. logmsg HAWS_TRACE "$MSG_BEGIN" "Begin\n" } ############################################################################### # Function: stop_tds ############################################################################### # # Stop TDS ############################################################################### stop_tds() { [[ $VERBOSE_LOGGING == "high" ]] && set -x if [[ -f "$TMP_FAILED_ADM_INSTANCES_FILE" ]]; then return fi if [[ -f "$TMP_FAILED_DS_INSTANCES_FILE" ]]; then while read line do cfg_script=$HAWS_HOME"/config/HAWS_CFG_tds_"$line".cfg" . $cfg_script /usr/bin/su - $TDS_DB_USER -c "db2 force application all" /usr/bin/su - $TDS_DB_USER -c "db2stop" /usr/bin/su - $TDS_DB_USER -c "db2 terminate" done<"$TMP_FAILED_DS_INSTANCES_FILE" return fi instance=$1 if [[ -z $instance ]] then typeset NUM_INSTANCES eval $(clquerysaapp -a $APPLICATION_ID NUM_INSTANCES) let NUM_INSTANCES=${NUM_INSTANCES}+1 i=1 maxnum=$NUM_INSTANCES while (( $i < $maxnum )) do INSTANCE="INSTANCE"$i clquerysaapp -a $APPLICATION_ID $INSTANCE | cut -d'=' -f2 | read instance cfg_script=$HAWS_HOME"/config/HAWS_CFG_tds_"$instance".cfg" logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfg_script . $cfg_script logmsg HAWS_TRACE $MSG_TDS_STOP "Stopping TDS...\n" $TDS_STOP_DIR_SERVER -k -I "$instance" $TDS_STOP_ADM_SERVER -k -I "$instance" logmsg HAWS_TRACE $MSG_TDS_DB_STOP "Stopping TDS...\n" /usr/bin/su - $TDS_DB_USER -c "db2 force application all" /usr/bin/su - $TDS_DB_USER -c "db2stop" /usr/bin/su - $TDS_DB_USER -c "db2 terminate" (( i++ )) done else cfg_script=$HAWS_HOME"/config/HAWS_CFG_tds_"$instance".cfg" logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfg_script . $cfg_script $TDS_STOP_DIR_SERVER -k -I "$instance" $TDS_STOP_ADM_SERVER -k -I "$instance" logmsg HAWS_TRACE $MSG_TDS_DB_STOP "Stopping TDS...\n" /usr/bin/su - $TDS_DB_USER -c "db2 force application all" /usr/bin/su - $TDS_DB_USER -c "db2stop" /usr/bin/su - $TDS_DB_USER -c "db2 terminate" fi if [[ $TDS_VERSION < 6.4 ]];then logmsg HAWS_TRACE $MSG_TDS_WEB_STOP "Stopping TDS...\n" $TDS_STOP_WEB_SERVER fi } ############################################################################### # Function: read_config ############################################################################### # # Read our configuration file. Set up the command lines to stop TDS. # # ############################################################################### read_config() { [[ $VERBOSE_LOGGING == "high" ]] && set -x cfgfile=$HAWS_HOME"/config/HAWS_CFG_tds.cfg" logmsg HAWS_TRACE $MSG_READING_CONFIG "Reading configuration file: %s\n" $cfgfile . $cfgfile TDS_STOP_DIR_SERVER="$TDS_INSTALL_DIR/sbin/ibmslapd" TDS_STOP_ADM_SERVER="$TDS_INSTALL_DIR/sbin/ibmdiradm" if [[ $TDS_VERSION < 6.4 ]];then TDS_STOP_WEB_SERVER="$WAS_PROFILE_DIR/../bin/stopServer.sh $WAS_SERVER_NAME" fi # TDS_STOP_SERVER="$TDS_INSTALL_DIR/bin/ibmdirctl -D cn=$TDS_ADMIN -w $TDS_PASSWORD -p $TDS_PORT stop" # TDS_STOP_WEB_SERVER="$WAS_INSTALL_DIR/bin/stopServer.sh $WAS_SERVER_NAME" } # ############################################################################### # # SCRIPT EXECUTION SECTION # ############################################################################### # This section of the script is used to call into the various predefined # functions composed of the common code, and the script-specific functions. # # The intent of this section is to provide a high-level view of how this # script operates. ############################################################################### umask -S u=rw,g=,o= PROGNAME=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/sa/sbin PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all) FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH HACMP_HOME=/usr/es/sbin/cluster PRIMARYNODE=$($HACMP_HOME/utilities/get_local_nodename) if [[ $VERBOSE_LOGGING == "high" ]] then set -x version='1.2.1.1' fi init read_config stop_tds $* exit $HAWS_EXIT_SUCCESS # k*|$o@o$/םa֝a֝a&o$2vT./usr/es/sbin/cluster/sa/tds/sbin/tds_xutilst@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tds/sbin/tds_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)28 1.1 src/43haes/usr/sbin/cluster/sa/tds/sbin/tds_xutils.sh, hacmp, 61haes_r714 11/28/11 15:14:02 ################################################################### # # Function: listEnv_TDS_5_2 # # Description: This component doesnt have any ENV settings. # but as per the framwework we need this dummy function # # Arcguments: none # # output: None # ################################################################### function listEnv_TDS_5_2 { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ################################################################### # # Function: listInstances_TIVOLI_LDAP_SERVER # # Description: This component doesnt have instances. but as per the # framwework we need this dummy function # # Arcguments: componentid , nodes # # output: None # ################################################################### function listInstances_TIVOLI_LDAP_SERVER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ################################################################### # # Function: listProps_TIVOLI_LDAP_SERVER # # Description: List properties for the TIVOLI_LDAP_SERVER component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Application Name [TDS_Node1] # Primary Node Node1 #* Takeover Node(s) [] + #* Service Interface [] + # Netmask(IPv4)/Prefix Length(IPv6) [] #* Tivoli Directory Server Password [] #* Tivoli Directory Server Port [] # #* DB2 Instance Name [] #################################################################### function listProps_TIVOLI_LDAP_SERVER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset applicationname typeset primary typeset appname_val typeset primarynode_val typeset Service_Interface_list typeset Service_Interface_picklist typeset takeovernodes_val HAWS_HOME="/usr/es/sbin/cluster/sa/tds" TMPFILE=$HAWS_HOME"/tds_config_type" TDS_CONFIG_TYPE=`cat $TMPFILE` # : Discover values # /usr/es/sbin/cluster/sa/tds/sbin/cl_gettds -n > /usr/es/sbin/cluster/etc/sa_inst.x while IFS=: read applicationname primary do appname_val="$applicationname" primarynode_val="$primary" done < /usr/es/sbin/cluster/etc/sa_inst.x if [[ "$TDS_CONFIG_TYPE" != "DISTRIBUTED" && "$TDS_CONFIG_TYPE" != "PEERTOPEER" ]]; then #dicover the pick list for Service Interface Service_Interface_list=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 \ | awk ' { print $1 } ' ) # populate as commaseperated list Service_Interface_picklist=$(echo $Service_Interface_list | tr ' ' ',' ) Service_Interface_picklist=${Service_Interface_picklist%,} #dicover the pick list for Takeover Node(s) and populate as commaseperated list [[ -n "$primarynode_val" ]] && { takeovernodes_val=$(/usr/es/sbin/cluster/utilities/clnodename | grep -v "$primarynode_val" | tr ' ' ',' ) takeovernodes_val=${takeovernodes_val%,} } #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" print_start_tag PROPERTIES #* Application Name print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$appname_val" "" "" "" \ "-A" "string" "true" "true" \ "false" "true" "" "tdssa.cat,10,40" print_end_tag PROPERTY # Tivoli Directory Server Password print_start_tag PROPERTY "6" "PASSWD" "Tivoli Directory Server Password" "" \ "" "" "" "" \ "-w" "password" "true" "true" \ "false" "true" "" "tdssa.cat,3,130" print_end_tag PROPERTY # Takeover Node(s) print_start_tag PROPERTY "3" "TAKEOVER_NODES" "Takeover Node(s)" "" \ "" "$takeovernodes_val" "" "" \ "-n" "string" "true" "true" \ "true" "true" "" "tdssa.cat,3,40" print_end_tag PROPERTY #* Service Interface print_start_tag PROPERTY "4" "SERVICE_INTERFACE" "Service Interface" "" \ "$serviceip_val" "$Service_Interface_picklist" "" "" \ "-l" "string" "true" "true" \ "false" "true" "" "tdssa.cat,3,50" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) print_start_tag PROPERTY "5" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "" \ "-P" "string" "true" "false" \ "false" "true" "" "" print_end_tag PROPERTY # Tivoli Directory Server Port print_start_tag PROPERTY "7" "TDS_SERV_PORT" "Tivoli Directory Server Port" "" \ "" "" "" "" \ "-p" "integer" "true" "true" \ "false" "true" "" "tdssa.cat,3,140" print_end_tag PROPERTY # DB2 Instance Name print_start_tag PROPERTY "8" "DB2_INST_NAME" "DB2 Instance Name" "" \ "" "" "" "" \ "-i" "string" "true" "true" \ "false" "true" "" "tdssa.cat,3,150" print_end_tag PROPERTY # TDS Instance Name print_start_tag PROPERTY "10" "TDS_INSTANCE_NAME" "Tivoli Directory Instance Name" ""\ "" "" "" "" \ "-N" "string" "true" "true" \ "false" "true" "" "tdssa.cat,3,170" print_end_tag PROPERTY # Primary Node print_start_tag PROPERTY "2" "PRIMARY_NODE" "Primary Node" "" \ "$primarynode_val" "" "" "" \ "" "string" "false" "false" \ "false" "true" "" "tdssa.cat,3,35" print_end_tag PROPERTY else print_start_tag PROPERTIES #* Application Name print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$appname_val" "" "" "" \ "-A" "string" "true" "true" \ "false" "true" "" "tdssa.cat,10,40" print_end_tag PROPERTY # Tivoli Directory Server Password print_start_tag PROPERTY "6" "PASSWD" "Tivoli Directory Server Password" "" \ "" "" "" "" \ "-w" "password" "true" "true" \ "false" "true" "" "tdssa.cat,3,130" print_end_tag PROPERTY # TDS Number of Instances print_start_tag PROPERTY "9" "NUM_INSTANCES" "Number of Tivoli Directory Server Instances" ""\ "" "" "" "" \ "-I" "integer" "true" "true" \ "false" "true" "" "tdssa.cat,3,160" print_end_tag PROPERTY fi # command to execute to configure the instance print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/tds/sbin/cl_importtds -a" print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #---------------------- # MAIN STARTS HERE #---------------------- # # these functions will be consumed by clvtsa # tds_xutils=( typeset env_func="listEnv_TDS_5_2" typeset inst_func="listInstances_TIVOLI_LDAP_SERVER" typeset prop_func="listProps_TIVOLI_LDAP_SERVER" ) 0 k 'od/םaםaםa&2vT./usr/es/sbin/cluster/sa/tds/sbin/tdshaws_msg.shsslogddMSG__H_TDSHAWS_MSG= MSG_MF_TDSHAWS="tdshaws.cat" MSG_HAWS_=1 MSG_WAS_MISSING_NODES=1 MSG_RDB_UNSUPPORTED_RDB=2 MSG_BEGIN=3 MSG_PROCARG=4 MSG_NOACTION_SET=5 MSG_VALIDATE_SET=6 MSG_DEBUG_SET=7 MSG_TRACE_SET=8 MSG_MSGDEBUG_SET=9 MSG_SUBSYSTEM_SET=10 MSG_PROCDONE=11 MSG_SUBSYSTEM_INVALID=12 MSG_MISSING_SUBSYS=13 MSG_UNKNOWN_OPTION=14 MSG_IMPORT_START=15 MSG_CREATE_IMPORT=16 MSG_CREATE_REMOVE=17 MSG_SCRIPT_NAME_IS=18 MSG_CREATE_CONFIG=19 MSG_CALL_SUBSYSTEM=20 MSG_CLHAWS_IMPORT_DONE=21 MSG_CLHAWS_IMPORT_USAGE=22 MSG_NO_FALLOVER=23 MSG_FALLOVER_NODE_NAME_SET=24 MSG_PARSE_XMLFILE=25 MSG_CALLING_SCRIPT=26 MSG_READING_CONFIG=27 MSG_NO_SERVICE_LABEL=28 MSG_SERVICE_LABEL_SET=29 MSG_RGNAME_EXISTS=30 MSG_ASNAME_EXISTS=31 MSG_VG_NOT_FOUND=32 MSG_APP_SERVER_CREATED=33 MSG_RESOURCE_GROUP_CREATED=34 MSG_APP_MON_CREATED=35 MSG_RESOURCES_CREATED=36 MSG_IMPORT_CREATE_COMPLETE=37 MSG_APP_SERVER_DELETED=38 MSG_RESOURCE_GROUP_DELETED=39 MSG_APP_MON_DELETED=40 MSG_RESOURCES_DELETED=41 MSG_IMPORT_DELETE_COMPLETE=42 MSG_NOT_ENOUGH_FREE_SPACE=43 MSG_MKDIR_ERROR=44 MSG_COPY_ERROR=45 MSG_CONFIG_FILE_NOT_FOUND=46 MSG_CLUSTER_NOT_STABLE=47 MSG_WAS_VER5_DETECTED=48 MSG_WAS_VER6_DETECTED=49 MSG_WAS_VER6_NOTSUPPORTED=50 MSG_WAS_UNKNOWN_VERSION=51 MSG_WAS_NOT_INSTALLED=52 MSG_WAS_NO_CELLS=53 MSG_WAS_SPECIFY_CELL=54 MSG_WAS_UNKNOWN_CELL=55 MSG_WAS_CELL_NAME_SET=56 MSG_WAS_NODE_SET=57 MSG_WAS_PROCARG=58 MSG_WAS_PROCDONE=59 MSG_WAS_UNKNOWN_VG=60 MSG_IHS_UNKNOWN_VG=61 MSG_WAS_VG_FOUND=62 MSG_IHS_VG_FOUND=63 MSG_WAS_NONODES=64 MSG_WAS_NODE_NOT_FOUND=65 MSG_WAS_TOO_MANY_NODES_MATCHED=66 MSG_WAS_TOO_MANY_NODES=67 MSG_WAS_NODEFOUND=68 MSG_WAS_GET_SERVERNAME=69 MSG_WAS_FOUND_SNAME=70 MSG_WAS_START_SERVER=71 MSG_WAS_STOP_SERVER=72 MSG_WAS_START_NODE_AGENT=73 MSG_WAS_STOP_NODE_AGENT=74 MSG_IHS_START_SERVER=75 MSG_IHS_STOP_SERVER=76 MSG_IHS_WARN_SERVERNAME=77 MSG_WAS_NO_MATCH_SERVER_NAME=78 MSG_WAS_NO_MATCH_INSTALL_DIR=79 MSG_WAS_NO_MATCH_CELL=80 MSG_WAS_NO_MATCH_VG=81 MSG_WAS_NO_MATCH_SERVICE_LABEL=82 MSG_IHS_NO_MATCH_INSTALL_DIR=83 MSG_IHS_NO_MATCH_VG=84 MSG_WAS_NO_MATCH_NODE=85 MSG_DM_UNKNOWN_VG=86 MSG_DM_VG_FOUND=87 MSG_DM_VER5_DETECTED=88 MSG_DM_VER6_DETECTED=89 MSG_DM_VER6_NOTSUPPORTED=90 MSG_DM_UNKNOWN_VERSION=91 MSG_DM_NOT_INSTALLED=92 MSG_DM_GET_SERVERNAME=93 MSG_DM_FOUND_SNAME=94 MSG_DM_PROCARG=95 MSG_DM_PROCDONE=96 MSG_DM_NOSERVERXML=97 MSG_DM_USINGCONFIG=98 MSG_DM_NO_CELLS=99 MSG_DM_SPECIFY_CELL=100 MSG_DM_UNKNOWN_CELL=101 MSG_DM_CELL_NAME_SET=102 MSG_DM_START_SERVER=103 MSG_DM_STOP_SERVER=104 MSG_DM_NO_MATCH_VG=105 MSG_DM_NO_MATCH_SERVICE_LABEL=106 MSG_FINDVG_USAGE=107 MSG_FIND_VG=108 MSG_FOUND_LV=109 MSG_FOUND_VG=110 MSG_WAS_MON_SERVER_CHECKING=111 MSG_WAS_MON_SERVER_IS_HEALTHY=112 MSG_WAS_MON_SERVER_IS_DEAD=113 MSG_WAS_MON_NODE_AGENT_CHECKING=114 MSG_WAS_MON_NODE_AGENT_IS_HEALTHY=115 MSG_WAS_MON_NODE_AGENT_IS_DEAD=116 MSG_WAS_MON_IHS_CHECKING=117 MSG_WAS_MON_IHS_IS_HEALTHY=118 MSG_WAS_MON_IHS_IS_DEAD=119 MSG_DM_MON_CHECKING=120 MSG_DM_MON_IS_HEALTHY=121 MSG_DM_MON_IS_DEAD=122 MSG_DB2_VER81_DETECTED=123 MSG_DB2_UNKNOWN_VERSION=124 MSG_DB2_NOT_INSTALLED=125 MSG_DB2_UNKNOWN_VG=126 MSG_DB2_VG_FOUND=127 MSG_DB2_PROCARG=128 MSG_DB2_INST_HOME_SET=129 MSG_DB2_PROCDONE=130 MSG_DB2_NO_INST_HOME=131 MSG_DB2_INSTALL_DIR_SET=132 MSG_DB2_INST_NAME_SET=133 MSG_DB2_NO_INST_NAME=134 MSG_DB2_USING_DEFAULT_DB=135 MSG_DB2_DATABASE_NAME_SET=136 MSG_DB2_START=137 MSG_DB2_STOP=138 MSG_DB2_NOT_ACCESSIBLE=139 MSG_DB2_WARN_DB2NODESCFG=140 MSG_DB2_WARN_DB2RHOSTS=141 MSG_DB2_NO_MATCH_INSTANCE_DIR=142 MSG_DB2_NO_MATCH_INSTANCE_NAME=143 MSG_DB2_NO_MATCH_DATABASE_NAME=144 MSG_DB2_MON_CHECKING=145 MSG_DB2_MON_NO_PROFILE=146 MSG_DB2_MON_CONNECT_FAILED=147 MSG_DB2_MON_PING_FAILED=148 MSG_DB2_MON_IS_HEALTHY=149 MSG_DB2_MON_CONNECT_SUCCEEDED=150 MSG_DB2_MON_PING_SUCCEEDED=151 MSG_TDS_PROCARG=152 MSG_TDS_PROCDONE=153 MSG_TDS_START=154 MSG_TDS_STOP=155 MSG_TDS_VER51_DETECTED=156 MSG_TDS_UNKNOWN_VERSION=157 MSG_TDS_NOT_INSTALLED=158 MSG_TDS_UKNOWN_VG=159 MSG_TDS_VG_FOUND=160 MSG_TDS_DB_UKNOWN_VG=161 MSG_TDS_DB_VG_FOUND=162 MSG_TDS_ADMIN_SET=163 MSG_TDS_PASSWORD_SET=164 MSG_TDS_PORT_SET=165 MSG_TDS_DB_USER_SET=166 MSG_TDS_NO_PASSWORD=167 MSG_TDS_NO_PORT=168 MSG_TDS_NO_DB_USER=169 MSG_TDS_WARN_CONF_COPY=170 MSG_TDS_WARN_IBMSLAPD_CONF_SUM=171 MSG_TDS_NO_MATCH_INSTALL_DIR=172 MSG_TDS_NO_MATCH_VG=173 MSG_TDS_NO_MATCH_DB_DIR=174 MSG_TDS_NO_MATCH_DB_VG=175 MSG_TDS_NO_MATCH_ADMIN=176 MSG_TDS_NO_MATCH_PASSWORD=177 MSG_TDS_NO_MATCH_PORT=178 MSG_TDS_NO_MATCH_DB_USER=179 MSG_TDS_NO_MATCH_CONF_FILE=180 MSG_TDS_MON_CHECKING=181 MSG_TDS_MON_IS_HEALTHY=182 MSG_TDS_MON_IS_DEAD=183 MSG_MISSING_MSG_DEFINITION=184 MSG_DEBUG_MSG=185 MSG_AS_CREATE_FAILED=186 MSG_RG_CREATE_FAILED=187 MSG_ASMON_EXISTS=188 MSG_ASMON_CREATE_FAILED=189 MSG_RGMON_EXISTS=190 MSG_RGMON_CREATE_FAILED=191 MSG_TDS_SERVICE_ADD=192 MSG_TDS_SERVICE_REMOVE=193 MSG_TDS_SERVICE_ADD_FAIL=194 MSG_TDS_SERVICE_REMOVE_FAIL=195  k'r$od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tds/sbin/GetServerNames.classdd1n - ./0 1 2 3 4 .56 789:; <= <>? @A <BC DE <FG <H IJ IKLsccs_idLjava/lang/String; ConstantValueM copyrightNmain([Ljava/lang/String;)VCodeLineNumberTable'(Ljava/lang/String;Ljava/lang/String;)Vusage()Vtraverse'(Lorg/w3c/dom/Node;Ljava/lang/String;)V SourceFileGetServerNames.java '(O PQGetServerNames %& %( RS )* TU$Usage: GetServerNames file-name typeV WXwhere file-name: XML file to parse0 type: either APPLICATION_SERVER ot NODE_AGENTY Z[ \] serverEntries^ _` ab serverNamec de f] serverType ghi jk lmBasicXmlParser}sccs @(#)42 1.2 src/43haes/usr/sbin/cluster/haws/sbin/GetServerNames.java, hacmp.assist, 53haes_r560 1/14/04 08:17:48(C) Copyright IBM Corp. 2003java/lang/Systemexit(I)V readXmlFile*(Ljava/lang/String;)Lorg/w3c/dom/Document;outLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)Vorg/w3c/dom/Node getNodeType()S getNodeName()Ljava/lang/String;java/lang/String compareTo(Ljava/lang/String;)I getAttributes()Lorg/w3c/dom/NamedNodeMap;org/w3c/dom/NamedNodeMap getNamedItem&(Ljava/lang/String;)Lorg/w3c/dom/Node; getNodeValue getChildNodes()Lorg/w3c/dom/NodeList;org/w3c/dom/NodeList getLength()Iitem(I)Lorg/w3c/dom/Node;!  !"#D* Y*2*2L$() * ,-%&#P *+, *+N*-,$01 23567 '(#I!    $:;<= >)*#+>J+<+:::,  +:&6*,$6 BCE"F2GBHKISK[L`MoN}MP+,H_SER kq$od/םa՝a֝a&2vT./usr/es/sbin/cluster/sa/tds/sbin/BasicXmlParser.classdd1U &' & ( )* +, -./ 0 12 +3 14 -5 16 78 79:;sccs_idLjava/lang/String; ConstantValue< copyright=()VCodeLineNumberTable readXmlFile*(Ljava/lang/String;)Lorg/w3c/dom/Document; writeXmlFile+(Lorg/w3c/dom/Document;Ljava/lang/String;)Vtraverse(Lorg/w3c/dom/Node;)V SourceFileBasicXmlParser.java #org/apache/xerces/parsers/DOMParser >? @Aorg/xml/sax/SAXExceptionB CDE FGjava/io/IOException "#H IJ KD LM F? NOP QR STBasicXmlParserjava/lang/Objecttsccs @(#)51 1.2 src/43haes/usr/sbin/cluster/sa/tds/sbin/BasicXmlParser.java, hacmp, 61haes_r714 11/30/11 12:55:27(C) Copyright IBM Corp. 2003parse(Ljava/lang/String;)V getDocument()Lorg/w3c/dom/Document;java/lang/SystemerrLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/Object;)Vorg/w3c/dom/Node getNodeType()Sout getNodeName()Ljava/lang/String; getChildNodes()Lorg/w3c/dom/NodeList;org/w3c/dom/NodeList getLength()Iitem(I)Lorg/w3c/dom/Node;!!* *+2YM,+,N:N:N-$ 2 27 8?9:;!?$<&=.>0@ !"*+  GH"#|D+ = + +N-#6-*- & MN OPQ#R1S=RCU$%  k%o /םaX՝a֝a& 2vT./usr/es/sbin/cluster/sa/tds/config/tds_config.xmlass  kF%o/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/tds/config/tds_config.xsdass lex k%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/tsmserver/tds_AA kh%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/tsmserver/sbinAA k %oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/tsmserver/confignfig.xAA k$od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverGlobalsnfigdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverGlobals.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverGlobals.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM . /usr/es/lib/ksh93/func_include PATH=$PATH:/usr/es/sbin/cluster/sa/sbin:/usr/es/sbin/cluster/utilities FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE:$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm DSM_DIR=/opt/tivoli/tsm/server/bin/tsmdiag export PATH FPATH DSM_DIR #--------------------------------- # Global definitions #--------------------------------- SA_SBIN=/usr/es/sbin/cluster/sa/sbin TSM_SRV_DIR=/opt/tivoli/tsm TSM_SERVER_HA_SBIN=/usr/es/sbin/cluster/sa/tsmserver/sbin TSM_SERVER_HA_CONFIG=/usr/es/sbin/cluster/sa/tsmserver/config TSM_SERVER_BIN=/opt/tivoli/tsm/server/bin CLVTCMD=/usr/es/sbin/cluster/utilities/clvt KLIB_TSM_SERVER_HACMPLOG_ENTRY="tsm_server.log" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/$KLIB_TSM_SERVER_HACMPLOG_ENTRY LOG_FILE=$(clodmget -q name=$KLIB_TSM_SERVER_HACMPLOG_ENTRY -f value -n HACMPlogs) LOG_FILE="$LOG_FILE/$KLIB_TSM_SERVER_HACMPLOG_ENTRY" INFO_FLAG="true" WARN_FLAG="true" DEBUG_FLAG="false" ERROR_FLAG="true" TRACE_FLAG="true" >  k$odj$/םa֝a֝a&j$2vT./usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverUtilitiesigdd# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverUtilities.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #---------------------------------------------------------------------------- # Function: # isVolumeGroupAlreadyDefined # # Purpose: # Checks to ensure the volume group passed in is not already defined to # PowerHA SystemMirror # # Arguments: # (1) Volume Group Name # # Returns: # 0 volume group IS defined to PowerHA SystemMirror # 1 volume group is NOT defined to PowerHA SystemMirror #---------------------------------------------------------------------------- function isVolumeGroupAlreadyDefined { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset defVG=$1 typeset vgs vg rg clvt query resource_group >/dev/null 2>&1 if [[ $? == "0" ]];then RGS=$(clvt query resource_group) for rg in $RGS; do vgs=$(clvt query resource_group $rg | grep VOLUME_GROUP | awk -F'=' '{ print$2 }') vgs=${vgs//\"/} for vg in $vgs; do [[ "$vg" == "$defVG" ]] && { return 0 } done vgs=$(clvt query resource_group $rg | grep \ CONCURRENT_VOLUME_GROUP | awk -F'=' '{ print $2 }') vgs=${vgs//\"/} for vg in $vgs; do [[ "$vg" == "$defVG" ]] && { return 0 } done done fi return 1 } #---------------------------------------------------------------------------- # Function: # isServiceIPLabelAlreadyDefined # # Purpose: # Validate that the service IP label isn't already defined in the PowerHA SystemMirror # cluster. If it is already defined, report an error and exit this script # # Arguments: # (1) Service IP Label # # Return: # 1 if service IP label is not defined # 0 if service IP label is already defined #---------------------------------------------------------------------------- function isServiceIPLabelAlreadyDefined { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset serviceIP=$1 clvt query resource_group >/dev/null 2>&1 if [[ $? == "0" ]];then RGS=$(clvt query resource_group) for rg in $RGS; do ips=$(clvt query resource_group $rg | grep \ SERVICE_LABEL | awk -F= '{ print $2 }') ips=${ips//\"/} for ip in $ips; do [[ "$ip" == "$serviceIP" ]] && { return 0 } done done fi return 1 } #---------------------------------------------------------------------------- # Function: # getServiceNetwork # # Purpose: # Determine the appropriate network to place the service IP label # on based on adapter count per network per node # # Arguments: # (1) network type in PowerHA SystemMirror # (2) list of nodes to find interfaces for # # Output: # network name to place service IP label on # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function getServiceNetwork { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x serv_addr_type=$1 NODES=$2 validv6Networks="" validv4Networks="" typeset NETWORKS=$(clvt query network | sort -u) typeset validNetworks typeset -A netXnodeCount for network in $NETWORKS do fam=$(clvt query network $network| awk -F= '$1 ~ /NET_FAMILY/ { print $2 }' | sed -e "s/\"//g") if [[ "$fam" == "2" ]] then validv6Networks=$(echo "$network $validv6Networks") else validv4Networks=$(echo "$network $validv4Networks") fi done INTERFACES=$(clvt query interface | sort -u) for interface in $INTERFACES; do node=$(clvt query interface $interface | awk -F= '$1 ~ /NODE/ {print $2 }' | sed -e "s/\"//g") net=$(clvt query interface $interface | awk -F= '$1 ~ /NETWORK/ {print $2 }' | sed -e "s/\"//g") [[ -n $node && -n $net ]] && { typeset -i count=${netXnodeCount[${net}_${node}]} (( count++ )) netXnodeCount[${net}_${node}]=$count } done typeset -i invalid=0 if [[ "$serv_addr_type" == "2" || -z $validv4Networks ]] then for network in $validv6Networks; do invalid=0 for node in $NODES; do [[ ${netXnodeCount[${network}_${node}]} == 0 ]] && { invalid=1 } done [[ $invalid == 0 ]] && { echo $network return 0 } done fi for network in $validv4Networks; do invalid=0 for node in $NODES; do [[ ${netXnodeCount[${network}_${node}]} == 0 ]] && { invalid=1 } done [[ $invalid == 0 ]] && { echo $network return 0 } done return 1 } ####################################################################################################### # # Function : validateNodes # # Purpose : Validate if the Primary and takeover nodes are not repetetive. # # Arguments : PRIMNODE # TAKEOVNODES # # Returns: 0 for Sucess # 1 for Failure # ###################################################################################################### function validateNodes { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x for node in $2 do [[ $1 == $node ]]&& return 1 done return 0 } #---------------------------------------------------------------------------- # Function: # getUnusedName # # Purpose: # Obtain an un-used name for an PowerHA SystemMirror component (application, monitor, # resource group, etc) # # Arguments: # (1) by reference - name # (2) type - (as used in clvt command # resource_group | # application | # application_monitor, etc.) # # Output: # output contains the available name # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function getUnusedName { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset name=$1 typeset type=$2 typeset newname=$name typeset ret typeset -i count=1 clvt query $type $newname >/dev/null 2>&1 ret=$? while [[ $ret == "0" ]]; do (( count++ )) # Give up after 9 attempts if (( $count > 9 )); then echo $name return 1 fi newname=${name:0:31} newname=${newname}${count} clvt query $type $newname >/dev/null 2>&1 ret=$? done echo $newname return 0 } ####################################################################################################### # # Function : validateAppName # # Purpose : Validate if the Application name entered has valid charactes. charecters can be # [a-z][A-z][0-9]_ # # Arguments :APPLICATION_ID # # Returns: 0 for Sucess # 1 for Failure # ###################################################################################################### function validateAppName { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x appname=$1 [[ -n ${appname//[a-zA-Z0-9_]/} ]] && return 1 return 0 } ##################################################################################################### # # Function : isipv6addr # # Purpose : Finds the address is IPv4 or IPV6 # # Args: # # # Returns : # 0 for success # 1 for failure (when the address is not IPv6) # ####################################################################################################### function isipv6addr { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset v6addr=${1:-} abc=$(echo $v6addr|awk ' { n=split($1, A, ":") if(n==1) { print n exit } for(i=1; i<=n; i++) { if(length(A[i])) { if(i == n) printf "%s", A[i] else printf "%s:", A[i] } else { if(i==1) s=1 else s = 9-n for(j=1; j<=s; j++) printf "%s:", "0" } } }') if [[ $abc == 1 ]] then return 1 else return 0 fi } ###### lV$od)X/םa֝a֝a&L:2vT./usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsm_serv_configesigdd    e #-ainorst "IS_cdlmp$1=AEMNOPRT\fghuv&./BCDGLVy%()02:FHKU[]bwx{}',34;>?k|!56789YqzW*@Zh !e `eJ"2 $bW#w>2RʊtD"@DTHt*|^.Q*8P(wܪ$:\F|SF). ($tLv(%L'u ]ǩ%.#j.# =$ Fn ށ_NQ/Q eEW]p#wܪ$3TP5^uɎE$PDTHdJ%5NąK E*#O*PPTHtYRʊt$Dy "q9,q"THtYRcZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkXj)3z#s7sB4❱nLו,0pZV! Stt2Iw/B&64ʢCB4❆n:f -qFX7)u58򞉤csk੩ֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkX條a(QDnfhF|SaxA"=!2BBH?7< ? Η]V0ꊯt1cO*PQ"I-(D@zHꊯt]xkyTH$&M#ŠEIQU]뮴cO*PQ!ɤ@J" =$Xs$@"#ȕIDH((3pN^p8YԲ=LNAK8v+k)%`XJ%~-aXWsG("cz ڬ9( 'jaNv&2IwNFyTHt*l9J. n3Ώ Mp#wIwMS)tyyO "as7sЍ*akK\k@fFQ5]MN4`i;k੩ƵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ0XJ/ZƔ A $'*o]u` E((4XdUDR@DoT @WÂ!X+ ,Î8x"9%dajǔ(H37Z-KR#SN)aat*j*pHDhqXV00箺T,뀃W1^wIvLN&&"7BkpzZ,xpqKa=I[]*\Ͱ$Îz뤴A n5s޺7-ILN"!"@ ((nPx\ޖ}`Øq͝#pozXJ:Ҍ+)ч^S֔xGIiF8$Î95MRպV RZQe2R=Lޚ[` $ƺ \k𹱿`rXJ9loJ]7)u58 NF7񜣗|5;c\9s9s9s9s9s9s9s9s9s9.j)bs}lR⨧8/\,G5gPrl:&WAQJ=믹ɉ 8 @LzBLj@ӂ゘c9s9s9s9s9s9s9s9s9s9n 5 D Pr*#eQcrf`7hF߫ W|ܕ4'#K|z+eP7/c7;z^)smb0;^S9{V5L510y|N"9.`"Biz1nRjq1GӺQ2u58/|5;A,k9s9s9s9s9s9s9s9s9s1E:QAA*VvDl#jafB9$ DHh00d$:]wYQU\ي 1^u͘g$:\V|뎥!J]u` G{8Ղ]r/ZŎ&LMP$E$OaB9sX`faI+# P2RÎ*8<B#,2 0【%@*3w>_"J" =$F$LL8$ avQ!n4Bve1VrQ*8P(4Y"eGa K6 ۢe1A*a;R=L)ta"PxBHHQqHè ۣs7@"LU.fl8G@@zH,2 0【%D#uYWVbyf\;&Î"<ȃƋ$LL8$ aƁ;rs7sUNT(4Y"eGa K=6)(cXG[fK7L||Er/Z .}a(<+*e^\Kx"9%daj" %h.ftxjoxՂ"c*3w2R4 ,.׺°7e~,D$"?Z3w:<57^,.h@%G,9J. n3Ώ M>$KLIB_DEFAULT_LOGFILE $TSM_SRV_DIR/db2/bin/db2ilist 2>>$KLIB_DEFAULT_LOGFILE | tee -a $KLIB_DEFAULT_LOGFILE else print >>$KLIB_DEFAULT_LOGFILE /usr/bin/dspmsg -s 1 tsmserversa.cat 9999 '# Warning: DB2 could not be found on node "%1$s".\n' "$node" | tee -a $KLIB_DEFAULT_LOGFILE fi else cl_rsh $node "[[ -e $TSM_SRV_DIR/db2/bin/db2ilist ]]" if (( $? == 0 )); then print "\ncl_rsh \"$node\" \"$TSM_SERVER_HA_SBIN/cl_tsm_server_query -I\"" >>$KLIB_DEFAULT_LOGFILE cl_rsh "$node" "$TSM_SERVER_HA_SBIN/cl_tsm_server_query -I" 2>>$KLIB_DEFAULT_LOGFILE | tee -a $KLIB_DEFAULT_LOGFILE else print >>$KLIB_DEFAULT_LOGFILE /usr/bin/dspmsg -s 1 tsmserversa.cat 9999 '# Warning: DB2 could not be found on node "%1$s".\n' "$node" | tee -a $KLIB_DEFAULT_LOGFILE fi fi done print >>$KLIB_DEFAULT_LOGFILE return 0 } ############### # main ############### [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset nodes list instance application_id while getopts q:i:n:IL opt do case $opt in q) # application_id of the instance application_id=$OPTARG ;; i) # TSM server instance name instance=$OPTARG ;; L) # List instances list="Y" ;; n) # List of nodes nodes=$OPTARG ;; I) # calling from other node for instances local=$(get_local_nodename) instanceList $local exit 0 ;; esac done # Discovery for Instance List [[ -n $list ]] && { [[ -z $nodes ]] && { nodes=$(clvt query node) } instanceList "$nodes"| sort -u exit 0 } # Discovery for Application name [[ -n $instance ]]&& { echo "#application_name:primary" local_node=$(get_local_nodename) echo $instance"_"$local_node":"$local_node exit 0 } # Discovery for modifying the Smart Assist Application [[ -n $application_id ]] && { echo "#primary:takeover:instance:instance_dir:VG_list:serviceip:prefix:user:password" rg=$(clodmget -q "name=RESOURCE_GROUP and application_id=$application_id" -f value -n HACMPsa_metadata) [[ -z $rg ]]&& exit 1 instance_dir=$(clodmget -q "name=INSTANCE_DIRECTORY and application_id=$application_id" -f value -n HACMPsa_metadata) instance=$(clodmget -q "name=INSTANCE_NAME and application_id=$application_id" -f value -n HACMPsa_metadata) user=$(clodmget -q "name=INSTANCE_USER and application_id=$application_id" -f value -n HACMPsa_metadata) password=$(clodmget -q "name=INSTANCE_PASSWORD and application_id=$application_id" -f value -n HACMPsa_metadata) nodes=$(clvt query resource_group $rg | grep -w NODES|awk -F= '{ print $2 }' | sed -e "s/\"//g") VG_list=$(clvt query resource_group $rg | grep VOLUME_GROUP|awk -F= '{ print $2 }' | sed -e "s/\"//g") serviceip=$(clvt query resource_group $rg | grep SERVICE_LABEL|awk -F= '{ print $2 }' | sed -e "s/\"//g") prefix=$(clodmget -q "ip_label=$serviceip" -f netmask -n HACMPadapter) takeover="" primary="" for n in $nodes do if [[ -z $primary ]] then primary=$n else takeover=$(echo "$takeover $n") fi done echo $primary":"$takeover":"$instance":"$instance_dir":"$VG_list":"$serviceip":"$prefix":"$user":"$password exit 0 } e k$odj/םa֝a֝a&j2vT./usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmservermonitorsigdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmservermonitor.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmservermonitor.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################################### # # NAME: # cl_tsmservermonitor # # PURPOSE: # monitor script of Smart Assist for TSM server instance # # ARGUMENTS: # -i TSM instance name # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# . /usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverGlobals eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == "high" ]] then PS4_TIMER=true set -x version='1.2' fi KLIB_HACMPLOG_ENTRY=$KLIB_TSM_SERVER_HACMPLOG_ENTRY typeset inst_name while getopts i:d: opt do case $opt in i) # instance name, which will be highly available inst_name=$OPTARG ;; esac done dat=$(/usr/bin/date) KLIB_SA_logmsg INFO 2 30 tsmserversa.cat "Starting monitoring of TSM server instance %1\$s at %2\$s \n" $inst_name "$dat" app_id=$(clodmget -q "name=INSTANCE_NAME and value=$inst_name" -f application_id -n HACMPsa_metadata) inst_dir=$(clodmget -q "application_id=$app_id and name=INSTANCE_DIRECTORY" -f value -n HACMPsa_metadata) PID="" [[ -f $inst_dir/dsmserv.v6lock ]] && { read R1 R2 R3 PID R4 < $inst_dir/dsmserv.v6lock } #for IPv4 communication if [[ -z $PID ]];then [[ -f $inst_dir/dsmserv.lock ]] && { read R1 R2 R3 PID R4 < $inst_dir/dsmserv.lock } fi # check if the pid exists, if not exit ps -ef|grep $PID|grep -v grep >/dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 2 31 tsmserversa.cat "dsmserv deamon is not running with PID %1\$s present in dsmserv.v6lock file, for TSM server instance %2\$s \n" $PID $inst_name exit 1 } user=$(clodmget -q "application_id=$app_id and name=INSTANCE_USER" -f value -n HACMPsa_metadata) set +x password=$(clodmget -q "application_id=$app_id and name=INSTANCE_PASSWORD" -f value -n HACMPsa_metadata | /usr/es/sbin/cluster/cspoc/cldecodearg) set -x # The q sess will test TSM server connection information $DSM_DIR/dsmadmc -quiet -se=$inst_name -id=$user -pass=$password q sess > /dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 2 32 tsmserversa.cat "Monitoring is failed while querying TSM server connection information for TSM server instance %1\$s \n" $inst_name exit 1 } dat=$(/usr/bin/date) KLIB_SA_logmsg INFO 2 33 tsmserversa.cat "TSM server instance %1\$s is monitored sucessfully at %2\$s\n" $inst_name "$dat" exit 0 an~B k$od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverstartrsigdd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverstart.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)25 1.2 src/43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverstart.sh, hacmp.assist, 61haes_r720, 1539B_hacmp720 9/11/15 17:15:03 ############################################################################################### # # NAME: # cl_tsmserverstart # # PURPOSE: # sart script of Smart Assist for TSM server instance # # ARGUMENTS: # -i TSM instance name # -d TSM instance directory # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ VERBOSE_LOGGING == "high" ]] && set -x . /usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverGlobals KLIB_HACMPLOG_ENTRY=$KLIB_TSM_SERVER_HACMPLOG_ENTRY typeset inst_name inst_dir while getopts i:d: opt do case $opt in i) # instance name, which will be highly available inst_name=$OPTARG ;; d) # instance directory inst_dir=$OPTARG ;; esac done dat=$(/usr/bin/date) KLIB_SA_logmsg INFO 2 1 tsmserversa.cat "\n starting the TSM server instance %1\$s with instance directory %2\$s at %3\$s\n" $inst_name $inst_dir "$dat" #starting DB2 before TSM server instance, so we can avoid of having host name same across all nodes /usr/bin/su $inst_name -c ". ~$inst_name/.profile && db2gcf -u -p 0" >/dev/null 2>&1 stat=$? (( $stat == 0 )) || { exit $stat } $TSM_SERVER_BIN/rc.dsmserv -u $inst_name -i $inst_dir quiet & >/dev/null 2>&1 exit $? w kn$od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverstoprsigdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverstop.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverstop.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################################### # # NAME: # cl_tsmserverstop # # PURPOSE: # stop script of Smart Assist for TSM server instance # # ARGUMENTS: # -i TSM instance name # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# . /usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverGlobals [[ "VERBOSE_LOGGING" == "high" ]] && set -x KLIB_HACMPLOG_ENTRY=$KLIB_TSM_SERVER_HACMPLOG_ENTRY typeset inst_name while getopts i:d: opt do case $opt in i) # instance name, which will be highly available inst_name=$OPTARG ;; esac done dat=$(/usr/bin/date) app_id=$(clodmget -q "name=INSTANCE_NAME and value=$inst_name" -f application_id -n HACMPsa_metadata) inst_dir=$(clodmget -q "application_id=$app_id and name=INSTANCE_DIRECTORY" -f value -n HACMPsa_metadata) KLIB_SA_logmsg INFO 2 20 tsmserversa.cat "Stoping TSM server instance %1\$s at %2\$s\n" $inst_name "$dat" [[ -f $inst_dir/dsmserv.v6lock ]] && { read R1 R2 R3 PID R4 < $inst_dir/dsmserv.v6lock } #for IPv4 communication if [[ -n $PID ]];then [[ -f $inst_dir/dsmserv.lock ]] && { read R1 R2 R3 PID R4 < $inst_dir/dsmserv.lock } fi user=$(clodmget -q "application_id=$app_id and name=INSTANCE_USER" -f value -n HACMPsa_metadata) set +x password=$(clodmget -q "application_id=$app_id and name=INSTANCE_PASSWORD" -f value -n HACMPsa_metadata | /usr/es/sbin/cluster/cspoc/cldecodearg) set -x # The q sess will halt TSM server connection $DSM_DIR/dsmadmc -quiet -se=$inst_name -id=$user -pass=$password halt > /dev/null 2>&1 [[ $? == 0 ]] && { dat=$(/usr/bin/date) KLIB_SA_logmsg INFO 2 54 tsmserversa.cat "TSM server instance %1\$s is stopped at %2\$s\n" $inst_name "$dat" sleep 6 exit 0 } KLIB_SA_logmsg DEBUG 2 21 tsmserversa.cat "The PID %1\$s of the stopped dsmserv for TSM server instance %2\$s\n" $PID $inst_name [[ -n $PID ]] && { ps -ef|grep $PID|grep -v grep [[ $? == 1 ]] && exit 0 } [[ -n $PID ]] && { kill -9 $PID res=$(echo $?) [[ $res == "0" ]] && { ps -ef|grep -w db2acd|awk '{print $2}'|xargs kill -9 > /dev/null 2>&1 ps -ef|grep -w db2sysc|awk '{print $2}'|xargs kill -9 > /dev/null 2>&1 dat=$(/usr/bin/date) KLIB_SA_logmsg INFO 2 54 tsmserversa.cat "TSM server instance %1\$s is stopped at %2\$s\n" $inst_name "$dat" } exit $res } @@ k$od7 /םa֝a֝a&7 2vT./usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverdiscoveryigdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverdiscovery.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverdiscovery.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################################### # # NAME: # cl_tsmserverdiscovery # # PURPOSE: # Discovers TSM server configuration is installed or not it checks the fileset # tivoli.tsm.server is installed or not. # # ARGUMENTS: # n/a # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverGlobals function discover_tsm_server { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x /usr/bin/lslpp -iq tivoli.tsm.server >> $LOG_FILE 2>&1 # For TSM server version 8.0.0 and more,fileset tivoli.dsm.server does # not exist,hence verify TSM server availability from installed packages if (( $? != 0 )) then /opt/IBM/InstallationManager/eclipse/tools/imcl listInstalledPackages 2>>$LOG_FILE| grep -q tivoli.dsm.server && return 1 else return 1 fi return 0 } typeset result discover_tsm_server result=$? echo "TSM server smart assist:TSM_SERV:TSM server:TSM_SERVER:$result" exit 0 I kj$odX/םa֝a֝a&X2vT./usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmservmanualveryigdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmservmanual.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmserver/sbin/cl_tsmservmanual.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################################### # # NAME: # cl_tsmservmanual # # PURPOSE: # Manual configuration for TSM server instance. This script is used when manual option # is selected in SMIT # # ARGUMENTS: # n/a # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# . /usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverGlobals . /usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsmserverUtilities KLIB_HACMPLOG_ENTRY=$KLIB_TSM_SERVER_HACMPLOG_ENTRY typeset APPLICATION_ID # Smart Assist Application Name of the TSM server instance. typeset PRIMNODE TAKEOVNODES # primary and takeover nodes. typeset INSTANCE_ID # TSM server instance name. typeset INSTANCE_DIR # TSM server instance Directory. typeset SHARED_VGS # Shared VGs between the nodes in the cluster. typeset SERVICE_IP # Service IP for the TSM instance. typeset NETMASK # Netmask/ prefix Length of service IP address. typeset USER # TSM user id. typeset XML_PATH="" while getopts f: opt do case $opt in f) # xml file path XML_PATH=$OPTARG ;; esac done dspmsg -s 1 tsmadminsa.cat 57 "configuring TSM server Instance using manual configuration\n" KLIB_SA_logmsg INFO 1 57 tsmserversa.cat "configuring TSM server Instance using manual configuration\n" INSTANCE_ID=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_SERVER_HA_CONFIG/cl_tsmserver_config.xsd -t Instance|awk -F= '{ print $2 }') if [[ $? == 0 && -n $INSTANCE_ID ]] then APPLICATION_ID=$($TSM_SERVER_HA_SBIN/cl_tsm_server_query -i $INSTANCE_ID|grep -v application_name|awk -F: '{ print $1 }') validateAppName "$APPLICATION_ID" [[ "$?" == "1" ]] && { KLIB_SA_logmsg ERROR 1 11 tsmserversa.cat "TSM server smart assist Application id=%1\$s is not in the rage [a-z][A-z][0-9]_.\n" "$APPLICATION_ID" exit 1 } else KLIB_SA_logmsg ERROR 1 58 tsmserversa.cat "No value is specified for Instance property in TSM server xml file\n" exit 1 fi PRIMNODE=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_SERVER_HA_CONFIG/cl_tsmserver_config.xsd -t PrimaryNode|awk -F= '{ print $2 }') [[ $? != 0 || -z $PRIMNODE ]] && { KLIB_SA_logmsg ERROR 1 59 tsmserversa.cat "No value is specified for PrimaryNode property in TSM server xml file\n" exit 1 } TAKEOVNODES=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_SERVER_HA_CONFIG/cl_tsmserver_config.xsd -t TakeoverNodes|awk -F= '{ print $2 }') if [[ $? == 0 && -n $TAKEOVNODES ]] then TAKEOVNODES=$(echo $TAKEOVNODES|tr "," " ") else KLIB_SA_logmsg ERROR 1 60 tsmserversa.cat "No value is specified for TakeoverNodes property in TSM server xml file\n" exit 1 fi INSTANCE_DIR=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_SERVER_HA_CONFIG/cl_tsmserver_config.xsd -t InstanceDirectory|awk -F= '{ print $2 }') [[ $? != 0 || -z $INSTANCE_DIR ]] && { KLIB_SA_logmsg ERROR 1 61 tsmserversa.cat "No value is specified for InstanceDirectory property in TSM server xml file\n" exit 1 } SERVICE_IP=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_SERVER_HA_CONFIG/cl_tsmserver_config.xsd -t IPAddress_or_name|awk -F= '{ print $2 }') [[ $? != 0 || -z $SERVICE_IP ]] && { KLIB_SA_logmsg ERROR 1 62 tsmserversa.cat "No value is specified for ServiceIPs property in TSM server xml file\n" exit 1 } SERVICE_IP=$(/usr/bin/host $SERVICE_IP|awk -F" " '{print $1}'|awk -F. '{print $1}') [[ $? != 0 || -z $SERVICE_IP ]] && { KLIB_SA_logmsg ERROR 1 66 tsmserversa.cat "No entry for service IP in /etc/host file\n" exit 1 } NETMASK=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_SERVER_HA_CONFIG/cl_tsmserver_config.xsd -t Prefix_or_Netmask|awk -F= '{ print $2 }') USER=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_SERVER_HA_CONFIG/cl_tsmserver_config.xsd -t User|awk -F= '{ print $2 }') [[ $? != 0 || -z $USER ]] && { KLIB_SA_logmsg ERROR 1 63 tsmserversa.cat "No value is specified for User property in TSM server xml file\n" exit 1 } SHARED_VGS=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_SERVER_HA_CONFIG/cl_tsmserver_config.xsd -t VolumeGroups|awk -F= '{ print $2 }') if [[ $? == 0 && -n $SHARED_VGS ]] then SHARED_VGS=$(echo $SHARED_VGS) else KLIB_SA_logmsg ERROR 1 65 tsmserversa.cat "No value is specified for VolumeGroups property in TSM server xml file\n" exit 1 fi validateNodes $PRIMNODE "$TAKEOVNODES" (( $? != 0 )) && { KLIB_SA_logmsg ERROR 1 14 tsmserversa.cat "TSM server smart assist has primary=%1\$s and takeover nodes=%2\$s as repetitive\n" $PRIMNODE "$TAKEOVNODES" exit 1 } if [[ -z $NETMASK ]];then $TSM_SERVER_HA_SBIN/cl_tsm_serv_config -a $APPLICATION_ID -p $PRIMNODE -t "$TAKEOVNODES" -i $INSTANCE_ID -d $INSTANCE_DIR -v "$SHARED_VGS" -s $SERVICE_IP -u $USER exit $? else $TSM_SERVER_HA_SBIN/cl_tsm_serv_config -a $APPLICATION_ID -p $PRIMNODE -t "$TAKEOVNODES" -i $INSTANCE_ID -d $INSTANCE_DIR -v "$SHARED_VGS" -s $SERVICE_IP -n $NETMASK -u $USER exit $? fi  k$o@7'/םa֝a֝a&7'2vT./usr/es/sbin/cluster/sa/tsmserver/sbin/tsm_server_xutilseryig@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmserver/sbin/tsm_server_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmserver/sbin/tsm_server_xutils.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM #---------------------------------------------------------------------- # # Function: listEnv_TSM_SERV # # Description: This component doesnt have any ENV settings. # but as per the framwework we need this dummy function # # Arcguments: none # # output: None # #---------------------------------------------------------------------- function listEnv_TSM_SERV { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # dummy function KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #---------------------------------------------------------------------- # # Function: listInstances_TSM_SERVER # # Description: Lists the instances for the TSM_SERVER components # # Arcguments: componentid , nodes # # output: list of instances in xml format # #---------------------------------------------------------------------- function listInstances_TSM_SERVER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # : Discover instances # #---------------------------------------------------------------- # Example: #/usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsm_server_query -L #tsm3inst #tsminst1 #tsminst2 # #---------------------------------------------------------------- /usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsm_server_query -L 2>/dev/null | grep -v E "^#|^$" > /usr/es/sbin/cluster/etc/sa_inst.x filterinst_XML < /usr/es/sbin/cluster/etc/sa_inst.x KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------------------------------------------------------- # # Function: listProps_TSM_SERVER # # Description: List properties for the component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Application Name [tsminst1_hacmp07] #* TSM instance Owning Node hacmp07 #* Take over Node(s) [] #* TSM server Instance Name tsminst1 #* TSM server Instance Directory [] #* Shared VGs for TSM server instance [] #* Service IP Label [] # Netmask(IPv4)/Prefix Length(IPv6) [] #* TSM server user id [] #* TSM server password [] # #--------------------------------------------------------------------------- function listProps_TSM_SERVER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x #-------------------------------------------------------------------------- # Example: #/usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsm_server_query -i 'tsminst1' #application_name:primary #tsminst1_hacmp07:hacmp07 # #--------------------------------------------------------------------------- # :Disover attributes # /usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsm_server_query -i "$INSTANCE_NAME" 2>/dev/null | grep -v -E "^#|^$" > /usr/es/sbin/cluster/etc/sa_inst.x IFS=":" read application_name primary < /usr/es/sbin/cluster/etc/sa_inst.x # : Discover Picklists : Discover the takeover node list # takovernodes_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | grep -v "$primary" tr '\n' ',' ) takovernodes_val_list=${takovernodes_val_list%,} #serive ip pick list serviceip_picklist=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') serviceip_picklist=${serviceip_picklist%,} # : Print each property # #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" #* Application Name [tsminst1_hacmp07] print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$application_name" "" "" "" \ "-a" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* TSM instance Owning Node hacmp07 print_start_tag PROPERTY "2" "OWNNODE" "TSM instance Owning Node" "" \ "$primary" "" "" "" \ "-p" "string" "false" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* Take over Node(s) print_start_tag PROPERTY "3" "TAKEOVERNODE" "Take over Node(s)" "" \ "" "$takovernodes_val_list" "" "" \ "-t" "string" "true" "true" \ "true" "true" "" "" print_end_tag PROPERTY #* TSM server Instance Name tsminst1 print_start_tag PROPERTY "4" "SERV_INST_NAME" "TSM server Instance Name" "" \ "$INSTANCE_NAME" "" "" "" \ "-i" "string" "false" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* TSM server Instance Directory [] print_start_tag PROPERTY "5" "SERV_INST_DIR" "TSM server Instance Directory" "" \ "" "" "" "" \ "-d" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* Shared VGs for TSM server instance [] print_start_tag PROPERTY "6" "SHAREDVG" "Shared VGs for TSM server instance" "" \ "" "" "" "" \ "-v" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* Service IP Label [] print_start_tag PROPERTY "7" "SERVICEIP" "Service IP Label " "" \ "" "$serviceip_picklist" "" "" \ "-s" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) [] print_start_tag PROPERTY "8" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "" \ "-n" "string" "true" "false" \ "false" "true" "" "" print_end_tag PROPERTY #* TSM server user id [] print_start_tag PROPERTY "9" "TSM_SERV_USERID" "TSM server user id" "" \ "" "" "" "" \ "-u" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* TSM server password [] print_start_tag PROPERTY "10" "TSM_SERV_PASSWD" "TSM server password" "" \ "" "" "" "" \ "-P" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY # : This command will be executed to configure the instance. # print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/tsmserver/sbin/cl_tsm_serv_config" print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #---------------------------------------------------------------------- # # Function: listEnv_TSM_CLIENT # # Description: TSM_CLEINT_SHARED_CONF_DIR variable need to be exported # to proceed further # # Arcguments: none # # output: None # #---------------------------------------------------------------------- function listEnv_TSM_CLIENT { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # # Enter TSM client shared configuration directory # print_start_tag ENVS print_XML_comment "TSM_CLIENT variable need to be setup to discover DB2" print_start_tag ENV "TSM_CLEINT_SHARED_CONF_DIR" "TSM_CLEINT_SHARED_CONF_DIR" "$TSM_CLEINT_SHARED_CONF_DIR" print_end_tag ENV print_end_tag ENVS KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------- # MAIN STARTS HERE #--------------------------- # # these functions will be consumed by clvtsa # # : TSM Server component utilities # tsm_server_xutils=( typeset env_func="listEnv_TSM_SERV" typeset inst_func="listInstances_TSM_SERVER" typeset prop_func="listProps_TSM_SERVER" ) n kJ$od/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/tsmserver/config/cl_tsmserver_config.xmlsdordd CP( kb$od/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/tsmserver/config/cl_tsmserver_config.xsdsdordd IPAddre kBD$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/tsmclientconfiAA k $oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/tsmclient/sbinAA k$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/tsmclient/configcl_tsmAA k$od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmcliGlobalsnfig.xsdd# ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmcliGlobals.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmcliGlobals.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM . /usr/es/lib/ksh93/func_include PATH=$PATH:/usr/es/sbin/cluster/sa/sbin:/usr/es/sbin/cluster/utilities FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE:$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH #--------------------------------- # Global definitions #--------------------------------- SA_SBIN=/usr/es/sbin/cluster/sa/sbin TSM_CLIENT_BA_BIN=/usr/tivoli/tsm/client/ba/bin TSM_CLIENT_BA_BIN64=/usr/tivoli/tsm/client/ba/bin64 TSM_CLIENT_HA_SBIN=/usr/es/sbin/cluster/sa/tsmclient/sbin TSM_CLIENT_HA_CONFIG=/usr/es/sbin/cluster/sa/tsmclient/config TSM_CLIENT_HSM_BIN=/usr/tivoli/tsm/client/hsm/bin CLVTCMD=/usr/es/sbin/cluster/utilities/clvt KLIB_TSM_CLIENT_HACMPLOG_ENTRY="tsm_client.log" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/$KLIB_TSM_CLIENT_HACMPLOG_ENTRY INFO_FLAG="true" WARN_FLAG="true" DEBUG_FLAG="false" ERROR_FLAG="true" TRACE_FLAG="true" }([ l$od7/םa֝a֝a&=2vT./usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmcliUtilitiesig.xsdd   #-e inorst$=acdfglpu"1[]_hmvy &()/0:AEGINOPRSkw{}'.2;CFLMVbq|,46>BDTU\x+39?Hjz%7ɤ*!ei$,؎D`7?$H `a閎V_}ʼ&ܪ Eޖ @LpU4TzXOI"bch45V: _Qdipp<8uHd70P9ADH,q!haax‚zAK }W_PPsmk , 00G +o/^}IULǥj`r((,* F@a`p&&0,<ᱮA sQlsX 5EJp"@#0CMǘ% ;1/()^=AC A͵kE}W ծj85V9 yfb6o.,m\GB?MP)|-}gm=h"9ɾ@ĥd#eA{禬#o;#ɾ@6Qώs{{(p=R+"+m? m}8\^6#Y(/pF #Y(/pF g _BcmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUR֊>,sv@fYؠ8" vhc"G`@H` &n<(?$K qZ]KDžAsL -$yM'U0$9 ,SO!dr$sFi"@`LdLpU4T _.~70`Ld1H`a閎V_}ʼ&ܪK >PPȐ@P$L" p@p@@j¿ؤ 0q@88:\lnc/A "Gcn<[0% }W_PP smH9XU{r \UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU.pj>,sD?qa+qsƗ+]WX.o*raѽ|zT5z'{(* DAC /B00G +o/qމ_c]M'ă00 C8iZ8I[y}66N>n08p (69tZ^>p䇆!xX_Mm$K \.=3=ʶ&8ۈ5X1ʶ$Lmtr:HuၙU _n !`*ؑ0qf5X#L=ʶ+_m.64ɱCֿ##2Au,~iP&96 XP_J[W6lnacb[۞5^Ɩ96 hzs Q`,Hd#8ۈ5X1ʶ$Lmm&`\7MAA͵4ɱ p,,/_QٍK}W_A͵ů?mm&  Rڿ<q[_*q[4ƜV1q[4N+c[h%m"]Kmⷁ!Y`檚x( M0/6gvclmۇuk7:6"U:abF#ĥ*(:,svVlmPeMg9'<ϳoy6H}rD+E*Vb"@`(,*LP \ql0?T?CE15_k̭h7,rl@؊ VD<,2$L,&&(*&?4yF$P~HQFV0=70pil88h aa~nAk}WZV\pj>,sq bA.t/jRAl(.XP\ .W8Ҁb(XA W8W?p.~MW6Rĥ  (.X \fffffffffffffffffffffffffffffffffffffffffffffffffffVUic Pr=c "G`@H` &n<(?$K q_Kp倃A8@BWpDL ;0r<&p_`lalDLj _ƚi{=_<1SZ @(jC$XH45b!7hj{q6"Eiأ8,$p/0H_ _3pMZsQx S` PQlQǀ_A_ȑ8"~i %ĥ︪inXk\̮W85V9M,s 16h1|\65KE 6WsMR*%r^4>.y}Vo5K !o)ylNcXԴX/U\T\CE9\fffffffffffffffffffffffffffffffffffffffes33333333332UicǓF%/y!(XdH8XLLPTL~iH,,/Ǡ=1A.7+8R0_)z }<,"C*q|#ysGKbw_ H:%TElxECKbw<r؈i> ` xFMg! 2_ȑ鹈$I)m_t\Pj\J<;E 6Wios5hh09zmEXGny:.~vY-hqvT8=}G55-203rQXu/4܆(`U{pX-2 M)xrX;P4rRǴi:>Hd/%-;0K}W_ _srʜn.$U{r EEnE%/MwkOrTa2pr>TؚxFYV\C!p\ql1.O>4\ffffffffffffffffffffffffffffffffffffffffffffffffffekEV9+d9aP豩kc"G`@H` &n<(?$K q_$ޑ_ҁ\.=J. D\LpU4TD SĆBg t 7j=`+a>Wp<89!zP'a%NLM; *rfp8 /dev/null 2>&1 opt_time=$(cat /tmp/tsmc_opt.tmp|grep OPT_MOD_TIME|awk -F= '{ print $2 }' ) > /dev/null 2>&1 tsm_conf_dir=$(clodmget -q "name=TSM_CONF_DIR and application_id=$app_name" -f value -n HACMPsa_metadata) tsm_conf_dir=$(echo $tsm_conf_dir|sed 's/^[ \t]*//') sys_time=$(echo $sys_time|sed 's/^[ \t]*//') opt_time=$(echo $opt_time|sed 's/^[ \t]*//') TSM_BIN="" lslpp -iq tivoli.tsm.client.ba.64bit.common > /dev/null 2>&1 if [[ $? == 0 ]];then TSM_BIN=$TSM_CLIENT_BA_BIN64 else TSM_BIN=$TSM_CLIENT_BA_BIN fi if [[ -n $sys_time && -f $TSM_BIN/dsm.sys ]];then sys_pres_time=$(istat $TSM_BIN/dsm.sys|grep modified|cut -d: -f 2,3,4) sys_pres_time=$(echo $sys_pres_time|sed 's/^[ \t]*//'|sed 's/\\//g'|sed 's/ //g') sys_pres_time=$(echo $sys_pres_time|cut -d: -f 1,2) sys_time=$(echo $sys_time|cut -d: -f 1,2) [[ "$sys_pres_time" == "$sys_time" ]] || { KLIB_SA_logmsg INFO 2 31 tsmclientsa.cat "Failed while monitoring BA client dsm.sys file is changed; need to start the client again to reflect the changes\n" odmdelete -o HACMPsa_metadata -q "name=DSM_SYS_MOD_TIME and application_id=$app_name" > /dev/null 2>&1 claddsaapp -a $app_name DSM_SYS_MOD_TIME="" echo "SYS_MOD_TIME=" > /tmp/tsmc_sys.temp exit 1 } else KLIB_SA_logmsg ERROR 2 32 tsmclientsa.cat "Failed while monitoring BA client, wrong dsm.sys is mentioned\n" exit 1 fi if [[ -n $opt_time && -f $tsm_conf_dir/dsm.opt ]];then opt_pres_time=$(istat $tsm_conf_dir/dsm.opt|grep modified|cut -d: -f 2,3,4) opt_pres_time=$(echo $opt_pres_time|sed 's/^[ \t]*//'|sed 's/\\//g'|sed 's/ //g') opt_pres_time=$(echo $opt_pres_time|cut -d: -f 1,2) opt_time=$(echo $opt_time|cut -d: -f 1,2) [[ "$opt_pres_time" == "$opt_time" ]] || { KLIB_SA_logmsg INFO 2 33 tsmclientsa.cat "Failed while monitoring BA client dsm.opt file is changed; need to start the client again to reflect the changes\n" odmdelete -o HACMPsa_metadata -q "name=DSM_OPT_MOD_TIME and application_id=$app_name" > /dev/null 2>&1 claddsaapp -a $app_name DSM_OPT_MOD_TIME="" echo "OPT_MOD_TIME=" > /tmp/tsmc_opt.tmp exit 1 } else KLIB_SA_logmsg ERROR 2 34 tsmclientsa.cat "Failed while monitoring BA client dsm.opt file\n" exit 1 fi KLIB_SA_logmsg INFO 2 35 tsmclientsa.cat "Monitoring BA client deamon dsmcad\n" ps -ef|grep -w dsmcad|grep -v grep >/dev/null 2>&1 [[ $? == 0 ]] || { KLIB_SA_logmsg ERROR 2 36 tsmclientsa.cat "Failed while monitoring BA client deamon dsmcad\n" exit 1 } exit 0 ## k($od /םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmBAclientstartrxsdd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmBAclientstart.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)41 1.1 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmBAclientstart.sh, hacmp.assist, 61haes_r714 11/28/11 15:02:26 ############################################################################################### # # NAME: # cl_tsmBAclientstart # # PURPOSE: # sart script of Smart Assist for TSM backup archive client # # ARGUMENTS: # n/a # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ "VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmcliGlobals KLIB_HACMPLOG_ENTRY=$KLIB_TSM_CLIENT_HACMPLOG_ENTRY typeset app_name while getopts a: opt do case $opt in a) # client application name, which will be highly available app_name=$OPTARG ;; esac done sys_time=$(cat /tmp/tsmc_sys.temp|grep SYS_MOD_TIME|awk -F= '{ print $2 }' ) > /dev/null 2>&1 opt_time=$(cat /tmp/tsmc_opt.tmp|grep OPT_MOD_TIME|awk -F= '{ print $2 }' ) > /dev/null 2>&1 tsm_conf_dir=$(clodmget -q "name=TSM_CONF_DIR and application_id=$app_name" -f value -n HACMPsa_metadata) tsm_conf_dir=$(echo $tsm_conf_dir|sed 's/^[ ]*//') sys_time=$(echo $sys_time|sed 's/^[ ]*//') opt_time=$(echo $opt_time|sed 's/^[ ]*//') export DSM_CONFIG=$tsm_conf_dir/dsm.opt TSM_BIN="" lslpp -iq tivoli.tsm.client.ba.64bit.common > /dev/null 2>&1 if [[ $? == 0 ]];then TSM_BIN=$TSM_CLIENT_BA_BIN64 else TSM_BIN=$TSM_CLIENT_BA_BIN fi [[ -n $sys_time ]] || { [[ -f $TSM_BIN/dsm.sys ]] && { sys_time=$(istat $TSM_BIN/dsm.sys|grep modified|cut -d: -f 2,3,4) sys_time=$(echo "$sys_time"|sed 's/^[ \t]*//'|sed 's/\\//g'|sed 's/ //g') claddsaapp -a $app_name DSM_SYS_MOD_TIME="$sys_time" echo "SYS_MOD_TIME=$sys_time" > /tmp/tsmc_sys.temp } } [[ -n $opt_time ]] || { [[ -f $tsm_conf_dir/dsm.opt ]] && { opt_time=$(istat $tsm_conf_dir/dsm.opt|grep modified|cut -d: -f 2,3,4) opt_time=$(echo "$opt_time"|sed 's/^[ \t]*//'|sed 's/\\//g'|sed 's/ //g') claddsaapp -a $app_name DSM_OPT_MOD_TIME="$opt_time" echo "OPT_MOD_TIME=$opt_time" > /tmp/tsmc_opt.tmp } } KLIB_SA_logmsg INFO 2 11 tsmclientsa.cat "starting BA client deamon dsmcad\n" $TSM_BIN/dsmcad > /dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 2 12 tsmclientsa.cat "Failed while starting BA client deamon dsmcad\n" exit 1 } exit 0  kf$odZ/םa֝a֝a&Z2vT./usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmBAclientstoprxsdd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmBAclientstop.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)71 1.1 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmBAclientstop.sh, hacmp.assist, 61haes_r714 11/28/11 15:03:45 ############################################################################################### # # NAME: # cl_tsmBAclientstop # # PURPOSE: # stop script of Smart Assist for TSM ba client # # ARGUMENTS: # n/a # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ "VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmcliGlobals KLIB_HACMPLOG_ENTRY=$KLIB_TSM_CLIENT_HACMPLOG_ENTRY KLIB_SA_logmsg INFO 2 21 tsmclientsa.cat "stoping the BA client deamon dsmcad\n" ps -ef|grep -w dsmcad|grep -v grep > /dev/null 2>&1 if [[ $? == 0 ]];then ps -ef|grep -w dsmcad|grep -v grep|awk '{print $2}'|xargs kill -9 rc=$? sleep 3 exit $rc else exit 0 fi mc_sys kZ$odD/םa֝a֝a&D2vT./usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmHSMclientmonitorsdd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmHSMclientmonitor.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)39 1.2 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmHSMclientmonitor.sh, hacmp.assist, 61haes_r720, 1522B_hacmp720 5/25/15 19:34:26 ############################################################################################### # # NAME: # cl_tsmHSMclientmonitor # # PURPOSE: # Monitor script of Smart Assist for TSM HSM client # # ARGUMENTS: # n/a # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == "high" ]] then PS4_TIMER=true set -x version='1.2' fi . /usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmcliGlobals KLIB_HACMPLOG_ENTRY=$KLIB_TSM_CLIENT_HACMPLOG_ENTRY while getopts a: opt do case $opt in a) # client application name, which will be highly available app_name=$OPTARG ;; esac done sys_time=$(cat /tmp/tsmc_sys.temp|grep SYS_MOD_TIME|awk -F= '{ print $2 }' ) > /dev/null 2>&1 opt_time=$(cat /tmp/tsmc_opt.tmp|grep OPT_MOD_TIME|awk -F= '{ print $2 }' ) > /dev/null 2>&1 tsm_conf_dir=$(clodmget -q "name=TSM_CONF_DIR and application_id=$app_name" -f value -n HACMPsa_metadata) tsm_conf_dir=$(echo $tsm_conf_dir|sed 's/^[ \t]*//') sys_time=$(echo $sys_time|sed 's/^[ \t]*//') opt_time=$(echo $opt_time|sed 's/^[ \t]*//') KLIB_SA_logmsg INFO 2 81 tsmclientsa.cat "monitoring HSM and BA client\n" TSM_BIN="" lslpp -iq tivoli.tsm.client.ba.64bit.common > /dev/null 2>&1 if [[ $? == 0 ]];then TSM_BIN=$TSM_CLIENT_BA_BIN64 else TSM_BIN=$TSM_CLIENT_BA_BIN fi if [[ -n $sys_time && -f $TSM_BIN/dsm.sys ]];then sys_pres_time=$(istat $TSM_BIN/dsm.sys|grep modified|cut -d: -f 2,3,4) sys_pres_time=$(echo $sys_pres_time|sed 's/^[ \t]*//'|sed 's/\\//g'|sed 's/ //g') sys_pres_time=$(echo $sys_pres_time|cut -d: -f 1,2) sys_time=$(echo $sys_time|cut -d: -f 1,2) [[ "$sys_pres_time" == "$sys_time" ]] || { KLIB_SA_logmsg INFO 2 82 tsmclientsa.cat "Failed while monitoring HSM client dsm.sys file is changed; need to start the client again to reflect the changes\n" odmdelete -o HACMPsa_metadata -q "name=DSM_SYS_MOD_TIME and application_id=$app_name" > /dev/null 2>&1 claddsaapp -a $app_name DSM_SYS_MOD_TIME="" echo "SYS_MOD_TIME=" > /tmp/tsmc_sys.temp exit 1 } else KLIB_SA_logmsg ERROR 2 83 tsmclientsa.cat "Failed while monitoring HSM client, wrong dsm.sys is mentioned\n" exit 1 fi if [[ -n $opt_time && -f $tsm_conf_dir/dsm.opt ]];then opt_pres_time=$(istat $tsm_conf_dir/dsm.opt|grep modified|cut -d: -f 2,3,4) opt_pres_time=$(echo $opt_pres_time|sed 's/^[ \t]*//'|sed 's/\\//g'|sed 's/ //g') opt_pres_time=$(echo $opt_pres_time|cut -d: -f 1,2) opt_time=$(echo $opt_time|cut -d: -f 1,2) [[ "$opt_pres_time" == "$opt_time" ]] || { KLIB_SA_logmsg INFO 2 84 tsmclientsa.cat "Failed while monitoring HSM client dsm.opt file is changed; need to start the client again to reflect the changes\n" odmdelete -o HACMPsa_metadata -q "name=DSM_OPT_MOD_TIME and application_id=$app_name" > /dev/null 2>&1 claddsaapp -a $app_name DSM_OPT_MOD_TIME="" echo "OPT_MOD_TIME=" > /tmp/tsmc_opt.tmp exit 1 } else KLIB_SA_logmsg ERROR 2 85 tsmclientsa.cat "Failed while monitoring HSM client dsm.opt file\n" exit 1 fi ps -ef|grep -w dsmcad|grep -v grep >/dev/null 2>&1 [[ $? == 0 ]] || { KLIB_SA_logmsg ERROR 2 86 tsmclientsa.cat "Failed while monitoring BA client deamon dsmcad\n" exit 1 } ps -ef|grep -w hsmagent|grep -v grep >/dev/null 2>&1 [[ $? == 0 ]] || { KLIB_SA_logmsg ERROR 2 87 tsmclientsa.cat "Failed while monitoring HSM client deamon hsmagent\n" exit 1 } ps -ef|grep -w dsmrootd|grep -v grep >/dev/null 2>&1 [[ $? == 0 ]] || { KLIB_SA_logmsg ERROR 2 88 tsmclientsa.cat "Failed while monitoring HSM client deamon dsmrootd\n" exit 1 } ps -ef|grep -w dsmscoutd|grep -v grep >/dev/null 2>&1 [[ $? == 0 ]] || { KLIB_SA_logmsg ERROR 2 89 tsmclientsa.cat "Failed while monitoring HSM client deamon dsmscoutd\n" exit 1 } ps -ef|grep -w dsmrecalld|grep -v grep >/dev/null 2>&1 [[ $? == 0 ]] || { KLIB_SA_logmsg ERROR 2 90 tsmclientsa.cat "Failed while monitoring HSM client deamon dsmrecalld\n" exit 1 } ps -ef|grep -w dsmmonitord|grep -v grep >/dev/null 2>&1 [[ $? == 0 ]] || { KLIB_SA_logmsg ERROR 2 91 tsmclientsa.cat "Failed while monitoring HSM client deamon dsmmonitord\n" exit 1 } exit 0 ame, kz$od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmHSMclientstartrsdd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmHSMclientstart.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)69 1.1 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmHSMclientstart.sh, hacmp.assist, 61haes_r714 11/28/11 15:07:34 ############################################################################################### # # NAME: # cl_tsmHSMclientstart # # PURPOSE: # start script of Smart Assist for TSM HSM client # # ARGUMENTS: # n/a # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ "VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmcliGlobals KLIB_HACMPLOG_ENTRY=$KLIB_TSM_CLIENT_HACMPLOG_ENTRY typeset app_name while getopts a: opt do case $opt in a) # client application name, which will be highly available app_name=$OPTARG ;; esac done KLIB_SA_logmsg INFO 2 41 tsmclientsa.cat "starting BA and HSM client deamons\n" sys_time=$(cat /tmp/tsmc_sys.temp|grep SYS_MOD_TIME|awk -F= '{ print $2 }' ) > /dev/null 2>&1 opt_time=$(cat /tmp/tsmc_opt.tmp|grep OPT_MOD_TIME|awk -F= '{ print $2 }' ) > /dev/null 2>&1 tsm_conf_dir=$(clodmget -q "name=TSM_CONF_DIR and application_id=$app_name" -f value -n HACMPsa_metadata) tsm_conf_dir=$(echo $tsm_conf_dir|sed 's/^[ ]*//') sys_time=$(echo $sys_time|sed 's/^[ ]*//') opt_time=$(echo $opt_time|sed 's/^[ ]*//') export DSM_CONFIG=$tsm_conf_dir/dsm.opt TSM_BIN="" lslpp -iq tivoli.tsm.client.ba.64bit.common > /dev/null 2>&1 if [[ $? == 0 ]];then TSM_BIN=$TSM_CLIENT_BA_BIN64 else TSM_BIN=$TSM_CLIENT_BA_BIN fi [[ -n $sys_time ]] || { [[ -f $TSM_BIN/dsm.sys ]] && { sys_time=$(istat $TSM_BIN/dsm.sys|grep modified|cut -d: -f 2,3,4) sys_time=$(echo "$sys_time"|sed 's/^[ \t]*//'|sed 's/\\//g'|sed 's/ //g') claddsaapp -a $app_name DSM_SYS_MOD_TIME="$sys_time" echo "SYS_MOD_TIME=$sys_time" > /tmp/tsmc_sys.temp } } [[ -n $opt_time ]] || { [[ -f $tsm_conf_dir/dsm.opt ]] && { opt_time=$(istat $tsm_conf_dir/dsm.opt|grep modified|cut -d: -f 2,3,4) opt_time=$(echo "$opt_time"|sed 's/^[ \t]*//'|sed 's/\\//g'|sed 's/ //g') claddsaapp -a $app_name DSM_OPT_MOD_TIME="$opt_time" echo "OPT_MOD_TIME=$opt_time" > /tmp/tsmc_opt.tmp } } KLIB_SA_logmsg INFO 2 42 tsmclientsa.cat "starting BA client deamon dsmcad\n" $TSM_BIN/dsmcad > /dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 2 43 tsmclientsa.cat "Failed while starting BA client deamon dsmcad\n" exit 1 } file_systems=$(clodmget -q "name=SHARED_FILESYSTEM and application_id=$app_name" -f value -n HACMPsa_metadata) KLIB_SA_logmsg INFO 2 44 tsmclientsa.cat "starting HSM client deamon dsmmonitord\n" $TSM_CLIENT_HSM_BIN/dsmmonitord >/dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 2 45 tsmclientsa.cat "Failed while starting HSM client deamon dsmmonitord\n" exit 1 } KLIB_SA_logmsg INFO 2 46 tsmclientsa.cat "starting HSM client deamon dsmrecalld\n" $TSM_CLIENT_HSM_BIN/dsmrecalld >/dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 2 47 tsmclientsa.cat "Failed while starting HSM client deamon dsmrecalld\n" exit 1 } KLIB_SA_logmsg INFO 2 48 tsmclientsa.cat "starting HSM client deamon dsmscoutd\n" $TSM_CLIENT_HSM_BIN/dsmscoutd >/dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 2 49 tsmclientsa.cat "Failed while starting HSM client deamon dsmscoutd\n" exit 1 } KLIB_SA_logmsg INFO 2 50 tsmclientsa.cat "starting HSM client deamon dsmrootd\n" $TSM_CLIENT_HSM_BIN/dsmrootd >/dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 2 51 tsmclientsa.cat "Failed while starting HSM client deamon dsmrootd\n" exit 1 } KLIB_SA_logmsg INFO 2 52 tsmclientsa.cat "starting HSM client deamon hsmagent\n" $TSM_CLIENT_HSM_BIN/hsmagent >/dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 2 53 tsmclientsa.cat "Failed while starting HSM client deamon hsmagent\n" exit 1 } for i in $file_systems do $TSM_CLIENT_HSM_BIN/dsmmigfs reactivate $i >/dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 2 54 tsmclientsa.cat "Failed while reactivating filesystem %1\$s for HSM client\n" $I exit 1 } done exit 0 ### k[$ods /םa֝a֝a&s 2vT./usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmHSMclientstoprsdd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmHSMclientstop.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)95 1.1 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/cl_tsmHSMclientstop.sh, hacmp.assist, 61haes_r714 11/28/11 15:08:57 ############################################################################################### # # NAME: # cl_tsmHSMclientstop # # PURPOSE: # stop script of Smart Assist for TSM HSM client # # ARGUMENTS: # n/a # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ "VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsmcliGlobals KLIB_HACMPLOG_ENTRY=$KLIB_TSM_CLIENT_HACMPLOG_ENTRY while getopts a: opt do case $opt in a) # client application name, which will be highly available app_name=$OPTARG ;; esac done KLIB_SA_logmsg INFO 2 71 tsmclientsa.cat "stoping HSM client deamon dsmrecalld\n" ps -ef|grep -w dsmrecalld|awk '{print $2}'|xargs kill -9 > /dev/null 2>&1 KLIB_SA_logmsg INFO 2 72 tsmclientsa.cat "stoping HSM client deamon dsmmonitord\n" ps -ef|grep -w dsmmonitord|awk '{print $2}'|xargs kill -9 > /dev/null 2>&1 KLIB_SA_logmsg INFO 2 73 tsmclientsa.cat "stoping HSM client deamon dsmscoutd\n" ps -ef|grep -w dsmscoutd|awk '{print $2}'|xargs kill -9 > /dev/null 2>&1 KLIB_SA_logmsg INFO 2 74 tsmclientsa.cat "stoping HSM client deamon dsmrootd\n" ps -ef|grep -w dsmrootd|awk '{print $2}'|xargs kill -9 > /dev/null 2>&1 KLIB_SA_logmsg INFO 2 75 tsmclientsa.cat "stoping HSM client deamon hsmagent\n" ps -ef|grep -w hsmagent|awk '{print $2}'|xargs kill -9 > /dev/null 2>&1 file_systems=$(clodmget -q "name=SHARED_FILESYSTEM and application_id=$app_name" -f value -n HACMPsa_metadata) #stop all process using the filesystem for i in $file_systems do pid=$(fuser -c $i 2>/dev/null) for j in $pid;do kill -9 $j done done #deactivating the filesystem for i in $file_systems do $TSM_CLIENT_HSM_BIN/dsmmigfs deactivate $i >/dev/null 2>&1 done KLIB_SA_logmsg INFO 2 76 tsmclientsa.cat "stoping BA client deamon dsmcad\n" ps -ef|grep -w dsmcad|grep -v grep|awk '{print $2}'|xargs kill -9 > /dev/null 2>&1 [[ $? == 0 ]] && sleep 3 exit 0 CP( llG$odڋ/םa֝a֝a&W2vT./usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsm_client_configrsdd   e #-ainorst "$I_cdglmp1=AEMNOPRSTfhu&./BCDGL[\]vy%()02:FHKVbwx{|}'4;>?Uk!,356Yqz789*WjZ@h B!] c|pbL!"B(@%X)›diJ@c./8(b<V|q岡 `H`H(`gU^pPis=7 (8$$""#o&P!CEÄv7,bMfYOUQ}K%dfatF` A00iL6D5%Lҷ0<6Y%aqmjJZ,JTRK@lo>8=ZnK/Ⱦq 7$L@D[B5p4n=# @*R 2KQ\FB8qRLҳUPi`L')n(;gi|DpxkcMryb4ƺRx(fo%8NҬ.sϘFIxrd@Ckmju O2A+&n>Xj bW*a50iR+|^qƱA倢J RJF7r |3;cZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkYQu\ZHJ#N 9byǃǔ$Tz"DDP""v4nq(`TW u`ff !VG֋$.5 B ITkEV* h4&t B IS46 IX\j@"֋$XVF0$r Dy8H"XCĐD Dy;Qu\q2bH,"(!*\u) W'E_"L^X +F -zJPT]{&QI$"H@y]Ϙ]ZIQu\a rHi+ rV Ҷ:^z@]\1^uʏ(@S*VQS¦0̯i+ C eE׺]rq;$ 1yb4ƺRx(fo%T]{,T!䈃@rHiJ%࡙t;JQu\ *U@@iŊDT^VRbfyyO >@C)th9\l+gUzX]@E^{^/Z'0TW l Qȫ% `WZ,֏ IZ^/34kx` AHV >Nz[?% c?޺J1z4:P*&iizמZQּ箺IҌ+)gqIѹEp&pȕQj)(PLf u+ hğ\*/+}eub13KOּ A`P]u` EVS;=뮴l+gU4z< Zd^瘢]|箺Ip!byǁ'cF ;?H"Tr*E/Z(}BR'g=uՂO%Qg?% c?Qg҈]@E^y,ZQzXJ((²0TW l Qȫ% `WZ,֏ IZ^/34kx` AHV >QZQe3Qgҋ?% a5+}[ZehK[+kQe( h9YyPh9[ gM8ELRJ\Ff30CY9n`QzV! SҔKC3}a(Dl Qȫ%Au+ hğ\ɧ*CIX\kHҼFr2(}:' ;*/J!9zRx(fo%H5"*RkS8gnq @!$ <أ?W84ۉg"v`p4F81$@Pc?|'CpNaaxM8IJEY(ǔ(H3nY%aq |+{NSVI>t{w9yO,T)txe| 09Uoz=k$P;^!pH5"% V;}a0iRJ\rXJ:JVx4 hsQP?1EWδJp^N[O42H`Ҥ4ƸV >tƸ`(]a(W¬g$*9dS@03IX\kG$M8ELR4 %aq9uՂO%iF0CY9n`QzV! SҔKC3}a(DҌ^椫M뮴XQgҎ(H"bE,ɏiAIEǢX$ @"O1E?@[O42Ha_|1kV]X$QVaR'guJ3*f@9VJ-E4 c0 EV>ÓNS,Tz@Y#%aq9uՂO%iF0CY9n`QzV! SҔKC3}a(DҌ^M7ҏcOz(^(XDKrcƀisqFi$bH$EĊ =x?4,"#@Ue&f1TqF Pz# HVB0g,8dH, $ 4WδJp^b4uVSNz([? BXi+^'޺zK5sWL]X$QxYe.34pȕQj)DK:dƴxbOq 'b4ƹK+g#+aR'gHkgJWZI;+EIHk;gQDHpp!Ty@z@أ?&$x"TiǤzXJ' 0bCʀrp!#FDpX(&Ha)wKqF D"PLiǕ(wJ51QP.,4M77ҨAHkai-i;QOF%|FjgHk8M4Ki4M6Z]"1wLyLj&<%("s 4Mqqii@9VJ-E1 )0+IX\kG$1|34L 0Pr1u1xjEYۣ}QqS+qު0M4g]z@Yʪ ,`P)iDUQLyBc0 u+ hğ\c୧LA[ޚpb4ƹK+g#+a1x>JZ'#+C.1yK+ԜAH5"m\c?4ЫihiL6@"i[iXV@ԕ) qB YDN <"ȖD|ԋֳS $r%G"Zc$S7Z,֏ I> xDri*r#|_'zv;BIt{wX %aqR#3J`R/ZJ3*0M44m6D5%Lҷ05.+5)R\c"YjBn~/ ҨC%|FjMiih8IJEY(ǔ(H3'Z,֏ I> xDri*kw)B闔Hi+ rIWFWNϚzM4 BiXildEӎaijEYأ?ʏ(@ xDi'b4ƹK+g#+aR8D-@uՂO%H5"q4M4M M4aiV3bf/X4pytz+]^3$r%G"Zh`0EV>ÓNS,TJQ/ Y!9*ӣ޺81$@PPyR@Q@舔$|ԋּQH(XqR,N< *U@@Q$DyȠ 4&H%@@Q㉓@ 97\\_Syb4ƺRx(fo% 0P Dɉ 8?$Opf/I!$*9dS@03IX\kG$no"-sq~N /)劐VJ%࡙p0C)&$x" Rs}lsqrN <<d"Y3&$x"IgqIѸTW l Qȫ% `0+ hğ\c୧LA[n77SD뗔Hi+ tPXJ8`㉓@wIWMO)tzAzi*CIX\kgλHRkVրakh 9yO*e+cਖ਼ƵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ0XJ:NՅƨF|R byǃǔ$Tz"DDP""v4nq(`TW ugi X4t34?ޚaT#J)[?u38,`UkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵk *Q-`ӺHҺ1nLו,;ZBדF mb>wIWMO)tzAzo*CIX\kUJ75 qyF7)u38rTWJ13/)S35kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ.f)V;ZB ;+1<*="B"(;780v*+ 1$*9dS@03:dƴxbOqKZBЊb4Ƹ`KdGeE[X'9OJQ/ )&$x" NE7S֋$.5}p 3;)kHZS,T >yl70h쨽+k)J%࡙E"vxdĐYDQ@APitk)u3iAIEǢ"PO|S޺'0Li㉓@e\>Qq¬akHZS)B{NQVIp΋ֱɏ" +gXhkw⢸X^ai!hENQVQ;^!vif !VfV5%fv;BDBBD@'\ӵ;sP)iii$*9dSP"hJZ<1'8+iV򖴅9EXFG־2N{w#w/IX\kʦ.yABR'gL{NViiq4M4Ы 4Mli B*kw#U=;^!viqӎai8i^S9Ơ:rai&'k1qaiqM4Mil4M4DATQ\,/HLiai*g*|0M4Ki( ai/9⢠=L\Xii>j0M4VM4MHLi{HijHO>jaiM4CLa@!ԕ3JL °N׸qH_us(uVS?zҏuZQ?ӓ?TZvIҌ+)(@jv,*p7⢸X^g8IJEY(ǔ(H3IX\kG$m<"b ޝuT.I(²(}2򞑇HELRJ])D37Nz뢴FJ3*gr=9]tisӓ?TZvI5; U@@X8qQ\,/ $r%G"Zc$SPEV>[Oja1ˮ}a(+ i>*B*eVJ%࡙@NzP1V(ӵn#3JRr2|X6&UWc8p@# l Qȫ% `dƴxbOp1V& ڷXELFf30C闔>*B*eVJ%࡙E"v|g\c?ܥ!kbMqtZz~xdĐYDQ@CS`ؙU\gn ,/ $r%G"Zc$SPEV>[Oja2B)>*B*eVJ%࡙E"s?% XL8%V1kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵn 3 DAzV֢"Qcrff`.rSi^Ʊekh 6ƱKƀRQyO> kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵc UAzV֢"Slgq!b ;]wiyOT,JZ@9n`QzV! SҔKC3}a(De5T#9\r.!eOJZ@ oVv#iNA4vT^BsPXJ=%֐"^r[IX\kuaJDeocȈ"Y#OF%xcȈ"Y9PC LyK"x1,D@yȃsŔ8 ZI,K8"S 45@C?H.,szi͟/ ;gL\YFEױۑQuUp^ҁxZ|#G&޽ny!yO@ zŀajFEױ 9B24:R1h%dnL #uFqwC gr.ww] ¯+|nL m>ҝ1}.bJ !j1='>7P⢸X^g8IJEY(ǔ(H3Y%aqF] ¯+y9n`QzV! Su`_ ixF-)}.bJ !jDJ3*nB!*fat IWd--pvqG= qG 88u`Yb2( 8< X^g8IJEY(ǔ(H3:dƴxbOpS& M8EN1h%z^p0C\nx(}"vyQEye0-q *fq, s9s9s9s9s9s9s9s9s9s7U cR6ޝ͍crff`7/}a(oZs %8/\Ž;^S!.5 c,bM' G5MC+\k@[`#71@rXJ9lk3UU)z3U׬U9.g5s9s9s9s9s9s9s9s9s9sba(]A8ӹ6P8Q@ѹ Q\,/pI#ƞ1z0Li3$r%G"Zh`0 ֋$.5}sn77S syb4ƸV >xkNϣтlK9nNA4vT^BsܱRJSisrHi+ qˮ}a( (>z%8/]K/>F Hij>  R-gk9YyFP/Z,̫R/Z3y5lK8Pip|^Q0cqC,T!H"X8iz0LPL8% s9s9s9s9s9s9s9s9s9s7U cRs}lR Jp^k35Knoө|޵i8O%N /)*CIX\kgλHRkVր75]L4yGQg(L9s9s9s9s9s9s9s9s9s9c UqX}ʥ8/\&1<*="B"(;780v*+ 1n#qMx+toZs-x+t<]} uehbJP >Hw' ;qpPQ#5ܞvv iWRYiEVuxZ*i+`ĕơZQ $f((O;;qqYHij8 A[2-sE$PPip4p>+tXJ"z׍8FzhKD]E9gGp.. KeJL`d^E>^)IeK[PL8%V1s9s9s9s9s9s9s9s9s9s1JAlo\nop..U)znLו,#qN/IS4}a(oZs %8/\X %aqE:!J>.:hbJr:ɍU1s$#*fn:jZZ|^QA;`^678(]u` G"dэcrS3loQe$c9wS35s9s9s9s9s9s9s9s9s9sba(\nop..U)z6P8Q@ѹ Q\,/pI^u҂cOtz0Li]{׌ <3.II]QVI=Tc$/Z gGSp J ⢸X_;1='>2N銊a|gcQu\(Hai0۠mjJnaTRK@k ."S\^ >z%8/Zu*w N˾ b;>2N;*?Ӕmc?TZvVJJiVzPOS`ؙU\gJWziୢVҬ%(bCʍ8ʖD"EO(1Ő$EbCȎ nhqvvzvv*+6i*_"SE(/NN ֝eʦ.|daӅ2Nόa(WM4Ы 4*Sm5%Ejo/ma(dh/L NŃbeUpP1w^ )IUm*QӢ^  $<ӏ,T!H"ev(P*L"dG @HxQ"%@9VflQ&P2B#$4y凇 4͝ذlL 1fq, kZֵkZֵkZֵkZֵkZֵkXg,kZֵkZֵkZֵkZֵkZֵkZLA[Ժzx-p]Aet`-nKՉɟ>%,XZI"X %aq?@ƜgV >r/Z81$@Py"egdĐYDQ@@i{Hij&$x"JZ}@<44!kbVSn+/L_qO~/gpȕQj)DK+ hğ\{Ղo"X %aqUgθRV >x&),`c\ּ&$x"3LO8$hbX^g8IJEY(ǔ(H33IX\kG$*CIX\kgλHRV >x&4 0PpWzo$TLsH%*N2NÁȒTi䉖PE8K6^>]/)] @HyPTFHaXi86nbJ /劐VǢ1&XqA;?ۑa%qR9b\Šg*y"eg#nX+|^q՟ҤHaXi/Jƍ;bM6F2N4=bYǓ($HDi$1v4:TUOU;ְC 4Y1iW4ip}dљ&ibyƍVI=Tc$?LaD5Z*:ZJ2X1%aqa,z 5; U@@X8qQ\,/1E3FzcOF%y,4VρU7MITgC 3I!hi+`ĕơ(`e X6&UWcgi8qQ\,/1E3FzcOF%y,4Vρi6M4LOtsQdL^*+6ii$*9dSP"`EV>b0iRJ^**UG$`k¼)մi<70h쨽+k)J%࡙E"vy,4VaiZn3IX\kG$&qb0iRJ^**UG$`k¼)մi<70h쨽+k)J%࡙E"vy,4Vaia(WM4M¦iK8#nX %aq^  GN)K y" D(4D("Mvmh=72Nk_E^ՂO%|<ό1 Qȫ%AIX\kG$ެ}a2Hi+ r2N),`ddWw!k't MkaX XN&QI/dev/null 2>&1 && { /usr/bin/lslpp -iq tivoli.tsm.client.ba.32bit.common >/dev/null 2>&1 [[ $? == 0 ]] && return 1 } /usr/bin/lslpp -iq tivoli.tsm.client.ba.64bit.base >/dev/null 2>&1 && { /usr/bin/lslpp -iq tivoli.tsm.client.ba.64bit.common >/dev/null 2>&1 [[ $? == 0 ]] && return 1 } return 0 } typeset result discover_tsm_client result=$? echo "TSM client smart assist:TSM_CLIENT:TSM backup archive client:TSM_BACLIENT:$result" exit 0  kXo$o@!/םa֝a֝a&!2vT./usr/es/sbin/cluster/sa/tsmclient/sbin/tsm_client_xutilserys@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmclient/sbin/tsm_client_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmclient/sbin/tsm_client_xutils.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM #---------------------------------------------------------------------- # # Function: listEnv_TSM_CLIENT # # Description: TSM_CLEINT_SHARED_CONF_DIR variable need to be exported # to proceed further # # Arcguments: none # # output: None # #---------------------------------------------------------------------- function listEnv_TSM_CLIENT { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # # Enter TSM client shared configuration directory # print_start_tag ENVS print_XML_comment "TSM_CLIENT variable need to be setup to discover DB2" print_start_tag ENV "TSM_CLEINT_SHARED_CONF_DIR" "TSM_CLEINT_SHARED_CONF_DIR" "$TSM_CLEINT_SHARED_CONF_DIR" print_end_tag ENV print_end_tag ENVS KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #---------------------------------------------------------------------- # # Function: listInstances_TSM_BACLIENT # # Description: Lists the instances for the TSM_BACLIENT components # # Arcguments: componentid , nodes # # output: list of instances in xml format # #---------------------------------------------------------------------- function listInstances_TSM_BACLIENT { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" #No instances KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------------------------------------------------------- # # Function: listProps_TSM_BACLIENT # # Description: List properties for the TSM_BACLIENT component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Application Name [tsmclient_hacmp07] #* TSM client configuration directory /mnt/client/tsm #* TSM client Owning Node hacmp07 #* Take over Node(s) [] #* shared file systems of the client to be backed up #* Service IP Label [] # Netmask(IPv4)/Prefix Length(IPv6) [] #* TSM Space Management (HSM) client # #--------------------------------------------------------------------------- function listProps_TSM_BACLIENT { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : Discover attributes # #Example : # /usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsm_client_query -c #application_name:primary #tsmclient_hacmp07:hacmp07 /usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsm_client_query -c 2>/dev/null | grep -v -E "^#|^$" > /usr/es/sbin/cluster/etc/sa_inst.x IFS=":" read application_name primary < /usr/es/sbin/cluster/etc/sa_inst.x # : Discover Picklists : Discover the takeover node list # takovernodes_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | grep -v "$primary" tr '\n' ',' ) takovernodes_val_list=${takovernodes_val_list%,} #serive ip pick list serviceip_picklist=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') serviceip_picklist=${serviceip_picklist%,} #shared file systems of the client to be backed up picklist shared_fs_to_backup_picklist=$(/usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsm_client_query -f "$TSM_CLEINT_SHARED_CONF_DIR" 2>/dev/null | grep -v -E"^#|^$" ) shared_fs_to_backup_picklist=$(echo $shared_fs_to_backup_picklist | tr ' ' ',') shared_fs_to_backup_picklist=${shared_fs_to_backup_picklist%,} # : Print each property # #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" #* Application Name [tsmclient_hacmp07] print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$application_name" "" "" "" \ "-a" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* TSM client configuration directory /mnt/client/tsm print_start_tag PROPERTY "2" "TSM_CLIENT_CONF_DIR" "TSM client configuration directory" "" \ "$TSM_CLEINT_SHARED_CONF_DIR" "" "" "" \ "-d" "string" "false" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* TSM client Owning Node hacmp07 print_start_tag PROPERTY "3" "OWNNODE" "TSM client Owning Node" "" \ "$primary" "" "" "" \ "-p" "string" "false" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* Take over Node(s) [] print_start_tag PROPERTY "4" "TAKEOVERNODE" "Take over Node(s)" "" \ "" "$takovernodes_val_list" "" "" \ "-t" "string" "true" "true" \ "true" "true" "" "" print_end_tag PROPERTY #* shared file systems of the client to be backed up print_start_tag PROPERTY "5" "FS_TO_BACKUP" "shared file systems of the client to be backed up" "" \ "" "$shared_fs_to_backup_picklist" "" "" \ "-f" "string" "false" "true" \ "true" "true" "" "" print_end_tag PROPERTY #* Service IP Label [] print_start_tag PROPERTY "6" "SERVICEIP" "Service IP Label " "" \ "" "$serviceip_picklist" "" "" \ "-s" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) [] print_start_tag PROPERTY "7" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "" \ "-n" "string" "true" "false" \ "false" "true" "" "" print_end_tag PROPERTY #* TSM Space Management (HSM) client print_start_tag PROPERTY "8" "SPACE_MGMT" "TSM Space Management (HSM) client" "" \ "" "y,n" "" "" \ "-h" "string" "false" "true" \ "false" "true" "" "" print_end_tag PROPERTY # : This command will be executed to configure the instance. # print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsm_client_config" print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------- # MAIN STARTS HERE #--------------------------- # # these functions will be consumed by clvtsa # # : TSM Client utilities # tsm_client_xutils=( typeset env_func="listEnv_TSM_CLIENT" typeset inst_func="listInstances_TSM_BACLIENT" typeset prop_func="listProps_TSM_BACLIENT" )  k%odW/םaX՝a֝a&W2vT./usr/es/sbin/cluster/sa/tsmclient/config/cl_tsmclient_config.xmlsdordd " kꔵ%od/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/tsmclient/config/cl_tsmclient_config.xsdsdordd curs kn%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/tsmadmin/confiAA kH%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/tsmadmin/sbiniAA k~%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/tsmadmin/config/cl_tsmAA kH$od/ /םa֝a֝a&/ 2vT./usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminGlobalsfig.xsdd# ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminGlobals.sh 1.2.1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminGlobals.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM . /usr/es/lib/ksh93/func_include PATH=$PATH:/usr/es/sbin/cluster/sa/sbin:/usr/es/sbin/cluster/utilities FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE:$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH #--------------------------------- # Global definitions #--------------------------------- SA_SBIN=/usr/es/sbin/cluster/sa/sbin #--------------------------------- # Default directory Path for TSM Admin Center version 8.0.0 and above #--------------------------------- TSM_ADMIN_INST_DIR=/opt/tivoli/tsm #--------------------------------- # This will check for ADMIN_VERSION from the installedpackages # Sample version V8.0.8 #--------------------------------- TSM_ADMIN_VERSION=$(/opt/IBM/InstallationManager/eclipse/tools/imcl listInstalledPackages | grep -w "gui" | cut -d '_' -f 2 | cut -c 1-5) if [[ -d TSM_ADMIN_INST_DIR ]] then tsmadmin_version_file=$(find $TSM_ADMIN_INST_DIR -name "versionInfo.sh" 2>/dev/null) fi if [[ ! -d $TSM_ADMIN_INST_DIR || -z $tsmadmin_version_file ]] then if [[ -z $TSM_ADMIN_VERSION ]] then # For TSM version 6.3.4, default path is /opt/IBM/tivoli TSM_ADMIN_INST_DIR=/opt/IBM/tivoli fi fi #---------------------------------- # Checking path for Profile Scripts #---------------------------------- tmp_path=$(find $TSM_ADMIN_INST_DIR -name "versionInfo.sh" 2>/dev/null|grep -w profiles|head -1) if [[ -z $tmp_path ]] then if [[ -z $TSM_ADMIN_VERSION ]] then TSM_ADMIN_PROFILE_SCRIPTS=$TSM_ADMIN_INST_DIR/AC/ISCW61/profiles/TsmAC/bin else TSM_ADMIN_PROFILE_SCRIPTS=$TSM_ADMIN_INST_DIR/ui/utils fi else TSM_ADMIN_PROFILE_SCRIPTS=$(dirname $tmp_path) fi ADMIN_PROFILE="TsmAC|TIPProfile" TSM_AC_HA_SBIN=/usr/es/sbin/cluster/sa/tsmadmin/sbin TSM_ADMIN_HA_CONFIG=/usr/es/sbin/cluster/sa/tsmadmin/config CLVTCMD=/usr/es/sbin/cluster/utilities/clvt KLIB_TSM_ADMIN_HACMPLOG_ENTRY="tsm_admin.log" KLIB_DEFAULT_LOGFILE=/var/hacmp/log/$KLIB_TSM_ADMIN_HACMPLOG_ENTRY LOG_FILE=$(clodmget -q name=$KLIB_TSM_ADMIN_HACMPLOG_ENTRY -f value -n HACMPlogs) LOG_FILE="$LOG_FILE/$KLIB_TSM_ADMIN_HACMPLOG_ENTRY" INFO_FLAG="true" WARN_FLAG="true" DEBUG_FLAG="false" ERROR_FLAG="true" TRACE_FLAG="true" l k$od3/םa֝a֝a&32vT./usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminUtilitiesg.xsdd# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminUtilities.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #---------------------------------------------------------------------------- # Function: # isServiceIPLabelAlreadyDefined # # Purpose: # Validate that the service IP label isn't already defined in the PowerHA SystemMirror # cluster. If it is already defined, report an error and exit this script # # Arguments: # (1) Service IP Label # # Return: # 1 if service IP label is not defined # 0 if service IP label is already defined #---------------------------------------------------------------------------- function isServiceIPLabelAlreadyDefined { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset serviceIP=$1 clvt query resource_group >/dev/null 2>&1 if [[ $? == "0" ]];then RGS=$(clvt query resource_group) for rg in $RGS; do ips=$(clvt query resource_group $rg | grep \ SERVICE_LABEL | awk -F= '{ print $2 }') ips=${ips//\"/} for ip in $ips; do [[ "$ip" == "$serviceIP" ]] && { return 0 } done done fi return 1 } #---------------------------------------------------------------------------- # Function: # getServiceNetwork # # Purpose: # Determine the appropriate network to place the service IP label # on based on adapter count per network per node # # Arguments: # (1) network type in PowerHA SystemMirror # (2) list of nodes to find interfaces for # # Output: # network name to place service IP label on # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function getServiceNetwork { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x serv_addr_type=$1 NODES=$2 validv6Networks="" validv4Networks="" typeset NETWORKS=$(clvt query network | sort -u) typeset validNetworks typeset -A netXnodeCount for network in $NETWORKS do fam=$(clvt query network $network| awk -F= '$1 ~ /NET_FAMILY/ { print $2 }' | sed -e "s/\"//g") if [[ "$fam" == "2" ]] then validv6Networks=$(echo "$network $validv6Networks") else validv4Networks=$(echo "$network $validv4Networks") fi done INTERFACES=$(clvt query interface | sort -u) for interface in $INTERFACES; do node=$(clvt query interface $interface | awk -F= '$1 ~ /NODE/ {print $2 }' | sed -e "s/\"//g") net=$(clvt query interface $interface | awk -F= '$1 ~ /NETWORK/ {print $2 }' | sed -e "s/\"//g") [[ -n $node && -n $net ]] && { typeset -i count=${netXnodeCount[${net}_${node}]} (( count++ )) netXnodeCount[${net}_${node}]=$count } done typeset -i invalid=0 if [[ "$serv_addr_type" == "2" || -z $validv4Networks ]] then for network in $validv6Networks; do invalid=0 for node in $NODES; do [[ ${netXnodeCount[${network}_${node}]} == 0 ]] && { invalid=1 } done [[ $invalid == 0 ]] && { echo $network return 0 } done fi for network in $validv4Networks; do invalid=0 for node in $NODES; do [[ ${netXnodeCount[${network}_${node}]} == 0 ]] && { invalid=1 } done [[ $invalid == 0 ]] && { echo $network return 0 } done return 1 } ####################################################################################################### # # Function : validateNodes # # Purpose : Validate if the Primary and takeover nodes are not repetetive. # # Arguments : PRIMNODE # TAKEOVNODES # # Returns: 0 for Sucess # 1 for Failure # ###################################################################################################### function validateNodes { for node in $2 do [[ $1 == $node ]] && return 1 done return 0 } #---------------------------------------------------------------------------- # Function: # getUnusedName # # Purpose: # Obtain an un-used name for an PowerHA SystemMirror component (application, monitor, # resource group, etc) # # Arguments: # (1) by reference - name # (2) type - (as used in clvt command # resource_group | # application | # application_monitor, etc.) # # Output: # output contains the available name # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function getUnusedName { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset name=$1 typeset type=$2 typeset newname=$name typeset relyl typeset -i count=1 clvt query $type $newname >/dev/null 2>&1 ret=$? while [[ $ret == "0" ]]; do (( count++ )) # Give up after 9 attempts if (( $count > 9 )); then echo $name return 1 fi newname=${name:0:31} newname=${newname}${count} clvt query $type $newname >/dev/null 2>&1 ret=$? done echo $newname return 0 } ####################################################################################################### # # Function : validateAppName # # Purpose : Validate if the Application name entered has valid charactes. charecters can be # [a-z][A-z][0-9]_ # # Arguments :APPLICATION_ID # # Returns: 0 for Sucess # 1 for Failure # ###################################################################################################### function validateAppName { appname=$1 [[ -n ${appname//[a-zA-Z0-9_]/} ]] && return 1 return 0 } ##################################################################################################### # # Function : isipv6addr # # Purpose : Finds the address is IPv4 or IPV6 # # Args: # # # Returns : # 0 for success # 1 for failure (when the address is not IPv6) # ####################################################################################################### function isipv6addr { typeset v6addr=${1:-} abc=$(echo $v6addr|awk ' { n=split($1, A, ":") if(n==1) { print n exit } for(i=1; i<=n; i++) { if(length(A[i])) { if(i == n) printf "%s", A[i] else printf "%s:", A[i] } else { if(i==1) s=1 else s = 9-n for(j=1; j<=s; j++) printf "%s:", "0" } } }') if [[ $abc == 1 ]] then return 1 else return 0 fi } {  lL$odC/םa֝a֝a&)2vT./usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsm_admin_configg.xsdd    # aeinorst"$-AIS_cdglmp1=CELMNOPRT\fu&./2BDGK]hvwy%()0:FHUV[bkx{} !',34;>?|5679Yq8Wz*@Z4#(@ߠ@T &P2S"$ # n5r>/vg%gȼథp@N8ba _9 I2I&"B @G"BLi0a3JapmhÕb F QtFrB)(|8`MŽ ` @mGu V!ԔLAfo(*PCmԛW$,P^Nrb  G1)#V!GƯfXRu%XLDw*"#3QeZܫ,XJ=1WtUGܪ}(mH@AW%.ag)80䤫\O璒"I(V@k3ym$GrB:_<> yQI$W(2~3pcwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvڋ>HJ#M 5iCɤ=2DQ$"n4nh7>6ai06D5EүmZ0XChCT]:ч*"".^ Lam0j_086aʱ#uUDX/ kD"5J&"Ea D=2M(L%Ly"@3[Qv_G@B@$&ç] R,XJ9'0F:?,Xua/*DLHٜtE^ >B*6쾏GMޓ+S1)~Y";b|j쾏Hyb($%}XuA3yc+Srcj.䇕D@?$GAV!GƯf[Qv_G(I2'yd*#u(-)ڋ>b0Id ~Y";bԔLAc3ua(5e}tT $ED@i",ʱaӮRj.㉑(LEDCRL3(5c,ʱaӮR[wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwmf*V/rV!cJ*=2yijM|i ү`'9O#3QrGNFYJyEB+6Dw*# m&^m_S3x+1)Qof%<.fomZ`T%ʪXQ* 5iCɤ=2DQ$"n4nh7>6]\ƚY")92)r Dr&I4DQv_Gs,5|򯤌G3p8S|i ү`'9ORQ1Մ^&MhH!餂kf( a5|ex(Q NHY/J0=ID37VxY{[ܪex(Qs,?.",⨔,4өWNRpfXDDaJɚ)83Sp,5WXX pH!餂kf(bQ%5zeQI >`4WF(fQa+' 5w/7Q}8Rބ2Z5ͶU38= F9G0.fomyyyyyyyyyyyyyyyyyyyXJ;U'V =zQiCɤ=2DQ$"n4nh7>6]^ktz?+S]_T o4&CE%J$<=DPؙ]|8 @#8 Q+p( ?+S]U/IqW" %IaFZ9V!81GW5'V ?D/_.u527KR79!A%+oU} Q\V2_3Q7GMΛezbxX[\V]0GMo_1~zpg9!A%0,5WXXfaxSt꿨>bQ%5z zi Y-HO=hÕbusTXEm'V ?D/_.u 䇕8zhk%_AN(U$,`Dh%ri4hF +GMkX fps z@pՁ- Ȩr9ʫ6f 7oE}S/hqT.h.F^ A @qUɈJz%@D4c޽OueMkA}E0Ӂ >>bQQiL%IN4WK[yaG2fpEw}E05^bze7o@!y}E0&'FD=4My,Ǖ*L3]hÕbusIKUߔ CH^{a9|_QiL%š1^ԛW|`Jk"' kLam0j_05@rJ5|%XXJ%ntop1U{QG>Uvp}bs,9"9ȓ$"Cbeu,,c3F Ĉ"H&bcʕ&W aʱ:Aw Aww[1) :+B+e#W& GRQ1Մ^&8W*38অZmݶ2r4@iL5 F Qs4f^˪)u&XR Y5[ ,-Lժɿ:Γ5 bJ"Y";bob0@1ރ,XJ9'0PG YdD@i@(P#,2I 4Cr Dr&I4D=^844W!WY +b˔}8}(WY+7H!餂kf( aQ/kl૪%_>?E7D_$e࣫ G1)'1}W,*񒯣mDM$^K1EI 1GZ0Xh\{"Y";b|jxW/]WqB$L@~iŐLHh `(A8X^hCIגQlyR1OZ0Xh\ܫWϣwRqGSfpa\n\|_>2U.u7S}aX M(U$8CɃxN4*$GrB;.5wIXJ:F^ AL6PZSTia 2PYPKTz"60@#9AG*;FG&8p%A WQGſDM$^K1EI 0 F tze(Dw*#PZSW1)hqΡxHyVFXuUF Q+4.zˣQdUGeԠbS B78N*91J*ׯ@!y̺79RҚѸA.G8QoCIגQm@x FE\u(-)ޯYt}z?,ʱ캔Jy>xas^&Uі(}1hÕbup35x+PZST: ^~Y";bu(-)4|8PM$<ӊMC*5|hTSs,XJ8asœe]T_RQ1ꗉ(AD$kܪUEҮopphwwwwww k$od: /םa֝a֝a&: 2vT./usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsm_admin_queryg.xsdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsm_admin_query.sh 1.2.1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsm_admin_query.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################################### # # NAME: # cl_tsm_admin_query # # PURPOSE: # Discover PowerHA SystemMirror configuration for TSM admin center. This script is used in SMIT # discovery and list screens. # # ARGUMENTS: # -n smit o/p for application name and primary node # -q Application_id # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminGlobals . /usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminUtilities typeset application_id prim while getopts q:n opt do case $opt in q)#SMIT output for modifying TSM client Smart Assist application_id=$OPTARG ;; n)#SMIT output for application name and primary node prim="y" ;; esac done #Discovery for Application and local node name [[ -n $prim ]] && { echo "#application_name:primary" local_node=$(get_local_nodename) echo "tsmadmin_"$local_node":"$local_node exit 0 } #Discovery for modifying the smart assit application [[ -n $application_id ]] && { echo "#primary:takeover:serviceip:prefix:admuser" rg=$(clodmget -q "name=RESOURCE_GROUP and application_id=$application_id" -f value -n HACMPsa_metadata) [[ -z $rg ]]&& exit 1 nodes=$(clvt query resource_group $rg | grep -w NODES|awk -F= '{ print $2 }' | sed -e "s/\"//g") serviceip=$(clvt query resource_group $rg | grep SERVICE_LABEL|awk -F= '{ print $2 }' | sed -e "s/\"//g") prefix=$(clodmget -q "ip_label=$serviceip" -f netmask -n HACMPadapter) user=$(clodmget -q "name=TSM_AC_USER and application_id=$application_id" -f value -n HACMPsa_metadata) takeover="" primary="" for n in $nodes do if [[ -z $primary ]] then primary=$n else takeover=$(echo "$takeover $n") fi done echo $primary":"$takeover":"$serviceip":"$prefix":"$user exit 0 } 9 k$od3 /םa֝a֝a&3 2vT./usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminmonitorg.xsdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminmonitor.sh 1.2.1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminmonitor.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################################### # # NAME: # cl_tsmadminmonitor # # PURPOSE: # monitor script of Smart Assist for TSM admin center # # ARGUMENTS: # -a smart assist application name # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == "high" ]] then PS4_FUNC=true set -x fi . /usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminGlobals KLIB_HACMPLOG_ENTRY=$KLIB_TSM_ADMIN_HACMPLOG_ENTRY while getopts a: opt do case $opt in a) # admin application name, which will be highly available app_name=$OPTARG ;; esac done user=$(clodmget -q "name=TSM_AC_USER and application_id=$app_name" -f value -n HACMPsa_metadata) set +x pass=$(clodmget -q "name=TSM_AC_PASSWORD and application_id=$app_name" -f value -n HACMPsa_metadata | /usr/es/sbin/cluster/cspoc/cldecodearg) set -x KLIB_SA_logmsg INFO 2 31 tsmadminsa.cat "monitoring the TSM Admin center\n" if [[ -z $TSM_ADMIN_VERSION ]]; then $TSM_ADMIN_PROFILE_SCRIPTS/serverStatus.sh tsmServer -username $user -password $pass |grep STARTED >> $LOG_FILE 2>&1 else ps -eo 'pid,args' | grep -vw grep | grep $TSM_ADMIN_INST_DIR/ui/Liberty >> $LOG_FILE 2>&1 fi exit $? Cl4 ks$od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminstartdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminstart.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminstart.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################################### # # NAME: # cl_tsmadminstart # # PURPOSE: # sart script of Smart Assist for TSM server instance # # ARGUMENTS: # n/a # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminGlobals KLIB_HACMPLOG_ENTRY=$KLIB_TSM_ADMIN_HACMPLOG_ENTRY KLIB_SA_logmsg INFO 2 1 tsmadminsa.cat "starting the TSM Admin center\n" if [[ -z $TSM_ADMIN_VERSION ]] then $TSM_ADMIN_PROFILE_SCRIPTS/startServer.sh tsmServer -nowait -quiet > /dev/null 2>&1 else $TSM_ADMIN_PROFILE_SCRIPTS/startserver.sh > /dev/null 2>&1 fi exit $?  kd;$odK /םa֝a֝a&K 2vT./usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminstopdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminstop.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminstop.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################################### # # NAME: # cl_tsmadminstop # # PURPOSE: # stop script of Smart Assist for TSM admin center # # ARGUMENTS: # -a smart assist application name # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminGlobals KLIB_HACMPLOG_ENTRY=$KLIB_TSM_ADMIN_HACMPLOG_ENTRY while getopts a: opt do case $opt in a) # admin application name, which will be highly available app_name=$OPTARG ;; esac done user=$(clodmget -q "name=TSM_AC_USER and application_id=$app_name" -f value -n HACMPsa_metadata) set +x pass=$(clodmget -q "name=TSM_AC_PASSWORD and application_id=$app_name" -f value -n HACMPsa_metadata | /usr/es/sbin/cluster/cspoc/cldecodearg) set -x if [[ -z $TSM_ADMIN_VERSION ]] then ps -eo 'pid,args' | grep -vw grep |grep tsmServer > /dev/null 2>&1 if [[ $? == 0 && -d $TSM_ADMIN_PROFILE_SCRIPTS ]] then KLIB_SA_logmsg INFO 2 32 tsmadminsa.cat "stoping the TSM Admin center\n" $TSM_ADMIN_PROFILE_SCRIPTS/stopServer.sh tsmServer -username $user -password $pass -nowait -quiet >> $LOG_FILE 2>&1 exit $? fi else ps -eo 'pid,args' | grep -vw grep | grep $TSM_ADMIN_INST_DIR/ui/Liberty > /dev/null 2>&1 if [[ $? == 0 && -d $TSM_ADMIN_PROFILE_SCRIPTS ]] then KLIB_SA_logmsg INFO 2 32 tsmadminsa.cat "stoping the TSM Admin center\n" $TSM_ADMIN_PROFILE_SCRIPTS/stopserver.sh >> $LOG_FILE 2>&1 exit $? fi fi exit 0  kj$od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsm_adminmanualg.xsdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsm_adminmanual.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsm_adminmanual.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ################################################################################# # Name: cl_tsm_adminmanual # # Purpose: To create PowerHA SystemMirror resources and Resource group for Managing # TSM Admin center using manual configuration. # # Arguments: # n/a # # Returns: 0 for Sucess # 1 for Failure ################################################################################ . /usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminGlobals . /usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminUtilities KLIB_HACMPLOG_ENTRY=$KLIB_TSM_ADMIN_HACMPLOG_ENTRY dspmsg -s 1 tsmadminsa.cat 43 "configuring TSM Admin center using manual configuration\n" KLIB_SA_logmsg INFO 1 43 tsmadminsa.cat "configuring TSM Admin center using manual configuration\n" typeset APPLICATION_ID # Smart Assist Application Name of the TSM Admin center. typeset PRIMNODE TAKEOVNODES # primary and takeover nodes. typeset SERVICE_IP # Service IP for the TSM instance. typeset NETMASK # Netmask/ prefix Length of service IP address. typeset USERID # TSM Admin center user id typeset XML_PATH="" while getopts f: opt do case $opt in f) # xml file path XML_PATH=$OPTARG ;; esac done APPLICATION_ID=$($TSM_AC_HA_SBIN/cl_tsm_admin_query -n|grep -v application_name|awk -F: '{ print $1 }') validateAppName "$APPLICATION_ID" [[ "$?" == "1" ]] && { KLIB_SA_logmsg ERROR 1 11 tsmadminsa.cat "TSM admin smart assist Application id=%1\$s is not in the rage [a-z][A-z][0-9]_.\n" "$APPLICATION_ID" exit 1 } PRIMNODE=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_ADMIN_HA_CONFIG/cl_tsmadmin_config.xsd -t PrimaryNode|awk -F= '{ print $2 }') [[ $? != 0 || -z $PRIMNODE ]] && { KLIB_SA_logmsg ERROR 1 44 tsmadminsa.cat "No value is specified for PrimaryNode property in TSM admin xml file\n" exit 1 } TAKEOVNODES=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_ADMIN_HA_CONFIG/cl_tsmadmin_config.xsd -t TakeoverNodes|awk -F= '{ print $2 }') if [[ $? == 0 && -n $TAKEOVNODES ]] then TAKEOVNODES=$(echo $TAKEOVNODES|tr "," " ") else KLIB_SA_logmsg ERROR 1 45 tsmadminsa.cat "No value is specified for TakeoverNodes property in TSM admin xml file\n" exit 1 fi SERVICE_IP=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_ADMIN_HA_CONFIG/cl_tsmadmin_config.xsd -t IPAddress_or_name|awk -F= '{ print $2 }') [[ $? != 0 || -z $SERVICE_IP ]] && { KLIB_SA_logmsg ERROR 1 46 tsmadminsa.cat "No value is specified for ServiceIPs property in TSM admin xml file\n" exit 1 } SERVICE_IP=$(/usr/bin/host $SERVICE_IP|awk -F" " '{print $1}'|awk -F. '{print $1}') [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 1 49 tsmadminsa.cat "No entry for service IP in /etc/host file\n" exit 1 } NETMASK=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_ADMIN_HA_CONFIG/cl_tsmadmin_config.xsd -t Prefix_or_Netmask|awk -F= '{ print $2 }') USER=$($SA_SBIN/clsaxmlutil -s -x $XML_PATH -m $TSM_ADMIN_HA_CONFIG/cl_tsmadmin_config.xsd -t User|awk -F= '{ print $2 }') [[ $? != 0 || -z $USER ]] && { KLIB_SA_logmsg ERROR 1 47 tsmadminsa.cat "No value is specified for User property in TSM admin xml file\n" exit 1 } validateNodes $PRIMNODE "$TAKEOVNODES" (( $? != 0 )) && { KLIB_SA_logmsg ERROR 1 14 tsmadminsa.cat "TSM admin smart assist has primary=%1\$s and takeover nodes=%2\$s as repetitive\n" $PRIMNODE "$TAKEOVNODES" exit 1 } if [[ -z $$NETMASK ]];then $TSM_AC_HA_SBIN/cl_tsm_admin_config -a $APPLICATION_ID -p $PRIMNODE -t "$TAKEOVNODES" -s $SERVICE_IP -u $USER exit $? else $TSM_AC_HA_SBIN/cl_tsm_admin_config -a $APPLICATION_ID -p $PRIMNODE -t "$TAKEOVNODES" -s $SERVICE_IP -n $NETMASK -u $USER exit $? fi COPYR k$odX/םa֝a֝a&X2vT./usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadmindiscoveryg.xsdd#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadmindiscovery.sh 1.5 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadmindiscovery.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################################### # # NAME: # cl_tsmadmindiscovery # # PURPOSE: # Discovers TSM admin center is installed or not # # ARGUMENTS: # n/a # # RETURNS # 1 on success # 0 on Failure # ################################################################################################# [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsmadminGlobals function discover_tsm_admin { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x [[ -d $TSM_ADMIN_INST_DIR ]] && { $TSM_ADMIN_PROFILE_SCRIPTS/manageprofiles.sh -listProfiles 2>>$LOG_FILE |grep -qEw "$ADMIN_PROFILE" if [[ $? == 0 || -d $TSM_ADMIN_PROFILE_SCRIPTS ]] ; then return 1 fi } return 0 } typeset result discover_tsm_admin result=$? echo "TSM admin smart assist:TSM_AC:TSM admin center:TSM_ADMINCENTER:$result" exit 0  k$o@/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/tsmadmin/sbin/tsm_ac_xutilscov@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/tsmadmin/sbin/tsm_ac_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/tsmadmin/sbin/tsm_ac_xutils.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM #---------------------------------------------------------------------- # # Function: listEnv_TSM_ADMINCENTER # # Description: This component doesnt have any ENV settings. # but as per the framwework we need this dummy function # # Arcguments: none # # output: None # #---------------------------------------------------------------------- function listEnv_TSM_ADMINCENTER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x #dummy function KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #---------------------------------------------------------------------- # # Function: listInstances_TSM_ADMINCENTER # # Description: Lists the instances for the TSM_ADMINCENTER components # # Arcguments: componentid , nodes # # output: list of instances in xml format # #---------------------------------------------------------------------- function listInstances_TSM_ADMINCENTER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # # No Instances for Admincenter # KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------------------------------------------------------- # # Function: listProps_TSM_ADMINCENTER # # Description: List properties for the TSM_ADMINCENTER component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Application Name [tsmadmin_hacmp07] #* TSM admin Owning Node hacmp07 #* Take over Node(s) [] + #* Service IP Label [] + # Netmask(IPv4)/Prefix Length(IPv6) [] #* Admin center user id [] #* Admin center password [] # #--------------------------------------------------------------------------- function listProps_TSM_ADMINCENTER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x #Example: #/usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsm_admin_query -n #application_name:primary #tsmadmin_hacmp07:hacmp07 # : Discover attributes # /usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsm_admin_query -n 2>/dev/null | grep -v -E "^#|^$" > /usr/es/sbin/cluster/etc/sa_inst.x IFS=":" read application_name primary < /usr/es/sbin/cluster/etc/sa_inst.x # : Discover Picklists : Discover the takeover node list # takovernodes_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | grep -v "$primary" tr '\n' ',' ) takovernodes_val_list=${takovernodes_val_list%,} #serive ip pick list serviceip_picklist=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') serviceip_picklist=${serviceip_picklist%,} #shared file systems of the client to be backed up picklist shared_fs_to_backup_picklist=$(/usr/es/sbin/cluster/sa/tsmclient/sbin/cl_tsm_client_query -f "$TSM_CLEINT_SHARED_CONF_DIR" 2>/dev/null | grep -v -E "^#|^$" ) shared_fs_to_backup_picklist=${shared_fs_to_backup_picklist%,} # : Print each property # #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" #* Application Name [tsmadmin_hacmp07] print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$application_name" "" "" "" \ "-a" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* TSM admin Owning Node hacmp07 print_start_tag PROPERTY "2" "OWNNODE" "TSM admin Owning Node" "" \ "$primary" "" "" "" \ "-p" "string" "false" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* Take over Node(s) [] + print_start_tag PROPERTY "3" "TAKEOVERNODE" "Take over Node(s)" "" \ "" "$takovernodes_val_list" "" "" \ "-t" "string" "true" "true" \ "true" "true" "" "" print_end_tag PROPERTY #* Service IP Label [] + print_start_tag PROPERTY "4" "SERVICEIP" "Service IP Label " "" \ "" "$serviceip_picklist" "" "" \ "-s" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) [] print_start_tag PROPERTY "5" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "" \ "-n" "string" "true" "false" \ "false" "true" "" "" print_end_tag PROPERTY #* Admin center user id [] print_start_tag PROPERTY "6" "TSM_AC_USERID" "Admin center user id" "" \ "" "" "" "" \ "-u" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY #* Admin center password [] print_start_tag PROPERTY "7" "TSMP_AC_PASSWD" "Admin center password" "" \ "" "" "" "" \ "-P" "string" "true" "true" \ "false" "true" "" "" print_end_tag PROPERTY # : This command will be executed to configure the instance. # print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/tsmadmin/sbin/cl_tsm_admin_config" print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------- # MAIN STARTS HERE #--------------------------- # # these functions will be consumed by clvtsa # # : TSM Admin Center component utilities # tsm_ac_xutils=( typeset env_func="listEnv_TSM_ADMINCENTER" typeset inst_func="listInstances_TSM_ADMINCENTER" typeset prop_func="listProps_TSM_ADMINCENTER" ) n ks$odE /םaX՝a֝a&E 2vT./usr/es/sbin/cluster/sa/tsmadmin/config/cl_tsmadmin_config.xmldd r/u kq$od*/םaX՝a֝a&*2vT./usr/es/sbin/cluster/sa/tsmadmin/config/cl_tsmadmin_config.xsddd t name kt$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/dnsdmiAA k=$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/dns/sbinconfigAA k$$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/dns/libconfigAA k$oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/dns/confignfigAA l>F%o.םa֝a֝a&@a2vT./usr/es/sbin/cluster/sa/dns/sbin/cl_dns_import   #e ainorst"$AEINORS_cdglmpu-/=CDFLMPT\fhv&().12:BGHKVbwy0>UY[]kx{|}!%',3;?WXq46bc O\ kQ2ID*x3`_\b#6²vڍF; 5vbvZMJ2~a Z&"atW ÃxCfffffffffffffffffffffffffffffffffffffffffffffffffd2ҋzif'e۔A%zƷҵr.׼>^aM̦Ϯڎ}d2uYi6+~ C8 L#eB0ǽjKҋz=NH$)D1x V ݡTcCAab ڥF48000=L}%]h {0+%f ՗[nj ~hƆC!=>[3kZVgjKE嵆C0ʻYOڊۣ tcC?*bV򷹍b7#os {Ik+*VW C2o)YNΊ^ э XgLmΌmkl=ca})э6}ǽ9fq43 a|Ƶ+_z5Id2q~иd1 =-q7"P yJy-71‘(d!MO¤۔mƶQiPc}'r<*MJ߯Fkoqi\g)`cý'M;]RmVdֱw}ܮ3y/ʓ&zOv¤۔xɭcӗv?Qگp @3vԅFl`@ݚJkd*Esףm|k(@3vaYLj;kF#XVSK1;,nXk(33333333333333333333333333333333333333333333333333!E ŮCKr;33333333333333333333333333333333333333333333333332 =1D,cݷN)Z E֣ D( mkjmC;QumBLE#ɠ8XgBPC 7l6²vڍvjWj,g#s-4qCʉv+)ۮ5Tme0ڣ]\T vkTvg``iˆ( ,I1R71&LЃ" n, {o,]nRjKҋz-2-pX!pxPNQNSe*12|7hgjXyXvvQ  L \aH$^/&yy5?m}F}/Z/&5*S2_IDWZq8)]/ q-70-2-qFn;~%ɭhhSWN^]|ӅPA5PXb"("o;bL7$'o5Th4c s@zb( Xy2 @4ٺPڣEe1a9D( OF֚Fd3vkT55zڋdCldIC;c}uzڋ/Y9~^MmzѾ66+*WޟAҼ2ϫ.!!E Ů)"mQ )a+ LQK&@2ۻY?uu.P"rLQK&AXa g"׼0;=oj3Uz!zʓGgc}uzڋ/Y9ޜ%{+O]nb2ϫ.!!E Ů)"mQ )a+ LQK&@2ۻY?uu.P"t\q/ʓZS;^ksU1UIrEaYN  ,hѬ/J~SM$J)\9]Fchlk[})ďLtJonQEn7 L)=)4VSFcZN$xe ɭ^5TŽqX& D L$E4HhrLQK&AXbѮڣEe1a5G&Po.Ӌz8 *M$"$"H*i,7 Lv+) h냎fu$xes9 =1D,pڣEe1av`٭pq֎ďLvv9 =1D,pڣEe1av`͋5%yRkIP$GUY#ɠos@zb( Y2]Fchl7]uqU` H,EH,=2DUY#ɠo-&jԆ=kc=cd21+r{ʓzWk#[ZM5ܬGoţYl͈c޽'yMfSg6j;U(Ly_C2>0ǽ]֣_] s˭`4d3v{GAUaxo$ QffffffffffffffffffffffffffffffffffffffffffffffffffBݚ'gTQگ> j$DQHD8w4ę0o8HOߌBQi (ޜ7ȿ ]nw n4$ʢK$y4 x!ڷ)s$ڎ}֎+^ܼk+*Wޞ l]Ͷ߳Z:゗j6ߌyp7EfǴV8Ek5r4qH3Z:\h냎Z:ѥqw6jKֶq&Q4HȐ5cq/ʓWjgjoM4*8)v߁E\q/ʓE53Zf=USP M4*-X`{!qͰƍɡpx,Oq4Dj*o8HO/J9^8i"U5{3~ƵjKn^stJxPW8 a|$'&I=fvgø؝~iɭc[M{5%yR}NWx XӛzT4YMA{'xFt\q/ʓZS;^X#fMp@Hl"(+qø1޻FoֶIxT4R^7&v \,/|DAeOY2ݙ(jpo#5zt3)qƤo*O3(ic֍ډriR7t\q/ʓZS;S`D ((j ~AMnw3%Sm/5]hqKFgoN,Eu*AbG K6p{h}d'9*AbG H=/‚Wp? }lL" *zQAESp ؝~iɭc[MA%yh+3%S֍ډriR6{@b,&= SmGj9zѿsP[j$T^ʵzy2cyRpx= ,Fi+ 71o}oPFo+zt3AȿsO3~Ƶ]5sr|pAs8=$ʞTe3QD;o#5zt3)$-6vs(-?/kdZҥl4YMA{/(B^WzOyy5-3`D ((j 0kt37YmzѾ$xe-ň!~Abdyǔ(IE4Hhp@4ٺ\8s8w{j1q2<$ʢK$y4 ݬ M1DAERC33333333333333333333333333333333333333333333333332 E{ս g!^r<Ʈ $$}ۈ7} +o:_Sfb6/ٱ)ܿMq]ō!}Yu u6vO =U=ᾓOD%D!vkT> j$DQHD8w4ę0o8HOߌBh/HMkףJl +AtƀcC LrI@9RvgJ-{<Ʈ Fn;{C!zʓx6>n+/ci/פؕIlyMoozv gktM@| {ە)t+,1)1]`d3V]og{!!MT@'bvCY1ӔP[ э _Cnԭr7)dT4AEL k:ܦϕI2,IJ<+>qSLQI2+H=_4朘)d7$'$ $U*bc{0{ $$VLOHOdYSjfz (;bvCLo6|4s#[7hgkF4*|,uRLr`ZH"ICqSLQI2*lJ6 j$DQHD8w4ę0o8HOߌBm*VQ4ʎ7l6²vڍۮ5zLgk"}m "EE4"$<P$GUY#ɠ5cNLDA""@"ha}mT^-Nh゙۬KNlޅ"$@ˆ()8࡮ڣEe1Ykۆ]w-3xɮ07:ߌco_psi)AmQ{_['*֕WIxTi*UeLӅQ(<)I Ѓs)Ž@XYIj7*UeLӅQ(<)I Ѓs!8)BO LsUM2NADH<򨦒Q$GB~bmOgpĢކu 7*UeLӅQ(<)I Є4}r0"C@#UJip "EE4"$<~bmOgpvd|nߎ@#UJip "EE4"$<~bmOgpvd|n>7TgbvCo9PT&Q $QyTSIb(A#ɡ)Fܤw JmXGIPyByTSId&cMG8 YD*4DD#*i,EH$y4!)Sj^oRb7'ҼJkm-<7*UeLӅQ(<)I Є4HM[meWcPQD,iAR(eF(DyQM%I&4HM[mfkN-+KOnu Ա@#UJip "EE4"$<~b#6..FMm`XgkiR|w,iQ$XQE4o9PT&Q $QyTSIb(A#ɡ<+F7| đTؤX/tƛAӚjtcMg =]*UeLӅQ(<)I э8 YD*4DD#*i,EH$y4 `)=x=%6{[dgk"^7'פɞ^Mo9y5z4֯yRp~Af1"՗Mj' dAb(Aa$򨦒MZy% C {ɭ^5TiPT&Q $QyTSIb(A#ɠo-J(DO*(@%DRTޮ鼴U(e<J  <z@4ٺPgJ-{{ )_m re'/*L=ŸPȅډri_]n^W[ gDQگ=jk4_It3x͏s??BwZM5 {թwņ5z{$xe-ň=298ԗI3=i]nwWu;^}cwfI!{;= >MTx$DT-ٞ& ^7橭Z/=n]nZ&6}v|6E,9VIZj QD x7OmǶ̗դ9TDz # o7I^{5%yR}]zE-3[=2eIV=5vv{ N *zTK1;-kƷ73yIU=aRX* ]xPW8 a|$'DAeOY2ݙ(jpv'kD1xߚF2kXcyMZ(-?/kdZҼjKS;^^T0̓] 0뱾A%{>R_mnNX? ڋ E4Dj,TQVqǦLi U Xh9^7ޢ Pz MbiTi(H$UdHV=5vv{HQ1E4RlSdQ1* QDǠ&)syh=褩STp r{*x$ǕE4E"((y!0pܴTXz`ޢ =B"T<408 A"z$* ʢCbiڀܴ= IETI28J"Pj,쵯G OP*$ƜA%VTIb5vbvZ׍nl;X_ =dYSjfz (;bvCc&v7RQ#NU+Vr+ҼJ#alݬlc}1J6vr=v 1i74 đT1$n1>H@7!dܴ.|y DyQM%<<(+pw{" nQ58w ^7摌:SgHZ 9VSmGj9zWIP6}v|6{" nQ58w>h/HMk,1)붣_mNڎ}5{] x=%6z%r+N$xe-ň=2j,1h8N{" nQ58w.h/HMk,1)P[j$T^ʵyhIxTI޴i=o'!V66{vxFĦSmGj<^n7'N$xe-ň=2j,1h8(P#*i,T*& (8ӔY#ɠo8>$ʞTe3QD'kD1xߚF2kXaMRQ#h*/kdZҽMkG\#xZfۻY<#?!aM^Mo^5Tܭ1Iҭ_I_K[Ŧ伜6||J6vp2X/ *"Q$8HOJ=4"I 8ѻu-e͇F2Jٯe˵Ika IUDV"$80Bx>dYSjfz (;;Z!Ҧ7-ׯI.7'ɭ(icAm_:V *"Q$ ngax=%6ye˵Ik|^n7'N$xe-ň=2j,1h8(P#*i,IUDV"$qXziDEb(@p|DAeOY2ݙ(jp{o#5xĦ zLv>^Mo- L*o*Oޞ7ǐ+iiۻY<#?MGocx[nI%]^/Z7פɗkʓ!IIV $=c?v+)^7IUDV"$8Cv+)f-ؕu{Ң!@kYLlEYN kYLjߌcpɤQ$EA2i I PhƍFScߠZ5пbUJc]{3^Mmk/|IIV `3|?" nQ58w`~h/J=۵EyR}WW*/:ōSm0AҵLi4X$Ubl?v~C?><GE}lZW[ףMj'hXcZi^U` H,EH,=2DUY#ɡ (Ui^Mmi^堊Lb'@I @) HxoWtފLb'@IT$ T@oWts~Bx>dYSjfz (;0h/HMkzo)ɭѦ{ʓ^hY6y=ش̈́?vbSg@e]c*EɭѦ{ʓAf1"՗Mj' dAb(Aa$򨦒MAGBH$kmףMj&o-i4X$UboER&Q1ʠ@$ QU$Foۣ./ɭYz4֯yR| *M$"$"H*i,Tz*i4JI/&z4֯yRf<ƜA%VDQX$7E(P EHB*87E(P<U0,I UP 86A\+$DT-ٞ& 'kD1xߚF2kXaMA%zy2cyR|:ZI8-3yUaEIiU` H,EH,=2DUY#ɠl?v3)Ž@X o=v\s8 "<򨦒MEH,=2DUiU` H,EH,=2DUY#ɠo8>}v|6ρ33333333333333333333333333333333333333332 EmV2dh5g!^rTĭ˻5*OIv,{g\qkzL͎v7G?kJW{ӯI.ytVҼę1f2j"jW C9ew{|2ۻY=~3~ή&!.׼?&ܥn>/&H֍[|?`iˆ( ,I1R71&LЇ3IaEƛ^/&]Sm}c}صפɗkʓэҹ)L/&g ^ojZ !xhgjqKhiɮ2`;=4"I!7&z@,=4"Đ&~pɔM$*$8C]s7hgj(+pw$ʞTe3QD;o)Z i\CKo)[IOrk}qƥұ Rca&I=fvgø؝~iJUoJ8L^/&]o*OZН1jLp0.^Mo8Ե6l?0A3Ztcl8\9׈6vNmC o\8.7hgjqZsm V~p zWtc|μAC;UF6b$G&QiY`l-5F7yэPW8 a|$'&I=fvgøh'kD1xߚ:Vz;k|ƖӧF4:WOa򧉠 ,dTqZsniэ{kfl7,5B#)dJv+yL*o*Oudy5ņ+a.բmo&qp"Q$8O$"ʏ@e&Q4HȐuΉCbk-J8p \,/|?" nQ58wh/JVk|ZW1P[eVyR~Sa2\g\qko5vZZqoM$DT-ٞ&@wbvC+AV-+a2]zLv>^MhgBvvũ1dy5θR L:WaqZsuݿ ꠠ#XtXb?ǣ۷}+ܮ;f<^n7'֍:KXa2\?n68)vsm;y5[sDV"$8Hy%DVTx/2EVDvkr-JݸpAHOL" *zQAESp Nֈb4h*ַťs ,u^n7'>%ɭuZfJWK*[v`i$ʞTe3QDNֈb4h*ַťs &KI.7'ɭ N|y&8L/&jZaiJ6Rg&E"$iITMb E1bH$8\9۷xC o\8.27I.7'ɭCzLX.բmo&qp"Q$8O$"ʏ@e&Q4HȐuν&^LZpAHOL" *zQAESp Nֈb4h*ַťs ,u^n7'>%ɭuZfWɒ2kM$DT-ٞ&@wbvC+AV-+a2]zLv>^MhgBvvũ1dy5θR L:WzLXj)^/&V/&:ߌ`ÂyByTSId&U=b *l!@Y#ɠ8ڴAʹn0DQX$= IDQYQH?8zd& Y!ٮڙ[qjTpAHOL" *zQAESp Nֈb4h*ַťs ,u^n7'>%ɭuZfUڙ[qjTl?" nQ58wo)Z i\ e˵IkC:f-I%ɭuZfAҿ F T MA5< S@Y#ɡwo0hxp=AI4*FG3=AI4*N=AI4*S4*LD(Q$E6ɕɭg A$H8A$Hary2y5x 'IZj g A$H8A$Hb\*Ma^MoCKnZ Sm0AҵIUDV"$ l` `m)ZǞZ~Az*@X"AWv{@k$y4B#H\h~+Oa WoczmOg&=$1dLi U 8 *l!^b3aMĦ֭?\Ʈ /ŷ^/&]| &J _4g *5ew _a+x]gډri^&^LXT|\q/ʓpRQo6qoG(T*& )699A<\q/ʓZLqsGďL{x.5%yRc1K4#;-VV^/&VqKFgor+$y4 G&Q|dqƤo*O$'DAeOY2ݙ(jpbvCLo %o`_=cޞ7HkJh.ӶׯI.7'ťs.8ԗIƀcKLt\q/ʓߠ_A_>iNUɕ27$'DAeOY2ݙ(jp؝~iS$ZŁ~Ɨz{RQ#NU+i_kťsj;UZ:CKb7r+$y4 ߠ_>> $LOG_FILE 2>&1 if (( $? == 0 )); then KLIB_SA_logmsg INFO 3 2 dnssa.cat "DNS daemon named is active\n" return 0 else KLIB_SA_logmsg INFO 3 3 dnssa.cat "DNS daemon named is not active\n" return 1 fi } ############################################################################### # # Name: doStart # # Description: Start the DNS daemon # # Arguments: none # # Returns: 0 on SUCCESS # 1 on FAILURE # ################################################################################ function doStart { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : Starting the DNS daemon named # /usr/bin/startsrc -s named >> $LOG_FILE 2>&1 # : Check the status DNS daemon named # isRunning (( $? == 0 )) && { KLIB_SA_logmsg INFO 3 4 dnssa.cat "DNS daemon named started\n" return 0 } KLIB_SA_logmsg ERROR 3 5 dnssa.cat "DNS daemon named unable to start\n" return 1 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/db2:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # : Load the common variables # . /usr/es/sbin/cluster/sa/dns/sbin/cl_dns_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} echo "######################################################" >> $LOG_FILE dspmsg -s 3 dnssa.cat 6 "# DNS START LOG" >> $LOG_FILE echo "######################################################" >> $LOG_FILE # : Find out to see DNS daemon is active # isRunning (( $? == 1 )) && { KLIB_SA_logmsg INFO 3 7 dnssa.cat "Starting DNS daemon named\n" # : DNS daemon named is not active. : Make an attempt to start. # doStart exit $? } exit 0 HO k*/%o{.םa֝a֝a&{2vT./usr/es/sbin/cluster/sa/dns/sbin/cl_dns_stop#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/dns/sbin/cl_dns_stop.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)81 1.1 src/43haes/usr/sbin/cluster/sa/dns/sbin/cl_dns_stop.sh, hacmp, 61haes_r714 11/28/11 14:57:07 ############################################################################### # # Name: cl_dns_stop # # Description: Command used as the PowerHA SystemMirror Application Server # "Stop Script" for DNS. # # Syntax: cl_dns_stop # # Arguments: N/A # # Returns: 0 on SUCCESS # 1 on FAILURE # ############################################################################### . /usr/es/lib/ksh93/func_include ############################################################################### # # Name: isRunning # # Description: Check to see if DNS daemon is active. # # Arguments: none # # Returns: 0 on RUNNING # 1 on NOT RUNNING # ################################################################################ function isRunning { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : DNS daemon - named is active or not # KLIB_SA_logmsg INFO 3 1 dnssa.cat "Verifying to see DNS daemon named is active.\n" LC_ALL=C /usr/bin/lssrc -s named | /usr/bin/grep -iw active >> $LOG_FILE 2>&1 if (( $? == 0 )); then KLIB_SA_logmsg INFO 3 2 dnssa.cat "DNS daemon named is active\n" return 0 else KLIB_SA_logmsg INFO 3 3 dnssa.cat "DNS daemon named is not active\n" return 1 fi } ############################################################################### # # Name: doStop # # Description: Stops the DNS daemon named. # # Arguments: none # # Returns: 0 on SUCCESS # 1 on FAILURE # ################################################################################ function doStop { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : Stops the DNS daemon named # /usr/bin/stopsrc -s named >> $LOG_FILE 2>&1 sleep 5 # : Check the status of DNS daemon named # isRunning (( $? == 0 )) && { KLIB_SA_logmsg ERROR 4 1 dnssa.cat "DNS daemon named \ has not been stopped\n" return 1 } KLIB_SA_logmsg INFO 4 2 dnssa.cat "DNS daemon named has been stopped\n" return 0 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # : Load the common variables # . /usr/es/sbin/cluster/sa/dns/sbin/cl_dns_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} echo "######################################################" >> $LOG_FILE dspmsg -s 4 dnssa.cat 3 "# DNS STOP LOG" >> $LOG_FILE echo "######################################################" >> $LOG_FILE # : Check the status DNS daemon named # isRunning (( $? == 0 )) && { KLIB_SA_logmsg INFO 4 4 dnssa.cat "Stopping DNS daemon named\n" # : DNS daemon named is active. : Make an attempt to stop. # doStop exit $? } exit 0  k0 %o.םa֝a֝a&2vT./usr/es/sbin/cluster/sa/dns/sbin/cl_dns_query#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/dns/sbin/cl_dns_query.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/dns/sbin/cl_dns_query.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################ # # Name: cl_dns_query # # Description: Performs application discovery query on the local node # # Arguments: N/A # # Returns: N/A # ############################################################################# . /usr/es/lib/ksh93/func_include ############################################################################ # # Name: isPrimaryNode # # Description: Finds out the Node is primary or not # # Arguments: N/A # # Returns: 0: If named daemon active # 1: If named daemon not active # ############################################################################# function isPrimaryNode { [[ "VERBOSE_LOGGING" == "high" ]] && set -x LC_ALL=C /usr/bin/lssrc -s named | grep -iw active > /dev/null 2>&1 (( $? == 0 )) && return 0 return 1 } ############################################################################ # # Name: dns_discover # # Description: Performs DNS discovery query on the local node # # Arguments: N/A # # Returns: N/A # ############################################################################# function dns_discover { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset -i installed=1 # : For DNS, the required fileset is : bos.net.tcp.server # /usr/bin/lslpp -l bos.net.tcp.server > /dev/null 2>&1 (( $? != 0 )) && { installed=0 } print -n $(dspmsg -s 1 dnssa.cat 1 "DNS Smart Assist") print -n ":DNS:" print -n $(dspmsg -s 1 dnssa.cat 2 "DNS") print -n ":DNS:" echo "$installed" } ############################################################################# # Global Variables: ############################################################################# FPATH=/usr/es/lib/ksh93/aix:/usr/es/lib/ksh93/hacmp/:/usr/es/lib/ksh93/util/:/usr/es/lib/ksh93/util/list PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/:/usr/es/sbin/cluster/utilities/ LOCALNODENAME=$(get_local_nodename 2>/dev/null) ############################################################################# # Main: ############################################################################# typeset option nodes ACTION COMPONENT while getopts q:PDdn: option do case $option in n) # : List of input nodes # nodes=$OPTARG nodes=${nodes//:/ } nodes=${nodes//,/ } ;; q) # : Perform a query for a modify screen # application_id=$OPTARG ACTION=query ;; D) # : Run discovery # ACTION=discover ;; P) # : Check the primary node # typeset ret_val isPrimaryNode ret_val=$? exit $ret_val ;; d) # : configuration assist discovery # dns_discover exit 0 ;; *) ;; esac done [[ "$ACTION" == "discover" ]] && { echo "#primary:takeover:application_name" # : Check the primary node # typeset primary_node for node in $nodes; do if [[ "$node" == "$LOCALNODENAME" ]]; then isPrimaryNode else cl_rsh $node "/usr/es/sbin/cluster/sa/dns/sbin/cl_dns_query -P" 2>/dev/null fi [[ $? == 0 ]] && { primary_node=$node break } done echo "$primary_node::DNS_Application_High_Availability" exit 0 } [[ "$ACTION" == "query" ]] && { echo "#primary:takeover:dns_config_file:service_ip:netmask_prefix_len:network" RESOURCE_GROUP=$(clodmget -q sa_key=$application_id -f group -d "=" HACMPgroup) # : remove quotes # RESOURCE_GROUP=${RESOURCE_GROUP//\"/} [[ -z $RESOURCE_GROUP ]] && exit 1 set -a eval $(LC_ALL=C clvt query resource_group $RESOURCE_GROUP | grep SERVICE_LABEL) eval $(LC_ALL=C clquerysaapp -a $application_id | grep DNS_CONFIG_FILE) set +a [[ -n $RESOURCE_GROUP ]] && { NODES=$(clvt query resource_group $RESOURCE_GROUP | grep -w NODES | awk -F'=' '{ print $2 }') NODES=${NODES//\"/} echo $NODES | read PRIMARY TAKEOVER } PREFIX_LEN=$(cl_harvestIP_scripts -u $SERVICE_LABEL | tail -1 | cut -d ":" -f 13) NETWORK=$(cl_harvestIP_scripts -u $SERVICE_LABEL | tail -1 | cut -d ":" -f 3) echo $PRIMARY:$TAKEOVER:$DNS_CONFIG_FILE:$SERVICE_LABEL:$PREFIX_LEN:$NETWORK exit 0 } ster/s k`%oo.םaX՝a֝a&o2vT./usr/es/sbin/cluster/sa/dns/sbin/cl_dns_common_variablesg.xsdKLIB_OUTPUT_CONSOLE="true" KLIB_HACMPLOG_ENTRY="dnssa.log" INFO_FLAG="true" WARN_FLAG="true" ERROR_FLAG="true" v kx| %o$ .םaX՝a֝a& 2vT./usr/es/sbin/cluster/sa/dns/config/cl_dns_manual_config.xmlsd$$ Node1 Node2 haapp08 `   k] %o$.םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/dns/config/cl_dns_manual_config.xsdsd$$ e kz %o@k.םa֝a֝a&k2vT./usr/es/sbin/cluster/sa/dns/sbin/dns_xutilsnua@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/dns/sbin/dns_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)17 1.1 src/43haes/usr/sbin/cluster/sa/dns/sbin/dns_xutils.sh, hacmp, 61haes_r714 11/28/11 14:58:05 ################################################################### # # Function: listInstances_DNS # # Description: This is a dummy function # # Arcguments: componentid , nodes # # output: list of instances in xml format # ################################################################### function listInstances_DNS { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" "${0}" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # : No instances for DNS component : This is a just dummy function # KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" "${0}" } ################################################################### # # Function: listEnv_DNS # # Description: This component doesnt have any ENV settings. # but as per the framwework we need this dummy function # # Arcguments: none # # output: None # ################################################################### function listEnv_DNS { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : No ENV is needed by this component # KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ####################################################################### # # Function: listProps_DNS # # Description: List properties for the DNS component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Application Name [DNS_Application_High_Availability] #* DNS Subsystem Owning Node [] #* Takeover Node(s) [] # DNS Configuration File [] #* Service Interface [] # Netmask(IPv4)/Prefix Length(IPv6) [] ######################################################################## function listProps_DNS { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset primary typeset takeover typeset print_subsystem typeset application_name typeset takovernodes_val_list typeset serviceip_picklist # : Discover possible property values # #/usr/es/sbin/cluster/sa/dns/sbin/cl_dns_query -D -n 'hacmp29,hacmp30' #primary:takeover:application_name #::DNS_Application_High_Availability /usr/es/sbin/cluster/sa/dns/sbin/cl_dns_query -D -n "$NODES" | grep -v -E "^#|^$" > /usr/es/sbin/cluster/etc/sa_inst.x IFS=":" read primary takeover application_name < /usr/es/sbin/cluster/etc/sa_inst.x # : Discover Picklists : Discover the takeover node list # takovernodes_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | tr '\n' ',' ) takovernodes_val_list=${takovernodes_val_list%,} #serive ip pick list serviceip_picklist=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') # : Print each property # #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" print_start_tag PROPERTIES # Application Name print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$application_name" "" "" "false" \ "-A" "string" "true" "true" \ "false" "true" "" "dnssa.cat,6,1" print_end_tag PROPERTY # DNS Owning Node print_start_tag PROPERTY "2" "OWN_NODE" "DNS Owning Node" "" \ "$primary" "$takovernodes_val_list" "" "false" \ "-o" "string" "true" "true" \ "true" "true" "" "dnssa.cat,6,2" print_end_tag PROPERTY # Takeover Node(s) print_start_tag PROPERTY "3" "TAKEOVER_NODES" "Takeover Node(s)" "" \ "$takeover" "$takovernodes_val_list" "" "false" \ "-n" "string" "true" "true" \ "true" "true" "" "dnssa.cat,6,3" print_end_tag PROPERTY # DNS Configuration File print_start_tag PROPERTY "4" "DNS_CONFIG_FILE" "DNS Configuration File" "" \ "" "" "" "false" \ "-F" "string" "true" "true" \ "false" "true" "" "dnssa.cat,6,4" print_end_tag PROPERTY # Service Interface print_start_tag PROPERTY "5" "SERVICE_INTERFACE" "Service Interface" "" \ "" "$serviceip_picklist" "" "false" \ "-l" "string" "true" "true" \ "false" "true" "" "dnssa.cat,6,5" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) print_start_tag PROPERTY "6" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "false" \ "-P" "string" "true" "false" \ "false" "true" "" "cluster_hlp.cat,25,51" print_end_tag PROPERTY print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/dns/sbin/cl_dns_import -a " print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #------------------- # MAIN STARTS HERE #------------------- # # these functions will be consumed by clvtsa # dns_xutils=( typeset env_func="listEnv_DNS" typeset inst_func="listInstances_DNS" typeset prop_func="listProps_DNS" ) k %oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/printServer_xuAA kl %oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/printServer/sbinlsnuaAA k %oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/printServer/liblsnuaAA kZ %oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/printServer/confignuaAA l$oG/םa֝a֝a&݋2vT./usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_importsdor    #e _inorst"$AEINOPRSTacdlmpu/=CLM\bfghvy&()-.12:BDFVw%'09>GHKUY[]kx{}!,34;?WXq|567kL.EM{=Ѫ?G E ߆ 5z>p庡AA D" 5"oo]Զ3~p9CE":d"H3h#gXnލy0M6{U+FP??p*5AGXW vbRvڌuv,JSQrmmd۔Wg>Ll k%ڷ֎mn_П@L Lb k5*Mv`W @H[۩ږ|3g+t-{;umY1}g"onI*OҾٕjv붽dHw8Q>uZ:Wb^W+!Rg΀CE" 2 _l1TeJci_j2ˌrږڌ)Lc EwnRP |D@CUD>+ DC"@鐆fffffffffffffffffffffffffffffffffffffffffffffffffd2]5+)6ږMJ SWj[kmzߝkJmVb:W2NZS)붣cl uKġe;RXɷ)[pq`r GQ)=RŽ+Ӡ14 {wSq0Iz =T)]m{_[H^rDh΂{çe[BThΈ\%-FxxxD {UvƏ\ =O*ur ٔPT39({;J۔N/k|[ҽ: SaLJ =gk?It;tgCLJqƤ']V׭u~5&?&vw9maLJz~嶤mѝCe^e7^zԿڎՍ'Je;:J}l>OܮXuڮ9Z]/\t-Ϲ]]ucޱY[wUyэљ/ۣ: <:S[m׮ڎՍ'Jg5ܬgIX!ӬgIX S)Ft?V+tg}ʯ~U{{cVE ܬY\|2:wtߺ-m]ѝMr[q͛:Ͻ=12޼+/kk>0Rp˄ǾtgZní/U﬇!iް Դނ}kAgxqk[}WC'+^S)ؤȣ^ctfDΆ!M^.eP3]' )r1l2ۻYJG2MJ߱Fkoy\֕ *v$۔5ֳw}ɯ&O2O] ̄mQaH@Aݛiv q]rأm|C ;j )Lc ;kFYqVSRQ%)aYNԶ,Q8^\[hC33333333333333333333333333333333333333333333333332mPqM')% AC$,z(@h˶mKmb5([j^4e(x䅏P21e;RXuڗ hA5qƚI{loy@@T6 0iFmX1Q)ܯ]`;j%) ۰$1TeJbCF:!!%) vbRvڌ,JSg, ʞ4cͰƤH`JA $S9``ES9`dDTWaL偑9SYq#ES9`dDT&$hg, ʞ1yQčL偑9S;y5 Jߦr*!7)[ ћvP딴QV,zT vbRvڌuvA5EhzǩNQjj TR*2ĥ3 @A@G p MDZ*ES1IA5+)6ږŵELɐܥoƚ*@DA\QHPETiAS@qpƘdV(ئB (4  ( 'Ŝpt,bVSyW&#T}9YN[*X>V2tg+)==DPr$G&e:J}n%'&3! 9}+[a8r$ {A"rF HPjffffffffffffffffffffffffffffffffffffffffffffffffffC!'.Sa)brĞe;ۻeoomeo^l +ХWl> Ta'0d3vt2&ؼ>) A0cIS= X-AfqydP"a~~ U:-Pv)DU. =w/~`:˔.Qrmmd۔qNqƤ&(œ ł<(uBfFnNN^ljB#Ftçe[BThΈ\%-FxxxDFd`FpWjZLhk@T)rO*q$NMh(~s5&>yÅ?Y}$N3#gk?IRT·<9e^e7^zԿNPaRBU+붣cmҾwbD)V/kafF ]nU/'+\+k]n+βFd`Xor*h̉ѝ#20xuS[mNPaRBU+붣cmҾwbD)V/kafFS^):eo+{:3W*+"vVT\<:wtߺ-m]ѝMr[q͛:Ͻ=uƑ?/9L޼+/kk>Lad\"`.ѝjVjWFd`X&1.KZY)V/k~Qݜ^r+Ra{ʓ#20[[uWԶwyÓk$ePщI'\b 03#SZ]WC'+^S)ؤȣ^ctfDΆ<8Mo958KY_]u)[^C'+affffffffffffffffffffffffffffffffffffffffffffffffffC:+Oz jj;V6g1Y9yRbPжۆT7A}0{_[!*֕Qڱ^e;vV׭ִp++rn͋ʓ=[mirӠwTkJXy^݊;;\^ݛ&eMhc޻,<+ӬgIX;|Ym쳬E̲ڎՍ8v^-e{!]vHcK{ j{!Xɻ6/*L_rۥ^kYN߯׬2y {ؤ) Je=.Wk붣cmVϕ5սuu{a֗ڎՍC9({;I: mݬ% {ꃇ=Uax(|33333333333333333333333333333333333333333333333333!n͋ʓkt-mXps =A4>#Dg7VE !8AA!cz$G'יB~w[mדVL4A$b2~A\SonS"~wYNΒ{_[QڱhBrʶr}дR>mJTe~s,BZ\i-/כ>Ѧxܻg'V9`80)Z:lRu V0a`C?4h"a|)=8tZFS\G+)6ږˇa&ۧYNΒ{_[`ڎՍ;4L9Zfg4rDIZ( AXA4h"a|) u5ަڎՍ9:ѿrӠwTkJ)2r(W8=\'W{{u^y4% k={y7w %ۮ_޺ k0{{ gZڎՍJ9+G\"|03opܮ{En9(G YNԶ6\=^Mk> Je:uΒ{_[mX s_j ;^JH=P Q%A'(<+? .>/ o]ۓÇL>kt-jL/yR}]m'Z7Wx02r(W8? -~;/qƤ'4(9" 9 TRS8+gK 5AAb|hƍܮ{ gZ] T0Р&'P jL/yRjKmL78ho H=@N*Q稢Jq+)6ږˇɭg[iL9 TWj[kM'Z7ӠwTkJB H@P+q0I-2{#<qau(,B>ѼC@or8=4ZkoRcc'9D`g4ᡠ7]G'NT(݊sQ%8>e;RXp0Uy5t-)S# :J}o-&7-k_j ;^JH=P Q%A'(?Z@N*Q"* ܬxj[k.'YNΒ{_[`Դނ}k]mМp32'(B#< 1D{(@=P Q%C+ ĺ o];[nNoA;/벽a)ݩ{.p& #N  gK 5AAbhƍ[_ri@q 1DϚ>'J@+ffffffffffffffffffffffffffffffffffffffffffffffffffC!'[/Lu%b qM&$u5[ޝ[wA}cu++yrHc޼ˋ@'GfϫPϯ{n_ɦ-sg:og{ =C!Mx#}PpǪ19fffffffffffffffffffffffffffffffffffffffffffffffffd MٱyR}[/Lu%bs =A4>#Dg7VE !8Aure/Oܮxk&.j)+t]Ľ%bOk=Y%GzqYk6_r{:J}oޞף~A.oåyd4S)6mܻmTy "]Ͷ߇K=8βK>*<y<UypAdj=8pG ٤lWBI;j%)j֫: e}n_)]sH_[L1,2nAPp@x=5د5Ud vJSխV8uN3R]ȶ\c:Xdi" "|03x#`_5Ahᡠ7]hjN"q !ܬxj[k.ne;:J}o~tgxD^rB333j) "&dG'NT(݊tKe;RXp1V\rt6&͹\_ޗ]B| "D{k6"FfsVIcQ瞜V@ՒXTy |٭9<uGzq<7N#㇟ø ߭[`=8tZFS\Gw/~`@S^'Fw0 "D3ףk$fg1: Sg5Udݬ"y9A{<=8tZFS)x ܬxj[k. &k%2 Dw+)V/k~;Ș"mFfs1sQHPVI8>wk>!! tWoDk:J}n f+'/*LKu5[ޝ[w^źu++yrHgיqr]vs}y}my4%z{^y\> Ta/DagSnga(gꃇ=Ua9fffffffffffffffffffffffffffffffffffffffffffffffffd MٱyR}[Kص%b?aǨ&z@ZF ȡS8D#8'MVUdaCKW{.B~v]1uMTN/]y_}?Ľ%bOk=Y%GzqYk6_r/gIXp>sm<_*<y<Uypףw^^9e'Jѝ5Z5د6tgyF4宽uxW\L]2L3tɺ\D!hƍR(x$ ! U:-Pv)DU.#=w/~bJe8@SUV/k~;$MTc9(x$?j5^j) "'55EhzǩNQ0\xj[kѵ3M֚ a'R`mQ19k~^8t%oWg9L 1,2nCD`g4FG  U:-Pv)DU.#;mKmce^0mӬgIXOΌ6VkS(Ffs/k|Xj) "'hjN"q #ܬxj[k.*뒙NNa&Xٷ"OHombfCCj,p<ӊ?K>*<sN+ @C03<ӈxGzq<8hl?l?En:x ܬxj[k.ne;:J}o~tgxDTc9(x$?v?٤@N*Q稢Jq +)6ږˇɭgqL6wtߤ0lFfs/k|Xj) "'ݬfffffffffffffffffffffffffffffffffffffffffffffffffd2]{HMohd3m1'+u[_B|M^Tgn;{{ӶK}e2ҾV=֔rZN޻,e:/붣cl sQwt2ۻYJ='zISPd33333333333333333333333333333333333333333333333333 MٱyR|q]`$vR9Jh" 3+"L Ch&'P3T!أnR{;1RŌa H@P4o1: SgxX_bI4/LqEn:xw+)6ږˇY/)a&ۧYNΒ{_[mGj<rAr ]SΌ~VqzП]\%-;h? hjN"q }w/~`De=2tgx@qzП-m0mڕFfsRA\QHPa =!cԊ) ~A]{Y2WHBz D t =!cԊ)  dg7j@B(" ) gxX_ Az) *RA {<03Bz h` Rx4zqTBا=ESVSm-a{+yѝa&۰K[^'Kh[kFt2 "DvkԀPDR?jOHX"Bd B j@B(" ) Xi QHP`i=8A8 NgFvx`g4᡼,/ =8tZFS)x'YNԶ6\=F6VtgHlx4zqTBا=ESGrmml{ ߘ'KSΌ^lѝ om_N_:3#3 Br٤}v|! d36/*LK/g^BRY9xd3m1/v~wXmf+'/כ> m}AneJ[eچC9({;Kt2ۻYKyu6&P@"}~My4wцud33333333333333333333333333333333333333333333333333 MٱyR|گ}SXmuXx@!4XTH AYhaY*gxX_߇ܻm iqri@q 1Dܻm)Z:CjSoÀeKK4%gxܻ4/szgpi3+G\ J`򕣮 4(Ru0+ܻmԴش-hi5F[)W2kU=Ad ?6yJRu8q>Yv0ip mGjƆږ% 4)mi1irZL]Ͷ߮I*N6ږڍ40=8A8wԶךRuAZs;j%)-mSA2p+pi+G\39!cqE``9FQֶé vvoJRu8(P ># +i02εN 8q[ۮ_\5&8ɑcr$Q8s8(P ># +i02εN 8q-WWqƤ'mKmLW5C$,z (0cR2:xu80]ׇܾ^NEkCMԴش-h sTj8Ԙ^mmur9 sT#Dg7VE !8>~ ڣ Jc*'P >) x䅏PVd36/*LKmkvY>e;-'&xd3\KNbrWMr˵&We;mKmy95!u%: mݬ%0d333333333333333333333333333333333333333333333332ݛ'mS^)]m95)Ch , 8Ѽ²(Tm .o=UI,4cͰ0Ӷf݁RdPam˹c@U,HUqƚ94Ǡ8Iq¦DB H@P*`ymw6~]ѝhaMZ ѝl!s DVqy_j8D#RZs0A}0{_[!*֕_je;:J}l zEDXaǨYDX+Nftת}gmdNLI{ʓFpP+Ia9dF"=`9sC^FxgQ$h *A$b*8VmOgpWoC4tWoxD/Lq W5cZ*$ =DPr$EPz'> Ә:IB/p8@jǪTI%,z 8IZsQ)=X9{ qVSm-a{0 sV=UI,0c@U,HUq0ur=3y"U=Ac8i& #N y W5cZ*$ =DPr$EPz'> ӘFxFyړ[jLyR|+Ӡ1wt'&r38(XV$EQT #T?ҼmM TDz iTDXA$F1Ta)LcVi8s sIɭ߁~ɮ!÷`9Å&\Zs mdLxm'+^@D>ko"anD8(XV$EQT #TVaY.+&p װ@->70TDXA$HgQ$h *A$b*8fC!%eLqzk ymɅ*OIGjIrk}ɭQʓC_FdL'&,Qʓ榐zψ䇏ZsQ)=XߍpP+Ia9dF"=`9۔,Prj8D+)6ږˇȘgQ$h *A$b*8 Ә:IqMDZ* 4ӓLzY'Nꗵ-ܬgIXrkm#<3\ՏUhK 4X@q 1@y@C+ɭ|AyhmdNL/yR}L;U*O[NNMob5^T?4Z3"e95b5^T5Pz@Z">#< 1DjǪTI%,z 8I+p x]HP9 Tmxc/&[}ڎՍby"enMٱyRpg:og{ =C<3v1zO8U= <ffffffffffffffffffffffffffffffffffffffffffffffffff@b̲ڎՍx@!4XTH AYhaY*gxX_߇%e[_[m̿r9ZO]nN++uq0I3BڦڎՍ78ho H= S 7bIN#D;mKmce^5]B~J]QڱדZywk>!a%e/;ܮaÈ'evW!B+Wz8Ԙ^ĺg@9UPUh)כ!+ ĺ o]Ra{ʓږrOv_NVh:z8Ԙ^$A4=V'8Ra{ʓWj[jg gK 5AAb㫫}NTt)V/k|jL/yR}]mx@!4rDIZ( ƍ'A}c H=4,j[[9"  8Ԙ^ږڙxq.a+ES=HtDF"(1e;RXA}F^3"U=AcԊDMb(j.VSm-ڸmz8dh!CxX_ Ax4zqTBا=ESYNԶ6\=^Mk=r0NPaRBU+qƤ'ږt6:wtyDV{]%WWޝS^ ?zV~AaewnER+Զ< 9"  F/kbpG]m-íDVDjL/yRjKmL`80A U:"h#DQrmml^F^3"U=AcԊDMb(j.VSm-hp=ၜCx#hjNz$ 'rmml{ ߘ*{)`ú}lZWI*O-^"mu+339"  wk>!+=K}+Rźu+)9^ߐ{ivY]AdkL4(9" TzTF{=T>+% "(4B H@P+q0I-3Hq #@Re*)0{A$PY%"@ 0A U:"h#DQrmml^ENWL`HJEV=AcȂA$PY%"N4 0{ު = #X4"z9@?#(PEc8x8 r #@iځ=<' HPiOPX"A mKmcbZ63UcZ$X MDZ*ES&1AA5+)6ږ}lmus!03op{ U:-Pv)QD#"8V8M IǨ,pq`CXȬ4=PV9E+ƁP`T>'Y&MPx眈98=`bBL55EhzǩNQ0\xj[kѵᜌz ząjj TR*4 aYNԶ6/kek[03op{ U:-Pv)QDa(|Gr0{Õtr\*hp*&`Ͳw7yCLzY'<+s@~ Rx4zqTBا=ESVSm-a{WZb2: Ar0TkJ6vo֎Ҽ Dt)V/kafg4rDIZ( AψAXAsgܮ쫬X{ӹYNx^vvo)Z:{ nș]s PN yOPYygag#A$UaAM$OEh(8Ԙ^ږڙ/ =8tZFS)xw+)6ږˇɭg2O]ozu6vo֎FfA}v|BxV~A\Yrrk{ibNh)2r(W?)[^/B~Sm}gYNΒ{_[ZZ݆~A0M$OEh(g7{_[3B<,/ .+&F/*Oz}ow+)V/k}L;U*OdV׼8==8tZFS\Gܬxj[k.2Nú}lZW[أMk'ҽ/yL6wtb'"{ʓ:U*OikvvڑG$A4=DֱF/*OSF Tǐψ䇏u{0{y:W[>jV!X={aG$A4=hbtڦ8ߐ{ĸkX>N_je;:J}oIGjIL*' G'NT(݊tKmKmce^ÙfS)ӠwTkJrk{ib:WZ8E)a&۹YNΒ{_[RdQگyR~S'JIح-nNR33h&'P2{h(ZIv(\9~ac*9! #N y8/Lwr%bؤȣ^Ns 03op{ U:-Pv)QD<VSm-a{eL'&F/*O^Mk$fdng `G'NT(݊tK;mKmce^&b&t//kd%ZҼkX>Na&۹YNΒ{_[#39zψ䇏e;RXp0Yp0mNú}lZW[أMk'خ}gxDVS^a֙4rDIZ( =arkXMk'éɭ M TxIqNMi{78ho H=x4zqTBا=ESVSm-a{eL'&ozrrk{ib$M&Ha֙54LtEP|G$h *A$b=5PN Ce;]%bvף|D&g#cͰ0Ӷee;-ԉ jDm\uv\><03op{En9(Gw/~a̳);kѾ[k"ra{ʓHW~D0lD3^e;:J}oޝ: AuK V-90Iۓ^Mk$fg0cͰ0Ӷee;-ԉ jDm\uv\>2}v|B !a%eNMob5^TҭyR~+~($(B^VS^a H@P4o1: SgxX_ Aafˮ9~a& #N y#< #MTǐψ䇏Nꗵ-ܬgIXܮu\ ۻY=X<+? .s,e: ?zWޜp x]HP{ .6]w 94Ǡ8Iq`A$PY%hPrDIZ( b!I R{En9(G YNԶ6\=^Mk=vYt//kd%ZҽPRr+OrmrKH=ψAXB! ݬ"XC3333333333333333333333333333333333333333!ΊnRIAZѱY5g1Y9yRbPVVݛ'^>wjZb'"޼WW(/ }lZWmGjޝL;]VS^:WBrɥI\|2ΩG[P0d3v3?gXcmhg8w5ӵd33333333333333333333333333333333333333332ݛ'۔RdPVlVMl9Jh" 3+"L !@A@4!RdQ`wO]&NE'ۣ;rSq$NMl?DpITcM a.mo&upO9$EPUDpITqTp0pG$A4=_IGk 47?En9(G'rmml{ ߘhIox@:U*O| ?[5-d<1IGkC=8tZFS)x#ܬxj[k.'Zk[^ؤȣ^95_]395θRCNW @A@g  Hng!ⲛ2OGoܬ^L*'֍:KYI?ܬ^:3M a.mo&upO9$EPUDpITqTp0pG$A4=J:ɵ]3 47?En9(G'rmml{ ߘhIox@:U*O| ?[5-d<'Y6KFtG'NT(݊sQ%8{mKmce^BMk|^W+9vT'&?;;]˵&x@'&jZy BXY6KtgF5ɵ^3;÷̘4LD6 p VJtgFwd/ѝ`g4᡼,/! U:-Pv)QD<@ܬxj[k.#Fwo+y~N_:3fg0ѝ2?°MD>((x\^:3\VSfS)R m m|dV׼>NojZH!uT-i5em G$<4ȃ"*.*@~h&'P_)]sKh[j03op@N*Q稢Jqw/~bu&/+a&dV׼?)$NMo8Ե33-m4gld?En9(G=w/~bu&/+IL;U*OZϝeړ< ?[5-d<̇~!?J 43X+Nm P3;ndpb!-mgFvM ӛuT-/޼aN)nKh[kѝ?٤?0/8Ό6;h!CxX_ C=8tZFS)x'YNԶ6\=F6VtgHa:d?'+a'OHX"B4`9\%-ہ~eqD06qYMGo-&7irZהҭyR|h߳8ԵɭCvYV\&NMpp4rH H8"aHi"z+EN: 5Z4fzh!CxX_ C=8tZFS)xw+)6ږˇքWo)[^95θRCb 5Z4fzd?En9(G=w/~bu&/+IL;U*OZϝeړ< ?[5-d<̇~!!,M Ӛ, ;~ɃLCaOPYygj[B.+)`{r e.WdV׼>NojZH!=k$46vk[DU\EPo@A@G w4rDIZ( p/ӮN4Q۶A 47?En9(G'rmml{ ߘhIox@:U*O| ?[5-d<']' iXm{4zqTBا=ESGYNԶ6\=N$ַr ?IGjIrkC޿,Rg$rk}qƥМ!'@AMCPb߫-&7B^S'JIu~θRx@'&PN xCj˄iɮnITq@y9i>#DU\U <:M$OEh)RWjZLlQۋҡ 03op@N*Q稢Jqw/~bu&/+a&dV׼?)$NMo8Ե33ԴأBFC=8tZFS)x#ܬxj[k.'Zk[^ؤȣ^95_]395θRCNWVD4`9آqv9É9@X8謨ŸqӓLzY'?5T|G&xNjj @E!Ct =!cԊ) DVB8t5@  H( =a( =&9PlSPT=&!CO ( '?B<,/!,@VTi,@VW#Dd?°;j )Lc ;kFYqVSRQ%)aYNԶ2mVӔ+ g % B\9^ڋetsQFG a}.SarkyMC^bM DKʓ4^ͣ'8=⁰{ߐ{%ŶmNJ4B{ƈAx A86{{ĺ8Ԙ^o` A$bjIr=h=` KnR{;D+/Lwz^h==DVMI5P0M$OEh(g73B<,.{9" 4A SH=D=9Hi"z+EC8ѼKر"ap{M$OEa&OPX"=U ,d4{ߐ{%ŶmJ4B{`z{ߐ{%eڎՍȟ9y9AǪg7 g@or8={\y9AyÖA$F, ECH!0 {ߐ{%[zj;V6{ߐ{"| pT=T=S8Ѽ8D"{{ݲ6{{ "4t-AzHXzzD 6{{ĺukԿam}r^v+w/gIX~Az@B(" ) 4ԓXp{{][6I4;orqrMlzike=r%b =!cԊ)  I5Pdp4R((zM Ӛ=H/Y̰"C8†x Ah6{{ĺRcz %rtr%bꞠ4ԓXp{{ Gn q:9KC rئ1z#MI5P0 lqMkow]МyLb'"{ʓݺ3"etg` B A!Cޮ4a{ߐ{%/7WkIGjI΀|\|I=QZ^쫾S'JI~Ay>#DUX݃"*." 4ȃ"*/WwB 7]?D@!.O9$EPUD+6q!i_j MrMo=uv}b'"{ʓևggkwJXq{#3!]?MJu&NEkFd'+D  qYMGoW{ֻ;ؼor%b Ö@XAjXM 2ĥ1*oÙ_k.+)[IGk)+wt//kd%ZҰ]۰k]ȶ+)V/kpG$A4=hb}lXaYc⚈"U Uc!Kر"a|)=8tZFS)x+)6ږˇ;׮ԼSޝL;]L6LS^TtڃꗵiPvk]^EYNΒ{_["`D"a֯mgk{9vOrӬ~^\+nõy33h&'P3iÖ@XAjXAМ @!4rDIZ( ƍ'A}c H< p>)+EPpV<9$ U:-Pv)QD<{mKmce^}}^S)N&NE&b&t)V/k|^W+ӠwTkJ|;Zb-wtߕ$Ma&s 8r A8MPz@=VЛ) * HEAqE!C =!cԊ) PN xuv4(9" SmGjƂG\2>8PR*@78ho ၜ PR(8xѼC@or8<=8tZFS)x]w/~a ZҙO]uJ: nR#3 lM9B>s 8r$hbg@or8=Au5rܮhNVSIGjI23H$(>$<4o2wL H=T([j]V+'/K.41v9×朚cr$Q8CH Q ra{m {mi1irZCjSoÀdoFz>#<^l򕣮 5CH Q rfp|;9`80ڎՍ mKIKֆԴȴ-h`& x@!çͶԴȴ-kB<,.{Eֶ-&62smi1irZkuXؔsPq98=aeq4A$bV~A\q]`%O޼r_]VrwvI*Ov^t%8j8Ԙ^D#Rx4zqTBا=ES;mKmce^Ŋ6:wtߕWWdgIzϽ=NPaRBU*F}L;U*Oz8Ԙ^$Mh&'PI*N~~!a%Ӡ1y/k|[YNΒ{_[r:_޻m߯2Jw'&>ⲛ<|/Lwr%bj%kۋ[eLTnكĹi1ˇG$A4=hb}lX޻5&1wjL/yRcM a2M]"U=AcԊ5Ayi3q>5&8ɞ0ip x]lq0I4(5&10+ I*OB<,/ =8tZFS) H'A Ormml{ ߘ]a&۹YNΒ{_[RdQگyR|^W+ӠwTkJڮ9Z#5r%b`A}cg^R{ t%v/"׿^eOMy/Lq{ߡ9_A XA0M$OEh(g73B<,/ I*LiA] TCjSoÀdoFOPX"8MPzC6yewF^Ō`OI*N2g3g8v^-e{wjL/yRcM .I*L`& 8tRa{ʓ H=@N*Q稢JpH$ H$ܬxj[k.,Wx@VS^9vT//kd%Zҽv_NVbܬgIX_jꗵ,T^/o]ȶי~%;zg1R,dNW{°xVꗵ-ӬgIXG$A4=hb}lXߐ{ĺw^N%by=[Kص%b03op{ U:-Pv)QD<rmml{ ߘ"mu+IѝL6L+GZguv/z8i:W{7e2fg0M$OEh(g0Rmߐ{սNTYV/kp{9?G a|) S 7bIN#@w+)6ږˇa&ۧYNΒ{_[D0lDbuy-7Wiףk> $LOG_FILE 2>&1 lpstat -p"${PRINT_QUEUE}" >> $LOG_FILE 2>&1 (( $? !=0 )) && { break } sleep 2 done KLIB_SA_logmsg INFO 5 3 print_server_sa.cat "Removing temporary file created \ for printing to a file using print queue\n" /usr/bin/rm -rf /dev/$TEMP_FILE >> $LOG_FILE 2>&1 } ########################################################### # # Name: powerpc_monitor # # Description: Verify the health of PowerPC print subsystem # # Arguments: none # # Returns: # 0 on SUCCESS # 1 on FAILURE # ########################################################### powerpc_monitor() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=powerpc_monitor set -x fi TEMP_FILE="temp_powerpc_$$" PRINT_QUEUE="temp_queue_$$" DAEMON="qdaemon" KLIB_SA_logmsg INFO 5 4 print_server_sa.cat "%1\$s print \ subsystem Health check initiated\n" "PowerPC" # : printing to a temporary file using PowerPC print subsystem : for PowerPC print subsystem Health check # KLIB_SA_logmsg INFO 5 5 print_server_sa.cat "Creating a temporary file in /dev directory \ for printing to a file using %1\$s print subsystem\n" "PowerPC" /usr/bin/touch /dev/${TEMP_FILE} >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to create a new file in /dev, this could be because of : problems with system but print subsystem might function properly. : So just logging a message with returning the value of SUCCESS. # KLIB_SA_logmsg WARN 5 6 print_server_sa.cat "The file creation failed \ for printing to a file using %1\$s print subsystem\n" "PowerPC" KLIB_SA_logmsg WARN 5 7 print_server_sa.cat "The test print to a file \ using %1\$s print subsystem can't be initiated\n" "PowerPC" return 0 } # : Provide required permission to the file # KLIB_SA_logmsg INFO 5 8 print_server_sa.cat "Providing required \ permission to temporary file created\n" /usr/bin/chmod 666 /dev/${TEMP_FILE} >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to provide required permissions to the file, this : could be because of problems with system but print subsystem : might function properly. : So just logging a message with returning the value of SUCCESS. # KLIB_SA_logmsg WARN 5 9 print_server_sa.cat "The required permission modification \ to the temporary file failed.\n" KLIB_SA_logmsg WARN 5 7 print_server_sa.cat "The test print to a file \ using %1\$s print subsystem can't be initiated\n" "PowerPC" # : Removing the file created for printing # /usr/bin/rm -rf /dev/${TEMP_FILE} >> $LOG_FILE 2>&1 return 0 } # : Create a print queue printing to a file # KLIB_SA_logmsg INFO 5 10 print_server_sa.cat "Creating \ a %1\$s print queue printing to a file\n" "PowerPC" /usr/lib/lpd/pio/etc/piomkpq -A 'file' -p 'generic' \ -d "$TEMP_FILE" -D asc -q "$PRINT_QUEUE" >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to create a print queue. # KLIB_SA_logmsg ERROR 5 11 print_server_sa.cat "The creation of print queue %1\$s \ for %2\$s subsystem failed.\n" "$PRINT_QUEUE" "PowerPC" # : Removing the file created for printing # /usr/bin/rm -rf /dev/${TEMP_FILE} >> $LOG_FILE 2>&1 return 1 } # : Test print to the queue # KLIB_SA_logmsg INFO 5 12 print_server_sa.cat "Test print to the file \ using %1\$s print subsystem\n" "PowerPC" /usr/sbin/lptest 5 5 | qprt -P $PRINT_QUEUE >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to initate print using PowerPC print subsystem # KLIB_SA_logmsg ERROR 5 13 print_server_sa.cat "The print request using %1\$s print \ subsystem failed\n" "PowerPC" # : Cleanup here # cleanup return 1 } # : sleeping here for sometime for the print queue to become empty # sleep 2 # : Ensure that the printing is done, otherwise sleep for more : time before indicating fail # integer LIMIT=3 for (( TRIES=0 ; TRIES/dev/null) NUM_LINES=${NUM_LINES// /} if (( $NUM_LINES == 0 )) then # : If qdaemon is active then wait for more time to get the file to be printed # LC_ALL=C /usr/bin/lssrc -s $DAEMON | grep -iw active >> $LOG_FILE 2>&1 (( $? == 0 )) && { # : Provide more time to print file before indicating fail # KLIB_SA_logmsg INFO 3 8 print_server_sa.cat "%1\$s daemon is active\n" "$DAEMON" sleep 3 } else break fi done # : Verify the printing is done or not after counting : the number of lines in the file # KLIB_SA_logmsg INFO 5 14 print_server_sa.cat "The number of lines in the temporary file \ should be greater than 0 after print\n" NUM_LINES=$(/usr/bin/cat /dev/$TEMP_FILE | LC_ALL=C /usr/bin/wc -l 2>/dev/null) # : Removing white spaces # NUM_LINES=${NUM_LINES// /} # : if NUM_LINES is greater than 0 : print subsystem is active : else : print subsystem is not active # (( $NUM_LINES > 0 )) && { KLIB_SA_logmsg INFO 3 1 print_server_sa.cat "%1\$s print \ subsystem is active\n" "PowerPC" # : Cleanup here # cleanup return 0 } # : If we are here then print subsystem is not active # KLIB_SA_logmsg ERROR 3 2 print_server_sa.cat "%1\$s print \ subsystem is not active\n" "PowerPC" # : Cleanup here # cleanup return 1 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # We need to set this so that we can gather enough details in # /var/hacmp/log/clappmond..monitor.log for debugging. export VERBOSE_LOGGING=${VERBOSE_LOGGING:-"high"} eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.6' fi # : Load the common variables # . /usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x BASENAME=$(basename $0) echo "######################################################" >> $LOG_FILE dspmsg -s 5 print_server_sa.cat 15 "# POWERPC PRINT SUBSYSTEM HEALTH MONITOR" >> $LOG_FILE echo "\n######################################################" >> $LOG_FILE # : PowerPC print subsystem health monitoring # powerpc_monitor exit $? $L k`$o/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_powerpc_start#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_powerpc_start.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)66 1.1 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_powerpc_start.sh, hacmp, 61haes_r714 11/28/11 15:15:04 ############################################################################### # # Name: cl_print_server_powerpc_start # # Description: start script to start PowerPC print subsystem # # Syntax: cl_print_server_powerpc_start # # Returns: 0 on SUCCESS # 1 on FAILURE # ############################################################################### ############################################################################### # # Name: isRunning # # Description: Check to see if PowerPC print subsystem is active. # # Arguments: none # # Returns: 0 on RUNNING # 1 on NOT RUNNING # ################################################################################ isRunning() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : PowerPC print subsystem to be active, following daemons should be active : qdaemon, writesrv and lpd # DAEMONS="lpd qdaemon writesrv" KLIB_SA_logmsg INFO 3 6 print_server_sa.cat "The PowerPC print subsystem is active, \ if \"lpd\", \n\ \"qdaemon\", and \"writesrv\" daemons are active\n" for daemon in $DAEMONS do KLIB_SA_logmsg INFO 3 7 print_server_sa.cat "Verifying %1\$s daemon\n" "$daemon" LC_ALL=C /usr/bin/lssrc -s $daemon | grep -iw active >> $LOG_FILE 2>&1 if (( $? == 0 )); then KLIB_SA_logmsg INFO 3 8 print_server_sa.cat "%1\$s daemon is active\n" "$daemon" else KLIB_SA_logmsg INFO 3 9 print_server_sa.cat "%1\$s daemon is not active\n" "$daemon" KLIB_SA_logmsg WARN 3 2 print_server_sa.cat "%1\$s print \ subsystem is not active\n" "PowerPC" return 1 fi done # : All required daemons are active which means : PowerPC print subsystem is active # KLIB_SA_logmsg INFO 3 10 print_server_sa.cat "The required daemons for %1\$s \ print subsystem are active\n" "PowerPC" KLIB_SA_logmsg INFO 3 1 print_server_sa.cat "%1\$s print subsystem is active\n" "PowerPC" return 0 } ############################################################################### # # Name: doStart # # Description: Start the PowerPC print subsystem. # # Arguments: none # # Returns: 0 on SUCCESS # 1 on FAILURE # ################################################################################ doStart() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : Starting the spooler group, which includes : qdaemon, writesrv, and lpd daemons. # /usr/bin/startsrc -g spooler >> $LOG_FILE 2>&1 # : Check the status of PowerPC print subsystem # isRunning (( $? == 0 )) && { KLIB_SA_logmsg INFO 3 3 print_server_sa.cat "%1\$s print subsystem \ started\n" "PowerPC" return 0 } KLIB_SA_logmsg INFO 3 4 print_server_sa.cat "%1\$s print subsystem \ unable to start\n" "PowerPC" return 1 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/db2:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # : Load the common variables # . /usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} echo "######################################################" >> $LOG_FILE dspmsg -s 3 print_server_sa.cat 11 "# POWERPC PRINT SUBSYSTEM START LOG" >> $LOG_FILE echo "\n######################################################" >> $LOG_FILE # : Find out PowerPC print subsystem is active or not # isRunning (( $? == 1 )) && { KLIB_SA_logmsg INFO 3 5 print_server_sa.cat "Starting %1\$s print subsystem\n" "PowerPC" # : PowerPC print subsystem is not active. : Make an attempt to start PowerPC print subsystem. # doStart exit $? } exit 0 ri kꨭ$o/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_powerpc_stop#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_powerpc_stop.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)04 1.1 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_powerpc_stop.sh, hacmp, 61haes_r714 11/28/11 15:16:19 ############################################################################### # # Name: cl_print_server_powerpc_stop # # Description: # Command used as the PowerHA SystemMirror Application Server "Stop Script" for # PowerPC print subsystem. # # Syntax: # cl_print_server_powerpc_stop # # Arguments: # N/A # # Returns: # 0 on SUCCESS # 1 on FAILURE # ############################################################################### . /usr/es/lib/ksh93/func_include ############################################################################### # # Name: isRunning # # Description: Check to see if PowerPC print subsystem is active. # # Arguments: none # # Returns: 0 on RUNNING # 1 on NOT RUNNING # ################################################################################ isRunning() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : PowerPC print subsystem to be active, following daemons should be active : qdaemon, writesrv and lpd # RC=0 DAEMONS="lpd qdaemon writesrv" KLIB_SA_logmsg INFO 3 6 print_server_sa.cat "The PowerPC print subsystem is active, \ if \"lpd\", \n\ \"qdaemon\", and \"writesrv\" daemons are active\n" for daemon in $DAEMONS do KLIB_SA_logmsg INFO 3 7 print_server_sa.cat "Verifying %1\$s daemon\n" "$daemon" LC_ALL=C /usr/bin/lssrc -s $daemon | grep -iw active >> $LOG_FILE 2>&1 if (( $? == 0 )); then KLIB_SA_logmsg INFO 3 8 print_server_sa.cat "%1\$s daemon is active\n" "$daemon" else KLIB_SA_logmsg INFO 3 9 print_server_sa.cat "%1\$s daemon is not active\n" "$daemon" (( RC = $RC + 1 )) fi done (( $RC == 3 )) && { KLIB_SA_logmsg WARN 3 2 print_server_sa.cat "%1\$s print \ subsystem is not active\n" "PowerPC" return 1 } # : Some of the required daemons are active, : which means the print subystem is partially active. # (( $RC > 0 )) && { return 0 } # : All required daemons are active which means : PowerPC print subsystem is active # KLIB_SA_logmsg INFO 3 10 print_server_sa.cat "The required daemons for %1\$s \ print subsystem are active\n" "PowerPC" KLIB_SA_logmsg INFO 3 1 print_server_sa.cat "%1\$s print subsystem is active\n" "PowerPC" return 0 } ############################################################################### # # Name: doStop # # Description: Stops the PowerPC print subsystem. # # Arguments: none # # Returns: 0 on SUCCESS # 1 on FAILURE # ################################################################################ doStop() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : Stops the spooler group, which includes : qdaemon, writesrv, and lpd daemons. # /usr/bin/stopsrc -g spooler >> $LOG_FILE 2>&1 sleep 10 # : Check the status of PowerPC print subsystem # isRunning (( $? == 0 )) && { KLIB_SA_logmsg WARN 4 1 print_server_sa.cat "All the required daemons \ are unable to stop\n" KLIB_SA_logmsg INFO 4 2 print_server_sa.cat "%1\$s print subsystem \ has not been stopped\n" "PowerPC" return 1 } KLIB_SA_logmsg INFO 4 3 print_server_sa.cat "%1\$s print subsystem has been stopped\n" "PowerPC" return 0 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # : Load the common variables # . /usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} echo "######################################################" >> $LOG_FILE dspmsg -s 4 print_server_sa.cat 5 "# POWERPC PRINT SUBSYSTEM STOP LOG" >> $LOG_FILE echo "\n######################################################" >> $LOG_FILE # : Check the status of PowrePC print subsystem # isRunning (( $? == 0 )) && { KLIB_SA_logmsg INFO 4 4 print_server_sa.cat "Stopping %1\$s print subsystem\n" "PowerPC" # : PowerPC print subsystem is active. : Make an attempt to stop PowerPC print subsystem. # doStop exit $? } exit 0 ee if k$on/םa֝a֝a&n2vT./usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_query#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_query.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_query.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################ # # Name: cl_print_server_query # # Description: Performs application discovery query on the local node # # Arguments: # # Returns: n/a # ############################################################################# . /usr/es/lib/ksh93/func_include ############################################################################ # # Name: isPrimaryNode # # Description: Finds out the Node is primary or not # # Arguments: # # Returns: n/a # ############################################################################# function isPrimaryNode { [[ "VERBOSE_LOGGING" == "high" ]] && set -x return 1 } ############################################################################ # # Name: print_server_systemv_discover # # Description: Performs SystemV print server discovery query on the local node # # Arguments: # # Returns: n/a # ############################################################################# function print_server_systemv_discover { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset -i installed=1 # : For SystemV print subsystem, the required filesets are as follows : bos.svprint.rte : bos.svprint.fonts : bos.svprint.hpnp : bos.svprint.ps : bos.terminfo.svprint.data : bos.msg.en_US.svprint - Not considering being message fileset # for fileset in "bos.svprint.rte bos.svprint.fonts bos.svprint.hpnp \ bos.svprint.ps bos.terminfo.svprint.data" do /usr/bin/lslpp -l $fileset > /dev/null 2>&1 (( $? != 0 )) && { installed=0 break } done print -n $(dspmsg -s 10 print_server_sa.cat 1 "Print Subsystem Smart Assist") print -n ":PRINT_SERVER:" print -n $(dspmsg -s 10 print_server_sa.cat 2 "SystemV") print -n ":PRINT_SERVER_SYSTEMV:" echo "$installed" } ############################################################################ # # Name: print_server_powerpc_discover # # Description: Performs Power PC print server discovery query on the local node # # Arguments: # # Returns: n/a # ############################################################################# function print_server_powerpc_discover { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset -i installed=1 # : For Power PC print subsystem, the required filesets are as follows : bos.rte.printers : printers.rte # for fileset in "bos.rte.printers printers.rte" do /usr/bin/lslpp -l $fileset > /dev/null 2>&1 (( $? != 0 )) && { installed=0 break } done print -n $(dspmsg -s 10 print_server_sa.cat 1 "Print Subsystem Smart Assist") print -n ":PRINT_SERVER:" print -n $(dspmsg -s 10 print_server_sa.cat 3 "PowerPC") print -n ":PRINT_SERVER_POWERPC:" echo "$installed" } ############################################################################# # Global Variables: ############################################################################# FPATH=/usr/es/lib/ksh93/aix:/usr/es/lib/ksh93/hacmp/:/usr/es/lib/ksh93/util/:/usr/es/lib/ksh93/util/list PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/:/usr/es/sbin/cluster/utilities/ LOCALNODENAME=$(get_local_nodename 2>/dev/null) ############################################################################# # Main: ############################################################################# typeset option nodes ACTION COMPONENT while getopts q:n:PDd:c: option do case $option in n) # : List of input nodes # nodes=$OPTARG nodes=${nodes//:/ } nodes=${nodes//,/ } ;; q) # : Perform a query for a modify screen # application_id=$OPTARG ACTION=query ;; D) # : Run discovery # ACTION=discover ;; c) # : component - PowerPC or System V # COMPONENT=$OPTARG COMPONENT=$(echo "$COMPONENT" | sed 's/ *#[^#]*$//') ;; P) # : Check the primary node # typeset ret_val isPrimaryNode ret_val=$? exit $ret_val ;; d) # : configuration assist discovery # saDiscover=$OPTARG [[ "$saDiscover" == "SystemV" ]] && print_server_systemv_discover [[ "$saDiscover" == "PowerPC" ]] && print_server_powerpc_discover exit 0 ;; *) ;; esac done [[ "$ACTION" == "discover" ]] && { echo "#primary:takeover:print_subsystem:application_name" # : Check the primary node # typeset primary_node for node in $nodes; do if [[ "$node" == "$LOCALNODENAME" ]]; then isPrimaryNode else cl_rsh $node "/usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_query -P" 2>/dev/null fi [[ $? == 0 ]] && { primary_node=$node break } done [[ "$COMPONENT" == "PRINT_SERVER_SYSTEMV" ]] && component="SystemV" [[ "$COMPONENT" == "PRINT_SERVER_POWERPC" ]] && component="PowerPC" echo "$primary_node: :$component:print_subsystem_$component" exit 0 } [[ "$ACTION" == "query" ]] && { echo "#primary:takeover:print_subsystem:service_ip:netmask_prefix_len:network" RESOURCE_GROUP=$(clodmget -q sa_key=$application_id -f group -d "=" HACMPgroup) # : remove quotes # RESOURCE_GROUP=${RESOURCE_GROUP//\"/} [[ -z $RESOURCE_GROUP ]] && exit 1 set -a eval $(clquerysaapp -a $application_id | grep PRINT_SERVER_SUBSYSTEM) eval $(clvt query resource_group $RESOURCE_GROUP | grep SERVICE_LABEL) set +a [[ -n $RESOURCE_GROUP ]] && { NODES=$(clvt query resource_group $RESOURCE_GROUP | grep -w NODES | awk -F'=' '{ print $2 }') NODES=${NODES//\"/} echo $NODES | read primary takeover } PREFIX_LEN=$(cl_harvestIP_scripts -u $SERVICE_LABEL | tail -1 | cut -d ":" -f 13) NETWORK=$(cl_harvestIP_scripts -u $SERVICE_LABEL | tail -1 | cut -d ":" -f 3) echo $primary:$takeover:$PRINT_SERVER_SUBSYSTEM:$SERVICE_LABEL:$PREFIX_LEN:$NETWORK exit 0 }  k$o$/םa֝a֝a&$2vT./usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_systemv_monitor#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_systemv_monitor.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)19 1.4 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_systemv_monitor.sh, hacmp, 61haes_r720, 1522B_hacmp720 5/25/15 19:24:04 ########################################################### # # Name: cleanup # # Description: Cleaning up required resources created. # # Arguments: none # # Returns: N/A # ########################################################### cleanup() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=cleanup set -x fi # : Cleanup activity : removing print queue : removing the temporary file # KLIB_SA_logmsg INFO 5 1 print_server_sa.cat "Cleanup activity\n" KLIB_SA_logmsg INFO 5 2 print_server_sa.cat "Removing print queue\n" sleep 5 /usr/sbin/lpadmin -x $PRINT_QUEUE >> $LOG_FILE 2>&1 (( $? != 0 )) && { /usr/bin/rm -R /etc/lp/printers/$PRINT_QUEUE /usr/bin/rm /etc/lp/interfaces/$PRINT_QUEUE } KLIB_SA_logmsg INFO 5 3 print_server_sa.cat "Removing temporary file created \ for printing to a file using print queue\n" /usr/bin/rm -rf /dev/$TEMP_FILE >> $LOG_FILE 2>&1 } ########################################################### # # Name: systemv_monitor # # Description: Verify the health of SystemV print subsystem # # Arguments: none # # Returns: # 0 on SUCCESS # 1 on FAILURE # ########################################################### systemv_monitor() { if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_FUNC=systemv_monitor set -x fi KLIB_SA_logmsg INFO 5 4 print_server_sa.cat "%1\$s \ print subsystem Health check initiated\n" "System V" # : printing to a temporary file using SystemV print subsystem : for SystemV print subsystem Health check # KLIB_SA_logmsg INFO 5 5 print_server_sa.cat "Creating a temporary file in /dev directory \ for printing to a file using %1\$s print subsystem\n" "System V" touch /dev/${TEMP_FILE} >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to create a new file in /dev, this could be because of : problems with system but print subsystem might function properly. : So just logging a message with returning the value of SUCCESS. # KLIB_SA_logmsg WARN 5 6 print_server_sa.cat "The file creation failed \ for printing to a file using %1\$s print subsystem\n" "System V" KLIB_SA_logmsg WARN 5 7 print_server_sa.cat "The test print to a file \ using print subsystem can't be initiated\n" "System V" return 0 } # : Provide require permissions to file # KLIB_SA_logmsg INFO 5 8 print_server_sa.cat "Providing \ required permission to temporary file created\n" /usr/bin/chmod 600 /dev/${TEMP_FILE} >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to provide required permissions to the file, this : could be because of problems with system but print subsystem : might function properly. : So just logging a message with returning the value of SUCCESS. # KLIB_SA_logmsg WARN 5 9 print_server_sa.cat "The required permission modification \ to the temporary file failed.\n" KLIB_SA_logmsg WARN 5 7 print_server_sa.cat "The test print to a file \ using %1\$s subsystem can't be initiated\n" "System V" # : Removing the file created for printing # /usr/bin/rm -rf /dev/${TEMP_FILE} >> $LOG_FILE 2>&1 return 0 } # : Provide required user ownership to file # KLIB_SA_logmsg INFO 5 16 print_server_sa.cat "Providing \ required user ownership to temporary file created\n" /usr/bin/chown lp:lp /dev/${TEMP_FILE} >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to modify required ownership to the file, this : could be because of problems with system but print subsystem : might function properly. : So just logging a message with returning the value of SUCCESS. # KLIB_SA_logmsg WARN 5 17 print_server_sa.cat "The required ownership modification \ to the file failed.\n" KLIB_SA_logmsg WARN 5 7 print_server_sa.cat "The test print to a file \ using %1\$s subsystem can't be initiated\n" "System V" # : Removing the file created for printing # /usr/bin/rm -rf /dev/${TEMP_FILE} >> $LOG_FILE 2>&1 return 0 } # : Create a printer to a file # KLIB_SA_logmsg INFO 5 10 print_server_sa.cat "Creating \ a %1$s print queue printing to a file\n" "System V" /usr/sbin/lpadmin -m standard -T hplaserjet \ -I simple -p $PRINT_QUEUE -v /dev/$TEMP_FILE >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to create a print queue. # KLIB_SA_logmsg ERROR 5 11 print_server_sa.cat "The creation of print queue %1\$s \ for %2\$s subsystem failed.\n" "$PRINT_QUEUE" "System V" # : Removing the file created for printing # /usr/bin/rm -rf /dev/${TEMP_FILE} >> $LOG_FILE 2>&1 return 1 } # : Accepting print queue # KLIB_SA_logmsg INFO 5 18 print_server_sa.cat "Accepting print queue %1\$s\n" $PRINT_QUEUE /usr/sbin/accept $PRINT_QUEUE >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to accept print queue # KLIB_SA_logmsg ERROR 5 19 print_server_sa.cat "The print queue %1\$s accept \ failed\n" $PRINT_QUEUE # : Cleanup # cleanup return 1 } # : Enable print queue # KLIB_SA_logmsg INFO 5 20 print_server_sa.cat "Enabling print queue %1\$s\n" $PRINT_QUEUE /usr/sysv/bin/enable $PRINT_QUEUE >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to enable the print queue # KLIB_SA_logmsg ERROR 5 21 print_server_sa.cat "The print queue %1\$s couldn't \ enabled\n" $PRINT_QUEUE # : Cleanup # cleanup return 1 } # : Test print using System V subsystem # KLIB_SA_logmsg INFO 5 12 print_server_sa.cat "Test print to \ the file using %1\$s print subsystem\n" "System V" /usr/sbin/lptest 5 5 | /usr/bin/lp -d $PRINT_QUEUE -L C >> $LOG_FILE 2>&1 (( $? != 0 )) && { # : We are unable to initate print using System V subsystem # KLIB_SA_logmsg ERROR 5 13 print_server_sa.cat "The print request using %1\$s print \ subsystem failed\n" "System V" # : Cleanup # cleanup return 1 } # : sleeping here for sometime for the print queue to become empty # sleep 5 # : Verify the printing is done or not after counting : the number of lines in the file # KLIB_SA_logmsg INFO 5 14 print_server_sa.cat "The number of lines in the temporary file \ should be greater than 0 after print\n" NUM_LINES=$(/usr/bin/cat /dev/$TEMP_FILE | LC_ALL=C /usr/bin/wc -l 2>/dev/null) NUM_LINES=${NUM_LINES// /} # : if NUM_LINES is greater than 0 : print subsystem is active : else : print subsystem is not active # (( $NUM_LINES > 0 )) && { KLIB_SA_logmsg INFO 3 1 print_server_sa.cat "%1\$s \ print subsystem is active\n" "System V" # : Cleaning up # cleanup return 0 } # : If we are here then System V print subsystem is not active # KLIB_SA_logmsg ERROR 3 2 print_server_sa.cat "%1\$s \ print subsystem is not active\n" "System V" # : Cleaning up # cleanup return 1 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # We need to set this so that we can gather enough details in # /var/hacmp/log/clappmond..monitor.log for debugging. export VERBOSE_LOGGING=${VERBOSE_LOGGING:-"high"} eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.4' fi # : Load the common variables # . /usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" # : temporary file name and required print queue name # TEMP_FILE="temp_systemv_$$" PRINT_QUEUE="temp_queue_$$" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x BASENAME=$(basename $0) echo "######################################################" >> $LOG_FILE dspmsg -s 5 print_server_sa.cat 22 "# SYSTEM V PRINT SUBSYSTEM HEALTH MONITOR" >> $LOG_FILE echo "\n######################################################" >> $LOG_FILE # : System V print subsystem health monitoring # systemv_monitor exit $? pr k@$o/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_systemv_start#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_systemv_start.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)66 1.1 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_systemv_start.sh, hacmp, 61haes_r714 11/28/11 14:53:20 ############################################################################### # # Name: cl_print_server_systemv_start # # Description: start script to start System V print subsystem # # Syntax: cl_print_server_systemv_start # # Returns: 0 on SUCCESS # 1 on FAILURE # ############################################################################### ############################################################################### # # Name: isRunning # # Description: Check to see if System V print subsystem is active. # # Arguments: none # # Returns: 0 on RUNNING # 1 on NOT RUNNING # ################################################################################ isRunning() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # # Finding out System V print subsystem is active or not # LC_ALL=C /usr/bin/lpstat -r | egrep -ie "scheduler is running" >> $LOG_FILE 2>&1 (( $? == 0 )) && { KLIB_SA_logmsg INFO 3 1 print_server_sa.cat "%1\$s print subsystem is active\n" "System V" return 0 } KLIB_SA_logmsg WARN 3 2 print_server_sa.cat "%1\$s print subsystem is not active\n" "System V" return 1 } ############################################################################### # # Name: doStart # # Description: Start the System V print subsystem. # # Arguments: none # # Returns: 0 on SUCCESS # 1 on FAILURE # ################################################################################ doStart() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : Starting the System V print subsystem. # /usr/lib/lp/lpsched >> $LOG_FILE 2>&1 sleep 5 # : Check the status of System V print subsystem # isRunning (( $? == 0 )) && { KLIB_SA_logmsg INFO 3 3 print_server_sa.cat "%1\$s print subsystem \ started\n" "System V" return 0 } KLIB_SA_logmsg INFO 3 4 print_server_sa.cat "%1\$s print subsystem \ unable to start\n" "System V" return 1 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/db2:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # : Load the common variables # . /usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} echo "######################################################" >> $LOG_FILE dspmsg -s 3 print_server_sa.cat 12 "# SYSTEM V PRINT SUBSYSTEM START LOG" >> $LOG_FILE echo "\n######################################################" >> $LOG_FILE # : Find out System V print subsystem is active or not # isRunning (( $? == 1 )) && { KLIB_SA_logmsg INFO 3 5 print_server_sa.cat "Starting %1\$s print subsystem\n" "System V" # : System V print subsystem is not active. : Make an attempt to start System V print subsystem. # doStart exit $? } exit 0 B k꺀$o /םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_systemv_stop#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_systemv_stop.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)08 1.1 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_systemv_stop.sh, hacmp, 61haes_r714 11/28/11 15:05:11 ############################################################################### # # Name: cl_print_server_systemv_stop # # Description: # Command used as the PowerHA SystemMirror Application Server "Stop Script" for # System V print subsystem. # # Syntax: # cl_print_server_systemv_stop # # Arguments: # N/A # # Returns: # 0 on SUCCESS # 1 on FAILURE # ############################################################################### . /usr/es/lib/ksh93/func_include ############################################################################### # # Name: isRunning # # Description: Check to see if System V print subsystem is active. # # Arguments: none # # Returns: 0 on RUNNING # 1 on NOT RUNNING # ################################################################################ isRunning() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : Finding out System V print subsystem is active or not # LC_ALL=C /usr/bin/lpstat -r | egrep -ie "scheduler is running" >> $LOG_FILE 2>&1 (( $? == 0 )) && { KLIB_SA_logmsg INFO 3 1 print_server_sa.cat "%1\$s print subsystem is active\n" "System V" return 0 } KLIB_SA_logmsg WARN 3 2 print_server_sa.cat "%1\$s print subsystem is not active\n" "System V" return 1 } ############################################################################### # # Name: doStop # # Description: Stops the System V print subsystem. # # Arguments: none # # Returns: 0 on SUCCESS # 1 on FAILURE # ################################################################################ doStop() { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : Stops the System V print subsystem # /usr/sbin/lpshut >> $LOG_FILE 2>&1 sleep 5 # : Check the status of System V print subsystem # isRunning (( $? == 0 )) && { KLIB_SA_logmsg ERROR 4 2 print_server_sa.cat "%1\$s print subsystem \ has not been stopped\n" "System V" return 1 } KLIB_SA_logmsg INFO 4 3 print_server_sa.cat "%1\$s print subsystem has been stopped\n" "System V" return 0 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # : Load the common variables # . /usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} echo "######################################################" >> $LOG_FILE dspmsg -s 4 print_server_sa.cat 6 "# SYSTEM V PRINT SUBSYSTEM STOP LOG" >> $LOG_FILE echo "\n######################################################" >> $LOG_FILE # : Check the status of System V print subsystem # isRunning (( $? == 0 )) && { KLIB_SA_logmsg INFO 4 4 print_server_sa.cat "Stopping %1\$s print subsystem\n" "System V" # : System V print subsystem is active. : Make an attempt to stop System V print subsystem. # doStop exit $? } exit 0 sh93 k4$ou/םaX՝a֝a&u2vT./usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_common_variablesKLIB_OUTPUT_CONSOLE="true" KLIB_HACMPLOG_ENTRY=printServersa.log INFO_FLAG="true" WARN_FLAG="true" ERROR_FLAG="true" sr/ k$o{ /םa֝a֝a&{ 2vT./usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_manual_config#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_manual_config.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/printServer/sbin/cl_print_server_manual_config.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################### # # Name: cl_print_server_manual_config # # Description: Print Subsystem smart assist manual configuration with input XML file # populated with required information to configure. # # Arguments: # -f # # Return: N/A # ############################################################################### function usage { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_SA_logmsg WARN 9 3 print_server_sa.cat "Usage: \ cl_print_server_manual_config -f \n" exit 1 } typeset CONFIG_FILE="" KLIB_OUTPUT_CONSOLE=true KLIB_HACMPLOG_ENTRY=printServersa.log FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/sa NUM_ARGS=$# (( $NUM_ARGS == 0 )) && usage while getopts f: option do case $option in f) # Input xml file for manual configuration CONFIG_FILE=$OPTARG ;; *) usage esac done [[ -z "$CONFIG_FILE" ]] && usage PRINT_SERVER_SA_SBIN_DIR="/usr/es/sbin/cluster/sa/printServer/sbin" # # Configuration of System V print subsystem # $PRINT_SERVER_SA_SBIN_DIR/cl_print_server_import -C "SystemV" -f $CONFIG_FILE #All error logging taken care inside $PRINT_SERVER_SA_SBIN_DIR/cl_print_server_import #utility, so no need to LOG. Here if $PRINT_SERVER_SA_SBIN_DIR/cl_print_server_import #fails exit with 1. (( $? != 0 )) && exit 1 # # Configuration of PowerPC print subsystem # $PRINT_SERVER_SA_SBIN_DIR/cl_print_server_import -C "PowerPC" -f $CONFIG_FILE #All error logging taken care inside $PRINT_SERVER_SA_SBIN_DIR/cl_print_server_import #utility, so no need to LOG. Here if $PRINT_SERVER_SA_SBIN_DIR/cl_print_server_import #fails exit with 1. (( $? != 0 )) && exit 1 exit 0  k>$o@//םa֝a֝a&/2vT./usr/es/sbin/cluster/sa/printServer/sbin/print_server_xutilsal@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/printServer/sbin/print_server_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)82 1.1 src/43haes/usr/sbin/cluster/sa/printServer/sbin/print_server_xutils.sh, hacmp, 61haes_r714 11/28/11 15:18:47 ################################################################### # # Function: listInstances_PRINT_SERVER_POWERPC # # Description: Lists the print server powerpc instances # # Arcguments: componentid , nodes # # output: list of instances in xml format # ################################################################### function listInstances_PRINT_SERVER_POWERPC { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # : No instances for print server powerpc component : This is a just dummy function # KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ################################################################### # # Function: listEnv_PRINT_SERVER # # Description: This component doesnt have any ENV settings. # but as per the framwework we need this dummy function # # Arcguments: none # # output: None # ################################################################### function listEnv_PRINT_SERVER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : No ENV is needed by this component # KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ####################################################################### # # Function: listProps_PRINT_SERVER_POWERPC # # Description: List properties for the powerpc component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Application Name [print_subsystem_PowerPC] #* Print Subsystem Owning Node + #* Takeover Node(s) + #* Print Subsystem PowerPC #* Service Interface + # Netmask(IPv4)/Prefix Length(IPv6) [] ######################################################################## function listProps_PRINT_SERVER_POWERPC { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset primary typeset takeover typeset print_subsystem typeset application_name typeset takovernodes_val_list typeset serviceip_picklist # : Discover possible property values # #/usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_query -D -n 'node1' -c 'PRINT_SERVER_POWERPC' #primary:takeover:print_subsystem:application_name #: :PowerPC:print_subsystem_PowerPC /usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_query -D -n "$NODES" -c "$COMPID" | grep -v -E "^#|^$" > /usr/es/sbin/cluster/etc/sa_inst.x IFS=":" read primary takeover print_subsystem application_name < /usr/es/sbin/cluster/etc/sa_inst.x # : Discover Picklists : Discover the takeover node list # takovernodes_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | tr '\n' ',' ) takovernodes_val_list=${takovernodes_val_list%,} #serive ip pick list serviceip_picklist=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') # : Print each property # #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" print_start_tag PROPERTIES # Application Name print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$application_name" "" "" "false" \ "-A" "string" "true" "true" \ "false" "true" "" "print_server_sa.cat,7,1" print_end_tag PROPERTY # Print Subsystem Owning Node print_start_tag PROPERTY "2" "OWN_NODE" "Print Subsystem Owning Node" "" \ "$primary" "$takovernodes_val_list" "" "false" \ "-o" "string" "true" "true" \ "true" "true" "" "print_server_sa.cat,7,2" print_end_tag PROPERTY # Takeover Node(s) print_start_tag PROPERTY "3" "TAKEOVER_NODES" "Takeover Node(s)" "" \ "$takeover" "$takovernodes_val_list" "" "false" \ "-n" "string" "true" "true" \ "true" "true" "" "print_server_sa.cat,7,3" print_end_tag PROPERTY # Print Subsystem print_start_tag PROPERTY "4" "PRINT_SUBSYS" "Print Subsystem" "" \ "$print_subsystem" "" "" "false" \ "-C" "string" "false" "true" \ "false" "true" "" "print_server_sa.cat,7,4" print_end_tag PROPERTY # Service Interface print_start_tag PROPERTY "5" "SERVICE_INTERFACE" "Service Interface" "" \ "" "$serviceip_picklist" "" "false" \ "-l" "string" "true" "true" \ "false" "true" "" "print_server_sa.cat,7,5" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) print_start_tag PROPERTY "6" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "false" \ "-P" "string" "true" "false" \ "false" "true" "" "cluster_hlp.cat,25,51" print_end_tag PROPERTY print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_import -a " print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ################################################################### # # Function: listInstances_PRINT_SERVER_SYSTEMV # # Description: Lists the print server systemv instances # # Arcguments: componentid , nodes # # output: list of instances in xml format # ################################################################### function listInstances_PRINT_SERVER_SYSTEMV { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # : No Instances for this component. This is dummy function # KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ####################################################################### # # Function: listProps_PRINT_SERVER_SYSTEMV # # Description: List properties for the systemv component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here ######################################################################## function listProps_PRINT_SERVER_SYSTEMV { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset primary typeset takeover typeset print_subsystem typeset application_name typeset takovernodes_val_list typeset serviceip_picklist # : Discover possible property values # #/usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_query -D -n 'node1' -c 'PRINT_SERVER_SYSTEMV' #primary:takeover:print_subsystem:application_name #: :PowerPC:print_subsystem_PowerPC /usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_query -D -n "$NODES" -c "$COMPID" | grep -v -E "^#|^$" > /usr/es/sbin/cluster/etc/sa_inst.x IFS=":" read primary takeover print_subsystem application_name < /usr/es/sbin/cluster/etc/sa_inst.x # : Discover Picklists : Discover the takeover node list # takovernodes_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | tr '\n' ',' ) takovernodes_val_list=${takovernodes_val_list%,} #serive ip pick list serviceip_picklist=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') # : Print each property # #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" print_start_tag PROPERTIES # Application Name print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$application_name" "" "" "false" \ "-A" "string" "true" "true" \ "false" "true" "" "print_server_sa.cat,7,1" print_end_tag PROPERTY # Print Subsystem Owning Node print_start_tag PROPERTY "2" "OWN_NODE" "Print Subsystem Owning Node" "" \ "$primary" "$takovernodes_val_list" "" "false" \ "-o" "string" "true" "true" \ "true" "true" "" "print_server_sa.cat,7,2" print_end_tag PROPERTY # Takeover Node(s) print_start_tag PROPERTY "3" "TAKEOVER_NODES" "Takeover Node(s)" "" \ "$takeover" "$takovernodes_val_list" "" "false" \ "-n" "string" "true" "true" \ "true" "true" "" "print_server_sa.cat,7,3" print_end_tag PROPERTY # Print Subsystem print_start_tag PROPERTY "4" "PRINT_SUBSYS" "Print Subsystem" "" \ "$print_subsystem" "" "" "false" \ "-C" "string" "false" "true" \ "false" "true" "" "print_server_sa.cat,7,4" print_end_tag PROPERTY # Service Interface print_start_tag PROPERTY "5" "SERVICE_INTERFACE" "Service Interface" "" \ "" "$serviceip_picklist" "" "false" \ "-l" "string" "true" "true" \ "false" "true" "" "print_server_sa.cat,7,5" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) print_start_tag PROPERTY "6" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "false" \ "-P" "string" "true" "false" \ "false" "true" "" "cluster_hlp.cat,25,51" print_end_tag PROPERTY print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/printServer/sbin/cl_print_server_import -a " print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #--------------------------- # MAIN STARTS HERE #--------------------------- # # these functions will be consumed by clvtsa # print_server_xutils=( typeset env_func="listEnv_PRINT_SERVER" ) print_server_powerpc_xutils=( typeset env_func="listEnv_PRINT_SERVER" typeset inst_func="listInstances_PRINT_SERVER_POWERPC" typeset prop_func="listProps_PRINT_SERVER_POWERPC" ) print_server_systemv_xutils=( typeset env_func="listEnv_PRINT_SERVER" typeset inst_func="listInstances_PRINT_SERVER_SYSTEMV" typeset prop_func="listProps_PRINT_SERVER_SYSTEMV" ) t #  kFU&o$ /םaX՝a֝a& 2vT./usr/es/sbin/cluster/sa/printServer/config/cl_print_server_manual_config.xml$$ Node1 Node2 haapp08 Node1 Node2 haapp08 int k&o$/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/printServer/config/cl_print_server_manual_config.xsd$$ BJOW]^j}'?QYZ[q~+\6ZlC)"$ pTf632芲BҲͨQYL!(چH6LЙ[C(e0#VQ<hx= ⱜ+G! x2$D1W)fUՈ#)D!K*$*1 umd@N Q48RS Dm,Væx"%(1@w@rDqzx"%(1@qT \r-V dB$| `VG%2RdP%\8q(d8ljJTPz sI2S6-WRfi^p+6d8hj GS5ĄtCə2"E1DmEjڊxgDU8A5 +9)J"`P3B`D" QcbB ”@2D2)J"efC&JxgJ"28RS6NUմ6,Vd:23Lm Q%\plum")l"*ڊbPVQ"*SV hHĠJ& ⱛẶHue2")+\t^265DB:TPsK" [qe:<[-yᡨ0L׎@i:DUht=V!D h)p[C ub!+Dh$U8,VzCXA+)4Uʓh3#6S+hH^oZ D EKb1Sm"28Wr6S+hu1uqœBVd:J yC:鼠g)Ո'3*C@"* 1DBm"Fh?D2Dhj"dMC"YDLFGpJA!C:V33*C% #"m 1rS: QB#(j+\ϥPbی% P/2;myL e̴`^iǿC92XY82CUg e2Xpd1)2nj"ecڱd"65 UcSG1\0D -Z-G0L3Amq*ů@v-- Qɡ(J v-^,@v¢Ea*98478ts;Tƀ;:`g` DcCq P[F;NX&2B8 0°S*P@&(" tzմ6Vd7V kb"\dȅpvdP(9DLd8Y88B&)+]ph265DBPq8I2ו2bۉ?#5ṛQyA/3^Q5P,QZfU X !Y29DLd8Y88B&DU Cƨb](W_wL[qK A yIP QLf"EzmCufPTA+镈y@fGp(cS2DqXp5VpYDLSVd8lj+ Uqޏ*%y:,:[ᡨ1!|)3jAQ*3HPn 2b2/2^ *̎PƦe1dj 8yHp V 5 [q JR[qNqᡨ1!|)3jAQ*3HPn 2b2/2^ *̎PƦe1dj 8yHp V 5 [q JRCRIld8hj H_׆mEfUb Cf"C^d jyD;DB$mEjڋՙT+b`$2X:@'653(G'UgUDȊ6p Z -ʅEΖp! ڋ̪ yxD xՂvIg ڊյ2V jI)9WJm.2\+W*V!Xu^dPJ0(NljfQ(+N(s\d8ljqXt">"~B I2R ySᡨ1!|)VWFA֭F2NljfQ(+N(j9kFCƨb](Wő1ko2ᔪ(m+ʜe:oCąpfͨnfeJچ̠X!yƦe1dj 8yHp V .Ru&* BvԽp ה ̠Atچ̠X*V!+II`̢&2QV, U!VQ)!Uv?`\@V0R^Q)yᡨ1!|)3jAQ*3镵 ՙARTCVa`̢&2QV, U!VQ)!Uv?`\G{IF iᡨ1!|)3jAR(*Vȴ<Ճ\dcS2DqXp5VpYDLSVd8lj+ UsKBbeKa)Z`fS!CPbB83^R.2j1scS2DqXp5VpYDLK)!Uv?`^B2eKa)Ze:o Afp@3hJ FFbY%A(z "S0^P%*:]TH!J&)< &C:2XY82CUg ٙDL{V,Fơ|x@ WDz9toe8V`S VFxxV _|LJPDȊ|5WaVjǘDnRo`  ׎@|2Vl:=3:Iz[B(Dť@YW֐tՁ>?VDC1a LWʺ!qjPs]Xw@iXf eis0ZJ&+"UҀV N+qX #eA)2(V _p/*芫4!\@t!C5Wc F-˯4x1!|@ff9321X2 f EYQaQjʴ̡; IAZYfUbTc$K+j2Vea E][Uj̢ᑶ% Ȋ|Jsګ3j,VX.b+W ڇ*+2/$%"eigV"|\QF.,%`y@j-Veo26ġ\pPr,(z.APB&VqYb ؕ+j̢V@2V ţ$>mE3j,VZ-s6mE̢ᑶ% )Ve+bEX0[Qb$qœᱪ"Pt">"~Bk51mSd8hj GP`!A@O5Ąà4:*ڊچFmJJs6mEj̇Ca26VйVfԥ[C̢pv : ȁ2"XU#"*9mdDՌ###(89ͨddt h8-DFUK$D cbB j e5Wp UDȁ+DiLl+(p2MՔDMⱜp$J& Jgb&:o2DnS8e1y@W3jRBEF@7WV~,(\ FB j d6< A+p tKr`[C:`(u"dEPuW\at]G3YDLEPuN Q+]Y\Z]Y~;V b, A^F _/*Ո0XFG4FQb pr _ }XjemJNc82"*4 +aWVV-s6mEj̇Ca26ġX@BS: QЂ@7t">"~BuDT@pJ?0*9mdDՌ###(89: چJچGM@rMV#)*`D" 1r!2MEJ&D G5r&:o2"hl7)²鼠g)D "C J NUմ:K8+ay ~!2h@$!j+& :K8 C҇YMq(yyQfTh>UҀKhദue2PseAֈA8-Dh1*̇Ca+`^H20JaWV~AJHX2292JA چJچGMf?VԤV3(QX _l1WVV-s6mEj̇Ca26ġXAN8SVz265DB::2|B :!Ј . [qF.q%'R.1u˙L֊6F*eךq |y_󑲰VۊC813(jœ 5VqIDǵbDlj8DŽw8p&jJ_P^jJ-T61U3M*SBH,U - aڂRMBH,BҀP Gnʔ&'y\1P1u˘  ]yo1m]yʓ4 [qŭ*e1ko; (\\@&Fx\@&F 20%F;Ҩ1m]e,K̺`Vכ.e2wZ+P-<^iǽ*dPpۅY/q:tы6\dVZ0yS.ӏy{Լ pŷҨ1mK ^yL e̦NEje28K [p*eы6\b{Լ˦n]yS'u уʙu{ax S%BHV"{M(N(*^mBUۄb PaAIC- &:h[X@y `Z JiKXR3h SnS 1mуʋy:VyaQcr'Rы6\jZ+Pf`PE ԧy|6iBt7lrh|o8cbY&e+\lM4>7 "p;sCOf\_)aBFpdLh19u|h<h|w@h|w@dh|w@&Y`rh|wəJװ&u Mh{|Mlw`W4>;}dỳ[a4X+m_`h|w`f6 ̀g4>;W4>;VQxId܄Y6 l lL74Ea0oa0\Mc!* 8E ˒P|L7\Sa0#r #3X7f_# a@{ aA\55,3Y3Y5 @!u3Y6 @ k k ~AîA3Y3Yyk r @5k |5f<5= l 53[ yk`-f lf <5Ak`2fA3[fW\53[k`3[u3[ϐf]r wA3 1f3[\5 <5 z Af 3[߄DqLj3[3[]3[ l* lFA5|f' l =)k`p53[3[k!9’ B9d{ B%f7H3YS3YWĤ' d!o 3Y_² Bw B{d Br B+fˎf6A:ࡷE :Brb ъ pPP E iHں/pVZ(NVbۅ'R(mu7U E$ġ2DžbFYdF-G^q+NP+JN\43)LyQs&-c&LUJ6Na)qko2R ySMZe:CJ;j^ĥZdI{IF i)rV/i(̦i)qko2kIF !qko2S2^u/2[^lhCl`^iǙN"J%'R.1u˙L֊6F*uyNd1(d^eF.s)ZhNӏb(m+ʜd^eF.s)ZhNӏ26(1m]e,K̺`Vכ.e2wZ+P-<^iDZAn2^8mK̺`Vכ.e2wZ+P-<^iǰ*dKo@An22BvԼdVKN]0+tb͗2уʝyyəJJsi+)e3O4˯8`w R1mK[ySEl8PbیTZPꔲ4Kq1n2QiBWRn8%1mT*-(JuJY.tʖÆRtؘRpV%6鰑+L)/i(<:bیN=Jŷtb͗^u/2[^lhCl`]yϥPbیp+%'R.1u˙L֊6F*eךqy*e1ko;&LS^T\ɋn',CeBKqeTiLcZe:CJ;j^beB҄'TKpŷP+)eT[q JRCRIn<\bیTZ\n$.1m[qNaqn24Kxe͖4`RqAjEm(e3O4\LxG cBDNӇH)HR1#/#xr$'*u/47'>{F$ϤDo$'i$$C>LNӇH !&ʼnuID|T3ygɎ:LJJ"L&eFD8y9slȏ3Rβ7'"?y9sf-(F.@OiQt1P$x3CdGΟ :Ghb @Sב: a27'i$>yH0O䇒< B$L( pC@! }P䇒!HDFDыBFP$e*:(2VӭBJt +0,mJbhIN@ "BtGO$d:ё!:|dɓNɏB#,l8+iђ>*@u T` #B"Lx4ćЊĈ pC$"A$BNӇH! &F!!;NHy!  ˞e:<[-y1q!);I'Lڗ'md:)2G lŵȏ@yP$i+)FH@x"UE)L!dGQ 1'd1(d3 06AHj CP#@㡈6 ;!C!n \P 0NbR jX`ġ7 R. a$(b #@u&:Ir#+"UN8WI^NK.W( $>H1(dY,0R2@1(e*y)QB \2SćPHRꔣ&&:*&:LH:ddH&u B!{IF hȏB*P$IxRJNXTFRNXL}”D8y!䈐"Ayr#0୶^F$GcDLuȉ QLuȉQRNXD}&:HQTNXD}&$F9a1"7HII*$',">}&:Q)9a7DϤQ*I#xGФ„ [q ,Nax:Դ\2\u+LL#J%'R.1u˙L֊6F*uya6%ZU-ko2JwhԼhD6qy.:^ /$&DSEl#$`u;ڗ$%6Y,0RQĈJU-bPU R)Z/q:tы6\F*uyhD|'y]yKQE*6ђΘ1uˑ,)J(bRL'Jכq{.JtaJ,V/q:tы6\dVZ0yS4̧LϥiyL e̦NEje:N<{IF LȌ[qġyL e̦NEje:N<P`yS6XтJ/io'"%QRN?@$< B\bAn2R yuы Bԭu P$R-iƋyFD|1!(6記 qmh>$IY0BP=Iyb$DdIPHێ*qhOB RIkП:LHu C7TȏB"$i)ԖB#[hС:|(6㊜F PHjU&m<1rI;P)T-6P$q4HГB mZydGΓB#i3)#">tTLu J0FD|@*[qN#">t1P$u SmH@* ddGΠ@Hu 0 -P i摋DTXʕIu󧎡@Jͦi摡Du P$Ix9aĈ pCHx ;NHy!Do>x$<D8LBbvNӇH*HDNX+O'TҌu \)@NdF-:VNK)E2X`*2bS@3nq9{)FLLu ĉJ0e{hȏB"FJtGPHR ySLڗ'mQ N&u2CPHF ;NHy"$)cI)%',">}&$F𤘜7"r#1"7(I)>F#ϤĈD1m]yF6Y,0RQĢJAn2FǕ<ʄ[F^KdSȏԲ:u8+myyJͲ22#UJ6N222#Fe୴dGK ea" *dPpۅY/q:tы6\dVZ0yS.ӏ# ӼZ1q)wO"N/',Nۈ'O@x# T6bڄdGΠ<(4ꔣ$DuL$$Iԧy+0,FJhԼ(dJVYFt yTL6ХTCi^T%'R.1u˙L֊6F*uy鑂2#eы6\b{Լ˦n]yS'u уʙuy#И%ꃆ/J{Լ˦n]yS'u уʙuy#,l2^ӈ@LLNDK<1rI8:JBҼ]y2;#HzLuО'">TV҆S4H$ITNXD|LT\k)Zy YmK Q'usLPH\ۮZ2SPB"LJ( pCIB$tTLu Z.m)B"UJ6N23j^NXFǎ@y!X'0RDG@^*2\2reBw^F SH^BgR !ćOHSFdP<&$FDGϤĨB*'i$>)H#x9a0ćpC)tŦT'uo '%Ĉ$BNXD|LJBBvt(6㊜u1B pӊS-u1 I@& ҪP*q^p+&D3j^NX:x (@3nq9{)FbCĉP*qdODu TdO:|TJ"UJ6K FLJu@&:aI9aȉpCHF0LJIv*@u I2$`J2#P:FÖҘ<1HRP$+ @^ڐA6$t">u  @8lۉiꔣ">u ĤPH2Nۯ4 'q: H@R0R2#P>(`[N(O:DHD8y!DJNXD}&%F"bv}&$FbDoxLHI1"7&',">#xI8`|6$FȉĈ>xTN<#xGbDo>|0>|<>#x$1o>HNXD|LHI1o>LNXD|LH$7DNXD|LHDo@x' =#xGϤĈ> 8`} y>#xRpLH Ĉ>RN@M}"r#1"7>F'I&e)*.dŷ QG-ʢ'F^SlX`+, ŷ.thD|$.t鑗K8\p[P9z2œ#e)YelH-ʅE ^NK%Ζ 6Y,0RQĄ1mT*-(JuJYm84">dJVYFaQn2QiBWRpӊS-F?L[q K-F?lX`+, Oa!n2ێ*qhD|>bی 8:aJd̥TCi^T0ЈK-pӊS-FϟCL(m+ʜFϟ?e* JN#>xUeU(Pt(.J)Ԙ6U R0F*b2`S4HUZd2FϞ?ŭV%6&FϞCK[y220F|.$.J)#dGəJ0F|^C}CA?= 6#A?MA? F~s`h4`O&h' s`h496\9|4vl cA4s6Ѡ4 Ah F|Ҽ|3h'|> hi| b  y< yT́^j46h' >7 `h4́O|5O:n4\ Ƃ|Aq9A>6lF|l6|lCxfCA>6bfCA>#Y- D40ohO6O'3@Z4υ!!!s&!"_:Pr0:fA>$x>7] r@>7`[:=|o NxHxj4PqX|o|ohU<>7xO<5`Cx-F|L xk#8N#$7 CxNnVqLpyhI |>7(|o j4@ >7h'&hNžh" >nh٠z4q*s٠h'|NU9F|N s\h'4F|Ns@6 A*c864P"͔T- T6R4Q|o gF|*hVWpz4{4F|*[|p4^r4?F|l= @٠  ogƂ|, e#A>,Olh'¾0 gF|,*`fOf(IsC@ PHHo5q\87+dp\ 8X{\"" ȃ95 H9 ہ @ur.rw9v9XAϰA49? si;`s6`MTA {5lA {6* v 54AE LA f;`7;AM /v Aa`9˰A@6 l {+͝ 4H;װAx& nvv ;玐v6 H;63 ;aXA/ lr<̀AlD{H;6 ;63`ԃs`;.l!! '3`fJAG`\ADXADx<rqA! ur\ H9 'rZjAA= "p2 ! H9 O |+pEs89űޢ$%!o ;pAs q M psGmFhKW[ sD4+y% 4Fid恬 s@sl:͞E7)͋㙷m\Icٳ8Gp;k*lo8 y|GpL7s?KЛ|lzcbh="k6 `o؋lBF,Fz;(e0،_ 1s،;F#v19#pb0}~N(4(kBp P6O`x@(\@< kx`xx 0<cxR9p)aK Bؓ A{ VB<)3RL)06П\^úY_u>ǰ>Mo`| bp؝0'/bu\N ؜bpsbp0¬WE0 T0 E@a,*h5MX3`־UG !6M?` 0@ $ ,aa$ r , ħ { @xɼă S7 cx[E@s_fǓWDŽ <#9_sY{5`ooG:tF:!Dyk")$#̈́Y5!(5A%9$͊|lPU_ L`I(@lm7+1\mW2Yd|!|!/!לPڟwE㿖KşKT孼ړww'.o/uI{ԼYi;ako;/uԭ),/{wF.wi;SX|$ 1y9s`9X~sjL}o5?7KǸq5?7bs5?7{]5?7qn2\n: 󟏛&sX~s* `9l0_|l0_|y5?70_|-{5?7`9˒P0_|U&k/~>oq"c0_|d'&.J)y0_|&LV0_|셠\P.B% 󟏛^,"i`9T~Bcכ.k/~>o 2&p! fwrk/~>o0_|六OMcZRY$X~s rSX~s" 󟏛 1EsX~s k/~>o^qCj|k/~>o5U76[#,N[6Zo@?h~4k[ 7Br#}7'">{[xRNDQRND|YFbr$?}n$D}nD}n ȏ7DHO7 7C(BN0"A($' eĤYF18`Ku}{uG}n[}n 7u3?k[yp}ng~g#\ }(@*' "? }戽怇[h =7Dg@O4c6uo' {ùᄋYا[lu͕{uog` ù/6?}n^eħSeĨ Sg?o}n}n[p>g[pB?ecg+(&BN ?wYF1)8`LI8׾Yli=`=7'I}n =7(I{uo I J}nB{uo I }nH'Y! ='?)} }nB =0? [Q*C [63YlW_qF\ _^6 >2`޾G&C:fiy* ucq୴dGVDw [p3M*R8,}ne"VpZʝђs+QgR2ϭ I[63Y! 셠\P.c>7[ؙy#ms? &Kk4|w 1"/~>7~_LF+/~>7}뻈fKRO{u͓dk4|w͂ fߏFXC\-7]@_ {uo"@ND}YF9/YFG{uo &'">[x)9'[xr#}nQ9}nH?}nG7}7 ?YF)8`DQLNg}ngu{uu[3?[}np/}ng (@0@['Yq_Ytgguo!N!=g mQ0BIQ0BK/Q8`S2($[63YW_?0%EpFۿr6?U56go\~kPG2|;?%e3O4:ԪL2#+}ne/T2# [[qN#"?_[>2%ks)['ϭn[,7aZ <,끗 ?5H?`ξKS4HcqJͣ"?RN"?T2#8q2p2}n| _[63Y)o셠\P.0_FV}|y#ms?SI5_~>;^ K󟏍uN+/_O}n`W5_~>;;K%*]di~=W`7/ǿJ-7G-K;bu _[6ZoY@_^gg }(=(BJNDQ}nD}n ȏ7DHO7 7C(BN0"A($' eĤYF18`Ku}{uG}n[}n 7u3?k[yp}ng~g {uo DN ua}n'}nL0'?ɽ0q }nLGYL{uW[&?[&^g0u1?q =8[?[8i7Y' # upY wYF(0%&? ?#(& }n3kxcpV xy#ms9eĉ LH Wh+j,_ ; >2@s_m+Qw?Xǂ9ye俕>#/%3q 2_rDe俨}n3,}n ϭn[,<&o𮽃F-, <`) [Yg+Qw?Xǂ9ye俕>#/%3q 2_rDe俨}n3,}n y#ms9eǀC_m<+4kUh?°p]#+,ÿ+Qw?Xǂ9ye俕>#/%3q 2_rDe俨}n3,}nϭn[,8 #W^_ TmotF kG =Cq<;N[Hl>}nHwFg:r'8װhgՙ5@8+}n eekV[cV{q ]FHo̤en6 [ay#ms9e9-M{-l'A,nH?ksj8V1[a羷pdcWh @6*A [YgJk ? [6FV`}3}nHwFg> WhVs6S,_DFVY|_% #/"?w?`OSq୴eΙF^)C>l>=[pFۿr6?+SJ+`ѯ(́'58+}n eePU_m\?2q'ΙF^KOwSї[en6 [$䍷m A}q_6UFՅh?p>2(@CBtȏX9[͂gOn[,W_?نWhy^h?p. W_cpXg*}nHwFg_ ?əJ {Oh?0>2a-}"` q(rg#+wX>$m}ng#l;s셠\P.6c|ok4|wk490-so49L7 u{ Yo49L7_ i{d"0 8 fKaya ~_`9/ǿ̄M? }nfߏ?JK@uSM? _3Y}nyk49[%TC)d"0WlfߏXk49Wl1 Kɬ@=``k4|wqMf?}mlMfߏWl fKpf?{ur27/~ EL{i{˚Lq4i~s` =jFn`do'.o ~>#!W_4l~hGjFn` >xoA|` w Ҿi| 4#Bu#7yZ" 'BEGIN {exit_status = 1}; $2 >= 85000 {exit_status = 0};END {exit exit_status}' > /dev/null 2>&1 [[ $? == 0 ]] && return 1 } } return 0 } typeset result discover_domino_server result=$? echo "Lotus Domino server Smart Assist:DOMINO:Lotus Domino server:DOMINO_SERVER:$result" exit 0 '{ p k]%od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/domino/sbin/cl_dominomonitordidd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/domino/sbin/cl_dominomonitor.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)42 1.2 src/43haes/usr/sbin/cluster/sa/domino/sbin/cl_dominomonitor.sh, hacmp.assist, 61haes_r720, 1522B_hacmp720 5/25/15 19:34:16 ############################################################################################### # # NAME: # cl_dominomonitor # # PURPOSE: # monitor script of Smart Assist for Lotus domino server # # ARGUMENTS: # n/a # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ "VERBOSE_LOGGING" == "high" ]] then PS4_TIMER=true set -x version='1.2' fi . /usr/es/sbin/cluster/sa/domino/sbin/cl_lotusdominoGlobals KLIB_HACMPLOG_ENTRY=$KLIB_LOTUS_DOMINO_HACMPLOG_ENTRY typeset data_dir while getopts d:p: opt do case $opt in d) # Lotus domino server data directory data_dir=$OPTARG ;; p) # Lotus domino Program directory DOMINO_PROG_DIR=$OPTARG ;; esac done USER=$(ls -l $data_dir/notes.ini|awk '{print $3}') KLIB_SA_logmsg INFO 2 22 lotusdominosa.cat "Monitoring Lotus domino server configuration for dir %1\$s\n" $data_dir ps -fu $USER|grep -w $DOMINO_PROG_DIR/notes/latest/ibmpow/server|grep -v grep > /dev/null 2>&1 [[ $? == 0 ]] || { KLIB_SA_logmsg ERROR 2 21 lotusdominosa.cat "Failed while monitoring Lotus domino server configuration for dir %1\$s\n" $data_dir exit 1 } exit 0 ust k%od/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/domino/sbin/cl_dominostartrdidd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/domino/sbin/cl_dominostart.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)70 1.2 src/43haes/usr/sbin/cluster/sa/domino/sbin/cl_dominostart.sh, hacmp.assist, 61haes_r720, 1539B_hacmp720 9/11/15 15:05:07 ############################################################################################### # # NAME: # cl_dominostart # # PURPOSE: # start script of Smart Assist for Lotus domino server # # ARGUMENTS: # n/a # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ "VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/domino/sbin/cl_lotusdominoGlobals KLIB_HACMPLOG_ENTRY=$KLIB_LOTUS_DOMINO_HACMPLOG_ENTRY typeset data_dir while getopts d:p: opt do case $opt in d) # Lotus domino server data directory data_dir=$OPTARG ;; p) # Lotus domino Program directory DOMINO_PROG_DIR=$OPTARG ;; esac done USER=$(ls -l $data_dir/notes.ini|awk '{print $3}') cd $data_dir KLIB_SA_logmsg INFO 2 1 lotusdominosa.cat "starting the Lotus domino server with data directory %1\$s and user as %2\$s\n" $data_dir $USER /usr/bin/su $USER "-c $DOMINO_PROG_DIR/bin/server > /dev/null 2>&1 &" exit $?  ko%odo/םa֝a֝a&o2vT./usr/es/sbin/cluster/sa/domino/sbin/cl_dominostoprdidd#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/domino/sbin/cl_dominostop.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)99 1.2 src/43haes/usr/sbin/cluster/sa/domino/sbin/cl_dominostop.sh, hacmp.assist, 61haes_r720, 1539B_hacmp720 9/11/15 15:11:41 ############################################################################################### # # NAME: # cl_dominostop # # PURPOSE: # stop script of Smart Assist for Lotus domino server # # ARGUMENTS: # n/a # # RETURNS # 0 on success # 1 on Failure # ################################################################################################# [[ "VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/domino/sbin/cl_lotusdominoGlobals KLIB_HACMPLOG_ENTRY=$KLIB_LOTUS_DOMINO_HACMPLOG_ENTRY typeset data_dir while getopts d:p: opt do case $opt in d) # Lotus domino server data directory data_dir=$OPTARG ;; p) # Lotus domino Program directory DOMINO_PROG_DIR=$OPTARG ;; esac done USER=$(ls -l $data_dir/notes.ini|awk '{print $3}') cd $data_dir ps -fu $USER|grep -w $DOMINO_PROG_DIR/notes/latest/ibmpow/server > /dev/null 2>&1 (( $? == 1 )) && exit 0 KLIB_SA_logmsg INFO 2 11 lotusdominosa.cat "stoping the Lotus domino server with data directory %1\$s and user as %2\$s\n" $data_dir $USER /usr/bin/su $USER "-c $DOMINO_PROG_DIR/bin/server -q > /dev/null 2>&1" if (( $? < 50 ));then exit 0 else exit 1 fi g l@%odl/םa֝a֝a&C2vT./usr/es/sbin/cluster/sa/domino/sbin/cl_lotus_domino_configerydd   #-aeinorst "$EIOR_cdlmpu1=ADLNPSTfgv&./BCGMV[\]hy%'()02:FHKUbwx{|}34;>?k!,69Y578qz+*@WZp JaM0xE2I"AÏ@ePZVn/% h5h ]wсzȰ8x# d @@ 9eȰ6KPk $8dD" Dze]vpdD"  젴'x^JAeќk ]j k 0Zu P'T @AhFڡJa,ͯyNJa,Ի6MZ/)5)2,al``+kIHWYAkoVFW@8Gk$@@SBwg ʓs6kb0PZSU  riHF{]/x>ѭkJ^*H U>YYEfk%/p Lv8y,UwŴpUͮ@8E2I"A"=26p# P@`(-5T6 L5EP@5Z/)6 L5EZfɫE:&&VE,,0P 98 @@`Ȅ0HH(f Z9s9s9s9s9s9s9s9s9s9s9s9s9s9s9s\dG kQd֥ٲjyNIf$3mwV0rTƠ1{^+ʵu)2,ayRyZW!KmZ/)Ӵj^5 Jݔ&VEmٶ5/QBe#+cai) ʓxM\}K6 vKHવ5'(Lcai) ʓ[I1 e4V6ҹ ]jyNR]yNRX𚺰5eXzT]輧ME\!c5/ٮk(H6='ٕxΓ-s9s9s9s9s9s9s9s9s9s9s9s9s9s9s9b6I4``$։$zAȓ=2 D@hi7FM YCc`%0f׍Cmh@%0Mj]+E:-@C0mP6 L5EP@5Z/)6 L5EZfyNi^QZ r`$" J$Ɯ rd(&DP"`$" J$ۋFD 8M&+|u+_ IH^TF ǡ^RVtCqv#h"% JI^S-ΊܧZ:3kơoPrcKv>tyX𚺰5eXzT]b6舠E(^S1GVtlۋF#q7b4VEEGVtu)2,ayRam؍|&Me@xG"Mݏ;/ ߅+_@{n.m舒DJ&DE(LHڔ]N3{/ ߅+_+J)vmE:vKƭo=!#LLc,h͸o=!#LA$A䉘c,閭b͸oDyH@V J2+ ۋFDP"dDA1$xyDRE:lVeXzT]s{{{{{{{{{1yR`&=3V)hSWx&VEUƲ/@H@pa/*OפzUSԅЮ}kJ5v:^3mw`#ixpP#j^JFLmwpaxp5Q5mwCG5{{{{{{{{{{֕fj^Tфqv#hߩix8c.mKHɁqv#h߃ N i#.ma9x8o8ɓ,h#(֥ٲ^S/ZS- Z<`c ]JL3X^T`ob{RӂE[qhͿ,jh=cj3U"jі3Zp^-+&Ȯ&'y֍KHɌTU˖V5/%"δj^JFL7"A㊊ћYrՊѼx0R&JAob{**FmQeWV+F IH^Ttbp^-+&Zֹs9s9s9s9s9s9s9s9s9s9KʓU[FT'kjEkLՊZ 5+^9*cPh옽eZҽcj3U#nWJ65R9jі2# Y6բ;FPƹT+w/#I1kvk;NVɲmfei\ ,b9s9s9s9s9s9s9s9s9s9s洫3R*R5#6LO4#DD@A"FH7iQH,F-Ίp^ !dTi4(Zc47b\6l 41<Ӏp74n*+6`&=8Ǡ1["DE(I$DX qhͿ@)IǠH8z"(E2I" oV[ rd& /b$XFkRZ/) R!KmZ/)beXzT_QLH&=[/$+x)3[^ŷKehK@1H_)vmE:lP`/J@)IǠ+soE&k+&(=1p* S4Lz  f Ja3}` t 0"-%qGb1Z4 &E8El*΃ /I 6 0I'+Ҧ`iAѹ Ep& @92cZlE,f KehK@1H_48ze~ٛ6r(uABXRf4פzT0[a Ji=!#MCNj%0jZHH@R'ج|P0R'x0p0MwabyF70AɎMj^ųI(UyN R'%V'ΗQbTRf=!#MM0"0̕ƥP$B9j YN*=!#MM0LO4 hIa&LrkP-H@&.͕-!|Fu`cEbVSZ9*cPh옽eZҺYf1ILI4 7"0* 1+^S-QBe+ٶ5/RedY`8ɓ,h#@..͕-!|ʫ)RVttj3U#VF nP#Gdx#*֕Ԥȳ5ILꖜL2Eq1<舠E(4nh qhͿ-U-V7:nLI2(p1'0&Z0`3Zp^;JW7ZaR2 ]jyNR96dƚqJɦ=4rdÐ"ɫE:ZLI1Lz oc8z"(E2I" <<)svkы)Y1qAiDE( 0jyNޮq3=$ǎ(91%舠E$cHo'+ҶRbM8%QL92a QdբzWzHH8Ǡ3"S$" A#"50q&95Y{" G..͕-!|ʫ)RVtq0IQ[2TƠ1{^+ʵu)2,ayRb7: 18/ Qb઼ai) ʓ΃ N oa2(L=$ iּ+{)Y1sqFa("a HNŔK͕@8X(mq&95Y{I$R`֥ٲ^S/ DZKGe6բ;F\s -%!yRx`axZ0`3Zp^9HH@|cZg8ɓ,h#@KehK@1H_4re6բ;F\s -%!yRzJQ[2TƠ1{^+ʵu)2,ayRb7: 0'8/ Qh*azOӠ s" "e9#ƁjzeLE(E!A'7 1"H($FUS, zG8<+x 7 1#ɔDO( DxN[Jɋ7 0<㈃&"y@j#ƚuF,d" "b'3E%h&oaxhi&LrkP-D3Mj]+E:ZBVS-ٶQ>+"'ޚ#E&k[(VЃ opD 8M1#ɢH<DI34ꖜ( 1!$dQzgHiHH"Fa&=L 8 cpb\6l a@o`8ɓ,g)c0֥ٲ^S/ DZKGl.͵hNѩxR+"'ޚ#E&o QhiΩix=!#MYaxA0L2CN$siDyPpӀPZPrcHРk6hBS QWmsiq0 kLӀ 1\obAUm0g$H 4$GLiQyѨe^5񸡧) kҼO8 `gMѿEAjfG F*.j{ dFt 5(4rZJn·ZҵBfڴ^SZJB%FF aIpD 8MiL% JI^S-ΊܧZ:3kƭ0/dev/null 2>&1 if [[ $? == "0" ]];then RGS=$(clvt query resource_group) for rg in $RGS; do ips=$(clvt query resource_group $rg | grep \ SERVICE_LABEL | awk -F= '{ print $2 }') ips=${ips//\"/} for ip in $ips; do [[ "$ip" == "$serviceIP" ]] && { return 0 } done done fi return 1 } ############################################################################# # Function: # getServiceNetwork # # Purpose: # Determine the appropriate network to place the service IP label # on based on adapter count per network per node # # Arguments: # (1) network type in PowerHA SystemMirror # (2) list of nodes to find interfaces for # # Output: # network name to place service IP label on # # Returns: # 0 on success # 1 on failure ############################################################################ function getServiceNetwork { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x serv_addr_type=$1 NODES=$2 validv6Networks="" validv4Networks="" typeset NETWORKS=$(clvt query network | sort -u) typeset validNetworks typeset -A netXnodeCount for network in $NETWORKS do fam=$(clvt query network $network| awk -F= '$1 ~ /NET_FAMILY/ { print $2 }' | sed -e "s/\"//g") if [[ "$fam" == "2" ]] then validv6Networks=$(echo "$network $validv6Networks") else validv4Networks=$(echo "$network $validv4Networks") fi done INTERFACES=$(clvt query interface | sort -u) for interface in $INTERFACES; do node=$(clvt query interface $interface | awk -F= '$1 ~ /NODE/ {print $2 }' | sed -e "s/\"//g") net=$(clvt query interface $interface | awk -F= '$1 ~ /NETWORK/ {print $2 }' | sed -e "s/\"//g") [[ -n $node && -n $net ]] && { typeset -i count=${netXnodeCount[${net}_${node}]} (( count++ )) netXnodeCount[${net}_${node}]=$count } done typeset -i invalid=0 if [[ "$serv_addr_type" == "2" || -z $validv4Networks ]] then for network in $validv6Networks; do invalid=0 for node in $NODES; do [[ ${netXnodeCount[${network}_${node}]} == 0 ]] && { invalid=1 } done [[ $invalid == 0 ]] && { echo $network return 0 } done fi for network in $validv4Networks; do invalid=0 for node in $NODES; do [[ ${netXnodeCount[${network}_${node}]} == 0 ]] && { invalid=1 } done [[ $invalid == 0 ]] && { echo $network return 0 } done return 1 } ####################################################################################################### # # Function : validateNodes # # Purpose : Validate if the Primary and takeover nodes are not repetetive. # # Arguments : PRIMNODE # TAKEOVNODES # # Returns: 0 for Sucess # 1 for Failure # ###################################################################################################### function validateNodes { for node in $2 do [[ $1 == $node ]] && return 1 done return 0 } ############################################################################################# # Function: # getUnusedName # # Purpose: # Obtain an un-used name for an PowerHA SystemMirror component (application, monitor, # resource group, etc) # # Arguments: # (1) by reference - name # (2) type - (as used in clvt command # resource_group | # application | # application_monitor, etc.) # # Output: # output contains the available name # # Returns: # 0 on success # 1 on failure ############################################################################################ function getUnusedName { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset name=$1 typeset type=$2 typeset newname=$name typeset ret typeset -i count=1 clvt query $type $newname >/dev/null 2>&1 ret=$? while [[ $ret == "0" ]]; do (( count++ )) # Give up after 9 attempts if (( $count > 9 )); then echo $name return 1 fi newname=${name:0:31} newname=${newname}${count} clvt query $type $newname >/dev/null 2>&1 ret=$? done echo $newname return 0 } ####################################################################################################### # # Function : validateAppName # # Purpose : Validate if the Application name entered has valid charactes. charecters can be # [a-z][A-z][0-9]_ # # Arguments :APPLICATION_ID # # Returns: 0 for Sucess # 1 for Failure # ###################################################################################################### function validateAppName { appname=$1 [[ -n ${appname//[a-zA-Z0-9_]/} ]] && return 1 return 0 } ##################################################################################################### # # Function : isipv6addr # # Purpose : Finds the address is IPv4 or IPV6 # # Args: # # # Returns : # 0 for success # 1 for failure (when the address is not IPv6) # ####################################################################################################### function isipv6addr { typeset v6addr=${1:-} abc=$(echo $v6addr|awk ' { n=split($1, A, ":") if(n==1) { print n exit } for(i=1; i<=n; i++) { if(length(A[i])) { if(i == n) printf "%s", A[i] else printf "%s:", A[i] } else { if(i==1) s=1 else s = 9-n for(j=1; j<=s; j++) printf "%s:", "0" } } }') if [[ $abc == 1 ]] then return 1 else return 0 fi } ##################################################################################################### # # Function : dir_fs_vg # # Purpose : If the directory is given it finds File system or VG. # dir_fs_vg $dir 0/1 # second argument 0 -- it return the VG # 1 -- it returns file system # # Args: # 1. directory # 2. 0/1 # # Returns : # 0 for success # 1 for failure # ####################################################################################################### function dir_fs_vg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x dir=$1 fs=$dir i=0 count=$(echo $dir|awk '{ n=split($1, A, "/");print n }') count=$(expr $count - 1) while [[ $i < $count ]] do i=$i m_fs=$(lsfs -c|grep $fs |grep -v grep) [[ $? == 0 ]] && { [[ $2 == 1 ]] && { fs_d=$(echo $m_fs|awk -F: '{print $1}') echo $fs_d return 0 } lv=$(echo $m_fs|awk -F: '{print $2}'|awk -F/ '{print $3}') vg=$(clodmget -q "name=$lv" -f parent -n CuDv) echo $vg return 0 } fs=$(echo $fs|cut -d "/" -f -`expr $count - $i`) i=$(expr $i + 1) done return 1 } ##################################################################################################### # # Function : getUnusedappname # # Purpose : obtain an unused application name for the Lotus domino configuration # # Args: # app_name # # Returns : # 0 for success # 1 for failure # ####################################################################################################### function getUnusedappname { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x app_name=$1 app=$(/usr/es/sbin/cluster/utilities/clodmget -q "name=APPLICATION_NAME AND value=$app_name" -f value HACMPsa_metadata 2>/dev/null) if [[ -z $app ]];then echo $app_name return 0 else c=1 while (( $c < 32 )) do new_app=$( echo $app_name"_"$c) app=$(/usr/es/sbin/cluster/utilities/clodmget -q "name=APPLICATION_NAME AND value=$new_app" -f value HACMPsa_metadata 2>/dev/null) [[ -z $app ]] && { echo $new_app return 0 } c=$(expr $c + 1) done fi return 1 }  k%o@&/םa֝a֝a&&2vT./usr/es/sbin/cluster/sa/domino/sbin/domino_xutilsUtili@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/domino/sbin/domino_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/domino/sbin/domino_xutils.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ################################################################### # # Function: listEnv_DOMINO # # Description: This component requires DOMINO_PROG_DIR to be setup # # Arcguments: none # # output: None # ################################################################### function listEnv_DOMINO { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x print_start_tag ENVS print_start_tag ENV "DOMINO_PROG_DIR" "DOMINO_PROG_DIR" "$DOMINO_PROG_DIR" print_end_tag ENV print_end_tag ENVS KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ################################################################### # # Function: listInstances_DOMINO_SERVER # # Description: This is a dummy function # # Arcguments: componentid , nodes # # output: list of instances in xml format # ################################################################### function listInstances_DOMINO_SERVER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" "${0}" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # : No instances for DOMINO_SERVER component : This is a just dummy function # KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" "${0}" } ####################################################################### # # Function: listProps_DOMINO_SERVER # # Description: List properties for the DOMINO_SERVER component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Application Name [dominoserver_powerha38] #* Participating cluster nodes for Lotus domino server [] + #* Lotus domino servers node and data directory path [] #* Domino cluster between the domino servers # ######################################################################## function listProps_DOMINO_SERVER { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset application_name typeset takovernodes_val_list # : Discover possible property values # #/usr/es/sbin/cluster/sa/domino/sbin/cl_lotus_domino_query -n #application_name #dominoserver_powerha38 /usr/es/sbin/cluster/sa/domino/sbin/cl_lotus_domino_query -n | grep -v -E "^#|^$" > /usr/es/sbin/cluster/etc/sa_inst.x IFS=":" read application_name < /usr/es/sbin/cluster/etc/sa_inst.x # : Discover Picklists : Discover the takeover node list # takovernodes_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | tr '\n' ',' ) takovernodes_val_list=${takovernodes_val_list%,} # : Print each property # #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" print_start_tag PROPERTIES # Application Name print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$application_name" "" "" "false" \ "-a" "string" "true" "true" \ "false" "true" "" "lotusdominosa.cat,21,3" print_end_tag PROPERTY # Participating cluster nodes for Lotus domino server print_start_tag PROPERTY "2" "PARTCIPATE_NODES" "Participating cluster nodes for Lotus domino server" "" \ "" "$takovernodes_val_list" "" "false" \ "-n" "string" "true" "true" \ "true" "true" "" "lotusdominosa.cat,21,4" print_end_tag PROPERTY # * Lotus domino servers node and data directory path print_start_tag PROPERTY "3" "DOMINO_SERV_NODE_DIR_PATH" "Lotus domino servers node and data directory path" "" \ "" "" "" "false" \ "-p" "string" "true" "true" \ "false" "true" "" "lotusdominosa.cat,21,5" print_end_tag PROPERTY # Domino cluster between the domino servers print_start_tag PROPERTY "4" "DOMINOCLUSTER_EXIST" "Domino cluster between the domino servers" "" \ "" "y,n" "" "false" \ "-d" "string" "true" "true" \ "false" "true" "" "lotusdominosa.cat,21,6" print_end_tag PROPERTY print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/domino/sbin/cl_lotus_domino_config" print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #------------------- # MAIN STARTS HERE #------------------- # # these functions will be consumed by clvtsa # domino_xutils=( typeset env_func="listEnv_DOMINO" typeset inst_func="listInstances_DOMINO_SERVER" typeset prop_func="listProps_DOMINO_SERVER" ) po k!&od /םaX՝a֝a& 2vT./usr/es/sbin/cluster/sa/domino/config/cl_dominoserver_config.xml_confidd node1,node2 node1,/lotus_server/sd;node2,/lotus_server/data/server1/; n / k"&od /םaX՝a֝a& 2vT./usr/es/sbin/cluster/sa/domino/config/cl_dominoserver_config.xsd_confidd NAN kH"&oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/maxdb/AA k"&oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/maxdb/sbinig/cAA k:"&oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/maxdb/config/cAA kNe%%o@J/םa֝a֝a&J2vT./usr/es/sbin/cluster/sa/maxdb/sbin/cl_maxdb_stopDBer_c@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_maxdb_stopDB.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_maxdb_stopDB.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM . /usr/es/lib/ksh93/func_include . /usr/es/sbin/cluster/sa/maxdb/sbin/DBGlobals . /usr/es/sbin/cluster/sa/maxdb/sbin/DBUtilities #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- [[ "$VERBOSE_LOGGING" == "high" ]] && set -x [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos export ODMDIR } while getopts a: option do case $option in a) # Application ID APPLICATION_ID=$OPTARG ;; *) ;; esac done [[ -z $APPLICATION_ID ]] && { KLIB_SA_logmsg ERROR 60 1 maxdbsa.cat "No Application ID passed. Can't proceed." exit 1 } typeset MAXDB_PROGRAM_PATH="" typeset maxdb_instance_path="" vserverProcess="" MAXDB_PROGRAM_PATH=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "MAXDB_PROGRAM_PATH" {print $2}') [[ -z $MAXDB_PROGRAM_PATH ]] && { KLIB_SA_logmsg ERROR 60 2 maxdbsa.cat "Unable to fetch MAXDB_PROGRAM_PATH from HACMPsa_metadata ODM" exit 1 } # Export required variables related to maxdb instance. setDBEnvs $MAXDB_PROGRAM_PATH #Get the required paramter to check the stop the database instance typeset CONTROL_USER="" CONTROL_USER=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "INSTANCE_DBM_USERID" {print $2}') instanceName=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "INSTANCE" {print $2}') [[ -z $CONTROL_USER || -z $instanceName ]] && { KLIB_SA_logmsg ERROR 60 6 maxdbsa.cat "Instance Credentials are not available in HACMPsa_metadata. Can't monitor instance state." exit 1 } #service_ip=$(getResource $APPLICATION_ID SERVICE_LABEL) #[[ -z $service_ip ]] && { # KLIB_SA_logmsg ERROR 60 7 maxdbsa.cat "Service IP information for the instance is not available. Can't moniotr instance state." # exit 1 #} #Stop the database instance state=$(LC_ALL=C $MAXDB_PROGRAM_PATH/bin/dbmcli -d $instanceName -U $CONTROL_USER db_offline) (( $? != 0 )) && { KLIB_SA_logmsg ERROR 60 11 maxdbsa.cat "Unable to stop. dbmcli command returned a non zero value with info as : \"%1\$s\"" $state exit 1 } || { KLIB_SA_logmsg INFO 60 12 maxdbsa.cat "Attempting to stop instance is Ok. Verifying the state." state=$(LC_ALL=C $MAXDB_PROGRAM_PATH/bin/dbmcli -d $instanceName -U $CONTROL_USER db_state) (( $? != 0 )) && { KLIB_SA_logmsg WARN 60 13 maxdbsa.cat "Unable to verify the Database instance state." exit 0 } || { echo $state | grep "OK State OFFLINE" >/dev/null 2>&1 (( $? != 0 )) && { KLIB_SA_logmsg WARN 60 14 maxdbsa.cat "Unable to verify the Database instance state. It seem to be at a different state : \"%1\$s\"" $state exit 0 } || { KLIB_SA_logmsg INFO 60 15 maxdbsa.cat "Database state is OFFLINE. " KLIB_SA_logmsg INFO 60 16 maxdbsa.cat "Now attempting to stop x_server" #From maxdb version 7.8 onwards, stop the global listner x_server along with instance x_server #if there are no other instance is running. if [[ -n $MAXDB_VERSION ]] && (( $(echo $MAXDB_VERSION| awk -F"." '{print $1$2}') > 77 )) then maxdb_instance_path=$( /sapdb/programs/bin/sdbregview | grep -w "$instanceName" | awk '{print $2}') if [[ -n $maxdb_instance_path ]] then # Stopping specific instance x_server $maxdb_instance_path/bin/x_server stop fi vserverProcess=$(/usr/bin/ps -e -o args 2>/dev/null | grep -w "pgm/vserver" | grep -v "grep") if [[ -z $vserverProcess ]] then # As there are no x_server's are running stopping the global listener x_server $MAXDB_PROGRAM_PATH/bin/x_server stop fi else $MAXDB_PROGRAM_PATH/bin/x_server stop fi exit 0 } } } exit 0 xdb_st kܿ%o@/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/maxdb/sbin/cl_maxdb_startDBr_c@@#!/bin/ksh93 # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_maxdb_startDB.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_maxdb_startDB.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG . /usr/es/lib/ksh93/func_include . /usr/es/sbin/cluster/sa/maxdb/sbin/DBGlobals . /usr/es/sbin/cluster/sa/maxdb/sbin/DBUtilities #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- [[ "$VERBOSE_LOGGING" == "high" ]] && set -x [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos export ODMDIR } while getopts a: option do case $option in a) # Application ID APPLICATION_ID=$OPTARG ;; *) ;; esac done [[ -z $APPLICATION_ID ]] && { KLIB_SA_logmsg ERROR 60 1 maxdbsa.cat "No Application ID passed. Can't proceed." exit 1 } typeset MAXDB_PROGRAM_PATH="" MAXDB_PROGRAM_PATH=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "MAXDB_PROGRAM_PATH" {print $2}') [[ -z $MAXDB_PROGRAM_PATH ]] && { KLIB_SA_logmsg ERROR 60 2 maxdbsa.cat "Unable to fetch MAXDB_PROGRAM_PATH from HACMPsa_metadata ODM" exit 1 } # Export required variables related to maxdb instance. setDBEnvs $MAXDB_PROGRAM_PATH #Get the required paramter to check the start the database instance typeset CONTROL_USER="" CONTROL_USER=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "INSTANCE_DBM_USERID" {print $2}') instanceName=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "INSTANCE" {print $2}') [[ -z $CONTROL_USER || -z $instanceName ]] && { KLIB_SA_logmsg ERROR 60 6 maxdbsa.cat "Instance Credentials are not available in HACMPsa_metadata. Can't monitor instance state." exit 1 } service_ip=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "SERVICE_LABEL" {print $2}') [[ -z $service_ip ]] && { KLIB_SA_logmsg ERROR 60 7 maxdbsa.cat "Service IP information for the instance is not available. Can't moniotr instance state." exit 1 } #Start the x_server first. With out it up and running we can't issue db_online command. KLIB_SA_logmsg INFO 60 17 maxdbsa.cat "Attempting to start x_server" $MAXDB_PROGRAM_PATH/bin/x_server start (( $? == 0 )) && { KLIB_SA_logmsg INFO 60 18 maxdbsa.cat "x_server Started." } || { KLIB_SA_logmsg ERROR 60 19 maxdbsa.cat "Unable to start x_server. Can't proceed with Database start." exit 1 } #Start the database instance state=$(LC_ALL=C $MAXDB_PROGRAM_PATH/bin/dbmcli -n $service_ip -d $instanceName -U $CONTROL_USER db_online) (( $? != 0 )) && { KLIB_SA_logmsg ERROR 60 20 maxdbsa.cat "Unable to start. dbmcli command returned a non zero value with info as : \"%1\$s\"" $state exit 1 } || { KLIB_SA_logmsg INFO 60 21 maxdbsa.cat "Attempting to start instance is Ok. Verifying the state." state=$(LC_ALL=C $MAXDB_PROGRAM_PATH/bin/dbmcli -n $service_ip -d $instanceName -U $CONTROL_USER db_state) (( $? != 0 )) && { KLIB_SA_logmsg WARN 60 22 maxdbsa.cat "Unable to verify the Database instance state." exit 0 } || { echo $state | grep "OK State ONLINE" >/dev/null 2>&1 (( $? != 0 )) && { KLIB_SA_logmsg WARN 60 23 maxdbsa.cat "Unable to verify the Database instance state. It seem to be at a different state : \"%1\$s\"" $state exit 0 } || { KLIB_SA_logmsg INFO 60 24 maxdbsa.cat "Database state is ONLINE. " exit 0 } } } exit 0 S kh%o@r/םa֝a֝a&r2vT./usr/es/sbin/cluster/sa/maxdb/sbin/cl_maxdb_monitorDBc@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_maxdb_monitorDB.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_maxdb_monitorDB.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM . /usr/es/lib/ksh93/func_include . /usr/es/sbin/cluster/sa/maxdb/sbin/DBGlobals . /usr/es/sbin/cluster/sa/maxdb/sbin/DBUtilities #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == "high" ]] then PS4_TIMER=true set -x version='1.5' fi [[ -z $ODMDIR ]] && { ODMDIR=/etc/es/objrepos export ODMDIR } while getopts a: option do case $option in a) # Application ID APPLICATION_ID=$OPTARG ;; *) ;; esac done [[ -z $APPLICATION_ID ]] && { KLIB_SA_logmsg ERROR 60 1 maxdbsa.cat "No Application ID passed. Can't proceed." exit 1 } typeset MAXDB_PROGRAM_PATH="" MAXDB_PROGRAM_PATH=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F= '$1 == "MAXDB_PROGRAM_PATH" {print $2}') [[ -z $MAXDB_PROGRAM_PATH ]] && { KLIB_SA_logmsg ERROR 60 2 maxdbsa.cat "Unable to fetch MAXDB_PROGRAM_PATH from HACMPsa_metadata ODM" exit 1 } # Export required variables related to maxdb instance. setDBEnvs $MAXDB_PROGRAM_PATH $APPLICATION_ID #Check if the x_server is running instanceName=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "INSTANCE" {print $2}') #From maxdb version 7.8 onwards, xserver/vserver path has been changed if [[ -n $MAXDB_VERSION ]] && (( $(echo $MAXDB_VERSION| awk -F"." '{print $1$2}') > 77 )) then # IBM/SAP modification - get instance path from MaxDB registry MAXDB_INSTANCE_PATH=$(${MAXDB_PROGRAM_PATH}/bin/sdbregview | grep $instanceName | awk '{print $2}') vserverPath=$MAXDB_INSTANCE_PATH/pgm/vserver else vserverPath=$MAXDB_PROGRAM_PATH/pgm/vserver fi vserverPath=${vserverPath//\//\\/} vserverProcess=$(/usr/bin/ps -e -o args 2>/dev/null | grep -v grep | grep -w vserver) [[ -z $vserverProcess ]] && { KLIB_SA_logmsg WARN 60 4 maxdbsa.cat "No running x_server process. Attempting to restart." $MAXDB_PROGRAM_PATH/bin/x_server start } echo $vserverProcess | grep $vserverPath >/dev/null 2>&1 (( $? != 0 )) && { KLIB_SA_logmsg WARN 60 4 maxdbsa.cat "No running x_server process. Attempting to restart." $MAXDB_PROGRAM_PATH/bin/x_server start } || { KLIB_SA_logmsg INFO 60 5 maxdbsa.cat "x_server process is running." } #Get the required paramter to check the state of instance typeset CONTROL_USER="" CONTROL_USER=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F= '$1 == "INSTANCE_DBM_USERID" {print $2}') instanceName=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "INSTANCE" {print $2}') [[ -z $CONTROL_USER || -z $instanceName ]] && { KLIB_SA_logmsg ERROR 60 6 maxdbsa.cat "Instance Credentials are not available in HACMPsa_metadata. Can't monitor instance state." exit 1 } service_ip=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "SERVICE_LABEL" {print $2}') [[ -z $service_ip ]] && { KLIB_SA_logmsg ERROR 60 7 maxdbsa.cat "Service IP information for the instance is not available. Can't moniotr instance state." exit 1 } #Check if the database state is ONLINE state=$(LC_ALL=C $MAXDB_PROGRAM_PATH/bin/dbmcli -n $service_ip -d $instanceName -U $CONTROL_USER db_state 2>/dev/null) (( $? != 0 )) && { KLIB_SA_logmsg ERROR 60 8 maxdbsa.cat "dbmcli command returned a non zero value with info as : \"%1\$s\"" $state exit 1 } || { echo $state | grep "OK State ONLINE" >/dev/null 2>&1 (( $? == 0 )) && { KLIB_SA_logmsg INFO 60 9 maxdbsa.cat "Database instance state is ONLINE" exit 0 } || { KLIB_SA_logmsg ERROR 60 10 maxdbsa.cat "Database state is NOT ONLINE. state information found as : \"%1\$s\"" $state exit 1 } } exit 0 # US k%o@o>/םa֝a֝a&o>2vT./usr/es/sbin/cluster/sa/maxdb/sbin/cl_maxdb_discoverc@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_maxdb_discover.sh 1.4 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_maxdb_discover.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM # ## ## NAME: cl_maxdb_discover ## ## PURPOSE: ## Produces the Smart Assistant output suitable for parsing by the ## application discovery clquerysa command. Shows the user what ## types of instances are available on the local node. ## ## ## ARGUMENTS: ## ## -a - provide SMIT modify screen with values for instance ## -p - run discovery ## -i - is installed ## -m - list available databases ## ## list dbs :== [ -m ] ## is installed :== [ -ia] ## run discover :== [ -d -n "" ] ## ## ## OUTPUT: ## -i ## SAP MaxDB Smart Assist:MaxDB_7.6:SAP MaxDB Database:MaxDB_Standby:{0|1} ## ## RETURNS: ## 0 on success ## <0 on failure ## . /usr/es/lib/ksh93/func_include . /usr/es/sbin/cluster/sa/maxdb/sbin/DBGlobals . /usr/es/sbin/cluster/sa/maxdb/sbin/DBUtilities #---------------------------------------------------------------------------- # Function: # isInstalled_DB # # Purpose: # Reports to clquerysa (Application Discovery) whether SAP MaxDB Database instances # are installed and running on the local system. # # Output: # SAP MaxDB Smart Assist:MaxDB:SAP MaxDB Database:MaxDB_Standby:{0|1} # # Returns: # 0 on success # 1 on failure # function isInstalled_DB { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_OUTPUT_CONSOLE=false typeset -A allDBInstances setDBEnvs $MAXDB_PROGRAM_PATH findDBInstances allDBInstances /usr/bin/dspmsg -s 10 maxdbsa.cat 1 "SAP MaxDB Smart Assist" print -n ":MaxDB:" if [[ -n $XUSER ]] then /usr/bin/dspmsg -s 10 maxdbsa.cat 27 "SAP liveCache Hot Standby Database Instance(s)" print -n ":MaxDB_Hot_Standby:" else /usr/bin/dspmsg -s 10 maxdbsa.cat 14 "SAP MaxDB Database Instance(s)" print -n ":MaxDB_Standby:" fi if (( ${#allDBInstances[*]} > 0 )); then KLIB_SA_logmsg INFO 99 99 maxdbsa.cat "Few database instances are found to be running" echo "1" else KLIB_SA_logmsg INFO 99 99 maxdbsa.cat "No database instances are found to be running" echo "0" fi return 0 } #---------------------------------------------------------------------------- # Function: # listDBInstances # # Purpose: # List the available MAXDB instances that are running on the local system. # # Output: # MAXDB@ # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function listDBInstances { [[ "VERBOSE_LOGGING" == "high" ]] && set -x KLIB_OUTPUT_CONSOLE=false typeset nodes=$* typeset -A allDBInstances typeset db [[ -z $LOCALNODENAME ]] && { [[ -z $MAXDB_PROGRAM_PATH ]] && { setDBEnvs $MAXDB_PROGRAM_PATH } findDBInstances allDBInstances [[ -n $XUSER ]] && { for db in ${allDBInstances[*]}; do KLIB_SA_logmsg DEBUG 99 99 maxdbsa.cat "Database instance \"%1\$s\" is running on \"%2\$s\"" $db $LOCALNODENAME #Display the db instance to user only if it is not associated with any application if [[ -z $(clodmget -n -q "name=INSTANCE and value=$db" -f application_id HACMPsa_metadata 2>/dev/null) ]] then echo "$db" fi done } || { for db in ${allDBInstances[*]}; do KLIB_SA_logmsg DEBUG 99 99 maxdbsa.cat "Database instance \"%1\$s\" is running on \"%2\$s\"" $db $LOCALNODENAME #Display the db instance to user only if it is not associated with any application if [[ -z $(clodmget -n -q "name=INSTANCE and value=$db" -f application_id HACMPsa_metadata 2>/dev/null) ]] then echo "$db@$LOCALNODENAME" fi done } return 0 } for node in $nodes; do [[ "$node" == "$LOCALNODENAME" ]] && { [[ -z $MAXDB_PROGRAM_PATH ]] && { setDBEnvs $MAXDB_PROGRAM_PATH } findDBInstances allDBInstances [[ -n $XUSER ]] && { for db in ${allDBInstances[*]}; do KLIB_SA_logmsg DEBUG 99 99 maxdbsa.cat "Database instance \"%1\$s\" is running on \"%2\$s\"" $db $LOCALNODENAME #Display the db instance to user only if it is not associated with any application if [[ -z $(clodmget -n -q "name=INSTANCE and value=$db" -f application_id HACMPsa_metadata 2>/dev/null) ]] then echo "$db" fi done } || { for db in ${allDBInstances[*]}; do KLIB_SA_logmsg DEBUG 99 99 maxdbsa.cat "Database instance \"%1\$s\" is running on \"%2\$s\"" $db $LOCALNODENAME #Display the db instance to user only if it is not associated with any application appid_for_instance=$(clodmget -n -q "name=INSTANCE and value=$db" -f application_id HACMPsa_metadata 2>/dev/null) if [[ -z $(clodmget -n -q "name=INSTANCE and value=$db" -f application_id HACMPsa_metadata 2>/dev/null) ]] then echo "$db@$LOCALNODENAME" fi done } } || { setDBEnvs $MAXDB_PROGRAM_PATH cl_rsh $node "/usr/es/sbin/cluster/sa/maxdb/sbin/cl_maxdb_discover -L -D $MAXDB_PROGRAM_PATH" } done return 0 } #---------------------------------------------------------------------------- # Function: # listProperties_DB # # Purpose: # List the properties associated with a selected SAP MaxDB database # the DB has not yet been defined to the HACMP cluster configuration # # Arguments: # (1) SAP MaxDB Database Instance name # (2) by ref List of Nodes # # Output: # SMIT cmd_to_discover List for SMIT Add Screen for SAP MaxDB # # Returns: # 0 on success # 1 on failure # function listProperties_DB { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset primaryNode=$* [[ $LOCALNODENAME == $primaryNode ]] && { [[ -n $XUSER ]] && { listLocalHotStandbyDBProperties; } || { listLocalDBProperties; } return 0 } || { [[ -n $XUSER ]] && { cl_rsh $primaryNode "/usr/es/sbin/cluster/sa/maxdb/sbin/cl_maxdb_discover -P -I $instanceName -n $primaryNode"; } || { cl_rsh $primaryNode "/usr/es/sbin/cluster/sa/maxdb/sbin/cl_maxdb_discover -p -I $instanceName -n $primaryNode"; } } return 0 } function listLocalDBProperties { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_OUTPUT_CONSOLE=false appName="AppNameFor$instanceName" instanceName=$instanceName primaryNode=$primaryNode takeoverNodes="" adminUser="" adminPwd="" serviceLabel=$(findServiceIP) netMask="" # Fetch the unique list of shared volume group associated with maxdb application sharedVG=$(findVolumeGroups $instanceName | tr ' ' '\n' | sort -u | tr '\n' ' ') network="" echo "#application_name:instance:admin_id:admin_pwd:primary:takeover:service_ip:netmask_prefix_len:shared_vg:network" echo "$appName:$instanceName:$adminUser:$adminPwd:$primaryNode:$takeoverNodes:$serviceLabel:$netMask:$sharedVG:$network" } function listLocalHotStandbyDBProperties { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_OUTPUT_CONSOLE=false appName="AppNameFor$instanceName" instanceName=$instanceName primaryNode=$primaryNode takeoverNodes="" adminUser="" adminPwd="" serviceLabel=$(findHotStandbyServiceIP) netMask="" datavg=$(findDataVolumeGroups $instanceName) logvg=$(findLogVolumeGroups $instanceName) network="" echo "#application_name:instance:admin_id:admin_pwd:primary:takeover:service_ip:netmask_prefix_len:network:datavg:logvg" echo "$appName:$instanceName:$adminUser:$adminPwd:$primaryNode:$takeoverNodes:$serviceLabel:$netMask:$network:$datavg:$logvg" } function modifyProperties { typeset instanceName="" typeset adminUser="" typeset adminPwd="" typeset primary="" typeset takever="" typeset service_ip="" typeset prefix="" typeset shared_vg="" typeset nodes typeset network="" echo "#application_name:instance:admin_id:admin_pwd:primary:takeover:service_ip:netmask_prefix_len:shared_vg:network" instanceName=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "INSTANCE" {print $2}') adminUser=$(clquerysaapp -a $APPLICATION_ID | grep INSTANCE_ADMIN_USERID | awk -F= '{ print $2 }') adminPwd=$(clquerysaapp -a $APPLICATION_ID | grep INSTANCE_ADMIN_PWD | awk -F= '{ print $2 }') nodes=$(getNodes $APPLICATION_ID) echo $nodes | read primary takeover service_ip=$(getResource $APPLICATION_ID SERVICE_LABEL) prefix=$(KLIB_AIX_ODM_get_odm_fields "ip_label=$service_ip" "HACMPadapter" "netmask") vgs=$(getResource $APPLICATION_ID VOLUME_GROUP) network=$(KLIB_AIX_ODM_get_odm_fields "ip_label=$service_ip" "HACMPadapter" "network") echo "$APPLICATION_ID:$instanceName:$adminUser:$adminPwd:$primary:$takeover:$service_ip:$prefix:$vgs:$network" } function modifyHotStandbyProperties { typeset instanceName="" typeset adminUser="" typeset adminPwd="" typeset CONTROL_USER="" typeset CONTROL_PWD="" typeset LC_NFS_FS="" typeset primary="" typeset takever="" typeset service_ip="" typeset prefix="" typeset network="" typeset data_vg="" typeset log_vg="" typeset nodes echo "#application_name:instance:dbm_id:lc_fs:primary:takeover:service_ip:netmask_prefix_len:network:data_vg:log_vg" setDBEnvs $MAXDB_PROGRAM_PATH > /dev/null instanceName=$(clquerysaapp -a $APPLICATION_ID 2>/dev/null | awk -F"=" '$1 == "INSTANCE" {print $2}') adminUser=" " # $(clquerysaapp -a $APPLICATION_ID | grep INSTANCE_ADMIN_USERID | awk -F= '{ print $2 }') adminPwd=" " #$(clquerysaapp -a $APPLICATION_ID | grep INSTANCE_ADMIN_PWD | awk -F= '{ print $2 }') CONTROL_USER=$(clquerysaapp -a $APPLICATION_ID | grep INSTANCE_DBM_USERID | awk -F= '{ print $2 }') CONTROL_PWD=" " #$(clquerysaapp -a $APPLICATION_ID | grep INSTANCE_DBM_PWD | awk -F= '{ print $2 }') LC_NFS_FS=$(clquerysaapp -a $APPLICATION_ID | grep LC_LOCK_DIR | awk -F= '{ print $2 }') nodes=$(getNodes $APPLICATION_ID) echo $nodes | read primary takeover service_ip=$(getResource $APPLICATION_ID SERVICE_LABEL) prefix=$(KLIB_AIX_ODM_get_odm_fields "ip_label=$service_ip" "HACMPadapter" "netmask") network=$(KLIB_AIX_ODM_get_odm_fields "ip_label=$service_ip" "HACMPadapter" "network") datalv=$($DBMCLI_COMMAND -d $instanceName -U $CONTROL_USER param_getvalue DataVolumeName0001 | /usr/bin/awk -F "/dev/r" '{print $2}') data_vg=$(/usr/es/sbin/cluster/utilities/clgetvg -l $datalv) loglv=$($DBMCLI_COMMAND -d $instanceName -U $CONTROL_USER param_getvalue LogVolumeName001 | /usr/bin/awk -F "/dev/r" '{print $2}') log_vg=$(/usr/es/sbin/cluster/utilities/clgetvg -l $loglv) echo "$APPLICATION_ID:$instanceName:$CONTROL_USER:$LC_NFS_FS:$primary:$takeover:$service_ip:$prefix:$network:$data_vg:$log_vg" } #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- typeset instanceName LOCALNODENAME=$(/usr/es/sbin/cluster/utilities/get_local_nodename 2>/dev/null) [[ -z $MAXDB_PROGRAM_PATH ]] && MAXDB_PROGRAM_PATH="" while getopts a:HmMipPn:I:A:LP:D:X option; do case $option in H) # Hot Standby export HOT_STANDY="TRUE" [[ -n $LC_XUSER ]] && { export XUSER=$LC_XUSER ;} || { KLIB_SA_logmsg ERROR 70 64 maxdbsa.cat "LC_XUSER is not exported.Please export LC_XUSER before invoking Smart Assist \n" ;} isInstalled_DB exit $? ;; a) APPLICATION_ID=$OPTARG modifyProperties $APPLICATION_ID exit $? ;; A) APPLICATION_ID=$OPTARG modifyHotStandbyProperties $APPLICATION_ID exit $? ;; M) # Hot Standby export HOT_STANDY=TRUE [[ -n $LC_XUSER ]] && { export XUSER=$LC_XUSER ;} || { KLIB_SA_logmsg ERROR 70 64 maxdbsa.cat "LC_XUSER is not exported.Please export LC_XUSER before invoking Smart Assist \n" ;} CMD="list" ;; m) CMD="list" ;; i) isInstalled_DB exit $? ;; p) CMD="discover" ;; P) #Hot Standby export HOT_STANDBY=TRUE [[ -n $LC_XUSER ]] && { export XUSER=$LC_XUSER ;} || { KLIB_SA_logmsg ERROR 70 64 maxdbsa.cat "LC_XUSER is not exported.Please export LC_XUSER before invoking Smart Assist \n" ;} CMD="discover" ;; n) nodes=$OPTARG nodes=${nodes//\,/ } nodes=${nodes//\:/ } ;; I) instanceName=$OPTARG ;; L) nodes=$LOCALNODENAME CMD="list" ;; D) MAXDB_PROGRAM_PATH=$OPTARG DBMCLI_COMMAND=$MAXDB_PROGRAM_PATH/bin/dbmcli export MAXDB_PROGRAM_PATH DBMCLI_COMMAND ;; X) if [[ ! -s /etc/opt/sdb ]] then /usr/bin/dspmsg -s 30 maxdbsa.cat 26 \"#No MaxDB installation found on this node. Cannot proceed.\" exit 0 fi MAXDB_PROGRAM_PATH=$(LC_ALL=C grep -w IndepPrograms /etc/opt/sdb | cut -d "=" -f2) if [[ -z $MAXDB_PROGRAM_PATH ]] then /usr/bin/dspmsg -s 30 maxdbsa.cat 27 \"#Unable to get the XUSER information, enter XUSER manually.\" exit 0 else LC_ALL=C $MAXDB_PROGRAM_PATH/bin/xuser list | grep -w Key | awk -F":" '{print $2}' exit $? fi ;; *) ;; esac done [[ "$CMD" == "list" ]] && { [[ -z $nodes ]] && { typeset -A list KLIB_HACMP_list_nodes list nodes=${list[*]} } listDBInstances $nodes | sort -u exit 0 } [[ "$CMD" == "discover" ]] && { [[ -n $XUSER ]] && { nodes=$LOCALNODENAME; } || { #It is always ensured from the SMIT that while calling for discovering properties #node name passed with -n will be the owner of the instance [[ -z $nodes ]] && { echo "Node name is not passed" exit 1; } } primaryNode=$nodes listProperties_DB $primaryNode } A lrJ%o@u/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/maxdb/sbin/cl_maxdb_addInstancenfig.xs@@   e -ailnorst"$/_cdgmpu=ACEILNOPRSTbf#&().01BDFGMU\hvwxy'24:HKV[]k{}!%3;?X| ,56>Yq789Wz*+ZQ<@j P4 ̗Qʓ*&2E2d]Mܽd \nn9BJ>BK f 0ÃÃà À>NwKŦ fK(bIDALrB.TQ4D({s"n%]W@oRsum=iP7`O'#0Hqw]^B 9\4(iA("4LiWE+ [XzWZxs{MikF l ҭ:7o$ )'*X$& 3nqu_(|ntJkp8C.L1i 19 \Ƹ.t+7[O.M,iG龉BT^wY*yLxlB𼄣Y*/H@S!)'DrʉD&G !a!!`@o & >(%[r i3HPPEW &i&(ҮVAp L]p8@(vXQ h] ^)"Ӷ/ItB 9\4(i@D@N4Q h]+sBAW &i |P0%kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkX/D(m, /5K'c[/{ZI|h}t(m?:OH]rUс, EորzN'/u^q%?r0=>.V+{#`KZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ^)U0=7VǬG+xAnq% "2bd .(+h?6elqKà1nr4G0 88aɒDa%ʗ~5Gà,GAc L$ ("WpY;ֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ ėU| `Ouloh嗚ҥXyQ{$ZiJ5sI:zx ^&ޫ6rwN^ qw ^A:Lf=E̘J5, Eորfwnޫ7I fٻ+όXyƀ=I+(/;`KZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZְJqA麶RI7Ҵ s. TI$PLpw.vaA].FQ]֛ttWC1ǁtI'tޫ6zz?|d}\ \93 d|d88aɒDa%ʗUIRusI;Ŏŏ˩KOVS({^rޫ7IҴ;>2N;?Ӕm8-kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZIxW V+(m, /5K'tuirG-!(~`nE9zRUiF\--Q)F;W9.0%83C|m?:{pS^@bRUWE6;V`[rA:p-?eW((0%9U'U9/])F|i^ 9q_+l `N^@KҌ ?sn|%kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkXmxW:QXKL h78aLDQ12Ez`viZulqKQqv3k].lf.V+lK;?6R^5*81\sϨןNc?ov>wE\:Y2.^ |¸8iɌ Ғ@agN&[qZګVy,/=)/<00/qg/,[g8{?ͽ񱘹[xB.V!<"\)财.'  `KqQun5%?fټ^F[TQ󜧌J zQ?3C|\O8Xw(]$`O= ۓӳokZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ6RӰ`vliAǃ*`$ʉ(&v8vp;]LK PqLJqð>YQ]ˉ896mkQ5G%սIu80x;}7BviZC70P+j>soQyCNQ7`|01^B >(%[ }_tA(I5T+cIDLQRۢ0/cP'%C K+ gwU=g8s,`KZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZְ'^)U%?AulNr]a16l `NYy*X%?.E}EV'%u)iqwBvi-!(~`nE9l `N>j.ƴ'(.se%9{, ;V'%ӳoYi Ct(S`OĠ9.e ӳoYi Ct(S`KZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ^)U%ձ9uvliAǃ*`$ʉ(&v8vp;]LK <=Zu05r57<-( W+$ҴTX0ӓ?ҀpoK+EIuNIDLQRdH 8 |jx0R ,r7j`^lRK"P ¤E&\l 2$ i50c? Q@"r0)@#NLsPpӳ`3p; ygE6g8{,cZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ8JA, 1szVH7ɍٷ`KriR, =7VEa^Ho@ ۓӳo=E-!(~`nE9l (/J}, Eոր=+ɸ, WA, ?y1y"jᾜe];6l ;yMН1;6l kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ^)U=+$X\vliAǃ*`$ʉ(&v8vp;]LgFֺ]z\,89i@b ^7%敢F81\stJRr]lzK "1I^~!!7ƹ|" g֠Z ,rd\sx\UK\zny_(P]Ӵ` 97-[N3;^m< ^S8qMriqNh ,r9ZF >1d`^qY&>1dPVg,!LFQZ) 0@vpfԝ\1y"j Ŏŏ&7fO[TQ%NKqc`88\-5;?Ӕm6WpXkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkq%_(XLaY"j嗚ҥXӧKҼn5p.?07Jڢ=)D^n+@ ۓikXq, ,<31szW-Ʈ ,O-;6H=f5e]ia}E:RJ)*c !{O79+3)zB.cJE5%k 2QL("H_a^HfS`O`.Vӌ9 =;Lu.cJE5%Y0'Fe0~2iꮮm]v'/u^q%?rEJF9> ֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵa_(M31dqgFֺ]yYQ]ɧ1LJk].ӳoxZuuQ]"Әmkk89 g' 1y"jᚾwI@bYNc IкZ`^m9ǹ4v`|k3 ǽd\s; Ƚ=+W 'F2j%O^T+FɒDa%ʗpfԝ\"=+WN,p ,}N2;0PQ/|$I޽4. /*Vg4}pY.^\-NܘcOwS7i/}.cJ.ZO6OfSwEQDžTW=+E`^m9ǹ4pc?ݱϝxWTzw =+Eg4'!;u_:\pqnH̦f5ktVQ{b0$Y;ӳn^Ix\n2?}E\4WW|ks6䮛ӍWPY/s.7i}FVo3)E=iٷnqYܚ}.cJz Ec2K̦"$H zӳogxð^Y2B$S"\R ;ڮL+վ0$[\80x8&cOog8s,`KZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZְ'^)U%?u\llT&n`KriR, wD]_cuoHF];3.x^9[`O⤄yGt!=gUSoQ{҂k^I'C$",aznz\X|][h `OHE, Wh `OA kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkXmxW:PeIf\ h78aLDQ12Ez`viZuץqgN'qMn޵zK?9yGt!I:޽.xz\ݍ>('t!=gUSr7^,E-hf5qA麯sr.`sIg/,PeEis \Qv,qʗ8B\ll4V0}+@hp86.VرDŽ",qgLqh/ICOv  C0CZosD B\ll4V0}+@hp84T;=ws,`KZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZְ'^)U%?u\llL&n`KriR, wD]_cuo4"!wf7=IuwSrCuuu:'%;w,E, EորĄXyƀkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ׊U|u\llL&n s. TI$PLpw.vaA].FQ]Iuwt^MWWwBdӨNKX Zr?wBΝ^u_8;#}ErA:XH^Y NZnSWtG7)NK Rr]ahB\ll4Nr]`Xb.\qcg/,PeD% ҴboxAIu"4 )9.oO<  2$;5<@g/,PeD% ҴDzg0"0%kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkX/DԺ.o66 's`KriR, Nsuo7zNgMno[OSz|][h `Oau_(XYzXzz˥S`KrUXPsZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ^)UsyU;g4x0qL"gcg Asp; u4tYd^H^Y" Hf mQGr`ylQB"3pN=eW82oIMWRsum<ܦ r"g/,EհNxZn D$Z'1,E[Μn,sPܧou_( @q *qiG+a6m¥c4"!w\m:rKxX%˕.,q  ha4Vpl\cAA散B4 0am$,q  ha4Vpl\cAA散B4 0a(m$,q  ha4V886.VرIjJJ {J)Z̑0RQs?!yg.o66$Xm>4;9 -TiTiZ9dciVSDj^e\Xi 8<sy'lipl\cAA散A)F6e: 0`(NWBa8B\ll4I}+@h;9 -TiTiZ9dciVS^Րřu8B\ll4I}+@h;9 -TiTiZ9dciVS Dj^e\Xi 8<sy'li v,rZ<Ҩ<Ҵr%(ҬDF  1Uh]l6H^Y˛͍>cOh pl\cAA散A)F6e: 0`NY YPAqc`E`KZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZְ'^)U%?q ل嗚ҥX:ޔnxޓGYr[޵srUJ:uӨ ܔJu*;|zޔnl `N>j.ƴ'zA:rVX3^4`O`8fĄXyƀ=I+(/;`KZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZk*QԸ[\llSz s. TI$PLpw.vaA].FQ],x{?6+ck].r8Zu$;xZTa$c$.VtH2rLAzM 4nh]RA)D@bclK "\"̒*Q"DȔ(Dq,/L"r'0(< 0eB!8"P$B'\c \,/O \Xsԋ‚Wp3 .˛͍ܲȽ6u\llT&n^.Vsy2B(W=H[gGH2rLx0rBD2HDD"Px3ܧI.HQ9GȔ*"Dӓ?$|$'g`vKg"`%ʕ2%  <"$LAqf'`̑0eJ@a䄉dR&DB,9Fк!CO AzV|WJ =Y&cyJPW9 !(BҫV"#<Q.T.HHI("dJ"v'cExA pvaA\8{?u^qØcֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ ėU| `O\nnStS46 ل嗚ҥX:ޔnxޓGYr[޵sr}rB^tS474u/A{Q{;)ʔ.UwF(/J|][h `Oau_('8fis$"pIu%9{, ;z.WJ0'Q͹^vkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ6RKհTbf70޵p?K0EeD;;8] PWKѦmkr<=Zu׋ǁQ]H[xt*c3k].$'c R$dcQ\Q.T/ItB H%(z \lmZuK$@yEJ"$H=,r'0(< 0eB!8"P$B'\c \,{@=x[/h+x8s8gA]A7[esyRB(W=x[gPef\"m]A7&HA7J4'|jnmv4WwBEc/;J5_J>Q?82DK*eK$@yEJ"$H>2NA)LiWE+|, JXZTK[Q{W6]1w/>^|jjQ?ov(%[ }_tA(*o6c?ӓ?ĉ"`qh/ItB>  Jv6^gH1Mx"dL`^m9J&ޢ& gX^xaPVĊY`AہF/3HA X?Ӕmy **PG;:^^ƕtR'8-oæi &i*IUJ9[ Lҡy|,ry(4Y$|iWE+(l53J]Sj8g–ƕtR'8-oæi &i*IUJ9[ Lҡy|,ry(4Y$|iWE+(l53J]S 6XrTB9JKƣ 63'|/JPW;0`%w{J)]1w/wۧG `XΏhݱ" "\"0p; !ygD.`RdHӼ Zos@ 3|. J΂勒(TDt)Ψ J&ޢ4r !A@qvvy$Pㇳ"3l4"o;Ld] OWpß=ڏ1dW1WE3C{J)^(/J|][h `Oa̐ jNKHE, Wh `OܣtQ?mςkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵc GR 0J4>BPW8Anq% "2bd .(+h?6;J)Xtx{?u#gD,\q∖dtK\<gn: IкL'cExC'kd"v`p9(YxZN$$Pf8A;B+;[%bӒr%31b$K"XyP-9(YiA3JF⺹" (@AsUJ9[2 T֛\8D A勒(TD8vy2(TDApp; |iWE+|. 6Xx8qLj,aAHQ!3)/ܧ|/|s;F&4>@iJKƠm%QIx 016?u^qØckZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ`N$RKri*bO!iUX^kJ `O'nvm)B_(/Q{W6]1w/>^|jjm-*Q(m8<{m393Y2B$S$PH\485'W8zi*f ,X!iU,p >|/bO%ZU|ŏg|/^|jj4>@h c>!iU?d"`z0LA" ;=W &j I!;u_1'-*QŎŏg|, JJ9[cRҔ!iUiJo!iUG+yģJ)^^y雔G dJ)_+y*e7t;8nv'cExA/ItB> R{O6Z)JG!iU,p ,};f4"!4^ҮWAx sP}RJ ҷ0'5VZXe`KrUXw(]$`Os-kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ0Jw&(ҮW  "\@(*&&HP\‚]v3k].I`G5"lq&H$Dȗ9ZuL7,\jE߁{ADv-7ƹp =cͽz\eNƟJ*`=O1szVEw/+@\%:ˣk?osD&r"g.*D(+u=z\B;AM=ӽ)NvY .HQ8ʐLQ%(+3B"@;S|iWE+(ohy *MSKE)F6p! ƒ/3(#: .HQ9Lj &IEڞ{J)YG+{Es(dRh"_L)J1v"!8P{?, pvaAXAd0=IEhDr@vpfԝ\X/U,EqR^.}KE=gR2ah[}Ƌ9Uҝq kNCN948|T4"!*y D^nHf mQGrm/7U?d"`z0LA" ;L=41G dJ)_Ye3s Ҷ9OJQ6D43(*orA:sܲrt"!8P{?p; ‚?d"`z0LrK<u\485'W8zA:z\.|\XeW!gem4AU'c{ZI|)ebo ^(=ayN8vaAXAd0=IEhDr@vZL=eW:)rqc`c,vNܘcOh/)RFUr喃u_(VQ뇳"F$YELLp9 K "1Iv &HAфVd xi3TpjNp|T\bX\:-!(~`nE9zRW'g"\HI"M9h9+/yҲE_jE, . "`qǖ.HQ9GȔ*"DY .dT⠢?ć&TD"bL(; ‚?d"`z0LrKQ:g9O|/ri*e^i^'9.Ye3s Ҷ9O!(z|vn"3Ɵ\=?gNBv*nYh='UK g,!LFQZ)($W`pUIRus=eW98>uZC70P+j>soQyNrEJuSzq0 H A\4iWN"]ĦlfS'JI'^,G}E;W9.?҃Nrmvxʼn <"$#3EK"r|ԋf(`8ƕtRVř(< DreNJ"XyP"XQ2,<(Y2<($QSKvv,E PDD0D!@C%ʓDTb$PDx"Agb0(< 0eB#{?,g`˛͍JoZ&H$Dzr,/< QvaɒDa%ʗpfԝ\3u⦥*c7zNMT tQ[>jE{Z.Vܲ1r(*[;R-*Q6Y B_(r5h,g,X"̒*QB,gEd0=IEhH\W &j I0I](mx@oriyG b.:*~,p ,},n`V9y D^nUJ9[g8s,`KZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZְ'^)U%?4R)%UJ',֕,N[;+vn` D^np>f4"!4^ҮWAx sP}RJ ҷ0'5VZXe`KrUXw(]$`Os-kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ^)UJ*hliWE+ s. TI$PLpw.vaA].Ft0 H^B >(%[r i3HPs?6\ 2! 8hD@mk TPRJD4" *UD] tʐ"HɐDD3k].2By2Bc?6봘pPq'%8ƕtRVQ]0#Uԭj8%]1N=]mki0 WE3CsPq1WE3Ch{J)YG+lgFֺ]vQ-+cuDUJ9[gFֺ]vWR7,\9EiWLm|iWE+(mZuL:ULۖZ.V#J)DUJ9[c?6봘jeGz'ҮVQ?6봘t,㕔Q] q*ek].I`F[4UE,8eVtѥ]:'ҮVQ?6봘pYee+( (Ǿ4rJMADžu9[τӺIyh9.Uԭj<-KWQznsS:wI/4'%818.^G+y;VJ9elqj]Eb-2V%r喃u_(]Jܲr8.^G+y꺕eo9-Q81,\<-KWQ}*hm-+yYh='UgnnYeeDžu9[Uԭ,喃u_(g3WR4iWNYYDqj]Eb-2Vu+sFtȹeszNU_YLҮfܲ# R+irJ)r+(9eW((r+(<-KWQ|$YYG9-QEYE c?; |'nLlF;6 *LTP"eʊ001Ɵ\?g K "1Iv=+$X\vli"\HI"M78 ;Q{?i?,D@F)(< DreNJ"XyS?H @d^/s/}Yh>ץ$#):;ҔiUnyb#L"Px‚? L$ (#<ƕtRV*Pr0DRciW ^(= ?҂3yb#xd TPPyA4rWsoQyCNc?q]:;W9.NܘcO@&}%֔=r?|ԋτ꺕LULgrg h]+sAz%TWIyh9.|ԋ'cExCp8vaɒDa%ʗxpfԝ\I/4Rr]`N,p ,} ۓirзR*^ʢ>.VrQ{ܲzNӳ\Ɵ\=(nSܲr9Yh[Uԭ-+y,\934.PP^_DO+,G=-+xA;B+,/< ð(+3L& (ȗ.TUIRusGb Ŏŏۡ;rc}>nZ^KT^nS/{ZI|v{Z.VcO?Ӕm7)Yee[]Jܲ9,znhҮWY,|$YYEɟ/ItB> Rx ^7eW(({YYF.V! ƒa`f &HAфVdK*_aQ:ZI|(+x'8>nɍ4Vh[zB/teQ{+yOYh='UiYee[g>{?,NQ3 K "1Iv &HAфVd xi3TpjNp|T\bX\:-!(~`nE9zRW'g"\HI"M, NWN1y"j73)E=iٷn.ƴ;U7^㘹=+gNfۗsR^)̦_Q}W =U͹+觾uU尿-0$:}8ˍ}e/irjQ`OZvm[k@ɦb0bn5p<DLxgg`pa"Q&<@4K"$H ;8L!R೙cFʉ*f?ɍN[OJQ6D40<,^Ty%D$/p?h 燄@AzM 4nh/W}oNu1hl\f뇳"'n )eW=.c<445d0=IEhH\}W &j Io9)%պcZI|\c`c,wYe3s Ҷ9OJQ6DIG,\Z%7Q(< 0= iWE3Ch tDD3G3ҮVQd֨EJʴR""%Kg4rsD(iA(/J^ AU'4,G>Q-+x?\ɂ28WNJoZb0dc ,dqҲZMT3,/< QvaɒDa%ʗi3TpjNqSE ܚo9)Yh='Ub1s,n`V|)%oQyCNg,!LFQZ)($W`p>5G r@&7;um=)D^nәKҷ8yR Ec Gg``|k34.PP^_DOi;\szVD(iA(/J^ AU'ޝ|^iZ*NK )5cOD(iA(/J^ AU'$loK+EIu%&,J.\C( "ry2h "r3&S%Q$(Xs#6RřQ-+g1ayNð(+3L& (ȗ.TQ:g9O|/VINJe^i^'9.Ye3s Ҷ9O!(z|s?d"`z0LA" ;\485'W8LӒН1)۫iJ&ޢu_(\aDžʕ0D0( D;;\1/ItB> R{M.0Kҷк!CO AzV|WJ =[tJRr]lIIк!CO AzV|WJ =[ܲzNIG,\Ɵ\=3L& (+8ji3TpjNq{QS喃u_(/aWNQ%7+c2<I$V喃u_(/Q{tJ'%gPriYm&TM$@yEJ"HGgr& E2EK8IIv,E PҮVQس?B".TLDK2 qK*&\x%3CG E""*`rB#řH#"BE,#řH#""$"8(dRh"\Yd( "XG3I DDqL%"$`Y @SK8dL.v,˙`#Q$"8 .dyDس?,TQ$"8,TQ$"v,$@yEJ"PxL#&H$Dc?aPVrQ.Fs &HAфVdK*_`ppfԝ\3}+s|TM-Q,®q\ܭ`ә &HAфVd Q:>*f?ɍN[OJQ6D40<,^Ty%D$/p?h 燄@AzM 4nh/W}oNu1hl\f& |PJ ҷ4PUI7p;VgJMF& |PJ ҷ4PUI7p喃u_(J9em49 ۪Ji/J]-QՔ_YMd0=IEhH\L=48ILzA:ueS,XQ,&YYGJ9eqf(HR/Kgr& E%Q*P (喋Y dRДTgDKDy$6BC06,L\"L8Uӭ֩س?"Rj34.PP^_DOi;,G>Q-+lgE `O]1"]$@yEJ"HDqxŐrBiWLm|iWE+(m NWMiWLoK+ԜYd0=IEhH\õ\485'W8zi*e^i^'9.,p ,},n`V|)J&ޢu_([g h]+sAz%TtJRr]l]J, . "`qǖ.HQ9GȔ*"DY .dTCbLPaㄊ)3Hy2bgX^x03 $ J+E2%˕/8~5G(%[ }_tA(*Ӹ]oK+EIu%&?^B >(%[ }_tA(*Ӹ]orA:s%r^B >(%[ }_tA(*Ӹ]orA:QVQ}eRj34.PP^_DOi;,G>Q-+l` 4.PP^_DOi;,EeSτr+(4.PP^_DOi;$ҴT[=WR9}pXY2B$S$PHW &j Iou_(/X0x;[TQ󜧥(z|vznhҮWY,j.j/kYw/;/}*։MW}4Za^^Ʒ1BtSZTB%/UzW5}f{_QwVQ}e<۟ 3(94ܲ<\=WR4iWNYYGgR.X2f"`rQ2UB *\q꺕eog"¤$T5*uس?ć&*\#$T4eWb.D̢(D(㏥]:)j32# DPQQJj%7Sf(HR2 *"8B"`@D"*hmUӪ+(X!AF{J)YG+gb*P$PÀس?B*P0HLcř`D<"$P0pgr& .eEJb.D̢H%ɎÀA;B+,/< QvaɒDa%ʗji3TpjNqSE ܚou_(⒋)ZC70P+j>sW!3L& (+8UIRus|T9 Q{ ۓҝm/7Uia[xX\K "1I^~#0Ai5D(iA(/J^ AU'ޝ}.cJz=+zAzM 4nh/W}oNuwI/4'%Uԭj34.PP^_DOi;$ҴT[>Rj34.PP^_DOi;,G>Q-+l` 4.PP^_DOi;,EeSτr+(4к!CO AzV|WJ =[ܲzNU_YO=WR7,?^B >(%[ }_tA(*Ӹ]orA:su+srE?ic?rUSZoU^ZI|(?d"`z0LA" ;5\485'W8zi*cZI|(YbXHf mQGrm/7U꺕eXr+(r8]Jܲ8? $dtLG 3EK"(HRUԭ-+x? <"(5@6,!䉊"I(8 mЄ.`lYȘ2 R{M.%敢Q/ItB> R{M.eW9Yh[`h/ItB> R{M.eW((|$YYE/ItB> R{M.eW9꺕em4=+zÏ +`pa"Q&<@< 2$vv-7ƹ0c?^B >(%[ }_tA(*d͍Iyh9.znsSg%D$}.cJޱس?h2UB28n,Y&H$08u+srEgayNð(+3L& (ȗ.TQ:g9O|/VI^%suZC70P+j>sW!3L& (+8UIRus|T9 Q{ ۓҝm/7Uia[xX\K "1I^~#0Ai5D(iA(/J^ AU'ޝ}.cJz=+zAzM 4nh/W}oNuwI/4'%Uԭj34.PP^_DOi;$ҴT[>Rj34.PP^_DOi;,G>Q-+l` 4.PP^_DOi;,EeSτr+(4.PP^_DOi;,EeSUԭ,D(iA(/J^ AU'ޝ{ZI|)V*ur+(4.PP^_DOi;,G=WR7,\Ɵ\=3L& (+8ji3TpjNq{QSYh='U2t돥JSr3)gN>OuoYh='U2wI/4Rr]f&A .ʼn <"$#3EK"rznsPY2<#=]fD,\q∖d8B".TLDK2 ;g" (@#E DTG3CG E""XG3CG EDEL.HDqǐ*Pr0Dس?0dyBQD;;g2*@"<J DHس2Bq" "\Y2*f?ɍN[OJQ6D40<,^Ty%D$/p?h 燄@AzM 4nh/W}oNu1hl\f& |PJ ҷ4PUI7p;VgV5D(iA(/J^ AU'ޝ|^iZ*NK )5D(iA(/J^ AU'ޝ{ZI| (喋0D(iA(/J^ AU'ޝ{ZI|)J9eYD(iA(/J^ AU'ޝ{ZI|[Z.VD(iA(/J^ AU'ޝ{ZI|)VVQ`z h]+sAz%Tzw Yh='U*/[4UE,к!CO AzV|WJ =[;R-*Q6Y B_(r5h,g*&ʼn <"$"}pX'tS463DB#&H$D tS46Ǿ4r'nJ)tJ'%g,!LFQZ)($W`pW &j Io)$ҼNr]lXjE?^B >(%[ }_tA(*&;VgҮf, . "`qǙ "P*"DY .dTCbLPaㄊ)3Hy2bgX^x03 $ J+E2%˕/8~5G5G r@&7;um=)D^nәKҷ8yR Ec Gg``|k34.PP^_DOi;\szVD(iA(/J^ AU'ޝ|^iZ*NK[g h]+sAz%Tzw Iyh9.|$g h]+sAz%Tzw Yh='U|$Z.V h]+sAz%Tzw Yh='U*/ (VQg h]+sAz%Tzw Yh='UznnYh[g h]+sAz%Tzw Yh='U*/[YYE /ItB> R{M.eW((znhҮWY,?^B >(%[ }_tA(*Ӹ]o6Z)JGQ,к!CO AzV|WJ =[ܲzN]Jܲrк!CO AzV|WJ =[ܲzNU_YO=WR7,D(iA(/J^ AU'ޝ{ZI|)V*ur+(4.PP^_DOi;o Js;BPW%(MZ9-ʉŎŏe?07Jڢ=)D^nܲ1r&YYGҮfܲ8? $dtLG 3EK"(HR㏥] eog"¤$T4%&bř$<1RQ@" 3G2 #>tDv,ȏ(*YB&AEDG}+%޵Nř(T#%K(D(EJʴU_YLDC*&HypҮVQس? $dtI2D0y1`@b DPBFJD!2Ɏf2<@2@2HDI2D0y1`8pgr& .eEJb.D̢H%Ɏ@: ^(=ayNð(+3L& (ȗ.TUIRusr2.^|TǬG_YO[TQ󜧐MEQ 9d0=IEhH\L^PiNܘޔմoQyCNg.cJްJ"\HI"O  MxxD к!CO AzV|WJ =[szVϥa[g h]+sAz%Tzw Iyh9.}*hnj34.PP^_DOi;$ҴT[=WR9к!CO AzV|WJ =[tJRr]lIIк!CO AzV|WJ =[ܲzNIG,\4к!CO AzV|WJ =[ܲzNU_YO>Q,к!CO AzV|WJ =[ܲzNULۖZ.VD(iA(/J^ AU'ޝ{ZI|[Z.VD(iA(/J^ AU'ޝ{ZI|)VVQ`^B >(%[ }_tA(*Ӹ]orA:QVQ}e<]Jѥ]:.Yee& |PJ ҷ4PUI7pmR!iUyJD G9etS46喋(; ‚?d"`z0LrK:LFswd͍*f*ho/tJ9u-!(~`nE9y D^nә &HAфVd Q:>*f?ɍN[OJQ6D40<,^Ty%D$/p?h 燄@AzM 4nh/W}oNu1hl\f& |PJ ҷ4PUI7p;VgҮf?^B >(%[ }_tA(*Ӹ]oK+EIuu+sAzM 4nh/W}oNuwI/4'%τAzM 4nh/W}oNu-QτrEAzM 4nh/W}oNu-QEYE%,AzM 4nh/W}oNu-QUԭ-+lAzM 4nh/W}oNu-Qϥ] em/ItB> R{M.eW((znnYee=4.PP^_DOi;,EeSUԭUӪ"VQg h]+sAz%Tzw Yh='U*/J)r+(4.PP^_DOi;o Js;BPW%(MZ9-ʉtS475řH#"8UJ9[;g(DAʉ(aAC*f?ɍN[OJQ6D431oXqbs. $@$Lj'{AD<<" g h]+sAz%Tzw =+Eg034.PP^_DOi;$ҴT[>tS475D(iA(/J^ AU'ޝ|^iZ*NK[g h]+sAz%Tzw Iyh9.|$g h]+sAz%Tzw Yh='U|$Z.V h]+sAz%Tzw Yh='U*/ (VQg h]+sAz%Tzw Yh='UznnYh[g h]+sAz%Tzw Yh='U}*hm-+lAzM 4nh/W}oNu-QEYEu+sr+(/ItB> R{M.eW((znhҮWY,?^B >(%[ }_tA(*Ӹ]orA:QVQ}e R{M.|-ZU|m-*Q(mBjYm&TM$@yEJ"HEBjYm`,X"̒*QB,gE^2VmLQB"Fcs$"A@=z\9[(+3L& (ȗ.TpW &j I#9xȻzZ*bHF];ʌ9d0=IEhH\L^PiNܘޔմoQyCNg.cJްJ"\HI"O  MxxD к!CO AzV|WJ =[szVϥa[g h]+sAz%Tzw Iyh9.}*hnj34.PP^_DOi;$ҴT[=WR9к!CO AzV|WJ =[tJRr]lIIк!CO AzV|WJ =[ܲzNIG,\4к!CO AzV|WJ =[ܲzNU_YO>Q,к!CO AzV|WJ =[ܲzN]Jܲrк!CO AzV|WJ =[ܲzNULۖZ.VD(iA(/J^ AU'ޝ{ZI|)VVQ`^B >(%[ }_tA(*Ӹ]orA:QVQ}e<]Jѥ]:.Yee& |PJ ҷ4PUI7p喃u_(y,?^B >(%[ }_tA(*Ӹ]o6Z)JG5G r@&7;um=)D^nәKҷ8yR Ec Gg``|k34.PP^_DOi;\szVD(iA(/J^ AU'ޝ|^iZ*NKJ)AzM 4nh/W}oNuwI/4'%Uԭj34.PP^_DOi;$ҴT[>Rj34.PP^_DOi;,G>Q-+l` 4.PP^_DOi;,EeSτr+(4.PP^_DOi;,G=WR7,\4.PP^_DOi;,G>tS46喋& |PJ ҷ4PUI7p喃u_(y꺕eXк!CO AzV|WJ =[ܲzNU_YO=WR4iWNYYE/ItB> R{M.eW((}*hm,к!CO AzV|WJ =[;R-*Q6Y B_(r5h,g*&ʼn <"$"5h,g0dtG,LI(! G9e<DB#&H$D?icq LUL2cf֮xHDybdR^2VԜXƕtRV(; ‚?d"`z0LrKi3TpjNqSE ԺSRsu_1ͽ'UDs?d"`z0LA" ;\485'W8LӒН1)۫iJ&ޢu_(\aDžʕ0D0( D;;\1/ItB> R{M.0Kҷк!CO AzV|WJ =[tJRr]lULg h]+sAz%Tzw Iyh9.znsQ/ItB> R{M.%敢Q/ItB> R{M.eW9Yh[`h/ItB> R{M.eW((|$YYE/ItB> R{M.eW9꺕em/ItB> R{M.eW9,\4.PP^_DOi;,EeSUԭ,4.PP^_DOi;,EeSUԭUӪ"VQg h]+sAz%Tzw Yh='U*/J)r+(4.PP^_DOi;o Js;BPW%(MZ9-ʉ5G(%[ }_tA(*Ӹ]orA:QVQ}e<]Jܲ,z h]+sAz%Tzw Yh='U*/[4UE,к!CO AzV|WJ =[ܲzNU_YO>tS46VQg h]+sAz%Tzw E)B_(|, JJ9[gPs[kɕDybdRgPs[k2D#&H$D?҄գ]`"!$@yEJ"HE4 kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ6;Of7qRbfI/4Z kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ3%4.PP^_DOri) .dq꺕Lx% )5D(iA(/J^ AU'$loNָqHo2 <RE$<㏄=WR93WE3CsP}a3,/< QvaɒDa%ʗu\485'W8)"7|TUL^%suZC70P+j>sW!3L& (+8UIRus|T9 Q{ ۓҝm/7Uia[xX\K "1I^~#0Ai5D(iA(/J^ AU'ޝ}.cJz=+zAzM 4nh/W}oNuwI/4'%ϥ] F& |PJ ҷ4PUI7p;VgV5D(iA(/J^ AU'ޝ|^iZ*NK )5 h]+sAz%Tzw Yh='U*/ (VQg h]+sAz%Tzw Yh='U|$Z.VD(iA(/J^ AU'ޝ{ZI|[Z.VD(iA(/J^ AU'ޝ{ZI|J)rE?^B >(%[ }_tA(*Ӹ]orA:QVQ}e<]Jܲ,z h]+sAz%Tzw Yh='U*/[4UE,к!CO AzV|WJ =[ܲzNU_YO>tS46VQg h]+sAz%Tzw E)B_(|, JJ9[gPs[kɕDybdRgPs[k2D#&H$D?҄գ]`"!$@yEJ"HE4/ItB> RzMkw ȓ"<䇓q3u+s>Rjp!8 ;0 Y2B$S"\R ;5G(%[ }_tA(*Ӹ]oaZ/[>1oY/ItB> R{M.%敢к!CO AzV|WJ =[tJRr]l]J?^B >(%[ }_tA(*Ӹ]oK+EIu%&?^B >(%[ }_tA(*Ӹ]orA:s%r^B >(%[ }_tA(*Ӹ]orA:QVQ}e(%[ }_tA(*Ӹ]orA:su+srE?^B >(%[ }_tA(*Ӹ]orA:sWE3CnYh[g h]+sAz%Tzw Yh='U*/[YYEAzM 4nh/W}oNu-QEYEu+sFtȹeYD(iA(/J^ AU'ޝ{ZI|)Үfܲ,AzM 4nh/W}oNuh(Bҫo!iUG+lJVrmvy2h,X"̒*QB,JVrmvxHDybdRgPs[kPD@" R{ONָqHo=WR9(dqB"$"8ULgX^x03 $ J+E2%˕/8i3TpjNqSE Ւo66K+%,n`V|)%oQyCNg,!LFQZ)($W`p>5G r@&7;um=)D^nәKҷ8yR Ec Gg``|k34.PP^_DOi;\szVD(iA(/J^ AU'ޝ|^iZ*NKJ)AzM 4nh/W}oNuwI/4'%Uԭj34.PP^_DOi;$ҴT[>Rj34.PP^_DOi;,G>Q-+l` 4.PP^_DOi;,EeSτr+(4.PP^_DOi;,G=WR7,\4.PP^_DOi;,G>tS46喋& |PJ ҷ4PUI7p喃u_(y꺕eXк!CO AzV|WJ =[ܲzNU_YO=WR4iWNYYE/ItB> R{M.eW((}*hm,к!CO AzV|WJ =[;R-*Q6Y B_(r5h,g*&ʼn <"$"5h,g0dtG,LI(! G9e<DB#&H$D?ic0Y2B$S$PHpF5G]$6 74<1dW1WE3CxNJ)_Ac-!(~`nqGrBQ6DƕtRV;kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ`N$RKzJu!(zSO%9e洩`^ܝ:.}BoI/4;OYrӬoQy`ylQB"n:UJX|][h `OA `N^@K}EQ͹^vkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵc GzJu!(zSOAǃ*`$ʉ(&v8vp;]LgӒrꋎ<-(QJzik{?, TI*`qDžB TI*`| ^S8qM7鍣'c JpҰ^m T!4D#\AP" & `(Mce$3,/< Qvad0=IEhDr@v]W &j I-9(OJQ6G6XnF4^wt ;u3ɒDa%ʗ\485'W8j:t|TŎŏ\׊U|ŏgtI;;9)Ԅm NJ>s?}pYޫ6d<.zz1wzKjg;i8c?x89>2N<-4.PP^_Ddc?ӓ?;ZoUF2Np; 7%Yl 7%8vaAXAd0=IEhDr@v5GtNc`c,vqqAQ{҂4뇳"*"DqMchIW1sF2N8G +mѬJ DH2;U"(9d0=IEhDr@vmW &j I-9:Ν1c`c,wW)9_(qc,q.cJ 1szVK̦;9)Ԅm NJ>s?igB&@pX!yg3)/IzLm6 fUu JpҰ^m T!4D#\AP" & `(\-zӳoFSDWP'Ga`f &HAфVdK*_`8pfԝ\ӑZ/BoQysocE{AP<}Yh>9d0=IEhDr@vmW &j I-9:Ν1c`c,wW)9_(qc,q.cJ -;6e4J]Uug=U:MA)Q'g>{?,0D0( D%$<.|n ^S8qM(8G +mѬJ DH2;U"(ByˤWJZZR0<( 7UƝK`O*a `N>j.ƴ''/u^q%?댾(/;`KZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֱ׊U|U:MA)Q'?K0EeD;;8] PWKѦ3iITVuE(`_ 5@A"Bh&Gj(*<$ $&""XQ2,<(1ayNð(+3$ J+E2%˕/i3TpjNqi-\eBzRW9r1à(Pm𾋬iL& (ȗ.Tp Q:ŧ#PwYӣ,p ,}76RX,};"XQ2,<(窴R%9*$YigӒrꋎ<.zӒr^ڙÎlZS(< DreNJ"XyP֜EgT]nB".TLDK2 ?d"`z0LrKW &j I0AiVSŎŏٹO"XQ2,<+NWN2cOCEvzӒrꋳƟ\=3@SK<-(QJzik*bXS|sk*QŎXdL.vsZS D|,4 *`qDžB&A(Tvp㶛1 2\4EL.8dL.4r8G +mѬJ DH2;UDPyAQ T!4L" (@c?aPVg &HAфVdK*_`8pfԝ\ӑZ/BoQysocE{AP<}Yh>9,!LFQZ).\|UIRusNFjGLX*bXS|sk*QŎX㳋Mce$VBQ6%D 9>{?,֛tьDžBZoUF2N/IzLm6 g/3ܧI煠& |PJ ҷ4P[ grg4'xMchIaAXAS?ӔmaySð(+3L& (ȗ.Tppfԝ\zRI,p ,}N20==/zP^}pYX"DH=iWLm;c?|.hI(`_ 5@A"Bh&Gj(*<$ $&"2}bRIc?aPVg &HAфVdK*_`8pfԝ\ӑZ/BoQysocE{AP<}Yh>9,!LFQZ).\|UIRusNFjGLXC4c$ W1sF2NzKjg;i8c?}bdqv|.hI< < 3ܗcnS'{WC4c$NL7(89>2N<-4.PP^_Ddc?ӓ?;ϬdvnPp{?,NQ盃ð(+3ܗcgraySð(+3L& (ȗ.Tppfԝ\ⱾFeό,p ,}N20==/zP^}pX#dJ"8r'tc?޳Nc JpҰ^m T!4D#\QEMJ DQAk=+$['kdM9(\3,/< QvaɒDa%ʗu\485'W8j2P=)D^nayazx(O6_EZg,!LFQZ).\|UIRusNFjGLX{?,gR^5r0aJrgƒ 0Nu\ V% R.V%31n爏2=aRbQ.TT‚2=aRbQ.TT"9d0=IEhDr@vmW &j I-9:Ν1c`c,wW)9_(qc,q2P][Zg=U:MA)Q'g>{?,gR^5r0J )@#NLPqvI2P][XX4aH[;v`pAcL ¤E&\c83&TMaRbQ.TTL ¤E&\c A@Ͱ'9t `Kð(+3L& (ȗ.T>5G|drLܧtE<ˁ!'|J}s,`I#xܗb.}EN.V@&-Խuuo|zՐłJ7|qZ6Y B_(r8ƕtRVED v<T& (" 0p; -) TPRJD4" *UD] 94R)%UJxAM2Q]`E ϚX ;0 Y2B$S"\R ;5\485'W8IυZSV ][TQ󜧐MEQ944@c  kn'%o/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/maxdb/sbin/DBGlobalsdd# @(#)30 1.1 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/DBGlobals.sh, hacmp, 61haes_r714 11/28/11 15:14:02 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/DBGlobals.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #This file will be sourced in other files. No executable code in this file. #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- . /usr/es/lib/ksh93/func_include typeset PROGRAM=${0##*/} PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/es/sbin/cluster/sa/sbin:/usr/es/sbin/cluster/utilities:PATH FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm:FPATH_BASE/util:FPATH_BASE/util/list export PATH FPATH [[ -z $INFO_FLAG ]] && INFO_FLAG="true" [[ -z $WARN_FLAG ]] && WARN_FLAG="true" [[ -z $TRACE_FLAG ]] && TRACE_FLAG="true" [[ -z $DEBUG_FLAG ]] && DEBUG_FLAG="true" [[ -z $ERROR_FLAG ]] && ERROR_FLAG="true" KLIB_LOGFILE_SIZE=100000 KLIB_HACMPLOG_ENTRY=maxdbsa.log KLIB_OUTPUT_CONSOLE="true" # End of GLOBALS (8 l(%oY/םa֝a֝a&82vT./usr/es/sbin/cluster/sa/maxdb/sbin/DBUtilities  - aeinost"_cdlpru#$=ABDEILMNOPRfghmv&()./01:CGST[]bxy23FHKUVX\w{|}%'>k !7;`qz+,4568?Y9*@WZj^  ctW|RQyMɡ0lDASz <@(xr@8,ќ 8 (vdDɣL "DB`:om^q<ٽ&qr͛Z*DgooQpYba0(px0(p<3(',}Ɇ{DɣL "L$E |oQ9)WY''fufޣ$.Ù6 ũ:(=i(x(~yKQ5aa`H5G2:00i/J.mmmmmmmmm ĔT80mmmmmmmmmX5y,] IE7,&hb|IR"RL`mmmmmmmmmku0ot'` ̮77NYk9F9;a`lrMmx%7ד5r \90oAz F ̭4e:Vo *I|a1 F BSlvAUTzM 󎳦}-'n+l0k5ք7c|:D]G`mmmmmmmmmkmx%72DI{?Etɚ"`L%L .$<~ל:,-t0IλjSm== P$Ol",2 8X0L0$hdLCE&.{C8;@s) 8O9 !8=U -tvfwt$ME'iD=Gz[?,"T"&  \ň DɣFD@@h{?E{ q"%JDDb 𐞌c,"T"&  \,-J"T9.16y ɡ6z IGD=}Q;l    jc,"T"&  \?8@! *P"dR'HLѣ0v&/&$u:Iv~Ol⶘~p 9%u?0i1bv}=:L2@PușY皰(|%6'itvfwt$ME'iD=Gz[?,"T"&  \ň DɣFD@@h{?E{ q"%JDDb 𐞌c,"T"&  \,-%OHeL^M I IGD=}Q;l    j6c,"T"&  \?8@!Ss&/&$ Ew8E&bQQA|7IE7-)nFSh;Cg$9*F|ڴUDe7,,=6~*H#ZhmZkMy~*Hyɢ#)Tbm͔ܰV+O0  +,M i0hx{?0VEg*P1p±Zy8BǁYbDh*=|6 *"@aろ h"&r\"bct7K@ɒH 0]TDLY3CJ>0HpB 8 `*"&L,J8(iҊ$qbb"@ɔJɚ&RI gQ2fd"H% TDLY3L \ DJ8P$Y3Ltg↌D"ǡAX࣎gMm2dA D,q1BIHdABd$s:ji>qQw3:w8Z}smQAv͛  ;UFY:}gS 9B$PG2ΛSlێ dR$ .BYQJHD 3@$gc i:V{Etd xdс#D "d 4]d!ARXxqش0XJIy9n; Gi/>?lp±Zx bya"(4`Hș (,"T"&  \TD"؉↌D"aX<3@fBfdeDDɚ4C9Q2fd"H% b "("C9S 9B$PTE 0ip±Zy@ " P2H &(L)(8xv57I9<Ў|է$zo,Mi>9v(;Mں,;>KaX<ǎ,@H&M4@&H E0" mmmmmmmmm )0`:e6ٵX72N`ĝ<@D5ΛSlۛuZޒ5l@Dlwpi7Z5r \90oAyUQ6o2< ( iq74OEݪ׬^j1 pTuyڢk` :k ;9.N70͵.6mmmmmmmmmXk)0:e6ٷTW@p,&ɢTBHcyèbHO'O ʮU^ʮp99<h\1`CC@DP 8cmmmmmmmmmX7A6&YZ'i- `+8A$%[l DɣFD@CnAct'! 5sNBB 1>gpVU.0mmmmmmmmmm6 f"ehYgp{?Etɚ"`L%L .$<~ל:,-t0M ث0&/ a!8=&A"pd0k`@r$G|%6f7s:pn [zE'94gEjvf$oQ0;ruf#YTQɆb_,vi,ɳn.3$G|%6fUhKl'8khmedс#D "d x࣋9\rVŚzXklUlKϩCl  $E&  Y$ *P"dR'HLѣ0v&/&$u:jyH&L4Qwf։5H6*6Ib-=U p燳"$v8dс#D "d!0mmmmmmmmmmp:Jo7od$0kWYX '(rڢλYxA9h";) :A IsΖzсB{]P `܂O(u gUt<xs?Q^  5 3ug rFY.ǎ *"G,"T"&  \AX`(L'8E7H-⢸V 3Ayǀ$v:tRha 5y,.8 0 OQ\t㢼^x) :B,Pneu |-.NXvPn+s:F  M(پ0 ` ,qs΄ 0sni]hHA` mmmmmmmmmׂS|a|rޓ &h2h0$$P^p?2rޓgbDQ2h2@P33y#'61qk8Br`9X74鮴$ 0smmmmmmmmmXk)0; #19 cI 4D4J(\I x8u X[ aUt9cI a"(4`Hș (8=t' $E&  Y$ >PC,"T"&  \AX`(Lτ$IDu܎g'9-y90\T\(AHtgΚA$DX0L0$hdL3i,n+QyM`T\Eut$} `?%JDL*Dx~y ɡ6z\y9MgID 3iMg34a1}7k9hbQn8Slvpτgr? rrⶤR q&.IKgQ$*9H,rC#Yɢ|o8 "EYmN0s?ܑu94O,`mmmmmmmmmku0o6mE8Ih5s+d OiimE:YדojRryHJmN` ,qs΄ `5sNBB #0mmmmmmmmmm6 &͠ -ՖgY3DL D!"ĐǏ:PŅNF1]'O|%6'Q^s) ;Bp{?%JDL*D" xvHJmN.%\ͽ⶛Og v%VH3 Y]h3":dc"F,ٵCHDK(ň%V8 &kujn>Ugx(D,MiHjX5 nX5yGjJtϜ6|96ͧ0" mmmmmmmmmn^ MmLN$WVLV2pIJ'ܴ"s?B 8 g8| td. ^oQ{3:9HP g;r8|,cmmmmmmmmmX7A6&YA` ̮7OQ>奵E9vP|λ,тDq899X7 :Mu! ?7,V`mmmmmmmmmkmx%72$D:XPgY3DL D!"ĐǏ:PŅNF *P&BAB.&`1ڤ:zr 3N"$~Xdс#D "d!$vmh]4bdf"Z)9ɠ5ֆ?ܑ-(I0mmmmmmmmmmn^ Mq4Eup]Y0kWYX Qy &3)gVt;8WVY*mOj7y.yМ7𼂪7vsnay711MNj=eIŢ` :k 0ommmmmmmmm^ Mq4Eup]Y`4D4J(\I x8u X[ aUt8=UtHz3c8)%"㎟aUQ6ozc5U^'<13B$4`eϵE݂3&yjmB0"0mmmmmmmmmmn^ Mq/& `+8At>SoStkDIŢuܤ`syvUQ6o5r \90oAyUQ6o2< `Uy0o_)7)@OM.+&圞.9>0ڪj͂N V7[7GaMu! 6mmmmmmmmm^ Mq/,Q]f&SBE !u a!<>3c*NUzcc*NՖ/&eWI q4Eup]YcL-񸓧Q|"λj7OuVts:+&7|0qפwpn՝M3t;8WWQT5ⶱqg>&&à+@]\x!|"2qh[?3VC|1&&4q^ g)c⛤4Q]Њn <~E7CBYn+1N0s?‚Ǐð$%YbM欱xcA9c?ܑ㚲⛤6mmmmmmmmmX7A8t9X72N`ĝ>g]jZoIuIUvqg]UTzM < `܂ P 8[?l`m0\B`#N,(E2s(\ca hbhbM'(2 le+b5<:@8q[Sq. gPV80 ?IRQ 8zG2f54a1y41&@qr leh``hPCz0|?ɚ4<=9&A"pe `` &/&$rs =&&叹lCGH檫?PŴܣlc]E0(p`~!8= *P"dR'HLѣ0vL^M IA;tܣ삪7>    jcIRQ 8zG200v&/&$Q͓>lgl3kDFg\uJ/)nqt+J06پ0 ALѡi'(9w',}8&vUQ6o6=mO>^zbښnOvI|aGk9%پ9vJmN gUt>NXqC#$ ] ɭU^Uzx M`a 'tɚ&RICC0K6Omfupng]gJqYګ8⼴o8͛`7q4Eup]YcL,iş D(8)%"㎟aqh42dA CQw`%Euvu@!.0vhKIδ˨I|a  r;Ovtܟ(3#UTzM mYe(~‚ň D(Ǐð3?%JDL*DxL^M I$7iҊ$Ih!`hPCiGMΔWY'"qh9cu@H{?‚avJ"T94h CL^M IA;tܣӥIؒ]\CGH3TD"N̡p9 >y ɡ6zTsd8Ϲg ,=-)|9vn[u)gjҌ 6og3F"ogq4ӏD;vTQMn+e!) ;Y6nO6&z9)0.9]/z gJ8r9R9)0z9)0.|6 @(+v&A"pe `` hbhbM'(0;v#rS|ax5<:@z9)0.gJ8tݛzE( q< M``P $=3i`w( VϹgzM g(ٹgq3Zy Imfp:+(3TD"N̡p9 >y ɡ6zTsd8Ϲg ,=-)|9vn[u)gjҌ 6og3F"{AXfcXXAg{?tZs,mm k&%o@U#/םa֝a֝a&U#2vT./usr/es/sbin/cluster/sa/maxdb/sbin/cl_maxdb_modifyInstanceg.xs@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_maxdb_modifyInstance.sh 1.2.1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_maxdb_modifyInstance.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM . /usr/es/lib/ksh93/func_include . /usr/es/sbin/cluster/sa/maxdb/sbin/DBGlobals . /usr/es/sbin/cluster/sa/maxdb/sbin/DBUtilities #---------------------------------------------------------------------------- # Function: # validateNodeLists # # Purpose: # Ensure the node lists contain nodes that are unique, primary # and takeover nodes should not have duplicates between the two # lists. # # Arguments: # (1) by reference - primary node # (2) by reference - takeover node list # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function validateNodeLists { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -n primary=$1 typeset -n takeover=$2 typeset -A nodes nodes[$primary]=$primary for node in $takeover; do [[ -n ${nodes[$node]} ]] && { KLIB_SA_logmsg ERROR 40 2 maxdbsa.cat "Node \"%1\$s\" was used more than once in the takeover or primary node lists" $node return 1 } done return 0 } ############################################################################################### # # Function: GenerateRecoveryScript # # Description: Run the recovery script and recover to PIT prior to removal # # Arguments: filenet process engine user name. # # Global Variables: # RECOVERY_CMDS # RECOVERY_ODM # # Returns: 0 if successful # !0 if a failure occurred # ############################################################################################### function GenerateRecoveryScript { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x #typeset user_name=$1 RemoveRecoveryScript typeset group=$(getResourceGroups $APPLICATION_ID) group=${group//\"/} typeset service_label=$(/usr/es/sbin/cluster/utilities/clodmget -q "name=SERVICE_LABEL and group=$group" -f value -d "=" HACMPresource) service_label=${service_label//\"/} typeset application_server=$(KLIB_HACMP_get_appserver $group) echo "odmdelete -o HACMPgroup -q group=$group" >> $RECOVERY_CMDS echo "odmdelete -o HACMPresource -q group=$group" >> $RECOVERY_CMDS echo "odmdelete -o HACMPsa_metadata -q 'application_id=$APPLICATION_NAME'" >> $RECOVERY_CMDS echo "odmdelete -o HACMPserver -q name=$application_server" >> $RECOVERY_CMDS echo "odmdelete -o HACMPadapter -q ip_label=$service_label" >> $RECOVERY_CMDS odmget -q group=$group HACMPgroup >> $RECOVERY_ODM odmget -q group=$group HACMPresource >> $RECOVERY_ODM odmget -q "application_id=$APPLICATION_ID" HACMPsa_metadata >> $RECOVERY_ODM odmget -q "name=$application_server" HACMPserver >> $RECOVERY_ODM odmget -q "ip_label=$service_label" HACMPadapter >> $RECOVERY_ODM } ############################################################################################### # # Function: RunRecoveryScript # # Description: Run the recovery script and recover to PIT prior to removal # # Arguments: na # # Global Variables: # RECOVERY_CMDS # RECOVERY_ODM # # Returns: 0 if successful # !0 if a failure occurred # ############################################################################################### function RunRecoveryScript { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u /usr/bin/ksh93 $RECOVERY_CMDS 2>/dev/null odmadd $RECOVERY_ODM 2>/dev/null } ############################################################################################### # # Function: RemoveRecoveryScript # # Description: Remove the recovery script files from /tmp/ # prior to exiting # # Arguments: na # # Global Variables: # RECOVERY_CMDS # RECOVERY_ODM # # Returns: 0 if successful # !0 if a failure occurred # ############################################################################################### function RemoveRecoveryScript { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u rm -f $RECOVERY_ODM $RECOVERY_CMDS } #---------------------------------------------------------------------------- # Function: # modifyInstance # # Purpose: # To modify the configuration for the SAP MaxDB instance. This will remove # the resources already created and re-creates them. # Arguments: # n/a # # Returns: # exit with 1 on failure #---------------------------------------------------------------------------- function modifyInstance { MAXDB_PROGRAM_PATH=$(clquerysaapp -a $APPLICATION_ID | grep MAXDB_PROGRAM_PATH | awk -F= '{ print $2 }') [[ -z $MAXDB_PROGRAM_PATH ]] && { KLIB_SA_logmsg ERROR 50 1 maxdbsa.cat "Unable to fetch MAXDB_PROGRAM_PATH from HACMPsa_metadata ODM. Can't proceed." exit 1 } GenerateRecoveryScript KLIB_SA_logmsg INFO 50 2 maxdbsa.cat "Deleting the Existing configuration for MaxDB instance \"%1\$s\"" $instanceName removeHAComponents $APPLICATION_ID $instanceName KLIB_SA_logmsg INFO 50 3 maxdbsa.cat "Recreating the configuration." if [[ -z $SERVICE_LABEL_PREFIX ]] then MAXDB_PROGRAM_PATH=$MAXDB_PROGRAM_PATH $MAXDBSA_SBIN/cl_maxdb_addInstance -a $APPLICATION_ID \ -i $instanceName -U $cntrlUser -o $PRINODE -t $TAKENODE -s $SERVICE_LABEL -n $NETWORK -v $VOLUME_GROUPS (( $? != 0 )) && { RunRecoveryScript;exit -1;} else MAXDB_PROGRAM_PATH=$MAXDB_PROGRAM_PATH $MAXDBSA_SBIN/cl_maxdb_addInstance -a $APPLICATION_ID \ -i $instanceName -U $cntrlUser -o $PRINODE -t $TAKENODE -s $SERVICE_LABEL -m $SERVICE_LABEL_PREFIX -n $NETWORK -v $VOLUME_GROUPS (( $? != 0 )) && { RunRecoveryScript;exit -1;} fi } #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- typeset instanceName adminUser adminPwd cntrlUser typeset PRINODE TAKENODE typeset SERVICE_LABEL SERVICE_LABEL_PREFIX typeset VOLUME_GROUPS NETWORK= MAXDBSA_SBIN="/usr/es/sbin/cluster/sa/maxdb/sbin" SMARTASSIST_ID="MaxDB" COMPONENT_ID="MaxDB_Standby" RECOVERY_ODM=/tmp/cl_maxdb_recovery.odm RECOVERY_CMDS=/tmp/cl_maxdb_recovery.cmds [[ -z $MAXDB_PROGRAM_PATH ]] && MAXDB_PROGRAM_PATH="" ALLARGS=$* # # adminUser and adminPwd will be removed in a future release # They are ignored currently # while getopts a:i:u:U:p:o:t:s:v:m:n: option do case $option in a) # Application ID APPLICATION_ID=$OPTARG ;; i) #MaxDB Database Instance Name instanceName=$OPTARG ;; u) #MaxDB Database Instance Administrator user id adminUser=" " ;; U) #MaxDB Database Instance Administrator user id cntrlUser=$OPTARG ;; p) #MaxDB Database Instance Administrator password adminPwd=" " ;; o) # Primary node PRINODE=$OPTARG ;; t) # Takeover node TAKENODE=$OPTARG ;; s) # Service IP labels SERVICE_LABEL=$OPTARG ;; v) # Shared Volume Groups VOLUME_GROUPS=$OPTARG ;; m) # Service IP label prefix/net mask SERVICE_LABEL_PREFIX=$OPTARG ;; n) #Network NETWORK=$OPTARG ;; *) ;; esac done # # Ensure the node lists for primary and takeover # do not contain duplicates (a single node used more than once) # validateNodeLists PRINODE TAKENODE typeset rc=$? # # Function validateNodeLists will report an error, exit if # there were errors. # (( $rc != 0 )) && { KLIB_SA_logmsg ERROR 40 43 maxdbsa.cat "Duplicate node names for Primary and Takeover node list" exit $rc } modifyInstance exit 0  l 1%o@JJ/םa֝a֝a&l,2vT./usr/es/sbin/cluster/sa/maxdb/sbin/maxdb_xutilsfyInsta@@   -et "ainrs_cdlmopu#/AEIPRSbgvxy$'(),.29:BCDLMNOT\fhk*01=GVY[]w%&4FHKUX{|}!3567^ 8<>WqzZ@sp@*D\FF 8d3cdqڭmǵM)!Lw8ban ~DLg,D8v CAEx8DžFf"%HP0B ą(T`T`p a1sH5Gi6{QDbPmMkpPj'@~0<GQ `B%nB- M \Ki i[r1 k|i YPsQ9H&Bąn> YPsQLH[XXL`80`3}roj8s1ŚxQӂx$ ?"9Wj54[&fqG+Q8209qA m7XDSC.o#)ffffffffffffffffffffffffffffffffffec?y#'8Y=cJr#<7U۞c}Rv mWnMaT龖=cյR}DZwN=4Q3,"ѭHv^ժi:'f)Z qi㕓|m>>΍uH\TL0 ,H6 efQ3,"_sz[LdH9u=2B_P1#9%R"d @@@CMz&n-i\ a XXUۓxdkϨ,BG=cJr#7+smym8v9XM Z M%}>=c0<©S"9餢oېwEc?M[Q[]^}GsI#k3333333333333333333333333333333333+Xگ>ܛ]&^}Df87jIXȦa(J%bZh83qhIPs`,YW<$HbG `08 `_&RWJ9[AL_mJ^Шt3Pr]^}E_M ,$.O zhTp;aXV+w<H$H!y9&@:'f\`KB2 *$"] z**!Í/#u>6p,+AXDKEX@Y"Ӝq(Tňfd2X !Ŧm=7.y0JcffffffffffffffffffffffffffffffffffV=c!WnM:.|m>pM g=cJr#7+smym8v9XM gIDOX0Tzi(0QXVV}F>6ןQHi&Ǭ|6Ϸ&Fɾ6ןQ8YS[^s~(Tňfd2X !Ŧm=7u<ŘH%A $p0L\ 8 iٵ*5y餣$fԨM -!Zt3Pr]^}E_M ,$.O zhTp;aXV+w<H$H!y9&@:'fȷ/ШL s E9KmAύ V0!Q!yV7P!Vy>6ik &$qb'"c*DL!qi{DŢ84˞cb$XX^}76R hPHנ\Ǭ~)Q>RܛqWF uGNV,BGIDOX0TIDO 5QXVVu t]ԂjT-sI#kjڊr(=7\QFAݴ6:ic}VޱGRǬx#"ۓ~.ԫy7*(.Ԩ Yo.ԫRQXF,BYsm8`\j ŚhPK"N{pm cpCxAcH9&..EcGi35 ]4(.!q)#>5.>,դ؎(d R6X<Ŏ(d< aH`U*MU 33333333333333333333333333333333333332ɿEѲMH,BG5k &$qb'"c*DL!qi{DŢ9'A1f _~i"C*0 380Cn5|ZjTj>6ХfԨM jTj.=sڕ/6Fsmyڕ$RWڕH9&jTjh&fڕ5.>rͩQVb:r9zjTj6L/6F-P2oOq㨺6ڕH9&ZȺ6ڕ:Bqr.6FaH0r6РXH]8L\q2G %(0EQ"`wp°(4+ _ sM4r.=i zfjO`KzhS>_%QfcK1 S<G$%dTHD@UUB-9ύ_ڢۓyjT"E$ZNyPRI6#mcP2("Ӕ b8R0Ǔ|m>"JbԔFDDEBƠe2"+ xSPڢۓyjUڂNyCj 9(CRI7Gi355.>rlGNR6G#O8R1AXDKEX@Y"ӜqǠ3Prxxp.>oOCQ5E[c禒MJTtZeuG(QtlAXDKEX@]n=5&P)qZ +u  P°РZeuG(Qtlqq7@m8]C@GtOLCA6/H9&ZȺ6 `BB%nA[r.THZX0aAXbRI6qr.@ gj'" =⎉陨v9]v3Pޚ=4*'j'",$, smȺQ z/M {RP°Ь1GS3PzhTN2NEѰXHmLAQ8Q9FP=k|G @Ƀq㨺68RLEѰXHXEEAbyc.=cu ۑu@QǒcKGy+ \7Dgaa ܀ @4 @3l$ΧuPBEFA_M dkϬ]RR}l,iQ`0PHbN",IhPK&^}bJ/l0͗i. 1mƙ3c6$HCmC@v/ (H9k_M dPItn q/ Ѷζ(H;`fb `E$͂4(%A'=Ѹ6ӆƠ͌ƗsflfcKd͑93eZf4 6\lfĚihqHhbR}O@iQǂ1fȠi("_Aϳmm1*0PQvG&.qB%(6 4РEFNF!63_ZNyPflfcKd͑93eZf4 6\lfĚihqHhbR}O@iQǂ2rM]4+]4(R}l,iQfl(T`oM fcK`JrMl RI6qr.c63_%6l0͗i. 13eZflI/ / (H9kx#h&f1>΍uPBEFA;6  I8\`Pflh&f1/6LAm=4*'j'"63c1m#ps3eZf˂i+LpVi šǶC!:B -.>e1VƠe2:6YB l XPi12D3ajY2K,if.>& 9G:l͌Ɨɋ6Ff˂͗i6cLpVi šǶC! _Aϳm1*0PQrI &P@(mƱZy &P xA>΍uPBEFA  ,3`ZMY2@p!Cn5XY2@8c63__Vb:r9{63c63_%&l0͗iڌi6cLpVEX@T=@0)H9u=2F *2Z6 MRP.!< ԃgF :c(T`" X "T4ͅ CV jlf4q2ab8RLEѶlfcKdf pV3_ڌi. 63bM4x8hx$4 bR}O@iQ:6Y AXDKEX@ZA&@s4j|m>/ `_Aϳm1*0PQd/ 8LQ1"&K8qfVe1f XXUۓxe 8YS[^skD9Kro]ԂjT-m8v9XM Z M%}>=c0<©S"܀kkϠצEc?M[Q[ԃqtoLoR PT}$6mzj+xEȣmsF vp駎i9Zj[zL"rK.3Bm6ХfԨM jTj>6ןKͩQڂNyAٵ*5{PI9@ ͩQ.Aٵ*5z9@ ͩQԃl 6Ffj ͩQ7ڕ5.>rͩQVb:r9zjTjm8ɅfԨ`&RWqq7@m8]_mJ^`l-D]_mJ_mLAQ8Q9FRWi(Qtmٵ*5z)2`x._8zfjVqZMJ̵j+zzhP,$.O &.Xd#ȋo"FШBqBE;aXV-V0!Q!yV7P!I.B%rM4stOLC$񷦅3)ɞIl#2 *$"] z**!Í-ڢۓyjT"E$ZNyPRI6#mcP2("Ӕ PmɁS0dǑQAv@Bp,2",XdDDFH<D`!ÚmqtM!b' iL9d0 ,G5 (m7[kϭ$6r5 }v3PP2)&t!Cn4r4N2cE31AXDKEX@Y"Ӝq8;G;6<@ˏ6kMEQm餓xҕ!ƭqq7@m8]V0!Q!yV7P [$DFɔ:'\0;hDw H9<+4(4(1qq7@m8]\}MPir΍uPBEFAL,D 8aȋfJh -mzkϬ]S63_\^}3c63c1\͑93eZf4 6\lfĚihqHh(bR}O@iQ<4РEFNR}l,iQ`0PH"ȋfJh -mzkϬ 90.5lf463c63_%Vl0͗i. 1mƙ3c6$HCmCA@H9u=2F *2ZŚhPK"N{pm cpCxA>΍uPBEFA+6 "(,L\KQFl,DЛO Nנ\MȠi("fcK`KPI9@ ͌i7<6\l+LƗf˂͌ؓM ^-= v/ (H9kx#iA,PH[P_Aϳmm1*0PQvG $ͅqi㕁)Z ɾ6ןXƠ͌Ɨ1qeflfcKdla. 6\cK`Q3eZflI/ Csz[Le $Td<4Р($-lbN/ Ѷζ(H;`fb `‚B"X3ab%4\fx`Jwo($-lbN3c1$L`\dQ/Q#ps3eZf˂ij1l+L͉4aP1>ΧuPBEFA_AlY5_z/ Ѷζ(H;`fQ3AcqY69X1˵r5qKMWޢn}c1%xY C6Ff˂͗i6cLpVi šǶC!/ (H9kx#)$BB Ѷζ(H;`f…I.0(I A6tЦlf4$f gj'"63c1Sf pV3_. 6\lfĚihqHhbR}O@iQǂ1fjhP\Csag[Le $TddH`H3`Gi35 ]4(.!i fj mLAQ8Q9Fٱ/la. 6\cKeZf˂͌ؓM ^-= &/ (H9kq)#>5.>/ Ѷζ(H;`6$TLL2ZeL*63_cP2(́%\}MPirΧuPBEFA_f0jh`&q :6YB l`0 fT`U*MU͌ƗS0q f 9G:l͌ƗE#ps3eZf˂ij1l+L͉4aKsz[Le $Td:6Y AXDKEX@ZA&@s4j|m>v/ `sz[Le $Td"_P1#9%R"d @@@CMz&n-i\ a ZIH-$XZ֓M \Jۑ,-ٵ*5}pM gؿڕH&j[tlR' 4РJvqkk.m X ̵ k23%oc/םaX՝a֝a&c2vT./usr/es/sbin/cluster/sa/maxdb/config/maxdb_config.xmla y k"A4%o/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/maxdb/config/maxdb_config.xsda o k*%o@5 /םa֝a֝a&5 2vT./usr/es/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_cleanDBeg.xs@@#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_cleanDB.sh 1.5 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2011,2012 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 71c643f 43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_cleanDB.sh, 726, 2147A_aha726, May 26 2021 10:50 PM #--------------------------------------------------------------------------- # Global Definitions #--------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/maxdb/sbin/LCutilities . /usr/es/sbin/cluster/sa/maxdb/sbin/DBGlobals . /usr/es/sbin/cluster/sa/maxdb/sbin/DBUtilities #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- [[ "$VERBOSE_LOGGING" == "high" ]] && set -x ### Read global variables and functions typeset -u ACTION=$1 typeset -u SID=$2 typeset -u INSTANCE="AUXILIARY" STEP="LiveCache_${SID}_CLEANUP" setHSDBEnvs $INSTANCE $SID # if we are in a Startup phase [[ "${ACTION}" == "START" ]] && { KLIB_SA_logmsg INFO 60 17 maxdbsa.cat "Attempting to start x_server \n" lc_start_vserver # cleanup MONITOR.* lock information. It is not done with LC10.* locks by intention. rm $LOCKFILE_DIR/MONITOR.* exit 0 } [[ "${ACTION}" == "STOP" ]] && { set +x LCSTATE=$(${LCBIN}/dbmcli -d ${SID} ${CONTROL_LOGIN} db_state | egrep -v "LCENV|OK|State" ) set -x [[ $LCSTATE == "OFFLINE" ]] || { # This script is called when the shared log is withdrawn. # Hence all instances are to be stopped lc_stop_instance || KLIB_SA_logmsg ERROR 70 3 maxdbsa.cat "Unable to stop liveCache Standby instance. Manual intervention required.\n" } KLIB_SA_logmsg ERROR 60 16 maxdbsa.cat "Now attempting to stop x_server" ${LCBIN}/x_server stop exit 0 } KLIB_SA_logmsg ERROR 70 69 maxdbsa.cat "Script invoked with wrong arguements. Supported arguements are START and STOP \n" exit 1 9]? kR+%o@ /םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_monitorDBg.xs@@#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_monitorDB.sh 1.7 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 71c643f 43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_monitorDB.sh, 726, 2147A_aha726, May 26 2021 10:50 PM #--------------------------------------------------------------------------- # Global Definitions #--------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/maxdb/sbin/LCutilities . /usr/es/sbin/cluster/sa/maxdb/sbin/DBGlobals . /usr/es/sbin/cluster/sa/maxdb/sbin/DBUtilities #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] then PS4_TIMER=true set -x version='1.7' fi ### Read global variables and functions typeset -u INSTANCE=$1 typeset -u SID=$2 STEP="LiveCache_${INSTANCE}_MONITOR" ######## # MAIN # ######## setHSDBEnvs $INSTANCE $SID # PART 1 # # if we do not have start permissions from LC10, then we do not activate the monitor [[ $INSTANCE == PRIMARY ]] && [[ -e $LOCKFILE_DIR/MONITOR.startup ]] && rm $LOCKFILE_DIR/MONITOR.startup [[ -e $LOCKFILE_DIR/LC10.start ]] || { KLIB_SA_logmsg INFO 70 8 maxdbsa.cat "Service not started by LC10. Monitor not armed. \n" exit 0 } # PART 2 # # Monitor Service # PROCESS ) this functionality has never been tesed --> disabled after having prooven the service monitor is robust set +x LCSTATE=$(${LCBIN}/dbmcli -d ${SID} ${CONTROL_LOGIN} db_state | egrep -v "LCENV|OK|State" ) set -x [[ $INSTANCE == PRIMARY ]] && [[ $LCSTATE == "ONLINE" ]] && exit 0; [[ $INSTANCE == AUXILIARY ]] && { [[ $LCSTATE == @(STANDBY|ADMIN) ]] && exit 0 sleep ${TIMEOUT[lc_wait_long_in_startup]} set +x LCSTATE=$(${LCBIN}/dbmcli -d ${SID} ${CONTROL_LOGIN} db_state | egrep -v "LCENV|OK|State" ) set -x [[ $LCSTATE == @(STANDBY|ADMIN) ]] && exit 0 } # PART 3 # # Error in service monitoring. Exit with RC1 KLIB_SA_logmsg ERROR 70 12 maxdbsa.cat "Instance \"%1\$s\" \"%2\$s\" is not running. \n" ${INSTANCE} ${SID} exit 1 2> /de l)%o:H/םa֝a֝a&4-2vT./usr/es/sbin/cluster/sa/maxdb/sbin/LCutilities  # aest"$-EORS_cilnoru =ACILNTbdfghmp{}&./0:BDFGKMPU[\]vxy()127Vkw|%,3HY+456;?!8>X'9@W`j 898$=A)I@GE&A0ԂɈnp]wM:'ޒ&e/mmmmmmmm.K͆]iNMayEx[+sz MT$xyag`alg0ր%8ȫ ˲\ vl2،WeEYݦp^~Qp]^ 32@l|'> %heМe7"ec"L9<9 +(/ 89fh& jLXؒDG8>()HK;=RɆ'Z >"MRɐK;PX[4 TcgPz?#7\kA1ѢIPy2 cbJ `" Q,p2b)3ao܌qF h&A%r$P Ņ$AR%ACao܌qƾr3uƴQDu^mmmmmmmm_p2d L_쮴5)PI5R g.fc U$"DTF=7h15.޾v :&mk4o$=A)I@DhѣFD LaCQDhmmmmmmmm׼/6keuM78eO8@ē"Lj y꺺wYdg[qPpgaN /438K<!S1V8HH5LCxL40 j y꺺wYdg[qPpgaN /438K<!S1V8HHFnւbC2dH D  YQ2كR1& bBx; Jpj;ˑaajMr,TgaN /GgHx)%/Vc_TR[iƍP=eI$8VphQ@CNc&($< HrUP=, TRGtCHõp}F8vzd&n0s=4ZTRKL5,X[s7DCTz̶`Ԍ`< bBzEFM8ۦ%ev-YFv2sǔX#h5oX- `H!श%#;ms3vr+inq Ob\r0,3y/ we># L bZ\r+Q^q,PSARCI,M0ԱôHE2,&LX[o7  YQ2كR1& p0X'b:ns6齉m Gm<!SV8B)I`!5Jxeu895ⳑ44oₚ'; Ņp}LA:ƍ$D1eGf HQ!Xf0X'e8961taX9x0Kbr3uƴ@@$4@ŕ-5#aP,VP^ q0ьI A84r6k"DSoL"$8N!̱,,; kQ/м`ZU7ێ:nl6ĸ`Uߍ1٨`y[s3R܌5a|h  "L$SKƉm ;pd(%&DܱUi4k@hFz#()V,-A5&ƍxѷ0yfaxM٨`y\B2Xķ"EMr\nyg 6эv]dmKxѶ+o@B")&&PQAmY6e5 N. 4h"!*=f[0jF2$Ó!X0X'11PmF* I122 Mf[h4&鵛.JqpXƄ'JLM(DE$ 215m 0Ҝlơ)cƍ$D1eGf HDrx$+.j yFNaw5ɘ*Fx7ƍ$AR$9*&XcE mi" Q!P8HagBK4,hqDS(Bj;[@CN 2&IbI&w,UiN 9z"b70ME4 T`;=2dHX[fh& g0r3uƴQD}mmmmmmd"0Bj &A6MEˆ 21mx11X-$_ eiy\ǜe8Evf31OI$ܙMc0db31N__u(&2  i(jmmmmmmkN%m@.K͆ڃ,Lgi8}.K͆󏯾())%U%&DyX0dX[>MQ@D4rQ"#8Dw$BC8 :7Fyɔ}}ec@&SvP g6@D7>P.PKL?;`6"ec"L9<`Fj y⧀qT$*~ :񔋺< .bT$*~۳/HT## ;pbd8ENFnւbuboARI$$P.A12e0;`3j/@B"),I0p8> HbʏY%ML`5e$D1eGf HDrx$+| 3kҜ&e8SP8?b[M4ۭN%V8܌qQ5Nmmmmmm Pd\WU)n$&j /b+8f:k+DHzR(~@LIcn3;#]1E&A0Ԃm%MOmmmmmmmywZ^l6ֹ Z#]1ZSݖq())%U%&DyX0dX[?= HAᄒPSDcA HAᄒŅp}LAtt I,X[ŧ HbʏY0HV@bBzb-hEwgiNvAzki8(U ~Ā"eH2ƍ  YQ2كR1& 0Vj y뙊ൢ1ݜ 8M⧀qT$*~s˶E1V8@LI{r3uƴQDy׼/6k1.qqiNҜ Ɗ g I@IbI&~8vy ?Fz#e'fZn0JÑ7E(<0G܌q}mmmmmmmmm8LS&b-c V m׌ /$&jfr&mx__q!HJ)"<4Gm40(ID$ G{- ˶\ ".kafc۳6A5 L5 1IESmmmmmmmmmӲl/6kE[QXŮqY/6k\Wa񔖔7e}}@ē"L/dev/null) [[ -n $( /usr/es/sbin/cluster/utilities/cllssvcs -n $LOCALNODENAME | grep -w " ${LCSERVER_IP} ") ]] && { #if we chack only for AUXILIARY there is a risk the auxiliary stop monitor is called on the primary node and stop the x_server of the active primary ${LCBIN}/x_server stop KLIB_SA_logmsg INFO 70 89 maxdbsa.cat "The x_server process for LC connectivity has been stopped. The LiveCache Auxiliary is intentionally not stopped. " exit 0 } [[ $INSTANCE == AUXILIARY ]] && { KLIB_SA_logmsg INFO 70 71 maxdbsa.cat "The LiveCache Auxiliary is intentionally not stopped i\n" exit 0 } [[ $INSTANCE == PRIMARY ]] && { rm $LOCKFILE_DIR/MONITOR.* lc_stop_instance && { KLIB_SA_logmsg INFO 70 72 maxdbsa.cat "The LiveCache Primary is successfully stopped. \n" exit 0 } KLIB_SA_logmsg ERROR 70 73 maxdbsa.cat "Unable to stop LiveCache Primary \"%1\$s\".Exiting \n" ${SID} exit 1 # Exit with RC != 0 in case DB stop failed } exit 0  k̝.%o@&/םa֝a֝a&&2vT./usr/es/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_modifyInstance_confi@@#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_modifyInstance.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011,2012 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 71c643f 43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_modifyInstance.sh, 726, 2147A_aha726, May 26 2021 10:50 PM . /usr/es/lib/ksh93/func_include . /usr/es/sbin/cluster/sa/maxdb/sbin/DBGlobals . /usr/es/sbin/cluster/sa/maxdb/sbin/DBUtilities #---------------------------------------------------------------------------- # Function: # validateNodeLists # # Purpose: # Ensure the node lists contain nodes that are unique, primary # and takeover nodes should not have duplicates between the two # lists. # # Arguments: # (1) by reference - primary node # (2) by reference - takeover node list # # Returns: # 0 on success # 1 on failure #---------------------------------------------------------------------------- function validateNodeLists { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset -n primary=$1 typeset -n takeover=$2 typeset -A nodes nodes[$primary]=$primary for node in $takeover; do [[ -n ${nodes[$node]} ]] && { KLIB_SA_logmsg ERROR 40 2 maxdbsa.cat "Node \"%1\$s\" was used more than once in the takeover or primary node lists" $node return 1 } done return 0 } ############################################################################################### # # Function: GenerateRecoveryScript # # Description: Run the recovery script and recover to PIT prior to removal # # Arguments: N/A # # Global Variables: # RECOVERY_CMDS # RECOVERY_ODM # # Returns: 0 if successful # !0 if a failure occurred # ############################################################################################### function GenerateRecoveryScript { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x #typeset user_name=$1 RemoveRecoveryScript LOG_APPLICATION_ID="liveCache_log_"$instanceName MASTER_APPLICATION_ID="liveCache_Primary_"$instanceName STANDBY_APPLICATION_ID="liveCache_Standby_"$instanceName for app in $LOG_APPLICATION_ID $MASTER_APPLICATION_ID $STANDBY_APPLICATION_ID do typeset group=$(/usr/es/sbin/cluster/utilities/clodmget -q "sa_key=$app" -f group -d "=" HACMPgroup) group=${group//\"/} typeset service_label=$(/usr/es/sbin/cluster/utilities/clodmget -q "name=SERVICE_LABEL and group=$group" -f value -d "=" HACMPresource) service_label=${service_label//\"/} typeset application_server=$(KLIB_HACMP_get_appserver $group) echo "odmdelete -o HACMPgroup -q group=$group" >> $RECOVERY_CMDS echo "odmdelete -o HACMPresource -q group=$group" >> $RECOVERY_CMDS echo "odmdelete -o HACMPsa_metadata -q 'application_id=$APPLICATION_NAME'" >> $RECOVERY_CMDS echo "odmdelete -o HACMPserver -q name=$application_server" >> $RECOVERY_CMDS echo "odmdelete -o HACMPadapter -q ip_label=$service_label" >> $RECOVERY_CMDS odmget -q group=$group HACMPgroup >> $RECOVERY_ODM odmget -q group=$group HACMPresource >> $RECOVERY_ODM odmget -q "application_id=$app" HACMPsa_metadata >> $RECOVERY_ODM odmget -q "name=$application_server" HACMPserver >> $RECOVERY_ODM odmget -q "ip_label=$service_label" HACMPadapter >> $RECOVERY_ODM done } ############################################################################################### # # Function: RunRecoveryScript # # Description: Run the recovery script and recover to PIT prior to removal # # Arguments: na # # Global Variables: # RECOVERY_CMDS # RECOVERY_ODM # # Returns: 0 if successful # !0 if a failure occurred # ############################################################################################### function RunRecoveryScript { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u /usr/bin/ksh93 $RECOVERY_CMDS 2>/dev/null odmadd $RECOVERY_ODM 2>/dev/null } ############################################################################################### # # Function: RemoveRecoveryScript # # Description: Remove the recovery script files from /tmp/ # prior to exiting # # Arguments: na # # Global Variables: # RECOVERY_CMDS # RECOVERY_ODM # # Returns: 0 if successful # !0 if a failure occurred # ############################################################################################### function RemoveRecoveryScript { set +u [[ "$VERBOSE_LOGGING" == "high" ]] && set -x set -u rm -f $RECOVERY_ODM $RECOVERY_CMDS } #---------------------------------------------------------------------------- # Function: # modifyInstance # # Purpose: # To modify the configuration for the SAP MaxDB instance. This will remove # the resources already created and re-creates them. # Arguments: # n/a # # Returns: # exit with 1 on failure #---------------------------------------------------------------------------- function modifyInstance { APPLICATION_ID="liveCache_Primary_"$instanceName MAXDB_PROGRAM_PATH=$(clquerysaapp -a $APPLICATION_ID | grep MAXDB_PROGRAM_PATH | awk -F= '{ print $2 }') [[ -z $MAXDB_PROGRAM_PATH ]] && { KLIB_SA_logmsg ERROR 50 1 maxdbsa.cat "Unable to fetch MAXDB_PROGRAM_PATH from HACMPsa_metadata ODM. Can't proceed." exit 1 } GenerateRecoveryScript KLIB_SA_logmsg INFO 50 2 maxdbsa.cat "Deleting the Existing configuration for MaxDB instance \"%1\$s\"" $instanceName removeHSComponents $instanceName KLIB_SA_logmsg INFO 50 3 maxdbsa.cat "Recreating the configuration." export LC_XUSER=$(clquerysaapp -a $APPLICATION_ID | grep LC_XUSER | awk -F= '{ print $2 }') [[ -z $SERVICE_LABEL_PREFIX ]] && { typeset TMP_CTRL_USR=$(echo $CONTROL_USER | tr -d "\-U ") MAXDB_PROGRAM_PATH=$MAXDB_PROGRAM_PATH $MAXDBSA_SBIN/cl_maxdb_addInstance -H -i $instanceName \ -U $TMP_CTRL_USR -F $LC_FS -o $PRINODE -t $TAKENODE -s $SERVICE_LABEL -n $NETWORK -d $data_vg -l $log_vg (( $? != 0 )) && { RunRecoveryScript;exit -1;} } || { typeset TMP_CTRL_USR=$(echo $CONTROL_USER | tr -d "\-U ") MAXDB_PROGRAM_PATH=$MAXDB_PROGRAM_PATH $MAXDBSA_SBIN/cl_maxdb_addInstance -H -i $instanceName \ -U $TMP_CTRL_USR -F $LC_FS -o $PRINODE -t $TAKENODE -s $SERVICE_LABEL -n $NETWORK -m $SERVICE_LABEL_PREFIX -d $data_vg -l $log_vg (( $? != 0 )) && { RunRecoveryScript;exit -1;} } } #---------------------------------------------------------------------------- # Main #---------------------------------------------------------------------------- typeset instanceName adminUser adminPwd typeset PRINODE TAKENODE NETWORK= typeset SERVICE_LABEL SERVICE_LABEL_PREFIX typeset VOLUME_GROUPS MAXDBSA_SBIN="/usr/es/sbin/cluster/sa/maxdb/sbin" SMARTASSIST_ID="MaxDB" COMPONENT_ID="MaxDB_Hot_Standby" RECOVERY_ODM=/tmp/cl_filenet_pe_import_RemoveResources_recovery.odm RECOVERY_CMDS=/tmp/cl_filenet_pe_import_RemoveResources_recovery.cmds [[ -z $MAXDB_PROGRAM_PATH ]] && MAXDB_PROGRAM_PATH="" ALLARGS=$* while getopts a:i:u:p:U:P:F:o:t:s:v:d:l:m:n: option do case $option in a) # Application ID APPLICATION_ID=$OPTARG ;; i) #MaxDB Database Instance Name instanceName=$OPTARG ;; u) #MaxDB Database Instance Administrator user id adminUser=" " ;; p) #MaxDB Database Instance Administrator password adminPwd=" " ;; U) # MaxDB DBM user Id CONTROL_USER="-U ${OPTARG}" ;; P) # MaxDB DBM password CONTROL_PWD=" " ;; F) # GLOBAL NFS Filesystem to be used as Lock Dir LC_FS=$OPTARG ;; o) # Primary node PRINODE=$OPTARG ;; t) # Takeover node [[ -n $TAKENODE ]] && TAKENODE=$OPTARG [[ -z $TAKENODE ]] && TAKENODE="$TAKENODE $OPTARG" ;; s) # Service IP labels SERVICE_LABEL=$OPTARG ;; d) # Data Volume Groups DATA_VOLUME_GROUPS=$OPTARG ;; l) # Log Volume Groups LOG_VOLUME_GROUPS=$OPTARG ;; v) # Shared Volume Groups VOLUME_GROUPS=$OPTARG ;; m) # Service IP label prefix/net mask SERVICE_LABEL_PREFIX=$OPTARG ;; n) #Network NETWORK=$OPTARG ;; *) ;; esac done # # Ensure the node lists for primary and takeover # do not contain duplicates (a single node used more than once) # validateNodeLists PRINODE TAKENODE typeset rc=$? # # Function validateNodeLists will report an error, exit if # there were errors. # (( $rc != 0 )) && { KLIB_SA_logmsg ERROR 40 43 maxdbsa.cat "Duplicate node names for Primary and Takeover node list" exit $rc } modifyInstance exit 0  k0%o@/םa֝a֝a&2vT./usr/es/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_logmonitornce@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_logmonitor.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2012,2015 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)56 1.2 src/43haes/usr/sbin/cluster/sa/maxdb/sbin/cl_hotstandby_logmonitor.sh, hacmp, 61haes_r720, 1522B_hacmp720 5/25/15 19:32:13 eval export $(cllsparam -n $(clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == high ]] then PS4_TIMER=true set -x version='1.2' fi LOG_VGS=$(/usr/es/sbin/cluster/utilities/clodmget -n -q "name=CONCURRENT_VOLUME_GROUP" -f value HACMPresource) for vg in $LOG_VGS do /usr/es/sbin/cluster/events/utils/cl_vgsa_onetime $vg 1>/dev/null 2>&1 done exit 0  ks5%o/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/maxdb/config/maxdb_hs_config.xmlornce NAN k6%o/םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/maxdb/config/maxdb_hs_config.xsdornce gn k6%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/hswizardfig/maAA kƵ6%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/hswizard/sbinaAA kL6%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/hswizard/etcaAA k<6%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/hswizard/configdb_hs_cAA kGV%o@ /םaX՝a֝a& 2vT./usr/es/sbin/cluster/sa/hswizard/sbin/GLOBALSc@@# @(#)05 1.2 src/43haes/usr/sbin/cluster/sa/hswizard/sbin/GLOBALS, hacmp.assist, 61haes_r714 12/15/11 08:42:11 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/hswizard/sbin/GLOBALS 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG #This file will be sourced in other files. No executable code in this file. #---------------------------------------------------------------------------- # Global Definitions #---------------------------------------------------------------------------- ##---- Global Variables ----## [[ -z $INFO_FLAG ]] && INFO_FLAG="true" [[ -z $WARN_FLAG ]] && WARN_FLAG="true" [[ -z $TRACE_FLAG ]] && TRACE_FLAG="true" [[ -z $DEBUG_FLAG ]] && DEBUG_FLAG="true" [[ -z $ERROR_FLAG ]] && ERROR_FLAG="true" KLIB_OUTPUT_CONSOLE="true" KLIB_HACMPLOG_ENTRY="hswizard.log" KLIB_LOGFILE_SIZE=100000 ## MaxDB Variables ## MAXDB_REF_FILE="/etc/opt/sdb" [[ -s $MAXDB_REF_FILE ]] && { MAXDB_PROGRAM_PATH=$(/usr/bin/grep IndepPrograms $MAXDB_REF_FILE | cut -d "=" -f2) MAXDB_INDEP_DATA_PATH=$(/usr/bin/grep IndepData /etc/opt/sdb | cut -d "=" -f2) DBMCLI_COMMAND=$MAXDB_PROGRAM_PATH/bin/dbmcli X_USER="$MAXDB_PROGRAM_PATH/bin/xuser" DEP_PATH=`$DBMCLI_COMMAND db_enum INSTANCENAME $instance PATH | awk '!/OK/ { print $2}'` } || { MAXDB_PROGRAM_PATH=" " DBMCLI_COMMAND=" " MAXDB_INDEP_DATA_PATH="" DEP_PATH="" } LC_CONFIG_FILE="/usr/es/sbin/cluster/sa/hswizard/sbin/lc_param_config" LC_ENV_FILE="/usr/es/sbin/cluster/sa/hswizard/etc/LCHSenv.cfg" ## Library Globals ## HSS_LIB_PATH=/opt/ibm/ibmsap HSS_CONNECTORS_SVC=/opt/ibm/ibmsap/connectors/HSS2145 HSS_CONNECTORS_DS=/opt/ibm/ibmsap/connectors/HSS2107 LIB_DS="libHSSibm2107.so" LIB_SVC="libHSSibm2145.so" PRI_MAPNAME_SVC=" " SEC_MAPNAME_SVC=" " PRI_MAPNAME_DS="3333" SEC_MAPNAME_DS="5555" ## AIX Variables ## DSCLI="/opt/ibm/dscli/dscli" DSCLI_DIR="/opt/ibm/dscli" LSHOSTVOL="/opt/ibm/dscli/bin/lshostvol.sh" ## Cluster Variables ## ## Please Do not Edit ## CL_RSH="/usr/es/sbin/cluster/utilities/cl_rsh" CLI_ON_NODE="/usr/es/sbin/cluster/cspoc/cli_on_node" CLMGR="/usr/es/sbin/cluster/utilities/clmgr" CLLSSITE="/usr/es/sbin/cluster/utilities/cllssite" CL_CW_HARVEST_VG="/usr/es/sbin/cluster/utilities/cl_cw_harvest_vg" CL_GET_MAJOR="/usr/es/sbin/cluster/cspoc/cl_getmajor" CL_MKVG="/usr/es/sbin/cluster/sbin/cl_mkvg" CL_MKLV="/usr/es/sbin/cluster/sbin/cl_mklv" CLLSVG="/usr/es/sbin/cluster/utilities/cllsvg"  lꜴX%o@f/םa֝a֝a&mD2vT./usr/es/sbin/cluster/sa/hswizard/sbin/cl_hotstandby_createInstanceonfi@@   -=aeiorst"$S_cdglmnpu #.ACEFILMOPR\bfhx&()/01BDGHKNTUV[]vw%234:;Xkyz{|}!'56<>,78?W`9Yq*@Zj^7j!;C˦dтS&"TQ1R";⧧nvF#yIV7UXz2u``P0=X1T2&bkʡa cd1E=KeSԬyf׋*Haۇ妤⽷kF[zʇ??$`*"$+f1W۴ٕ̭Z!C48?"zJҨԕ??KԪf[fkj^J榱~-i-V^jF=+~uYZn"%IVזJޱR{*_%JCppyt̚0Xd"#~(xX }` z2cveMnוC-:5T2&bzʧYF*ͯT YD#kNXz2u``g 00v > 0{{{{{{{{{X'QtRYT55+(EYʒpQYDL5"QP*_JeSܫ6YRVY6bqysc3cy+xÆsٚ ʢDtεH8{YO\!B!B!B!B!B!B!B!B!B!8~QTy+q$QY?ڼTm/:3Ufiy\\vk˽;Q.6Y*ŋʶMJ2vk7YsaV(zX/xkJ7pJ՛ p6?ŽkY|!B!B!B!B!B!B!B!B!B!BsʗTĒ%FNl h".LyXQA8C@<23s\ԭ+ML@ '4:֥i_H$L@BpCAjZa6sD)E.o?HB)*X4DLAb%$`PQ$$LˑdсDKd[‚@.C LP"Y-4hmTAH@hqy1YrڔdnvkȆM7YqƢegf6KJLP"Y-4h}TAH@hqy1͝elPh6sFsh@ѱ dсDKdaV٬R`ג~wÝwUՋ !RP4ZXMnBo: wJ.D FM."PEjńڍ;`cz%Ȃ2h%2DTK 2CHkf,Lѣ@n{>DM󒺳* ͠6rAb4`D"*%I[f~vlhbmF#X`d!J/hav5yF LR$eȊ ,# !"e ]0XD(+D$0,/ M")E3F؉NZ$ և{-FNfΌfdٳuj+\\vk˳m4M")E3F؉NZ$ ևڍm6V͠6+sg:*^tg6 mA@@<`dCBl5Jܕ;5VAs.,I0XDA(z%& H!t vbIŒ&kBp{beעYlF `lD- Fi3y~5Y1&o@ mCN\PXn؝6VC@@<`dCw&XziMz,Ŗɚ4` 6Or of8s,mJ2vk7Xtg;5C&͛Q^j峳^]i%Pw&XziMz,Ŗɚ4` >Or of8kim(qlm[9R9chz$LaV٬R`ג~wÝsͯTX Q{D y0(Pe '$.DPXd(TE4 .G} $L-AZ !axHNw&XziMz,Ŗɚ4` 6Or of8s,mJ2vk7Xtg;5C&͛Q^j峳^]i%Pw&XziMz,Ŗɚ4` >Or of8kim(qlm[9R9chzE"(HaV٬R`ג~wÝwٵʒ!RP4fͯTXnBo: skŕ$)%!8=bE5[&hуX 7>D;ZLq_VnLIFnSW,[v'kM*(BDw&XziMz,Ŗɚ4` 6Or of8s,mJ2vk7Xtg;5C&͛Q^j峳^]i%Pw&XziMz,Ŗɚ4` >Or of8kim(qlm[9R9chzE"(HaV٬R`ג~wÝsQ6N(}ۼmI(TE2KƈI"(,Dd *"D#QDH&D([‚@.C LP"Y-4hmTAH@hqy1YrڔdnvkȆM7YqƢegf6KJLP"Y-4h}TAH@hqy1͝elPh6sFsh@ѱ $*DP4 $DЛ R%FNb&w#LPIJIC]D;l!t vbII2c#8HNw&XziMz,Ŗɚ4` 6Or oN֓7WUfѱ9۔zU]ed4 $*DP4 $Dw&XziMz,Ŗɚ4` 6Or of8s,mJ2vk7Xtg;5C&͛Q^j峳^]i%Pw&XziMz,Ŗɚ4` >Or of8kim(qlm[9R9chzE"(HbLHhM['fJт^H;wE<‰ԠR']}DBDS(T=h$r"K&HB)HHr;$& p$',T=4bd0kpb'9hR73Z^Lcs\;5o:3!f\q5pYrٯ.ʹ;,T=4bd0kpb'9hR73Z^Lsgj5[6866x͜lyќP1lm="#$Л R%FNb&w#0w("%SD 'pkRzA @nw ohaD jX*DS^1ef5p@ ꜴH)fęm(qlmv;qAbźWbvY "#$w&XziMz,Ŗɚ4` 6Or of8s,mJ2vk7Xtg;5C&͛Q^j峳^]i%Pw&XziMz,Ŗɚ4` >Or of8kim(qlm[9R9chzE&*FI6nJ+F My G|9;J2vk7Y&  Q{D y0(Pe '$.DPXd(TE4 .G}"I2F 4O|u(٬d p$'M")E3F؉NZ$ և{-FNfΌfdٳuj+\\vk˳m4\(٬dB䠈R']}DBDS(T=h$r"K&HB)HHr;$B$`PQcDRAn 7 Bp{LP"Y-4hmTAH@hqy1YrڔdnvkȆM7YqƢegf6KJ\y*2vk7Yb A7 haD j\!  CBp{`cEJ2vk7Y& hed0(٬dBCA!!8=<D)E.o?HB)*X4DLAb%$`PQ$$LLH h\!8=bE5[&hуX 7>Dc`(٬cyќב 6nEy˖yvmAbE5[&hуX 7>Dc;Qٴѱ;nl[eKΌch!$rHhM['fJт^H;wERIC<˜CQU!-X$۴B^>k$ *"BcDI$ˑ"Y2F M"BDˑ|H$Œ&h-AZ !axHNw*DS^1ef5p8 ꜴH)/&1 .[R7yɳf.8W,lחfiyTeעYlF `D- FkCɎlF+fFm/:3@ 6$\b4j*2vk)5䃿G|9E+v`T=M^MJCQU!-X$V(}ۼmI(TE2KƈI"(,Dd *"D#rIn 7 Bp{2CHkf,Lѣ@n"}S#}57;ejQY9ٯ"6leW-M/9*2CHkf,Lѣ@n"}S#}56v[MhCchwζʗ͠FC.I3 A +rTd)Z0Rk?;ץbhmX"%SFץbhm\!t Vjj(}ۼmI(TE2KƈI"(,Dd *"D#rI$1ph\!8=bE5[&hуX 7>Dc`(٬cyќב 6nEy˖yvmAbE5[&hуX 7>Dc;Qٴѱ;nl[eKΌch! $ICBl5Jܕ;5VAs.X$Ր kұZI!!t E<˜@!kұZIiW7mzV+I6 ץbVCX*DS^1ef5p8 ꜴH)/&1 .[R7yɳf.8W,lחfiyT;"cQYH\4O0w.H\*QY1CA!FNf$%Y dg w!J/hav5yF LR$eȊ ,# !"eミ$ċ wPVHaX^*DS^1ef5p8 ꜴH)/&1 .[R7yɳf.8W,lחfiyT*DS^1ef5p8ꜴH)/&9l@ mCVuTm(66B.I +rTd)Z0Rk?; A(z'Sj7}7wvFp߉*DS^1ef5p@ ꜴH)fęm(qlmv;qAbźWbvY &$\LP"Y-4hmTAH@hqy1YrڔdnvkȆM7YqƢegf6KJ~wÝwEjb5 Q{D y0(Pe '$.DPXd(TE4 .G}54R-AZ !axHNw&XziMz,Ŗɚ4` 6Or of8s,mJ2vk7Xtg;5C&͛Q^j峳^]i%Pw&XziMz,Ŗɚ4` >Or of8kim(qlm[9R9chh؍AVHhM['fJт^H;wEU56hT=M6#PjlYa FT `lvhpPX2&bkʡk]+&bĀ;գ4Y 6#PjlYc#8HNw6ʰwEљ;(+De^p$'LP"Y-4h&Or ofb5VYѱ9fƢs]^U ~wÝwU6YSfASfD)E.o?HB)*X4DLAb%$`PQ$$Lb QJ+ h\!8=bE5[&hуX 7>Dc`(٬cyќב 6nEy˖yvmAbE5[&hуX 7>Dc;Qٴѱ;nl[eKΌch!+d5*QYY +rTd)Z0Rk?;2RlYZICѼASfCQU!-2TSfD*J Ԫ4VVz(pBvv6tod5*uxvhpPX2&bkʡk]+&bĀ;գ4Y Ee!8=WwEљ;(+D[0,/ ;FVZ3';(+De^p$'LP"Y-4hb'9hR70̺zXAԫEe͠6456{#*DLpFJRlYYQUZOw# Pb{I2ELBDSH2wJU*gkVMeLUZNM h\!8=eעYlF `lD- FkCɌnw=˖ԣ'fuFs^D2lٺˎ5 .[;5ٶ^rU*DS^1ef5p8ꜴH)/&9l@ mCVuTm(66 JSREL TUdTًCBl5Jܕ;5VtגwE4.T4&ZICћQUZ FT `;]B^>k$ *"BcDI$ˑ"Y2F M"BDˑ})TjjH!Y5tb0-AZ !axHNwbE5[&hуX 7>Dc`(٬cyќב 6nEy˖yvmAeעYlF `D- FkCɎlF+fFm/:3@ 6RԑS&tb1 +rTd)Z0Rk;"*He,D(z,F!t vD $M2CɖFpLP"Y-4hmTAH@&o8ƫ7&$hCchs) -һh$LйRD,DDc;Qٴѱ;nl[eKΌch!!^ĄkFڲaV٬R`גwERx+inlikh񥠈T=Mcx-5&#xvؐhF ,XCQU!-+YBhil!Y5!^ĄkF6AΦ5YSVv!5P΁ecx; T=Mcx-5&#xvؐhF5 ^,p1 !t  ogD@.M1F!.L\ab4`XPA"S0XX4M29"EH.`ri0,e,dg w DTb &R#K92hbEH U!4$%ES"*E1 2hbEH U!4ZV71;`cx;Dɢ"TFpML@ &iX*;`c{:)$R)HM,dg w2I"T҂LbEH U!4log`bwvD& DTbRKB]LbEH U!4 s+; T=M FhPP{U7nw'˿zLyYBhX*!l% Y} `c7lyYzLΰA+;%Vv "TX"T@ :$JKB]"TPEήwVvA.`Q"%SEcx;0f0f@-; oh,TCwI Qx"%SFVva#`4(`(=͛聂 ([gqѱ/zLΰA Qw FdžΈə"TX\d̑*i( ə"T@ :s2D$%ə"TPEήwD\b;7;գ2sעKZ(}ۼmI(TE2KƈI"(,Dd *"D#j,/EbB5mX-AZ !axHNwbE5[&hуX 7>Dc`(٬cyќב 6nEy˖yvmAeעYlF `D- FkCɎlF+fFm/:3@ 6j,/EbB5mY +rTd)Z0Rk;"Fټ]vעKsgEz,4ZwD*JXil!Y5Z vؐhF ,XCQU!-eg`d [kVMh]$#Z6Ѳ VlF՝a FT `;`c{:%.`ri0,e,dg wXb &R0"ɦ"hFA,`E1sLDсc)c#8HKS0XX4M2YΉc)HM,dg wXbRJ"XbRKEz, A,`E1 !.L@BiA貳1VfA6#Pn2b Tkŕ%fͯTX}Vyx"X`dp>+|ASF &XQH mybIŒ&h"j,TBVmUwJ2E$1BFץbhmWTC҂,YY>+|$ $DbII2;Gڥo%O0}VrW("y58pjkұZIX#kұZI!TNҨԔHrXy2[Fu%M$j5EbMFu0Y3$JI>+}z,4%.`ri0,e$#RՍ4"EH.`ri0,e$#R̚*c)HM("XbRI>+|ɢ"T҂&ML@ &}VD& DTbRJLbEH U!4{{{{{{{{{{pR,Hh'pfh-ZZ\YWKjZ`~F6ę>~jWn%m_Ypm/:3h,Eɚ04*("hǐFpҾwi-7]DY1UH)0@ZZ@E=KeSԬyf׋*Ky\ 6YR[1b@Nmn7q"}Sy|,3[1b@Nmn7q"乴 %Ԁ`A۴$)iWj6*dۍsFI\ 3EemyN!͈4V@Nmn7q_ɍQvؒm M[>p!X)Qvؒm M[9M&U^,-.*!VVfz`Pk/*,&9~ _$LXmn!EeLkұZ]QW*g6ɷzC۴%dۇ$C6ɷ}TRFC *MIeL6zj%i+|@?3lpQfjFs.zUKHtg[qePWQyɛ؁Ms8H@B{QmqU{ӛ3ygW)F Vv=Ig``p< =Ig`` @#dۇ=3Yvh%K^,pFNfΌApE.B)Ap{{{{{{{{{pfˇ{{{{{{{{{{pkR$r"K&HB)HHr0@1T2V ɲezsF)FN`:5U5(٬@AD\ L(py dg +> h Ldg ۴VM")EQB0@nL:5TVgyyDLjDbTʧ:5T3lVZn ֕ 0H$% H$HPpM-l \%J^teFѣW˿ʅ> F9K*ͯT)$eIAEHpj6mxhf׋*Kw^C@`  ;^''#ieYʒȪٝXޕ۴]>+}&ڕD N0^''#ieYʒȪٝXޕ۴XnU>+}&ڕDȦdA N^=+ұZ[vyX0dTN*JVݥ]t2E$1BDR&] 8s!~ Œ&iÿ}Vyx DEY .[;5坥q'#iuڭo9Y͆[$J*DS^1e `؉NZ$ J*͕Yrٯ-J0!+gi]J2vk7Xtd;78x%YI\-7}{ǏtJ߻ &.A70tjM݆VuFp Vuv =aUAJb50nI:.[ LT,N#vMY2JZb-X[ &*\e ' &V!F}V,Y"fٵʒS$L h%SE++a 1T0 3p~8@! jf! #R٢^v}V T٢<=Mh0PÓd2WBYC`-3w`` #Rn7M+(uajQ(K TEeE"tJߵʧVlFJRlY[aڡ&dF ڬپpD[Fuk׀g[/;_q`(=k6p(0$4MVl"w8s4D5pBFpT"#$Br>+|XMXG0#RċLT@444TbGڥo"@VsM")EQB08ngѪՍص\-7t!B!B!B!B!B!B!B!B!B!AV7-iW*MB!B!B!B!B!B!B!B!B!B<~/o-++8LP"Y-(cmu=dU o/o6V(e Ey6hL01\ɒ0(PwrFA]I Ey1)i M")EQB08nQ3Ln`R F^jelH"ͲՍLjZnՍ䚳2,T=4beE p]DY1UH) y͕" C6V7gQfy*ͯTXU~EV&zd⽜&XziMz,Ŗʊ1p0Q3Ln`R F^jelO٬cyђͲՍ>ͯT<~/o-yI' *DS^1e `pQ3Ln`R F^jelV5I @m5o$י$sQ^j*MIeLpW55%6f,IEy^"Rk^Le7ڤٻՍP* s!B!B!B!B!B!B!B!B!B!)]ڽ>!B!B!B!B!B!B!B!B!B!9eעYlC75L:5TWo6V"g^cR%KU8 ҕk6uTcRF`R"*#ˑ8m!Y580f@wt )KDH$@>l @з:gqQ$ƥ[NF4447pîzLpä}VI&X|DPAÇ:Gڥo$e(z% AFvHpfÇHT&\B%&\B%ɦ }VD&\B%L"KLA'*%FNdי$wBI͙5ltղgTs@.H-Ç`cFnI1Vӣ80 F\8p랓.8pj$I*,T=4 ÇI{IÇ#RĒI2CT=MCH\AFvHpfjdTˑ2(D8#6mxTCW:GڥoLeș"\6YR@*a`Ç`cDAb%$`PQV匌.8peT4cVRLiYg:KN8peT4cJ8pfTdMyI'*8l^6 # # Arguments: # step number at which wizard failed # # Returns: # Does not return # #=============================================================================== #--------------------------------------------------------------------------- # Global Definitions #--------------------------------------------------------------------------- . /usr/es/sbin/cluster/sa/hswizard/sbin/GLOBALS . /usr/es/sbin/cluster/sa/hswizard/sbin/validate ##---- Input ----## step=$1 KLIB_SA_logmsg INFO 50 1 lc_hs_wizard.cat "Rolling back partial configuration \n" ##---- Derived Input ----# index="" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x while (( $step >= 1 )) do case $step in 4) # parameter setting for DB has failed. drop databse and do all the steps in order. KLIB_SA_logmsg INFO 50 2 lc_hs_wizard.cat "Rolling back Hot Standby paramters. \n" node=$primary Exec_CMD "$DBMCLI_COMMAND -d $instance $CONTROL_LOGIN hss_removestandby $standby" for node in $takeover_nodes do print $takeover_nodes | read standby rest node=$standby Exec_CMD "$DBMCLI_COMMAND -d $instance $CONTROL_LOGIN db_offline" #Exec_CMD "$DBMCLI_COMMAND -d $instance $CONTROL_LOGIN db_drop" #THIS WILL DELETE THE XUSER on the standby As we hav in any case work to do leave this out --> test! for DATA_VG_NAME in $datavglist do datavg=$($CL_RSH $node "/usr/sbin/lsvg" | /usr/bin/grep $DATA_VG_NAME) [[ -z "$datavg" ]] && { continue;} || { Exec_CMD "varyoffvg $datavg;exportvg $datavg;rm -rf /dev/$DATA_VG_NAME"; (( $? != 0 )) && { KLIB_SA_logmsg ERROR 50 16 "Unable to clear \"%1\$s\" on \"%2\$s\" \n"$datavg $node ; }; } done # Remove LVs for lv in ${data_lv_names} do Exec_CMD "rm -rf /dev/r$lv;"; (( $? != 0 )) && { KLIB_SA_logmsg ERROR 50 16 "Unable to clear \"%1\$s\" on \"%2\$s\" \n" $lv $node ; }; done done # Remove the temporary user created for node in $(/usr/es/sbin/cluster/utilities/clmgr query nodes) do Exec_CMD "rmuser -p $user" >/dev/null 2>&1 done ;; 3) index=$step ;; 1) # Unable to find the source and target values.May be provided HMC is not the one which has not got disks for FC. case $HMC_TYPE in DS8000) [[ $index == 3 ]] && { DSCLIcmd="$DSCLI -user $UID -passwd $PASSWORD -hmc1 $HMC " #SECURITY EXPOSURE (just example) # Flash Copy didnt complete in time .. remove FC consistency groups and mappings KLIB_SA_logmsg INFO 50 3 lc_hs_wizard.cat "Removing Flash Copy consistency and associated Flash Copy mappings \n" node=$primary Exec_CMD "/usr/bin/su - $MAXDB_USER \"-c \ $HSS_CONNECTORS_DS/rsRemoveTask.sh -P $DSCLI_DIR -u $UID -p $PASSWORD -s $HMC -d $STORAGE_ID -S $PRI_MAPNAME $PAIRS\" "; } ;; SVC) [[ $index == 3 ]] && { KLIB_SA_logmsg INFO 50 4 lc_hs_wizard.cat "Removing Flash Copy consistency groups and Flash copy mappings. \n" node=$primary # Add code to remove FCmappings Exec_CMD "/usr/bin/su - $MAXDB_USER \" -c \ $HSS_CONNECTORS_SVC/rsRemoveTask.sh -v -u admin -s $HMC $PRI_MAPNAME\" " >/dev/null 2>&1 Exec_CMD "/usr/bin/su - $MAXDB_USER \" -c \ ssh admin@$HMC svctask rmfcconsistgrp $PRI_MAPNAME\" " >/dev/null 2>&1 for disk in $source_disks do $CLI_ON_NODE -N $primary "chdev -l $disk -a pv=yes" >/dev/null 2>&1 done Exec_CMD "/usr/sbin/cfgmgr" >/dev/null 2>&1; } ;; *) KLIB_SA_logmsg ERROR 50 17 lc_hs_wizard.cat "Invalid Step \n" ;; esac KLIB_SA_logmsg INFO 50 11 lc_hs_wizard.cat "Clearing PVIDs to get back Non-shared PVIDs on Target nodes \n" for disk in $target_disks do $CLI_ON_NODE -N $standby "chdev -l $disk -a pv=clear;odmdelete -q \"attribute=pvid and name=$disk\" -o CuAt;rmdev -dl $disk;" >/dev/null 2>&1 done $CLI_ON_NODE -N $standby "cfgmgr;" >/dev/null 2>&1 for disk in $target_disks do $CLI_ON_NODE -N $standby "mkdev -l $disk;chdev -l $disk -a pv=yes;" done ;; 2) # Unable to copy to dependent Path would be the case for failure.possible case of permissions. # Roll back RTEHSS customization and links in dependent path.permissions given to sdb.sdba for the lib KLIB_SA_logmsg INFO 50 6 lc_hs_wizard.cat "Rolling back libHSS configuration \n" DIR="${HSS_LIB_PATH}/${instance}" #Commeintg out removing library as it may move livecache db into unrecoverable state #[[ -s $DIR/RTEHSS_config.txt ]] && { #for node in $nodelist #do # Exec_CMD "rm $DEP_PATH/lib/lib64/$HSS_LIB;" # [[ $? -ne 0 ]] && { KLIB_SA_logmsg ERROR 50 12 lc_hs_wizard.cat "Unable to unconfigure library libHSS on %s \n" $node; } #done #} ;; *) # Step unknown KLIB_SA_logmsg ERROR 50 17 lc_hs_wizard.cat "Invalid Step \n" ;; esac (( step-- )) done #=============================================================================== # Clean up #=============================================================================== rm -rf ${tmp_dir/}_bk mv $tmp_dir ${tmp_dir/}_bk  k # # Return Values: # return code of 1 set if no disks found matching the criteria # # Otherwise, a list of disks matching the criteria is written to standard # out, one per line # #=============================================================================== [[ "$VERBOSE_LOGGING" == "high" ]] && set -x PROGNAME=${0##*/} PATH="$(/usr/es/sbin/cluster/utilities/cl_get_path all)" export PATH # : Check if RBAC is enabled # typeset is_rbac_enabled="" is_rbac_enabled=$(clodmget -nq "group=LDAPClient and name=RBACConfig" -f value HACMPLDAP 2>/dev/null) # : For a non root user, append the user name to the output file. # [[ -z "$LOGIN" ]] && user_name=$(id -nu 2>/dev/null) || user_name="$LOGIN" if [[ $user_name != "root" && $is_rbac_enabled == "YES" ]];then CL_DATFILE="/var/hacmp/tmp/cllspvids.out"_$user_name else CL_DATFILE="/var/hacmp/tmp/cllspvids.out" fi CL_LSDISK="/var/hacmp/tmp/clsharedpvids.out" SMIT_PVIDDISKLIST="" colon_flag="" sdisk="" # : Pick up the node list. # while getopts ":n" opt do case $opt in n ) # : Anything # GREP_OPT="" ;; * ) print "clls_ns_pvids -n node_name [node_name ...]" return -1 ;; esac done shift $(( $OPTIND - 1 )) # : Get a comma separated list of nodes # NODES=$@ CSPOC_NODES=$(IFS=, set -- $NODES; print "$*") # : Go find all free disks across the given set of nodes : Returned file is in the form: : node: hdisk:pvid:concurrent_capable:ECM_only:size : FREEMAJORS: # cl_lspvids -cspoc "-n $CSPOC_NODES $db_flag" > $CL_DATFILE # : Change the ownership of output file, for a non root user. # [[ $user_name != "root" ]] && chown $user_name $CL_DATFILE # : If there were any free disks found, select for commonality and concurrency # if [[ -s $CL_DATFILE ]] then # : Trim off the free major number information, and perform any concurrency : selection. Pass the rest to cl_pviddisklist to give the common PVID, : HDISK and node information. Lines are of the form : node[,node,node]: hdisk:pvid : meaning that pvid is known as that hdisk on that list of nodes. # if ! SMIT_PVIDDISKLIST=$(/usr/bin/grep -v 'FREEMAJORS' $CL_DATFILE | /usr/bin/grep "$GREP_OPT" | cl_pviddisklist $colon_flag $CSPOC_NODES) then # : Any error return code cl_pviddisklist is passed back, generally : indicating no disks found # print "$SMIT_PVIDDISKLIST" # any error msg exit 1 fi fi print "$SMIT_PVIDDISKLIST" | /usr/bin/awk ' { print $1} ' | sort -u > $CL_LSDISK if [[ -z $SMIT_PVIDDISKLIST ]] then sdisk="FREEMAJOR" else cat $CL_LSDISK | while read pvid node do sdisk="$sdisk$pvid|" done sdisk="$sdisk FREEMAJORS" fi count=`/usr/bin/grep -v -E "$sdisk" $CL_DATFILE | wc -l` if [[ $count -gt 0 ]] then /usr/bin/grep -v -E "$sdisk" $CL_DATFILE | while IFS=":" read node hdisk pvid extra do print "$pvid $hdisk@$node" done else print "No Non-Shared Disks found" fi  kW%o@P/םaX՝a֝a&P2vT./usr/es/sbin/cluster/sa/hswizard/sbin/lc_param_confige@@# This file would be used to set parameters for liveCache. # Users can customize this config file to tune parameters # contains no source code param_startsession param_put MAXCPU 2 param_put MAXLOCKS 15000 param_put MAXUSERTASKS 50 param_put MAXLOCKS 150000 param_put CacheMemorySize 1875000 param_checkall param_commitsession exit  k[%o@ /םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/hswizard/sbin/ls_storage_disks@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/hswizard/sbin/ls_storage_disks.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)18 1.2 src/43haes/usr/sbin/cluster/sa/hswizard/sbin/ls_storage_disks.sh, hacmp.assist, 61haes_r714 11/30/11 12:55:37 #=============================================================================== # # Name: ls_storage_disks # # Description: # Given, a list of nodes and storage system, Would discover the shared or # non-shared disks from specified storage on provided node list. # # Arguments: # # ls_storage_disks -a -t -n node_name {node_name ...] # -t # possible values are "DS8000" or "SVC" # -a # possible values are "shared" or "nonshared" # # Return Values: # 0 on success # -1 on failure # #=============================================================================== if [[ $VERBOSE_LOGGING == "high" ]]; then export PS4="$(/usr/bin/basename $0): [\$LINENO](\$?): " set -x typeset version='@(#)18 1.2 src/43haes/usr/sbin/cluster/sa/hswizard/sbin/ls_storage_disks.sh, hacmp.assist, 61haes_r714 11/30/11 12:55:37' fi TMPFILE=/tmp/test FOUND=FALSE while getopts :n:t:a: option do case $option in t) HMC_type=$OPTARG ;; n)nodes=$OPTARG ;; a)tag=$OPTARG ;; *) #usage print "ls_storage_disks [-t] hmc_type [-n] node_name [node_name ...]" return -1 ;; esac done [[ ! -s $TMPFILE ]] && /usr/es/sbin/cluster/sa/hswizard/sbin/ls_storage_systems -n "$nodes" >/dev/null case $tag in shared) /usr/es/sbin/cluster/cspoc/cllspvids -n "$nodes" |\ /usr/bin/awk '{print $1 " " $3 " " $5 " " $6}' |\ while read pvid disk word disk_node do FOUND=FALSE if [[ $word == nodes ]]; then snode=$(echo $disk_node |\ /usr/bin/awk '{ gsub(","," ");print $0;exit}') for node in $snode do /usr/bin/grep -q $disk@$node $TMPFILE if (( $? == 0 )) && [[ $FOUND == FALSE ]]; then FOUND=TRUE print "$pvid $disk@$snode" fi done elif [[ $word == all ]]; then for node in ${nodes//,/ } do /usr/bin/grep -q $disk@$node $TMPFILE (( $? == 0 )) && FOUND=TRUE done fi if [[ $FOUND == "TRUE" ]]; then print "$pvid ( $disk on all selected nodes )" else /usr/bin/grep -q $disk@$disk_node $TMPFILE (( $? == 0 )) && print "$pvid $disk@$disk_node" fi done ;; nonshared) /usr/es/sbin/cluster/sa/hswizard/sbin/clls_ns_pvids -n "$nodes" |\ while read pvid disk_node do /usr/bin/grep -q $disk_node $TMPFILE (( $? == 0 )) && print "$pvid $disk_node" done ;; *) print "Operation not supported" exit -1 ;; esac exit 0 at pv k\%o@5 /םa֝a֝a&5 2vT./usr/es/sbin/cluster/sa/hswizard/sbin/ls_storage_systemseInsta@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/hswizard/sbin/ls_storage_systems.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011,2012 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)67 1.3 src/43haes/usr/sbin/cluster/sa/hswizard/sbin/ls_storage_systems.sh, hacmp.assist, 61haes_r714 7/9/12 05:25:37 #=============================================================================== # # Name: ls_storage_systems # # Description: # Given, a list of nodes,Would discover the storage subsystem on them. # The storage subsystem could be either "DS8000" or "SVC". # Also, The option "Manual Configuration" will be displayed by default # along with discovered storage subsystem above to let user continue with # wizard. # # Arguments: # ls_storage_systems -n node_name {node_name ...] # # Return Values: # Outputs the Discoverd storage subsystem . It could be either DS8000 or SVC # #=============================================================================== TMPFILE=/tmp/test while getopts "n:" opt do case $opt in n) nodes=$OPTARG ;; *) print "ls_storage_systems [-n] node_name [node_name ...]" return -1 ;; esac done # # Cleanup # rm -rf $TMPFILE for node in $nodes do /usr/es/sbin/cluster/utilities/cl_rsh $node "lscfg -pv" | /usr/bin/sed "s/\./ /g" | /usr/bin/awk 'BEGIN { DSK=""; MFR=""; TYP=""; SN=""; LSS=""; VOL=""; Z1 = ""; CNT=0 } /hdisk/ { DSK = $1; CNT = 2; # CNT == ?, record hdr } /Machine Type/ { if (CNT != 0) { # in record body? TYP = substr( $5,1,4 ); if ( TYP == "2107" ){ printf("DS8000:%s@%s \n",DSK,nodename); } if ( TYP == "2145" ) { printf("SVC:%s@%s \n",DSK,nodename); } } }' nodename=$node done >> $TMPFILE ## Check if file is empty if [[ -s $TMPFILE ]] then cat $TMPFILE | /usr/bin/awk -F ":" '{print $1} ' |sort -u fi # The "Manual Configuration" option needs to be printed by default for SMIT panel flow. dspmsg -s 51 cluster.cat 21 "Manual Configuration" Cl4 la]%o@/םa֝a֝a&2k2vT./usr/es/sbin/cluster/sa/hswizard/sbin/setuprag@@  =es ainort"$-/S_cdghlpu#)ACDEILMNORbfmvw'(.01BFGHPTV\kxy24:;>KUX[]z{|}!&*,3567%+8Wq9@^jͺ+[_+M&G}fs1809 3/b5[OY ܡ̠cƼo1n8o W7GjtżogՌ١@j P@B\( <PzQoWp*ƨv!Q`a^x2P2zϭVg2f - /&f#ZGxO\"Q135a#UQPB¼U\4,S6xIoXQ|96[7?_72\57mݼonJ3%ӊqh込k9-V3MZrf+uSۢ%aElqR1}ƹsk,X X&ϜqngH/r2V 8i+X\eoLƙMfv2_#,+z!N] hNXc;w:t+ /Qh辽 ̷Vkkt_|$#rc;Ml5sSm{.YBȒma%汵¡Z&[[ro[Z:.6>{$f2KqnRR1a0dh9[ij@, <0HX9&K=sPE`ҽ(Щ=9 Zj½ hثrJkaЩ=q֜y|}8# - h߄:WƯtZ R&A!UBHoh-o*<D=@bdqcW=7Hd  ">V25>α=ţFSajtVbo?u1z{b}c,/LEx^-}\~VͫR2=GE c(ЩNX+ *m|%tE TZoj{jy妶HEஂb*&273OV35:us%m\ް^t__½ kxKb,Aof2OZov*qVc,/L#WB5\g=2 vc,;b}c,/L݅EהLڿ&* Y]&^D4d^UjyJk`!8t\ t Q5 $8_NXZrǿkB5A.CSmo !b*&2<'PzQoWp;*ƨv!Q`a^x2P2zϭVg2f - /cŤ{ܓ{DR1J(&4Bi%YI\hCk\wYBa&=Ff_, _xpoeU! ,+MUMZ:e1on焖R1}=j/}2\4677%kr12$ojUqF#rVٶYWnىB<ى!Xma%p1\;yٶVu7zY`Pij+Tb9JmU(6L4c-$$;6[6}XLI*\9c:Il{PfXk +ǍⰤ`e8MZrf+z`n4jl3)g40\Y\;j7eF']$BN[XI\ x9pppƹså5^5sg2Jkfk8nGE\9quƹsՅʨt_^5s*A\9X"'sQGHLBj(=A1O9!іW5ytx^9B,LwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvnJ3!93"I 0]2J.""L?~z#YBa&=Ff_, _x UF5CB+ NFt"ff&DOHfkqhm\P}_*ţg  x"  P@BV*&2"@bĈ 0$j.X"&"1h s=EH M0 F`.s(L3&fP2ʒ$AB*IB)f TxaIZf TxaI(E7  9*&2H((TMAe =  rʼn.a;@I4 \bD MDH=EH$b౸s4 WrX")B<G&<<.& (P `^Rb{`{@2$Z ,Hs Kyl17 -@׸PzQoW.cxUQPB¼TNϭѝ)m5:W=b5{ l{o_+z_&s))َKxno=Xj4<7a%ڤe^`/9RS[72 }$Lڿ5j7 ȓ1gM5 PLxM$1WgȒPLxHcPR< P *<2M&(<E%ЌNJ ^EPpZ\#ڤe^&9St%5_M$1@6.ikDC X75&8=$T TˠTx4z @iL MB($ T T9"LF &FeF+"LF &FeF*v`RKaĤ,Ć1U#jIH!$QYW O{ b*G`X0BBIQT T@I4(L=A1I P@!5NJ $LL@t(L<*=V n ~Bj II Pyq!UBHzLGH L PDp`@!5NJ $LL@t(L?Zr3/[z gZ4k: IoV#YWxbՌj`՛C>gf&i ϭdXByF[XI\ {Z:/.3]EZoţZM3$1z R&AB ?(TMAe pIFc$t_!\("#*Pţgqh3]CGEӖ?ٚZ:/[TfkqhIFc$Zpx @HdH(sOGEeٷEqEZoqţZM3$1z R&ABt\Q5 %]&~ pTaCtW8t_l-ٷEqCGEӖ?m\P}ڤe^ͺ+Z:/%oh-ŸV$'R ,03\ޯɖ/ 쪣؄!EyB!$QYW x=VˡXQ|GEGE$f2Izc]6FAUhBj(KM3% AW‡=ՅʨqhZ:.XQ|,_*ţhHʽ ‹T8t_xK#1[pH8<I N2 $9U&nkg ஁f0(HI4Vr5*1WV'&dڬhӠ@2$@f0(HI4Vr5*1WV'&d55NiPzc &a#MEg#Q\2{b|)5V#fkqh辟@f0(HI4Vr5*1W*@Z:.LAţIH!$QYW ^X<$°Z:.LCf-("LF &FeF*X=6H`*t\aEZ:/P+D M5EpʌUOA8  IH!$QYW _NdzEH$` t0BBIQ\  {y(hhiՌV' :@H1@f0(HI4Vr5*1WOE52= "IBdOW@3 $$j+9^X&f:-Z M0 \LP$&G@L5 ,<.*r+ uX={DR1J(&4Bi%YI\iz\i5Fg#MiȬB",{PzQoWp쪣؄!Ey X&VrrJ6cb6W7M6#PxiȒGaC<4m+ppiY!\Y4R8g!Ls3 `Q~%)יFqng{[%Xy52 CS!\ X&VrrJ6'$1@zM3%zGH L,E^, $j.X"&b[ CE5΋~ ;*C7| &Qe$,?IIYi%YokK`v!Qdd$] 4`kOQ{ڄi.P5Fc7LH4v^* B4.{DI@DC PEFU‡=WTt_׫޴t\1ӋGE$f2Izc]Mƒ ĈLA1R P@B\%oh(p@W Hʽ &9@Bj,bItKtMƒk[DVȭ%o-ĈLџ I-l9pispi~g*w2_f - /c%[ƾ &Qe$D9!UBHoh-o*<D=@bdqc*gI (\j&*A*i!U4\3X౸ˣ":&qhF Z:/0MB*HX{V2Ow,Դd%I;(Zf2IVrm{#^{Es9w5NHcPRW`?S Pֳ"-S &G7N`= *C͹VA/tWZ:/+6[@"7fZ:/Vmʶ"zѼ7MzfHcPR<$f2K[ P#X)(O:dx-Ct1#`ڡ"8atVÝ "IBdz,giK#1P:/‚&1ah &1a0LMnD-0L'#-R27P*y7Hd "12F8zS PEtg7N`= *CΚfEhEl9LP$&G B4c%צ59# B7KE-ٌZowa\V'f2:/¸EFUPk +xx={ (L=DǨ7F 18 쪣؄!Ey X&Z+yNs ϵIL ! JuU-# z$OsohjZf2IV[$ƝBY-3$9 6Ckpb5mqK-9cqu{"M0ZSYtצnd&cfk27*ƨv!Q`a^x09 3FQ1onmFx{ڄi.P5Fc{i"M0]>P8K#1P:/碈(jz0s"M0]>P8K#1P:/碈(jz`P&cfk27TcT;(b<~Wd&G~^}=p,03\ޯɖ/TcT;(b(`H֛\XW-C #1ZGTx4zXYw#1[x,n24qX:iUg-z4,?M3$1ހj&XyR\%oh(AW‡=c$IYi%YokK`v!Qdd$] 4סƞQ{k +fqIEfqnc$,!5K,#b&IYBa&=Ff_, _xpjb V3 cC2D<ܡ̧`/9%ٶlg+gor9΁>JYSNF|e9z_&s)5^7‘s{Q4ܕg.vmvL3;/Bs@ NŞ5s3}VTbuKQZd+嵄Ǎss0pƹsbdW`?e ~L~ `'jb V秕dm%:$)y\i9Ռ~[) r M-(r*]}Xz3Źk/HcPR< P *<k + .QBInVS[4e ~L~ `/jb V#%u23k +ZG^v3FzT#S1V2~XOfXVCs5SW`?e \(& Prɗ(JAFZ(LrCH PLqʨ&Io['ى!X(z+V13^giUU@Ǎx+ FYGyc9sm0g56Y~r jt,YQk ,deEiW7ã-$5[%^*ǙV3[XI\,S[5$1@z (HZǤ,Դd%I;(YUReUYok?c"HMA1IlIUePXJ @Bj K`L-rXt P# ">Bj K`L-ra}po;/{DR1J(&4Bi%YI\hCk^i&cfk27UF5CB+ #(!92_~-#ʷIp677%ksQiT9T8t_^5yiGyc9smPٷEsKz‹yɲټcsT4x4Nj,m`eAkֱX-5sgH/r2UK/[U\B,LwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvnJ35,UCCGE#$B"${]<PW0,03\ޯɖ/*ƨv!Q`a^y9銐6xIoXQ|#jtk3df!6C8{kXS"M0_tWZ:/7:tPA&-77M|U^DNLX=&F XAh u[EcM=j/ZrHʼMƒ L@T(LTD&Pis)C1rXIc#>S[5jtDI @#XQ|GEoMl6F_jtGEeLiXAh ut@?D@H4owՌPT@/b}%n4i#*ДBDI  (*L &*AABj(I;3]E235Z:/SZ:/.j."iXAh ut@?DAwIqARdmUUV<Ds,TAD(2ApBI?]H((TMAe ?֜wD!LTD&Pc$Q135aGeU! ,+JYYSۢ%aETt_x{ohjZf2IV[$ƝBY-3$9 6Ckpb5mqK{e ~L~ TcT;(b=6W7M6#=h9žͺ+[_+HEHʷIpKogeI4 lT^%o@ /םa֝a֝a&/c2vT./usr/es/sbin/cluster/sa/hswizard/sbin/validate@@  =e _adinorst"$-cfghlu#/ACDEILMORS\bkmpvw'().0123:BFGHKNPTV[]xyz{}%4;U|!&,7>*58@XYq69WZ^+?<f rS vˀcD"o2`*&R"?Uo+xO/% ]mX#?T>5Y,1 ~EI AB pȰǬ^mPlB?\?pȖ2DML0 d*DC*]L0 D*DC^VBR 05a}?Z1E;B}0bf!cfڐ/d2bB%2 ģ EAA}pZJl}ź|R?עq~$`P* "+YfҞܼ^SrTN s2Y{ۙmPl{kQgwmmY)}3%|mY>ĔIW5]%/<1NiE,'zK2q~J>?CPɂPLHwx?@R W؃6 (6ԅA{!+9)A%_B,XP"/ ,@~^\,xXHXW $5ЇM4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M78ziiiiiiiiiiiiiiiiiiiiib 'r;8ziiiiiiiiiiiiiiiiiiiii6 (6ԅA{!+9),`8cNppԼ?7H7pOld~VfIi_:7OCǡ8~z:GlfOloJ= ޜǃAMnW_Cǡ8UfOl`wpgngo;vk> 3S>gEy,<`c7ߦ2ߧ.d\_7ҝ#`c7#*4H?3ֻ;t SuHdzG wٹWR?YFfu00}2 mA:%],ʻգ Q A FOҷظ{ZֵZQKN =J/gkjhCkxP??YF=k[whj;gfOloLpgngo fTSm`we{t20 $5w9VfIbQvwbC( |ΊYtxomLe,T9戽,zra8`O (2b/QMo%|c}vIOhi_y把ā $\D6 (6ԃ7aZWވ?w}h "4TTȗ)jӤhN H-]?C?YF'f rS!'x/)ߤ: 5ZWΑ)DWΑ9把x1 b:' ͪClB%2 0ͯ į-b֕~ H-]?Cҝ#3j9)s sJq~&DNHрAEhG.S 9unkDy/bܡ& (2b/)ZҡXc}vі#oV=+74\̯ sY9,T9戽,zra8`OCpB$Xc}vIOhi_B8he59-hb4EQc[1x`(4b/5++t%I%#VnSX #.dݚτuٚ'bQ?)Y?o^V5/*O,G/wX/*O^Ͷֵ Ymdͯ2xW}Rh{_ΑkZօYmauΓN»XA=p- vUn3R2}t*V1D2+(cl?JbkZkCF/kq84+ ֵ@02{^ecpo Qg ןA(ֵ0Α%k{Zַ*4k[UyR} b?FOҷцS[emY'gkZ{Quֵ,wV:kZ|ecVdpvvo eE6pPfWC+ L3]psfj^TA%__X8 4Q~˝ʖ)\U!)G2TLD!}W*PVLoR yşkҰ[_a_O[J'H$ /NbV ڤJd ?YN Pw $ ~Wݢ H'f rS!'x(?YN PwJ3;KtJ3;Kׅٶ;yƊ;آaۈ/Qs?QuqmL*Ə2>2שFgwƏ2=,]?(QOkϠl"EdЏHdzy x" XAO+~< *XwHVҚܬϳzs;fo >~SYPgTy"$HmXAF- XL}Jm}}=nR#J6< *hIKs]/WV;noo$Xs{XDpQd7 !H_-RJ0Ǻ+w_hi 74\V*O~ĭwh*hKH%^ HA ޘE4x(ww4Љ2 mQztUATLSL G~X/sdI4% HЉ2sn"ChآǬ(dɃ<0'@^C!V! BL2z__X8 oQ}P3_X0;sGK|_m2z`k̭IgHC%x $\EH_L',Sz4=!AeM dGQ\ۯsHP"(-2`0_aGg+!~C&L 6(V6/գ3@fұQ *hHw8~= 2L)VNsdyAQ䋓 4$pOZhDSB@+^\ۯsHP"(-2`0_aGg+!~C&L 6(V6/գ3@fұQ&TАHrׄphua@w5Y9sGK|_m2xW{>S.x Nzwٚ诶_czV osM 2D@@@LH6!;*B$ʚB@8?YN : &TГʖ(^./4*`8 !* q6,T9戽,zrL3< Qd7 !H_PɓCM 6o:__mcTq͢ 6HpPDSBC!* 2L('4Щ$D 0;Qt] m?^Qt\ qHPDSB@w6wV:.6Hp}Ut\ qHЉ2z/W͓6m]5KzQ:G]E<EYnTL< GaGg+!~JJky+_E|eck=Z(#sfk+ԣ3$8>fk+«mX힥!V۾2p 0:Jq~TV;gFgqHrwV;gFgq0074HP"(-2` ׳nBDkJF6mcTo'm}۫Zw.n0wH$~= ; |{q]Ҿ0->ax YZѮjw}!Qt\ \@$ ATL4=GQސecK,SymR%2Bw G~@aPw7 [t `asZ`&O2(k8HΨEH3jL@MATLࣞJn&d ~9SH+Pw5WL |{s[unkHP"(-2`0׳nBD& ӖR qj0Cޭ}'͢ 6IkFe~Sd0J05+:sY9͒\_`&OtCȖ4Q00}E<EYnPɓx`O^^C!V! BhBchZ38OD m+D#=!@HpdzsFe~SECJ+ZZgo)fZWn|8_u^ׅ񕎅Gl8+ 礲7$? yL7w߯ wLkzOއ|K_y8^bV< L,hZWV;>TV:.]񣚭+ SFƎo[ ͪ@AjG#ШoHr2zBʖ)<6!;膣x?YN 0(;W-:Qn00ٹ0'Dv@o'64WΈyƊ#ۯsHP"(-2`  % 0d7D m+GD m+Gƛo:_)51N !Z2|hQOn[z f}sG9XHpdzo̯ O\ Zؐ1AQ䋓HcB3Hե{YS1E,ĭwhWO->asd~:Pa [z0Cb Yͺ77ċy/bܡ& 'aGg+!~C&L 娷 !Z2|і#oR }'+񕎄 1Y*57招3+€jw8HΨEH3jL@MYO ͪ@BNQ%x72`?)ߤx(;@00}HP"(-2`0׳nBD& ӖR qj0Cޭ}'͢ 6I,g70;آaۈ{8ޓ8\[o+fq+qa^2b@HA ޘD5 @#Thn@&(HqŬdz :(SH,: .(T@w5ZWV;>+9hT"* b@HA ޘ Rt~= e;/HSBO*X;W 2D@@@NHD'B`asZ$Xs{X 0gx+׳nBD& D m+GtƩ}X-GD m+Eec!* љ_o'7Fj,+"TױEecFV:O\V;lH6!;膣Hkq84 C7 Y8d2=A)ߤ *X;++JV;g64sЩ$D p= {0 @'[(@I,>p= {0 @ѓLQgV;goFj2bC5S_XwVwV;lHrwV:.\溻vk>p?333333333333333333333333333333333333333?5/*O ģ <'R?yR*fj^TCFXA%_}"\X-TP$ł=k5zV oRsyb^PkZ^L phP8Ym%y[`8Ƅ8{Zִ,[k%eW4H_+yN׃ l}'j;`kZֆmdJ0Ǻ+9Rk{+'.H!ַW$kZРqmy+KEqphX8JJksFzKʓ.KͶ{Zֵ+(cmWKʓh̫Z0ktqd+}kUuz ԮVv&8{Zַ|ץ`mPm\=k[rO=k[ ? NJ4h'.KmkxΑ%k{Zַ@~~= 8{ZWKʓhza!!Y@`Vhyֵ5/*O/vֵ@fk+kxX?*5Y;o E?۳Y'YXA^ L++ 0t333333333333333333333333333333333333331UyR}a}zp\_2`G0 TLCtWˣ8 {mc.2s}v /w*D^=eQ00' ={= X) ETjS[^"\R7`nh%x ktЀOM@r\ !@Bl @`ٹE<EYnPɓx`O CpB"%p-K^Ў(_T;)5d74zB%93+!m$P(SnkL sy%CZW4H_)a^TE<EYnTL< @Qd7 !H_-RJf+o)acΑssE;BNoΏ&hb#QsZWΑ)H։*D^=eQ00'CpB&QyMn+ɚ$X[ssG:G\֙2 b:'b"f*s[%xLoglmٹ"ChآǬ(dɃ<0'^^C!V! BL3NL"}'Hۛ=):G4HWΑb)N&hb#N\5$Xs{XDp]CpB$,WFgI;JtVNoƓ9%xN}),Uv`asZ$Xs{XDpQd7 !H_'H4AEN׃ lB:/Ԥ)N&hb#s[2L)dv Jm->zpky[$b4EQc[1xXWaGg+!~dS[+'ďGQ7ɚ$XL"zlk'? Y zBM3ITV;ap0:hץ`Qā $\E"ƄL0[ymR%2 WO4%ATLࣜe;2rר2A`8Pk X:`tiSHyRx1AQ䋓L"T=ŭ$x']?CҵX-x' 9w 2D@ʓ,T9戽,zrL3xXgaGg+!~/qVSX->+֒ .Kmr@}a@q5W 2D@ʓ+^G w5_fxRo0 @uG.OcB& -<6hzDʚ胹sZ"ChآǬ(dɃ<0''aGg+!~"p8o=)Ũ''JޓPi[="eM tHktfW9b浢I@)ߦE!b`*(GymR%2Bws^lֺAAִe;R?YFR&TАjBI'LK<299X-q b:'HEATL4=&(+O ͪ@BNQ~9k (cfH,0: \_74*`*O pHP"(-2` aCpB"t7ޝYN>ץ`ZH6|D.74zB%fW\^./4*`*OtzV k00/,,TE1AQ䋓XЉB pO ͪ@AjYAٹhb4EQc[2d׳nBD8c}ڞ}aʓWBoI(YYH̯ s[ŵkK '~} &Q@@<3j9)sfNZH,cfH,0 : 浧)ߢ I,CR,,T< zDr sMNATLOJ`!佐))Nŗ2?ӝzq${G& p$ s։*D^=eC&L<,vzz ±R蔭iP:_O]-.In07ՓE<EYnTL< `Qd7 !H_hЏRyR~[y[Fgzsҧe5.I8hsHP"(-2` `GaGg+!~J֕ 5zV o',5k+y̟?Jc07w ;f.sffffffffffffffffffffffffffffffffffffffcfIa}y ;^S\==ʓUn3R2z1(&-Z38&kZРqmy+dwk6>_|kBmdJ&:|R[q sh+K[Α%k{Zִ0JmdwA?+{@)ZZt+\!ֵ`qm' T-o:GlkZ-y+ؒ %)v3+^ ZH6~p={ZֵkZZ1 VfI4e fUޭbe5VP82~ֵև=z^ׄpiWa}+;^SB=k[*4kZDWΑ8{ZַNׄk[UyR} b=oѓa!!Y@n+uVfI!ֵ("ɇ<hkZ~\&&ֵL9L"]ED\=k0y#ˑ&kZ2"*"7"٬ʊm̯nW_f*Լ> J0bq wbC( |ΊYtxomLek*D^=eQ00'aGg+!~JJkr&mm*O}Em#w"ChآǬ*&c#׳nBD[k%F5 ? Lj'>ΑssE[k%F5'GQ:G{tG#Шӿٖ/H>"ɇ<@,Qw1,_ ;,T9戽,zrL3x`OaGg+!~x /;^ 1ۛ?~= 93+ŵ4`dG0 dwā $\D6YOVV.Dy*X<f8q`i$mR%2 WOQ8!Z2\&%TDx'f rS!'zaG9wPw6fk@f'H>mR9)bV=!Q=zգ'QATL)ߤAAwJ;>whj;gh2 b:'b"@90("^./2Ûuno*D^=eC&L<0'׳nBDIy[ΗOmҝ#o̯ sU\&C& .B"81AQ䋓f rS t+8JjEȀra2P=KGzߧ#T,͒\_h "2`@"*#\"ɇEȀra2`@"*"@B9]YMx'f rS tD/-x'޽8B'x( PJd3<H z pq 0(&O~z#j IU2+H6'p   9_fċy/bș<0/׳nB6/aҤ@Fұ|գ3@fұB97M^$ú I^V= $ / 'ҷأA>\љ_'5Fjmā $\D60{^r s̔xyR7ǣ sTffQā $\D6 1fm=!ٶu HA ޘGࣇ)ߤ: ^hHΨEH3j9)Z ѓ"@90(#=FoӏG^H>mR9)bV=!֭>: ڤJd L?Q sd(^̣\ZMy ٔx$QiGҵǭ(6,T9戽,zp"dO0_aGg+!~m@ 2bIr1=)׬/JAR~*O»K@)ZZ 1;`F6ރk%Fx Rjfk ʓ招3+œd'w*D^=eQ00'aGg+!~ayMnVv&ssE:Gq#Ti<}upKrޥؔy1+ɇ$X.\8;ե{</4sd~:QpOZzhz$#U&"}E<EYnPɓx'^C!V! BL21OJ{IB^J@05Ywi=wJyO8{8G6JӤAF8']?=4=*sn"ChآǬ(dɃ< GaGg+!~C&L Nzx=夃IAEVGQIhBchzL sFe~S?Jߗ"ɇ<hJfk@f'Ͷ?Jߗ"ɇ<@ɀ@%j3U53ZdFOҷȀra2`@"*#02H 2Dd+~L8"^HrD)"ɇSڠQNkֵkZָemCxUyR} b>YwFMn1opj^8z_JׄЇkZ~fOloLpgngo fTSm`we{t20 $5w9VfIbQڠ#k./(d8,`@@eomLemn$Ə9yMp%+s@ /Ȧ)ٻHP"(-2` '׳nB蕚1([TSyQNk7D m+G=(?8̯ dݚτuٚ'bQQC^pVG*OWKʓ ģ Z]Rע PQ}+~4e+(r udjJwDǸ{Zִf_.`k̭{zO=:GlJjhW?WT*5і#of;*ꗥFIȊpj2{' x]yOy[U/J z]}#ֵeqm*ꗥF=+(cm7+uY'і#%Wza!!Y@`VZ0{^]xMMp (mPIMpj'w&@3fxO*);2]~WVa;ffffffffffffffffffffffffffffffffffffffc3R1((U/J8q./(d8,`@@eomLei_:G|ҝ#JwƎl/(3ʤ%5h?YN):ĭ~ G#kSJ;A|#xN'vsJ3;KtJ3;Kׅٶ;yƊ;آaۈ/QsG~j3U5񕎻4mV۾2Ə2>2שFgwƏ2=,]?(QOkϠl#*4D<ɡ*5),@&Ex jV6x.(TG+iMnVgٿ9j3U7qVy?)K|ۯ!w*D^=eQ00'zz ±RmdԦ 1m]WC{;եyJSg+]9$ʚāE? WymR%2BwM0% 8~AC4"L,HT^#x'f rS!'zaQࣇ)ߤ: +c}!AeM pH'74"L.00}E<EYnPɓx`OCpB% 0d71(iSп2qF6ޢugٿ2ssEaNjs?_T;䯺m`_FekO$?:GB+^PgTy"*B!RKtLh~= I4$m{uno*D^=eC&L` (2b/(dɃ!Jfq6,V6=!AeM GQ7fW9͒uG.O/.(TN WOOM6V'A#B$ʚ6.mٹ$Xs{X 0gx/׳nBD& D m+GΗљ| PiX( *hHw9kq84:05Y9$ʚyS ͪ@AjG#ШoHPDSBHK,SymR%2Bw G~AACieM p=.i_^J0,ĭwhJ|E09lH6hz)BA!GQ *X ڤJd L?e;ào^./@FÛ_f< L"*dQ;>p=1AQ䋓f!c,n$ #<6!;GtV>JHr0,;?YF\љ_'i=sQ}Pxm֖[gٿVx [x ,!?zW}<~'ׁ?u~ec@:N=xC9,IS>s7CSf}qF6ރk%FYfFV:;?YF\љ_'i=s 0kb@uG.O"ō t"VQd yO@HJ 0k9WT^(0=j 1E,}E<EYnPɓx`O׳nBD& [QOo> `e7]>^B[z f}sEaNjw8HΨEH3jL@MYO ͪ@BNQ%x72`?)ߤx(;@00}HP"(-2`0׳nBD& ӖR qj0Cޭ}'͢ 6I,g705Y;,>p=LQg0EV;n^V!׌vؐ1mR%2Bw GHdz!`I,`Rqk2p s K,PҾ2)X9j3U5QgXFj,+J2]O\/X b ڤJd L? )܀*LQd Y@tQ~Xt*\P b /` ~n "A(+E+Qb=xlFOҷ>p=āEҌ/m0؀7q?J߱Eؐ6:LQgm0؀7qwV&(+FOҷ5S_X!Qt\ d+xUm+$9xUm+wng\:Kʓz1((RpVG*OWKʓh ģ Kֽ+jj㷄CW`(7%^L pJf(HHHkŶm.K޻4!`Y+-E[vcc?mcTΑ80[k%eW=Xb[ޞ=X-?ExrA^hXkŶm.K޻5`Y*5)Rs/*OޜD/ tKf';6ڢfOloLpgngo fTSm`we{t20 $5w5UyR}a}zz )i8q./Ŋ0h*&!:+e1;t+_:GXP2+DJL" S'>˖ɍ|SOkCB4#Ljdٴѓ=+(cm$dEHSBF'(dɑ"eM ևn"iJMY-fj^TC+^ Z{ Q}HP"(-ʉ<( Qd7 !H_-RJ亐9sE%x ktЀOM@r\ !@Bl @`74HP"(-2` @׳nBDD.][z}ޥ&HD'7Fe~PRސrO<3@$$$I}PV,Wvb&*D^=eQ00'aGg+!~JJky+ɚ$Xk6>a:Gm6tG#Шӛ:"\ۛ=!̯ sY9++HPW"*Eʚ4hJQzt+tL4$Rx6:QOQj=5B֫'7I\?YNGQԉ4$Rh$ 4R*XO\?Jߚ0dG&ARޓ'^tj&TЗCV۾2 164stV'NoJ|4Pɑ"eM s4s[%~:QOZzhzB$ʚs[unkTX,`Aʚ4hJQzt+tLόumٹI@ڢFV;=Foӊ! sZ'o~G#ШjLQgV:abH&iTG64p;慉F8ӮyG4HP"(-ʉ<, Qd7 !H_-Rѡ'=RHD'6JH>mR%2g.Dx C<)3j9)L$"\%5iزFV:zsN:ďphxB:aNmٹ$Xs{X 0g Qd7 !H_RCDo=v /HD'7fWd*D^=eQ00'aGg+!~B=JNzIӁmn}oCJHD'4s] ,T9戽,zrL3xXQd7 !H_RCM^ Z{t'ҷsEљ_s@w ;f.pO kT%o6/םa֝a֝a&62vT./usr/es/sbin/cluster/sa/hswizard/etc/lccluster#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/hswizard/etc/lccluster.sh 1.7 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011,2012 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 71c643f 43haes/usr/sbin/cluster/sa/hswizard/etc/lccluster.sh, 726, 2147A_aha726, May 26 2021 10:50 PM . /usr/es/sbin/cluster/sa/maxdb/sbin/LCutilities . /usr/es/sbin/cluster/sa/maxdb/sbin/DBUtilities . /usr/es/sbin/cluster/sa/maxdb/sbin/DBGlobals [[ "$VERBOSE_LOGGING" == "high" ]] && set -x ##VARS --> Do not Edit typeset OP=$1 # passed by bsmsrv start or stop typeset STATUS=$2 # passed by bsmsrv ok, error, req ## Please Do not Edit following Paramters typeset INSTANCE="PRIMARY" typeset RC_FOR_FAILED_MASTER_db_online=0 typeset CONFIG_FILE="/usr/es/sbin/cluster/sa/hswizard/etc/LCHSenv.cfg" typeset SAPHA_SCRIPT_DIR="/usr/es/sbin/cluster/sa/maxdb/sbin" typeset LOG_FILE="/tmp/lccluster.log" ##setup environment { Do not Edit } STEP="LiveCache_${SID}_LC10control" # Edit the following values manually OR include $CONFIG file # /usr/es/sbin/cluster/sa/maxdb/etc/LCHSenv.cfg typeset SID="" # typeset LCADM="" # typeset LCSERVER=" " # typeset TAKEOVER=" " # typeset LCSERVER_IP=" " #LC service IP label > typeset LCSERVER_DB_IP=" " # typeset STANDBY_DB_IP=" " # typeset CONTROL_LOGIN=" " # typeset LOCKFILE_DIR=" " # typeset MAXDB_PROGRAM_PATH=" " # typeset DBMCLI_COMMAND=" " #/bin/dbmcli typeset LCBIN="" #/bin RC_FOR_FAILED_MASTER_db_online=0 # The following file will be created by SAP liveCache Hot StandbyConfiguration Wizard # Please Do not modify. [[ -f $CONFIG_FILE ]] && { . $CONFIG_FILE ;} typeset DBM_XUSER=${CONTROL_LOGIN} typeset CONTROL_LOGIN="-U ${DBM_XUSER}" ######## # MAIN # ######## # call lc_set_remote_host what will automatically set REMOTE_HOST to the host to un the SLAVE and LOCAL_HOST to the hostinformation running the MASTER lc_set_remote_host #set HOME variable for LCADM for XUSER enablement typeset myUsr=$(whoami) export HOME=$(lsuser -a home ${myUsr} | cut -d= -f2) [[ $OP == "starting" ]] && { case $STATUS in req ) ;; ok ) # Give application monitors and startscripts allowance to keep the service active echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 48 "Write LC10.start \n" >> $LOG_FILE touch $LOCKFILE_DIR/LC10.start chmod 777 $LOCKFILE_DIR/LC10.start # release lock locally and remote here to avoid race conditions in locking. This ensures we have never an undifined locking state echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 49 "Remove LC10.stop \n" >> $LOG_FILE rm -f $LOCKFILE_DIR/LC10.stop echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 90 "The PowerHA application monitors for the Primary and Auxiliary resource group is brought into active state.\n" >> $LOG_FILE # make STANDBY Active (as alternative we could wait till the Application Monitor activates it) echo $(date) >> $LOG_FILE lc_start_slave_remote [[ $? == 0 ]] && { echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 84 "APO started service of the Primary and Auxiliary instance. \n" >> $LOG_FILE } exit 0 ;; error ) echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 85 "The SAP APO transaction of SAP System \"%1\$s\" failed to start the Primary instance. Please contact your APO administrator \n" ${SID} >> $LOG_FILE exit 0 ;; * ) echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 54 "SAP Kernel Error. The script lccluster was called with unexpected parameters. Please contact your SAP Administrator. \n" >> $LOG_FILE exit 0 ;; esac exit 0 } [[ $OP == "stopping" ]] && { case $STATUS in req ) # Disarm application monitors echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 55 "Write LC10.stop \n" >> $LOG_FILE touch $LOCKFILE_DIR/LC10.stop chmod 777 $LOCKFILE_DIR/LC10.stop # release start lock. Do it exactly here to avoid race conditions! echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 56 "Remove LC10.start. \n" >> $LOG_FILE rm -f $LOCKFILE_DIR/LC10.start echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 91 "The PowerHA application monitors for the Primary and Auxiliary resource group is brought into passive state. \n" >> $LOG_FILE exit 0 ;; ok ) # stop slave resource group echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 58 "Stop STANDBY on \"%1\$s\" \n" ${REMOTE_HOST} $LCBIN/dbmcli -n $REMOTE_HOST -d $SID -U $DBM_XUSER db_offline [[ $? == 0 ]] || { echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 86 "ERROR:SAP APO transaction LC10 stoppped the Primary instance successfully but Standby instance stopping failed \n" >> $LOG_FILE; dspmsg -s 70 maxdbsa.cat 60 "Bring Slave Resource group down manually to allow a restart by LC10 later! \n" >> $LOG_FILE; } echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 87 "APO successfully stopped Primary and Auxiliary service. \n" >> $LOG_FILE exit 0 ;; error ) echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 88 "ERROR: The SAP APO transaction of SAP System \"%1\$s\" failed to stop the Primary instance. Please contact your APO administrator. \n" ${SID} >> $LOG_FILE exit 0 ;; * ) echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 63 "ERROR: SAP Kernel Error. The script lccluster was called with unexpected parameters from lcinit or dbmsrv. Please contact your SAP Administrator \n" >> $LOG_FILE exit 0 ;; esac exit 0 } echo $(date) >> $LOG_FILE dspmsg -s 70 maxdbsa.cat 64 "ERROR: lccluster called with invalid operation \"%1\$s\" . lccluster expects either starting or stopping. \n" ${OP} >> $LOG_FILE exit 1 R kpa%o;/םaX՝a֝a&;2vT./usr/es/sbin/cluster/sa/hswizard/config/hswizard_config.xmlsta  kn#b%o&/םaX՝a֝a&&2vT./usr/es/sbin/cluster/sa/hswizard/config/hswizard_config.xsdsta kb%oABםaBםa֝a&2vT./opt/ibm/ibmsapster/saAA kTb%oABםaBםa֝a&2vT./opt/ibm/ibmsap/connectorsizarAA kDb%oABםaBםa֝a&2vT./opt/ibm/ibmsap/connectors/HSS2145nfigAA k-b%oABםaBםa֝a&2vT./opt/ibm/ibmsap/connectors/HSS2107nfigAA kZ}A o#/םaV՝a֝a&#2vT./opt/ibm/ibmsap/connectors/HSS2145/rsExecuteTask.shfig#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/libHSS/HSS2145/rsExecuteTask.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011,2012 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)98 1.2 src/43haes/lib/libHSS/HSS2145/rsExecuteTask.sh, hacmp.sap, 61haes_r714 1/30/12 08:56:11 ##-------------------------------------------------------------------# ## %PS ## ## Licensed Internal Code - Property of IBM ## ## 2145 Licensed Internal Code ## ## (C) Copyright IBM Corp. 1999, 2010 All Rights Reserved. ## ## US Government Users Restricted Rights - Use, duplication or ## disclosure restricted by GSA ADP Schedule Contract with IBM Corp. ## %EPS ## ## COMPONENT_NAME (IBM LIB HSS) ## ##-------------------------------------------------------------------# ## ## Filename: rsExecuteTask.sh ## ## Subsystem: RAS WUI ## ## Input: rsExecuteTask.sh -v -u username -p password -s serverName -b backup_server [-f source_volume -t target_volume taskName] | [-c consitency_group] ## ## -v = verbose ## -u = username ## -p = password ## -a = filepath ## -s = name of copy services server ## -b = name of backup copy services server ## -f = source volume (from) ## -t = target volume (to) ## -c = consistency group name ## taskName = a unic name which should be used for the task ## ## Description: Execute one Copy Services tasks on SVC ## ##-------------------------------------------------------------------# OS=`uname | cut -c 1-3` ##--------------------------------------------------------------------# ## Set INSTALL system variable ##--------------------------------------------------------------------# export INSTALL=/usr/opt/ibm/ibm2145cli export PATH=/usr/sbin:$PATH ##-------------------------------------------------------------------# ## Set defaults ##-------------------------------------------------------------------# SERVERNAME= PRIMARY_SERVER= BACKUP_SERVER= USERNAME= PASSWORD= FILEPATH= VERBOSE= SOURCE_VOLUME= TARGET_VOLUME= TASKNAME= RC= OSVERSION= FCCONSISTGRP= ##-------------------------------------------------------------------# ## Set up error message codes ##-------------------------------------------------------------------# NO_INSTALL_CODE=62 NO_CFG_FILE_CODE=63 NO_SOURCE_VOLUME_CODE=64 NO_TARGET_VOLUME_CODE=65 ##-------------------------------------------------------------------# ## Assign COMMAND for messaging ##-------------------------------------------------------------------# RSCOMMAND=rsExecuteTask #-------------------------------------------------------------------# ## Set default BLANK values ##-------------------------------------------------------------------# CFGFILE=CLI.CFG SOURCE_VOLUME= TARGET_VOLUME= CFGFILE=$INSTALL/$CFGFILE ##-------------------------------------------------------------------# ## Test for $INSTALL variable ##-------------------------------------------------------------------# if [[ -z $INSTALL ]];then echo "$RSCOMMAND: No value is specified for the system variable." exit $NO_INSTALL_CODE fi ##-------------------------------------------------------------------# ## Process arguments ##-------------------------------------------------------------------# USAGE='usage: rsExecuteTask.sh [-v] -u username & -p password -s primaryserver -b backupserver [-f source -t target taskNames]| [-c [make|start] consistency_group]' if [[ -z $1 ]]; then echo "rsExecuteTask: No paramaters specified" echo $USAGE exit 21 fi while getopts ":s:u:p:b:f:t:c:v" opt; do if [[ $OPTARG = -* ]]; then echo "rsExecuteTask: Missing argument for -$opt" echo $USAGE exit 20 fi case $opt in u ) USERNAME=$OPTARG;; p ) PASSWORD=$OPTARG;; s ) PRIMARY_SERVER=$OPTARG;; b ) BACKUP_SERVER=$OPTARG;; v ) VERBOSE=-v;; f ) SOURCE_VOLUME=$OPTARG;; t ) TARGET_VOLUME=$OPTARG;; c ) ACTION_TO_CONSISTENCY_GROUP=$OPTARG;; \? ) echo "rsExecuteTask: Invalid parameter specified" echo $USAGE exit 19 esac done shift $(($OPTIND - 1)) while [[ ! -z $1 ]]; do if [[ $1 = - || $1 = v || $1 = u || $1 = p || $1 = s || $1 = b || $1 = f || $1 = t || $1 = -c ]]; then echo "rsExecuteTask: Invalid parameter specified" echo $USAGE exit 19 fi if [[ -z $TASKNAME ]]; then TASKNAME=$1 else TASKNAME="$TASKNAME $1" fi shift done if [[ -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]]; then echo "rsExecuteTask: No primary or backup server name specified" exit 3 fi if [[ -z $TASKNAME ]]; then echo "rsExecuteTask: No task names specified" exit 4 fi if [[ ! -z $SOURCE_VOLUME && -z $TARGET_VOLUME && -z $ACTION_TO_CONSISTENCY_GROUP ]];then echo "$RSCOMMAND: no Volumes or consistency group specified" exit 5 fi if [[ ! -z $ACTION_TO_CONSISTENCY_GROUP ]]; then if [[ ($ACTION_TO_CONSISTENCY_GROUP != "make") && ($ACTION_TO_CONSISTENCY_GROUP != "start") ]]; then echo "$RSCOMMAND: use 'make' or 'start' for option argument '-c'." exit 6 fi fi if [[ ! -z $FILEPATH ]];then if [[ ! -a $FILEPATH ]];then echo "rsExecuteTask: security file $FILEPATH could not be found" exit 23 fi if [[ ! -s $FILEPATH ]];then echo "rsExecuteTask: format of security file $FILEPATH is incorrect" exit 24 fi if [[ ! -r $FILEPATH ]];then echo "rsExecuteTask: read access to $FILEPATH not provided" exit 61 fi fi ##-------------------------------------------------------------------# ## Set-up command options ##-------------------------------------------------------------------# OPT_USERNAME=${USERNAME:+"-l $USERNAME"} ##-------------------------------------------------------------------# ## Test Connections if only Primary Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "rsExecuteTask: The primary server is down and there is no backup server specified." echo " The task is not completed." exit 41 elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if only Backup Server is given ##-------------------------------------------------------------------# if [[ -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$BACKUP_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "rsExecuteTask: The backup server is down and there is no primary server specified." echo " The task is not completed." exit 45 elif [[ $RC -eq 0 ]]; then SERVERNAME=$BACKUP_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if both of Primary and Backup Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "rsExecuteTask: The primary server is down, trying the specified backup server ..." fi SNAME="$BACKUP_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then echo "rsExecuteTask: The primary and backup server are down. The task is not completed." exit 42 elif [[ $RC -eq 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "rsExecuteTask: The task will be run off the backup server." fi SERVERNAME=$BACKUP_SERVER fi elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi # for testing comment the three lines starting with 'ssh.....' if [[ ! -z $ACTION_TO_CONSISTENCY_GROUP ]];then if [[ $ACTION_TO_CONSISTENCY_GROUP = "make" ]]; then #echo "$RSCOMMAND: ssh $OPT_USERNAME $SERVERNAME svctask mkfcconsistgrp -name $TASKNAME" ssh $OPT_USERNAME $SERVERNAME svctask mkfcconsistgrp -name $TASKNAME elif [[ $ACTION_TO_CONSISTENCY_GROUP = "start" ]]; then #echo "$RSCOMMAND: ssh $OPT_USERNAME $SERVERNAME svctask startfcconsistgrp -prep $TASKNAME" ssh $OPT_USERNAME $SERVERNAME svctask startfcconsistgrp -prep $TASKNAME fi else ssh $OPT_USERNAME $SERVERNAME svctask mkfcmap -source $SOURCE_VOLUME -target $TARGET_VOLUME -copyrate 100 -consistgrp $TASKNAME fi ##-------------------------------------------------------------------# ## Quit ##-------------------------------------------------------------------# RC=$? exit $RC URCE_ kB o(/םaV՝a֝a&(2vT./opt/ibm/ibmsap/connectors/HSS2145/rsQueryComplete.shg#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/libHSS/HSS2145/rsQueryComplete.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011,2012 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)73 1.3 src/43haes/lib/libHSS/HSS2145/rsQueryComplete.sh, hacmp.sap, 61haes_r714 4/2/12 14:20:32 ##-------------------------------------------------------------------# ## %PS ## ## Licensed Internal Code - Property of IBM ## ## 2145 Licensed Internal Code ## ## (C) Copyright IBM Corp. 1999, 2003 All Rights Reserved. ## ## US Government Users Restricted Rights - Use, duplication or ## disclosure restricted by GSA ADP Schedule Contract with IBM Corp. ## %EPS ## ## COMPONENT_NAME (IBM LIB HSS) ## ##-------------------------------------------------------------------# ## ## Filename: rsQueryComplete.sh ## ## Subsystem: IBM LIB HSS ## ## Input: rsQueryComplete.sh -v -u username -p password -a securityfilepath -m minutes -t threshold -s serverName -b backup_server taskName ## ## -v = verbose ## -u = username ## -p = password ## -a = securityfilepath ## -b = backup server ## -m = minutes to wait between checks of whether PPRC ## copy initialization has completed ## -t = threshold percentage which determines ## completion. Default=2% ## -s = name of copy services server ## taskName = name of pre-defined Copy Services Server ## PPRC task. ## ## Description: Wait on the completion of PPRC copy initialization. ## ## ##-------------------------------------------------------------------# OS=`uname | cut -c 1-3` ##--------------------------------------------------------------------# ## Set INSTALL system variable ##--------------------------------------------------------------------# ## ## export INSTALL=/usr/opt/ibm/ibm2145cli ##-------------------------------------------------------------------# ## Set defaults ##-------------------------------------------------------------------# SERVERNAME= PRIMARY_SERVER= BACKUP_SERVER= USERNAME= PASSWORD= FILEPATH= VOLUME= MINUTES= THRESHOLD= VERBOSE= TASKNAMES= RC= OSVERSION= PROGRESS= ##-------------------------------------------------------------------# ## define functions ##-------------------------------------------------------------------# function GetProgress { set -A sources $(ssh $OPT_USERNAME $SERVERNAME svcinfo lsfcmap -nohdr | grep -w $TASKNAMES | awk '{print $10}') let i=0 let SUMME=0 while (( i< ${#sources[*]} )); do let SUMME=$SUMME+${sources[$i]} let i=$i+1 done let PROGRESS=${SUMME}/${#sources[*]} } ##-------------------------------------------------------------------# ## Set up error message codes ##-------------------------------------------------------------------# NO_INSTALL_CODE=62 NO_CFG_FILE_CODE=63 NO_EXISTING_TASKNAME=64 ##-------------------------------------------------------------------# ## Assign COMMAND for messaging ##-------------------------------------------------------------------# RSCOMMAND=rsQueryComplete ##-------------------------------------------------------------------# ## Set default BLANK values ##-------------------------------------------------------------------# CFGFILE=CLI.CFG CFGFILE=$INSTALL/$CFGFILE ##-------------------------------------------------------------------# ## Test for $INSTALL variable ##-------------------------------------------------------------------# if [[ -z $INSTALL ]];then echo "$RSCOMMAND: No value is specified for the system variable." exit $NO_INSTALL_CODE fi ##-------------------------------------------------------------------# ## Test to see if Configuration File exists ##-------------------------------------------------------------------# #if [[ ! -r $CFGFILE || ! -s $CFGFILE ]];then # echo "$RSCOMMAND: The CLI.CFG file is not found or accessible." # exit $NO_CFG_FILE_CODE #fi ##-------------------------------------------------------------------# ## Process arguments ##-------------------------------------------------------------------# USAGE='usage: rsQueryComplete.sh [-v] -u username [-m minutes] [-t threshold] -s primaryserver -b backupserver taskName' if [[ -z $1 ]]; then echo "rsQueryComplete: No parameters specified" echo $USAGE exit 21 fi while getopts ":vm:t:s:u:b:" opt; do if [[ $OPTARG = -* ]]; then echo "rsQueryComplete: Missing argument for -$opt" echo $USAGE exit 20 fi case $opt in m ) MINUTES=$OPTARG;; t ) THRESHOLD=$OPTARG;; u ) USERNAME=$OPTARG;; s ) PRIMARY_SERVER=$OPTARG;; b ) BACKUP_SERVER=$OPTARG;; v ) VERBOSE=-v;; \? ) echo "rsQueryComplete: Invalid parameter specified" echo $USAGE exit 19 esac done shift $(($OPTIND - 1)) while [[ ! -z $1 ]]; do if [[ $1 = - || $1 = v || $1 = u || $1 = a || $1 = m || $1 = t || $1 = s || $1 = b ]];then echo "rsQueryComplete: Invalid parameter specified" echo $USAGE exit 19 fi if [[ -z $TASKNAMES ]]; then TASKNAMES=$1 else TASKNAMES="$TASKNAMES $1" fi shift done if [[ -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]]; then echo "rsQueryComplete: No primary or backup server name specified" exit 3 fi if [[ -z $TASKNAMES ]]; then echo "rsQueryComplete: No task names specified" exit 4 fi if [[ ! -z $FILEPATH ]];then if [[ ! -a $FILEPATH ]];then echo "rsQueryComplete: security file $FILEPATH could not be found" exit 23 fi if [[ ! -s $FILEPATH ]];then echo "rsQueryComplete: format of security file $FILEPATH is incorrect" exit 24 fi if [[ ! -r $FILEPATH ]];then echo "rsQueryComplete: read access to $FILEPATH not provided" exit 61 fi fi ##-------------------------------------------------------------------# ## Set-up environmental variables ##-------------------------------------------------------------------# export PATH=$INSTALL:/usr/sbin:$PATH export LIBPATH=$INSTALL:/usr/lib if [[ $OS = "HP-" ]]; then export SHLIB_PATH=$INSTALL:/usr/lib fi ##-------------------------------------------------------------------# ## Test Connections if only Primary Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "rsQueryComplete: The primary server is down and there is no backup server specified." echo " The task is not completed." exit 41 elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if only Backup Server is given ##-------------------------------------------------------------------# if [[ -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$BACKUP_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "rsQueryComplete: The backup server is down and there is no primary server specified." echo " The task is not completed." exit 45 elif [[ $RC -eq 0 ]]; then SERVERNAME=$BACKUP_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if both of Primary and Backup Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "rsQueryComplete: The primary server is down, trying the specified backup server ..." fi SNAME="$BACKUP_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then echo "rsQueryComplete: The primary and backup server are down. The task is not completed." exit 42 elif [[ $RC -eq 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "rsQueryComplete: The task will be run off the backup server." fi SERVERNAME=$BACKUP_SERVER fi elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## Setting up the variables ##-------------------------------------------------------------------# if [[ -z $THRESHOLD ]]; then ((THRESHOLD = 2)) fi if [[ -z $MINUTES ]]; then ((MINUTES = 10)) fi OPT_USERNAME=${USERNAME:+"-l $USERNAME"} ##-------------------------------------------------------------------# ## test if TASKNAME is existing on SVC ##-------------------------------------------------------------------# ssh $OPT_USERNAME $SERVERNAME svcinfo lsfcmap 2>/dev/null | grep -q $TASKNAMES RC=$? if [[ $RC -ne 0 ]];then echo $RSCOMMAND: Mapping \'$TASKNAMES\' does not exist! exit $NO_EXISTING_TASKNAME fi ##-------------------------------------------------------------------# ## Call command ##-------------------------------------------------------------------# echo $RSCOMMAND: request for \'$THRESHOLD\%\' threshold of mapping \'$TASKNAMES\' starts. ## get progress of existing mapping from SVC GetProgress if [[ $PROGRESS -ge $THRESHOLD ]]; then echo $RSCOMMAND: Task \'$TASKNAMES\' reached $PROGRESS\% completion. exit 0 fi echo $RSCOMMAND: Task \'$TASKNAMES\' has current progress of $PROGRESS\% will wait until \'$THRESHOLD\%\' is reached. until [[ $PROGRESS -ge $THRESHOLD ]] do sleep $MINUTES GetProgress if [[ $VERBOSE = "-v" ]]; then echo $RSCOMMAND: Task \'$TASKNAMES\' is still in progress. Percent complete....................$PROGRESS\% fi done echo $RSCOMMAND: Task \'$TASKNAMES\' reached threshold of $THRESHOLD\%. ##-------------------------------------------------------------------# ## Quit ##-------------------------------------------------------------------# RC=$? exit $RC rt kC om)/םaV՝a֝a&m)2vT./opt/ibm/ibmsap/connectors/HSS2145/rsRemoveTask.shshg#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/libHSS/HSS2145/rsRemoveTask.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011,2012 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)45 1.2 src/43haes/lib/libHSS/HSS2145/rsRemoveTask.sh, hacmp.sap, 61haes_r714 1/30/12 09:03:02 ##-------------------------------------------------------------------# ## %PS ## ## Licensed Internal Code - Property of IBM ## ## 2145 Licensed Internal Code ## ## (C) Copyright IBM Corp. 1999, 2010 All Rights Reserved. ## ## US Government Users Restricted Rights - Use, duplication or ## disclosure restricted by GSA ADP Schedule Contract with IBM Corp. ## %EPS ## ## COMPONENT_NAME (IBM LIB HSS) ## ##-------------------------------------------------------------------# ## ## Filename: rsRemoveTask.sh ## ## Subsystem: IBM LIB HSS ## ## Input: rsRemoveTask.sh -v -u username -p password -a filepath -s serverName -b backup_server taskName ## ## -v = verbose ## -u = username ## -p = password ## -a = filepath ## -s = name of copy services server ## -b = name of backup copy services server ## taskName = a unic name which should be used for the task ## ## Description: Execute one Copy Services tasks on SVC ## ##-------------------------------------------------------------------# OS=`uname | cut -c 1-3` ##--------------------------------------------------------------------# ## Set INSTALL system variable ##--------------------------------------------------------------------# export INSTALL=/usr/opt/ibm/ibm2145cli ##-------------------------------------------------------------------# ## Set defaults ##-------------------------------------------------------------------# SERVERNAME= PRIMARY_SERVER= BACKUP_SERVER= USERNAME= PASSWORD= FILEPATH= VERBOSE= TASKNAME= RC= OSVERSION= ##-------------------------------------------------------------------# ## define functions ##-------------------------------------------------------------------# function GetFcConsistGrpStatus { FC_CONSISTGRP_STATUS=$(ssh $OPT_USERNAME $SERVERNAME svcinfo lsfcmap -nohdr | grep -w $TASKNAMES | awk '{print $9}') } NO_EXISTING_TASKNAME=1 ##-------------------------------------------------------------------# ## Set up error message codes ##-------------------------------------------------------------------# NO_INSTALL_CODE=62 NO_CFG_FILE_CODE=63 NO_SOURCE_VOLUME_CODE=64 NO_TARGET_VOLUME_CODE=65 NO_EXISTING_TASKNAME=1 ##-------------------------------------------------------------------# ## Assign COMMAND for messaging ##-------------------------------------------------------------------# RSCOMMAND=rsRemoveTask #-------------------------------------------------------------------# ## Set default BLANK values ##-------------------------------------------------------------------# CFGFILE=CLI.CFG CFGFILE=$INSTALL/$CFGFILE export PATH=/usr/sbin:$PATH ##-------------------------------------------------------------------# ## Test for $INSTALL variable ##-------------------------------------------------------------------# if [[ -z $INSTALL ]];then echo "$RSCOMMAND: No value is specified for the system variable." exit $NO_INSTALL_CODE fi ##-------------------------------------------------------------------# ## Process arguments ##-------------------------------------------------------------------# USAGE='usage: rsRemoveTask.sh [-v] -u username & -p password | -a securityfilepath -s primaryserver -b backupserver taskName' if [[ -z $1 ]]; then echo "rsRemoveTask: No paramaters specified" echo $USAGE exit 21 fi while getopts ":s:u:p:b:a:v" opt; do if [[ $OPTARG = -* ]]; then echo "$RSCOMMAND: Missing argument for -$opt" echo $USAGE exit 20 fi case $opt in u ) USERNAME=$OPTARG;; p ) PASSWORD=$OPTARG;; s ) PRIMARY_SERVER=$OPTARG;; b ) BACKUP_SERVER=$OPTARG;; a ) FILEPATH=$OPTARG;; v ) VERBOSE=-v;; \? ) echo "$RSCOMMAND: Invalid parameter specified" echo $USAGE exit 19 esac done shift $(($OPTIND - 1)) while [[ ! -z $1 ]]; do if [[ $1 = - || $1 = v || $1 = u || $1 = p || $1 = a || $1 = s || $1 = b ]]; then echo "$RSCOMMAND: Invalid parameter specified" echo $USAGE exit 19 fi if [[ -z $TASKNAMES ]]; then TASKNAMES=$1 else TASKNAMES="$TASKNAMES $1" fi shift done if [[ -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]]; then echo "$RSCOMMAND: No primary or backup server name specified" exit 3 fi if [[ -z $TASKNAMES ]]; then echo "$RSCOMMAND: No task names specified" exit 4 fi if [[ ! -z $FILEPATH ]];then if [[ ! -a $FILEPATH ]];then echo "$RSCOMMAND: security file $FILEPATH could not be found" exit 23 fi if [[ ! -s $FILEPATH ]];then echo "$RSCOMMAND: format of security file $FILEPATH is incorrect" exit 24 fi if [[ ! -r $FILEPATH ]];then echo "$RSCOMMAND: read access to $FILEPATH not provided" exit 61 fi fi ##-------------------------------------------------------------------# ## Set-up command options ##-------------------------------------------------------------------# OPT_USERNAME=${USERNAME:+"-l $USERNAME"} ##-------------------------------------------------------------------# ## Test Connections if only Primary Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "$RSCOMMAND: The primary server is down and there is no backup server specified." echo " The task is not completed." exit 41 elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if only Backup Server is given ##-------------------------------------------------------------------# if [[ -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$BACKUP_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "$RSCOMMAND: The backup server is down and there is no primary server specified." echo " The task is not completed." exit 45 elif [[ $RC -eq 0 ]]; then SERVERNAME=$BACKUP_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if both of Primary and Backup Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "$RSCOMMAND: The primary server is down, trying the specified backup server ..." fi SNAME="$BACKUP_SERVER" ping -c1 $SNAME 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then echo "$RSCOMMAND: The primary and backup server are down. The task is not completed." exit 42 elif [[ $RC -eq 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "$RSCOMMAND: The task will be run off the backup server." fi SERVERNAME=$BACKUP_SERVER fi elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## Test and exit if ${TASKNAMES} does not exist on SVC ##-------------------------------------------------------------------# ssh $OPT_USERNAME $SERVERNAME svcinfo lsfcmap 2>/dev/null | grep -q $TASKNAMES RC=$? if [[ $RC -ne 0 ]]; then echo $RSCOMMAND: Mapping \'$TASKNAMES\' does not exist! exit $NO_EXISTING_TASKNAME fi ##-------------------------------------------------------------------# ## Get all flashCopy maps for consisteny group ${TASKNAMES} ##-------------------------------------------------------------------# set -A fctasknames $(ssh $OPT_USERNAME $SERVERNAME svcinfo lsfcmap -nohdr | grep -w $TASKNAMES | awk '{print $2}') if [[ $VERBOSE != "-v" ]]; then ssh $OPT_USERNAME $SERVERNAME svctask stopfcconsistgrp $TASKNAMES 2>&1 > /dev/null else echo $RSCOMMAND: executing \'ssh $OPT_USERNAME $SERVERNAME svctask stopfcconsistgrp $TASKNAMES\' ssh $OPT_USERNAME $SERVERNAME svctask stopfcconsistgrp $TASKNAMES fi ##-------------------------------------------------------------------# ## wait until fcconsistgrp is in state 'stopped' ## CMMVC6241E The FlashCopy mapping was not deleted because the mapping ## or consistency group is in the stopping state. The mapping or ## consistency group must be stopped first ##-------------------------------------------------------------------# GetFcConsistGrpStatus #until [[ $FC_CONSISTGRP_STATUS = "stopped" ]] while [[ $FC_CONSISTGRP_STATUS = "stopping" ]] do if [[ $VERBOSE = "-v" ]]; then echo $RSCOMMAND: Task \'$TASKNAMES\' is in state $FC_CONSISTGRP_STATUS, will wait until status changed ... fi sleep 2 GetFcConsistGrpStatus done let i=0 while (( i< ${#fctasknames[*]} )); do if [[ $VERBOSE != "-v" ]]; then # ssh $OPT_USERNAME $SERVERNAME svctask stopfcmap ${fctasknames[$i]} 2>&1 > /dev/null ssh $OPT_USERNAME $SERVERNAME svctask rmfcmap -force ${fctasknames[$i]} 2>&1 > /dev/null else # echo $RSCOMMAND: executing \'ssh $OPT_USERNAME $SERVERNAME svctask stopfcmap ${fctasknames[$i]}\' # ssh $OPT_USERNAME $SERVERNAME svctask stopfcmap ${fctasknames[$i]} echo $RSCOMMAND: executing \'ssh $OPT_USERNAME $SERVERNAME svctask rmfcmap -force ${fctasknames[$i]}\' ssh $OPT_USERNAME $SERVERNAME svctask rmfcmap -force ${fctasknames[$i]} fi let i=$i+1 done if [[ $VERBOSE != "-v" ]]; then ssh $OPT_USERNAME $SERVERNAME svctask rmfcconsistgrp -force $TASKNAMES 2>&1 > /dev/null else echo $RSCOMMAND: executing \'ssh $OPT_USERNAME $SERVERNAME svctask rmfcconsistgrp -force $TASKNAMES ssh $OPT_USERNAME $SERVERNAME svctask rmfcconsistgrp -force $TASKNAMES fi ##-------------------------------------------------------------------# ## Quit ##-------------------------------------------------------------------# RC=$? exit $RC ec kw* o5 /םaV՝a֝a&5 2vT./opt/ibm/ibmsap/connectors/HSS2107/rsExecuteTask.shhg#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/libHSS/HSS2107/rsExecuteTask.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)94 1.1 src/43haes/lib/libHSS/HSS2107/rsExecuteTask.sh, hacmp.sap, 61haes_r714 11/28/11 15:15:47 ##-------------------------------------------------------------------# ## %PS ## ## Licensed Internal Code - Property of IBM ## ## 2145 Licensed Internal Code ## ## (C) Copyright IBM Corp. 1999, 2004 All Rights Reserved. ## ## US Government Users Restricted Rights - Use, duplication or ## disclosure restricted by GSA ADP Schedule Contract with IBM Corp. ## %EPS ## ## COMPONENT_NAME (RAS WUI) ## ##-------------------------------------------------------------------# ## ## Filename: rsExecuteTask.sh ## ## Subsystem: RAS WUI ## ## Input: rsExecuteTask.sh -v -P DSclipath -u username -p password -s serverName -b backup_server -d DS_dev_ID -S sequencenumber volumepair [volumepair] ## ## -v = verbose ## -P = DSclipath ## -u = username ## -p = password ## -s = name of copy services server ## -b = name of backup copy services server ## -d = DS 8000 storage image ID ## -S = sequence number = a unique 4 digit hexadezimal number which should be used as sequence number for the task ## ## Description: Execute one Copy Services tasks on DS8000 ## ##-------------------------------------------------------------------# OS=`uname | cut -c 1-3` ##-------------------------------------------------------------------# ## Set defaults ##-------------------------------------------------------------------# VERBOSE= DSCLIPATH= SERVERNAME= PRIMARY_SERVER= BACKUP_SERVER= USERNAME= PASSWORD= DS_DEV_ID= SEQNUMBER= VOLUMEPAIR= RC= OSVERSION= ##-------------------------------------------------------------------# ## Set up error message codes ##-------------------------------------------------------------------# NO_INSTALL_CODE=62 NO_CFG_FILE_CODE=63 ##-------------------------------------------------------------------# ## Assign COMMAND for messaging ##-------------------------------------------------------------------# RSCOMMAND=rsExecuteTask #-------------------------------------------------------------------# ## Set default BLANK values ##-------------------------------------------------------------------# ##-------------------------------------------------------------------# ## Process arguments ##-------------------------------------------------------------------# USAGE='usage: rsExecuteTask.sh [-v] -P DSclipath -u username & -p password -s primaryserver -b backupserver -d DS_dev_ID -S sequencenumber VolumePair [VolumePair]' if [[ -z $1 ]]; then echo "rsExecuteTask: No paramaters specified" echo $USAGE exit 21 fi while getopts ":s:d:P:u:p:b:S:v" opt; do if [[ $OPTARG = -* ]]; then echo "rsExecuteTask: Missing argument for -$opt" echo $USAGE exit 20 fi case $opt in P ) DSCLIPATH=$OPTARG;; u ) USERNAME=$OPTARG;; p ) PASSWORD=$OPTARG;; s ) PRIMARY_SERVER=$OPTARG;; b ) BACKUP_SERVER=$OPTARG;; d ) DS_DEV_ID=$OPTARG;; S ) SEQNUMBER=$OPTARG;; v ) VERBOSE=-v;; \? ) echo "rsExecuteTask: Invalid parameter specified" echo $USAGE exit 19 esac done shift $(($OPTIND - 1)) while [[ ! -z $1 ]]; do if [[ $1 = - || $1 = v || $1 = P || $1 = u || $1 = p || $1 = s || $1 = b || $1 = d || $1 = S ]]; then echo "rsExecuteTask: Invalid parameter specified" echo $USAGE exit 19 fi if [[ -z $VOLUMEPAIR ]]; then VOLUMEPAIR=$1 else VOLUMEPAIR="$VOLUMEPAIR $1" fi shift done if [[ -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]]; then echo "rsExecuteTask: No primary or backup server name specified" exit 3 fi if [[ -z $VOLUMEPAIR ]]; then echo "rsExecuteTask: No volume pair specified" exit 4 fi if [[ -z $SEQNUMBER ]]; then echo "rsExecuteTask: No sequence number specified" exit 4 fi if [[ -z $USER ]]; then echo "rsExecuteTask: No user specified" exit 4 fi if [[ -z $DS_DEV_ID ]]; then echo "rsExecuteTask: No DS device ID specified" exit 4 fi ##-------------------------------------------------------------------# ## Set-up command options ##-------------------------------------------------------------------# ##-------------------------------------------------------------------# ## Test Connections if only Primary Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "rsExecuteTask: The primary server is down and there is no backup server specified." echo " The task is not completed." exit 41 elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if only Backup Server is given ##-------------------------------------------------------------------# if [[ -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$BACKUP_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "rsExecuteTask: The backup server is down and there is no primary server specified." echo " The task is not completed." exit 45 elif [[ $RC -eq 0 ]]; then SERVERNAME=$BACKUP_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if both of Primary and Backup Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "rsExecuteTask: The primary server is down, trying the specified backup server ..." fi SNAME="$BACKUP_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then echo "rsExecuteTask: The primary and backup server are down. The task is not completed." exit 42 elif [[ $RC -eq 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "rsExecuteTask: The task will be run off the backup server." fi SERVERNAME=$BACKUP_SERVER fi elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## Call command ##-------------------------------------------------------------------# if [[ ! -z $ACTION_TO_CONSISTENCY_GROUP ]];then if [[ $ACTION_TO_CONSISTENCY_GROUP = "make" ]]; then echo "$RSCOMMAND: ssh $USERNAME admin@$SERVERNAME svctask mkfcconsistgrp -name $TASKNAME" # ssh $USERNAME admin@$SERVERNAME svctask mkfcconsistgrp -name $TASKNAME elif [[ $ACTION_TO_CONSISTENCY_GROUP = "start" ]]; then echo "$RSCOMMAND: ssh $USERNAME admin@$SERVERNAME svctask startfcconsistgrp -prep $TASKNAME" ssh $USERNAME admin@$SERVERNAME svctask startfcconsistgrp -prep $TASKNAME fi else echo "$RSCOMMAND: $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SERVERNAME mkflash -dev $DS_DEV_ID -seqnum $SEQNUMBER $VOLUMEPAIR" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SERVERNAME mkflash -dev $DS_DEV_ID -persist -seqnum $SEQNUMBER $VOLUMEPAIR fi ##-------------------------------------------------------------------# ## Quit ##-------------------------------------------------------------------# RC=$? exit $RC  k`+ o|(/םaV՝a֝a&|(2vT./opt/ibm/ibmsap/connectors/HSS2107/rsQueryComplete.shg#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/libHSS/HSS2107/rsQueryComplete.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)34 1.1 src/43haes/lib/libHSS/HSS2107/rsQueryComplete.sh, hacmp.sap, 61haes_r714 11/28/11 15:17:26 ##-------------------------------------------------------------------# ## %PS ## ## Licensed Internal Code - Property of IBM ## ## 2107 Licensed Internal Code ## ## (C) Copyright IBM Corp. 1999, 2004 All Rights Reserved. ## ## US Government Users Restricted Rights - Use, duplication or ## disclosure restricted by GSA ADP Schedule Contract with IBM Corp. ## %EPS ## ## COMPONENT_NAME (RAS WUI) ## ##-------------------------------------------------------------------# ## ## Filename: rsQueryComplete.sh ## ## Subsystem: RAS WUI ## ## Input: rsQueryComplete.sh -v -P DSclipath -u username -p password -m minutes -s serverName -b backup_server -d DS_dev_ID -t tracks_out_off_sync -S sequencenumber volumepair ## ## -v = verbose ## -P = DSclipath ## -u = username ## -p = password ## -b = backup server ## -d = DS 8000 storage image ID ## -m = minutes to wait between checks of whether PPRC ## copy initialization has completed ## -s = name of copy services server ## -t = tracks out of sync ## -S = sequencenumber ## volumepair = pair|pairs of volumes with fc relation ## ## Description: Wait on the completion of a copy initialization. ## ## ##-------------------------------------------------------------------# OS=`uname | cut -c 1-3` ##--------------------------------------------------------------------# ## Set INSTALL system variable ##--------------------------------------------------------------------# ## ## export INSTALL=/usr/opt/ibm/ibmsap/connectors/HSS2107 ##-------------------------------------------------------------------# ## Set defaults ##-------------------------------------------------------------------# VERBOSE= DSCLIPATH= SERVERNAME= PRIMARY_SERVER= BACKUP_SERVER= USERNAME= PASSWORD= DS_DEV_ID= MINUTES= TRACKS_OUT_OFF_SYNC= SEQNUMBER= VOLUMEPAIR= RC= OSVERSION= ##-------------------------------------------------------------------# ## define functions ##-------------------------------------------------------------------# function GetProgress { #set -A sources $(ssh $OPT_USERNAME admin@$SERVERNAME svcinfo lsfcmap -nohdr | grep -w $TASKNAMES | awk '{print $12}') set -A sources $($DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SERVERNAME lsflash -dev $DS_DEV_ID -hdr off -l $VOLUMEPAIR 2>/dev/null | grep -wi $SEQNUMBER | awk '{print $12}') let i=0 let OUT_OFF_SYNC=0 while (( i < ${#sources[*]} )); do let OUT_OFF_SYNC=$OUT_OFF_SYNC+${sources[$i]} let i=$i+1 done } ##-------------------------------------------------------------------# ## Set up error message codes ##-------------------------------------------------------------------# NO_INSTALL_CODE=62 NO_CFG_FILE_CODE=63 NO_EXISTING_TASKNAME=64 ##-------------------------------------------------------------------# ## Assign COMMAND for messaging ##-------------------------------------------------------------------# RSCOMMAND=rsQueryComplete ##-------------------------------------------------------------------# ## Set default BLANK values ##-------------------------------------------------------------------# ##-------------------------------------------------------------------# ## Test for $INSTALL variable ##-------------------------------------------------------------------# if [[ -z $INSTALL ]];then echo "$RSCOMMAND: No value is specified for the system variable." exit $NO_INSTALL_CODE fi ##-------------------------------------------------------------------# ## Process arguments ##-------------------------------------------------------------------# USAGE='usage: rsQueryComplete.sh [-v] -P DSclipath -u username -p password -s primaryserver -b backupserver -d DS_dev_ID -m minutes -t tracks_out_off_sync -S sequencenumber VolumePair' if [[ -z $1 ]]; then echo "rsQueryComplete: No parameters specified" echo $USAGE exit 21 fi while getopts ":vm:s:u:p:b:P:d:t:S:" opt; do if [[ $OPTARG = -* ]]; then echo "rsQueryComplete: Missing argument for -$opt" echo $USAGE exit 20 fi case $opt in P ) DSCLIPATH=$OPTARG;; u ) USERNAME=$OPTARG;; p ) PASSWORD=$OPTARG;; s ) PRIMARY_SERVER=$OPTARG;; b ) BACKUP_SERVER=$OPTARG;; d ) DS_DEV_ID=$OPTARG;; m ) MINUTES=$OPTARG;; t ) TRACKS_OUT_OFF_SYNC=$OPTARG;; S ) SEQNUMBER=$OPTARG;; v ) VERBOSE=-v;; \? ) echo "rsQueryComplete: Invalid parameter specified" echo $USAGE exit 19 esac done shift $(($OPTIND - 1)) while [[ ! -z $1 ]]; do if [[ $1 = - || $1 = v || $1 = P || $1 = u || $1 = p || $1 = a || $1 = m || $1 = t || $1 = s || $1 = b || $1 = d ]];then echo "rsQueryComplete: Invalid parameter specified" echo $USAGE exit 19 fi if [[ -z $VOLUMEPAIR ]]; then VOLUMEPAIR=$1 else VOLUMEPAIR="$VOLUMEPAIR $1" fi shift done if [[ -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]]; then echo "rsQueryComplete: No primary or backup server name specified" exit 3 fi if [[ -z $VOLUMEPAIR ]]; then echo "rsQueryComplete: No volume pair specified" exit 4 fi ##-------------------------------------------------------------------# ## Set-up environmental variables ##-------------------------------------------------------------------# ##-------------------------------------------------------------------# ## Test Connections if only Primary Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "rsQueryComplete: The primary server is down and there is no backup server specified." echo " The task is not completed." exit 41 elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if only Backup Server is given ##-------------------------------------------------------------------# if [[ -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$BACKUP_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "rsQueryComplete: The backup server is down and there is no primary server specified." echo " The task is not completed." exit 45 elif [[ $RC -eq 0 ]]; then SERVERNAME=$BACKUP_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if both of Primary and Backup Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "rsQueryComplete: The primary server is down, trying the specified backup server ..." fi SNAME="$BACKUP_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then echo "rsQueryComplete: The primary and backup server are down. The task is not completed." exit 42 elif [[ $RC -eq 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "rsQueryComplete: The task will be run off the backup server." fi SERVERNAME=$BACKUP_SERVER fi elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## Setting up the variables ##-------------------------------------------------------------------# # missleading! MINUTES are SECONDS used for sleep command! if [[ -z $MINUTES ]]; then ((MINUTES = 10)) fi ##-------------------------------------------------------------------# ## test if TASKNAME is existing on DS ##-------------------------------------------------------------------# $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SERVERNAME lsflash -dev $DS_DEV_ID -hdr off $VOLUMEPAIR 2>/dev/null | grep -qi $SEQNUMBER RC=$? if [[ $RC -ne 0 ]];then echo $RSCOMMAND: FlashCopy relation for volume \'$VOLUMEPAIR\' does not exist! exit $NO_EXISTING_TASKNAME fi ##-------------------------------------------------------------------# ## Call command ##-------------------------------------------------------------------# echo $RSCOMMAND: request for $TRACKS_OUT_OFF_SYNC out off sync tracks of mapping \'$VOLUMEPAIR\' starts. ## get our off sync track of existing volume pairs from DS GetProgress if [[ $OUT_OFF_SYNC -le $TRACKS_OUT_OFF_SYNC ]]; then echo $RSCOMMAND: CopyTask of volume pair \'$VOLUMEPAIR\' has $OUT_OFF_SYNC tracks out off sync. exit 0 fi echo $RSCOMMAND: CopyTask of volume pair \'$VOLUMEPAIR\' has currently $OUT_OFF_SYNC tracks out off sync, will wait until $TRACKS_OUT_OFF_SYNC is reached. until [[ $OUT_OFF_SYNC -le $TRACKS_OUT_OFF_SYNC ]] do sleep $MINUTES GetProgress if [[ $VERBOSE = "-v" ]]; then echo $RSCOMMAND: CopyTask of volume pair \'$VOLUMEPAIR\' is still in progress. Out off sync tracks....................$OUT_OFF_SYNC fi done echo $RSCOMMAND: CopyTask of volume pair \'$VOLUMEPAIR\' reached out off sync tracks of $OUT_OFF_SYNC. ##-------------------------------------------------------------------# ## Quit ##-------------------------------------------------------------------# RC=$? exit $RC SERN kޱ, o /םaV՝a֝a& 2vT./opt/ibm/ibmsap/connectors/HSS2107/rsRemoveTask.shshg#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/lib/libHSS/HSS2107/rsRemoveTask.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)07 1.1 src/43haes/lib/libHSS/HSS2107/rsRemoveTask.sh, hacmp.sap, 61haes_r714 11/28/11 15:19:26 ##-------------------------------------------------------------------# ## %PS ## ## Licensed Internal Code - Property of IBM ## ## 2105/2107 Licensed Internal Code ## ## (C) Copyright IBM Corp. 1999, 2003 All Rights Reserved. ## ## US Government Users Restricted Rights - Use, duplication or ## disclosure restricted by GSA ADP Schedule Contract with IBM Corp. ## %EPS ## ## COMPONENT_NAME (RAS WUI) ## ##-------------------------------------------------------------------# ## ## Filename: rsRemoveTask.sh ## ## Subsystem: RAS WUI ## ## Input: rsRemoveTask.sh -v -P DSclipath -u username -p password -s serverName -b backup_server -d DS_dev_ID -S sequencenumber volumepair ## ## -v = verbose ## -P = DSclipath ## -u = username ## -p = password ## -s = name of copy services server ## -b = name of backup copy services server ## -d = DS 8000 storage image ID ## -S = sequencenumber ## volumepair = pair|pairs of volumes with fc relation ## ## Description: remove flash Copy relations on DS ## ##-------------------------------------------------------------------# OS=`uname | cut -c 1-3` ##--------------------------------------------------------------------# ## Set INSTALL system variable ##--------------------------------------------------------------------# export INSTALL=/usr/opt/ibm/ibmsap/connectors/HSS2107 ##-------------------------------------------------------------------# ## Set defaults ##-------------------------------------------------------------------# VERBOSE= DSCLIPATH= SERVERNAME= PRIMARY_SERVER= BACKUP_SERVER= USERNAME= PASSWORD= DS_DEV_ID= SEQNUMBER= VOLUMEPAIR= RC= OSVERSION= ##-------------------------------------------------------------------# ## Set up error message codes ##-------------------------------------------------------------------# NO_INSTALL_CODE=62 NO_CFG_FILE_CODE=63 ##-------------------------------------------------------------------# ## Assign COMMAND for messaging ##-------------------------------------------------------------------# RSCOMMAND=rsRemoveTask #-------------------------------------------------------------------# ## Set default BLANK values ##-------------------------------------------------------------------# CFGFILE=CLI.CFG CFGFILE=$INSTALL/$CFGFILE ##-------------------------------------------------------------------# ## Test for $INSTALL variable ##-------------------------------------------------------------------# if [[ -z $INSTALL ]];then echo "$RSCOMMAND: No value is specified for the system variable." exit $NO_INSTALL_CODE fi ##-------------------------------------------------------------------# ## Process arguments ##-------------------------------------------------------------------# USAGE='usage: rsRemoveTask.sh [-v] -P DSclipath -u username & -p password -s primaryserver -b backupserver -d DS_dev_ID -S sequencenumber volumepair' if [[ -z $1 ]]; then echo "rsRemoveTask: No paramaters specified" echo $USAGE exit 21 fi while getopts ":P:s:u:p:b:d:S:v" opt; do if [[ $OPTARG = -* ]]; then echo "$RSCOMMAND: Missing argument for -$opt" echo $USAGE exit 20 fi case $opt in P ) DSCLIPATH=$OPTARG;; u ) USERNAME=$OPTARG;; p ) PASSWORD=$OPTARG;; s ) PRIMARY_SERVER=$OPTARG;; b ) BACKUP_SERVER=$OPTARG;; d ) DS_DEV_ID=$OPTARG;; S ) SEQNUMBER=$OPTARG;; v ) VERBOSE=-v;; \? ) echo "$RSCOMMAND: Invalid parameter specified" echo $USAGE exit 19 esac done shift $(($OPTIND - 1)) while [[ ! -z $1 ]]; do if [[ $1 = - || $1 = v || $1 = P || $1 = u || $1 = p || $1 = s || $1 = b || $1 = d || $1 = S ]]; then echo "$RSCOMMAND: Invalid parameter specified" echo $USAGE exit 19 fi if [[ -z $VOLUMEPAIR ]]; then VOLUMEPAIR=$1 else VOLUMEPAIR="$VOLUMEPAIR $1" fi shift done if [[ -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]]; then echo "$RSCOMMAND: No primary or backup server name specified" exit 3 fi if [[ -z $VOLUMEPAIR ]]; then echo "$RSCOMMAND: No volume pair specified" exit 4 fi ##-------------------------------------------------------------------# ## Set-up command options ##-------------------------------------------------------------------# ##-------------------------------------------------------------------# ## Test Connections if only Primary Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "$RSCOMMAND: The primary server is down and there is no backup server specified." echo " The task is not completed." exit 41 elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if only Backup Server is given ##-------------------------------------------------------------------# if [[ -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$BACKUP_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]];then echo "$RSCOMMAND: The backup server is down and there is no primary server specified." echo " The task is not completed." exit 45 elif [[ $RC -eq 0 ]]; then SERVERNAME=$BACKUP_SERVER fi fi ##-------------------------------------------------------------------# ## Test Connections if both of Primary and Backup Server is given ##-------------------------------------------------------------------# if [[ ! -z $PRIMARY_SERVER && ! -z $BACKUP_SERVER ]];then SNAME="$PRIMARY_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "$RSCOMMAND: The primary server is down, trying the specified backup server ..." fi SNAME="$BACKUP_SERVER" $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SNAME lssi 2>&1 > /dev/null RC=$? if [[ $RC -ne 0 ]]; then echo "$RSCOMMAND: The primary and backup server are down. The task is not completed." exit 42 elif [[ $RC -eq 0 ]]; then if [[ ! -z $VERBOSE ]]; then echo "$RSCOMMAND: The task will be run off the backup server." fi SERVERNAME=$BACKUP_SERVER fi elif [[ $RC -eq 0 ]]; then SERVERNAME=$PRIMARY_SERVER fi fi ##-------------------------------------------------------------------# ## execute DScli command and remove all volume pairs with sequence number ##-------------------------------------------------------------------# if [[ $VERBOSE != "-v" ]]; then $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SERVERNAME rmflash -dev $DS_DEV_ID -quiet -seqnum $SEQNUMBER $VOLUMEPAIR else echo $RSCOMMAND: executing $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SERVERNAME rmflash -dev $DS_DEV_ID -quiet -seqnum $SEQNUMBER $VOLUMEPAIR $DSCLIPATH/dscli -user $USERNAME -passwd $PASSWORD -hmc1 $SERVERNAME rmflash -dev $DS_DEV_ID -quiet -seqnum $SEQNUMBER $VOLUMEPAIR fi ##-------------------------------------------------------------------# ## Quit ##-------------------------------------------------------------------# RC=$? exit $RC o $USA k4p- o5/םaV՝a֝a&52vT./opt/ibm/ibmsap/RTEHSS_config_sample.txtveTask########## RTEHSS_config.txt ################################################## # # CSmode: Copy Server Services # Choose FC if only one storage system is used, flash copy only the data volumes # Choose PPRC if copy is on two storage systems. Additional support by IBM required. # Contact IBM STG LAB services Europe for details. # CSmode FC #CSmode PPRC # # Ibmclidir: directory of the storage command line interface # DS8xxx: path to the DScli # SVC: path to the storage connector interface # #Ibmclidir /opt/ibm/DScli #Ibmclidir /opt/ibm/ibmsap/connectors/HSS2145 # # Ibmsapapodir: the install directory of the storage dependent runtime library # Ibmsapapodir /opt/ibm/ibmsap # # MlCLogVdiskID: ID of Log volume on Master # DS8xxx: ID of volume (four digit hex, e.g. MlCLogVdiskID 1400) # SVC: vdisk_id or vdisk_name # MlCLogVdiskID # # MlCDataVdiskID: ID of Data volume on Master liveCache Server # DS8xxx: ID of volume, for multiple volumes use a comma separated string # (four digit hex, e.g. MlCDataVdiskID 1401, 1403) # SVC: vdisk_id or vdisk_name, for multiple volumes use a comma separated string # MlCDataVdiskID # # SlCLogVdiskID: on 1st Standby liveCache Server, ID of Log volume # DS8xxx: ID of volume (four digit hex, e.g. SlCLogVdiskID 1400) # SVC: vdisk_id or vdisk_name # SlCLogVdiskID # # SlCDataVdiskID: on 1st Standby liveCache Server, ID of Data volume # DS8xxx: ID of volume, for multiple volumes use a comma separated string # (four digit hex, e.g. SlCDataVdiskID 1401, 1403) # SVC: vdisk_id or vdisk_name, for multiple volumes use a comma separated string # SlCDataVdiskID # # SSlCLogVdiskID: on 2nd Standby liveCache ServerID, ID of Log volume # DS8xxx: ID of volume (four digit hex, e.g. SlCLogVdiskID 1400) # SVC: vdisk_id or vdisk_name # SSlCLogVdiskID # # SlCDataVdiskID: on 2nd Standby liveCache Server, ID of Data volume # DS8xxx: ID of volume, for multiple volumes use a comma separated string # (four digit hex, e.g. SlCDataVdiskID 1401, 1403) # SVC: vdisk_id or vdisk_name, for multiple volumes use a comma separated string # SSlCDataVdiskID # # CSaIP: Copy Server IP address # DS8xxx: IP address of SSPC # SVC < 6.x: IP address of SSPC # SVC >= 6.x: IP adress of SVC # CSaIP # # CSaUID: Copy Server User ID (admin) # DS8xxx: user ID (perform copy service task) # SVC: ID name for SSH connection to SVC # CSaUID TIC-TEAM # # CSapwd: Copy server password # DS8xxx: password of user ID # SVC: leave this field blank # CSapwd # # CSbIP: IP address of backup master console (SVC2) / hmc2. # User ID and password must be the same for both servers. # CSbIP # # DSdevID: ID of DS8xxx storage dev # SVC: leave this field blank # DSdevID # # HSS_NODE_00x: lists all Hot Standby nodes available in this section # (with x from 1 to 3, max 3 nodes). # Retrieve the node name by calling 'uname -n' # HSS_NODE_001 HSS_NODE_002 HSS_NODE_003 # # EstDataCST_00x_00y: Defines the copy server tasks, in case where one storage # system uses flash copy to copy the Data volumes from HSS_NODE_00x to HSS_NODE_00y # DS8xxx: specify the sequence number which will be used to copy data volume from # current MASTER (HS_NODE_00x) to requesting STANDBY (HS_NODE_00y). # The sequence number is a four digit hex number (0000 - FFFF). The tasks will # be built up dynamically. # e.g. EstDataCST_001_002 1020 # # SVC: specify unique name which will be used to name the dynamicly created FC # relation to copy data volume from current MASTER (HS_NODE_00x) to # requesting STANDBY (HS_NODE_00y) (the name shouldn't begin with a digit). # The flashCopy relation will be built up dynamically, do not create it! # e.g. EstDataCST_001_002 FC_1_2 # EstDataCST_001_002 1020 EstDataCST_001_003 EstDataCST_002_001 2010 EstDataCST_002_003 EstDataCST_003_001 EstDataCST_003_002 # # TermDataCST_00x_00y: Define the task names to terminate the flashCopy relation # between volumes of HS_NODE_00x to HS_NODE_00y # DS8xxx: set the same sequence numbers than the one specified to establish the flashCopy # relation (see EstDataCST_00x_00y). # SVC: set the same names than the one specified to establish the flashCopy relation # (see EstDataCST_00x_00y). # TermDataCST_001_002 1020 TermDataCST_001_003 TermDataCST_002_001 2010 TermDataCST_002_003 TermDataCST_003_001 TermDataCST_003_002 s E l\Fn=/םa՝a՝a&+2vT./opt/ibm/ibmsap/libHSSibm2145.sople.tx&,(* a 08:;AH_ceprst (,1246=?@ELRST`dfgiklmno !%-.3579CDGIKNPVbhuxy|}$')*/QWYZ[\]jqwz{Jtr<`VGJa[[=!7ӣa 6O:<1;(6ُf=7G3 pd|~A@ @4D}14@|E0({Bx9²7=)!`w%=I 1|0@I$#;e0M$=\2:: SLD Jd 52s8ND(%88wBL Tł$B=uqM`JBQ@prjNNNg N%cr{rD_G")!|/|BMuZcI<צ=!/INz?33IN`{C\<js!t 0pg+i UM ب0+jJˉ{ i$ł,FPJ',/|B'|Oy 4 >"GKt< iaEx@\M@% OHXKw ]\6 ȁ(="*פR0Ua8(7I-f ; M5 p< iȁP|Df:kN, pHnviN6@da+f st!Ձ"Bda*=aRļ&,lE#(%|;}6X E@>p!2?T0rD_%OuX `tTX{N;J."Etw$Mš  &I^NH @"Kbذ?p!0kjTL&,dR2Q=cܖ A Iچrܞ$$ł,FPJ'=WꗣN%r6HA{ dB4;}jC=kψi&z4{kSw|">ᶘR/|vhd@d=!,!' 0DCXBNzJrc k6Av;|ȁDC^7'N`QN{>"pRbtv /($HK]\v>4p^`7ItZ'ef.h,@H#HHc!N{Ȅ&I=vy&Ţq Vn7X{t&ɄR2P;A؈~OuY<^O^0=!i<;}<@|E'Ӭ]&0Go! XJKjJ'$Iav">|O!|<"Bfa(,=aPd5`L"؀zG{!XX{N;JaAㄉ a3L'G6Z"8%%!aNHT *$Ղ0FPJb;K'opBP@b@&ɄR2P;A؈~OuY<^;}|%"0,=aNrD_&H @@|=b#=d{!=aN% )NHV )A(D|?',/|BaHœAX{PœNHV )A(D|?',/|B'XBL)YaC p&ɄR2P;K'&|C'>M'o'=WꗣPA?!4h"%&&R& i)'ZbD, /<8 UE ȇB #{IGE 0`\H P|DE°$'ȀLTf |l62!p1ӅHG!|I"SH D$"#2)I(Ka*dǯ7 #4hOٵ!ZrRhbh6@K=)'wLHBz& P|{ȇ· b$p^I rrD=X/I!9OL"Aج= u9<;}<@|E#~z:Py0^F(i_pa=:cJ91`p$S =7Ip r8KLzMP(ۄa:N7)$r=NH R2QSIA 1=Q91`.)pD3st8J'pJ(7IN l!820YIN^v<HL"B+%)\{7*ֈo.z/k3ItNA66AK p F&Z( IHɐG|8")*T%g^FeBmzxv╁v= VNHV )A(4 >"GKUKjoP5`L"I )$wpp %2m`'F35rrX CX{t$R2Q<;}<@|E'䵇z6hK/I||O;B䥀P"+=ɉ+00^Fnrb`BTɤN!_/d8Ga$8_/X'3p?up \/q Pn2aG{CkG:|M^ #Pl9Lլ=`I"&|C'>M'o'=S*v  `[.eEᰜCh{(^&00|%', X{tV )A(vJNXI##s  fV"f6 İLn#8_/X ɉ9"$R2P+"۬1RJNd8el#p 8_/-`t9X{N X'`6fT`tR)X{N;| @Xv:wuҀZ;| Ro`u`uސF'A &t[(#z/GRQ8-N"Zb{̬$PJ#*i'ZNISedA"PWI?rLZ^ps+"  ZI-FBIQXIr,%^Xz \E ǣ&z!ltVJx^T z3P^ xnA0azMP*(%zMP* )`fR`$TQR jPO*K2&$JȩE²+0VD#tEfȀDnEBX67Il )%JY P b-KGo!Ĥ.6A/I T`DzMPbR&25Ie(%!qr zMPb & j!6AN%z"DB MQ jQD,P`W5@'JFTzq-ToڲhC'$&/-ȂE9BŤ䚴YH")HeeA9 `@`QGX,_bT} _)F/b1}`_7bF/B1|F/bB A($j nŎ!"0F>`,F>!ɂ0 F>M0aZ8H(!0=h¸/It`$kb7I=r)A(xTC ;>P{=h¹zǭ$F p^F ]%(?^wTDWs.|<.|?b0\#ϓ` F &s`F Ljj|Fn0XIiF#䂂JyA FPJ'=h&`nP M.|`uzDw C%Z9z=Xaazǭ$F բǭ{=hP=h j|c֌+,|K jۦaNH($eGPNVvA v/Gu?A`:AfԆ7FDhͻ?D+NJMLMSC&>MXI(t]SSTQ;XW\ p^;}SXn#e iW 1 d`0U ׂ?XWYM{9KP&nv>[!!ZrRhbhO1`R/|=!0— HL#1sHD X ةfR|`u3pd' HL&@N|`.@F P |`j3onν&8p:&Aۅ 8_/p ö$ HL&@y9"IX/exOL#~z:w"6tf3mCFm[7kIN|z/MH"%,"*o*Bqc ;Lt҆ (*>"g!rR`@%7ItZ{×`9v9vؐUr¸0-L+L+զ&  ¸dW=L+ JQ"F`L](DXPrB) A˥$) _#&HL)|9L)|RxRzR~R-0 0baKaK—&"S=XBaV pPBaV"8_/X y9 ^PE#(%#}a'azǭ$Lc֋ X 8_/X a1 䂂ByB9P{=h ¬^|`u =h2Hp^G &%p^F_/'$V R2QN*A(R=L2R(RnE G5/( P9"@d+h ^+"%/I#\N7,m L"a)Ȧ&fN(A(R=L1L0bCՄPz+"De/Iza)פ Xb(RnE G5/b)H܄ %D"U;p!~B&ZtQ=WU趥voD+NJMLMH45!jkψi&Z^/|BMuZNb{t0UIN)=y(Ȋ (}0} 7 6L0DFW *yASu3s{E_/0QIt.HW V{Ȋ ׀)4$#Y&@\@\km0E*yASstσ`*;% X/#'"%DTtD_%D >!&÷Rx` _/X _|Fɖ&^n8ۤ`0U".A۫E0 0qt3tV{Ȋ I|>=_\/(_H9.]\.wW 3#"_ |P|&@#Z܈RT`nR{@MvK'$@*_Hj DTtCܸ^hs,Vn0vBb>OlxTO$x CtrӐYy1!2"> >"&dB S^|Cp_}q'Lv)\ SDd{u1 1"{y=҆ }|F9L a/kSz;. Y@V L^ ]0'u>7e I84> &BBPI@="A B{ \GH;rq[PN'$IkFPJ'OH|OpOI#z # 猔rD_He{ψdɤv؞C9!NTF$ A$ Nd+"d@\VA4 8$@="Aج B\/=NH Oy 4 >"|2'< A=C4>ƇV \6p0+"Ed@\VPϜ#H|+"4 /Hb|%B"d@8 "8_/Dȁq[ \/=NH Oy v a>p?IlTCGN+.|h" .N+aE.B8>p?HzDY' A$1>p?'/L"Id@8`n'$IkFPJ';}|;t$7Gێ?TG(sǛ!Dg4D}14@|E"EMyH"%2ZcJ`J{ya (|s=!2YK蜑$R2Q<@|E' zKvꗣQD(mٵ H'BIR&b}a$V H; 6<0T;!y< Gp 0/#=X@p^8& /cs;| 2^Bdet& `b@K,_.n 2,$zK b|X5v@a eL"J|kNNH4X/H Dɤ">M'o'=RؤbE" !{ @z'䁃EOy 4 >"G_;,mD""<}L HiIHɎ,*zǭ$ yZ8_/p`7+fL|L`og dHx?a F$T|L`o"0;H-B@_/p 8zFX&N$&Ap^&@p7p^&@p7a a{f-y9"IX/e=Wꗣ'nձ4D`ћfV">O2cJ`BaSzǭPD4|MܬB #p^:=#0b3Ep/=#0`p^:=#0`F|2ċFSH! 8_/X'!8zFa/B0T|`u>p/zFa H.`I"#z/Gu?dP9fݫc6D7kiI#鉢*hvԇɫ}q/XUd.="))=.@7Iu)p\u` R%:V CfNwE%^zE{( y=ԃ pV nG R)C`.t҆XU确{@\z/]1<=R L.~{q@*X0=5I"Go W?u`jP`.(G&7G|7p`p0%P` `)p`p0.[ @*=,Nn):Pv^Qn@f|oBSTǤ#od&@0ϖӸ%^7P  n$ FPJ'( .0a{rD_$H D=Rۤ%`H"#z/GuG2 !DGDT S^|CM^14^ 0ȈVG| >Qho!I<xG)4>Gh-4>!&Gɉ 4>MMMii[HKr&.$`HvC$;"`P`;$;$`4Hvp:fҀqk! pfDQnT|B%A9 `@D(%5D4A1Jh5I 4AMkDh` ǩ 2Mg {EŌuOPAcqD#A #&G 4>IM4>Gi 4>LMijh4}h4|EM&LE!˥NJ(n@ XJŎQbA@3q&JBp XȊ#nT|B%A9 `@D(%5D4A1Jh5I 4AMkDh` ǩ 2Mg {EŌuOV5J XJ p h4| $&GÔh%4>&Gh~ %G$h14>!Gɩ 4> 5[">|D5*NV<&+XQd "nν&}=&О?u<-t9#:&+/ɺIEcbB(_/09K4E /%phO po^h~kACGNJl! 8_/XY-`u3a.uY0:_]a.(} %Ӆb*W,"p 8_/09K`&(K{JsKt%^^~rOBI M k+%p^Z0\/ʳ`u1\6'Ap^C=Ss`.`N WCnnHL"q33 bTa/(`p0 jWxO7 d\*y _/X X:06+N /BX @Mg pl6+N*Ӆ\:,&H^,%  χ !H;؀zG{"zɄI )X VBfψȌǤ@.ШV?mR /EmJD1>p9 ''"˅dDp0+"( d@jEdBH9=Xl"w/լ0X{gN0>|âa9 XYA(v~!c֋PNp^|:XEp^`uEF|cb,`PR/^5M֞ "@v|F%"mՀFրċC`-ף *i /!0XhZPP/(פ%kkk$-&$Z~(_/0QI  0Xh{+떦 ="qyzLkkE  ҆ -yCRn#&,!NEp^;}lP $C: =h;|7 Z$^usz/ˤEMo \/.j ʃuh X / Ŧ$C倘0w ܃u2T"0o!, ]GaYzچ*[ `, dBxOL"*#,G($ A#,G($ Anq/XIA;| ? XFٷM'o'=Wꗣ{hz2 6/tDGDU9tO V5!jkψi&,Np}1ؤ@= x@aՀD]/a,/`X _`XI\"J EIh(/Z,GE!% kpz{D{CX$( _/p?% _/p?# )GJ/K%8p^pXI-P{D  b>ZEIt4"@'p^D5ǷVJp$",ΐJHnTZ CR ax ⠍`.NV*T{DÅŇs({DTG%8a\@z'/XE {{X'` {)p^8 nǽH*p^P,`{ X|DpVA(V-=%b#``.,"O{ X_/Qj 3XETG\HLK=%inTP8X #,"0=%iTV:"{ Z `.NId7{ Xp^p'rl|AZR\BX ^|A9h7X C=%bG *A\EX J{ P/>, qaix p2'$CՂ$FPJ'|Oy 4 >"G_^Y`2 6b{̬$PJ#*i'ZNI w2 A(xP够o ϖ7QR6bb{̬$PJ#*i'ZNIv^ps+"  ZI]+L_/p[9 Cr_-$I.SedA"PWI?rKYH`u#,zv?1p^:k=h ;|/zvp|PIX/($H D=WꗣI#DfD L2p +L Ӓ`n7VB!8 1r&:PHXCB@zʂs9 )0 X%]]$iza\0)L+S uiust»¸0&S »B(Rz/ȑ7 pPB=h;}4r)A(xTC ;>P{ =h8BZ,")p^G !\|cփB 䂂ByB9T#!QM4f=y:fqhc!cd2 #0B0>j`ͻfLjǏ"3hh#@~_Q CA>T@y Q CA>T@y * <|Rh(!* <|(!* <|(!* <|(!* <|(!* <|Dy4VHj QP<ɓ6ٟxS6Q>fݛ&Ϲ3'ٷ9ysQÆglBQn:<8`vvr͸^F(+:<8`vvŒ2) ɹ 9A  6AnCT0>(HS6Qd|^||xѢ *ZA??f:<8`vv/AjD44flt|`(gʈ5f܂`R2ћQ3d5C1&jn ʹ ۪>yʃDd2 #6ӣÆglG,ۜٹVgG ؝n>f~9Fn&T3j?Fl܆`}P4Mj#6ڪlͿ7T< NNUdFjj:<8`vv/AjD4dVxbrrQP'ȧ(7AFET~PP0ly#r6HC+"TdTN:<8`vvsdod37 0;;bz:/>:<8`vvtΙFjSb+"TdTNSf7fPꑏ"3DFjCTҦO!ÆglWGEpz•G ؎#ZfٺeG-[7T#!Q6ۼuDf *?Ajٺ Px21{ ms^@f vhQjʈ-(!4UMYFjnHJQU[3 AOQAE CA>TADjPhADfhΏ8؅0 ǧ';fٲ 2*hOYT  y3(gʛ3n S̙3lSteMY| l4AE@/6 U #7T< NNU"<Ѣ *:<8`vvxt^7 |)ZtxppQP3ÆglWGEpz•G ؅-Z5<$dSH(-^CA7AFET45MYFl>0;;bz:/>:<8`vv/AjD4ÆglF!p`t/LN#+ǣ`=JӣÆglNٷ3j?Fl܇mњSbf2FE?A@ y 2*Ql=z* +2Fl>TݛTW3jfL-Yxbrr2 +vmU5T|4AdS4VHj9Fn`R#7Fn 6ʆʙjͷ0;;bOٵT؂Ѣ 3H6 Af߁b ۪CF@T&L6TSVo*yP&jݞtxpn@RTfm[Yl4AE@/6 U #7T6"<Ѣ *4TT0>Pٟ*nuL-ZEn#5BAE@T|՛&Hf G د+NBY"vg6'0QPdG'ڳEn4FC 3TTmG ؎Y hS'ٟ*- *^=* <|Ώ ZFj8yʙf~ S'ٟ*- *^=* <|B h`)TP199TF( mU6h&xTeH4h~A??fSf2f3M<ɚ 6ѹ$ QP H>T~~ٛuCGU3EnԆ`} ACf|2۵Af3T@FlFj("3 L3jPP3j~C hP&An@TS4Tb R# *fݪ 6ʋN>fѢ *ySw3nٻeH'[y PP0ly!z VG7yS'ٟ*- *DyDTH(QnΏBY"vgʙTj6(7AFET~S4VHjhR# *OٵT٣̙?Fj`|~CnͱVlϙ**۳mmPOa{ *- OٵfR# *fݩ SdNQxPP)ڠ4AE@T [ jR UHhS4VPYT^0>T/5T0> y!z VN!T 3M,3lCT|wdFj2 r6BZ(6 ÆglBQnA2HjACf|dFmFDT  qPP0lxT^F( Q!2y R# *@A CFd3fꂁ`RhQvʆ <|`\QS#\_q?c¾W r PlT1C4UU [C^bWGCT1DThUPŒG,6nV곆 < 3jvg6Bmq d!3n|6 :lH,ڐȍٷg#*nd$Wl͸,ۍњٵ lݯ<$dV-5i ۝Fj3fg GCnv@L}f͓|pv|4-n}6T0l`CFHh'-y6,vHȨ7Fjd͓tf* qdm`(Tj(6 !@PPP0lB`Q`(BUA@Qnxd!Ȍr6HC,GPQ[C m<-}`88bY;;b<  U2glGኵc? P۳jOٵ nr>>Al:s12qB u vhtdDGO6l n8yCv7< d!;;C [!v#7k7x||t8lt4fxd!brͻV&l-ٶnձ " vg6B6 {F<՘{T7<jXVe6n8ys*՘Vg6n8ys*ՙ1V8lpwgU2bX8lpwgUV8lpwgUV<5A@PۋP^T  Ql͸?y ʛ!3EA@ACf|2LPA;5A@P/fȈ"*l>vClݚ SMZ3T͙gd6٢ ёE>0T&L6T͙y vhtdDGO6nVꚳxmDTSEJL>f}<7Tњ*Hȧ(7AFET~jnvClݚ SO!2y3LfcMA;5Cٻ4ELE>T  hջ3LH-ۼ܂P8l b6BTH"3T~PP0l*A@PPP0lgڢ ݚ6BTH"3T~PP0l*A@PPP0lgG ֪FEfDf5f H(-Y* j eH6f_h՛G#/j*yD#@Q6׵@  T< NNgd6٢ ёE>TSEITfꙢP jADfݷ7f7FDDyS$dDGO& њ*?y B0>0T0lٻ4A2"#ȧʙ#""<|`)0T3%G >TF ;!nn)񂦍Yy1!2hϕdO5@d`}7f7FDDySGEnTfL6TvmU6nV( PϳfȈ"*d)`R*22fٲ(񂡃`GmD""<|2"#ȧʋ MZ3Tњ*Pٟ*#C7f7FDDyS$dDGO4AhQxR<ݢ Pٟ*#C꺯fBhոhF[pBhոh皐ёCD jCF?? 84c5!" $6l F[ ('J$?L&%$3)7LNoLRMg&xŤ&.%3?xFL^? ?Ljoɿ?xdKg3&~xxx"7gd&3&9Ujxě3gL30£&x_La/doò7==S?$~!WisſX4!~D=cߺ&>b4Bd`FI2g[f͇ ̑f~ ?1%U7$أ9{_Iqo=72oI??=qB y_0!~#%z7ROŪŒܣ7(fnnY|ܳ7,9gw7,GwpWsr|w}nU&nYff7,#7,nYM;nY,ܳ+;);.;srܳLܳfnYӌܳnY7,ܳgwQr;%zqQOk⢟'tE0t3tӊ?n7I>ӊ? Żӊ? 6pTYf{ӊ? ZpʜTYfHӡӊ? :=8̗$S? =9*TYf"8%zpmN*,8EWjqQgMTYTؐ5Tأ؇:8!iN*,/P)E&j4ظS?=iEuUMTYeKzPS?=#jqQg礝@ӊ?=S?=&jTY@ӊ?{ )E-tWaqQg!e#(2JqQgqQgǹ@*Jf%?dl O=JCܠ%?@j o$H@@BS< OT%?MRU OM@BSrJ)&T%?)&%?-@CPb!) %?h?ԅ OT@ԅ OTYT%?tL{ %?tL} j& j@P3MH*Ԃ%?+6&POTmiJʹQTOiFI6<6adm?wFL6C6n #M9 ʹ1i ijʹfO3`m1鶟fzm2fB69fH6rm3M2Y #m?wC64O3MfmĬOiTmؗiVmج6bnmذ6b=6C#m?w$m?šsm?Čm96I&~Cm??6bK6D#m?w$m?C6bOMfOZmUi6 Mʹm?wOi6#m?w1=$iMxmziY0Of~ mOVmOOf~06M=6 !iʹ$im?wm?zm,O!iL6xC6/m?~m?,OOL6m?~?+6Oi_iʹKY_iʹ?`mOOm?~?hm9mm?e96m?g<6鶟~?ʹmom?~?ʹ4OğimcaOſ+6_iG!i*6/6+6,6gʹL !鶟OF~~O߲ iiC"߲G6Dcm?. Odi'&~ OѿdiO~dK6BdL6f~ȚmWimL6m?~|Vm_“m?WO>Tm_if~gm?~|nm柟06m?YdmoϏMom?]Cm? ?>!i~?>#iăm?796M-<6鶟?>ʹYߟF~9m?>ʹu4Om?|"iɆ~m̬Oǟia1ifOʹjʹk f~́ fXh&4Ь٨V?Z ~dC16Mh2lCC%j±(hRͫTTlLmdٞT̄͐hRř R=IFxb؆ٻ4F,OP-^nb#fm 3,Q"# ,XH!2Oڳg6n .V~њ)T~ y ͶXv͸2 6h܀͒2 6h +qdmڢhCMhVctCePLL f- kmD""<},۵lt4fٻ\R9fݫc6D7kBH ۝Fj3f1Pq3B66ăF[p,<Ԇ~~ bAHhȡYj͑3fq8s||t8H!3?d f Zaf5n~ɒ2+dԏ#4!̂fYn1nd$W-5ĭ nvxd&-ٵDAEy6(hF &yڢ1CF@bH"3G2B5>bݛTF(h [ FxsǛ!1nͪ" +ٱ>yH &yڢ1>y[ FxJ H@[j1nd$W]sǛ!1fٻ4(hD &ymCF@bH"372B5>bͳv(h [ FxGh[!v:1CF@/2bͳv'7yw!"<|8C'7{68lpwmld7FE?A@ y 2(\g (|ͨj`txp1 ユ'pp8Z!2  F ZtxpVFַ2,ŭjŎ˼R+\b6\g[̍OUJ1UVfַKZbbd`32,0.dAj՚+pɺ 2*f1 dfH(7FjCZbb30FFJ+\ Zd 0  3xihd320.]ULFF+JwV11 LL|JPk [+5fѢ *иkdb VL4AE@Z5@f/yDT ̼VՓ6͛kAmjͻf^Dfi]1&ar VdFkZ F<pfd2 #5O(mCQP[AfkC!#Zf7FhC hhg5@fnІѢ *Ѩ6͛i1b~AEdŊmdb VLdFgmd*rq2G39f܀u푐-ُ^n@f|XQY1b|51j`QP 6B቉? bhŇ(̞C;fFj.k6Fִ2x +&,V Tt͢3V Z5Z LL|N.Fjuf~&bɋE~+:fqhc!- &&>$nChkC?1b~AEdŊk1'lۜ 3x0EC!yиkRȧlִ23R3'4AE@ZZx0EC!h53'VLX 0;;b7 3d:?;! 5FEAϖ_bִ+ƃdVkZ |Lʼn+GA0;;bj q2+5pXQY1b|f!z VN!Z | lAjɛf^Df_ jͻf^Df_#Zf l|ADf_pfd2 #5*?f0? hTm +&,VZtxps78jиmf,O(Z>:<8`vvq6f-kBᯊYa6f-kZ |ͨ rֆCO1b~AEdŊGG ؎Z |O٭hbXQY1b|d3A#TBᯊnGZ8hͨ rֆ&>fqhc!-hbi(+F&>XՓ5,nTm֌L|P՛r TQdkL|Lʼn+GJT tf|bceFkG&&~ر>f~ Dn35xks1gX35Hfik[ƣndb4"C3Q125ƞVgK[MB?+ZaT12ơRnbbb3]ⅭLM^jrU~+ZfjUk1Vd3\1< 1lͺ3V FG͘[Zb30V`h4 .9ۭnb4513CtFl[nb55ƞ f[5tFakO FƭMj`spщ6KLV ̗."JB-ndbj~11]Ⅽ̌^jrƋJwV2ZkU3*F)ZjjUk11\g-b#!nd65bksCCSA+[ M^jrjE/nhbbb+[ ^jr&KkqSn515y3ŭƦF)Zj35y.3ŭƦfXhj~11][M O&+Hjj L|kqSCEXlj~11][Vj~3Xī[15?* O#1nbb3] 5VZfFk&^^|8C [2<|| jJծ]tv;X55Xi╭,5y.X5JƯ5VZ%*Zl+\hfbeeyiձCs6BZ6V`hdrַ|RfjUk2\62Jc3W\q+[5VZ%c/n645y.   8::b7 pr/<ŦG ؜1 0;;bptt- Bd7880:<8`vvb<8 sÁѱ.:<8`vvTftck[+511xks#S!,Z*4W[ O&&+m&bɋ#ml(mٵ H'ڭ &&>X? jfVD&^Z՛D73Zbe 3'VLX ;!nn)иbc ̆Ȉ"6nkE(dІ7FDDyi՛h A2D>^՛Vyc$CPEo+y%-?ACf8fْC?RՒщ POx 0 hAnbc 6M'E 6-kVmڐ F&>Zi6nr e1b~AEdŊm6[3DF nh\1113̆Ȉ"-hGmњٻ4EA? bhhi6[ fٻUp2&bɋᡏ !- &y樯"3Zgd>yh֋Zbcf,O(Z>3xqdmCo)F&>Rbc(kF&>Rbc(F&>$< gţ,; щ/:-љ3Dh7;)"12{D3Bi]gP۱d@y#C3Q415Z憡Pċ[MO&+NW\r~-n65y2yb*O&+PUVlL^jr*̆k&^Xbb [Zk.3ksUVYp145?B#SW\r~nb+\bfbe #cW\q#5//b>c%fU d>>Al|l`akx|8ČMLks##W\q#nd35y.21RFf5VZC5/,FgkO 2y#3fC%kxnvxv+[ M^jrKfQgG ؝3hչ 6+O YLV0;;bptt-V`txp^t<+LLi0;;bt͢3V6ַ4x@vz8 X5ZbeEF~$Z*4xksAw4Xj |!ZljUk3V64\hg╭ƪ^jr@+\d4.43v#tf5S#Vfj -,0V`32\f Z5Zhfd`32\3j?Fl܆hfd6[CC i%k mV FF3!r Ѫas" V[VMQV j,043\ Zd hf31+Xp&Fj8Aj͓tf04fԀE1fdwn5F~$Zjfj~hַ1 AH |kCO%A3PF&>&A3j?Flhbcd#55>bͳv'7yw!"hhi2B5>bͳv'7yw!"hh4Ar3PLS,7bŻ͐^Dfr43O2 ^d j|śfPѐy+Ȍ֎F?.Fj j|Ż6On6BEŷי!g1nͪ#盼Ż͐^Dfr41O2 g1nͪ#4d-l#5-y&yڢ1CF@bH"3Z93xGh[! G&k>Al:-|Z!2) QB6kG&f$l>yɘ6yG#3?l7;yG#5~fi՘i'GLCfG ؜1'g LL8::b1`x898Zd`txpyљ'GLG>!v< |:-0;;bpttn1:^x: M 8::bZ50:<8`vvZqnpp88-X`txpxpNc-:<8`vvTftck[fC/-n435B3xkq*kq*xBaUVXq+[Ư5VZ勌ƞ-nh+\d4.3x;`vv{D3BCVfj -+0.CysQ fF3%6f-kF&f3%YFjnHKFS%k mVfCQAlhjdVh +&(ȫFCZņk23T$T Vl5!4V`3 V#5BAE@ fɺ3R`3j@fѡhd320.]k[F~Xbbċ[]Ex'fźSQ4Xj~h5][ B-n5Vj~h6][LMO&+ks1 .9fݫc6DΆ훵Z LL|Lʼn+GF>6n KB቏d7FDDyiڢ ݙ͐&yS5~&bɋ!fj$dV-5h.CtdDGO |Lʼn+GF,@f3W7f.k'VLX |T tf|41FkGƆ>.AZݛU qGg)K.^<#6T%K.[ R˿t?ʅeߺ r*Ywʋ˿NpȎyPL].<#*~}DŽuPN]qeߕeAJYwbܨ'K.H2*Yw@}DŽu rYw凹P,)nT%K.J*%~%xGQG JYw*R] :*R]JR˿?xGQqGpwDŽuN<#P~(P,J~~)+ʆieߊ@CDŽu@duP9:ܩbYwG*5K. 2:$:Y,K.!2e߄ G ˿@du * R˿@ ऎeC4RGQBeߊreߊreߊxfGQT3K.XGĬJ] R˿fT9K.Z<#\?xGQ%:W~.4:o~.qGADŽus^<#\G :˂<#"?~qG<9ʅe߄d:0*9K.#yG~l~||]FB]FԲ@Du9PL]H*~̩Yw!3*~J]HDUP$K.%uE ? 9СG1<(&GԑW ~/:Pz>qG)P0RI?Z- zGQrbYw`G`eG)e߁ G`~?*9K. /~eG)e߁~G~GQNs:rT~jDp*$pm˿ 7x xGQNx~0.G#K0 G'K.` GW~yPj]&eG)e߁q˿@TIe߫qGeG)e߫a~*!~ſ K.X+:Շ9QYw̨,aTCK.O>#Ou@$] , *9K.*!~dFX *$̨̃, *9K.D4g 2K.hoYw@yYw懹P ~h@#@,B:Ơ* ˿PN] zGP+u bYw]G bYwIie߬G ]GT,K.`hGQP,":/uP,"~6=ʅeߍxjGQٯG#lDʅeߍH?̨X]|7#l3#lbYw`RGQT,K.hu9T,K.hUH?Zg ˿ZLʀ]|r]GnTYwH%~BT2*Yw ? 9P-K., ,,Ԉ)e߅5$Re߅J]X u H]X2,@,QNTJK.* ˿59Ԉ)eߚZZYwPeߚu H]{eߚH%~9Pe߁NTie߁Re߁T9K.4ʀ*]YP,nTieߛ+ʀ},b& ˿6 H]7Ԓ˿7+ʂdjD5$ ˿7 j]'*əP~Yw® ?^g]|Yw2,z,-I-,T"YwT%~jD׸Ԓ˿^r˿ UDгRKK.-a]ZBYwhrGhq,zGQZ2bYwhEʎR˿ A ~7(ʎR˿*9K.n9Tr],ʎR˿܀GQ{~7GQ*9K.nuYQYwt@#n~7rr]Gt̨CK.p[q,ueBIJ 򣔲QYwTr]*9K.p*9K.p~8$eG)eߎ 9QYw*9K.p r]~zGQk!G #.rGp"Ԉ)e߅ I-,Y R˿?j@,VAK.rIie߰s?2#v:aT eߎəP#Dx~x y, #GQfGQ6ʅeߞIG*%~x ?<P,+B:T,K.1SH? EyP,%*~p~2YwR:ER˿ OnGQb*~GQbR˿ @ڑ~ r]bGQb Yw1G7ʇ)e߆ K? AT9K.1$u2bYw*%~>3ʅeߏrbYwX] ˿2bYw*%~>%BIJT,K.|"BIJ^T,K.*ʅe߁P,<=ʅe߁T,K.#BIJs ˿T,K.YP,QYwTr]~| rYw8F-3*9K.^Tr]1nTr]0*!~ψ?f\GQU\GQ*9K.[uܨ,e~~D4>?;ų,+.#~)ʎR˿@Yw]:*9K.eG)eߐ,5ʈieߐp,[3*9K.*9K.[~D4G: U\GQ$#eG)e߂@n~ nTr]$YQYw?ʈie߂Aib 9.#̨,H{urЅ9QYwATCK.~ДP ({`P48GaV( tP0O ~ L ?TW w@pnTt /oK7@p}6T=oCo<&IFK&3Nlm|#qb/96fWMb;Coᚮrm3W Mk9ɷ͆(f=&38 drm3!im3G&2Fm3yɷ<Ӏdfo/N1  =8 ɼf"3bW+6SMU#b_MWY+9ɷ&Q,9ɷ#Iq!96āͿiMGͿ#soCHO96=Ԁ mM%@mM&e,mMq"b"o缠_96z-Q\H =YMe Ϳo2 =#eSo礎rm 16zK&Io96zRMEF+&!)so+@ٷso0Vx{M{Q-Iyɷ96y;6{MKԒM!so5>267o8soi:so9_`m~)A)"ԡIhm~(H @\{YH%6?=CoR@6?i6?GGl#)nm~!ٷ')Ro)bm~ Ϳ.`m~L) ɼTm~"gRm6ȯd) %^m+6_,6g 7AIL2ICܤdp#dm)J6ɧF6D )dI@AR rsoI"^mo쉚yB dM q uII6m>+fυ:o@@~jm^lmfq}AcoH > !ɷH26|@ԑM4mlmR  6|Hԥ>rfmσ̠>6|6|@`/( Y@26|LmCoܠ&Ϝe6|"@m3Rm)86̯)f)BoŹH`mf_٫Ԇ٬Ԁf6w@)+?.wr?\ "qw~] ?./ x_&ҎB>_Ottt :]?G?GG9OzyOu?OoxIs[q~۠>t P-,PÕ~2.)ACc G' OG~9kx!A3_P2(ߔ|mB~Pߔ8a@(<矔\PNyB?0vy@}ׯpg?|~P8!q:3?)+O!W )3c 2'WI?AKN)!qg$N$?)$pAH,aĿR #O:ԟwR@?Rߖ~?RD埩$qWAg9Ԃ-H07A~>ԇ&H3ԓ9AC*Jg?*+9PT-ʋ* 9L8_Y*/p_ *oP?*sP8IsP?bV_+3?u.~V3Y#?+xeX}_+eX:n8CXşp ? x"'H_/ă'HéH=_.i$Āt:ĀW~X_,0q'Q`Xy8Ab~Xߊ,!qg偿?,JgiXzĥĥ?Qo(J~% 9gQ~%a?yWPˉ?9ROw(y%]FwwShhO?-WZsʿ-[߉O˄sN9w߄Zp&\K.}8\)\˕.Yʿ. 8Qp?. (?8Ar.!qgN.G_[˃)/-C˜uwH|wğDNUDğDn'"J SDG}?A>)"G6@ߊufg,#8r3*# wq7 Fʿ~WFFO4&#$q?,埄a~xAFş`ۗ~~~W=gUHQ!o $#A aH UH? giH :@? ~sH xYH!_@y𔯅߄sJoSq?+%\n+~89? AQJrPe:y5?3&w1ƅOAoS#_u?Sѧ~4o?o!hH?ߍ-hp-?ƀρoƄ-h4( Ch__SN*7[5o.-rqO扜 ~5oRnGjûԁ~5$rơ~5\{ʿIB?~*j8Q3~_(G 9qxWƜ+`-$1o^2`=_a_~6eؓ¿ WqgJhOB2i ZyĿ Oh8_&]փUQOw¾U=r߮\\|SX)_*` YXyc~(,!p/X/[?O  ~.$,&,q`?xPj?5Wƿu|jB5"pcsC޿PA 5&85}8-G?8~ 7pq.8Bq4m{0p/ #~:W|6-_ x l8,ߥl8f6͏8 l lӂ̓~?1]3_ 6\ 6Lrߛng/ns{Ï&ݧ"~n߂o~Dܑ=pp7%>y8y={|2yo߯?? 8"y~8z? ^?$pcgŸ׃~EoҾaZ[iUZ G ~x-<(gQZGjg)n[7Uʿ$nr|M)nI⬠qwp_?,?u?.U~8xy)p x(:[WOO?8rG.~W{prS6[]埅W? >[\_'.3).>W\H埅ygpy ?ש.ܯC (.q(cgwQ{ry?.,rĿZqGߔ9OO~9B'r@t}ʿ:H|~ʿ82-v xAEE!?8Ï9Wrg''u~Q! 9$pA-! 9a$D.9&AAB/?~_~q/x k^Ӑ .E/G迅n^I?˒? Oo^ pY𯀷o GßLj}''eÏǀ90 i`_O> }စ/oß20E YoǢo~=<E?Ǩ"zs/Ǥ?.=z 82uo~B~:o?:sO[!s/W_I| ~D._&p5\*p'#΋sW"_49@*w:&w:t;#u:Þq?YbsĿ'ܷĉ߆ A~^)1UbxAbş |Qşx|)¾ xGo > 8|oſ8eߏN]7ߏ"|-~>Ip7 &p?ž<+81qx2"k<Ӂ~~(%pa&s7122G +2R*w?_)u?{?G?B_S$&wޟHzЊGBSO U OO* IL嚟dq'9ONg'!tnSN :p'\q ~xCN~*'!aߌ 8M~0񀷁o?.`ߧԉ{O"wD4!u~r<9gh*((__w' { 9G@eu%ûyQx=?p𤷕~&|IRÖ~.%)C必(MRF!~ )?߅ ϋ? I| ^~~H:%GGPe*i~HGQ~ST'P?  q߅D[Tgoe|M-埁p6oOU\& p6o p6ql?6/8_lu0-_||>6g4߬qߘ0s_~?0"sG_sߘ޳0xI}Ÿ ?0% 0e<_b[|4bq?O8~1C-8b?$n~1$R<2+ zFY?*dğ#2$7 R`ߧ+`+&V0?Vo?V=?]O"tJ?VIyOS;ģ:1qť̂Σ!(ddȑdI?2yGDS6u'w?(N(o=;]M7w}7N,o0ϦN,owGpWN*o |ӻʾ=ޝUzwWw}7/ӻ>cӻ>w}7קw}7Cӻ>N,oN,o/N,o&zwg;YY=;wg>ϦϦzwgDY-M =;cӻ>zwgF^Y&ni'p鿼L]O;(o|O;(ox/Н}7s} WGxEBw.QLr?'y_M~WSN>S8Н}7tBw.QWSN>i'y_M~} WG]O;(o}tr?aҟBw.QSN>2} WG'y_M~@'y_M~tTr?!i} WGª} WGr?$iާН}7sr?$j} WGr=>+\鿏8tr?֟Bw.QN>BEO;(og]>+\鿏>SN>)'y_M~>+\鿏]ВBw.Q]O;(otrȯtOO;(o<N>!nН}7JE>+\鿲/5>+\鿲W>+\鿲Y~Bw.QSN>&psO;(o쇺p&Н}7A} WGd{;O;(opN>&rȅUO;(oSN>"7z} WGdHSN> P'Н}7D@Bw.QBw.Q } WGd 'y_M/P9Н}7BН}7D@aO;(o=@"Н}7DB>+\鿲q i'y_MM>+\鿲L%N>Ptr|W&SN>Pr|-} WG>UN>~PN>ŸBw.Qϖer|oSN> O;(oܡBw.Qσ,O;(oǹABw.Qψ@ SN>Li'y_MTr|:Bw.Qψ@r|HBw.Qσ'y_Mz} WG>2%Н}7(tr|WO;(oļ>+\鿟YHBw.QωHGO;(oRSN>7)SN>uO;(o.RSN>fR{O;(o'y_M^R i'y_M)r[>+\鿳U>+\鿳/@O;(o!>+\鿳YNBw.Qٛ EO;(oe Н}7B}Ȍ G O߻ԫ>Ct s:Wstҿ3}Ε/ҿt sSt_sҿ+0+ɯҿ>J}ΕҿҿW_J/ҿ:Wt/ҿB+:Wt+_sJҿp:WNJϹҿ:WP:WP st-:WP _s}ΕW_j+s:+3}ΕJtP+_s>JtPCtP_stR+}ΕQsX+oҿH J :W)s{tRs"w_HD+ s q:WRt+ >J@"+%:WRs$_KҿQktT.}ΕʆҿQtTn+>JO>JD_%:W*[tT _s >J@D++ҿYKtV\+oҿX:W+tVCtVsstV7_HZ+ҿj+_HJC_H:W$>JB;t$s ҿs ҿ s + s*w_J*}ΕĪs(V+@t%:}Εį>JVҿ6}ΕĠ:W_J_J s(ҿoҿ+7t'pSo]N`tt?O_^wfPQ{_sist^Z2}Γ!eϹit,r? 8qCWI|P$O?jQo?C{7r7Ou$kI$9h.} !]ٻ #iM:GZ93--p%ܠ?ZHRw>w(N #KTo7;9NKDwr^wf7?x!}Γ@E}G0}9#pq @jR^)& u$+7u?\Lr'3?dg?+>H"Y#X>?hjARD;G6#:Ge:GRw>wPq  9v ?>0uW;9Swf?#9}ΓҼN+}ΓN' st[?Utr t?NHp#}Α:GZ9pԦjHsu _s@N#PYG;!ݛ{!/R7jNt?OoB^(Ăwf?f(B}Γ!ℇ?P s@.}Αt,r?G- _s?u!ݛ_,&@=v ? 4t?OoP sRBwN/ɘ :Os@+}Αt,r?1@8填rG*7wN?RN]N8t?OoRN)u8+%$HWvn?x:OZ9*}9#=Ԇvn?RnT&T?AW-ӂ;?鿉IspWJRBwNoR=}ΓOsPespz%8_>HZ 5(stGC{7tGMʋ'OPD]=;K?鿉pWL)ԐӀ):OGit,r?C- _s?$Kp G@#BԣϝӃO:84* 'OA {Q nw@s'7 4ԐӒ?#qH6}ΓsH'-f@7W- _s?:81*ݪN8"iҮw@s(=BwfGK :Ooɘ:OZ9s5}H)Z9?nTRtuvp\MRML_sy!]ٻ ?#$l'H#b}Αt*t@:GZ9pw- _s? Z8U'OQ9~s7G@!jHWvn\R sbg/?T>H#b}Αt*t@:GZ9r >?hjVKԆvn{?T 'OA)~Ŝ bHWvnwAt :OE8@H}Γn(B}Γ`#}Α :GZ9uX@- _s?I| ^|/CHowfqi7*Ip&*_snwf#WKsPesB?hj\FԆvnG\Kʁڤt?Oo^_s^wfoӃ!>?hj\ !ݛ.@T? ps7pRBwR sXBA}ΓLI"Y#P)8qCWRٻ1*Ipm+Do!pW"<Ԑ =:OZ99 >?hj"q 5VT#ݪNbNw@s>3 I :"3tI&Ⱅ:O!_sX:GVr#t,r?Ys5}H=Howf#G]O; 7Z9SW93p'PSşMEOw}7FL!şMwxqg şM3oϦ>-\Y6e>-\Y3@SşM3!j>-\Y2FP[Ow}7<Z};[鿆dŸN.,oᘇşM3r};[鿱+wxqg(@QYg ~R?`:Wt+ϹҿOҿϹҿ/ҿt,JktA}Εsl+ҟsr+w_XJϹҿ.}ΕŁt, >Jw_X_+t,oҿ_X_ Oҿ/}ΕtOҿ s,+`P+b;t1}Ε1}Ε~+` >JXJXF}Ε\+p@+t_ _s._Zv+Y>J֏ҿҿJ >J$}ΕŢt-'J:W spF+Jt.;}Εҿ>JT+a:WI:W#t.t.t\X+Oҿqt\:W. _sOҿp&}Ε˃_-:W. :W._>J_ _sx+_">J:W_"ҿD s+@(+@:W*+B#tSt>JD+a[ts>JtϹҿF ssst}Ε0+}ΕB_$ҿH:W s+t_$kts_$ҿJ:W B_& sst:W '_& >J0~+}Ε`(}Εg/ҿ_PD+oҿҿ_Rt5}Εt/ sxsxv+}Ε:+}Ε}Ε_^+_ oҿ0}Ε_ :W:Wҿ s0>J`>J`_s0_ s0Kt:W}Ε?}Εȕ:W2NН/9XT?9'P#M} ]I 8m7*s?.Go?B}Αh#@/Y#N- _s?E8#57ǷjDAP'rN@Ԑӎ#&d'@m:Oj'Ə?>Hⳗ~Z9P s5}H ӎ#;IrPOoxpWh}!]ٻ4(}Γ!`dOɘNP'~Z9oÏZ$\C{7tghWj?ʏrΠԒpb\{!]ٻ N7}Γ:G s#H:[t'''%:G` t?;t0sa:G_}G`8qCWiRٻG-$`Rtt8+3:wZHWvnGK}:OL` s(k7c8qCWpRٻGnMv:@;?鿊 !8+7q!]ٻ>ttg~Z9r*>?hjp!C{7wO#q^RttZp(cs7I0&>ݛ/>HⱣt-f0p 1VV]N|B.u#h8+9Y!]ٻ#%h >I4>I&`hl'@/Y# s5}H9ڐчrn'OH,@*B{D`RBwoh#W g #Hh>HhO?w ?ttd ]:G o?O?4/?`hHL#@3t-ft8填rG67w ݪN?2J ΁wfAƏ?r?AOÏZ$-Y鿔r?>G#?hj(sOw}7$ ioϦze"};[鿞B:};[鿞N.,o礜mOw}7Pwxqg=>-\Yظ>-\YE@;ӻſ>fPtwxqg)H_sNI?J Q:W tA}Εsl+ҟsr+}Ł:W }Ε€t+:W/+}Ε'_:W/7}ΕsH+s_s^+Q:W/w_1:W K_sSts>JJ+tJHsҿRϹҿRSty:W At s JR_*Ctt +@:W 2+D_*}:WeҿJ >Jl:Wa{tҿϹҿJ}Εv+ Jlw_ _s6'_Ct`.}Ε e:W>JV+@}Ε"t1!:W+At1t2J 0+>JX}Ε³'_7_+6}ΕН?Iz~R"c#I o^'?0:G򓌵r?+ s5}HRٻ?# n'O@LHE7+$>ٞHWvn+OaXv#IZ9,°?hjRٻAڤ ?)Ys?Oo+_I 2A/ tVN2oV- _s?C{7x?'-T?{\"8+{!]ٻ(p>Ii+}Α-fV-}9#7w_['qP鿔esjsYp N.,o rOOw}7 %Ow}7e 'Ow}7uUwyG Oa{tjwyG O`:?eFQBSZtǻ;OdG,@ӀQw")oiª;Ob twz">G"FQw")obZ=Ti~Gӻ71Ϲ3Qw")ob sΝ;CE?MI/NTi")obGD 8Ti~sfiE?MAt j *4""3tuFܴC")odT8 ;=")od\D5-F\721}Ώ 84:?N.~1}ΏqnQwN:")od>G*ӄ5wt"@ }Ώ;qO }Ώ续*4_E?M̀085ӻ")od_sN j4?~įYH_sN !ĂOU^+__s tn+g_+×_f:}Εc_XJ4_f>J0J0:WҿҿJ1 :W+}ΕG_:W37}Ε&Jc_͛tf:W3Ctf s0d+s0 J`N+ϹҿR+ҿ,}Εƀ:Wt4t47_hM}Εƀ"}Ε>Jth/}Εҿ:W4;}Ε{thҿҿ:}ΕƠR+,}Εw_s;t:WX:WXs_st6C}Ε:W!:W_lt6_l ss_spswBw M #@]v:u;7s`7Ԑ0`OBY#u^Kp^7w&j,Dӎ5"k7/Zsdq!]ٻ?`OkF/?BY#0ÏZ$C{7xq!.Rttdu.@APZsNwfs֞>H -fIֳ}9#P{ S𠓉 T?ڒ7Z8+ I 2A/Z s(0'Wԡesɚ[p®7w !6Rtt9R)MpW*<Ԑ-&>'k`Ok\>HP\P#Y \:G\h#?BY#8qCWRٻ?#1&@n'OAiH]s%=jHWvnxI -fp/ÏZ$z¾Xڤ IRj>¾wfL@{i:OMp_sR}G^s5}HjC{7xXݪN7ӕOnr~d1(ԐS^0?5B#,r?G ?hjț U񚬰 ]NO0ԡ\ ?鿊I:_I 0,r?B<,u8qCW2Howf_TnН~,r? sL48填rGrşM>PSşMvKS~sOw~*)oG9Ow}7#ܠoϦ ))oϦz)=ӻſ>Čtwxqgx<@N.,o̤0ӻſ>W,}jt3ܱ}; M/( };S鿩ltd|{wBwtX=wRG?鿱U"şMH2%?Ǯ?^PAӻ?>,A}jt,mwNUWOw}7 -N *wzŸ īwu$0ZI' 2]wNa*I'/)>)\Y؛J};S鿩X+KS y`wN M{ Ow}7!XK}jtt'y?M5 H}u?MH儷ܖ@5 _OdIH?N鿩 t'y?M}wNN鿩,7*]Н7FMʄtA7 ,%:̯*.;)o^T]wNB:a-%?j/T鿆jHN鿩/,%:2ʇ7t'y?M3 ;N鿩3,%:*ewBw*S4|; ORM o-N32QwBw*S0*tA7 OrZfLʈt'y?M3&eD{wu"'7 ,%:3*t'y?M3Lʁ};~ORnXK}jtUe@7wBw*SتʀnI?~{rZP5;)oXe@Hu?MHrZPNJ~PԀ~9a-%?r);)oC nԃөoJ2[KSbKʄ{Rėt_:TWrZJM/T鿄ܰ .ʊ?N鿕 [KS ]Н7,;P~PArZL, _O w*O*a-%?qnNJ~`ܨ!:T儷ܖ@// _Oܨ[u?M_rZ{~/T鿋ǹ`ʂOөo@k,%:NX _O=]ӻөo@o,%:x<GwBw*S,;PQu?M^XK}jt2]wBw*SVeܨ~P,%:HM _O==ĀӻO*[rZ+Н76V=w*4:TmrZ{!wBw*SCH wrߧSʇa-%?xwBw*SDQ@ _O ]ӻ3~P 儷ܖ@1(UwBw*S% ʃөoAXK}jt|]Н7>yLʁ7eܖ@Șe _OLJܨN鿕G,%:> 1(;)o|bP9wNTөo@9rZؔqwBw*S6ģwr ~O*ya-%?{Gwt'y?MJ;w*N鿕a-%?ۺRy ʹz2 6ڢhCjͣY@ !r vmB 6fȈ"G,۵lt4fٻXvL[lݬn@f ͹tf 3;!n9fnІvͨhͫfcF[DfD4c>y 4@Yj͑3fcmq d!3L[ nեw?d f ZG쑚#6q+ + + Yfc2hh# ~+CA;;2PUhQj֙*2Vbh: BAʡVڴjٚ(Ȫњ^: ll2V2V2Vb1T3El6@b2Cd3?`ٸFq47ǯ7 FCr6HA{ FCmPOa{ FKϏ#![܀xѢ *ZA??f2^||xѢ *ZA??f29Fd6/6npժ3XDfFk3hո41̐#ÆglNٷ9F@:f`C;nr h$! 2*'f}0;;bj q2+8Tfm[GG ؅-Z5<6{ FGG ؏Yj2:<8`vvr͹͛5j2:<8`vvq6f-q#h(-#ÆglGH-!V2c!V2c!V2m d GZV~AEdɔdѫ65f7D>JWY\]qwz{QZ[jp<`%}ij>Tk'rOQ)76f_}}/3!=`p{PNBWOy5}/|b?jfjm?_~1}4C|H&ɠ;NaVtZ Jv91!U ȄUh|a)a1!U ȄUh`L{o1Dj&Ȫ4e/-PQLV|rPxU]'7f1SDwD7ĄɩсHPC^J]|FM`.|DMqRcI4&;!0INtft!m`~r!h`p%". d hpR ʃ5U e@Vv rbDEZ.UkBkRkԇd #:ہoNv%8(dHΖS\Se@vj:}R8$#{HiC %dĈ]%܈EPI&(tp`8 Dv{&-:cR/%dĈ]%܈EPI&(tpP=) C[:lHLe G %AoETvqVd 65 2ꡍIVLHEQ-ȄUkOZ8+$HLjA Ӫ5! -ɉhJ"TI>J>ܱhpP $HLjV-:c(&-:ɩA1""IDB*I4C|H&Tpe,.hI);鉢Bh|dԇgAti#&|E:liD%&G|BBm1ȥ0\颢j|g`;=(#!!'l%8v ; 소d0tS!SӝuuуsPN:rr8lD-U($HL\60<4l¬Fjq`FEʍR\*l v;p(#iP0JǨcbJDT efe3T G d\&j1"KZ.B*H5MqQ4\M`Mu,>ؚ!$DwKNևneKHBR2qӪ2w ZtE"TA Dw"kA" <.KNX%DR!A$oG|B&(.|D>*쨽i;`Bc'#ۃfdm3-U(RaJ8N#"L[C@>Scۈ-l !8r"BcP T1`LH֋) D7j#!\|M>"nٰ)֐iCx%DR!A$oG|B&(.|D>AZB#1:cNa1"KZ.B*H5MqQ4\:}r iiCp$D"$Q D%Eψۜ! SӂU iȄĉ-h" C|@;5Ds JDcNU ibD]HUj#!\|M>"X>"]|F&>K&϶&o=W#PQQOϿI);鉢Bh|dԇgAtcJ`I!1!+fgAM ?[`Z=h}V" ȹ B6%WqxF" 04-l!6}e#`6 F:-m @I"tHF"TI퉢; Zwp@F&>K&oz0G'OKڢ ^f=u b*)\A==fъSDwD7ĄAtLr)L>4bD -U|? ']V"Bc8aVH bD@Z. 9MLFQXkN94>}4C|H#~:P} b*)\A==f$s81ZuTk)hn3xvW4DiF*NIML&=1ȥ0\Bc0>"c "&ȺK,-@\/$L\hNc8F%PIlm*#0[hv@+*Z)2c>Cl­i 䵡蝳b)F$6͘U$u9ML#3ֈhp'l>/l¬tచ#KEq=W#TqEDhF?1RrJhbh$)SϤ&$D$JLv &0L"`Aˑ;`' b~& 6 d[rLgs}F%PIlm*#0[ hv@+*Z)2cٳ 퀜NKZ 6(Ɍa*KciP\مY1"GZ. $ #:}ULT&>r!b項i8Є$-HB*I4>}4C|H&TB&N '43DD3HъSπcqA퀂jjh ) OzӫĊ:uEPI#~=?188dh"?b`] 16rB=1)1"HZV'V!tUMVS9XF ,&"`thb6QFHKDz:EZH흒$C`\5I$Zńq:ɉRt@"TGKI$HdF*c*˔kN0I|Dl#}"a::ɉRt@"TGM!gd#e3THK@X4>AӪq+&$IKEEPI#~=G ɳAFPObh3̔&9 *`aul䄴GT`j$&hz GZuNjvYɇ]'ȹ;GO, g$%=h"v !L)Z LJӬV!A$# ֒.6vGl"6*֒*;#HXVمY3V17l¬Fjt[$CFjn -%`t 1""IDB*I4G}0xU(188dhpъSDwD7Ąɩ΃5dAM>"&(BЎ7"hu0EZ6F &*DpN#&2b.NjBpX\``t4d&1) /(^u5תϦ/>t.KŒ`.c[0:z8L'rsTCb:|bF&X*' `S!)N+`,lDÀ)@pF%Jъ v&ȹ9LBZHG؂*퀛;D m:q!m*:Bt66 .ԨFv;h:|ce0F5G6 C+N$D"$Q D%Eψ_ɡ퉢A4G}0xTv8pTCyh 1Cr)*΁~:|miԨt8bD]HUj! Qhtu[c]iԨt8$ĉ-h" C|@;5Ds Ӫv6<;n">ӪTLH֋) D7j#!\|M>"|R7PZӪ#ɮHĉ-h" $ԇd #0/ZuP:|` &#$D"$R%CD7Ăh`hnPbvFNOMrG&$IkEEPI&>K&϶&o=RӪuだp և i9u >Jt֝SLH֋)MH|MlM ;z0G+'?M2 ~}V%:#ZvBJؚ!$DwKC䥧T@>0E%I$ O:Z8^:|FkCHp DTD0.4X_GO7+"i8 ĉ!hG"TI퉢A4G}0xUpW M28fA#S}9%4G}1Nd4"0\Ch*=:QҳST dh&"9LVBZ.ꖇ.NOwVbD]GZupEPIL h`iQ8 Zt&$HEr!A$#"]|F&>K&϶&o=Sa[cv2r*ևB :g:O=Ķ*֨G qN&+.LAc U.RaH@LLZTZup!A$tLLZHVl6aVv76aV(0HbaZH1-U *`I:LH EA:}Jiólt@68 ci"TmU|=N:;6OCVS D!TB+NCtRObqh{XQIKNh}"D9`)ɩrh֋=W#'&NPęRc śaܩJ> &>!&>JL(|DL(|EL(|FL(|Pd‡Ą‡ 61[fe3TÁ3l­ibA9!hD"$DwK]H'!1 U`kV50ZõXmUv Ƹٳ [$ԀkV5MU DĂrBq9bYrP܈EPI>:FC`AZv k@0مYrKGO~;N,^t~~ԀrT6p9$ Ӯ "rh"ƒ:ԈtUr)Z!DBx1rXYI BPkDj ;r--Hb1L1LR,LST1L1Mjbb1bht@LSE" TN:BenŮn-H' nxRxN)L(|P00BaCaCaCaC‡D‡T‡d‡iL(|HL(}10cU`kSƵfkC!kSƴ0ZA9 k*ևUNуfk]H'!1+3l­KFfR 6 0CW$ńĂrBq9EPI&ꖇRӪv3aV&$B*I4G}0xTCI:PuֻEc8مZ VEcf*ևBhcRfk]H'!1O0ZVEc*ֻElNBc'qkV5 UIp̤A:29%˿T?J,!3ZDwD7āTLO S9 @MhN;!) VHIHR91 C*Hj, d *)\t!~:tv&AfІ7DBEAf>T#!$i4>}A;4*Lr)L,GZ1 c0fk]'yj>N0ZQ j>Oc0UItưaV\5IN hR(O*$0ˀ:@4Rq4#Ӯ7 ^\&@;_E:߸>Z3bDYsӡv\%*`Yqh+E7 ^#ˍR_,Ue21xlh$PX㮼 -.Un#))xb\&8:\ ysr+\Z I-n*κ2*%Ʃ/?1lb; Ζ#H*:XX$6aVu1MUvZH'q`ѳ ZH'q` (O*$՝te/xs.,KƠ0bA`bh|bhDGHTML#`9uȀh00>{Op{O$ KEłM ;z0V1&l¬F$I$ ,"fe3T )4 dH,l%t2 [0.QI|:|I#n?0`T1RrJhbhMqSς$d&2+fkCgd&19l­4 lVdUg@6aV=;!1{fkC6*l2fkC gd&1+l­h{El2KfkCl20Zl2 aV=;!1aV<@l2 0ZնvBc6aV7ç aV=gd#Th=,c d6aV<;!1D*ևLc6aVLHr!A$!$DwLc 6aV=vBc3fm0b*ևLcl­h{[;!1@e bDl­hx5&6vBc6aV=vBc*ɉBtD"$D7Ăh`Lӹm " jO֝/#~TR|㇑:|h_JLC\*8"$ؔQK@?I˔aj._s˜%"cYzX$$T V=!I|t`. hE!K(.˔u&h\ l .}1HXVD.T0%L %" GHXVD.Ts`UHXVD. /@Za+$ VjD Ǥ6 /!@܄ $"M;T `+/z*5eKW1RrJhbhDGɩ]|FM`tZh5K $JSπF\`Rt%єî1 v0aV\;;$#^7\: ^`5:\]*˔l\ -)m)p*κ2R_,m%"yr&@^xkM(G*κ2R_<AlLHQh pA$8,"#*&(.|D&|E&MH|MlM ;ze/1 fkAK( 5k-x)EYFPRKph:}uKp8v /\"(\: ^`uιлc.6aV\5I|X"pKqx \"/\:Fuю^`t D2#֝h/-J01l¬g$bDEA$tvm\ĤP.UL>܎ZCvx\D9 #T>5!Zk̀ג4"0SπcbEst.;!/$NÝY gh2scV0.QING^ Zk8&ʆ .ahAHG`C&;E!)2}4C|H>0&LDG$"IpH"JH тXhq[TaV I``HF h5laSU:LHMu,>ؚ!$|4&L?" a@#4AGV I``82+F h3l`haV QaBF #h:l`h6aV IaMq%N+FSf`3K 'hI);鉢AC&>KMu5*}i VI@H&9 8&:/T;! h3GZ+Qy/Tl­hzi:@fk]ų CvuO`ٳ whՐwGa8R5lv6aV\f2 '. d_`CfgG VQ^.mU:fmzrb@h^tD"$R%CD7Ăh`艭:Za.0Zt4!aVDJ9$) N^VvJ ΁.̤AZ N͘UyA@h,Zq$6*˔>pbhzBc-UvB:\ 0ٳ &B&K>+fgGIjEƨ-U:cTfg`C*ɢzb@h^t7"TI#R%CD7Ăh`hz:cT~مY:laaV\ι%с!Hj#vN%d]$ Kl$ևBTj*cȍUv 0 0.P흆1J8Md_Ԉ$ZSl­kj>)aVvԀV(|svMU(ι`bsTyr8M !$ .$"bf /;5 V֣֒*OЄV-$UM]Ec aE 0ǧ`/ 2 6aV\_5IQl'`4;R(Iлc-fe|& V1,ZHO##E.Ute%" Lz=Ph}Gc e [gāx - ΑH BkRkԇd #fgGH"v 0Cl­iCJ-Up^LHpoNTDGHT:}Ӫu2! l­ $6. f 2PnT-0>$!:BZ0l¬Cv Rbp.$ l7:BZU(}; Rbp.$KZNnt.ŨMU(}흆1J8Md_%#6 Ӱl 1kU:ŤF*OTM)_>#-UC*Ԋ9u*֝T10; *āz*pEPI& I#R%CD7Ăh`S:|G*ΏujE:B*֝T1`l¬v00 0&ɉUy`ޜEPI&MH|MlM ;zAԊ;F*֝T1dF*cF*֝B"h^/EZ. $_ɡ퉢A4G}0xU9KBN pMJl@x>ݏ#&A k9%4G}0 4"s1feF&@.nS&1V9P^*֝\&$I E9ML#-Bt!6ZB00! مZJKCً+l­^kUr` kb }iִ=:ۅt!mC0Y UKJe@ JsWp&`V~vM yhvҢS>cfk]*%-ak yVu˂Lzt.׍10Z֝kC٩..K j$ Âг5Lbpy 5I| V2pLc0.Q+\TG| 퉠Sbvhx*u6aV<u;`JمZ - fdgaV<@hpNمZ&- 6مZӫDRb@BuTDGHT ]|;|~ D7j#!\|M>"X>"]|F&>K&϶&o=Pp" `J̏aH B##`HqY BZvHd#XR P\VBf1h7%1H&l­')*EQ'`$Xfx F%' ”`8J1 VEhZ0.bb@3:Zlbw[0>$T1Zu*֝T1 l­LH@.\H Obt[b v EZlbcfk]+CرP*ֺN!-a#͘Ut*ZC+Drq LمYȂ $ D%Zv9Ԋ):lb .-dG\Rv+R(\YG|U D#1!ZE^,'b(U($Ekچk4;zԊ):lbsfe6 4ekA;fVQNp;zoлcU($ծkqiط^,'b"u˂ TptH>N D19 "pL" 0> kQ0aFju΅!MU! \ZtF*ьER" FN % 8&ZXcfcې.#0مZӪ12[fmDRb@BuTM ;DtCz(:rzFq醫QʍW(:H#~nyY%8f 6lb#!$-:^KC&>K^Hւ 9$ -x/'b+;Lr)L>лc+-Uk@/v+N~+. bv%Mi^N v'`:\]fk+'Ӫs_.*. j# ZV!-x+'bv u΅Xl­xZa8&^VSh)p&`2lkAKV h/'y;_su΅X ZdxZuNv ť=Kw1"HZ.ȄUjCh|bhML#~9?E:Af M4G}14C|H^K7RhI)R%hyT5,@p tslb` -hy XfmhyVV$aV26aVM B v100&VI1 b`0&"G֒c3fmQhu ZHN9:b`l­G֒Nم[aZHN9:b`Bم[aZHN9:bcf*햣I`م[aDZ$(:b` @-hy'`CJU"2H@pN8ca "%- -"λMU c%*pICKHG]J6aVHBxمX !(8Z'Vv1+*pI!j;@2juġ[f`8$hyV뱉EMU, C*ZD ST[0$d+ZAb Xuʄv*pI)iftuʀ,مX #PT<* ?:e@l¬hxTمX#V:eI U1RRj1Q뱕aVc*6*pc*6aV)hxDZ ]\مXBb"]|F&>K&϶&o=W#V9C?x| RbL1[bͰT%PI#a#XLI *mra*HW 6,Tk Voi*mra*HW bKm6ùR0A$xN儏a1%¤m6ùR0A$xN儏a1%Jc śaܩJGL(|;L(|P~PPP)0000ZaC  LL(OaV=]q! [$ODمZhĐVمY1 \NG"TI;zZH҃=VE>6aV=]b*ֻElNB>MUv:|I6l¬NHZ.'# $=W# r*#GcL4l & RVq!hysA\JBc >8NGZ:) Oj=[eE!Iq=X VF.\;r--H:aVU*L*S ªª©zaUjaT00=L*S©0D N4j Unt%+]' 6 @)*K][0ZA9t:"6aV(aVLH'# #zZH҃*Zhu GO6*K]+l­kV!ZمZhC*ɉutr!A$xU? eF$TF6p9$ *:퀺1Lr)L& Li'.)H \'EZ^!*BD'S'!%y)!X VF.!ېDhjG(eIb1bb5iekSSئ)SD32b)Juι:hШ-huOn-H'AZ9;p '&e!Hv:"r)NP0:aCaC‡‡‡$‡IɅ lPPbaF:}0-UbNĆ*ֻElNB>0Zt9mU Er!A$#.l­kV!邦*ֻE>M0&$B*I4G}0xU9\J>u 6>IBrjB1RrJ$-6c(+@T)9!&:NB*cuռTRaXkDjHu÷ ;r;rԎSiR¨0,L*L*L*VMS S ¨hU:L* @A$]FhQL'BZNr` P;p rHRN:vG)ELR1Kb _ &)|BLR)1K"bT/Ɋ_%)}bĄ/&)O>l­(T*)>@l­kV!$"6aV(= bA9hEPI#-GPFv@RhCaV*Zhu VمZh CH-l­kQ% [0&$֋ȄU=W#1hCDC &$V­fw*F$|,&$/LaVسl;# TGXHT-LaVسl;# TGXHT0lYʑ #ru_,$ *0lYʑ #ru_,$ **mra*HW bJ1[bͰT%PI#a#Y//Vl~AjCvoZ!? `DPY`DPY`DPY`DPY`DPY  'QYІ^НEE?C>T4WxS6*? nT~Q  ySW:|SRWssf' "gCO0UCV/j=D *CDT DT6Gn~ho4!Cٚ'QQOϕ'*j5G o3j\ 3g犇760TS3@m TS3LhCT3T^x\f^xmHagʁG秬3CyR~͢CHN*fCmU+*|ى DF'*;DE?fxV^uPlABf@TP* Btى DF^urQ") Q,4T8`rPͪֈJ{PP* B3h~zC ]EE?C>THN*>? AD;uQʂ{PQl QU ڪu PhhI_ŦGCOŧQaˌ˪꺮2긼T0 7j­P 2 PEUmUjVa* 0Va* 3Zpz=7z~3h^Bal6 avFpÃ٫ΏOڐ]jYB?Cug.@fȍ>fpCj4/ ѩ fv4B -HF&gd]j1j@M*?,/ :R"n 47x bTD4B EC1Tr'"4tZ3j5G: 47x SF`ͫqvev\e\e\e\^ya^ya^bpqbpq x~9!"3c78umY;{3 #W :*pCj4!"gC.TWwE TWЉ8^⢿Γ5PJqQ_Ĵ⢿5t⢿ 2pTW8'2#'⢿pҜTW5y9@@Q4\7 ?p (rp ?8uGZ (̝@@QHBz@ ()C $c@@QGP6P P%@@QČG5?P.=@@Q (f (d]Jꀀu#n3 ?nrl`TS3NnrlF1YɳA7nx٣DFى#o5?xM23?C?{,796bppr~Rh<Бr&hGhuͮX=h~ 6SW!R+Fhf7B<9D`6m 6hCtD$'P1@`M١"ڼ h؄64ԍ 1Q7Dh3WbtDR66^iG(H ) V>u 6>ģZc ѩ fv4oڠG") ; 7Z2fG'j<֘CplqZ]jmy$C$t/Dhhxm 2y֨n3WNN<͢$CO: &x֣sZ2yD#7^fםWNFևf :Z! ; ;@nfqj789u&m^t~~ԀםWNN3j#^uε@Cu (up98G yP٫Ç^tnpP1[ctD3 G^?DC Y▧,!yѹε@O'c %?3h?Dj6jnpP5(Gδ NYB uLAAy֋0213yZ,f^T᱉kKZ`f0[K2~%\1ŞR#1W<33yJxsgs&h.xhfB טp2 W<53 pz8 P1\ņc:796bppݚ*#GHh.9X33f0Xى#cspqyqɳ@yr< ,.796bppr< %Znrlᑻ4TFYya%\񁉚W<`43 ,* FR חX6^cRnrlᑳF臌.90Zf`qɳF!sf' G3e M2677d02bx8.0.796bppݐp̸ى#csvC呹\b\nrlᑱ x:@xxpl>͗ M2677d7 x0 C!"sf' &dn KM2677dax^ln4 188dlnn3aɰpع M26hf |s23xfօ׬/1 VJc37Z/^fʗ<313 s1X31ɳAqFKFfFmL Gm,OOY fhk,.21./f3j2h&\љb)\7Z/^yyhjb+ZdfB sFn/^^fxKZօ׌/xsFn/^^fxKнyz.xlօ׌/x" &kFmV!Cu R4Chn3\iqȸhd4nfhظhhd6fѩ"ypiqzd6k  R37Z/^3X`ak F sc#0lak LF sen/^^xK h^y񁇃X^^fB̌W fv#Be1qz3 ٛB7O,X\3 f s L/2,23=,_e,X53@,Ye,X,Xk▧'<`322,3=,_e,003=0X˞X`33=0X˞X`bfz`.yaaz.ya.ya`jhgb!1LS,Cu ם\60y# &KLLCbY<@\0ASvh.~3p^5@lABf=uU2dzAC;dpj QQOϗQAח"L|Bu . h#WBfj4IFH(L"FX~|j3y# &KQPEE?C>3!.,Sd7 |NDA 3\5xH< ٴ CQQOύh~ͪS-Q-ٍHagˆ?^u7舤0TS3QЈlQ5 dvɒmTB CcD 3WNَ١<@\go:D 3WNَ١<@\g,ڢ ^f=u b*)\A==fp^0X'QQOς 6Fk|J5ȫ 1u qn3C>xb5Et3g,y# &KU,`xxr~|OOY\,y# &KF>A8f֯4hp^5m E0x<ɑ %#EDhF2dzAC;dpȿfQ<7u~`g^!\LH(gl. 188dp!7O$4μAj/ 5Ȧ>*AD;u1u r)4fdC\5y# &KA&N '43DD3Hp^5(# :QٮE,y# &KA188dh"5xLH(gl.ى DF'. ƾD ;fn3\h|(^Cu D ;fjr^u7^" PX_d!6b*)ٵ\g̙P2\>12ى DF^up^5y# &K&>188d3x1u p^5Z~͠dz>DA 3jbȈ$&l4tf41rŞ*Bu v f~Uf~S̙P2\>0ى!33_,Eb 5ȫ<ɑ % M2/ם՘r*C\g 4xn Ӵȫ pgD ;f`u7 x7-ΠY0Y&G3L TnCmY,YS") pb 3=t#<3 J#C1yh`gUf^T`3-3 `n9`͗<323VyW<4XfB,^ce F /J熃37Z/^h+нyz񁇉<4,_ h^z>)\jfBV3т)\lfB ט>pz8 \y,3uzC#E(j~ ysC31+213uzxB~ œ˞2x<~x < \օט&\3тŋR! חX`<5/3=,_ VнyzZ熦gRօ׬2^ck/ FgsS#3т%\jf yZ熫LLZ熣c3тVg5L F /2疘cE&\3тFn/^^`x,/нyz#yaz7Z/^xkX^63uz W <\Ņn/^^x,Xօיx> h^y񁇃XffB̌W <\ņ&n/^^x,X43uzF+yb#7Z/^db`a,нyz#,\ŋLF /188dlѢ#A!6KV,,\nrlᑱ tى#csvC rsf'  fˌ M2677d=`n16967\3.796bppݐ29dnlp188dlnn32#seBsf' !^9 3v#xȸى#csvAbRsf' ^6 Ãa&N džnrl8\6._&N4hnxs ,xs  ZEX33тŋvnrlᑻ4TFY\r͘bsf' #u&N0\ى!/ /ى#vh9!\,\#3тŋ 8`=̇(oya`\QFGRv2= d|50f˭P3\xQN]h|ȣ_2.E,|/?Ay@zz͢`g'.E[fhv@\00ƌP];f`a論<ɑ %!63B!!:x/,ӱ"g^h~|oHctD$'P,Z3t3\d3# o0h|.yS ya 16k}KCXv@?A<.22A2 Aypg'.2 fpg4fBbpg3Cuͪ`gG(gA j/,Y&G3LE?"(aVk 0E?" ƞ2%\񑑘Xd42猆gsKL! 2нyz#xj^fB֯21}sUn/^^h6^dcՉ&tDR㑩SaVkKˆf ]jF f fmO!-.21./hwPPG.2Z\iq&qECbcᙀjdpԼf`62Z\50^vAhњy D5FE1zեF+#D3Fgo"4!. ֗hχІxhf40  FfaaW<513=2_KX4Ô$TF˂v>DA>hAE\ectD$'P,[&G3L |6!"4x6>\x< 32dzAC;dpaδ!˂;!!:xa̙P2\>Xha`;!!:xm匙P2\>[tDR 3jph"HkS3\ xp~A>\ x<~>f~՚`:v4nQrp: . < 2dx ̎\1Wĸى#csvAt< |9.188dlnnn`9CE&N M188dlnn. ݑh766-.796bppݐf<6 sar188dlѢ#A!5  Jᡁī <413=,Xī нyzW<4нyzF~xhօט F~ X2`~7DE!9 ژ?C ڳ\b6././Au"4\4X\30./ 5?xl\db\30^њ*#G;@\4,0Z\db \A==fpȹ`f`5/?<\4 KK -3Cx/ ~h3.֭.21^ 3;y pipfh`\`^x#Dh~|8?hF06fЀ#bf`\30^ʗ00|٫ΏOڐ]j/,yӱ"g2dzAC;dpmy˭P:v7DBBu q2 61"* 7 fp`NQA!!:x\jo5yr(y|" 7DE!3h3h拂Ş2dzAC;dp`o 6?>>f/;!?jDUg"2KieDŽeEԁrYoH6K- R pj@,j@H[pe1ԦÏ?',ԁrYoGxFQ]R Yo%IBYoB̦[j@,(:2řIZYogYIZYobH%&/J~&xFQaR ,]H3K-xAYo8ԃ4w?xFQ<2׏?xFQ5#(P 2BYo5#(RU?exP32̤V[>pԌ|YR8|xFQ@ 2ZYoeR(K- H?R%kG4E e"0FQ@eyH,YR+K-VR2hH,.2H% \[D!BYoqG \ $,[q$SR[ޤ>K-xi)e<@[F[)JK-x8ԒR yH E9H %JYoh)  Qr%MH%g@i,23FԒR35$ )eZ,8])eA$[$e 4[rV[)ie?41@[RieSR4Aԇe ,@):Yo总R[2ԇe6ԂRtK!Yonj):YoR jK-zR RxH,zyDgn%?O:#(z yI)e,FQ jI)e' #( I%,H?7I)e'#(9(pp)#(yp$GR 72n~n ,ptb2ޤp~p+Bnee!BYo\e2,e (K-$e= eFQVR%pЌU e;~pHP[r)G) 8FQ6BI}H7K-$ԃtLu ,ޤryejAYo$}H7K-?ԃtIZn[ȍen[fUej ,nu ,́ehn[fAYoᘁeb& ,3R  u ,~>G@GV+ş ~N(Q8Gx}lP<P(Q$ ~ءGxE ? n E ?  ~!@G*(4~I(4~@(p ~^G| p%( G(kqG* `(Q S(Q >"~ " E ?)4(Q I0Gx2(b3b;GZ(Q!PB x5(56(5]B(Qj?@G8 ? @!G8  ?d ~,PF~v ȡG/P@"'(qHGAvPG@-V(Q  ~tM8G@pR(Q{Gn ?t~DFQe*JR,.C4H,~K-)V[س)V[SieGgGfDFQ)V[ DeZYo瀳)V[ie$K~x "2R,nDe*f)U$C4ٞ2١DeZYoR, )V[.C4[p,YfR,⬥ZYo̥ZYoNR|?eDe)V["2)V[e* YHf[F"X3? lZYonDeierieHf[pX(Q7 E ??H(Q7aBY>BX,"R(Q#4Sf 7[FiR#4p?[fLw"&??^M?viiƦ_ E:qYfUzpj_fS]9jǎ?64q٧N H\vi5"ljGO#N ? D-8i5%q٧EӀi5jNOᨑftZiWd,ӃOq٧EKx&:O쇼viihid@Ԥdf"O"> ? ()BdJԓd"q٧B6O|vimIBGdɧ:? 8Ҽ:/OF:AN?y8Bif΄ diBOB&N:x/'ƟΛq٧I|viN;4꼠Ji;4Put4Oq٧QrO\tf$jUt?OZcO& 4&4/?ۮ4Ӛu3Obi~Ur R:4?U&~NrJi~k{A(:4? ef@ 4?G (A4?# fPi~Hi~x@i~!uf\i~"pE7,4?%FHM?9y54vU֚;س?FOe,4v( ?٧9CCOc; 9󳬠94v@h/\-4vM?rѧ>P<4v&i쑔$;Ɵ-@+P;5)P;Od@Pi^iHF5YΠ <* ? u#OBO犵3OCOźCO熺?1ԑM?u xiíI34xO-I>N <">N ?y8 ?5$3ONH4x dM?p08& z4x(34x$esO牙A|04̫(f)ԀbH4V ;U?:o ;9_z.?qo~?<[ . n<~NpQwS*?pt u !uJ"%?$rLpӕrӖp{YqNy?N@?NJ~Fޟ yON'@ 8IP ?P@))G_,@1ߨcwߓm8$oupu/qǟw=NprѹpQNpa^?'\'o;n_8;?\(WW\&ǁӄq_(A)B/_\!("?((\M@(yGKSW]'#NzԞw?R@?R+I _MR x U?R!p Kߩzԃ.Hp)~_IRY"kH)W!o7ߔiHs)wH) cH.DNmH1 ˆpw˿*,ʅs=Gܟ}ZpW>"w?)=e۹>߃"珿NiDyW 瀯$D* e_&{D0Y__ 0c~`?3 #7J߁Q%7`qa#? $Ŋ?7îYb7'Xń~OS- 9W|i,ZkG|S4+Z/Ũܷhs=8DNN{'/2|s KzQ?=G?%ré~K~?:GbOڮQwS_w?&}UGtE->*Z鿺#p _T}7I}e>*Z鿺ۃ}UGtHjfƟ@s~-Q@s~-Q[}UGw9WM~,_O9ʿo\kO9ʿo|SrŪ>q}>*Z鿏3_T}7->*Z鿏@s~-Q!_T}7iJ_T}7O9ʿorŪ>NSrŪ> )9WM~6_T}7N>*Z鿏pEO9ʿoNSrŪ>#SrŪ>?ӀO9ʿoN 9WM~!q @s~-QZ}UGTj?x?O9ʿoSrŪ>~@s~-QZ}UG[O9ʿo}UG; 9WM쫃}UG;}UG;rz}UG;Uz}UG;W>*Z鿝(_T}7pjvktjvN}UG;"_T}7Ӏz@s~-Qδ%_T}7}>*Z鿝rŪ> q=>*Z鿝,_T}7.@s~-Q=>*Z鿝z@s~-Q@s~-QAu>*Z鿝>*Z鿝Z }UG;%j )9WMDTjv"_T}7PO9ʿodB5>*Z鿝tjv$j#O9ʿoi rŪ>Pe>*Z鿞j _T}7NN>*Z鿞 2qE>*Z鿞*Š}UGNSrŪ>>*Z鿞rs}UG< 2pڟ@s~-Qt}UG< dz}UG*Z鿞y8)9WM𑓀n@s~-QG_T}7'>*Z鿞Y;jxJ}UG<2@s~-Q\@s~-QlŸ@s~-Q y@ޟ@s~-Qn/_T}7#(9_T}7̠rŪ>>P{O9ʿoʲZ}UGf)tjYO9ʿoe _T}7}9pP﷧>Q@0w@ON}+w_0}g_l}+MWҿW}+Ç_}+÷_%>Jo-Wg_ҿ&}+}+D}Cv}+ o }+Oҿo oҿWNN}+o'_@WPJoWP>JoWP_&}Ưҿ8W'7_NW'ot_}+5W'opopf}+o_P}+_>}$}+_F} ҿ@:}ԉo!d}+ҿw_IWR_Hҿd}+&J_}KokR/}LoW_W)uW) J)/ҿHoV}+MW)R_H}ʊo_d}+o J@J@W*&>J@%}ĥҿ\}+Fҿ/}ġ%<}ĭ_o*C%#>JPW%_J;%_J_oC&N}+OҿS&>J`8}+o3ҿWҿJ`W5W+&WqWo MԫT?C]m`/} ʵ&W6nd`OI%e?&Xh}'I #o_7}G*Ԯ9$0}#ڐ9sH #eT|:N$e`n|Q]sI #<o_7}GjB75O:H {QmWf@O#o0xIopox>H #< o_7}G]sHo?:9su&W6ni>IH_oH}',f|@1W, o:8+)(T?>9FӇ6GbSOP8A oOX o_7}G)9O^R.T? NvGS'jLlӅ1H0}q['o?2o #AN.sN7)\N]GXG+74H0}I18O?ȸ ob}#@}#ԾH #NR|:偻?}+R\ٹ ?$Rtp:8o7|G>"jLl?ČR o`w?q[>*oqPHG@G G.}@A3}FǏïX#!u͛['\N NE} &+77? O |}'#I >I*}H}#,f|:1uw]sI0}'E>I #P)uwR\ٹ Fk˕IƂ 5}#?鿄f@ >3I͛$0I #x@S6ڐ_ e ܪN5,ӒEX@?ResfI"9}#b?V>ImOoX}cV?2on+B}LF@sT~-(o 7ïq0ӹşJ!% )qgҿS5>,ZWQN};Y鿆Tw8i_ Muw8i_ CM@wOs?7P};Y鿆]@qgҿ5SťM5ťM5rw)qgҿw8i_eŠ};Y鿲dZ};Y鿲/ͩqgҿN@ޜG"'P s;`WC+ҿoҿ _oXo[w_!>JWJop}+ҟov}+!Ko{ҿBJ WQoҿG_!W_!!W@W7_"V}+FOҿD9} W_oJWPJ+}! W0}+@W_ o0A}oa,;}ňҿҿJJ JW_o`9}Š- oi{->JӇ_Z|}+A+-Ϸҿoh_ohohҿJoҿhF}+>JoW-;}AZ>JoҿhOҿhoZ}+ҿhJW-OҿF%}1cOҿFoo}+`4}+`W(}+b;W _o#}A o>J"ҿH oo o6}@>J)c_%\}+ҿJ@}PW AC1W IOҿJ_%ϷҿLW _' _o{_' o}+}+\}+oEҿWToKoFҿ_Pn}+g_\J}.7_\Ϸҿg_\_\L}ɏҿ)}H}+_ }} >JdW!C_ _ @ }+S@}JdҿoҿP&}w40WoܪNŚrF @} I͛pO^Im oP:}€}„( o'ܱ7XP|:偻?R\ٹWğƆPRtpjy:}@3?鿧$a@ ƌu&W6ni?}'IOOoX}cw,f|(ïX#Z@ԅ6ni_ZHʂ;I8Co7<(Oh2sNe'+ O^}'E’w?)HNc7oR>`n|ljB74oğƹPWr: IN2?FocI͛#w?R?R}#$G)G RoHHo o^7)ozw^HEeGp#q//}6.sN1#*[r:NMOoO?XIE,}#8o[Ç, o5!u͛ğ7*&⬜MPk? &W6nn$qx}#b"}}roӐ1Puwp l=ߕIĀ] 2p=o7I/_oqfğ^ oXGp#p{J|:偻?;ԅ6nn,Rtp?>I͛cOV'?&?.ϷX`ht|:偻?`a lI/HW*ʼdg4ozI͛IcG !HhHiG@G@6}#}~}#$}.} HHG@Gx@!}v}#A yGq ww,f| 0r|:偻?R\ٹ/ğǤr: N6g aQ{Oz 5&W6ns?h}#8o0=}H]sfB>T\NdA/''n2s$Nc7oaP}q l$-839?b}XiG'ܱ7>O o_7}Gt@z};Y鿲#>,ZWΑpSťM;ߧӹşJЁw8i_:2N~-+oJqN~-+oDN~-+oBJ};Y鿝ӹşJ$̜SťM>zsT_!>o>J_oSooҿT o_*ҿToeOҿWV`}+5}՜>JYWVB}Հ}+_Xo`X}+L}²_+T}+cG_+ҿV}+i/ҿV_+c;}+`Z}+`W ҿX>Jb_,;_,-W ҿXo6.}ŀ}ٓ_ o6o6}+W`H}+o6K}Jok0 o0ҿ7_`!Jo_o5}%}"w_b_o_doZ24}ӭ839 MӬGT?.VAOMC+79ğX>IEHo?op|:偻?]H]sf6TMT?n8|?I͛k'q?>},f| >`n|.sfu}ʤO ?3I͛c'rV2qO?oα`n|R\ٹ>:ĻI0()?鿩 ώ&W6nqğ doO?o, oB78Y'mFZQ ooïF^f|:偻?U4w8i_t(4w8i_t4iqgҿ.POs?7u5w9?G?nOQs}7/p55w9?G٫Ti?>>G]8Uw;2,ӹ~}7/!NmQs#(o^?7j;GD@;Goӹ~}7Xo]!ӹ~}7X _oANF̝2 Sm8qQs's ??Qs#(oE}.FxFQ`6}i3P]Qs~}7X_oio2/lQseM _oGf*NsFQO9n-F8O`w2eM%F̱GG?,}9Ģ;C|1s3 _oWJop}+ҟov}+ϷҿWFOҿ6}`.}+}+}+WeWc3ҿSoW12}Mo>}+>J W1_Đ}+/ҿϷҿ-W1+4>J@W4B}Ɓ4K}ƀ}ƀWϷҿ _oJDҿkd>JFOҿt}+d_ҿ/ҿҿ>JJ_o(}֮}֏oҿWҿWo >Jd_l66ҿhf}+2}+GӃ;Woe I9@ mߧ7|!Τ? ^oXoR:#q&>`n|(*ԅ6npI(5Ĩ*vpROo6?Z+O(jLlO^Ou;GYc7o#\^|:偻?xi lY'z>% U'Oh H(mQ0} ÝI͛IO.>Hu3}F, o,ԅ6nnIY%IE5*ߧ7V|VResfIG}/'?3]q!G#7k$|:偻?6!jB78OlC˕I 5&6Co\O?65&W6npa/?b"}kJ}#Q ^>H·y{p}#Xc uwR\ٹ_ğ\Jʤ8Rko6?鿖#ȳResfBGYc7o5ϷïX#/ڐ?U@Rtq,חjGVCo!>*ԙ\ٹR:#p4׀+ԅ6np5'A} ?}7#7,ׇϷïkuwr>,ZW:M>,ZWr=>,ZWs};Y鿺HӹşJoOs?7̠ŸN~-+o@ӹ}7^O]@ ӹ}7^Ԁ%Ϸ,N}a%w7 MlťMH"ĢK {o {w5(7Lrpӹ?J+,}bs|!s ' )qOҿa+C\*sp_WoAN};S鿩FV^rʬmsNaWoeVVksNK;o.iԣ~vV4jQOoY@qOҿȁӹ?J6VvrĬ~!')qOҿeo>ܱ9 jU)o*@ԫsRG:/+yϿR)o*Gԅ4j@u?MHyrTBԈW4:J~ Z HOR9[Ϸ,N}Izhu7%@sRORo>ܱ9@Uhu7@UiԂөo@r~ίR -iԁ7 }bs4J.hu7@e%4j@u?MH[Ϸ,N}#"_?M#"w5 : rnX ίRmsNB:C}bsEC_?MHcsN N鿩ۖ'>2_?M&e'W4j@~nX!U9*S ; OR"o>ܱ9B)I9*S &H0:ۖ'>Qr)o)]; OR̭ۖ'>C\)o;Ae; ~ORۖ'>IYH4:J~!%e ӹ7 +yϿļ79*Sb^Vӹ%ORL}bs9VV hu7+4j@~o>ܱ9+_?M'/jH5:y[Ϸ,N}hu7B+'sRo7)[Ϸ,N}\+hu7r;sR?N鿩rnX{4:J~{4jA7[Ϸ,N}5a ίRrKөo%9[Ϸ,N}\ hu7p6s)Qu?M+yϿr{_?M5[ӹ~O)eo>ܱ9ίRbPs)N鿔Y[Ϸ,N}5"B{_?M5"B{w2~HGrQ\)oᨁQ.i@7Y[Ϸ,N}5(os@sT鿆6% iBOөo"ۖ'>˕)oZ ;H~HYr+Ġ_s@sT鿲W@̤ ~O)eo>ܱ9Cܨ:9*Sr̤ O)1}bsYRίRȅ!\ӹO)eo>ܱ9D)oPs)~O)[Ϸ,N}74:J~yXniW~O)o>ܱ9B&TB9*SQ ̤~Kۖ'>H«_?MW4e#өo!V:e WO:e ̤su?M+yϿAίRtkw4e#өo {+yϿ2WO: eA];I7ArΈRۚ_?M菕-s) ?N鿔r΄,ίRt!eLniA7ܭۖ'>tKʏnhu7^T{sNR?:RrYX4:J~+̤~J.Vr]s@sT鿏X.s)A:RA}bse _?M| asNRN鿔Lۖ'> \)ox+;Hmu?M8}bsx+_?Me`WsNR N鿔9[Ϸ,N}`[s@sT鿁㜬 niQN鿔lۖ'>ms@sT鿁l\ӹ_SA>V+ίRVV+w2~O)̭ۖ'>Vs@sT鿁a\ӹN鿔y[Ϸ,N}_?Mw2Qu?MnXhbb_?M4 11E;J_7 }bs hu7q4e!7nXh_?M4A ;HO)[Ϸ,N}4#9*S@Q;w2~HnXh(9*S@%E;HN鿔&Vt5ίRV%kw2~O)+yϿ4:J~h 10YsNR'7VVts@sT鿺_@s)_өo +yϿL39*Sf&ӹS@/r& nhu7>cۚw2*:RFV hu7>10̤oөo +yϿhu7>a;Hu?My[Ϸ,N}Lqs@sT鿁Y.i@ :Ry[Ϸ,N}Lhu7> q0s)7o>ܱ9G9*Sβ̤ߧS[eo>ܱ9.TM9*SȹQ6̤~O)V?2/9*S iIS@ErlK9*SlKs)7o>ܱ9PAs@sT鿀 w2O)y[Ϸ,N}PWOexܱ9ck_?MX̤I:gY4CDvvͫY #Vvd&ga;&d#7P5!y#D3 G^?DCd Vo,2Bf՛F6L!3BBD ,2Bf321d1dɑ CFl^hz zv՝ -QZ{j l Ƕ<3ySPgZv4[ȄTVm.jG O';gF ) -hr 삓#Ӱ#u&m^dxβy֨n3:Չ!d868nprTO3h~ ]; 7Z2yD&H(̞uLΝ7Z2yD&H(̞uL!6GӰ#u'Bdxβy֨n3v:vhxm:uL6:?A?j@d}t/DhhxɛW 2y֨n3v:vhxɛW 2y֨n3vpAhv|x~r8|8#H(N]h|TQ˭P3jGӰӴFCLڼםdPBgup98G ySfyѹε@;!Z:"^~D!ï:78y֨sCs1~>f~՝WhsjEj>u"A2/;d75xxxx8ojF&QuͬPH,ghPH,ǭ:Afgh:+Fhf7B<9D`6/3hOOYڼn0fFБfm^i ѩ m^iOp#GOڼ 3xnC8f6fѫ#$TFb*#Gcք4C>u  6> h؄3qWCoڠG")1=?AgFCb1 F#!d1;j2A?ONH''^Q4UJ,//\b3T`^Tr*Aڡd7Eh~՚c4Tr*3h Pb^1/  ȼSKcb?,3Quͬb1 F#!d1#b2jdb3 :ͨ~2A?88P?DCj5T``qyzF F#$TFщ b>u 6>Gδ!!֧,!:1#b2FCb15hv21fd~? ؜ ON FH''#Qb3ySb3 ^i5y R˭P#my˭P#v&AfІ7DBEAf80fq " jH"4t Чh7?>>f/;!?jD[WŬbnCDCu bh;W"Z-^hvjD3RŬbgh: l͘"Gh86"HH6`1BfvCP!"LКxb1Bf՛4#X6j ūY$7P/"QQYZћF#&hGhH7b~ժ+l4; 4Z?Cx1Bu1tV)+86q#D8ţ7O#Fȧ瑋Tlc )b̄6gfB?z1j bz|汉 #VqW<" bթۨg _?M kVFnABםaBםa՝a&2vT./usr/es/sbin/cluster/sa/dhcp.sAA kFnABםaBםa՝a&2vT./usr/es/sbin/cluster/sa/dhcp/sbinle.txAA kJFnABםaBםa՝a&2vT./usr/es/sbin/cluster/sa/dhcp/config.txAA lt<%o#.םa֝a֝a&)]2vT./usr/es/sbin/cluster/sa/dhcp/sbin/cl_dhcp_importhshg   #e ainorst"ACEINOPR_cdglmpu$-/=DFHLMST\fhv&().12:BGVbwy0>KUY[]kx{}!%',3;?WXq|49+567 L p3@0p43]Y2bu E8 fmkKXɓVIxT|3+.,wmz{LW;=NQsío>bc OJ:"QT&" X> Gl5Tm1h` 5v`-&ܥnc7PphS(p܆88poP 33333333333333333333333333333333333333333333333332 E봳qi6+xd3"zqִ&ܥo˻5*O|XbSglzt3)붣_l rAλK0awnR``;18ԗI {2=J NSe*1c V TcCAbڥF48000=bS2_IDOZCS2ٳsgs˭`cyWk?I4M{tcC!nj;IxTJ-7֕?&6wymanj2~vtƆC!W1-5WrȞ)3 =1j;U-Wb|pƊI4]nucgd1*bV򷹍똌ѭщэ C2W[i]n^1j/-c"z2 xmmcޜڋ 3W8ɚXvǾtcZn[\c}`2 xƞT5=dTDOZ C;xkoהe˵Iċƅ!۷R*|oR^@KfpT2pgWng`c]}Tr^XⒹ;* xoSgI)[ۍm)+⑬6B xwɧk*MJߗ;;цv/%yR|dӵиcINxTr/5vzrN|>j;U.ᙙqڣvZuPiwfҚ:Jct3"mm ]FNSNQ . cWif .Ѷ5Ʋ[hC33333333333333333333333333333333333333333333333332ZZ+ʓ|33333333333333333333333333333333333333333333333333!P=1$cݷ]ŕ-]^vQ$&{{hbd2Ϋ.ސӡήHiffffffffffffffffffffffffffffffffffffffffffffffffff@^; sE eXb"("o;bL7A$'oI" CjfxrppܴCE봳qi6+~08R^7&[Aikod#22NSe*12|3Jhh01Qگ1GZcdսu=FWd3V]og{!C!]( < =ᾓD)T!vkTW[WmGj< AQ $DQHD8w4ę0oxHOߌUi ޜ7ȿ} ]nw v4Y(I*i,6~A~jܧEoD=vvfuϠZ[_YRfSf>m ]0;~0 +Tpv͏hqW4pEk5r4qǓQkG\, hF4hF}\m\q/ʓZS;QLEVDyIxTMy4Dj,)v߁E|\q/ʓIxTڙ7ٮ(Q38ɦ%STyh"0~,8"7X7a5B`34Y4Dj7A$' {tJO&HMRGb{޻FoֶIxTr+ŷIq`Op? !..8ԗImqiup $6~ŁqoGQD= #`g>hmL}YFh41޻Foֶ3%i9QD= #`ȿ ~{x$" 9fvgøv .o!5zt3)Ǒ=NZ6dT'r}J mH 9V{ުAdU5G/(<gzj;U֎֍ޥ6Nm}lZWI.7'kпo)&{αs&D`,F򷮷C:|`3h =lћ5Wՙsfu=/‚'c6p{ $Y2ݙ*j.ܴC#&]ne6x'A]kG\Fڑ;riS`T $*j ^PyyB~A]nwkzi^hWZi^OQcH"+D "HUY#AX#fMp@HlŁ^MmP& 86xFE0O ]0;~0 -P'UY#69(rȞǓRYXÁX#fMh76p{j1q2mdTʜIbAEM<(+LĖ(IX$㸲AEMP(!Ķ.+6=G=oD=v7Wg9M? )i&="P ձ.tcy]FcZnܳ \$)gM526n 8w{ޒc(U5.tcMI$D(rQE" {r ^7攽rSg'3cxqB봵lcI1*cȞXAWif .ֽ784ٺ\8#I `3~-$ǠPjph7I$D(rQE" ]D1xߚ<{mLyh1n/g}'1_:1ρ 5pw=|<{mL|z8AEp*[bu>nŇtɽ x5(+(IXYap{޻KV8qB4NSխUv .of!O#:oqiup $6|, p? =lI" Cjfz)OpܴCȞ~tcxX]y4׫ɼi&=SP=DAb,nR ݃ h/J5/JK InX)=KůB,.ڽ&ŋYTʜIbAEM,eN$BH Q& nŔ$ ,UhB{‚BH ǂ$Ŕ$ ,x,Hq7֭{ $Y2ݙA>@~ܴCȞױnIэK c|z8oc(U5 wk>^P{DAb,nU5xw h/HFMkףJlOSvtƀرi&=SRφ#ffffffffffffffffffffffffffffffffffffffffffffffffffC!(y5pr3q N^T{1b{_BN6zM^Tfǔvn vK:WǽZқ3Qگ C9ew{t2ۻY=I@Hc>@IB vkT<ƮFn;{@!bH* D$)易& o AH,P嚣-ٞD4r ^7md\VSg'3mGjAqos)9M:1VZ; xvtcm $Y2ݙA>@aw-~hEe6}o6|4y[пAC;_:1V qavJ7L IVI1sE8bH*I@~A6l_0LzIAbH*`yzW|YS(&$$ ARx0#xiI"&=x4BxB{Lz DUR{<(+I1,IVLa|$' I$D(rQAUSWp]D1xߚT NSgΌoK ^3/пAC;_:1V qavJ7L IVI1sE8bH*I@{+<#? N v]vtcmܬE|fǼAC;_3RR'rNU+F6~AH,P嚣-ٞD4] h/D.+)^θR9hNmkZJ mH 9V|OL IVI1qeN c)H=H,Dɨ:tӣΌl, a|$' ITe3UT4 .oJoK - [Ηo:1{ $Y2ݙ*j]D1xߚ!KAIlэm |ƅX/ӶΌm6xFbAۻY<0fffffffffffffffffffffffffffffffffffffffffffffffC!^gjkY><[m2vR+)>N_o$\Zm/F4pv5Eӣ8p"IXIJ"C v')j8\N 2m}&ݿ4<0)Υ6Nm}lZW"zS;^s5%yRfGUVU4ʍ$D󊢚KD M?W1Nnu#X%y/(T\Ʈ7YT YT*4X A*i,AH$q4 \9Ņ1YiʠPʦQĐUqTSIbA#?W1NimOgpĢކuD o8*Th$D'UX$HhBS}r0>7 DÍGUVU4ʍ$D󊢚KD M?W1NimOgpvd0ߎ@#*B*eFATH"yQM%"I&46'a;2|n|oܴCo8*Th$D'UX$HhAsOnR{;%F6w,iAȞyÅ<⨦Mƛ, i,IQ E4 $8s斞u6V&#yR|+Ǒ=Om/&rx ŕ@UM2E $<⨦$GB~b' md\T0m-vcMGUVU4ʍ$D󊢚KD M?W1Ni.*BMm``8w,h,=ep2S;Rƛ, i,IQ E4 $8~b' md\T0m4+^840ҤXd$D $M"ƛ, i,IQ E4 $8Ҿtc|Ť$BGb{hэ7cڢjtcMo =]YT YT*4X A*i,AH$q49h=:1ʠPʦQĐUqTSIbA##I 1)܍bk 9xT^/&]o*O[N^Mo^5TznH/&eZIcȞǦDV $=2D<)GCm!]FcA0@~-TLIAkLyNƙ7Zj5Th67@ĐTc@4ٺP r{ʓC:C;QRN^ N^Tt37Wۗnۃar}+l!{;?t2ZZQ&>P=1$y1!UAPZɏ' uvvE]}3ȿ/4wuݭud333333333333333333333333333333333333333333333332ݚ'gUgj*Qz!߀`3,ID(ēE!xd !>~0ߌv@ĐTcjzbH* Xc@#ffffffffffffffffffffffffffffffffffffffC9fIc}WWE'/ qe'/*L?]gj+dfǮC;_zu+ܬ_zzt3uYu : -PN-q(Qkl  < -dǓC:wk;"ήj _Ǘvֺ33333333333333333333333333333333333333 ]ٯyR|Gg]^v`3,ID(ēE!xd !>~0\m;EG,$E4Hhmfu—j6ߌ9,3c+\U.Zo֎8Z+$q4 kG\78j3Z:\? 3Z:ѥUͶjfKDOZ,)vl38 '#%6;5hsGȜy5+_BڙQև [jfKDOZ4B0R^7&vI" &֋[jgkųZ:\!sFjцֶS8j3Z:vkG\- -TLIAkLyHbѮڣD1a5Naa+;'MKEfb7Ly>^1.8ԗI1͎Pʕ8DJY3c5I? ڋ Z1q2E0E@U1$G<8w6wMhcgvf,13%i9ŔAQ$OAbG KP)5A#P)5A+$q4:A,p*L―UkA(=A\X1HOAx$" 9fvgøpw`Z!Z^l()"w(+kdZҼ̗ފD`wk>#V=H,P ڙJ"zQD= .-$ 8%e@ ZĐKoAx$" 9fvgøpw`Z!Z^l()"w(+kdZҼ̗ފD`wk># }oD98ԗIS;X? ڋ [jgzdM$*#XjKmLMD(rUK0aw[AcȞXAWif .ֽ6 ~BxBx$" 9fvgøp0b4dֱ׮<ԉܠkJq/ʓ6v+Ǒ=C`ng` }oD=vJ}:NW`j,1nIPZr_mo8=2j& YX'+Ҧ{@`OAbM4*=2j& YqƤo*LZz) &yQM!+T5vsyh=*(A+rL Y0)$miKAE"NH=0REG/-S$K"T88^Zz*rV=0REG8 AUNTȤUD$8 { R,qQM!)x @^Zy9 R@ǎ4X'CE%Y G B*Ubh"ƋD(rUK0aw[q`Op? !﹍ȞWmGj j,0\TEd&dLz DSyh= p2)b| `R {+\Ua? s Jl+E9^"qԴVoo#xǓ]ţ#Ŝ<⨦MZzz ,M4*=2j& YX'+Ҧ4 =DAb,nU5xw h/HFMk,1)ԠԉܠkJR_mnN_z{Oo>7m}v|6bSgIxT)3"qԴVoo#xǓAbdxP'UY#A9E "yQM% 4X@ɨH$UdGV92S;SxI" Cjfz ;`Z!ZNj Jl()"w(+kdZҼqƤo*OI޴i=o'N6`wk>a? s JlvvseVyR~Na}v7PSjDPVʵyy5z4֯yRp=vņ9y5/F*OD=4""I $QM%8zU CD=vzLv>^Mo^5T(PAH*B%i87QESQ1p(`QT*ޮ ~BxBH,P嚣-ٞ;aw-~iɭc]6yy5z4֯yR|+ܭ1D9h[jgkפɗkʓCwk> 9%6}t vU;zTWޜ޽kW8Foۣ.+ɭYz4֯yR|X'A"IL$*i,8cȞTIV=4""I o-=TT*i4yڙ2ey5z4֯yRfDb'@yI <)xoWtމEMDN*DPHzP<z(+x;X_ I" Cjfz ;@aw-~iɭcņ%6x'3e˵IkxX]ɭѦ{ʓ qav7<,QDUcH"+DcȞǦDV $=2D<)G@Cwk> ;U#XOPm?1)Ǒ=N^Mo^5TҭȜy5-ň=1zE-,$E4Hhr $=2D<)8cȞǦDV $=2D<)G@!ۻY<#>wk>Fd3?ɷ)[I$+FIC8&%n]ٯyR|RM5c:KXe/&lu뱾()"t3m}lZWmGjޝzLvǑ=Om/Jdljɨɩ\T2 U[HigWng`I:kC?zOv ffffffffffffffffffffffffffffffffffffffff@^ry2Bl! sE eXb"("o;bL7A$'og$ 8ǦDGl?zLv8WlyN])7b^/&]o*OF7JW T MPJMµs@8 ~1G ?ǣ۷+ܮ?f<^n7'֍:KXY2\?n6V=-H"+Dc|Y3IcH"+</Ş5Iku+ZY-q8.A\X1HOCITe3UTr ^7Z I\K ҭdy5θR LjJݸl?$X5F[=UM^pܴCVmk|RW1dy2cyR|΄wǙRcdrk}qƥ|aH&q@J*@ MH&q@J*@ aZqs۷vc7.<⨦MƔ9aOPCDADHAƌg;9E "yQM%8c\YDD$pqj*3c'ŕ8bH*I@0OI( YEP $o ( (8g*" &EJqrƋI( YEP $,ig>-$ I Y#9QQ4*PqTDM@8#ڣvl')]m}Dkpm1qi6+~,DADHH@# g'L>n6q;(28@(+HMc)~B{; [ۏ8<ցP=9yRpbztrx\--蛬N{{ĐTA2 GxA8.{{\q/ʓ{($O8)G@p*r0{{̅~Axډ8==AQ 86{"|B ?]h==~ sE4ĐYT & T 憛#{yyAyǕE46{=eP()S(86{"}B ?vv E0p*DJCxx4{{ݴY=/(=8򨦐kΛM1$U=` .{{q]m}scx'S;X==L IVI1NTF{"| ?f]m}{65޼\[Z>7"z~AyS(&$$ 4Zj9Q`AULz S*p%ĐUdNkfl4x5B ̗ފ\+Ǒ=NSjgkTIX-5 D ?n6qJy-71 T+($CS L.{{ko7]Z=zLv>3F$\WF6{{ɦ==׫@\qkI.7'ۣqC]߁drk`?Gj78c@e]zUTd9 QĖ=4"":w` $iTD` m{1y)PtQd*&%eLIz{ޒ@-5 DBE^ R{dMѷ)=D9 zdM$*#<dwjSgb1)h 1M"g}פɗkhɒBE0LGX pm#" _=4""I!#Ynav89Mŏsפɗkʓֆu~}o^~n`͇v|6^P6+s2dh 54+~cX% 4Z`RH"IC*p%ĐUdC`MƋ5IW $_qgLp? !<(+Ui Lp? =lI$D(rQAUSWpr ^7擕)cV]ogpɷ)[{;!" 8򨦑plX` 6pzZ.Wag}or3A6zy2cyR|gnHnlx0M1M1ޮ !X44..8ԗI|` `34[qjy2^h7I$D(rQAUSWpܴCWh ,.Vj{^S=czڑ;ri^NSyY#l6~A繍Ȟ>ףȞŁ<,/I$D(rQAUSWp] h/G=Omb:'>Zb1sXz^޽'yMMzI@8Tԃߠ_A-)^n7'y\v‚'c $Y2ݙ*j^ܴCQjLF O}+ۥw@e]cvvxɭ`̓ߠ_BWxFx0M1M1ޮ !> $LOG_FILE 2>&1 if (( $? == 0 )); then KLIB_SA_logmsg INFO 3 2 dhcpsa.cat "DHCP server daemon dhcpsd is active" return 0 else KLIB_SA_logmsg INFO 3 3 dhcpsa.cat "DHCP server daemon dhcpsd is not active" return 1 fi } ############################################################################### # # Name: doStart # # Description: Start the DHCP server # # Arguments: none # # Returns: 0 on SUCCESS # 1 on FAILURE # ################################################################################ function doStart { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : Starting the DHCP server dhcpsd daemon # /usr/bin/startsrc -s dhcpsd >> $LOG_FILE 2>&1 # : Check the status DHCP server dhcpsd daemon # isRunning (( $? == 0 )) && { KLIB_SA_logmsg INFO 3 4 dhcpsa.cat "DHCP server daemon dhcpsd started" return 0 } KLIB_SA_logmsg ERROR 3 5 dhcpsa.cat "DHCP server daemon dhcpsd unable to start" return 1 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/db2:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # : Load the common variables # . /usr/es/sbin/cluster/sa/dhcp/sbin/cl_dhcp_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} echo "######################################################" >> $LOG_FILE dspmsg -s 3 dhcpsa.cat 6 "# DHCP START LOG" >> $LOG_FILE echo "######################################################" >> $LOG_FILE # : Find out to see DHCP server dhcpsd daemon is active # isRunning (( $? == 1 )) && { KLIB_SA_logmsg INFO 3 7 dhcpsa.cat "Starting DHCP server daemon dhcpsd" # : DHCP server dhcpsd daemon is not active. : Make an attempt to start. # doStart exit $? } exit 0 c~B k Z;%o.םa֝a֝a&2vT./usr/es/sbin/cluster/sa/dhcp/sbin/cl_dhcp_stop#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/dhcp/sbin/cl_dhcp_stop.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)61 1.1 src/43haes/usr/sbin/cluster/sa/dhcp/sbin/cl_dhcp_stop.sh, hacmp, 61haes_r714 11/28/11 15:24:12 ############################################################################### # # Name: cl_dhcp_stop # # Description: Command used as the PowerHA SystemMirror Application Server # "Stop Script" for DHCP. # # Syntax: cl_dhcp_stop # # Arguments: N/A # # Returns: 0 on SUCCESS # 1 on FAILURE # ############################################################################### . /usr/es/lib/ksh93/func_include ############################################################################### # # Name: isRunning # # Description: Check to see if DHCP server dhcpsd daemon is active. # # Arguments: none # # Returns: 0 on RUNNING # 1 on NOT RUNNING # ################################################################################ function isRunning { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : DHCP daemon - dhcpsd is active or not # KLIB_SA_logmsg INFO 3 1 dhcpsa.cat "Verifying to see DHCP server daemon dhcpsd is active." LC_ALL=C /usr/bin/lssrc -s dhcpsd | /usr/bin/grep -iw active >> $LOG_FILE 2>&1 if (( $? == 0 )); then KLIB_SA_logmsg INFO 3 2 dhcpsa.cat "DHCP server daemon dhcpsd is active" return 0 else KLIB_SA_logmsg INFO 3 3 dhcpsa.cat "DHCP server daemon dhcpsd is not active" return 1 fi } ############################################################################### # # Name: doStop # # Description: Stops the DHCP server daemon dhcpsd. # # Arguments: none # # Returns: 0 on SUCCESS # 1 on FAILURE # ################################################################################ function doStop { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : Stops the DHCP server daemon dhcpsd # /usr/bin/stopsrc -s dhcpsd >> $LOG_FILE 2>&1 sleep 5 # : Check the status of DHCP server daemon dhcpsd # isRunning (( $? == 0 )) && { KLIB_SA_logmsg ERROR 4 1 dhcpsa.cat "DHCP server daemon dhcpsd \ has not been stopped" return 1 } KLIB_SA_logmsg INFO 4 2 dhcpsa.cat "DHCP server daemon dhcpsd has been stopped" return 0 } ############################################################################### # Main program procedure. ############################################################################### PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)" PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH # : Load the common variables # . /usr/es/sbin/cluster/sa/dhcp/sbin/cl_dhcp_common_variables LOG_FILE=$(clodmget -q name=$KLIB_HACMPLOG_ENTRY -f value -d "=" HACMPlogs) LOG_FILE=${LOG_FILE//\"/} LOG_FILE="$LOG_FILE/$KLIB_HACMPLOG_ENTRY" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x DEBUG=${DEBUG:-"0"} VERBOSE=${VERBOSE:-"0"} echo "######################################################" >> $LOG_FILE dspmsg -s 4 dhcpsa.cat 3 "# DHCP STOP LOG" >> $LOG_FILE echo "######################################################" >> $LOG_FILE # : Check the status DHCP server daemon dhcpsd # isRunning (( $? == 0 )) && { KLIB_SA_logmsg INFO 4 4 dhcpsa.cat "Stopping DHCP server daemon dhcpsd" # : DHCP server daemon dhcpsd is active. : Make an attempt to stop. # doStop exit $? } exit 0  k==%o.םa֝a֝a&2vT./usr/es/sbin/cluster/sa/dhcp/sbin/cl_dhcp_queryhshg#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/dhcp/sbin/cl_dhcp_query.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2010,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/dhcp/sbin/cl_dhcp_query.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################ # # Name: cl_dhcp_query # # Description: Performs application discovery query on the local node # # Arguments: N/A # # Returns: N/A # ############################################################################# . /usr/es/lib/ksh93/func_include ############################################################################ # # Name: isPrimaryNode # # Description: Finds out the Node is primary or not # # Arguments: N/A # # Returns: 0: If DHCP server "dhcpsd" active # 1: If DHCP server "dhcpsd" not active # ############################################################################# function isPrimaryNode { [[ "VERBOSE_LOGGING" == "high" ]] && set -x LC_ALL=C /usr/bin/lssrc -s dhcpsd | grep -iw active > /dev/null 2>&1 (( $? == 0 )) && return 0 return 1 } ############################################################################ # # Name: dhcp_discover # # Description: Performs DHCP server discovery query on the local node # # Arguments: N/A # # Returns: N/A # ############################################################################# function dhcp_discover { [[ "VERBOSE_LOGGING" == "high" ]] && set -x typeset -i installed=1 # : For DHCP server, the required fileset is : bos.net.tcp.server # /usr/bin/lslpp -l bos.net.tcp.server > /dev/null 2>&1 (( $? != 0 )) && { installed=0 } print -n $(dspmsg -s 1 dhcpsa.cat 1 "DHCP Smart Assist") print -n ":DHCP:" print -n $(dspmsg -s 1 dhcpsa.cat 2 "DHCP") print -n ":DHCP:" echo "$installed" } ############################################################################# # Global Variables: ############################################################################# FPATH=/usr/es/lib/ksh93/aix:/usr/es/lib/ksh93/hacmp/:/usr/es/lib/ksh93/util/:/usr/es/lib/ksh93/util/list PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/:/usr/es/sbin/cluster/utilities/ LOCALNODENAME=$(get_local_nodename 2>/dev/null) ############################################################################# # Main: ############################################################################# typeset option nodes ACTION COMPONENT while getopts q:PDdn: option do case $option in n) # : List of input nodes # nodes=$OPTARG nodes=${nodes//:/ } nodes=${nodes//,/ } ;; q) # : Perform a query for a modify screen # application_id=$OPTARG ACTION=query ;; D) # : Run discovery # ACTION=discover ;; P) # : Check the primary node # typeset ret_val isPrimaryNode ret_val=$? exit $ret_val ;; d) # : configuration assist discovery # dhcp_discover exit 0 ;; *) ;; esac done [[ "$ACTION" == "discover" ]] && { echo "#primary:takeover:application_name" # : Check the primary node # typeset primary_node for node in $nodes; do if [[ "$node" == "$LOCALNODENAME" ]]; then isPrimaryNode else cl_rsh $node "/usr/es/sbin/cluster/sa/dhcp/sbin/cl_dhcp_query -P" 2>/dev/null fi [[ $? == 0 ]] && { primary_node=$node break } done echo "$primary_node::DHCP_Application_High_Availability" exit 0 } [[ "$ACTION" == "query" ]] && { echo "#primary:takeover:service_ip:netmask_prefix_len:network" RESOURCE_GROUP=$(clodmget -q sa_key=$application_id -f group -d "=" HACMPgroup) # : remove quotes # RESOURCE_GROUP=${RESOURCE_GROUP//\"/} [[ -z $RESOURCE_GROUP ]] && exit 1 set -a eval $(LC_ALL=C clvt query resource_group $RESOURCE_GROUP | grep SERVICE_LABEL) set +a [[ -n $RESOURCE_GROUP ]] && { NODES=$(clvt query resource_group $RESOURCE_GROUP | grep -w NODES | awk -F'=' '{ print $2 }') NODES=${NODES//\"/} echo $NODES | read PRIMARY TAKEOVER } PREFIX_LEN=$(cl_harvestIP_scripts -u $SERVICE_LABEL | tail -1 | cut -d ":" -f 13) NETWORK=$(cl_harvestIP_scripts -u $SERVICE_LABEL | tail -1 | cut -d ":" -f 3) echo $PRIMARY:$TAKEOVER:$SERVICE_LABEL:$PREFIX_LEN:$NETWORK exit 0 } # IB kZ>%o@.םa֝a֝a&2vT./usr/es/sbin/cluster/sa/dhcp/sbin/dhcp_xutilsy@@#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/dhcp/sbin/dhcp_xutils.sh 1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2010 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)91 1.1 src/43haes/usr/sbin/cluster/sa/dhcp/sbin/dhcp_xutils.sh, hacmp, 61haes_r714 11/28/11 15:25:20 ################################################################### # # Function: listInstances_DHCP # # Description: This is a dummy function # # Arcguments: componentid , nodes # # output: list of instances in xml format # ################################################################### function listInstances_DHCP { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" "${0}" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" # : No instances for DHCP component : This is a just dummy function # KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" "${0}" } ################################################################### # # Function: listEnv_DHCP # # Description: This component doesnt have any ENV settings. # but as per the framwework we need this dummy function # # Arcguments: none # # output: None # ################################################################### function listEnv_DHCP { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # : No ENV is needed by this component # KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ####################################################################### # # Function: listProps_DHCP # # Description: List properties for the DHCP component # # Arcguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPRTY tag for each of the option # shown here # #* Application Name [DHCP_Application_High_Availability] #* DHCP Owning Node [] + #* Takeover Node(s) [] + #* Service Interface [] + #Netmask(IPv4)/Prefix Length(IPv6) [] ######################################################################## function listProps_DHCP { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset primary typeset takeover typeset print_subsystem typeset application_name typeset takovernodes_val_list typeset serviceip_picklist # : Discover possible property values # # /usr/es/sbin/cluster/sa/dhcp/sbin/cl_dhcp_query -D -n 'node1,node2' #primary:takeover:application_name #::DHCP_Application_High_Availability typeset nodes=$(echo $NODES | tr ' ' ',' ) /usr/es/sbin/cluster/sa/dhcp/sbin/cl_dhcp_query -D -n "$nodes" | grep -v -E "^#|^$" > /usr/es/sbin/cluster/etc/sa_inst.x IFS=":" read primary takeover application_name < /usr/es/sbin/cluster/etc/sa_inst.x # : Discover Picklists : Discover the takeover node list # takovernodes_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | tr '\n' ',' ) takovernodes_val_list=${takovernodes_val_list%,} #serive ip pick list serviceip_picklist=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') # : Print each property # #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" print_start_tag PROPERTIES # Application Name print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$application_name" "" "" "false" \ "-A" "string" "true" "true" \ "false" "true" "" "dhcpsa.cat,6,1" print_end_tag PROPERTY # DNS Owning Node print_start_tag PROPERTY "2" "OWN_NODE" "DHCP Owning Node" "" \ "$primary" "$takovernodes_val_list" "" "false" \ "-o" "string" "true" "true" \ "true" "true" "" "dhcpsa.cat,6,2" print_end_tag PROPERTY # Takeover Node(s) print_start_tag PROPERTY "3" "TAKEOVER_NODES" "Takeover Node(s)" "" \ "$takeover" "$takovernodes_val_list" "" "false" \ "-n" "string" "true" "true" \ "true" "true" "" "dhcpsa.cat,6,3" print_end_tag PROPERTY # Service Interface print_start_tag PROPERTY "4" "SERVICE_INTERFACE" "Service Interface" "" \ "" "$serviceip_picklist" "" "false" \ "-l" "string" "true" "true" \ "false" "true" "" "dhcpsa.cat,6,4" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) print_start_tag PROPERTY "5" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "false" \ "-P" "string" "true" "false" \ "false" "true" "" "cluster_hlp.cat,25,51" print_end_tag PROPERTY print_start_tag CFGCMD " /usr/es/sbin/cluster/sa/dhcp/sbin/cl_dhcp_import -a " print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #------------------- # MAIN STARTS HERE #------------------- # # these functions will be consumed by clvtsa # dhcp_xutils=( typeset env_func="listEnv_DHCP" typeset inst_func="listInstances_DHCP" typeset prop_func="listProps_DHCP" )  k9%op.םaX՝a֝a&p2vT./usr/es/sbin/cluster/sa/dhcp/sbin/cl_dhcp_common_variablesstaKLIB_OUTPUT_CONSOLE="true" KLIB_HACMPLOG_ENTRY="dhcpsa.log" INFO_FLAG="true" WARN_FLAG="true" ERROR_FLAG="true"  kdA%o$ .םaX՝a֝a& 2vT./usr/es/sbin/cluster/sa/dhcp/config/cl_dhcp_manual_config.xmla$$ Node1 Node2 haapp08  kB%o$.םaX՝a֝a&2vT./usr/es/sbin/cluster/sa/dhcp/config/cl_dhcp_manual_config.xsda$$ y kB%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/wmq/coAA kGB%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/wmq/sbinig/cl_AA k꺕B%oABםaBםa֝a&2vT./usr/es/sbin/cluster/sa/wmq/config/cl_AA k\E%o0םaY՝a֝a&2vT./usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globalsal_conf. /usr/es/lib/ksh93/func_include PATH=$PATH:/usr/es/sbin/cluster/sa/sbin:/usr/es/sbin/cluster/utilities:/usr/mqm/bin FPATH_BASE=/usr/es/lib/ksh93 FPATH=$FPATH_BASE:$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm export PATH FPATH #--------------------------------- # Global definitions #--------------------------------- SA_SBIN=/usr/es/sbin/cluster/sa/sbin WMQ_HA_SBIN=/usr/es/sbin/cluster/sa/wmq/sbin WMQ_HA_CONFIG=/usr/es/sbin/cluster/sa/wmq/config KLIB_DEFAULT_LOGFILE=/var/hacmp/log/wmqsa.log KLIB_WMQ_HACMPLOG_ENTRY="wmqsa.log" KLIB_HACMPLOG_ENTRY="$KLIB_WMQ_HACMPLOG_ENTRY" KLIB_OUTPUT_CONSOLE=true INFO_FLAG="true" WARN_FLAG="true" DEBUG_FLAG="false" ERROR_FLAG="true" TRACE_FLAG="true"  kꨚF%o!0םa֝a֝a&!2vT./usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Utilities_conf#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_Utilities.sh 1.1 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)51 1.1 src/43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_Utilities.sh, hacmp, 61haes_r714 11/28/11 14:59:04 ####################################################################################### # Function:ServiceIP_Defined # # Purpose: # Validate that the service IP label isn't already defined in the PowerHA SystemMirror # cluster. If it is already defined, report an error and exit this script # # Arguments: # (1) Service IP Label # # Return: # 1 if service IP label is not defined # 0 if service IP label is already defined ###################################################################################### function ServiceIP_Defined { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset serviceIP=$1 clvt query resource_group >/dev/null 2>&1 if [[ $? == "0" ]];then RGS=$(clvt query resource_group) for rg in $RGS; do ips=$(clvt query resource_group $rg | grep \ SERVICE_LABEL | awk -F= '{ print $2 }') ips=${ips//\"/} for ip in $ips; do [[ "$ip" == "$serviceIP" ]] && { return 0 } done done fi return 1 } ############################################################################# # Function: # getServiceNetwork # # Purpose: # Determine the appropriate network to place the service IP label # on based on adapter count per network per node # # Arguments: # (1) network type in PowerHA SystemMirror # (2) list of nodes to find interfaces for # # Output: # network name to place service IP label on # # Returns: # 0 on success # 1 on failure ############################################################################ function getServiceNetwork { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x serv_addr_type=$1 NODES=$2 validv6Networks="" validv4Networks="" typeset NETWORKS=$(clvt query network | sort -u) typeset validNetworks typeset -A netXnodeCount for network in $NETWORKS do fam=$(clvt query network $network| awk -F= '$1 ~ /NET_FAMILY/ { print $2 }' | sed -e "s/\"//g") if [[ "$fam" == "2" ]] then validv6Networks=$(echo "$network $validv6Networks") else validv4Networks=$(echo "$network $validv4Networks") fi done INTERFACES=$(clvt query interface | sort -u) for interface in $INTERFACES; do node=$(clvt query interface $interface | awk -F= '$1 ~ /NODE/ {print $2 }' | sed -e "s/\"//g") net=$(clvt query interface $interface | awk -F= '$1 ~ /NETWORK/ {print $2 }' | sed -e "s/\"//g") [[ -n $node && -n $net ]] && { typeset -i count=${netXnodeCount[${net}_${node}]} (( count++ )) netXnodeCount[${net}_${node}]=$count } done typeset -i invalid=0 if [[ "$serv_addr_type" == "2" || -z $validv4Networks ]] then for network in $validv6Networks; do invalid=0 for node in $NODES; do [[ ${netXnodeCount[${network}_${node}]} == 0 ]] && { invalid=1 } done [[ $invalid == 0 ]] && { echo $network return 0 } done fi for network in $validv4Networks; do invalid=0 for node in $NODES; do [[ ${netXnodeCount[${network}_${node}]} == 0 ]] && { invalid=1 } done [[ $invalid == 0 ]] && { echo $network return 0 } done return 1 } ####################################################################################################### # # Function : validate_Nodes # # Purpose : Validate if the Primary and takeover nodes are not repetetive. # # Arguments : PRIMNODE # TAKEOVER NODES # # Returns: 0 for Sucess # 1 for Failure # ###################################################################################################### function validate_Nodes { for node in $2 do [[ $1 == $node ]] && return 1 done return 0 } ####################################################################################################### # # Function : validate_AppName # # Purpose : Validate if the Application name entered has valid charactes. charecters can be # [a-z][A-z][0-9]_ # # Arguments :APPLICATION_ID # # Returns: 0 for Sucess # 1 for Failure # ###################################################################################################### function validate_AppName { appname=$1 [[ -n ${appname//[a-zA-Z0-9_]/} ]] && return 1 return 0 } ##################################################################################################### # # Function : isipv6addr # # Purpose : Finds the address is IPv4 or IPV6 # # Args: # # # Returns : # 0 for success # 1 for failure (when the address is not IPv6) # ####################################################################################################### function isipv6addr { typeset v6addr=${1:-} abc=$(echo $v6addr|awk ' { n=split($1, A, ":") if(n==1) { print n exit } for(i=1; i<=n; i++) { if(length(A[i])) { if(i == n) printf "%s", A[i] else printf "%s:", A[i] } else { if(i==1) s=1 else s = 9-n for(j=1; j<=s; j++) printf "%s:", "0" } } }') if [[ $abc == 1 ]] then return 1 else return 0 fi } ##################################################################################################### # # Function : dir_fs_vg # # Purpose : If the directory is given it finds File system or VG. # dir_fs_vg $dir 0/1 # second argument 0 -- it return the VG # 1 -- it returns file system # # Args: # 1. directory # 2. 0/1 # # Returns : # 0 for success # 1 for failure # ####################################################################################################### function dir_fs_vg { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x dir=$1 fs=$dir i=0 count=$(echo $dir|awk '{ n=split($1, A, "/");print n }') count=$(expr $count - 1) while [[ $i < $count ]] do i=$i m_fs=$(lsfs -c|grep $fs |grep -v grep) [[ $? == 0 ]] && { [[ $2 == 1 ]] && { fs_d=$(echo $m_fs|awk -F: '{print $1}') echo $fs_d return 0 } lv=$(echo $m_fs|awk -F: '{print $2}'|awk -F/ '{print $3}') vg=$(clodmget -q "name=$lv" -f parent -n CuDv) echo $vg return 0 } fs=$(echo $fs|cut -d "/" -f -`expr $count - $i`) i=$(expr $i + 1) done return 1 } unc lAH%oh0םa֝a֝a&C2vT./usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_config   e #ainorst "-AMS_cdlmpu$/=EILNOPRfghv.1CGQT\bqwy%&'()02:>BDFHKUVW[]x,3;?Y{|}!45679k*8zZ@+p&4R`wDH(Tb Lj$w8S|wY.G^s}m]i s!7@=3sI[$DϧK)|k=mhR6'#0Vbrd2h-mw磯%`X_ԔK@3}a(vTxP$4=QK4;p3s9s9s9s9s9s9s9s9s9s9s9s9s9s9s|`TyPy4DBو1 u ΐG* @ `0i1F4m4YqQFbˊZh`(008TyP`0`` DkCqcnh)Qfi[2V閔rKR P]s3/K08Gkd 1z"=.fnzhfo%]@- YoEy{C$-F-A8;P k[ 0U#`b 8b( E2)*`0u1qkݒ zU/ZMz.c Z [dHI֑u_ H"O`bˊG^}aL^)[Λ+jD1s2h-g5ђ,/Iu|[WZYta_Ka}m]hR;^FoU@ S"" K8b( E2)*x `80+\p+@A#Qv.\(H <"@dR$U!)+8P$@dR$U VM K;DBC*vu#`  aX40HP,.ч`` |x(u1qoP@xD!ȤHCHSLBA""7mo ap|s HLDv L\["@H&BI0bˊG[WZ (PN"m|eWp$J%]CD& Q-Zu)zЩk-XQI- Vs mv<)9dDpe&D=4Mi^$f ŗN QIP+,/1W XLވ)[΀8PH$$<kj[dHI֑u_ H"O`(/\U:<5G8H XLވ)[ΚZrҞ"ͳz/0pM'%.ՄKЩ-b0bz"=.fnzhfo%Z1&k VsiDQLoh7A֚ aL^TC׼ʈڋt.^8b"(IGQ =Kũaz848 p * ;Lg&p ZfALJaz|,1)/DG]y{a6eӋױN/^ƍ ƆI$ԼBreQ& \DGRQ-A5]zð`ŗN QAUaZ`Dz\I35/c Ye$-s !/Js%.XJ"q;2M5T/2eӋ׳00K8H$;<9A8#^ `p>&D=4Mi^J+`.*|qcZ"_ XLވKV&f,``1ɗN/^aWo֚V/f ^@-nb4&D=4Mi^$\YqT\V/Q& \DGN$ԼBre &2q;2MQc5ג,/&f^re.^MHyP@<$q($MHII PHq)WΩIMHHDʐ($8ᔬNN T5[26, ð( iiȐ "оuVS5rR1jAj|ޥnt 8oNšSɜb٥oS|ޥnt; JuxG|^^kM{ &^^QN/^ƍ Ɔ֚"@H&BAxv ,txjr (.w#f AG x8Le:)!kI !zVF(vfQǰk)MQgayGױ (xM4Q&H23K#iiQ 4&H2 PdD~&M4 LB҉y%M4B("*=4Ĉ$8Y-#70F&M4ң@h 8e*:)81S6i D$&pVL'E'*v&M4I $Lh 8b+)E'*v&M4I $Ld *@@p0i Md *D Dp 16i$<$@$T*M4JHII AM4JHII$$9HHy!R; 08zgFYp[@s9s9s9s9s9s9s9s9s9s9s"T%nats3sLiWKk3bTn%-y+I \Hi Ҷ0>wI35.V&f&XJz/% XLވK\hL+k@nJQֹYh yiOI.k;-)fgms\9s9s9s9s9s9s9s9s9s9s9,T%y+fүK[ *&ȓ H@p.`0~\[uK[bvffhfo%YՔoɒ5^(䭀wqWaE$fB鼻J@&-z;/bvff J%]ںХn7:bZSv%$Zt $8`%Ez8 A aQ@Ā-z|p蔣^_W\/H=1 pP$@`0u1qo$ HT \,bb犮^|)ic,"S VsCb/^g`V5Lh"6]6isS8k4W)1\VcE2H"?cU#b`p8 |x(u1qoLzi . ʕ&W`(3\U:<5G8yRʃq3-b0bz":W37>c|Uc,}f/-y+L^τiWK 9pZmEغ]r A4&D=4Mi^$,txjq[^FaZ`Dz\0pjJ%]rӒI \Hi Ҷ0=ID 7N PdD{Mi3bQ3\UZ >q($ّee`8H'` | i[ AG1$#v5[26, ÚoN0X- M$ZEס|yRbˊG_\X[Za G-)|K%$J%]@c('($ ¸s oM4ݦ#0~/ ֚(8`%Ez9!BǦ@%($vylfㄐDW|U20`XqVnb.f`1*;V[q>8v @kk]o1!S ScU#b`p9A8#^ `p>M4M M$ZEס|yR,txjpEZŌAkյ~30R00pe=CxDD1s37=ID 7N$kW1Vֺ%$J%]rӒ0!q9aWi[Mՙ kZ9s9s9s9s9s9s9s9s9s9vf*V5ꪚW30RL-f36%Kߠҹ)K[a$4[]NrZٛ GfWVWH+i3 T5k&]55#^5[3wQʊ](~9gfgms9s9s9s9s9s9s9s9s9sf*VUM+)d &E▶֚ *&ȓ H@p.`0~\Mi4f`)iԔK@3CZjW30RL!eWR QA8;VKM M$ZEס|yR0ŗN QΥgZ8Le7;zZxGHZCH^ф)J%]Dv1!BǦ@3 4 o=b\Kx_;3jsƳIF+HyP)fFŕ8s `/8["@H&BIð`3\U:<5G9+)y0pj>/^ZiTS$# BIG  L iQL! 8=VK}a(ĕL" ш$q G^bJŠN VkM4*ipi1AF4m4YqQF.*hvFiY/}a(Rpb5窬"_f AGĕ-Ena4ЙA5]zð 1eST}s~/QVKnp-XJ:SW-)@c(v1S$#kM4k4۠ B#TYV5hVA,UQVK3sa| $@`Uz/<)ccU#b`p9 |x(A5]zǕ*LP.*>scZ"_f AGĕJ`0pb"(IGEeS*-窯S4Z >u$}eDWUZ=1b &IGDTyR &I2$P*8`U v5[26, Úi8කYp[@<<<<<<<<<<<<<<<<<<=,JQߖU#H΍s]flJ k*kI;•龔}m\Z1,75`܄uKYoEy{ qvXy%MXQIHbBy{-\˥_:1z"=.fn{aT5k&]552vV@k]/z2J5߃||fvyyyyyyyyyyyyyyyyyyy紳1RrЊi[ *&ȓ H@p.`0~\[+sa|X\Szӷ/͘/YhE^/ZFچ%"_\k4HDm.*l瞦pi14R6b""dD~ƫfFŕ8ql /n.-vZWZF Cʤ8`&1,@ȐHHy!A Xi13\Ut٥=LcW\h"6lqZ)DE +o- CV^vy A"P0+Q30+Q3;3 oKo/\S͘.o٥ϬU S-zڸ*cRQ-A5]zǕ*L PYqT\൫YhE^/ XLވ)[΁qhљSD1s+ l*f1K(hRNoa\9-<<<<<<<<<<<<<<<<<<- YoEy{C$Yp[@s9s9s9s9s9s]Ms9s9s9s9s9s֋חɊx5pkڃh ( XWji>kM5 0}a(䞽M@D @M5$# P(Q2H"< 0, "@H&BAxv ŗN Q h*%|JBJxZ`DwQQ8/Z 0Ip L9 |p;8[o2$餂kH/*T\;ŗN Q΢wҐrҞD1sZ >x{N*S/x] 0@0a181$#oaWoȐ "о ap3\U:<5G9I.XJuaKFL0 چ%&"a`WY0@)8 L0`4HȐ "о@D>W_XDD1s37>2V'eAW%%n…H&H@~p"i&q>G` | i2$餂kH/*T\;X>]RZS(.w#f}8[0po;b ͉ᄉsM+4 k`[ "L @" dHI֑u_ H"OÀ,txjr2V-b0bz"=.fnzhfo% &2q;BA^JtB4⥷00mKo\/@ /dev/null 2>&1; if (( $? != 0 )) ; then echo $MQM; mqm_c=true fi done # checking wether all the MQMs are managed by HACMP or not. if [[ $mqm_c != "true" ]]; then KLIB_SA_logmsg INFO 1 32 wmq_sa.cat "There were no Unconfigured \ Queue Managers." fi else KLIB_SA_logmsg ERROR 1 19 wmq_sa.cat "There were no MQ managers \ created on local node %1\$s\n" $Local_node fi exit 0 } ############################################################################### # # Function: discoveryy # # PURPOSE: Discovers WebsphereMQ is installed or not. # # ARGUMENTS: n/a # # RETURNS: n/a # ############################################################################### function discover_mqm { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset installed=1 for fileset in "mqm.base.runtime mqm.server.rte" do /usr/bin/lslpp -l $fileset > /dev/null 2>&1 (( $? != 0 )) && { installed=0 break } done echo "WebSphere MQ Smart Assist:WMQ:Websphere MQ Server:\ WebSphere_MQ_SERVER:$installed" exit 0 } ############################################################################################### # FUNCTION: wmq_smit_add # # PURPOSE: it generates the argumenst for SMIT # add a WebSphere MQ to the cluster screens. # # ARGUMENTS: # -A application_name. # # RETURNS: n/a # ################################################################################################# function wmq_smit_add { [[ "VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals typeset application_name typeset wmq_name application_name="$wmq_server_instance"_app application_name=$(echo $application_name |sed 's/\./_/g;s/\%/_/g;s/\//_/g') #Replacing the special characters ".,%,/", with "_" #which are supported in the MQ manager name. wmq_name="$wmq_server_instance" p_node=$(get_local_nodename) #Primary node on the SMIT screen. # o/p for SMIT. echo "#application_name:wmq_name:p_node" echo "$application_name:$wmq_name:$p_node" exit 0 } ############################################################################################### # FUNCTION: wmq_smit_mod # # PURPOSE: it generates the argumenst for SMIT # Modify a WebSphere MQ to the cluster screens. # # ARGUMENTS: # -m application_id. # # RETURNS: n/a # ################################################################################################# function wmq_smit_mod { [[ "VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals typeset mqm_name typeset p_node typeset to_nodes typeset service_ip application_name="$application_id" mqm_name=$(clodmget -q "name=MQM_NAME and application_id=$application_id" -f value -n HACMPsa_metadata) p_node=$(clodmget -q "name=PRI_NODE and application_id=$application_id" -f value -n HACMPsa_metadata) to_nodes=$(clodmget -q "name=TO_NODES and application_id=$application_id" -f value -n HACMPsa_metadata) service_ip=$(clodmget -q "name=SERVICE_IP and application_id=$application_id" -f value -n HACMPsa_metadata) # o/p for smit modify screen echo "#application_name:mqm_name:p_node:to_nodes:service_ip" echo "$application_name:$mqm_name:$p_node:$to_nodes:$service_ip" exit 0 } ############################################################################### #MAIN ############################################################################### typeset ACTION option while getopts d,l,A:M: option do case $option in d) # Discover the MQ is installed or not. ACTION="discover" ;; l) # List the MQ instances. ACTION="list" ;; A) # smit o/p for add a WebsSphere MQ instance to the cluster. ACTION="smit_add" wmq_server_instance=$OPTARG ;; M) # smit o/p for modify a WebSphere MQ instance name. ACTION="smit_mod" application_id=$OPTARG ;; *) ;; esac done [[ "$ACTION" == "discover" ]] && discover_mqm [[ "$ACTION" == "list" ]] && list_mqm [[ "$ACTION" == "smit_add" ]] && wmq_smit_add [[ "$ACTION" == "smit_mod" ]] && wmq_smit_mod 0 )) ;  kI%o0םa֝a֝a&2vT./usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_manual#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_manual.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_manual.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ################################################################################# # Name: cl_wmq_manual # # Purpose: To create PowerHA SystemMirror resources and Resource group for Managing # WebSphere MQ server, through the i/p XML file. # # Arguments: XML file path. # # Returns: 0 for Sucess # 1 for Failure ################################################################################ if [[ $VERBOSE_LOGGING == high ]] then set -x version='7d4c34b 43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_manual.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM' fi . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Utilities KLIB_SA_logmsg INFO 1 55 wmq_sa.cat "configuring WebSphere MQ server using manual configuration\n" typeset APP_NAME # Smart Assist Application Name of the WebSphere MQ server. typeset MQM_NAME # WebSphere MQM Instance name. typeset PRIMARY_NODE # Primary node for the MQM RG. typeset TO_NODES # Take over nodes for the MQM RG. typeset SERVICE_IP # Service ip. typeset PREFIX # Prefix for Service ip. typeset ERR # command o/p for validation. typeset LISTENERS # Listeners associated to MQM while getopts f: opt do case $opt in f) # xml file path XML_FILE=$OPTARG ;; esac done #validate xml file $SA_SBIN/clsaxmlutil -s -x $XML_FILE -m $WMQ_HA_CONFIG/cl_wmq_manual_config.xsd -t mqm_name [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 1 68 wmq_sa.cat "The given XML file:%1\$s is invalid.\n" "$XML_FILE" exit 1 } MQM_NAME=$($SA_SBIN/clsaxmlutil -s -x $XML_FILE -m $WMQ_HA_CONFIG/cl_wmq_manual_config.xsd -t mqm_name |awk -F= '{print $2}' ) #validating MQM_NAME /usr/mqm/bin/dspmq |grep $MQM_NAME |grep -v grep > /dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 1 67 wmq_sa.cat "The Specified Queue Manager: %1\$s is not exist/valid.\n" "$MQM_NAME" exit 1 } APP_NAME="$MQM_NAME"_app APP_NAME=$(echo $APP_NAME |sed 's/\./_/g;s/\%/_/g;s/\//_/g') #Replacing the special characters ".,%,/", with "_" #which are supported in the MQ manager name. ERR=$(/usr/es/sbin/cluster/utilities/clodmget -q "name=APPLICATION_NAME AND value=$APP_NAME" -f value HACMPsa_metadata 2>/dev/null) [[ -n $ERR ]] && { KLIB_SA_logmsg ERROR 1 66 wmq_sa.cat "The specified Queue Manager: %1\$s is already configured.\n" "$MQM_NAME" exit 1 } validate_AppName "$APP_NAME" [[ "$?" == "1" ]] && { KLIB_SA_logmsg ERROR 1 11 wmq_sa.cat "smart assist for WebSphere MQ Application id=%1\$s is not in the range [a-z][A-z][0-9]_\n" "$APP_NAME" exit 1 } PRIMARY_NODE=$($SA_SBIN/clsaxmlutil -s -x $XML_FILE -m $WMQ_HA_CONFIG/cl_wmq_manual_config.xsd -t PrimaryNode|awk -F= '{ print $2 }') if [[ $? != 0 || -z $PRIMARY_NODE ]];then KLIB_SA_logmsg ERROR 1 56 wmq_sa.cat "No value is specified for Primary Node property in WebSphere MQ xml file\n" exit 1 fi TO_NODES=$($SA_SBIN/clsaxmlutil -s -x $XML_FILE -m $WMQ_HA_CONFIG/cl_wmq_manual_config.xsd -t TakeoverNodes |awk -F= '{ print $2 }') SERVICE_IP=$($SA_SBIN/clsaxmlutil -s -x $XML_FILE -m $WMQ_HA_CONFIG/cl_wmq_manual_config.xsd -t IPAddress_or_name |awk -F= '{ print $2 }') PREFIX=$($SA_SBIN/clsaxmlutil -s -x $XML_FILE -m $WMQ_HA_CONFIG/cl_wmq_manual_config.xsd -t Prefix_or_Netmask |awk -F= '{ print $2 }') LISTENERS=$($SA_SBIN/clsaxmlutil -s -x $XML_FILE -m $WMQ_HA_CONFIG/cl_wmq_manual_config.xsd -t Listeners |awk -F= '{ print $2 }') # Check whether listeners are provided or not if [[ -z "$LISTENERS" ]]; then KLIB_SA_logmsg ERROR 2 27 wmq_sa.cat "No Listeners were provided in WebSphere MQ xml file" exit 1 fi $WMQ_HA_SBIN/cl_wmq_config -a "$APP_NAME" -m "$MQM_NAME" -p "$PRIMARY_NODE" -t "$TO_NODES" -s "$SERVICE_IP" -P "$PREFIX" -l "$LISTENERS" exit $? by  kHJ%o 0םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_start#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_start.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_start.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ######################################################################################### # # NAME: # cl_wmq_start # # PURPOSE: # This script is intended to use by PowerHA, # to start the specified Queue manager and its associated listeners. # # Flags: # u : MQM user name. # m : MQ instance name. # # ARGUMENTS: # mqm user name. # Queue manager instance name. # # RETURNS: 0 on success # 1 on failure ############################################################################### function start_mqm { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_SA_logmsg INFO 2 1 wmq_sa.cat "Starting the WebSphere MQ \ server with Queue Manager %1\$s and user as %2\$s" $QM $MQU # The strmqm command does not use the -x flag. /usr/bin/su $MQU -c "/usr/mqm/bin/strmqm $QM" RC=$? # Success while starting (( $RC == 0 )) && { KLIB_SA_logmsg INFO 2 2 wmq_sa.cat "Successfully started the \ WebSphere MQ server with Queue Manager %1\$s and user as %2\$s" $QM $MQU # Start all the associated MQ listeners typeset LSNRS=$(clodmget -n -q "name = "RESTART_METHOD"" -f value HACMPmonitor | grep -w "$QM -l" | awk '{print $NF}') for LSNR in $LSNRS; do $WMQ_HA_SBIN/cl_wmq_startlsnr -u $MQU -m $QM -l $LSNR RC=$? (( RC != 0 )) && break done return $RC } # Failure while starting KLIB_SA_logmsg ERROR 2 3 wmq_sa.cat "Failed starting the WebSphere MQ server \ with Queue Manager %1\$s and user as %2\$s" $QM $MQU return $RC } ############ #MAIN ############ [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals typeset MQU typeset QM while getopts u:m: opt do case $opt in u)# MQ User name. MQU=$OPTARG ;; m)# QM instance name. QM=$OPTARG ;; esac done [[ -z $MQU || -z $QM ]] && exit 1 start_mqm /usr/b kK%ox0םa֝a֝a&x2vT./usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_stop#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_stop.sh 1.3 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_stop.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################### # # NAME: cl_wmq_stop # # PURPOSE: # The script ends the QM by using two phases, initially trying # an immediate end with a time-out and escalating to a # forced stop of remaining processes. # # FLAGS: # u:MQM user name # m:Queue manager name # # ARGS: # MQM user name # Queue manager name # # RETURN: # 0 on success # 1 on failure # ############################################################################# function stop_mqm { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # First stop all associated MQ listeners typeset LSNRS=$(clodmget -n -q "name = "RESTART_METHOD"" -f value HACMPmonitor | grep -w "$QM -l" | awk '{print $NF}') for LSNR in $LSNRS; do $WMQ_HA_SBIN/cl_wmq_stoplsnr -u $MQU -m $QM -l $LSNR # Handling return code here is not required and proper log messages are logged. # Instead, proceed for stopping other listeners and queue manager done # Now proceed for stopping the mq server KLIB_SA_logmsg INFO 2 4 wmq_sa.cat "Stopping the WebSphere MQ \ server with Queue Manager %1\$s and user as %2\$s" "$QM" "$MQU" TIMEOUT=60 # waiting for a minute before stopping killing the Queue manager for severity in immediate brutal do # End the queue manager in the background to avoid # it blocking indefinitely. Run the TIMEOUT timer # at the same time to interrupt the attempt, and try a # more forceful version. If the brutal version fails, # nothing more can be done here. #Attempting ${severity} end of queue manager '${QM}'" case $severity in immediate) # Minimum severity of endmqm is immediate which severs # connections. # HA cluster should not be delayed by clients /usr/bin/su $MQU -c "/usr/mqm/bin/endmqm -i $QM &" ;; brutal) # This is a forced means of stopping queue manager processes. srchstr="( |-m)$QM *.*\$" for process in amqzmuc0 amqzxma0 amqfcxba amqfqpub amqpcsea \ amqzlaa0 amqzlsa0 runmqchi runmqlsr amqcrsta amqrrmfa \ amqrmppa amqzfuma amqzdmaa amqzmuf0 amqzmur0 amqzmgr0 do ps -ef | tr "\t" " " | grep $process | grep -v grep | \ egrep "$srchstr" | awk '{print $2}'| \ /usr/bin/su $MQU -c "xargs kill -9 > /dev/null 2>&1" done esac TIMED_OUT=yes SECONDS=0 while (( $SECONDS < ${TIMEOUT} )) do TIMED_OUT=yes i=0 while (( $i < 5 )) do # Check for execution controller termination srchstr="( |-m)$QM *.*\$" cnt=$(ps -ef | tr "\t" " " | grep amqzxma0 | grep -v grep | \ egrep "$srchstr" | awk '{print $2}' | wc -l ) (( i++ )) sleep 1 if (( $cnt == 0 )) then TIMED_OUT=no break fi done if [[ ${TIMED_OUT} == "no" ]] then break fi # "Waiting for ${severity} end of queue manager '${QM}'" sleep 1 done # timeout loop if [[ ${TIMED_OUT} == "yes" ]] then continue # to next level of urgency else break # queue manager is ended, job is done fi done # next phase return 0 } ############ #MAIN ############ [[ $VERBOSE_LOGGING == "high" ]] && set -x . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals typeset opt typeset MQU typeset QM while getopts u:m: opt do case $opt in u) # mqm user name. MQU=$OPTARG ;; m) # qm name. QM=$OPTARG ;; esac done [[ -z $MQU || -z $QM ]] && exit 1 stop_mqm  kL%o 0םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_monitors_conf#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_monitor.sh 1.4 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_monitor.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################### # # NAME: cl_wmq_monitor # # PURPOSE: # This script tests the operation of the queue manager. # # ARGUMENTS: Queue manager # # FLAGS: # m) QM name # RETURNS: # An exit code is generated by the runmqsc command: # 0 => Either the queue manager is starting or # the queue manager is running and responds.Either is OK. # >0 => The queue manager is not responding and not starting. # # ########################################################################### function monitor_mqm { if [[ $VERBOSE_LOGGING == 'high' ]] then PS_FUNC=monitor_mqm set -x fi # Test the operation of the queue manager. # Result is 0 on success, non-zero on error. KLIB_SA_logmsg INFO 2 5 wmq_sa.cat "Monitoring WebSphere MQ \ server configuration for Queue Manager %1\$s" $QM echo "ping qmgr" | /usr/bin/su $MQU -c "/usr/mqm/bin/runmqsc $QM > /dev/null 2>&1" pingresult=$? if (( $pingresult == 0 )) then # ping succeeded KLIB_SA_logmsg INFO 2 6 wmq_sa.cat "Queue Manager %1\$s is active" $QM result=0 else # ping failed # Don't condemn the queue manager immediately, it might be starting. srchstr='( |-m)'${QM}' *.*$' cnt=$(ps -ef | tr "\t" " " | grep strmqm | egrep "$srchstr" | grep -v grep | \ awk '{print $2}' | wc -l) if (( $cnt > 0 )) then # It appears that the queue manager is still starting up, tolerate KLIB_SA_logmsg WARN 2 7 wmq_sa.cat "Queue manager %1\$s is still \ starting up, it is active" $QM result=0 else # There is no sign of the queue manager starting KLIB_SA_logmsg ERROR 2 8 wmq_sa.cat "Queue manager %1\$s is not active" $QM result=$pingresult fi fi exit $result } ################## #MAIN ################## eval export $(/usr/es/sbin/cluster/utilities/cllsparam -n $(/usr/es/sbin/cluster/utilities/clodmget -f nodename HACMPcluster)) if [[ $VERBOSE_LOGGING == 'high' ]] && set -x then PS4_TIMER=true set -x version='1.4' fi . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals typeset opt typeset MQU typeset QM while getopts u:m: opt do case $opt in u) # mqm user name. MQU=$OPTARG ;; m) # qm name. QM=$OPTARG ;; esac done [[ -z $MQU ]] && [[ -z $QM ]] && exit 1 monitor_mqm DE_TOO k a&o$0םaY՝a֝a&2vT./usr/es/sbin/cluster/sa/wmq/config/cl_wmq_manual_config.xmlda$$ ever k.b&o$]0םaY՝a֝a&]2vT./usr/es/sbin/cluster/sa/wmq/config/cl_wmq_manual_config.xsdda$$  k„P%o@)0םa֝a֝a&)2vT./usr/es/sbin/cluster/sa/wmq/sbin/wmq_xutilsnua@@#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/wmq/sbin/wmq_xutils.sh 1.2 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)32 1.2 src/43haes/usr/sbin/cluster/sa/wmq/sbin/wmq_xutils.sh, hacmp, 61haes_r720, 1541B_hacmp720 10/5/15 12:28:16 ################################################################### # # Function: listEnv_WMQ # # Description: This component doesnt have any ENV settings. # but as per the framwework we need this dummy function # # Arcguments: none # # output: None # ################################################################### function listEnv_WMQ { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } ################################################################### # # Function: listInstances_WMQ # # Description: lists the WMQ instances. # # Arcguments: componentid , nodes # # output: list of instances in xml format # ################################################################### function listInstances_WMQ { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" "${0}" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset compid="$1" typeset nodes="$2" /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_query -l > /usr/es/sbin/cluster/etc/wmq_inst.x filterinst_XML < /usr/es/sbin/cluster/etc/wmq_inst.x KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" "${0}" } ####################################################################### # # Function: listProps_WMQ # # Description: List properties for the WebSphere_MQ_SERVER component # # Arguments: said,componentid,instance,nodes # # output: prints list of properties in xml format # # output will be contain PROPERTY tag for each of the option # shown here # #* Application Name [Queuemanager1_app] #* WebSphere MQ Server instance name Queuemanager1 #* Primary node [node1] + # Takeover node(s) [] # service IP label [] # Netmask(IPv4)/Prefix Length(IPv6) [] ######################################################################## function listProps_WMQ { KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Entering %s" $0 [[ "$VERBOSE_LOGGING" == "high" ]] && set -x typeset APP_NAME # application name for the MQM instane. typeset MQM_NAME # MQM instane name typeset P_NODE # Primary node for the MQM RG typeset TO_NODES # Takeover Node(s) for the MQM RG typeset SER_IP # Service ip for the MQM RG MQM_NAME=$INSTANCE_NAME APP_NAME="$MQM_NAME"_app : Replace special characters ".", "%", and "/" with "_", because : those characters are supported in the MQ manager name. APP_NAME=${APP_NAME//[\.%\/]/_} primarynode=$(/usr/es/sbin/cluster/utilities/get_local_nodename) primarynode_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | tr '\n' ',' ) primarynode_val_list=${primarynode_val_list%,} takovernodes_val_list=$(/usr/es/sbin/cluster/utilities/clnodename | tr '\n' ',' ) takovernodes_val_list=${takovernodes_val_list%,} ser_ip_list=$(/usr/es/sbin/cluster/utilities/cl_harvestIP_scripts -a19 | awk ' { print $1 }' | tr '\n' ',') ser_ip_list=${ser_ip_list%,} # : Print each property # #print_start_tag PROPERTY "id" "name" "lable" "labelid" # "value" "list" "range" "excludearg" # "prefix" "type" "editable" "required" # "multiselect" "visible" "help" "helpid" print_start_tag PROPERTIES # Application Name print_start_tag PROPERTY "1" "APPNAME" "Application Name" "" \ "$APP_NAME" "" "" "false" \ "-a" "string" "true" "true" \ "false" "true" "" "wmq_sa.cat,21,3" print_end_tag PROPERTY # WebSphere MQ Server instance name print_start_tag PROPERTY "2" "MQMNAME" "WebSphere MQ Server instance name" "" \ "$MQM_NAME" "" "" "false" \ "-m" "string" "false" "true" \ "false" "true" "" "wmq_sa.cat,21,6" print_end_tag PROPERTY # Primary Node print_start_tag PROPERTY "3" "MQM_P_NODE" "Primary Node" "" \ "$primarynode" "$primarynode_val_list" "" "" \ "-p" "string" "true" "true" \ "true" "true" "" "wmq_sa.cat,21,7" print_end_tag PROPERTY # Takeover Node(s) print_start_tag PROPERTY "4" "TAKEOVER_NODES" "Takeover Node(s)" "" \ "" "$takovernodes_val_list" "" "" \ "-t" "string" "true" "true" \ "true" "true" "" "wmq_sa.cat,21,4" print_end_tag PROPERTY # Service IP Label print_start_tag PROPERTY "5" "SERVICEIP" "Service IP Label" "" \ "" "$ser_ip_list" "" "" \ "-s" "string" "true" "true" \ "false" "true" "" "wmq_sa.cat,21,5" print_end_tag PROPERTY # Netmask(IPv4)/Prefix Length(IPv6) print_start_tag PROPERTY "6" "NETMASK" "Netmask(IPv4)/Prefix Length(IPv6)" "" \ "" "" "" "false" \ "-P" "string" "true" "false" \ "false" "true" "" "cluster_hlp.cat,25,51" print_end_tag PROPERTY print_start_tag CFGCMD "/usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_config" print_end_tag CFGCMD print_end_tag PROPERTIES KLIB_SA_logmsg TRACE 9 9999 sax.cat "clvtsa: Leaving %s" $0 } #------------------- # MAIN STARTS HERE #------------------- # # these functions will be consumed by clvtsa # wmq_xutils=( typeset env_func="listEnv_WMQ" typeset inst_func="listInstances_WMQ" typeset prop_func="listProps_WMQ" ) [node1] k-Q%o0םa֝a֝a&2vT./usr/es/sbin/cluster/sa/wmq/sbin/wmq_cvslsnua#!/usr/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r720 src/43haes/usr/sbin/cluster/sa/wmq/sbin/wmq_cvs.sh 1.5 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)96 1.5 src/43haes/usr/sbin/cluster/sa/wmq/sbin/wmq_cvs.sh, hacmp, 61haes_r720, 1539B_hacmp720 9/10/15 18:00:37 #################################################################################### # # NAME: # wmq_cvs # # PURPOSE: # this is the custom verification script for the MQM. # and verifies the configuration information of specified MQM # on take over nodes of the MQM RG. # # ARGUMENTS: # # # RETURNS # 0 on success # 1 on Failure ###################################################################################################################### ############## #MAIN ############# [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals typeset MQM typeset TO_NODES typeset APPS typeset MQM_LUID typeset MQM_LGID typeset result=0 typeset app typeset mqm_name typeset MQM_RG typeset MQM_NODES APPS=$(clodmget -q "name=APPLICATION_NAME" -f value -n HACMPsa_metadata) #configured apps on local node. for app in $APPS do mqm_name=$(clodmget -q "application_id=$app" -f name HACMPsa_metadata | grep -w "MQM_NAME") if (( $? != 0 ));then continue fi MQM_RG=$(clodmget -n -q name="RESOURCE_GROUP and application_id=$app" -f value HACMPsa_metadata) MQM_NODES=$(clodmget -n -q "group=$MQM_RG" -f nodes HACMPgroup) if [[ " $MQM_NODES " == *+([[:space:]])$localnode+([[:space:]])* ]]; then MQM=$(clodmget -q "name=MQM_NAME and application_id=$app" -f value -n HACMPsa_metadata) TO_NODES=$(clodmget -q "name=TO_NODES and application_id=$app" -f value -n HACMPsa_metadata) MQM_LUID=$(lsuser -a id mqm) #mqm uid on local node MQM_LUID=$(echo $MQM_LUID |awk '{ FS="=";print $2}') MQM_LGID=$(lsgroup -a id mqm) #mqm gid on local node MQM_LGID=$(echo $MQM_LGID |awk '{ FS="=";print $2}') MQM_LVER=$(/usr/mqm/bin/dspmqver|grep Version) MQM_LVER=$(echo $MQM_LVER |awk '{ print $2 }') #MQ version on local node for node in $TO_NODES do cl_rsh $node "/usr/bin/su mqm -c "/usr/mqm/bin/dspmqinf $MQM"" > /dev/null 2>&1 [[ $? != 0 ]] && { KLIB_SA_logmsg ERROR 1 69 wmq_sa.cat "configuration information for the:%1\$s is not found on the node:%2\$s.\n" $MQM $node result=1 } MQM_UID=$(cl_rsh $node "lsuser -a id mqm") MQM_UID=$(echo $MQM_UID|awk '{ FS="=";print $2}') MQM_GID=$(cl_rsh $node "lsgroup -a id mqm") MQM_GID=$(echo $MQM_GID|awk '{ FS="=";print $2}') [[ $MQM_LUID != $MQM_UID ]] && { KLIB_SA_logmsg ERROR 1 70 wmq_sa.cat "The MQM user id on node: %1\$s is not same as on local node.\n" $node result=1 } [[ $MQM_LGID != $MQM_GID ]] && { KLIB_SA_logmsg ERROR 1 71 wmq_sa.cat "The MQM group id on node: %1\$s is not same as on local node.\n" $node result=1 } MQM_VER=$(cl_rsh $node "/usr/mqm/bin/dspmqver|grep Version") MQM_VER=$(echo $MQM_VER |awk '{ print $2 }') [[ $MQM_LVER != $MQM_VER ]] && { KLIB_SA_logmsg ERROR 1 72 wmq_sa.cat "The installed MQ version is different or Not installed on node:%1\$s.\n" $node result=1 } done else exit 0 fi done exit $result or k"M%o/ 0םa֝a֝a&/ 2vT./usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_startlsnronfig#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_startlsnr.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ######################################################################################### # # NAME: # cl_wmq_startlsnr # # PURPOSE: # This script is intended to use by PowerHA to start the specified mq listener. # # Flags/Arguments: # u : MQM user name. # m : MQ instance name. # l : MQ listener name. # # RETURNS: 0 on success # 1 on failure ############################################################################### function start_mqlsnr { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_SA_logmsg INFO 2 12 wmq_sa.cat "Starting the WebSphere MQ listener %1\$s \ associated with Queue Manager %2\$s" $LSNR $QM echo "START LISTENER($LSNR)" | /usr/bin/su $MQU -c "/usr/mqm/bin/runmqsc $QM" RC=$? # listener started successfully (( $RC == 0 )) && { KLIB_SA_logmsg INFO 2 13 wmq_sa.cat "Successfully started the WebSphere \ MQ listener %1\$s associated with Queue Manager %2\$s" $LSNR $QM return 0 } # listener is already up and running (( $RC == 10 )) && { KLIB_SA_logmsg INFO 2 14 wmq_sa.cat "WebSphere MQ listener %1\$s \ associated with Queue Manager %2\$s is already up and running" $LSNR $QM return 0 } # Failure while starting the listener KLIB_SA_logmsg ERROR 2 15 wmq_sa.cat "Failed while starting the WebSphere \ MQ listener %1\$s associated with Queue Manager %2\$s.\n\ Make sure Queue Manager is up and running." $LSNR $QM return $RC } ############ #MAIN ############ [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals typeset MQU typeset QM typeset LSNR while getopts u:m:l: opt do case $opt in u)# MQ User name. MQU=$OPTARG ;; m)# QM instance name. QM=$OPTARG ;; l)# MQ Listener name. LSNR=$OPTARG ;; esac done [[ -z $MQU || -z $QM || -z $LSNR ]] && exit 1 start_mqlsnr $ kXN%o 0םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_stoplsnronfig#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_stoplsnr.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ######################################################################################### # # NAME: # cl_wmq_stoplsnr # # PURPOSE: # This script is intended to use by PowerHA to stop the specified mq listener. # # Flags/Arguments: # u : MQM user name. # m : MQ instance name. # l : MQ listener name. # # RETURNS: 0 on success # 1 on failure ############################################################################### function stop_mqlsnr { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x KLIB_SA_logmsg INFO 2 16 wmq_sa.cat "Stopping the WebSphere MQ listener %1\$s \ associated with Queue Manager %2\$s" $LSNR $QM echo "STOP LISTENER($LSNR)" | /usr/bin/su $MQU -c "/usr/mqm/bin/runmqsc $QM" RC=$? # Successfully stopped listener (( $RC == 0 )) && { KLIB_SA_logmsg INFO 2 17 wmq_sa.cat "Successfully stopped the WebSphere \ MQ listener %1\$s associated with Queue Manager %2\$s" $LSNR $QM return 0 } # listener already stopped (( $RC == 10 )) && { KLIB_SA_logmsg INFO 2 18 wmq_sa.cat "WebSphere MQ listener %1\$s \ associated with Queue Manager %2\$s is already stopped" $LSNR $QM return 0 } # Failed while stopping the listener KLIB_SA_logmsg ERROR 2 19 wmq_sa.cat "Failed while stopping the WebSphere \ MQ listener %1\$s associated with Queue Manager %2\$s.\n\ The Queue Manager might be down or stopped." $LSNR $QM return $RC } ############ #MAIN ############ [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals typeset MQU typeset QM typeset LSNR while getopts u:m:l: opt do case $opt in u)# MQ User name. MQU=$OPTARG ;; m)# QM instance name. QM=$OPTARG ;; l)# MQ Listener name. LSNR=$OPTARG ;; esac done [[ -z $MQU || -z $QM || -z $LSNR ]] && exit 1 stop_mqlsnr  k^O%o 0םa֝a֝a& 2vT./usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_monitorlsnrfig#!/usr/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # @(#) 7d4c34b 43haes/usr/sbin/cluster/sa/wmq/sbin/cl_wmq_monitorlsnr.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################### # # NAME: cl_wmq_monitorlsnr # # PURPOSE: # This script tests the operation of a particular mq listener. # # ARGUMENTS: Queue manager # # FLAGS: # u) MQU name # m) QM name # l) LSNR name # RETURNS: # An exit code is generated by the runmqsc command: # 0 => Either the listener is starting or # the listener is running and responds. Either is OK. # >0 => The listener is not responding and not starting. # # ########################################################################### function monitor_mqlsnr { [[ "$VERBOSE_LOGGING" == "high" ]] && set -x # Test the operation of mq listener. # Result is 0 on success, non-zero on error. KLIB_SA_logmsg INFO 2 24 wmq_sa.cat "Monitoring the WebSphere MQ listener %1\$s \ associated with Queue Manager %2\$s" $LSNR $QM echo "DISPLAY LSSTATUS($LSNR)" | /usr/bin/su $MQU -c "/usr/mqm/bin/runmqsc $QM" | grep -qw "STATUS(RUNNING)" RC=$? if (( $RC == 0 )) then # it means, mq listener is running now KLIB_SA_logmsg INFO 2 25 wmq_sa.cat "WebSphere MQ listener %1\$s \ associated with Queue Manager %2\$s is up and running" $LSNR $QM else # mq listener is not running now KLIB_SA_logmsg INFO 2 26 wmq_sa.cat "WebSphere MQ listener %1\$s \ associated with Queue Manager %2\$s is not up and running" $LSNR $QM fi exit $RC } ################## #MAIN ################## # set a standard PATH export PATH="$(/usr/es/sbin/cluster/utilities/cl_get_path all)" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals typeset opt typeset MQU typeset QM typeset LSNR while getopts u:m:l: opt do case $opt in u) # mqm user name. MQU=$OPTARG ;; m) # qm name. QM=$OPTARG ;; l) # lsnr name. LSNR=$OPTARG ;; esac done [[ -z $MQU || -z $QM || -z $LSNR ]] && exit 1 monitor_mqlsnr  k d else # mq listener is not running now KLIB_SA_logmsg INFO 2 26 wmq_sa.cat "WebSphere MQ listener %1\$s \ associated with Queue Manager %2\$s is not up and running" $LSNR $QM fi exit $RC } ################## #MAIN ################## # set a standard PATH export PATH="$(/usr/es/sbin/cluster/utilities/cl_get_path all)" [[ "$VERBOSE_LOGGING" == "high" ]] && set -x . /usr/es/sbin/cluster/sa/wmq/sbin/cl_wmq_Globals typeset opt typeset MQU typeset QM typeset LSNR while getopts u:m:l: opt do case $opt in u) # mqm user name. MQU=$OPTARG ;;