• principal_3

    Desde 2015, enseñando sobre el sistema operativo z/OS de IBM en esta web. z/OS se utiliza en máquinas llamadas Mainframe.

  • principal_1

    Para realizar el contenido, utilizo el producto de IBM llamado z/Development and Test Environtment Personal Edition. Este software permite emular un Mainframe y así poder utilizar z/OS para aprender.

  • principal_2

    Es utilizado por grandes empresas (bancos, aseguradoras...). Aquí aprenderás a instalar y configurar productos relacionados con z/OS.

  • principal_4

    ADCD es una distribución de z/OS que contiene productos de IBM como IMS, DB2, CICS, ZOWE, TWS, NetView, System Automation, etc.

IBM Z Workload Scheduler 9.5 - Instalación

IBM Z Workload Scheduler 9.5 - Instalación

Adjuntos:
Descargar este archivo ($01ALIAS.txt)$01ALIAS[Define ALIAS OPC]0.5 kB
Descargar este archivo ($12LOGZF.txt)$12LOGZF[ZFS para logs]1 kB
Descargar este archivo (EQQPCS0A.txt)EQQPCS0A[Crea OPC.V950.OPCT.EV]0.5 kB

En este post haremos la instalación de IBM Z Workload Scheduler 9.5. Este producto es el planificador de IBM, también conocido como TWS u OPC. En otras ocasiones, ya hemos instalado otras versiones de este producto, por lo tanto, este post será similar.

El enlace de la documentación es:

Using the EQQJOBS installation aid

Empezaremos localizando las librerías que utilizaremos. En mi caso, empiezan por TWS950.

000 watermark

 

Crearé un ALIAS relacionado con mi catálogo CATALOG.APL.

NOTA: El job se puede descargar al principio de la entrada.

001 watermark

003 watermark

 

Ahora crearemos dos librerías que contendrán todos los recursos que usaremos durante la instalación. Yo las llamaré:

OPC.V950.SAMPJCL

OPC.V950.SKELS

004 watermark

005 watermark

 

La instalación se realiza mediante la utilidad REXX “EQQJOBS”.

Primero debemos añadir las siguientes librerías a nuestra sesión de TSO:

Librería SEQQCLIB a SYSPROC

Librería SEQQPNL0 a ISPPLIB

Librerías SEQQSKL0 y SEQQSAMP a ISPSLIB.

Para saber el procedimiento de logon de TSO que usamos, lo podemos ver cuando entramos al TSO. En mi caso, es ISPFPROC.

006 watermark

 

Este procedimiento se encuentra almacenado en una de las PROCLIB del sistema. Para saberlo, podemos mirar en la opción PROC de SDSF. También podemos usar el comando del sistema $D PROCLIB.

007 watermark

 

Añadimos las librerías.

TWS950.SEQQCLIB

008 watermark

 

TWS950.SEQQPNL0

009 watermark

 

También añadiremos la librería OPC.V950.SKELS que creamos anteriormente:

OPC.V950.SKELS

TWS950.SEQQSKL0

TWS950.SEQQSAMP

IMPORTANTE: Hay que poner la librería “SKELS” que creamos anteriormente por delante en la concatenación.

010 watermark

 

Salimos de la sesión de TSO y volvemos a entrar.

Con el comando TSO EQQJOBS entraremos a los paneles de instalación de TWS.

011 watermark

 

Desde el panel principal de instalación de TWS, entraremos en la opción 1 - Create sample job JCL.

012 watermark

 

Añadimos una ficha job:

//TWS95INS JOB 'TWS INSTALL',CLASS=A,MSGCLASS=Q,

//      MSGLEVEL=(1,1),NOTIFY=&SYSUID

Ajustamos los nombres de las librerías según nuestros requerimientos.

013 watermark

 

Ajustamos las librerías el nombre de los discos.

014 watermark

 

Dejamos las opciones a N (por defecto). Si acaso alguna vez me apetece configurarlo, lo haré en el futuro.

015 watermark

 

Dejamos la opción a N.

016 watermark

 

En mi caso, activaré la opción “MLOG SWITCH”. Esta opción sirve para cambiar de fichero MLOG cuando se alcance un número determinado de registros.

017 watermark

 

