_iPostInstallUtility 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. #!/bin/sh
  2. ###############################################################################
  3. # Install utility for IBM i
  4. #
  5. # Copyright IBM Corp. 2012
  6. # The source code for this program is not published or other-
  7. # wise divested of its trade secrets, irrespective of what has
  8. # been deposited with the U.S. Copyright Office.
  9. #
  10. # ----------------------------------------------------------------------------
  11. #
  12. # You can optionally run the _iPostInstallUtility script after unzipping the
  13. # product archive file on IBM i. However, this step is only for administrative
  14. # installations. Do not use this command for private user installations.
  15. # The administrator must have *ALLOBJ and *SECADM special authority to run this
  16. # script.
  17. #
  18. #
  19. usage() {
  20. echo ""
  21. echo "Usage: _iPostInstallUtility [options]"
  22. echo ""
  23. echo "Options:"
  24. echo " --action [SETUPNATIVE | POSTINSTALLEXIT | POSTFPEXIT ]"
  25. echo " --installroot install_root"
  26. echo " --userroot user_root"
  27. echo ""
  28. echo "The --installroot option is required by the"
  29. echo "POSTINSTALLEXIT and POSTFPEXIT actions for"
  30. echo "InstallationManager type installs and is otherwise"
  31. echo "ignored."
  32. echo "The --userroot option is required by the"
  33. echo "POSTINSTALLEXIT action for InstallationManager type"
  34. echo "installs and is otherwise ignored."
  35. exit 1
  36. }
  37. set_wlp_install_dir() {
  38. CUR_DIR=`pwd`
  39. WLP_DIR=`dirname ${0}`/../../../../
  40. cd "${WLP_DIR}"
  41. WLP_INSTALL_DIR=`pwd`
  42. cd "${CUR_DIR}"
  43. }
  44. setInDefaultEnv() {
  45. echo "Setting $1=$2 in ${WLP_INSTALL_DIR}/etc/default.env."
  46. echo "# _iPostInstallUtility:" >> ${WLP_INSTALL_DIR}/etc/default.env
  47. echo "$1=$2" >> ${WLP_INSTALL_DIR}/etc/default.env
  48. }
  49. ##
  50. ## evalJavaPropsFile: Reads Java properties from file specified in $1,
  51. ## and for every property it replaces all "." with "_" in the property name,
  52. ## sets the resulting named script variable to the property value and exports
  53. ## the variable.
  54. evalJavaPropsFile()
  55. {
  56. if [ -f "$1" ]; then
  57. while read -r line; do
  58. case $line in
  59. \#*);;
  60. *=*)
  61. # Only accept alphanumeric variable names to avoid eval complexities.
  62. if var=`echo "$line" | sed -e 's/^\([a-zA-Z0-9_\.][a-zA-Z0-9_\.]*\)=.*/\1/'`; then
  63. var=`echo $var | sed -e 's/\./_/g'`
  64. value=\'`echo "$line" | sed -e 's/[^=]*=//' -e s/\'/\'\"\'\"\'/g`\'
  65. eval "$var=$value; export $var"
  66. fi
  67. esac
  68. done < "$1"
  69. fi
  70. }
  71. ######################################################################
  72. # post_fp_exit: Restore native objects after applying fixpacks
  73. ######################################################################
  74. post_fp_exit() {
  75. echo "Executing post_fp_exit"
  76. #Load the location of the WAS_PRODUCT_LIB, as setup_native determines it dynamically
  77. . ${WLP_INSTALL_DIR}/etc/default.env
  78. PROD_LIB=$WAS_PRODUCT_LIB
  79. echo "WLP install directory is ${WLP_INSTALL_DIR}"
  80. echo "Product library is ${PROD_LIB}"
  81. # Determine objects to restore
  82. PROD_PGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/pgms)
  83. PROD_SRVPGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms)
  84. ALL_PROD_PRODUCT_PGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/product/pgms)
  85. PROD_PRODUCT_PGMS=""
  86. for PGM1 in $ALL_PROD_PRODUCT_PGMS
  87. do
  88. case "${PGM1}" in
  89. 'qwas01mx') if [ ${PRODUCT_EDITION} = "EXPRESS" ] && [ ${IS_IM_INSTALL} ]; then
  90. PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
  91. fi
  92. ;;
  93. 'qwas02mx') if [ ${PRODUCT_EDITION} = "BASE" ] && [ ${IS_IM_INSTALL} ]; then
  94. PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
  95. fi
  96. ;;
  97. 'qwas03mx') if [ ${PRODUCT_EDITION} = "ND" ] && [ ${IS_IM_INSTALL} ]; then
  98. PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
  99. fi
  100. ;;
  101. 'qwas05mx') if [ ${PRODUCT_EDITION} = "LIBERTY_CORE" ] && [ ${IS_IM_INSTALL} ]; then
  102. if [ -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWAS05M.PRDLOD ]; then
  103. PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
  104. fi
  105. fi
  106. ;;
  107. *) PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
  108. ;;
  109. esac
  110. done
  111. # Create temporary save file
  112. system "QSYS/CRTSAVF FILE(QGPL/${TMP_SF})"
  113. # Restore program objects - these go to the product library for the install
  114. for PGM in ${PROD_PGMS} ; do
  115. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/pgms/$PGM ...
  116. system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/pgms/${PGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  117. system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${PROD_LIB}) ${V6R1FRC}"
  118. done
  119. # Restore shared product program objects - these go to the shared product library for the install
  120. for PRDPGM in ${PROD_PRODUCT_PGMS} ; do
  121. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/product/pgms/$PRDPGM ...
  122. system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/product/pgms/${PRDPGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  123. system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${SHR_PROD_LIB}) ${V6R1FRC}"
  124. done
  125. # Restore service program objects - these go to the product library for the install
  126. for SRVPGM in ${PROD_SRVPGMS} ; do
  127. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/$SRVPGM ...
  128. system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/${SRVPGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  129. system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${PROD_LIB}) ${V6R1FRC}"
  130. done
  131. # Delete temporary save file
  132. system "QSYS/DLTF FILE(QGPL/${TMP_SF})"
  133. # Update the *PGM and *SRVPGM to be bound to product library for this install
  134. # This must be done after all *PGMs and *SRVPGMs restored to avoid dependency problems
  135. for SRVPGM in ${PROD_SRVPGMS} ; do
  136. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/$SRVPGM ...
  137. system "QSYS/UPDSRVPGM SRVPGM(${PROD_LIB}/${SRVPGM}) MODULE(*NONE) SRVPGMLIB(${PROD_LIB})"
  138. done
  139. for PGM in ${PROD_PGMS} ; do
  140. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/pgms/$PGM ...
  141. system "QSYS/UPDPGM PGM(${PROD_LIB}/${PGM}) MODULE(*NONE) SRVPGMLIB(${PROD_LIB})"
  142. done
  143. # Verify existence of objects restored
  144. for PGM in ${PROD_PGMS} ; do
  145. if [ ! -e /QSYS.LIB/${PROD_LIB}.LIB/${PGM}.PGM ]; then
  146. echo "Error: ${PROD_LIB}/${PGM} does not exist."
  147. ERR_CHK=1
  148. fi
  149. done
  150. for SRVPGM in ${PROD_SRVPGMS} ; do
  151. if [ ! -e /QSYS.LIB/${PROD_LIB}.LIB/${SRVPGM}.SRVPGM ]; then
  152. echo "Error: ${PROD_LIB}/${SRVPGM} does not exist."
  153. ERR_CHK=1
  154. fi
  155. done
  156. # Set ownership and authorities on install dir
  157. if [ ${IS_IM_INSTALL} ]; then
  158. chown -R QSYS ${INSTALL_ROOT}
  159. else
  160. chown -R QSYS ${WLP_INSTALL_DIR}
  161. chmod -R o=rx ${WLP_INSTALL_DIR}
  162. fi
  163. }
  164. ######################################################################
  165. # setup_native: Restore native objects after installing
  166. ######################################################################
  167. setup_native() {
  168. echo "Executing setup_native"
  169. SHR_PROD_LIB=QWAS9
  170. CREATED_SHR_PROD_LIB=0
  171. TMP_SF=QTMPWASSF
  172. SAV_LIB=QWAS9
  173. V6R1FRC="FRCOBJCVN(*YES *ALL)"
  174. WAS_PRODUCT_LIB=
  175. # Create underlying product library for stuff common to all installs
  176. if [ -e /QSYS.LIB/${SHR_PROD_LIB}.LIB ]; then
  177. CREATED_SHR_PROD_LIB=1
  178. echo "Shared Product library, ${SHR_PROD_LIB}, already exists"
  179. else
  180. system "QSYS/CRTLIB LIB(${SHR_PROD_LIB}) AUT(*USE)"
  181. ERR_CHK=$?
  182. if [ ${ERR_CHK} -ne 0 ]; then
  183. echo "Error: Failed to create library ${SHR_PROD_LIB}"
  184. exit 1
  185. fi
  186. system "CHGOBJOWN OBJ(${SHR_PROD_LIB}) OBJTYPE(*LIB) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
  187. fi
  188. # Determine the name of the PROD_LIB to use for this install
  189. ALPHABET="A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  190. PROD_LIB=${SHR_PROD_LIB}A
  191. for letter in $ALPHABET
  192. do
  193. if [ -e /QSYS.LIB/${PROD_LIB}.LIB ]; then
  194. PROD_LIB=${SHR_PROD_LIB}${letter}
  195. fi
  196. done
  197. # Create product library for this install
  198. if [ -e /QSYS.LIB/${PROD_LIB}.LIB ]; then
  199. echo "Product library, ${PROD_LIB}, already exists"
  200. else
  201. system "QSYS/CRTLIB LIB(${PROD_LIB}) AUT(*USE)"
  202. ERR_CHK=$?
  203. if [ ${ERR_CHK} -ne 0 ]; then
  204. echo "Error: Failed to create library ${PROD_LIB}"
  205. exit 1
  206. fi
  207. system "CHGOBJOWN OBJ(${PROD_LIB}) OBJTYPE(*LIB) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
  208. fi
  209. # Write the library info to the properties file
  210. if [ -e ${WLP_INSTALL_DIR}/etc/default.env ]; then
  211. rm -rf ${WLP_INSTALL_DIR}/etc/default.env
  212. else
  213. if [ ! -e ${WLP_INSTALL_DIR}/etc ]; then
  214. mkdir -p ${WLP_INSTALL_DIR}/etc
  215. fi
  216. fi
  217. touch -C 819 ${WLP_INSTALL_DIR}/etc/default.env
  218. chown QSYS ${WLP_INSTALL_DIR}/etc/default.env
  219. echo "############# Do not alter or edit this file! #############" >> ${WLP_INSTALL_DIR}/etc/default.env
  220. setInDefaultEnv WAS_SHARED_LIB "${SHR_PROD_LIB}"
  221. setInDefaultEnv WAS_PRODUCT_LIB "${PROD_LIB}"
  222. setInDefaultEnv WAS_PRODUCT_LIB_PATH "/QSYS.LIB/${PROD_LIB}.LIB"
  223. # Determine objects to restore
  224. PROD_PGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/pgms)
  225. PROD_SRVPGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms)
  226. ALL_PROD_PRODUCT=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/product)
  227. ALL_PROD_PRODUCT_PGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/product/pgms)
  228. PROD_PRODUCT_PGMS=""
  229. PROD_PRODUCT=""
  230. for PGM1 in $ALL_PROD_PRODUCT_PGMS
  231. do
  232. case "${PGM1}" in
  233. 'qwas01mx') if [ ${PRODUCT_EDITION} = "EXPRESS" ] && [ ${IS_IM_INSTALL} ]; then
  234. PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
  235. fi
  236. ;;
  237. 'qwas02mx') if [ ${PRODUCT_EDITION} = "BASE" ] && [ ${IS_IM_INSTALL} ]; then
  238. PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
  239. fi
  240. ;;
  241. 'qwas03mx') if [ ${PRODUCT_EDITION} = "ND" ] && [ ${IS_IM_INSTALL} ]; then
  242. PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
  243. fi
  244. ;;
  245. 'qwas05mx') if [ ${PRODUCT_EDITION} = "LIBERTY_CORE" ] && [ ${IS_IM_INSTALL} ]; then
  246. if [ ${CREATED_SHR_PROD_LIB} -eq 0 ]; then
  247. PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
  248. fi
  249. fi
  250. ;;
  251. *) PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
  252. ;;
  253. esac
  254. done
  255. for PGM2 in $ALL_PROD_PRODUCT
  256. do
  257. case "${PGM2}" in
  258. 'qwas01') if [ ${PRODUCT_EDITION} = "EXPRESS" ] && [ ${IS_IM_INSTALL} ]; then
  259. PROD_PRODUCT="${PROD_PRODUCT} ${PGM2}"
  260. fi
  261. ;;
  262. 'qwas02') if [ ${PRODUCT_EDITION} = "BASE" ] && [ ${IS_IM_INSTALL} ]; then
  263. PROD_PRODUCT="${PROD_PRODUCT} ${PGM2}"
  264. fi
  265. ;;
  266. 'qwas03') if [ ${PRODUCT_EDITION} = "ND" ] && [ ${IS_IM_INSTALL} ]; then
  267. PROD_PRODUCT="${PROD_PRODUCT} ${PGM2}"
  268. fi
  269. ;;
  270. 'qwas05') if [ ${PRODUCT_EDITION} = "LIBERTY_CORE" ] && [ ${IS_IM_INSTALL} ]; then
  271. if [ ${CREATED_SHR_PROD_LIB} -eq 0 ]; then
  272. PROD_PRODUCT="${PROD_PRODUCT} ${PGM2}"
  273. fi
  274. fi
  275. ;;
  276. 'pgms')
  277. ;;
  278. *) PROD_PRODUCT="${PROD_PRODUCT} ${PGM2}"
  279. ;;
  280. esac
  281. done
  282. # Create temporary save file
  283. system "QSYS/CRTSAVF FILE(QGPL/${TMP_SF})"
  284. # Restore program objects - these go to the product library for the install
  285. for PGM in ${PROD_PGMS} ; do
  286. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/pgms/$PGM ...
  287. system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/pgms/${PGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  288. system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${PROD_LIB}) ${V6R1FRC}"
  289. done
  290. # Restore shared product program objects - these go to the shared product library for the install
  291. for PRDPGM in ${PROD_PRODUCT_PGMS} ; do
  292. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/product/pgms/$PRDPGM ...
  293. system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/product/pgms/${PRDPGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  294. system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${SHR_PROD_LIB}) ${V6R1FRC}"
  295. done
  296. # Restore service program objects - these go to the product library for the install
  297. for SRVPGM in ${PROD_SRVPGMS} ; do
  298. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/$SRVPGM ...
  299. system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/${SRVPGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  300. system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${PROD_LIB}) ${V6R1FRC}"
  301. done
  302. # Restore product def/loads and message file objects - these go to the WAS shared common product library
  303. for PRODPART in ${PROD_PRODUCT} ; do
  304. # Do not restore Product Loads if they already exist (from another install). This will remove any PTFs applied for the product/option.
  305. if [ -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/${PRODPART}M.PRDLOD ]; then
  306. echo "Skipping ${WLP_INSTALL_DIR}/lib/native/os400/product/${PRODPART}"
  307. else
  308. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/product/$PRODPART ...
  309. system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/product/${PRODPART}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  310. system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${SHR_PROD_LIB}) ${V6R1FRC}"
  311. fi
  312. done
  313. # Delete temporary save file
  314. system "QSYS/DLTF FILE(QGPL/${TMP_SF})"
  315. # Update the *PGM and *SRVPGM to be bound to product library for this install
  316. # This must be done after all *PGMs and *SRVPGMs restored to avoid dependency problems
  317. for SRVPGM in ${PROD_SRVPGMS} ; do
  318. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/$SRVPGM ...
  319. system "QSYS/UPDSRVPGM SRVPGM(${PROD_LIB}/${SRVPGM}) MODULE(*NONE) SRVPGMLIB(${PROD_LIB})"
  320. done
  321. for PGM in ${PROD_PGMS} ; do
  322. echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/pgms/$PGM ...
  323. system "QSYS/UPDPGM PGM(${PROD_LIB}/${PGM}) MODULE(*NONE) SRVPGMLIB(${PROD_LIB})"
  324. done
  325. # Verify existence of objects restored
  326. for PGM in ${PROD_PGMS} ; do
  327. if [ ! -e /QSYS.LIB/${PROD_LIB}.LIB/${PGM}.PGM ]; then
  328. echo "Error: ${PROD_LIB}/${PGM} does not exist."
  329. ERR_CHK=1
  330. fi
  331. done
  332. for SRVPGM in ${PROD_SRVPGMS} ; do
  333. if [ ! -e /QSYS.LIB/${PROD_LIB}.LIB/${SRVPGM}.SRVPGM ]; then
  334. echo "Error: ${PROD_LIB}/${SRVPGM} does not exist."
  335. ERR_CHK=1
  336. fi
  337. done
  338. if [ ${ERR_CHK} -eq 1 ]; then
  339. if [ ${ACTION} = "SETUPNATIVE" ]; then
  340. exit 1
  341. fi
  342. fi
  343. }
  344. ######################################################################
  345. #post_install_exit: Create native objects and set authorities
  346. ######################################################################
  347. post_install_exit() {
  348. echo "Executing post_install_exit"
  349. # Create the user directory
  350. if [ ${IS_IM_INSTALL} ]; then
  351. if [ ! -e ${USER_ROOT} ]; then
  352. mkdir -p ${USER_ROOT}
  353. chown QSYS ${USER_ROOT}
  354. chmod o=rx ${USER_ROOT}
  355. fi
  356. WLPUSRDIR=${USER_ROOT}/wlp/usr
  357. WLPOUTPUTDIR=${USER_ROOT}/wlp/output/servers
  358. if [ ! -e ${USER_ROOT}/wlp ]; then
  359. mkdir ${USER_ROOT}/wlp
  360. fi
  361. if [ ! -e ${WLPUSRDIR} ]; then
  362. if [ -e ${WLP_INSTALL_DIR}/usr ]; then
  363. cp -R ${WLP_INSTALL_DIR}/usr ${USER_ROOT}/wlp
  364. else mkdir ${WLPUSRDIR}
  365. fi
  366. fi
  367. if [ ! -e ${WLPOUTPUTDIR} ]; then
  368. mkdir -p ${WLPOUTPUTDIR}
  369. fi
  370. chown -R QSYS ${USER_ROOT}/wlp
  371. chmod -R 755 ${USER_ROOT}/wlp
  372. fi
  373. #Load the location of the WAS_PRODUCT_LIB, as setup_native determines it dynamically
  374. . ${WLP_INSTALL_DIR}/etc/default.env
  375. PROD_LIB=$WAS_PRODUCT_LIB
  376. echo "WLP install directory is ${WLP_INSTALL_DIR}"
  377. echo "Product library is ${PROD_LIB}"
  378. # Register QEJBSVR with security function
  379. # Allows server to run as QEJBSVR
  380. system "QSYS/CALL PGM(${PROD_LIB}/QWAS00)"
  381. # Add private authorities for product library parts
  382. system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWLPSEC) OBJTYPE(*SRVPGM) USER(QEJBSVR) AUT(*USE)"
  383. system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWLPCMN) OBJTYPE(*PGM) USER(QEJBSVR) AUT(*USE)"
  384. system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWLPSTRSVR) OBJTYPE(*PGM) USER(QEJBSVR) AUT(*USE)"
  385. system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWLPSTRSVR) OBJTYPE(*PGM) USER(*PUBLIC) AUT(*EXCLUDE)"
  386. # Create jobd, jobq, sbsd, etc.
  387. if [ ! -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWAS9.CLS ]; then
  388. system "QSYS/CRTCLS CLS(${SHR_PROD_LIB}/QWAS9) RUNPTY(20) TIMESLICE(2000) TEXT('WebSphere Application Server class')"
  389. fi
  390. system "QSYS/CHGOBJOWN OBJ(${SHR_PROD_LIB}/QWAS9) OBJTYPE(*CLS) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
  391. if [ ! -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWASJOBQ.JOBQ ]; then
  392. system "QSYS/CRTJOBQ JOBQ(${SHR_PROD_LIB}/QWASJOBQ) TEXT('WebSphere Application Server job queue') OPRCTL(*YES)"
  393. fi
  394. system "QSYS/CHGOBJOWN OBJ(${SHR_PROD_LIB}/QWASJOBQ) OBJTYPE(*JOBQ) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
  395. if [ ! -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWASOUTQ.OUTQ ]; then
  396. system "QSYS/CRTOUTQ OUTQ(${SHR_PROD_LIB}/QWASOUTQ) TEXT('WebSphere Application Server output queue')"
  397. fi
  398. system "QSYS/CHGOBJOWN OBJ(${SHR_PROD_LIB}/QWASOUTQ) OBJTYPE(*OUTQ) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
  399. if [ ! -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWASJOBD.JOBD ]; then
  400. system "QSYS/CRTJOBD JOBD(${SHR_PROD_LIB}/QWASJOBD) JOBQ(${SHR_PROD_LIB}/QWASJOBQ) OUTQ(${SHR_PROD_LIB}/QWASOUTQ) TEXT('WebSphere Application Server job description') INLLIBL(*SYSVAL) LOG(4 0 *SECLVL) JOBMSGQFL(*WRAP) ALWMLTTHD(*YES)"
  401. fi
  402. system "QSYS/CHGOBJOWN OBJ(${SHR_PROD_LIB}/QWASJOBD) OBJTYPE(*JOBD) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
  403. if [ ! -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWAS9.SBSD ]; then
  404. system "QSYS/CRTSBSD SBSD(${SHR_PROD_LIB}/QWAS9) POOLS((1 *BASE)) MAXJOBS(*NOMAX) TEXT('WebSphere Application Server subsystem description')"
  405. system "QSYS/ADDRTGE SBSD(${SHR_PROD_LIB}/QWAS9) SEQNBR(9999) CMPVAL(*ANY) PGM(QSYS/QCMD)"
  406. system "QSYS/ADDJOBQE SBSD(${SHR_PROD_LIB}/QWAS9) JOBQ(${SHR_PROD_LIB}/QWASJOBQ) MAXACT(*NOMAX) SEQNBR(9999)"
  407. fi
  408. system "QSYS/CHGOBJOWN OBJ(${SHR_PROD_LIB}/QWAS9) OBJTYPE(*SBSD) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
  409. # Add private auths for QEJBSVR
  410. system "QSYS/GRTOBJAUT OBJ(${SHR_PROD_LIB}/QWAS9) OBJTYPE(*SBSD) USER(QEJBSVR) AUT(*OBJMGT *OBJOPR *READ *EXECUTE)"
  411. system "QSYS/GRTOBJAUT OBJ(${SHR_PROD_LIB}/QWASJOBD) OBJTYPE(*JOBD) USER(QEJBSVR) AUT(*OBJMGT *OBJOPR *READ *EXECUTE)"
  412. system "QSYS/GRTOBJAUT OBJ(${SHR_PROD_LIB}/QWASJOBQ) OBJTYPE(*JOBQ) USER(QEJBSVR) AUT(*USE)"
  413. system "QSYS/GRTOBJAUT OBJ(${SHR_PROD_LIB}/QWAS9) OBJTYPE(*CLS) USER(QEJBSVR) AUT(*USE)"
  414. # Add service table entries
  415. system "QSYS/ADDSRVTBLE SERVICE('was9-admin-ssl') PORT(9043) PROTOCOL('tcp') TEXT('Administrative console SSL port')"
  416. system "QSYS/ADDSRVTBLE SERVICE('was9-inthttp') PORT(9080) PROTOCOL('tcp') TEXT('Internal HTTP port')"
  417. # Set ownership and authorities on install dir
  418. if [ ${IS_IM_INSTALL} ]; then
  419. chown -R QSYS ${INSTALL_ROOT}
  420. else
  421. chown -R QSYS ${WLP_INSTALL_DIR}
  422. chmod -R o=rx ${WLP_INSTALL_DIR}
  423. fi
  424. #Set WLP_DEFAULT_JAVA_HOME, WLP_DEFAULT_USER_DIR and WLP_DEFAULT_OUTPUT_DIR in default.env
  425. #and set permissions for QEJBSVR
  426. WLP_DEFAULT_JAVA_HOME=
  427. WLP_DEFAULT_USER_DIR=
  428. WLP_DEFAULT_OUTPUT_DIR=
  429. #Source default.env if it exists, otherwise create it
  430. if [ ! -e ${WLP_INSTALL_DIR}/etc/default.env ]; then
  431. if [ ! -e ${WLP_INSTALL_DIR}/etc ]; then
  432. mkdir -p ${WLP_INSTALL_DIR}/etc
  433. fi
  434. touch -C 819 ${WLP_INSTALL_DIR}/etc/default.env
  435. chown QSYS ${WLP_INSTALL_DIR}/etc/default.env
  436. else
  437. . ${WLP_INSTALL_DIR}/etc/default.env
  438. fi
  439. if [ ${WLP_DEFAULT_JAVA_HOME} ]; then
  440. if [ -e ${WLP_DEFAULT_JAVA_HOME} ]; then
  441. SET_VAR_IN_SERVER_ENV=
  442. fi
  443. else
  444. setInDefaultEnv WLP_DEFAULT_JAVA_HOME $JAVA_LOCATION
  445. fi
  446. if [ ${WLPUSRDIR} ]; then
  447. if [ ${WLP_DEFAULT_USER_DIR} ]; then
  448. if [ -e ${WLPUSRDIR} ]; then
  449. if [ ! ${#WLPUSRDIR} = ${#WLP_DEFAULT_USER_DIR} ] || [ ! `echo ${WLP_DEFAULT_USER_DIR} | grep -i "${WLPUSRDIR}"` ]; then
  450. setInDefaultEnv WLP_DEFAULT_USER_DIR ${WLPUSRDIR}
  451. fi
  452. else
  453. echo "Error: Directory ${WLPUSRDIR} does not exist."
  454. ERR_CHK=1
  455. fi
  456. else
  457. if [ -e ${WLPUSRDIR} ]; then
  458. setInDefaultEnv WLP_DEFAULT_USER_DIR ${WLPUSRDIR}
  459. else
  460. echo "Error: Directory ${WLPUSRDIR} does not exist."
  461. ERR_CHK=1
  462. fi
  463. fi
  464. fi
  465. if [ ${WLPOUTPUTDIR} ]; then
  466. if [ ${WLP_DEFAULT_OUTPUT_DIR} ]; then
  467. if [ -e ${WLPOUTPUTDIR} ]; then
  468. if [ ! ${#WLP_DEFAULT_OUTPUT_DIR} = ${#WLPOUTPUTDIR} ] || [ ! `echo ${WLP_DEFAULT_OUTPUT_DIR} | grep -i "${WLPOUTPUTDIR}"` ]; then
  469. setInDefaultEnv WLP_DEFAULT_OUTPUT_DIR ${WLPOUTPUTDIR}
  470. fi
  471. else
  472. echo "Error: Directory ${WLPOUTPUTDIR} does not exist."
  473. ERR_CHK=1
  474. fi
  475. else
  476. if [ -e ${WLPOUTPUTDIR} ]; then
  477. setInDefaultEnv WLP_DEFAULT_OUTPUT_DIR ${WLPOUTPUTDIR}
  478. else
  479. echo "Error: Directory ${WLPOUTPUTDIR} does not exist."
  480. ERR_CHK=1
  481. fi
  482. fi
  483. fi
  484. ${WLP_INSTALL_DIR}/lib/native/os400/bin/_iAuthUtility --rolename server --userprofilename QEJBSVR
  485. if [ ${ERR_CHK} -eq 1 ]; then
  486. if [ ${ACTION} = "POSTINSTALLEXIT" ]; then
  487. exit 1
  488. fi
  489. fi
  490. }
  491. ######################################################################
  492. #do_all_install: Execute all install actions
  493. ######################################################################
  494. do_all_install() {
  495. echo "Executing $ACTION"
  496. setup_native
  497. post_install_exit
  498. }
  499. ######################################################################
  500. #main
  501. ######################################################################
  502. if [ "`uname`" != "OS400" ]; then
  503. exit 1
  504. fi
  505. ACTION=DOALL
  506. INSTALL_ROOT=
  507. USER_ROOT=
  508. ERR_CHK=0
  509. while [ $# -gt 0 ]; do
  510. case $1 in
  511. '--action') if [ $# -gt 1 ]; then
  512. ACTION=$2;shift
  513. fi
  514. ;;
  515. '--installroot') if [ $# -gt 1 ]; then
  516. INSTALL_ROOT=$2;shift
  517. fi
  518. ;;
  519. '--userroot') if [ $# -gt 1 ]; then
  520. USER_ROOT=$2;shift
  521. fi
  522. ;;
  523. *) usage
  524. ;;
  525. esac
  526. shift
  527. done
  528. set_wlp_install_dir
  529. echo "WebSphere liberty profile install root is ${WLP_INSTALL_DIR}"
  530. SHR_PROD_LIB=QWAS9
  531. TMP_SF=QTMPWASSF
  532. SAV_LIB=QWAS9
  533. V6R1FRC="FRCOBJCVN(*YES *ALL)"
  534. JAVA_LOCATION=/QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit
  535. evalJavaPropsFile ${WLP_INSTALL_DIR}/lib/versions/WebSphereApplicationServer.properties
  536. echo "Product edition is "${com_ibm_websphere_productEdition}
  537. echo "Installation type is "${com_ibm_websphere_productInstallType}
  538. IS_IM_INSTALL=
  539. if [ ${com_ibm_websphere_productInstallType} = "InstallationManager" ]; then
  540. IS_IM_INSTALL=true
  541. fi
  542. PRODUCT_EDITION=${com_ibm_websphere_productEdition}
  543. umask 022
  544. case "$ACTION" in
  545. 'DOALL') do_all_install
  546. ;;
  547. 'SETUPNATIVE') setup_native
  548. ;;
  549. 'POSTINSTALLEXIT')
  550. if [ ${IS_IM_INSTALL} ]; then
  551. if [ ! ${INSTALL_ROOT} ]; then
  552. usage
  553. fi
  554. if [ ! ${USER_ROOT} ]; then
  555. usage
  556. fi
  557. fi
  558. post_install_exit
  559. ;;
  560. 'POSTFPEXIT')
  561. if [ ${IS_IM_INSTALL} ]; then
  562. if [ ! ${INSTALL_ROOT} ]; then
  563. usage
  564. fi
  565. fi
  566. post_fp_exit
  567. ;;
  568. *)
  569. usage
  570. ;;
  571. esac
  572. exit ${ERR_CHK}