La opción “CDP LOG INTEGRATION ENABLEMENT” la voy a activar para probarla. Sirve para integrar los logs de TWS con la utilidad “IBM Common Data Provider for z Systems”.

Me parece algo que podría ser interesante para una entrada.

Usaré la ruta /var/TWS950/logs. Lo modificaré más adelante, si fuese necesario.

018 watermark

 

Esperamos hasta que se creen todos los miembros.

019 watermark

 

Una vez finalice el proceso, entramos en la opción 2 - Generate batch-job skeletons.

020 watermark

 

Adaptamos la configuración a nuestra instalación.

021 watermark

022 watermark

 

Activaré la opción “FORMATTED REPORT OF TRACKLOG EVENTS”.

023 watermark

 

Esperaremos a que termine el proceso.

024 watermark

 

La opción 3, no la voy a procesar porque no uso Data Store. Ahora entraré en la opción “4  - Generate WAPL samples”.

025 watermark

 

Ajustaré los parámetros a mi sistema. Como nombre de subsistema, utilizaré “OPCC”.

026 watermark

 

Esperamos a que termine.

027 watermark

 

Ya tenemos ambas librerías con el contenido correspondiente.

028 watermark

 

Empezamos compilando las “EXITS” de SMF y de JES2. Son registros que se generan según los tipos de evento que van ocurriendo (inicio del job, paso terminado, fin del job…) y sirven para que el planificador sepa en qué estado se encuentran los jobs.

En esta tabla sacada de la web de IBM, se puede ver las exits que existen y el tipo de evento que contralan.

Si tuviésemos algún error en el estado de los jobs, habría que revisar estás exits.

029 watermark

 

Antes de empezar hay que crear una librería “intermedia” dónde se guardarán los módulos ensamblados. Se llamará OPC.V950.OBJ.

030 watermark

 

Ahora buscamos el job EQQJES2 de la librería de ejemplos (en mi caso, OPC.V950.SAMPJCL) y lo copiaré a una librería diferente donde voy guardando los jobs que voy ejecutando para tenerlo de referencia en el futuro. Este job sirve para crear la EXIT7 de JES2. Ajustamos el job y lo ejecutamos.

En mi caso, la librería de JES2 es la MVS.MVST.SMPMTS.

La librería donde se guardará el módulo final (DD SYSLMOD) será USER.Z25A.LPALIB.

En los sistemas ADCD, es mejor guardar las cosas en las librerías “USER.**” porque al cambiar de versión resulta más fácil disponer de todos los cambios porque solo habría que poner el disco A5CFG1 (en el caso de mi versión).

031 watermark

032 watermark

 

Terminará correctamente.

033 watermark

 

Ahora editaremos el job EQQJES21 para crear la exit EXIT51. Los cambios serán los mismos que en el job anterior.

034 watermark

035 watermark

 

Terminará bien.

036 watermark

 

Ahora queda por compilar las tres exits de SMF: IEFACTRT, IEFUJI, IEFU83. El manual de IBM, indica utilizar el job EQQSMF para hacer esto instalándolo como USERMOD, pero yo voy a utilizar otro método.

Usando el job EQQJES2 como base, simplemente tendremos que hacer los cambios mostrados en la imagen para compilar los ejemplos EQQACTR1, EQQUJI1, EQQU831.

Para la exit IEFACTRT haremos los siguientes cambios y ejecutaremos el job.

037 watermark

 

Para la exit IEFUJI haremos los siguientes cambios y ejecutaremos el job.

038 watermark

 

Para la exit IEFU83 haremos los siguientes cambios y ejecutaremos el job.

039 watermark

 

Ya tendremos todos los módulos compilados.

040 watermark

 

Ahora añadiremos las exits al fichero de parámetros de JES2. Para saber el fichero de parámetros, en mi caso, solo tengo que mirar el arranque de la tarea.

Además, como yo usaré las librerías USER.** para hacer los cambios, también es necesario copiar la STC de JES2 a la librería USER.Z25A.PROCLIB para indicar que busque en la librería USER.Z25A.PARMLIB.

041 watermark

 

Editamos el miembro de parámetros. Debemos tener mucho cuidado al hacerlo porque si nos equivocamos, la tarea no arrancará.

LOAD(OPCAXIT7) /* Load IBM Z Workload Scheduler exit mod */

EXIT(7) ROUTINES=OPCAENT7,STATUS=ENABLED /* Define EXIT7 entry point */

LOAD(TWSXIT51) /* Load IBM Workload Scheduler for z/OS exit mod */   

EXIT(51) ROUTINES=TWSENT51,STATUS=ENABLED /* Define EXIT51 entry */

042 watermark

 

Ahora tenemos que definir los subsistemas (Controller y Tracker) en el miembro IEFSSNxx de la PARMLIB. En esta versión, el parámetro suffix será “N”. Para establecer el parámetro maxecsa debemos calcularlo según nuestra instalación.

SUBSYS SUBNAME(subsystem name) INITRTN(module name) INITPARM ('maxecsa,suffix')

En mi caso sería:

SUBSYS SUBNAME(OPCC) INITRTN(EQQINITN) INITPARM (’0,N’)

SUBSYS SUBNAME(OPCT) INITRTN(EQQINITN) INITPARM (’100,N’)

043 watermark

 

El siguiente paso es añadir la librería de módulos TWS950.SEQQLMD0 al listado de librerías a APF.

044 watermark

 

Ahora tenemos que añadir los registros SMF que se capturan. Lo añadiremos al miembro SMFPRMxx.

Lo importante es que se capturen los registros SMF de los siguientes tipos (6, 14, 15, 18…):

/*SYS and SUBSYS keywords*/

SYS(TYPE(6,14,15,18,26,30,60,62,64,90),EXITS(IEFU83,IEFACTRT,IEFUJI))

 SUBSYS(STC,EXITS(IEFUJI,IEFACTRT,IEFU83))

 SUBSYS(JESn,EXITS(IEFUJI,IEFACTRT,IEFU83))

Como, en mi caso, está viene esta configuración, tengo que cambiarla para incluir los registros indicados arriba:

SYS(NOTYPE(14:19,62:69,99),EXITS(IEFU83,IEFU84,IEFACTRT,  

              IEFUSI,IEFUJI,IEFU29),NOINTERVAL,NODETAIL)  

En mi caso, quedaría de la siguiente forma:

SYS(NOTYPE(16,17,19,63,65:69,99),EXITS(                   

 IEFU83,IEFU84,IEFACTRT,IEFUSI,IEFUJI,IEFU29),NOINTERVAL,NODETAIL)

SUBSYS(STC,EXITS(IEFU29,IEFU83,IEFU84,IEFUJP,IEFUSO,IEFUJI,IEFACTRT))

SUBSYS(JES2,EXITS(IEFU83,IEFUJI,IEFACTRT))                           

045 watermark

 

En el miembro PROGxx y antes de la definición de la LINKLST añadiremos diremos la definición de las EXITS para que hagan uso de los módulos creados anteriormente.

EXIT ADD EXITNAME(SYS.IEFU83) MODNAME(TWSU83)

EXIT ADD EXITNAME(SYS.IEFACTRT) MODNAME(TWSACTRT)

EXIT ADD EXITNAME(SYS.IEFUJI) MODNAME(TWSUJI)

EXIT ADD EXITNAME(SYSSTC.IEFU83) MODNAME(TWSU83)

EXIT ADD EXITNAME(SYSSTC.IEFACTRT) MODNAME(TWSACTRT)

EXIT ADD EXITNAME(SYSSTC.IEFUJI) MODNAME(TWSUJI)

EXIT ADD EXITNAME(SYSJES2.IEFU83) MODNAME(TWSU83)

EXIT ADD EXITNAME(SYSJES2.IEFACTRT) MODNAME(TWSACTRT)

EXIT ADD EXITNAME(SYSJES2.IEFUJI) MODNAME(TWSUJI)

046 watermark

 

Aprovechamos para añadir la librería de módulos a LNKLST también.

LNKLST ADD NAME(LNKLST00) DSN(TWS950.SEQQLMD0)          VOLUME(&SYSP4)

047 watermark

 

El siguiente paso es añadir el módulo EQQMINON y unos comandos a TSO. Para ello tenemos que editar el miembro IKJTSOxx.

Para saber qué fichero de parámetros estamos usando podemos utilizar el comando: D IKJTSO

048 watermark

 

Añadimos EQQMINON en AUTHTSF NAMES.

049 watermark

 

Añadimos los siguientes comandos en AUTHCMD:

BACKUP 

BULKDISC

JSUACT 

OPINFO 

OPSTAT 

SRSTAT 

WSSTAT 

050 watermark

 

En el miembro SCHEDxx añadimos el siguiente parámetro:

PPT PGMNAME(EQQMAJOR) NOSWAP

051 watermark

 

Siguiendo el manual de IBM, ahora tendríamos que configurar la seguridad (con RACF, en mi caso). Aún no lo voy a hacer, lo dejaré para una entrada futura si es necesario.

Vamos a ejecutar una serie de jobs que sirven para crear los data sets de configuración que usará el producto.

Empezamos por el job EQQPCS01.

Este job crea varios dataset VSAM y NO-VSAM. Debemos revisar el job y ajustar el espacio de esos dataset para que no nos quedemos sin espacio. De forma opcional, si no usamos SMS, podemos añadir “VOL=SER=xxxxxx” para indicar el disco en los ficheros NO-VSAM.

052 watermark

 

Tendremos todos los data sets creados.

053 watermark

 

Seguiremos con el job EQQPCS02. Este job también crea data sets. Debemos revisar el espacio para ajustarlo a lo que necesitemos. Lo ejecutamos y comprobamos que termine correctamente.

054 watermark

 

El job EQQPCS12 sirve para crear el GDG necesario para la función de intercambio de MLOG.

Terminará correctamente.

055 watermark

 

El siguiente paso es crear las STC de Controller y Tracker y los ficheros de configuración.

Volvemos a la librería OPC.V950.SAMPJCL y copiamos los miembros EQQCONO y EQQTRA a la PROCLIB del sistema. El miembro EQQCONO será el Controller, con el nombre OPCC. El miembro EQQTRA será el Tracker, con el nombre OPCT.

056 watermark

057 watermark

 

Ahora editamos el miembro OPCC que acabamos de copiar a la PROCLIB.

Pondremos el nombre de la tarea en la cabecera (OPCC) y el fichero de parámetros que creamos en pasos anteriores (OPCCPARM).

058 watermark

 

Bajamos un poco y editamos la DD EQQPRLIB para poner la librería correcta.

059 watermark

 

Ahora editamos el miembro OPCT. Pondremos el nombre de la tarea en la cabecera (OPCT) y el fichero de parámetros que creamos en pasos anteriores (OPCTPARM).

Además, en las DD EQQMLOG, EQQMLOG2 y EQQEVDS, tenemos que poner dos nuevos ficheros que crearemos más adelante. Esto es debido a que no pueden ser compartidos con el Controller.

//EQQMLOG   DD  DISP=SHR,DSN=OPC.V950.MLOGT 

//EQQMLOG2  DD  DISP=SHR,DSN=OPC.V950.MLOGT2

 

//EQQEVDS   DD  DISP=SHR,DSN=OPC.V950.OPCT.E

060 watermark

 

Para poder crear los ficheros de parámetros, copiamos los miembros EQQCONOP y EQQTRAP de la SAMPJCL a la librería de parámetros de OPC (en mi caso, OPC.V950.PARM).

061 watermark

062 watermark

 

Ahora entramos en el miembro EQQCONOP y vamos a crear nuevos miembros con las partes correspondientes del JCL. Usaremos el comando de bloque cc – cc, para copiar las partes que queremos, y el comando CREATE.

Vamos a crear el miembro CONOP. Para ello marcamos con "CC" en la línea que se muestra en la imagen.

063 watermark

 

Ahora vamos a la línea que se muestra en la imagen y ponemos "CC" otra vez, para cerrar el bloque que queremos copiar, y en la barra de comandos ponemos "CREATE CONOP".

064 watermark

 

Hacemos lo mismo para crear el miembro STDAR.

065 watermark

 

Por último, crearemos el miembro CONOB de la misma forma.

066 watermark

 

Ahora haremos lo mismo con el miembro EQQTRAP.

067 watermark

 

068 watermark

 

Haremos lo mismo para crear los miembros STDEWTR y STDJCC.

069 watermark

070 watermark

 

Renombramos el miembro CONOB a BATCHOPT.

Renombramos el miembro CONOP a OPCCPARM.

Renombramos el miembro TRAP a OPCTPARM.

071 watermark

072 watermark

073 watermark

 

Entramos a editar el miembro OPCCPARM. Ponemos NFCOPCC en el parámetro NCFAPPL, que será el nombre de nuestra LU del controller.

¡IMPORTANTE! Hay que poner RECOVERY NO, sino se producirá un abend al arrancar el controler más adelante.

074 watermark

 

Seguimos bajando y ponemos NCFOPCT en el parámetro SNA, para que se comunique con el tracker.

075 watermark

 

Ahora editamos el miembro OPCTPARM. Ponemos NCFOPCT en el parámetro NCFAPPL, que será el nombre de nuestra LU del tracker.

En el parámetro SNAHOST y ponemos NCFOPCC, para que se comunique con el controller.

076 watermark

 

Ahora vamos a crear los nodos de VTAM.

La comunicación entre Controller y Tracker la haremos por VTAM. Debemos crearlos en la librería **.VTAMLST correspondiente a nuestro sistema. Para ello, comprobaremos la tarea VTAM en la PROCLIB.

Controller. He creado un miembro llamado AOPCC con los datos de la imagen. El nombre de la aplicación y el ACBNAME debe ser el mismo. En mi caso, el nombre que puse en el fichero de parámetros del controller (OPCCPARM) fue NCFOPCC.

NOTA: Fijaos en la imagen para codificarlo correctamente.

         VBUILD TYPE=APPL                                             

NCFOPCC  APPL VPACING=10,                                              C

               ACBNAME=NFCOPCC         

077 watermark

 

Tracker. He creado un miembro llamado AOPCT con los datos de la imagen. El nombre de la aplicación y el ACBNAME debe ser el mismo. En mi caso, el nombre que puse en el fichero de parámetros del tracker (OPCTPARM) fue NCFOPCT.

NOTA: Fijaos en la imagen para codificarlo correctamente. Si diese algún error del tipo “syntax error” en la línea MODETAB, aseguraros que los espacios están puestos correctamente.

        VBUILD TYPE=APPL                                              

NCFOPCT APPL ACBNAME=NCFOPCT,                                          C

               MODETAB=EQQLMTAB,                                       C

               DLOGMOD=NCFSPARM                                        

078 watermark

 

Vamos a añadir ambos miembros a la inicialización de VTAM para que arranquen los nodos automáticamente después de un IPL. En mi caso, es el miembro ATCCON00 de la VTAMLST.

079 watermark

 

Ahora debemos crear la modetab EQQLMTAB en la librería VTAMLIB de nuestro sistema. Para ello, editamos y submitimos el job EQQLMTAB de la librería **.SEQQSKL0.

Añadimos la cabecera del job. También comprobaremos que la librería VTAMLIB de la DD SYSLMOD sea la correcta. Comprobamos que el job termina correctamente.

080 watermark

081 watermark

 

Ahora vamos a crear el miembro EQQGJCCT, que es la tabla de mensajes del JOB COMPLETION CHECKER. Para ello, entramos a la librería **.SEQQSAMP y editamos el miembro EQQJCCTB. Añadimos una cabecera al job y ajustamos las librerías para adaptarlas a nuestro sistema.

Además, debemos sustituir la primera línea de la SYSIN por la siguiente:

EQQJCCT S=1,T=SKIPSTA,M='IDCAMS SYSTEM SERVICES'

Ejecutamos el job y comprobamos que termina correctamente.

082 watermark

 

ACCEDER A OPC DESDE ISPF.

Vamos a cambiar el panel de ISPF para añadir una opción acceder a OPC. Para saber el nombre del panel a editar, pondremos el comando “PANELID”.

Añadimos una nueva opción en el panel deseado.

083 watermark

 

Añadimos la siguiente línea dentro de las opciones:

O,'PANEL(EQQOPCAP) NEWAPPL(EQQA)'

084 watermark

 

Por último, añadiremos las últimas librerías al procedimiento de logon de TSO.

Añadimos las siguientes líneas en la DD ISPPLIB:

//         DD  DISP=SHR,DSN=TWS950.SEQQGENU

//         DD  DISP=SHR,DSN=TWS950.SEQQPENU

085 watermark

 

En la DD ISPMLIB:

//         DD  DISP=SHR,DSN=TWS950.SEQQMSG0

086 watermark

 

En la DD ISPTLIB:

//         DD  DISP=SHR,DSN=TWS950.SEQQTBL0

087 watermark

 

Al final del fichero, añadimos tres DD nuevas:

//EQQMLIB  DD  DISP=SHR,DSN=TWS950.SEQQMSG0

//EQQMLOG  DD DISP=SHR,DSN=OPC.V950.MLOG

//EQQTMPL  DD  DISP=SHR,DSN=TWS950.SEQQLENU

088 watermark

 

Para que funcione correctamente el intercambio de MLOG, debemos copiar a la PROCLIB el miembro EQQSMLOG de la librería de ejemplos, en mi caso, OPC.V950.SAMPJCL.

089 watermark

 

Ese procedimiento utiliza como sysin el miembro EQQREPRO de la librería **.SEQQSAMP. Debemos copiarlo de esa librería a la librería de parámetros de OPC, en mi caso, OPC.V950.PARM.

090 watermark

 

Editamos el BPXPRMxx correspondiente para montar el File System ‘TWS950.ZFS’ en el punto de montaje ‘/usr/lpp/TWS’.

091 watermark

 

Crearemos dos ficheros MLOG para el tracker ya que no puede compartirlos con el controller.

Las características de los dataset son las mismas que los ficheros MLOG del controller. Los llamaré:

OPC.V950.MLOGT

OPC.V950.MLOGT2

También hay que crear el fichero EV (EQQEVD). Lo llamaré (se puede descargar el job al principio de la entrada):

OPC.V950.OPCT.EV

092 watermark

 

093 watermark

 

También hay que crear el directorio de logs que definimos en la configuración anteriormente (/var/TWS950/logs) y montar un ZFS para guardar el contenido (importante incluirlo en el BPXPRMxx correspondiente). Lo haré mediante un job que dejaré al principio de la entrada.

095 watermark

096 watermark

 

Como no hemos ido activando la configuración de forma dinámica, ahora haré IPL. Además, de esta forma me aseguro de que todas las modificaciones que hecho son correctas.

Podemos verificar que han cargado bien las EXITs de JES2 con los comandos:

$D EXIT(7)

$HASP823 EXIT(7)
$HASP823 EXIT(7) STATUS=ENABLED,ENVIRON=JES2,
$HASP823 ROUTINES=(OPCAENT7),SPLEVEL=CHECK,TRACE=YES,
$HASP823 USECOUNT=0

$D EXIT(51)

$HASP823 EXIT(51)
$HASP823 EXIT(51) STATUS=ENABLED,ENVIRON=JES2,
$HASP823 ROUTINES=(TWSENT51),SPLEVEL=CHECK,TRACE=YES,
$HASP823 USECOUNT=0

Después del IPL, arrancaremos las tareas OPCC y OPCT con los comandos:

S OPCC

S OPCT

097 watermark

 

El mensaje siguiente es debido a que no tenemos ningún Long-term plan, ni Current Plan creados. Una vez creados, el tracker conectará con el controller. De momento, podemos ignorarlo.

EQQV019E SESSION SETUP FAILED - PLU=NCFOPCC  NOT AVAILABLE 

098 watermark

 

Ahora entramos a los paneles de OPC.

Para definir el controller al que nos vamos a conectar, vamos a la opción 0 - Options.

099 watermark

 

Entramos a la opción 1 – Subsystem.

100 watermark

 

Marcamos la opción Local “OPC on same MVS”. El nombre del controller es OPCC.

101 watermark

 

Ya podremos entrar a las diferentes opciones de la herramienta.

Es importante añadir que si hay algún problema en el arranque de las tareas, debermos mirar el fichero OPC.V950.MLOG*. Ahí veremos los errores que se produzcan. Es importante fijarse que el OPC reconoce el sistema como JES2. Esto quiere decir que las EXITs de JES2 (EXIT7 y EXIT51) han cargado bien.

102 watermark 

En próximas entradas veremos cómo crear Work Stations, aplicaciones, Long Term Plan, Current Plan, etc.

Espero que os haya gustado y os sirva de ayuda esta demostración de instalación básica de OPC / TWS / IZWS.

 

 

Publish modules to the "offcanvs" position.