Como crear un mini-z/OS para emergencias

1.1 Introducción al mini z/OS

La generación de un mini-Sistema Operativo obedece a una problemática relacionada con la posibilidad de una catástrofe que dejaría inutilizados todos los datos del sistema. Aunque dispongamos de las herramientas de copia de seguridad adecuadas, y dispongamos de una copia en cinta de todos los volúmenes de disco mediante un ADRDSSU DUMP FULL, la restauración de estos volúmenes se hace muy tediosa y prolongada en el tiempo.

1.1.1 DFSMSDSS vs mini z/OS

La utilidad DFSMSDSS Standalone Services, te permite crear una cinta ipl-able con un mínimo sistema, que te permite introducir comandos de RESTORE de una cinta la cual ha sido grabada con un DUMP FULL y restaurar dicha cinta a disco físico. El problema que surge es que es una utilidad tan sencilla, que el interfaz es muy limitado, a saber: Si se llenan los mensajes de la consola, hasta que no se pulsa Intro, el proceso que se estaba llevando a cabo se queda congelado.
Además, es un proceso muy lento, ya que la copia se realiza físicamente, pista por pista, y por tanto, la restauración de muchos volúmenes puede volverse eterna. Tampoco existen procedimientos para volcar sucesivamente muchos volúmenes seguidos, ya que la simpleza del interfaz no da soporte a estas opciones, debiendo realizar todo el proceso a mano, con lo que las posibilidades de error se incrementan.

La creación de un mini Sistema Operativo te permite disponer de un TSO y un JES2 para ejecutar JCLs de restauración de disco, de manera desatendida e infinitamente mas rápida y eficaz que el sistema DFSMSDSS. Por tanto, en vez de restaurar muchos volúmenes 3390 con la utilidad DFSMSDSS, esa utilidad se utilizaría una única vez, para volcar este mini z/OS, y una vez hecha IPL de este mini-sistema, continuar restaurando datos de una manera mas controlada, rápida y automática.

Este sistema ni dispone de OMVS, ni TCP/IP, ni SMF, ni DB2, ni CICS, ni ningún producto que no sea estrictamente necesario. Este sistema arranca lo imprescindible: El JES2, para submitir JCLs. Los procesos LLA y VLF para las librerías mínimas que se cargan en la LINKLIB. Un VTAM con una configuración básica para poder hacer logon, y por supuesto, el TSO. Un RACF con un único usuario, IBMUSER, con su password por defecto cuando se crea la base de datos de RACF, SYS1. Y por último, el ISPF y el SDSF para edición y control de los jobs que se submitan, respectivamente.

1.1.2 V1R4 vs. Otras versiones

He creado este mini-SO en base a la versión V1R4. La elección de esta versión es que las JCLs que he utilizado para crearla, van muy bien con esta versión, ya que hago numerosas referencias a la ficha STEPCAT, que ha dejado de estar disponible en versiones más nuevas, como la V1R7 y posteriores. La otra opción es utilizar Aliases, pero a mi me gusta mas el STEPCAT, pero este sistema también se puede generar con ALIASES, modificando un poco los JCLs. Eso ya dependerá de como se quiera crear el SO y depende de cada cual.

También he elegido la Version 1 Release 4 del z/OS, porque es la última versión soportada por los mainframes CMOS 9672 o S/390 Parallel Enterprise Server, ya que, en caso de emergencia, podrían ser utilizados para restaurar los datos y ofrece una compatibilidad hacia atrás.

1.2 Creación del mini-z/OS

Para crear el mini-SO, debemos apoyarnos en un z/OS en funcionamiento, ya que se copiarán las librerías necesarias de este sistema para generar el nuestro. Por tanto, dispondremos de una partición con z/OS V1R4 y necesitaremos un usuario con los permisos adecuados para poder copiar librerías del sistema y crear catálogos y demás.

1.2.1 Inicialización de un Volumen 3390 para nuestro mini-SO

El sistema que queremos crear ocupará el 40% de un volumen 3390-3, por lo que, de ser necesario, se podría instalar también en un 3390-2 sin problemas. La razón de su poca ocupación es que vamos a grabar lo imprescindible, tal y como he explicado más arriba. Para ello, una vez elegido un volumen libre en la instalación, el cual previamente se ha puesto off-line, submitiremos el siguiente JCL:

//PASO001  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//INIT1       EXEC PGM=ICKDSF
//SYSPRINT    DD SYSOUT=*
//IPLTEXT     DD DSN=SYS1.SAMPLIB(IEAIPL00),DISP=SHR
//SYSIN       DD *
     INIT UNIT(1010)   IPLDD(IPLTEXT)   NOVERIFY  VOLID(RESCUE)  -
      VTOC(1,0,60)    INDEX(0,1,14)   NOCONTINUE  PURGE NOCHECK

Siendo 1010 la dirección física del disco y RESCUE, el VOLSER. Si se desea que tenga otra nomenclatura, se deberá tener en cuenta para los sucesivos JCLs en los que se hace una constante referencia al campo VOL=SER en las copias de librerías del sistema. Comentar también la ficha IPLTEXT que hace que cuando se inicialice el disco, grabará el texto IPL en él, por lo que lo convertiremos en un disco ipl-able.

Si el JCL acaba con Cond. Code 00, pondremos on-line el disco con un VARY 1010,ONLINE desde la consola. Si no acaba en 00, es que el disco no se ha puesto off-line previamente. Cuidado con esto.

1.2.2 Reserva de espacio para nuestro mini-JES2,LOGREC, etc.

En este paso, reservaremos espacio para los datasets PARMLIB, HASPACE, LOGREC, HASPCKT, PROCLIB y UADS, submitiendo el siguiente JCL:

//PASO002  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//ALOCODS   EXEC  PGM=IEFBR14
//*
//DD1       DD    DISP=(NEW,KEEP),VOL=SER=RESCUE,UNIT=SYSALLDA,
//   SPACE=(CYL,(1,1,5)),DCB=(LRECL=80,BLKSIZE=9040,RECFM=FB),
//   DSN=MINI.PARMLIB
//DD2       DD    DISP=(NEW,KEEP),VOL=SER=RESCUE,UNIT=SYSALLDA,
//   DCB=DSORG=PSU,SPACE=(CYL,100),DSN=MINI.HASPACE
//DD3       DD    DISP=(NEW,KEEP),VOL=SER=RESCUE,UNIT=SYSALLDA,
//   DCB=SYS1.LOGREC,SPACE=(TRK,2),DSN=MINI.LOGREC
//DD4       DD    DISP=(NEW,KEEP),VOL=SER=RESCUE,UNIT=SYSALLDA,
//   SPACE=(CYL,5),DSN=MINI.HASPCKPT
//DD5       DD    DISP=(NEW,KEEP),VOL=SER=RESCUE,UNIT=SYSALLDA,
//   SPACE=(CYL,(1,1,2)),DCB=(LRECL=80,BLKSIZE=9040,RECFM=FB),
//   DSN=MINI.PROCLIB
//DD6       DD    DISP=(NEW,KEEP),VOL=SER=RESCUE,UNIT=SYSALLDA,
//   SPACE=(CYL,(1,1,2)),DCB=SYS1.UADS,DSN=MINI.UADS

Los reservaremos con el HLQ MINI para no interferir con los datasets SYS1 de nuestra instalación real y en funcionamiento. Esto hará que reservemos espacio para los spooles del JES2, el acceso de usuarios al sistema y los datasets de configuración y arranque.

1.2.3 Renombrado de los nuevos datasets

En este paso, renombraremos los datasets creados en el punto 1.2.2, con su nombre final, submitiendo el siguiente JCL:

//PASO003  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//RENOMBR  EXEC PGM=IEHPROGM
//DD1      DD DISP=SHR,UNIT=SYSALLDA,VOL=SER=RESCUE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
 RENAME DSNAME=MINI.PARMLIB,VOL=SYSALLDA=RESCUE,NEWNAME=SYS1.PARMLIB
 RENAME DSNAME=MINI.HASPACE,VOL=SYSALLDA=RESCUE,NEWNAME=SYS1.HASPACE
 RENAME DSNAME=MINI.LOGREC,VOL=SYSALLDA=RESCUE,NEWNAME=SYS1.LOGREC
 RENAME DSNAME=MINI.HASPCKPT,VOL=SYSALLDA=RESCUE,NEWNAME=SYS1.HASPCKPT
 RENAME DSNAME=MINI.PROCLIB,VOL=SYSALLDA=RESCUE,NEWNAME=SYS1.PROCLIB
 RENAME DSNAME=MINI.UADS,VOL=SYSALLDA=RESCUE,NEWNAME=SYS1.UADS

Como hacemos referencia siempre al volumen RESCUE, no tenemos peligro de que se interfieran con los actuales datasets de la máquina en producción.

1.2.4 Definición del MASTER CATALOG de nuestro mini – Sistema

En este paso, definiremos el que será el catálogo maestro de nuestro nuevo mini-sistema. Para ello, este JCL nos viene al pelo:

//PASO004  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//DEFMCAT4 EXEC  PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//CATVOL   DD  VOL=SER=RESCUE,UNIT=SYSALLDA,DISP=OLD
//SYSIN    DD  *
  DELETE CATALOG.MINIMVS.RESCUE UCAT RECOVERY
  SET MAXCC = 0
  DEFINE UCAT (ICFCAT -
   NAME(CATALOG.MINIMVS.RESCUE) -
   FILE(CATVOL) VOL(RESCUE) CYL(1 1) SHR(3 3))

Este paso creará un catálogo de usuario llamado CATALOG.MINIMVS.RESCUE. Se puede poner cualquier nombre, pero el cambio de este nombre deberá ser reflejado en los sucesivos JCLs a los que se le hará referencia.

También hemos añadido un DELETE UCAT, antes de la creación del catálogo, por si ese catálogo existiera, pero vamos, es una manera de controlar que el JCL no acabe con errores por si nuestra máquina tuviera referencia a él.

Comentar además que cuando se crea el catálogo de usuario, se conecta automáticamente a nuestro master catalog de nuestro SO, de modo que tendremos que tenerlo en cuenta para desconectarlo después y no dejar rastros que puedan dar problemas en nuestro sistema en producción.

1.2.5 Copia de las librerías mínimas de z/OS y productos relacionados

En este paso, copiaremos las librerías mínimas para poder arrancar un z/OS sin grandes aspiraciones:

//PASO005  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//COPIA    EXEC   PGM=ADRDSSU
//SYSPRINT   DD  SYSOUT=*
//SYSIN      DD  *
 COPY DS(INC(SYS1.LINKLIB,SYS1.LPALIB,SYS1.SVCLIB,SYS1.CMDLIB,   -
             SYS1.NUCLEUS,SYS1.CSSLIB,SYS1.MIGLIB,               -
             SYS1.VTAMLIB,SYS1.SISTCLIB,CPAC.VTAMLST,            -
             SYS1.SHASLINK,SYS1.BRODCAST,CPAC.VTAMLIB,           -
             ISP.SISPEXEC,ISP.SISPLOAD,                          -
             ISP.SISPMENU,ISP.SISPPENU,                          -
             ISP.SISPSENU,ISP.SISPTENU,                          -
             ISP.SISPSLIB,ISP.SISPCLIB,                          -
             ISP.SISPLPA,                                        -
             SYS1.DAE,SYS1.HELP,SYS1.IMAGELIB,SYS1.CSSLIB,       -
             SYS1.MACLIB,SYS1.MODGEN,SYS1.SHASMIG,               -
             SYS1.SAMPLIB,CEE.SCEERUN,                           -
             SYS1.SCBDCLST,SYS1.SCBDPENU,SYS1.SCBDMENU,          -
             SYS1.SCBDTENU,SYS1.SCBDHENU,SYS1.SDWWDLPA,          -
             ISF.SISFEXEC,                                       -
             ISF.SISFLINK,ISF.SISFLOAD,ISF.SISFLPA,              -
             ISF.SISFMLIB,ISF.SISFPLIB,ISF.SISFSLIB,             -
             ISF.SISFTLIB,ISF.SISFHELP,                          -
             ISF.HASPINDX))  -
         ODY(RESCUE) TOL(ENQF) WAIT(0,0) SHR BYPASSACS(**)

Este JCL copia los siguientes datasets:
- SYS1: Los mínimos para arrancar el z/OS.
- ISP: Las librerías ISPF obligatorias para que funcione.
- ISF: Las librerías SDSF obligatorias para que funcione.

También hemos copiado un par de librerias CPAC relacionadas con el VTAM. Esto lo he hecho así, porque en nuestra máquina de producción, el VTAM que viene por defecto cuando se instaló la máquina (CPAC: CustomPAC) es un VTAM no-SNA y no depende ni de TCP/IP, ni de definiciones adicionales de otros productos, por lo que debería arrancar sin error alguno en un terminal no-SNA directo por una 3174, una 2074 o una emulación OSA-ICC. Se debería comprobar este hecho en vuestra instalación y hacer los cambios oportunos si llegara el caso. Este paso es crucial, ya que aunque todo arranque perfectamente, sin un VTAM bien configurado, todo el esfuerzo no sirve absolutamente para nada.

1.2.6 Definición de PAGESPACES

En este paso, definiremos los ficheros de paginación necesarios e imprescindibles para que arranque nuestro SO: El PLPA, el COMON y el LOCAL, aunque este último es opcional siempre y cuando tengamos mas de 512 MB de memoria, aunque, como tenemos disco de sobra, lo definimos también y nos curamos en salud:

//PASO006  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//DEFPGSPC EXEC  PGM=IDCAMS
//STEPCAT    DD DISP=SHR,DSN=CATALOG.MINIMVS.RESCUE
//SYSPRINT   DD SYSOUT=*
//DD1        DD VOL=SER=RESCUE,UNIT=SYSALLDA,DISP=OLD
//SYSIN      DD *
  DELETE (SYS1.PAGE.VRESCUE.PLPA)
  DELETE (SYS1.PAGE.VRESCUE.COMMON)
  DELETE (SYS1.PAGE.VRESCUE.LOCAL)
  SET MAXCC = 0
  DEF  PGSPC  (NAME(SYS1.PAGE.VRESCUE.PLPA) -
               VOL(RESCUE) FILE(DD1) TRK(1000)  UNIQUE ) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF  PGSPC  (NAME(SYS1.PAGE.VRESCUE.COMMON) -
               VOL(RESCUE) FILE(DD1) CYL(50) UNIQUE ) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF  PGSPC  (NAME(SYS1.PAGE.VRESCUE.LOCAL) -
               VOL(RESCUE) FILE(DD1) CYL(50) UNIQUE ) -
               CAT(CATALOG.MINIMVS.RESCUE)

Los ficheros los catalogaremos en nuestro catalogo recién creado en el punto 1.2.4.

1.2.7 Catalogando librerías del Sistema

Ya que hemos catalogado los ficheros de paginación, no está de más catalogar el resto de ficheros y datasets que hemos copiado en el punto 1.2.5, además de los ficheros que hemos definido al principio. Así que este JCL nos ayudará a realizarlo sin errores, ejecutando un IDCAMS, definiendo datasets Non-VSAM y relacionándolos con el catálogo adecuado:

//PASO007  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//DEFNVSAM EXEC  PGM=IDCAMS
//STEPCAT    DD DISP=SHR,DSN=CATALOG.MINIMVS.RESCUE
//SYSPRINT   DD SYSOUT=*
//SYSIN      DD *
  DEF NVSAM(NAME(SYS1.RACFMINI) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.LINKLIB) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.LPALIB) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.CSSLIB) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.SVCLIB) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.CMDLIB) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.MIGLIB) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.NUCLEUS) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.PARMLIB) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.PROCLIB) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.UADS) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.BRODCAST) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.VTAMLIB) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(SYS1.SISTCLIB) DEVT(3390) VOL(RESCUE)) -
              CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(CPAC.VTAMLST) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(CPAC.VTAMLIB) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(  SYS1.SHASLINK       ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISP.SISPLPA         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(  ISP.SISPLOAD        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(  ISP.SISPPENU        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(  ISP.SISPSLIB        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(  ISP.SISPMENU        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(  ISP.SISPTENU        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(  ISP.SISPSENU        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(  ISP.SISPCLIB        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME(  ISP.SISPEXEC        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.DAE             ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.HELP            ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.IMAGELIB        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.MACLIB          ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.MODGEN          ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.SHASMIG         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.SAMPLIB         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( CEE.SCEERUN          ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.SCBDCLST        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.SCBDPENU        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.SCBDMENU        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.SCBDTENU        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.SCBDHENU        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( SYS1.SDWWDLPA        ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISF.SISFEXEC         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISF.SISFLINK         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISF.SISFLOAD         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISF.SISFLPA          ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISF.SISFMLIB         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISF.SISFPLIB         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISF.SISFSLIB         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISF.SISFTLIB         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISF.HASPINDX         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)
  DEF NVSAM(NAME( ISF.SISFHELP         ) DEVT(3390) VOL(RESCUE)) -
               CAT(CATALOG.MINIMVS.RESCUE)

1.2.8 Creación de miembros en la SYS1.PARMLIB

Con este JCL, crearemos los miembros imprescindibles en la SYS1.PARMLIB para que nuestra máquina arranque sin errores. El resto de miembros que no creamos, los tomará como por defecto el z/OS cuando arranque. Así pues, para crear múltiples miembros dentro de la PARMLIB, utilizaremos el truco ADD de la utility IEBUPDTE:

//PASO008  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//PARMLIB  EXEC PGM=IEBUPDTE,PARM=NEW
//SYSPRINT  DD   SYSOUT=*
//SYSUT2    DD   DISP=SHR,DSN=SYS1.PARMLIB,UNIT=SYSALLDA,VOL=SER=RESCUE
//SYSIN     DD   DATA,DLM=$$
./  ADD NAME=IEASYS00
CLPA,                        CLPA O CVIO
CMB=(UNITR,COMM,GRAPH,CHRDR), ADDITIONAL CMB ENTRIES
CMD=00,
CON=00,                      SELECT CONSOL00
CSA=(2000,30000),
GRS=NONE,                    NO COORDINATION OF GRS REQUESTS
PROG=00,
PROD=00,
LNKAUTH=LNKLST,              MVS/XA 2.1.1 DEFAULT, APFTAB IS ALT
LOGCLS=L,                    WILL NOT BE PRINTED BY DEFAULT
LOGLMT=999999,               MUST BE 6 DIGITS, MAX WTL MESSAGES QUEUED
LPA=00,
MAXUSER=250,                 (SYS TASKS + INITS + TSOUSERS)
PAGTOTL=16,                  ALLOW ADDITION UP TO 16 PAGE DATA SETS
OPI=YES,                     ALLOW OPERATOR OVERRIDE TO IEASYS00
PAGE=(SYS1.PAGE.VRESCUE.PLPA,
      SYS1.PAGE.VRESCUE.COMMON,
      SYS1.PAGE.VRESCUE.LOCAL,L),
REAL=128,                   ALLOWS 2 64K JOBS OR 1 128K JOB TO RUN V=R
RSU=0,                      NO RECONFIG STORAGE UNITS          DEFAULT
RSVSTRT=5,                  RESERVED ASVT ENTRIES              DEFAULT
RSVNONR=5,                  RESERVED ASVT ENTRIES              DEFAULT
SSN=00,
VAL=00,
SYSNAME=MINI,
VIODSN=IGNORE,
VRREGN=64                   DEFAULT REAL-STORAGE REGION SIZE   DEFAULT
./  ADD NAME=IFAPRD00
   WHEN (HWNAME(*))
PRODUCT OWNER('IBM CORP')
        NAME(Z/OS)
        ID(5694-A01)
        VERSION(*) RELEASE(*) MOD(*)
        FEATURENAME(Z/OS)
        STATE(ENABLED)
PRODUCT OWNER('IBM CORP')
        NAME(Z/OS)
        ID(5694-A01)
        VERSION(*) RELEASE(*) MOD(*)
        FEATURENAME(DFSMSDSS)
        STATE(ENABLED)
PRODUCT OWNER('IBM CORP')
        NAME(Z/OS)
        ID(5694-A01)
        VERSION(*) RELEASE(*) MOD(*)
        FEATURENAME('SECURITY SERVER')
        STATE(ENABLED)
PRODUCT OWNER('IBM CORP')
          NAME(Z/OS)
          ID(5694-A01)
          FEATURENAME(SDSF)
          VERSION(*) RELEASE(*) MOD(*)
          STATE(ENABLED)
./  ADD NAME=PROG00
APF FORMAT(DYNAMIC)
APF ADD  DSNAME(SYS1.LINKLIB)           VOLUME(RESCUE)
APF ADD  DSNAME(SYS1.SHASLINK)          VOLUME(RESCUE)
APF ADD  DSNAME(SYS1.VTAMLIB)           VOLUME(RESCUE)
APF ADD  DSNAME(CPAC.VTAMLIB)           VOLUME(RESCUE)
APF ADD  DSNAME(SYS1.SISTCLIB)          VOLUME(RESCUE)
APF ADD  DSNAME(ISP.SISPLOAD)           VOLUME(RESCUE)
LNKLST DEFINE NAME(LNKLST00)
LNKLST ADD NAME(LNKLST00) DSN(SYS1.LINKLIB)
LNKLST ADD NAME(LNKLST00) DSN(SYS1.MIGLIB)
LNKLST ADD NAME(LNKLST00) DSN(SYS1.CSSLIB)
LNKLST ADD NAME(LNKLST00) DSN(SYS1.CMDLIB)
LNKLST ADD NAME(LNKLST00) DSN(ISF.SISFLOAD)
LNKLST ADD NAME(LNKLST00) DSN(ISF.SISFLINK)
LNKLST ACTIVATE NAME(LNKLST00)
./  ADD NAME=LOAD00
IODF     00 SYS1
NUCLEUS  1
SYSCAT   RESCUE113CCATALOG.MINIMVS.RESCUE
SYSPARM  00
./  ADD NAME=VATLST00
VATDEF IPLUSE(PRIVATE) SYSUSE(PRIVATE)
RESCUE,1,0,3390    ,N  STORAGE     ** STORAGE FOR IBMUSER TO LOG ON
./  ADD NAME=IEFSSN00
JES2,,,PRIMARY,NOSTART
./  ADD NAME=IGDDFPKG
DFSMS_OFFERING=(MINI,FULL)
./  ADD NAME=COMMND00
COM='D T'
COM='S JES2,PARM='COLD,NOREQ''
COM='S VTAM,,,(LIST=00)             START VTAM FOR LOCAL TERMINALS'
COM='S TSO                         AUTOMATIC START OF TSO'
./  ADD NAME=JES2PARM
CONDEF   AUTOCMD=52,BUFNUM=300,BUFWARN=80,CONCHAR=$,
         MASMSG=200,RDRCHAR=$
SMFDEF   BUFNUM=10,BUFWARN=80
CKPTDEF  CKPT1=(DSN=SYS1.HASPCKPT,VOL=RESCUE,INUSE=YES)
SPOOLDEF BUFSIZE=3992,DSNAME=SYS1.HASPACE,FENCE=NO,
         SPOOLNUM=32,TGBPERVL=10,TGNUM=32576,TGSIZE=30,
         TGWARN=90,TRKCELL=3,VOLUME=RESCU
INITDEF  PARTNUM=5
I1       START,NAME=A,CLASS=X
I2       START,NAME=B,CLASS=X
I3       START,NAME=C,CLASS=X
I4       START,NAME=D,CLASS=X
I5       START,NAME=E,CLASS=X
INTRDR   CLASS=B,RDINUM=25
JOBDEF   ACCTFLD=IGNORE,JCLERR=NO,JOBNUM=3000,JOBWARN=80,
         PRTYHIGH=10,PRTYJECL=NO,PRTYJOB=NO,PRTYLOW=1,
         PRTYRATE=0,RANGE=(1-9999)
JOBCLASS(A-Y) ACCT=NO,PGMRNAME=NO,TIME=(60,0),REGION=8M,
         COMMAND=DISPLAY,BLP=YES,AUTH=ALL,MSGLEVEL=(1,1),
         JOURNAL=NO
STCCLASS TIME=(60,00),REGION=8M,COMMAND=DISPLAY,BLP=YES,
         AUTH=ALL,MSGLEVEL=(1,1),IEFUJP=YES,IEFUSO=YES,
         LOG=NO,OUTPUT=YES,PERFORM=0,PROCLIB=00,
         TYPE6=YES,TYPE26=YES,MSGCLASS=Z
TSUCLASS TIME=(60,00),REGION=8M,COMMAND=DISPLAY,BLP=YES,
         AUTH=ALL,MSGLEVEL=(1,1),IEFUJP=YES,IEFUSO=YES,
         LOG=NO,OUTPUT=YES,PERFORM=0,PROCLIB=00,
         TYPE6=YES,TYPE26=YES,MSGCLASS=Z
OUTDEF   COPIES=30,DMNDSET=NO,JOENUM=3000,JOEWARN=80,
         PRTYHIGH=0,PRTYLOW=0,PRTYOUT=NO,STDFORM=STD,USERSET=NO
OUTCLASS(X) OUTDISP=(HOLD),OUTPUT=PRINT,TRKCELL=YES
./  ADD NAME=TSOKEY00
USERMAX=100,                                                         +
RECONLIM=10,                                                         +
BUFRSIZE=132,                                                        +
HIBFREXT=6600,                                                       +
LOBFREXT=3300,                                                       +
CHNLEN=4,                                                            +
SCRSIZE=1920
./  ADD NAME=SMFPRM00
   NOACTIVE                       /*NO ACTIVE SMF RECORDING*/
   NOPROMPT                    /*DO NOT PROMPT OPERATOR FOR OPTIONS*/
./  ADD NAME=COUPLE00
 COUPLE SYSPLEX(LOCAL)
./  ADD NAME=CONSOL00
INIT PFK(00) MONITOR(DSNAME) MLIM(1500) RLIM(10) UEXIT(N)
        CMDDELIM(;)
DEFAULT ROUTCODE(ALL)
CONSOLE DEVNUM(700) ROUTCODE(ALL)
        PFKTAB(PFKTAB1)
        AUTH(MASTER)
        UNIT(3270-X)
        MONITOR(JOBNAMES-T)
        CON(N) SEG(9) DEL(RD) RNUM(19) RTME(1) MFORM(J,T) AREA(NONE)
./  ADD NAME=DIAG00
 VSM TRACK CSA(ON) SQA(ON)
 VSM TRACE GETFREE(OFF)
./  ADD NAME=IEAPAK00
(IEFBR14)
./  ADD NAME=IEAABD00
SDATA=(LSQA,CB,ENQ,TRT,ERR,DM,IO,SUM),PDATA=(PSW,REGS,SPLS,ALLPA,SA)
./  ADD NAME=IEAAPP00
 /*  IBMUSER DEFAULTS */
./  ADD NAME=IEADMP00
SDATA=SUM
./  ADD NAME=IEADMR00
SDATA=(NUC,SQA,LSQA,SWA,TRT,RGN,SUM)
./  ADD NAME=CLOCK00
OPERATOR NOPROMPT
TIMEZONE W.00.00.00
ETRMODE  NO
ETRZONE  NO
ETRDELTA 10
./  ADD NAME=CTIXCF00
TRACEOPTS ON
          BUFSIZE(1008K)
./  ADD NAME=CTIXES00
TRACEOPTS ON
          OPTIONS('CONNECT,CONFIG,RECOVERY')
          BUFSIZE(168K)
./  ADD NAME=CTIGRS00
 TRACEOPTS OFF
./  ADD NAME=IGDSMS00
SMS ACDS(SYS1.ACDS)
    COMMDS(SYS1.SMS.COMMDS)
    INTERVAL(15)
    DINTERVAL(150)
    REVERIFY(NO)
    ACSDEFAULTS(NO)
    TRACE(ON)
    SIZE(128K)
    TYPE(ALL)
    JOBNAME(*)
    ASID(*)
    SELECT(ALL)
./  ADD NAME=LPALST00
SYS1.LPALIB,
ISF.SISFLPA,
SYS1.SDWWDLPA,
./  ADD NAME=CTIOPS00
 TRACEOPTS
           ON
           BUFSIZE(64K)
./  ADD NAME=IEACMD00
COM='CHNGDUMP SET,SDUMP=(LSQA,TRT,XESDATA),ADD'
COM='SET SLIP=00'
COM='SET DAE=00'
COM='START LLA,SUB=MSTR'
COM='START VLF,SUB=MSTR'
./  ADD NAME=CTIIEFAL
 /*---------------------------------------------------------------- */
 /*DEFAULT CTIIEFAL MEMBER                                          */
 /*================================================================ */
 TRACEOPTS
 /*---------------------------------------------------------------- */
 /*  ON OR OFF: PICK ONE                                            */
 /*---------------------------------------------------------------- */
  ON
 OPTIONS(
         'FLOW0'
        ,'FLOW1'
        ,'SERIAL1'
        ,'DATA'
        ,'CONTROL0'
        ,'CONTROL1'
        )
 /*---------------------------------------------------------------- */
 /*  BUFSIZE                                                        */
 /*---------------------------------------------------------------- */
 BUFSIZE(4M)
./  ADD NAME=CTIJES01
 /*---------------------------------------------------------------- */
 /*DEFAULT CTIJES01 MEMBER                                          */
 /*================================================================ */
 TRACEOPTS
           OFF
./  ADD NAME=CTIJES02
 /*---------------------------------------------------------------- */
 /*DEFAULT CTIJES02 MEMBER                                          */
 /*================================================================ */
 TRACEOPTS
           OFF
./  ADD NAME=CTIJES03
 /*---------------------------------------------------------------- */
 /*DEFAULT CTIJES03 MEMBER                                          */
 /*================================================================ */
 TRACEOPTS
           ON
./  ADD NAME=CTIJES04
 /*---------------------------------------------------------------- */
 /*DEFAULT CTIJES04 MEMBER                                          */
 /*================================================================ */
 TRACEOPTS
           OFF
./  ADD NAME=CTISMS00
TRACEOPTS OFF
./  ADD NAME=IKJTSO00
/* LIB: CPAC.PARMLIB(IKJTSO00)                                     */
/* DOC: THIS MEMBER IS USED AT IPL TIME TO DEFINE THE AUTHORIZED   */
/*      COMMAND LIST, THE AUTHORIZED PROGRAM LIST, THE NOT         */
/*      BACKGROUND COMMAND LIST, THE AUTHORIZED BY THE TSO SERVICE */
/*      FACILITY LIST, AND TO CREATE THE DEFAULTS THE SEND COMMAND */
/*      WILL USE.                                                  */
/*                                                                 */
AUTHCMD NAMES(          /* AUTHORIZED COMMANDS      */      +
   AD       ADDSD       /* RACF COMMANDS            */ +
   AG       ADDGROUP    /*                          */ +
   AU       ADDUSER     /*                          */ +
   ALG      ALTGROUP    /*                          */ +
   ALD      ALTDSD      /*                          */ +
   ALU      ALTUSER     /*                          */ +
   RMM                  /* RMM                      */ +
   BLKUPD               /*                          */ +
   CO       CONNECT     /*                          */ +
   DD       DELDSD      /*                          */ +
   DG       DELGROUP    /*                          */ +
   DU       DELUSER     /*                          */ +
   LD       LISTDSD     /*                          */ +
   LG       LISTGRP     /*                          */ +
   LU       LISTUSER    /*                          */ +
   RACDCERT             /*                          */ +
   RALT     RALTER      /*                          */ +
   RACLINK              /*                          */ +
   RDEF     RDEFINE     /*                          */ +
   RDEL     RDELETE     /*                          */ +
   RE       REMOVE      /*                          */ +
   RL       RLIST       /*                          */ +
   RVARY                /*                          */ +
   PASSWORD PW          /*                          */ +
   PE       PERMIT      /*                          */ +
   SETR     SETROPTS    /*                          */ +
   SR       SEARCH      /*                          */ +
   IRRDPI00             /*                          */ +
   DITTO                /* DITTO                    */ +
   DITTOA               /* DITTO                    */ +
   DITTOU               /* DITTO                    */ +
   IEBCOPY              /*                          */ +
   BINDDATA BDATA       /*  DMSMS COMMANDS          */ +
   LISTDATA LDATA       /*                          */ +
   SETCACHE SETC        /*                          */ +
   RECEIVE              /* TSO COMMANDS             */ +
   CONSPROF             /*                          */ +
   TRANSMIT XMIT        /*                          */ +
   LISTB    LISTBC      /*                          */ +
   SE       SEND        /*                          */ +
   RACONVRT CONSPROF    /*                          */ +
   SYNC                 /*                          */ +
   LISTD    LISTDS      /*                          */ +
   TESTAUTH TESTA       /*                          */ +
   PARMLIB  IKJPRMLB    /*                          */ +
   NETSTAT              /* IP COMMANDS              */ +
   PING     LPR         /* COM SERV IP              */ +
   TRACERTE             /* IP COMMANDS              */ +
   MVPXDISP            /* IP COMMAND                */)
                        /*                          */
AUTHPGM NAMES(          /* AUTHORIZED PROGRAMS      */      +
   ICHUT100             /*                          */ +
   ICHUT200             /*                          */ +
   EDGHSKP              /* RMM                      */ +
   EDGUTIL              /* RMM                      */ +
   EDGRPTD              /* RMM                      */ +
   EDGAUD               /* RMM                      */ +
   ICHUT400             /*                          */ +
   ICHDSM00             /*                          */ +
   IRRDSC00             /*                          */ +
   IRRUT100             /*                          */ +
   IRRUT200             /*                          */ +
   IRRUT400             /*                          */ +
   IRRDPI00             /*                          */ +
   CSFDAUTH           /* ICSF COMMAND             */ +
   ICADCT             /* FIREWALL                 */ +
   ICADDCT            /* FIREWALL                 */ +
   ICADCFGS           /* FIREWALL                 */ +
   ICADPFTP           /* FIREWALL                 */ +
   ICADFTPD           /* FIREWALL                 */ +
   ICADSLOG           /* FIREWALL                 */ +
   ICADSOCK           /* FIREWALL                 */ +
   ICADSOXD           /* FIREWALL                 */ +
   ICADSTAK           /* FIREWALL                 */ +
   ICADIKED           /* FIREWALL                 */ +
   IEBCOPY              /*                          */ +
   IOEGRWAG           /* DFS                      */ +
   IOENEWAG           /* DFS                      */ +
   IOESALVG           /* DFS                      */ +
   IOEBAK             /* DFS                      */ +
   IOEBOS             /* DFS                      */ +
   IOECM              /* DFS                      */ +
   IOEDCEER           /* DFS                      */ +
   IOEDFSXP           /* DFS                      */ +
   IOEFTS             /* DFS                      */ +
   IOEMAPID           /* DFS                      */ +
   IOESCOUT           /* DFS                      */ +
   IOEUDBG            /* DFS                      */)
                        /*                          */
NOTBKGND NAMES(         /* COMMANDS WHICH MAY NOT BE */  +
                        /* ISSUED IN THE BACKGROUND  */  +
   OPER     OPERATOR    /*                           */ +
   TERM     TERMINAL    /*                           */)
                        /*                           */
AUTHTSF NAMES(          /* PROGRAMS TO BE AUTHORIZED */  +
                        /* WHEN CALLED THROUGH THE   */  +
                        /* TSO SERVICE FACILITY.     */  +
   CSFDAUTH             /* ICSF                     */ +
   IEBCOPY              /*                          */ +
   ICQASLI0             /*                          */ +
   EDGHSKP              /* RMM                      */ +
   EDGUTIL              /* RMM                      */ +
   EDGRPTD              /* RMM                      */ +
   EDGAUD               /* RMM                      */ +
   IKJEFF76             /*                          */)
                        /*                           */
SEND                    /* SEND COMMAND DEFAULTS     */  +
   OPERSEND(ON)         /*                           */ +
   USERSEND(ON)         /*                           */ +
   SAVE(ON)             /*                           */ +
   CHKBROD(OFF)         /*                           */ +
   LOGNAME(SYS1.BRODCAST)  /*                        */
ALLOCATE                /* ALLOCATE COMMAND DEFAULT  */ +
   DEFAULT(OLD)         /*                           */
TRANSREC                   /*                        */ +
   NODESMF((NODENAME,SMF)) /*                        */ +
   CIPHER(YES)          /*                           */ +
   SPOOLCL(B)           /*                           */ +
   OUTWARN(50000,15000) /*                           */ +
   OUTLIM(5000000)      /*                           */ +
   VIO(SYSALLDA)        /*                           */ +
   LOGSEL(LOG)          /*                           */ +
   LOGNAME(MISC)        /*                           */ +
   DAPREFIX(TUPREFIX)   /*                           */ +
   USRCTL(NAMES.TEXT)   /*                           */ +
   SYSOUT(*)            /*                           */
./  ADD NAME=IVTPRM00
FIXED MAX(120M)
ECSA MAX(120M)
./  ADD NAME=PFKTAB00
PFKTAB TABLE(PFKTAB1)
    PFK(01) CMD('D U,DASD,,000,999')
    PFK(02) CMD('D U,,,660,32')
    PFK(03) CMD('K')
    PFK(04) CMD('K A,10')
    PFK(05) CMD('D A,ALL')
    PFK(06) CMD('D R,L')
    PFK(07) CMD('D PFK,L=A')
    PFK(08) CMD('K D,F')
    PFK(09) CMD('D TS,L')
    PFK(10) CMD('D A,L')
    PFK(11) CMD('D J,L')
    PFK(12) CMD('K E,D')
    PFK(13) KEY(1)
    PFK(14) KEY(2)
    PFK(15) KEY(3)
    PFK(16) KEY(4)
    PFK(17) KEY(5)
    PFK(18) KEY(6)
    PFK(19) KEY(7)
    PFK(20) KEY(8)
    PFK(21) KEY(9)
    PFK(22) KEY(10)
    PFK(23) KEY(11)
    PFK(24) KEY(12)
PFKTAB TABLE(JES2CMDS)
    PFK(1) CMD('$DA')
    PFK(2) CMD('$DI')
    PFK(3) CMD('$DQ')
    PFK(4) CMD('$LJ_NNNN,ALL') CON(Y)
    PFK(5) CMD('$DN,Q=HOLD')
    PFK(6) CMD('$DN,Q=XEQ')
    PFK(7) CMD('$TPRT_N,Q=NM') CON(Y)
    PFK(8) CMD('$DSPOOL,ALL')
    PFK(9) CMD('$DSPOOL,JOBS=2')
    PFK(10) CMD('$HJ_NNNN;$EJ_NNNN')
    PFK(11) CMD('$DU,PRT_N') CON(Y)
    PFK(12) CMD('$D_CCCCDEF') CON(Y)
    PFK(13) KEY(1)
    PFK(14) KEY(2)
    PFK(15) KEY(3)
    PFK(16) KEY(4)
    PFK(17) KEY(5)
    PFK(18) KEY(6)
    PFK(19) KEY(7)
    PFK(20) KEY(8)
    PFK(21) KEY(9)
    PFK(22) KEY(10)
    PFK(23) KEY(11)
    PFK(24) KEY(12)
./  ADD NAME=IEASLP00
SLIP SET,C=013,ID=X013,A=NOSVCD,J=JES2,END
SLIP SET,C=028,ID=X028,A=NOSVCD,END
SLIP SET,C=052,ID=X052,A=NODUMP,J=CATALOG,END
SLIP SET,C=058,ID=X058,A=NODUMP,DATA=(15R,EQ,4,OR,15R,EQ,8,OR,
     15R,EQ,C,OR,15R,EQ,10,OR,15R,EQ,2C,OR,15R,EQ,30,OR,
     15R,EQ,3C),END
SLIP SET,C=066,ID=X066,A=NODUMP,J=CATALOG,END
SLIP SET,C=070,ID=X070,A=NODUMP,J=CATALOG,END
SLIP SET,C=073,ID=X073,A=NODUMP,J=CATALOG,END
SLIP SET,C=0DX,ID=X0DX,A=NODUMP,J=CATALOG,END
SLIP SET,C=0E7,ID=X0E7,A=NOSVCD,END
SLIP SET,C=0F3,ID=X0F3,A=NODUMP,END
SLIP SET,C=13E,ID=X13E,A=NODUMP,END
SLIP SET,C=1C5,RE=00090004,ID=X1C5,A=NODUMP,END
SLIP SET,C=222,ID=X222,A=NODUMP,END
SLIP SET,C=322,ID=X322,A=NODUMP,END
SLIP SET,C=33E,ID=X33E,A=NODUMP,END
SLIP SET,C=3C4,REASON=1A,ID=S3C4,A=SVCD,END
SLIP SET,C=422,ID=X422,A=NODUMP,END
SLIP SET,C=47B,DATA=(15R,EQ,0,OR,15R,EQ,8),ID=X47B,A=NODUMP,END
SLIP SET,C=622,ID=X622,A=NODUMP,END
SLIP SET,C=71A,ID=X71A,A=NODUMP,END
SLIP SET,C=804,ID=X804,A=(NOSVCD,NOSYSU),END
SLIP SET,C=806,ID=X806,A=(NOSVCD,NOSYSU),END
SLIP SET,C=80A,ID=X80A,A=(NOSVCD,NOSYSU),END
SLIP SET,C=81A,ID=X81A,A=NODUMP,END
SLIP SET,C=91A,ID=X91A,A=NODUMP,END
SLIP SET,C=9FB,ID=X9FB,A=NOSVCD,J=JES3,END
SLIP SET,C=B37,ID=XB37,A=(NOSVCD,NOSYSU),END
SLIP SET,C=C1A,ID=XC1A,A=NODUMP,END
SLIP SET,C=D1A,ID=XD1A,A=NODUMP,END
SLIP SET,C=D37,ID=XD37,A=(NOSVCD,NOSYSU),END
SLIP SET,C=E37,ID=XE37,A=(NOSVCD,NOSYSU),END
SLIP SET,C=EC6,RE=0000FFXX,ID=XEC6,A=NODUMP,END
SLIP SET,C=EC6,RE=0000FDXX,ID=XXC6,A=NOSVCD,END
./  ADD NAME=ADYSET00
  DAE=START,RECORDS(400),
            SVCDUMP(MATCH,SUPPRESSALL,UPDATE,NOTIFY(3,30)),
            SYSMDUMP(MATCH,UPDATE)
./  ADD NAME=COFVLF00
CLASS NAME(CSVLLA)          /* CLASS NAME FOR LIBRARY LOOKASIDE @P2C*/
      EMAJ(LLA)             /* MAJOR NAME FOR LIBRARY LOOKASIDE @P2C*/
./  ENDUP
$$

Largo, eh?? Esto creará todos los miembros en su interior.

1.2.9 Creación de miembros en la SYS1.PROCLIB

Con este JCL, crearemos los miembros imprescindibles en la SYS1.PROCLIB para que nuestra máquina arranque con los mínimos procedimientos: El TSO, el JES2, el VTAM y el IKJS para el procedimiento que usará el usuario IBMUSER cuando haga logon:

//PASO009  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//PROCLIB  EXEC PGM=IEBUPDTE,PARM=NEW
//SYSPRINT  DD   SYSOUT=*
//SYSUT2    DD  DISP=SHR,DSN=SYS1.PROCLIB,UNIT=SYSALLDA,VOL=SER=RESCUE
//SYSIN     DD   DATA,DLM=$$
./  ADD NAME=TSO
//TSO     PROC MBR=TSOKEY00
//STEP1   EXEC PGM=IKTCAS00,TIME=1440
//PARMLIB  DD  DSN=SYS1.PARMLIB(&MBR),DISP=SHR,FREE=CLOSE
//PRINTOUT DD  SYSOUT=*,FREE=CLOSE
//*
./  ADD NAME=JES2
//JES2    PROC M=JES2PARM
//IEFPROC EXEC PGM=HASJES20,TIME=1440,DPRTY=(15,15)
//HASPLIST  DD DDNAME=IEFRDER
//HASPPARM  DD DSN=SYS1.PARMLIB(&M),DISP=SHR
//PROC00    DD DSN=SYS1.PROCLIB,DISP=SHR
//STEPLIB   DD DSN=SYS1.SHASLINK,DISP=SHR
./  ADD NAME=VTAM
//VTMLCL PROC
//VTMLCL  EXEC PGM=ISTINM01,REGION=2048K,
//             DPRTY=(15,15),TIME=1440,PERFORM=8
//VTAMLST   DD DSN=CPAC.VTAMLST,DISP=SHR
//VTAMLIB   DD DSN=SYS1.VTAMLIB,DISP=SHR
//          DD DSN=CPAC.VTAMLIB,DISP=SHR
//SISTCLIB  DD DSN=SYS1.SISTCLIB,DISP=SHR
//SYSABEND  DD SYSOUT=*,HOLD=YES
./  ADD NAME=IKJS
//IKJACCNT PROC
//IKJACCT EXEC PGM=IKJEFT01,DYNAMNBR=50,REGION=6000K,TIME=1440,
//  PARM=ISPF
//STEPLIB  DD  DSN=ISP.SISPLOAD,DISP=SHR
//         DD  DSN=ISP.SISPLPA,DISP=SHR
//ISPLLIB  DD  DSN=ISP.SISPLOAD,DISP=SHR
//         DD  DSN=ISP.SISPLPA,DISP=SHR
//ISPPLIB  DD  DSN=ISP.SISPPENU,DISP=SHR
//         DD  DSN=ISF.SISFPLIB,DISP=SHR
//ISPSLIB  DD  DSN=ISP.SISPSLIB,DISP=SHR
//         DD  DSN=ISP.SISPSENU,DISP=SHR
//         DD  DSN=ISF.SISFSLIB,DISP=SHR
//ISPMLIB  DD  DSN=ISP.SISPMENU,DISP=SHR
//         DD  DSN=ISF.SISFMLIB,DISP=SHR
//ISPTLIB  DD  DSN=ISP.SISPTENU,DISP=SHR
//         DD  DSN=ISF.SISFTLIB,DISP=SHR
//SYSHELP  DD  DSN=ISF.SISFHELP,DISP=SHR
//SYSPROC  DD  DSN=ISP.SISPCLIB,DISP=SHR
//         DD  DSN=ISF.SISFEXEC,DISP=SHR
//SDSFMENU DD  DSN=ISF.SISFPLIB,DISP=SHR
//ISPPROF  DD  DISP=(NEW,DELETE),UNIT=SYSALLDA,VOL=SER=RESCUE,
//         SPACE=(TRK,(5,1,1)),DCB=(LRECL=80,BLKSIZE=6160,RECFM=FB)
//ISPTABL  DD  DDNAME=ISPPROF
//SYSPRINT DD  TERM=TS,SYSOUT=*
//SYSTERM  DD  TERM=TS,SYSOUT=*
//SYSIN    DD  TERM=TS
$$

1.2.10 Copia de algunos miembros puntuales de la PROCLIB y LPALIB

Después de probar en varias ocasiones, en tiempo de IPL se veía como el sistema reclamaba varios miembros que no habíamos copiado, y en tiempo del NIP, la LPALIB se quejaba por un módulo que no teníamos. Así que este JCL copia los miembros que nos hacen falta, aunque no son imprescindibles:

//PASO010  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//COPIPROC  EXEC PGM=IEBCOPY
//SYSUT3   DD  UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//SYSUT4   DD  UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//PROCIN   DD  DISP=SHR,DSN=SYS1.PROCLIB
//PROCOUT  DD  DISP=SHR,DSN=SYS1.PROCLIB,UNIT=SYSALLDA,VOL=SER=RESCUE
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
    COPY I=PROCIN,O=PROCOUT
    S    M=LLA
    S    M=VLF
    S    M=DUMPSRV
    S    M=IEESYSAS
    S    M=IEEVMPCR
    S    M=INIT
/*
//COPILPA  EXEC PGM=IEBCOPY
//SYSUT3   DD  UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//SYSUT4   DD  UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//LPAIN    DD  DISP=SHR,DSN=ADCD.ZOSV14S.LPALIB
//LPAOUT   DD  DISP=SHR,DSN=SYS1.LPALIB,UNIT=SYSALLDA,VOL=SER=RESCUE
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
    COPY I=LPAIN,O=LPAOUT
    S    M=DFSMRCL0
/*

En mi caso, el z/OS de producción tenía un módulo fuera de la SYS1.LPALIB llamado DFSMRCL0 que estaba en ADCD.ZOS14S.LPALIB, así que lo he copiado también.

1.2.11 Preparación del RACF del mini-SO

Este JCL tiene dos pasos bien diferenciados: Por una parte, genera en ensamblador el código necesario para crear una base de datos RACF que se llamará SYS1.RACFMINI y le dará una serie de atributos y por otra, linkeditará lo ensamblado para preparar esa BD :

//PASO011  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//RACF11A  EXEC    PGM=ASMA90,PARM='OBJECT,NODECK,ALIGN'
//SYSPRINT DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSUT1   DD  UNIT=VIO,SPACE=(CYL,(4,3))
//SYSUT2   DD  UNIT=VIO,SPACE=(CYL,(4,3))
//SYSUT3   DD  UNIT=VIO,SPACE=(CYL,(4,3))
//SYSLIB   DD  DSN=SYS1.MACLIB,DISP=SHR
//SYSLIN   DD DSN=&&OBJ,DISP=(,PASS),
//      UNIT=VIO,SPACE=(CYL,(1,1))
//SYSIN    DD  *
ICHRDSNT CSECT
         DC    AL1(1)             INDICATES ONE RACF DATA SET
         DC    CL44'SYS1.RACFMINI' PRIMARY RACF DS NAME
         DC    CL44' '            BACKUP RACF DS NAME
         DC    AL1(255)           # RESIDENT INDEX AND DATA BLOCKS
         DC    X'81'               UPDATES DUPLICATED ON BACKUP DS
         END
//*
//RACF11B  EXEC PGM=IEWL,PARM='XREF,LIST'
//SYSPRINT DD  SYSOUT=*
//SYSUT1   DD  UNIT=VIO,SPACE=(CYL,(1,1))
//SYSLIN   DD  DSN=*.RACF11A.SYSLIN,DISP=(OLD,DELETE)
//         DD *
      NAME ICHRDSNT(R)
//SYSLIB  DD DSN=SYS1.LINKLIB,DISP=SHR,
//      UNIT=SYSALLDA,VOL=SER=RESCUE
//SYSLMOD DD DSN=SYS1.LINKLIB,DISP=SHR,
//      UNIT=SYSALLDA,VOL=SER=RESCUE

1.2.12 Creación del RACF del mini-SO

Con los datos del punto anterior, inicializaremos la base de datos de RACF con este JCL:

//PASO012  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//RACF12  EXEC PGM=IRRMIN00,PARM='NEW'
//SYSPRINT DD  SYSOUT=*
//SYSTEMP  DD  DSN=SYS1.MODGEN(IRRTEMP1),DISP=SHR
//SYSRACF  DD  DSN=SYS1.RACFMINI,DISP=(NEW,KEEP,DELETE),
//             UNIT=SYSALLDA,VOL=SER=RESCUE,
//             SPACE=(TRK,(30),,CONTIG),
//             DCB=(RECFM=F,BLKSIZE=4096,DSORG=PSU)

Una vez inicializada, el único usuario que existe es IBMUSER con la password SYS1, password que la primera vez que se entra al TSO, pide cambiar.

1.2.13 Definición del Usuario IBMUSER en el SYS1.UADS

Para tener acceso al TSO, definiremos un usuario llamado IBMUSER, que debe coincidir con el IBMUSER del RACF. Por tanto, este JCL añadirá al SYS1.UADS la información necesaria para entrar la TSO:

//PASO013  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//UADS14   EXEC PGM=IKJEFT01
//SYSTSIN  DD   *
 ACCOUNT
 A (IBMUSER S A IKJS) SIZE(4000) JCL OPER NOMOUNT ACCT UNIT(SYSALLDA)
 L (IBMUSER)
 END
//SYSTSPRT DD SYSOUT=*
//SYSUADS  DD DISP=SHR,DSN=SYS1.UADS,UNIT=SYSALLDA,VOL=SER=RESCUE
//SYSLBC   DD DISP=SHR,DSN=SYS1.BRODCAST,UNIT=SYSALLDA,VOL=SER=RESCUE

1.2.14 Formateo del SYS1.LOGREC

Con este JCL, formatearemos el dataset SYS1.LOGREC para todo el tema de logs de la máquina:

//PASO014  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//LOGREC14 EXEC PGM=IFCDIP00
//SERERDS  DD DSN=SYS1.LOGREC,UNIT=SYSALLDA,DISP=SHR,VOL=SER=RESCUE
//FRAMES   DD DDNAME=IEFRDER

1.2.15 Copia del IODF

Este paso es muy importante, ya que de su ejecución dependerá el arranque de la máquina. Este JCL tiene dos pasos, por un lado hace un REPRO del fichero VSAM que contiene el IODF (en nuestro caso, el IODF activo es el SYS1.IODF00), y el paso siguiente realiza la definición del SYS1.IODF en nuestro volumen del mini-SO y luego, lo rellena con el REPRO del paso anterior:

//PASO015  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//IODF15   EXEC  PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//IODFOLD  DD  DISP=SHR,DSN=SYS1.IODF00.CLUSTER
//OUT      DD  DSN=&&OUT,DISP=(NEW,PASS),SPACE=(CYL,(25,0)),
//         UNIT=SYSALLDA,DSORG=PS,LRECL=4096,RECFM=F
//SYSIN    DD  *
  REPRO  INFILE(IODFOLD)     OUTFILE(OUT)
//*-----------------------------------------------------------------*
//*  IODF: CREAMOS EL IODF00 DESDE EL IODF00 ORIGINAL
//*-----------------------------------------------------------------*
//IODF15A  EXEC  PGM=IDCAMS
//STEPCAT  DD  DISP=SHR,DSN=CATALOG.MINIMVS.RESCUE
//SYSPRINT DD  SYSOUT=*
//OUT      DD  DSN=&&OUT,DISP=(OLD,DELETE)
//SYSIN    DD  *
  DEL         SYS1.IODF00.CLUSTER -
     CAT(CATALOG.MINIMVS.RESCUE)
  SET MAXCC = 0
  DEF CL(NAME(SYS1.IODF00.CLUSTER) LINEAR CYLINDERS(25 0) -
         VOLUME(RESCUE)) -
         DATA(NAME(SYS1.IODF00)) -
     CAT(CATALOG.MINIMVS.RESCUE)
  IF LASTCC = 0 THEN -
       REPRO    ODS(SYS1.IODF00.CLUSTER)   INFILE(OUT)

Esta copia implica que si queremos arrancar satisfactoriamente este sistema, la configuración de consolas, discos y canales debe ser la misma (lógicamente, este mini-sistema correrá en la misma máquina ya que lo se pretende es utilizarlo única y exclusivamente en caso de catástrofe o pérdida irremediable de discos.

1.2.16 Borrado de referencias del z/OS a nuestro mini-SO

Con todo esto, ya tenemos lo necesario para hacer IPL del nuevo sistema. Para ello, desconectaremos el catálogo de nuestro mini-sistema del Master Catalog, y luego podemos ir a una LPAR y hacer IPL del disco. Para ello, debemos ejecutar el siguiente comando desde la opción 6 del ISPF:

EXPORT ‘CATALOG.MINIMVS.RESCUE’ DISCONNECT

1.2.17 Salvado en cinta de nuestro Mini-SO

Por último, vamos a salvaguardar los datos del volumen en el que hemos creado el mini-SO. Para ello, ejecutaremos el siguiente JCL:

//PASO016  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//*  CREAMOS UN CARTUCHO DFDSS STAND-ALONE
//DFDSSSA  EXEC PGM=ADRDSSU,PARM='UTILMSG=YES'
//SAMODS   DD  DSN=SYS1.SADRYLIB,DISP=SHR
//CARDDD   DD  UNIT=3490,LABEL=(1,NL,EXPDT=98000),DISP=(,KEEP),
//  DCB=(RECFM=F,LRECL=80,BLKSIZE=80),DSN=D,VOL=(,RETAIN,SER=TAPE00)
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
  BUILDSA INDD(SAMODS) OUTDD(CARDDD)
//******************************************************************
//SALVADO  EXEC PGM=ADRDSSU
//SYSPRINT DD  SYSOUT=*
//CINTA    DD  DSN=SAVE.RESCUE,VOL=SER=TAPE00,DCB=TRTCH=COMP,
//         DISP=(NEW,KEEP),UNIT=3490,LABEL=(2,NL,EXPDT=98000)
//DASD     DD  UNIT=SYSALLDA,VOL=SER=RESCUE,DISP=SHR
//SYSIN    DD  *
  DUMP  FULL  INDD(DASD)  OUTDD(CINTA) CANCELERROR    OPT(4)
  IF LASTCC = 0 -
      THEN WTO '** BACKUP DE SISTEMA DE RESCATE COMPLETADO OK!! **'

Este JCL tiene dos pasos: En el primero, grabamos en una cinta NL (Importante) la utilidad DFSMSDSS STAND ALONE en el primer registro, que arranca el mini-programa que nos permitirá restaurar desde cinta, y el segundo paso, graba en el segundo registro todo el disco que aloja el mini-sistema, de forma que en una cinta tengamos todo salvado.

La razón de utilizar una cinta NL (No Label) en vez de SL (Standard Label) es que si hacemos IPL desde cinta con una SL, como el primer registro guarda la etiqueta, y dado que el hecho de hacer IPL desde cinta implica la única lectura del primer registro de cinta, la carga IPL daría error. Al ser NL, el primer registro contendrá directamente el programa DFSMSDSS Stand Alone, por lo que la IPL desde cinta tendrá éxito.

1.3 IPL del mini-SO

Para hacer IPL del sistema que acabamos de crear, partiremos desde el supuesto que hemos perdido toda la información del disco, por lo que lo que pretendemos es arrancar el mini-SO para poder restaurar la información que anteriormente ha sido grabada en cinta.

1.- Si no tenemos el volumen creado en nuestro mainframe, pero disponemos de la cinta que hemos creado en el punto 1.2.17, introduciremos dicha cinta en una boca que esté on-line en nuestra instalación, y anotaremos la dirección de dicha boca (en nuestro ejemplo, la 0500).

2.- Iremos a la HMC y elegiremos la LPAR en la que queremos arrancar el sistema, y daremos al botón de LOAD.

3.- En el cuadro de diálogo que se muestra al dar a LOAD, introduciremos en el campo de LOAD ADDRESS la dirección de la boca donde hemos introducido la cinta, y daremos a intro (en nuestro ejemplo, escribiremos 0500). El campo LOAD PARAMETER no se utiliza en este caso que cargamos desde cinta. Al de unos segundos, debería aparecer un mensaje diciendo que la carga ha tenido exito.

4.- Nos iremos a un terminal que esté on-line en esa LPAR (puede ser la master console mismamente). Daremos a Intro, con lo que por pantalla, abajo, nos debe aparecer el siguiente mensaje:

CLEAR SCREEN WHEN READY

Daremos a Intro. Saldrá el siguiente mensaje:

5694-A01 DFSMSDSS STAND-ALONE V1.03.0
ALL RIGHTS RESERVED. 5694-A01 (C) COPYRIGHT IBM CORP. 1980, 2001.
LICENSED MATERIAL – PROGRAM PROPERTY OF IBM.
US GOVERNMENT USERS RESTRICTED RIGHTS –
USE, DUPLICATION, OR DISCLOSURE RESTRICTED BY
GSA ADP SCHEDULE CONTRACT WITH IBM CORP.

ADRY005E DEFINE INPUT DEVICE, REPLY ‘DDDD,CCUU’ OR ‘CONSOLE’
ENTER INPUT/COMMAND:

Significa que si queremos que los comandos que vayamos a introducir, queremos que se den desde un terminal concreto. Volveremos a dar al Intro, que cogerá nuestro terminal por defecto, y saldrá entonces el siguiente mensaje:

ADRY006E DEFINE OUTPUT DEVICE, REPLY ‘DDDD,CCUU’ OR ‘CONSOLE’
ENTER INPUT/COMMAND:

Ahora nos pregunta si queremos que la salida salga por otra dirección de pantalla. Le daremos nuevamente al Intro para que coja nuestro terminal. Por tanto, saldrá ya el siguiente mensaje:

SA/XA/ESA 5694-A01 DFSMSDSS STAND-ALONE V1.03.0 TIME: 12:57:49
02/01/08 PAGE 1

ENTER INPUT/COMMAND:

Estamos en condiciones de poder introducir comandos STAND-ALONE para restaurar los datos. Por tanto, introduciremos lo siguiente:

RESTORE FRMDEV(TAPE) FRMADDR(500) TOADDR(1000) NVFY FILE(2)

Significa que queremos restaurar desde cinta, cuya dirección es la 500 y queremos grabarlo en el disco con dirección 1000, No verificaremos el VOLSER de ese disco y diremos que lea el registro número 2, que es precisamente el registro donde en esa cinta guardamos el contenido del volumen 3390 que es el mini-SO. Si no hemos equivocado ninguna letra al transcribir el comando, debería aparecer lo siguiente:

ADRY003D 1000 REPLY Y TO ALTER VOLUME CONTENTS, ELSE N
ENTER INPUT/COMMAND:

Por lo que si damos a Y, y pulsamos Intro, comenzará a leer la cinta y grabarla en el volumen. Irán apareciendo mensajes de pistas grabadas y demás:

ADRY0500I NEXT TRACK TO WRITE:
TRACK CCHH = X’01A1 0000′
12:58:53 02/01/08
ADRY0500I NEXT TRACK TO WRITE:
TRACK CCHH = X’0342 0000′
12:59:32 02/01/08
ADRY0500I NEXT TRACK TO WRITE:
TRACK CCHH = X’04E3 0000′
13:00:04 02/01/08

Puede ocurrir que se nos llene la pantalla de este tipo de mensajes. Si esto ocurre, volverá a aparecer un mensaje de CLEAR SCREEN WHEN READY el cual si no damos a Intro, hará que el proceso se congele, y de ahí que haya que estar pendiente de esta consola. Cuando veamos el siguiente mensaje:

ADRY0001I FUNCTION COMPLETED, HIGHEST CONDITION CODE WAS 0
13:00:08 02/01/08

ENTER INPUT/COMMAND:

Significa que el proceso ha terminado bien. Por lo que ahora sabemos que tenemos un disco en la dirección 1000 el cual tiene un mini-SO listo para ser cargado.

5.- Ahora toca el turno de arrancar el mini-SO. Para ello, volver a la HMC, elegir la LPAR donde se quiera arrancar este sistema, y pulsar sobre LOAD. Esto abrirá una ventana la cual deberemos rellenar dos campos:

LOAD ADDRESS: 1000
LOAD PARAMETER: 100000M1

Esto significa que queremos que haga IPL del disco 1000, y en los parámetros, ponemos la dirección del disco donde está el IODF (que coincide, porque lo tenemos todo grabado en el mismo disco), que cargue el LOAD00 de la SYS1.PARMLIB, y la M1 del final es que queremos que salgan los mensajes y que el núcleo alternativo sea el 1.

6.- Por último, si damos a Intro, en la Master Console de esa LPAR aparecerán los mensajes de arranque, primero del NIP y luego de z/OS. Unicamente comentar que el JES2 arranca por defecto en frio, por lo que la primera pregunta que debemos responder es que debamos confirmar la formateo del spool. Seguidamente, se lanzará el TSO, pero como arranca antes que el VTAM, aparecerá un mensaje preguntando que si se quiere reintentar o cancelar, respondiendo RETRY cuando hayamos visto que el VTAM está activo.

1.4 Customización Final

Una vez que tenemos el TSO funcionando, y hemos conseguido entrar automáticamente al ISPF, veremos que no tenemos opción de entrar al SDSF.

Esto se soluciona de una manera muy rápida:

1.- Con el ISPF, entraremos en la librería ISP.SISPPENU que es la libraría de todos los paneles de ISPF y editaremos un miembro llamado ISR@PRIM (recomiendo hacer una copia de seguridad por si acaso).

2.- Hacia los alrededores de la fila 210, se ve la lista de opciones que aparecen en el menú principal. Pues bien, añadiremos una más repitiendo la fila donde aparece 6 Commands y escribiremos encima:

S SDSF Spool Search And Display Facility

Dejando lo que antes era esto:

.4 .Foreground   .Interactive language processing      .
.5 .Batch        .Submit job for language processing   .
.6 .Command      .Enter TSO or Workstation commands    .
.7 .Dialog Test  .Perform dialog testing               .
.9 .IBM Products .IBM program development products     .

Por esto otro:

.4 .Foreground   .Interactive language processing      .
.5 .Batch        .Submit job for language processing   .
.6 .Command      .Enter TSO or Workstation commands    .
.S .SDSF         .Spool Search and Display Facility    .
.7 .Dialog Test  .Perform dialog testing               .
.9 .IBM Products .IBM program development products     .

3.- Nos situaremos unas 100 filas mas abajo, y veremos la lista de comandos que se relacionan con la vista de menú que hemos visto en el punto 2. Así pues, repetiremos la línea del “6 Commands” y escribiremos lo siguiente:

S,’PGM(ISFISP) NOCHECK NEWAPPL(ISF) PARM(&NEXTOPT)’

Dejando lo que antes era:

  3,'PANEL(ISRUTIL) SCRNAME(UTIL)'
  4,'PANEL(ISRFPA) SCRNAME(FOREGRND)'
  5,'PGM(ISRJB1) PARM(ISRJPA) SCRNAME(BATCH) NOCHECK'
  6,'PGM(ISRPTC) SCRNAME(CMD)'
  7,'PGM(ISPYXDR) PARM(&ZTAPPLID) SCRNAME(DTEST) NOCHECK'
  9,'PANEL(ISRDIIS) ADDPOP'
 10,'PGM(ISRSCLM) SCRNAME(SCLM) NOCHECK'

Por esto:

  3,'PANEL(ISRUTIL) SCRNAME(UTIL)'
  4,'PANEL(ISRFPA) SCRNAME(FOREGRND)'
  5,'PGM(ISRJB1) PARM(ISRJPA) SCRNAME(BATCH) NOCHECK'
  6,'PGM(ISRPTC) SCRNAME(CMD)'
  S,’PGM(ISFISP) NOCHECK NEWAPPL(ISF) PARM(&NEXTOPT)’ 
  7,'PGM(ISPYXDR) PARM(&ZTAPPLID) SCRNAME(DTEST) NOCHECK'
  9,'PANEL(ISRDIIS) ADDPOP'
 10,'PGM(ISRSCLM) SCRNAME(SCLM) NOCHECK'

4.- Salvaremos el miembro y saldremos del TSO, para volver a entrar de nuevo, viendo la nueva opción aparecer en el menú principal.

A partir de aqui, se pueden submitir simultáneamente varios trabajos de restauración, dependiendo de las bocas disponibles y las hebras del JES2, con lo que la restauración de todo un sistema se simplifica mucho en el tiempo.

Grupos de Generación en z/OS

Hola a todos. En esta ocasión, voy a escribir sobre los Grupos de Generación o GDGs (Generation Data Group).

Un grupo de generación (en adelante, GDG), es un tipo de dataset secuencial, que tiene una particularidad con respecto al resto de datasets, y es que permiten dotar de navegabilidad a los datos a lo largo de varios datasets. Con un ejemplo, se verá mejor.

Supongamos que tenemos un proceso que diariamente saca a un dataset un log determinado, por ejemplo, el SMF. Al dia siguiente, se vuelve a realizar ese proceso, y hace un append al dataset, es decir, graba al final de los datos existentes  los nuevos datos, con lo que, ese dataset, ira creciendo su volumen día a día hasta que se quede sin extents y adios muy buenas. Pues un GDG en este caso, nos viene bien para partir el mismo dataset, por ejemplo, por días, y hacer que ese proceso cree un nuevo dataset con el mismo nombre cada día (+1), o bien poder irnos 10 dias atras y ver su contenido (-10). El GDG creará -invocado por el proceso- un nuevo dataset por día, así que toda esa información se puede tener para crear historicos que luego con HSM se puedan migrar a cinta, o lo que queramos, o simplemente poder navegar por todo el arbol de generación buscando un dia concreto, en vez de abrir un dataset faraonico y buscar en su interior.

Para trabajar con un GDG, lo primero que tenemos que tener clara es la nomenclatura y como se llamaran sus grupos. Por ejemplo, el dataset GODDESS.GDG.DAILY será el nombre BASE a que se referira cuando nos referenciemos a ese dataset, pero al crear un GDG, cada “versión” que se cree se llamará GODDESS.GDG.DAILY.G0001V00, G0002V00, G0003V00 y asi sucesivamente, siendo la ultima versión el número mas alto de todos ellos (es decir, la versión actual del dataset).

Suponiendo que la ultima versión de nuestro dataset sea GODDESS.GDG.DAILY.G0007V00, si yo desde un JCL quiero ir 2 datasets atras, me basta con poner el nombre base, seguido de un parametro GODDESS.GDG.DAILY(-2) y en realidad, estaré referenciando al dataset GODDESS.GDG.DAILY.G0005.V00. Por esa razón, esto es muy util, porque de un nombre de dataset, puedes en teoria referenciar versiones distintas de los mismos datos -datasets en este caso- para realizar selecciones de historicos. Y, claro está, si hago referencia a GODDESS.GDG.DAILY(+1) estoy CREANDO una nueva versión del GDG.

Donde se suelen utilizar?

Pues por ejemplo, como ya he dicho, para volcar logs del sistema, copias de seguridad de datos, imagecopys de tablas de DB2 -yo podria restaurar un dataset 5 dias atras referenciandolo con un (-5)  si la copia fuera diaria, o mejor dicho, si el GDG se generara diariamente-, y, en conjunción con servicios como HSM, dichos GDGs se podrian guardar en cinta sin problemas…

Como crear un GDG

Para crear un GDG, basta con utilizar el IDCAMS, utilidad bastante conocida, en un JCL como el siguiente:

//DEFIGDG  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1)
//*
//* ALOCACION DE GDG
//*
//PASO0001 EXEC PGM=IDCAMS
//SYSPRINT  DD SYSOUT=*
//SYSIN     DD *
  DEF GDG (NAME(GODDESS.GDG.DAILY) LIMIT(030) SCRATCH)
/*

LIMIT es el limite que le ponemos de generación para grabado en disco, es decir, en este ejemplo, solo vamos a permitir crear 30 definiciones en disco, si grabamos la 31, el sistema (por el parámetro SCRATCH), borrará la versión más antigua, es decir, la V1 del disco.

Que quieres que una vez creado, el límite sea 300? No se puede, el limite maximo para versiones de GDG en disco es de 255. Pues en vez de hacer un DEF GDG, haces un ALTER GDG GODDESS.GDG.DAILY LIMIT(255) y a otra cosa.

Grabando y trabajando con versiones

A partir de este momento, usaremos el GDG como otro dataset cualquiera, con un JCL cualquiera como el que pongo de ejemplo:

//COPIADS  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//PASO1   EXEC PGM=IEBGENER
//SYSUT1   DD  DSN=GODDESS.DB2.IMGCOPY,DISP=(OLD,KEEP,KEEP)
//SYSUT2   DD  DSN=GODDESS.GDG.DAILY(+1),
//             DISP=(,CATLG,DELETE),SPACE=(CYL,(50,10),RLSE),
//             UNIT=SYSDA
//SYSPRINT DD  SYSOUT=A
//SYSIN    DD  DUMMY
/*

Como ya hemos dicho, el +1 es para crear una nueva versión. Si quisieramos referenciar a versiones anteriores, podríamos utilizar un JCL tal que este:

//RECUPER  JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//PASO1   EXEC PGM=IEBGENER
//SYSUT1   DD  DSN=GODDESS.GDG.DAILY(-4),DISP=(OLD,KEEP,KEEP)
//SYSUT2   DD  DSN=GODDESS.VERSION4,
//             DISP=(,CATLG,DELETE),SPACE=(CYL,(50,10),RLSE),
//             UNIT=SYSDA
//SYSPRINT DD  SYSOUT=A
//SYSIN    DD  DUMMY
/*

Este JCL copiaría en GODDESS.VERSION4, el contenido de hace 4 versiones del dataset GODDESS.GDG.DAILY.

Como podréis ver, esto tiene mucho juego, de ahi que se usen sin parar en todo tipo de instalaciones. Hasta mas ver!

Dia a Día del DFSMSrmm

En este siguiente artículo, tratare de completar el articulo iniciado dias atras acerca del RMM, en el que hemos visto como se configura y customiza. Por tanto, el articulo de hoy tratará de explicar el día a día del manejo de la instalación.

1.- Manejo del RMM

El RMM se administra o bien por comandos TSO, o bien por un interfaz basado en menús. La elección de uno u otro es totalmente personal, mientras que por menú puede ser mas facil trabajar para los no iniciados, una vez sabes los comandos, hacerlo usando esta segunda opción es mas rapido. En nuestra instalación basada en el ADCD, el menu se localiza entrando en la opción M (more) de ISPF, y a continuación, la opción 2 (ISMF), para teclear despues la R (Removable Media Manager), llegando a un menú como el que aparece a continuación.


Fig. 1: Menu inicial

Por comandos, podemos irnos a la opción 6 del ISPF (TSO Commands) y ejecutar los comandos desde allí.

2.- Introducción de Cintas al RMM

Para empezar a trabajar con el sistema RMM, y sobre todo, que el mainframe pueda empezar a trabajar con cintas, antes debemos tener cintas en un pool llamado SCRATCH. Este pool es el inicial donde estan todas las cintas virgenes, o disponibles una vez hayan caducado sus datos. Para ello, desde el menú del RMM, basta con irnos a las opciones 2 (LIBRARIAN) y 7 (SCRATCH) para añadir volumenes. Recordad que, dada la definición inicial del articulo anterior, el RMM de momento solo acepta cintas que empiecen con la etiqueta BCK y que sean del tipo MEDIA2 (cintas 3490E), asi que en dicha ventana indicaremos el nombte de la etiqueta (por ejemplo, BCK000), el tipo (MEDIA2) y cuantos cartuchos introduciremos (10), tal y como muestra la figura:


Fig. 2: Añadir cartuchos

En este momento, ya podemos hacer uso de estos cartuchos en la instalación. Si grabamos datos en ellos con JCLs, veréis como los cartuchos pasan de estar en SCRATCH a MASTER. Para hacer una búsqueda de los cartuchos que tenemos, basta con ir al menu 2 (LIBRARIAN), opción 1 (VOLUME), 5 (SEARCH) y alli hacer la busqueda por volumen (*) y por Owner de las cintas (*). Esto hará que salga una lista con todos los volumenes de la instalación, ya sean en uso, disponibles, de distintos owners, etc.


Fig. 3: Busquedas de cartuchos

Segun el ejemplo de la figura, ya hay 4 cartuchos en uso por la instalación (MASTER), cuyos datos caducarán en una semana desde la fecha de creación, momento en el cual, podrian volver al pool de SCRATCH.

Este tema también se puede hacer vía comandos del TSO, tan solo con poner RMM SV VOLUME(*) OWNER(*) LIMIT(*), nos saldría el siguiente listado:

Volume Owner    Rack   Assigned   Expiration Location Dsets St Act   Dest.
                       date       date
------ -------- ------ ---------- ---------- -------- ----- -- ----- --------
BCK000 START2          10/08/2010 17/08/2010 SHELF    1     M
BCK001 START2          10/08/2010 17/08/2010 SHELF    1     M
BCK002 START2          10/08/2010 17/08/2010 SHELF    1     M
BCK003 START2          10/08/2010 17/08/2010 SHELF    1     M
BCK004                 10/08/2010            SHELF    0     S
BCK005                 10/08/2010            SHELF    0     S
BCK006                 10/08/2010            SHELF    0     S
BCK007                 10/08/2010            SHELF    0     S
BCK008                 10/08/2010            SHELF    0     S
BCK009                 10/08/2010            SHELF    0     S
EDG3012I 10         ENTRIES LISTED

3.- Obtención de datos del funcionamiento del RMM

El comando más utilizado en este caso es desde el TSO Commands, teclear RMM LISTCONTROL ALL que nos mostrará todos los datos de ejecución del sistema, si existen tareas pendientes para el HouseKeeping, etc:

Control record:
Type = MASTER    Create date = 13/08/2007  Create time = 13:58:37
Journal utilization =   4% (75% threshold)
Exit status:                            Options:
  EDGUX100 = NONE                         Stacked Volumes         = NONE
  EDGUX200 = NONE                         Extended Bin            = DISABLED
Last backup:                            Last expiration processing:
  Date =             Time =               Date =             Time =
Last report extract:                    Last store update:
  Date =             Time =               Date =             Time =
Last scratch procedure:                 Last VRS processing:
  Date =             Time =               Date =             Time =
Last Catalog synchronize:
  Date =             Time =
Rack numbers       = 0                  Empty racks        = 0
LOCAL store bins   = 0                  Empty LOCAL bins   = 0
DISTANT store bins = 0                  Empty DISTANT bins = 0
REMOTE store bins  = 0                  Empty REMOTE bins  = 0
Control functions in progress:
Backup         = N  Restore        = N
Verify         = N  Expiration     = N
Report Extract = N  Disaster Store = N
VRS            = N  Synchronize    = N                                        

System options:
PARMLIB Suffix  = 00
Operating mode  = P    Retention period: Default = 5       Maximum = 9999
                                         Catalog = 12    hours
Control data set name      = RMM.CONTROL.DSET
Journal file data set name = RMM.JOURNAL.DSET
Journal threshold          = 75%
Catalog SYSID   = Notset
Scratch procedure name     = RMMSCR
Backup procedure name      =
IPL date check  = N        Date format    = E       RACF support   = A
SMF audit       = 248      SMF security   = 249     CDS id         = RMM1
MAXHOLD value   = 100      Lines per page = 54      System ID      = SYS1
BLP             = RMM      Notify         = N
Uncatalog       = Y        VRS job name   = 2       Message case   = M
MASTER overwrite= LAST     Accounting     = J       VRS selection  = OLD
VRS change      = INFO     VRSMIN action  = FAIL    VRSMIN count   = 1
Disp DD name    =          Disp msg ID    = EDG4054I
Retain by       = VOLUME   Move by        = VOLUME
TVEXT purge     = RELEASE  PREACS         = NO      SMSACS         = NO
Reuse bin       = CONFIRMMOVE                       Media name     = 3480
PDA: ON
 Block count    = 255      Block size     = 27      Log            = ON
SMSTAPE:
 Update scratch = YES      Update command = YES     Update exits   = YES
 Purge          = ASIS                                                        

NO INSTALLATION DEFINED SECURITY CLASSES                                      

Volume Pools:
Pool   System   RA Ty Expdt Pool     Media    Description
                CF pe check name     name
------ -------- -- -- ----- -------- -------- --------------------------------
BCK*            Y  S  N              MEDIA2   CARTUCHOS DE LA INSTALACION
*               N  S  O              3480     DEFAULT VOLUME POOL             

Mount/Fetch messages:
Message ID    ID  Volume Rack
------------  --- ------ ----
IAT5110       1   44     999
IAT5210       1   50     999
IAT5410       1   20     999
IEC501A       1   16     999
IEC502E D     1   16     999
IEC502E K     1   16     999
IEC502E R     1   16     999
IEC502E RD    1   17     999
IEC502E RK    1   17     999
IEF233A       1   16     999
IEF233D       1   16     999
IEF234E D     1   16     999
IEF234E K     1   16     999
IEF234E R     1   16     999
IEF455D       1   16     999                   

NO INSTALLATION DEFINED REJECT PREFIXES        

Location definitions:
Location Def Mgtype  Ltype  Priority Medianames
-------- --- ------  -----  -------- ----------
          N          AUTO     4800
          N          MANUAL   4900
DISTANT   N          STORE     200
LOCAL     N          STORE     300
REMOTE    N          STORE     100
SHELF     N                   5000
          N                   5000             

Action   Status
-------- ---------
INIT     Confirmed
SCRATCH  Pending
REPLACE  Unknown
ERASE    Unknown
RETURN   Unknown
NOTIFY   Unknown                               

NO MOVES STATUS INFORMATION IS AVAILABLE       

4.- Proceso de HouseKeeping

El “HouseKeeping” o proceso de “limpieza” es un proceso que se lanza de manera manual o automática, que se encarga de realizar las operaciones de RMM, como comprobar caducidades, llevar los cartuchos a SCRATCH y otro tipo de tareas internas. Este proceso utiliza un JCL como el que pongo a continuación, JCL que en mi instalación, lo tengo planificado para que se ejecute diariamente.

//HOUSEKP1 JOB GODDESS,URD,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,
//             MSGLEVEL=(1,1),REGION=0M
//*--------------------------------------------------------------
//* HOUSEKEEPING DEL RMM
//*--------------------------------------------------------------
//EDGHSKP1 EXEC PGM=EDGHSKP,
//         PARM='EXPROC,RPTEXT'
//SYSPRINT DD SYSOUT=*
//MESSAGE  DD DSN=YGGDRASL.RMM.MESSAGE1(0),DISP=SHR
//REPORT   DD DSN=YGGDRASL.RMM.REPORT1(0),DISP=SHR
//REPTEXT  DD DSN=YGGDRASL.RMM.EXTRACT1(0),DISP=SHR

A partir de aqui, se os abre un mundo de investigación. Lo mejor es jugar con las parámetros del RMM y añadir librerías de cintas, crear mas pools de cartuchos de todo tipo, y ver como las politicas de DFSMS pueden interactuar con ellos…

Puesta en marcha del DFSMSrmm

Hola a todos. Vuelvo de nuevo a la carga para publicar mas recetas de mainframe. En esta ocasión, voy a explicar como activar el RMM, o lo que es lo mismo, el Removable Media Manager dentro del z/OS, para activar el sistema de gestión de medios extraibles del mainframe.

Tradicionalmente, el mainframe trabaja con unidades de cinta, no solo para hacer backup, sino también para dejar datasets y librerias en cinta, ya que el almacenamiento en disco es bastante mas caro. Podéis haceros una idea la cantidad inmensa de datos que se pueden grabar en cinta, y la cantidad inmensa de cintas con las que se trabaja. Administrar la expiración y caducidad de los datos, llevar el control de la disposición y lugar donde se almacenan las cintas, controlar el volumen de cintas de entran y salen, si se lleva de forma manual, se convierte en nada menos que un esfuerzo que los “cintotecarios” tenían que realizar, hasta la llegada del RMM.

Este sistema es un completo módulo que se engrana perfectamente dentro del DFSMS, que gestiona todas y cada una de las cintas con las que se trabaja, entradas, salidas, gestión del dato, caducidad, transmisión, almacenado de cintas, de una manera muy eficaz. Y sobre todo, aunque se puede llevar de forma manual, con la llegada de las robóticas automatizadas de cintas, es donde el RMM se ha mostrado más util, dialogando directamente con los brazos robóticos y eliminando practicamente la figura del cintotecario en la ecuación.

Como funciona?

El sistema se gestiona por pools de cintas, y cada pool tiene una serie de caracteristicas. Por ejemplo, el pool de SCRATCH es aquel donde las cintas estan disponibles para su escritura o uso, y es el pool donde se dirige el mainframe cuando necesita grabar una cinta con datos, vendria a ser el pool de cintas “virgenes”. Por otra parte, el pool MASTER es aquel donde las cintas tienen datos grabados y validos del sistema.

Las cintas tienen un ciclo de vida, el cual puede saltar de un pool a otro en función de su caducidad, expiración, etc, de forma que cuando una cinta, al final, ya no tiene datos validos por haber caducado, pueden volver al pool de SCRATCH para que se puedan reutilizar de nuevo por el sistema.

El presente texto, explica como activar el RMM, contando con el hecho de que el DFSMSrmm está instalado en nuestro sistema ADCD, por lo que seguiriamos los siguientes pasos:

1.1 Customización de miembros de la PARMLIB

1.- Lo primero de todo, hay que verificar si en el miembro IFAPRDXX, se encuentra el miembro instalado. Si lo está, deberían aparecer las siguientes líneas. Si no lo está, las añadiremos:

PRODUCT OWNER('IBM CORP')
        NAME(Z/OS)
        ID(5694-A01)
        VERSION(*) RELEASE(*) MOD(*)
        FEATURENAME(DFSMSRMM)
        STATE(ENABLED)

2.- Lo siguiente es comprobar el miembro IEFSSNXX, y añadir la línea EDGSSI, para que el z/OS sepa que subsistema lanzar. Por tanto, se debería añadir una línea como esta:

SUBSYS SUBNAME(DFRM) INITRTN(EDGSSSI)

3.- Debemos modificar las autorizaciones de TSO para poder emitir comandos de RMM usando la opción 6 del ISPF, por lo que debemos añadir a la IKJTSOXX los comandos necesarios. Para averiguar que IKJTSO tenemos, con hacer un /D IKJTSO,SEND debería aparecernos la 00. De hecho, si no se le especifica nada en la IEASYS con la variable IKJTSO=XX, coge la 00 por defecto. Una vez sabido el miembro correcto (en nuestra instalación, IKJTSO00), añadiremos los siguientes comandos:

AUTHCMD NAMES(          /* AUTHORIZED COMMANDS      */ +
   RMM                  /* RMM                      */ +
AUTHPGM NAMES(          /* AUTHORIZED PROGRAMS      */ +
   EDGHSKP              /* RMM                      */ +
   EDGUTIL              /* RMM                      */ +
   EDGRPTD              /* RMM                      */ +
   EDGAUD               /* RMM                      */ +
AUTHTSF NAMES(          /* PROGRAMS TO BE AUTHORIZED */  +
                        /* WHEN CALLED THROUGH THE   */  +
                        /* TSO SERVICE FACILITY.     */  +
   EDGHSKP              /* RMM                      */ +
   EDGUTIL              /* RMM                      */ +
   EDGRPTD              /* RMM                      */ +
   EDGAUD               /* RMM                      */ +

Con esto, la lista de comandos de administración de RMM quedará autorizada en TSO.

4.- Si quisiéramos que el RMF obtuviera datos del RMM para estadísticas, deberíamos modificar el miembro SMFPRMXX, pero es un paso opcional que no seguiremos por no ser critico.

5.- Por último, debemos crear un miembro llamado EDGRMMXX (en nuestro caso, EDGRMM00), copiado de la SYS1.SAMPLIB(EDGIVPPM), que es donde se definirán los parámetros de arranque del RMM cuando su STC se inicie. Dicho contenido será similar al que se muestra a continuación:

/*-------------------------------------------------------------*/
/***************************************************************/
/* DFSMS/MVS 1.1.0 DFSMSrmm                                    */
/*                                                             */
/*PROPRIETARY V3 STATEMENT                                     */
/*LICENSED MATERIALS - PROPERTY OF IBM                         */
/*"RESTRICTED MATERIALS OF IBM"                                */
/*5695-DF1                                                     */
/*(C) COPYRIGHT 1979,1993  IBM CORP.                           */
/*END PROPRIETARY V3 STATEMENT                                 */
/***************************************************************/
/*                                                             */
/*  RMM (JDZ1150) IVP.  IVP EDGRMM00 PARMLIB MEMBER            */
/*                                                             */
/*  COPY THIS MEMBER TO 'SYS1.PARMLIB' AS MEMBER EDGRMM00.     */
/*                                                             */
/*  CHANGE THE MASTER AND JOURNAL FILE NAMES IF NECESSARY      */
/*                                                             */
/*-------------------------------------------------------------*/
  OPTION  DSNAME(RMM.CONTROL.DSET)       /* MASTER FILE NAME*/  -
          JRNLNAME(RMM.JOURNAL.DSET)       /* JOURNAL NAME  */  -
          OPMODE(M)
  MNTMSG  MSGID(IEF233A)      ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID(IEF233D)      ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEF234E K')  ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEF234E R')  ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEF234E D')  ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEF455D')    ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID(IEC501A)      ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEC502E K')  ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEC502E D')  ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEC502E R ') ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEC502E RD') ID(1) VOLUME(17) RACK(999)
  MNTMSG  MSGID('IEC502E RK') ID(1) VOLUME(17) RACK(999)
  MNTMSG  MSGID(IAT5110)      ID(1) VOLUME(44) RACK(999)
  MNTMSG  MSGID(IAT5210)      ID(1) VOLUME(50) RACK(999)
  MNTMSG  MSGID(IAT5410)      ID(1) VOLUME(20) RACK(999)

Hay que tener en cuenta los valores en Negrita. Por un lado, tenemos el DSNAME, que especifica el dataset VSAM que llevará en control del número de cintas que maneja el RMM. Por otra parte, la opción JRNLNAME especifica donde grabaremos el JOURNAL del RMM, y por último, tenemos el OPMODE u “Operation Mode” que indica el modo de trabajo del RMM (M para manual, P para protegido, R para grabación (modo normal de funcionamiento) y W para warning). En nuestro caso, lo dejamos en M de momento, que es Manual, lo que significa que el RMM de momento no realizará montajes automáticos, sino standalone (vamos, como estábamos haciéndolo hasta ahora). Los datasets los creamos luego.

1.2 Creación del la STC de la PROCLIB

Necesitamos un miembro en la PROCLIB que será en que se lance como STC para que el RMM esté bajo la supervisión del JES2. Para ello, copiaremos de SYS1.SAMPLIB el miembro EDGDFRMM y lo pegaremos en nuestra PROCLIB (ADCD.ZOSV14S.PROCLIB) pero renombrándolo como DFRMM. El contenido de dicho miembro lo listamos a continuación:

//DFRMM   PROC M=00,OPT=MAIN
//*
//*    PROCEDURE FOR DFRMM SUBSYSTEM TASK
//*
//*   1. M Is used to pick up the necessary PARMLIB member name suffix.
//*      OPT can be used to execute the EDGRESET utility to inactivate
//*      the DFRMM subsystem interface before stopping DFRMM procedure.
//*      S DFRMM,OPT=RESET
//*      P DFRMM
//*   2. IEFRDER and PARMLIB are optional DD statements - see
//*      the Installation & Customization Guide for details.
//*      IEFRDR is only honoured for single step procedures
//*   3. This procedure is designed to run as a single step procedure
//*   4. If desired, the MASTER and JOURNAL DD statements can be
//*      added to the procedure. Refer to the I&C Guide for details.
//*   5. The DFRMM startup procedure can optionally include an
//*      OUTPUT JCL statement to direct sticky label output. The
//*      statement name must match the DISPDDNAME specified in parmlib.
//*      If the OUTPUT statement is not specified, RMM issues the
//*      label as write to operator messages using route code 13.
//*
//*********************************************************************
//* z/OS   DFSMSrmm V1R3                                              *
//*                                                                   *
//*PROPRIETARY V3 STATEMENT                                           *
//*LICENSED MATERIALS - PROPERTY OF IBM                               *
//*"RESTRICTED MATERIALS OF IBM"                                      *
//*5694-A01                                                           *
//*(C) COPYRIGHT 1993,2001  IBM CORP.                                 *
//*STATUS = HDZ11G0                                                   *
//*END PROPRIETARY V3 STATEMENT                                       *
//*********************************************************************
//*  Change history:                                                  *
//* $01=OW57435,210,021205,MWW: Increase REGION value            @01A *
//*********************************************************************
//*
//IEFPROC EXEC PGM=EDG&OPT,REGION=0M,PARM='&M',TIME=1440        @01C
//*PARMLIB  DD  DDNAME=IEFRDER
//*IEFRDER  DD  DISP=SHR,DSN=SYS1.PARMLIB
//*MMDISP OUTPUT DEST=SYSTEMX,FORMS=LABEL,CLASS=L
//EDGPDOX   DD DISP=SHR,DSN=RMM.RMMPDOX
//EDGPDOY   DD DISP=SHR,DSN=RMM.RMMPDOY

Con M=00, le estamos diciendo que esta STC se alimente del miembro EDGRMM00 de la PARMLIB, editado anteriormente. También hay que alocar dos datasets que llevarán las trazas del RMM, llamados RMMPDOX y RMMPDOY. Como hay que crear varios datasets, el siguiente apartado muestra como crear todos los datasets que entran en juego.

1.3 Creación de Datasets, Catálogos de usuario, etc.

Este apartado explicará paso a paso los datasets que se deben crear para el correcto funcionamiento del RMM. Como intervienen varios datasets, crearemos un catálogo solo para ellos y su alias correspondiente. Para ello, seguiremos los siguientes pasos:

1.- Definiremos un catálogo llamado CATALOG.RMM, y lo conectaremos al catálogo maestro, CATALOG.OS390.MASTER, con el siguiente JCL:

//DEFCAT00 JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//DEFMCAT  EXEC PGM=IDCAMS,REGION=8M
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
  DEFINE -
    UCAT ( -
          ICFCATALOG -
          NAME(CATALOG.RMM) -
          VOL(OS39M1) -
          CYL(10 5) -
          FREESPACE(10 10) -
              SHR(3 4) -
   IMBED -
     REPLICATE -
     STRNO(3) -
   ) -
 DATA ( -
    CISZ(4096) -
      BUFND(4) -
     )-
 INDEX( -
      BUFNI(4) -
     ) -
 CAT(CATALOG.OS390.MASTER)
//*-------------------------------------------------------------------
//*  CONNECT THE DRIVING SYSTEM MASTER CATALOG INTO THE NEW TARGET
//*  SYSTEM MASTER CATALOG FOR THE CATCVTM JOB
//*-------------------------------------------------------------------
//CONNECT1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
  IMPORT CONNECT -
  OBJECTS((CATALOG.RMM -
  DEVICETYPE(3390) -
  VOLUME(OS39M1))) -
  CATALOG(CATALOG.OS390.MASTER)
/*

2.- Definiremos el ALIAS para que todo lo que empiece por RMM, se vaya al catálogo CATALOG.RMM, con el siguiente JCL:

//DEFALIAS  JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//PAS0001 EXEC PGM=IDCAMS,REGION=1024K
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
  DEFINE ALIAS (NAME(RMM)                      -
                RELATE(CATALOG.RMM))  -
                CATALOG(CATALOG.OS390.MASTER)
/*

3.- Crearemos el dataset de Control del RMM (RMM.CONTROL.DSET) con el siguiente JCL:

//CREAVSAM JOB  CLASS=A,NOTIFY=&SYSUID,MSGCLASS=X,
//             MSGLEVEL=(1,1)
//PASO1   EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//DASD     DD DISP=SHR,UNIT=SYSDA,VOL=SER=OS39M1
//SYSIN    DD *
  DEFINE CLUSTER(NAME(RMM.CONTROL.DSET) -
  FILE(DASD) -
  FREESPACE(15 0) -
  KEYS(56 0) -
  REUSE -
  RECSZ(512 9216) -
  SHR(3 3) -
  KILOBYTES(4500 1500) -
  VOLUMES(OS39M1)) -
  DATA(NAME(RMM.CONTROL.DSET.DATA) -
  CISZ(26624)) -
  INDEX(NAME(RMM.CONTROL.DSET.INDEX) -
  CISZ(2048))
/*

Y lo inicializaremos, con el siguiente JCL:

//CDSINIT JOB  CLASS=A,NOTIFY=&SYSUID,MSGCLASS=X,
//             MSGLEVEL=(1,1)
//EDGUTIL EXEC PGM=EDGUTIL,PARM=CREATE
//SYSPRINT DD SYSOUT=*
//MASTER DD DSN=RMM.CONTROL.DSET,DISP=SHR
//SYSIN DD *
CONTROL
/*

4.- Crearemos el JOURNAL del RMM, utilizando como base el JCL del la SYS1.SAMPLIB, EDGJNLAL, y le haremos las modificaciones oportunas:

//EDGJNLAL JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//***************************************************************
//* DFSMS/MVS 1.4.0 DFSMSrmm                                    *
//*                                                             *
//*Proprietary V3 Statement                                     *
//*Licensed Materials - Property Of IBM                         *
//*"Restricted Materials of IBM"                                *
//*5695-DF1 (C) COPYRIGHT 1979,1993  IBM CORP.                  *
//*End Proprietary V3 Statement                                 *
//***************************************************************
//*                                                             *
//*  RMM (HDZ11D0). ALLOCATE JOURNAL FILE                       *
//*                                                             *
//*  THIS JOB IS USED TO ALLOCATE A JOURNAL FILE FOR THE RMM    *
//*  CONTROL DATA SET.                                          *
//*                                                             *
//*    MAKE THE FOLLOWING CHANGES TO THIS JOB BEFORE SUBMITTING *
//*  IT FOR EXECUTION:                                          *
//*     1.JOBCARD. Enter required job card information for your *
//*                installation.                                *
//*     2.volser Set to the serial number of the volume on which*
//*       to allocate the JOURNAL file.                         *
//*     3.JOURNAL.FILE.DSNAME Set to the name selected.         *
//*     4.store_class to a storage class with GUARANTEED SPACE  *
//*       or delete the STORCLAS keyword.                       *
//*     5.SPACE. Update the values for space allocation if you  *
//*       wish to use a different sized Journal data set        *
//*                                                             *
//*-------------------------------------------------------------*
//JOURNAL EXEC PGM=IEFBR14
//SYSPRINT DD  SYSOUT=*
//JOURNAL  DD  DISP=(NEW,CATLG),DSN=RMM.JOURNAL.DSET,
//             UNIT=SYSDA,VOL=SER=OS39M1,
//             AVGREC=U,SPACE=(4096,(1000))

5.- Crearemos los datasets de trazas o PDAs, con el siguiente JCL:

//ALLOPDO JOB CLASS=A,MSGLEVEL=1,NOTIFY=&SYSUID
//STEP1   EXEC PGM=IEFBR14
//DD1     DD   DSN=RMM.RMMPDOX,DISP=(,CATLG),
//             UNIT=SYSDA,
//             VOL=SER=OS39M1,SPACE=(CYL,(20))
//DD2     DD   DSN=RMM.RMMPDOY,DISP=(,CATLG),
//             UNIT=SYSDA,
//             VOL=SER=OS39M1,SPACE=(CYL,(20))

Con todo esto, estamos en condiciones de lanzar el RMM.

1.4 Ejecución de DFSMSrmm

Para ejecutar el RMM, basta con lanzar la STC creada en el punto 1.2, con un comando de consola S DFRMM.

1.5 Customización de DFSMSrmm

En este momento, pasaremos a configurar el RMM y definiremos los tipos de cintas que utilizaremos en nuestra instalación. Para ello, editaremos el miembro EDGRMM00 que reside en la PARMLIB y añadiremos lo siguiente:

/*-------------------------------------------------------------*/
/***************************************************************/
/* DFSMS/MVS 1.1.0 DFSMSrmm                                    */
/*                                                             */
/*PROPRIETARY V3 STATEMENT                                     */
/*LICENSED MATERIALS - PROPERTY OF IBM                         */
/*"RESTRICTED MATERIALS OF IBM"                                */
/*5695-DF1                                                     */
/*(C) COPYRIGHT 1979,1993  IBM CORP.                           */
/*END PROPRIETARY V3 STATEMENT                                 */
/***************************************************************/
/*                                                             */
/*  RMM (JDZ1150) IVP.  IVP EDGRMM00 PARMLIB MEMBER            */
/*                                                             */
/*  COPY THIS MEMBER TO 'SYS1.PARMLIB' AS MEMBER EDGRMM00.     */
/*                                                             */
/*  CHANGE THE MASTER AND JOURNAL FILE NAMES IF NECESSARY      */
/*                                                             */
/*-------------------------------------------------------------*/
  OPTION  OPMODE(P)                   /* MODO PROTECCION   */    -
          TPRACF(A)                   /* AUTOMATIC         */    -
          NOTIFY(N)                   /* NO NOTIFICACION   */    -
          MAXHOLD(100)                /* NUMBERS OR RECORDS*/    -
          DSNAME(RMM.CONTROL.DSET)    /* FICHERO DE CONTROL*/    -
          JRNLNAME(RMM.JOURNAL.DSET)  /* FICHERO JOURNAL   */    -
          SMFAUD(248)   SMFSEC(249)   /* REGISTROS SMF     */    -
          SMSTAPE(UPDATE(COMMAND,EXITS,SCRATCH) PURGE(ASIS))     -
          VRSCHANGE(INFO)             /* VERIFICACION VRS  */    -
          DATEFORM(E)                 /* FECHA EUROPEA     */    -
          RETPD(5)                    /* DEFAULT RETENCION */    -
          MAXRETPD(9999)              /* MAXIMA RETENCION  */    -
          SCRATCHPROC(RMMSCR)         /* PROC DE SCRATCH   */    -
          CDSID(RMM1)                 /* CONTROL DS ID     */    -
          BLP(RMM)                    /* BYPASS LABEL PROC.*/
  /*  DEFINICION DE POOLES                                  */
  VLPOOL  PREFIX(BCK*)  TYPE(S) MEDIANAME(MEDIA2) EXPDTCHECK(N) –
          RACF(Y) DESCRIPTION('CARTUCHOS DE LA INSTALACION')
  MNTMSG  MSGID(IEF233A)      ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID(IEF233D)      ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEF234E K')  ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEF234E R')  ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEF234E D')  ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEF455D')    ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID(IEC501A)      ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEC502E K')  ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEC502E D')  ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEC502E R ') ID(1) VOLUME(16) RACK(999)
  MNTMSG  MSGID('IEC502E RD') ID(1) VOLUME(17) RACK(999)
  MNTMSG  MSGID('IEC502E RK') ID(1) VOLUME(17) RACK(999)
  MNTMSG  MSGID(IAT5110)      ID(1) VOLUME(44) RACK(999)
  MNTMSG  MSGID(IAT5210)      ID(1) VOLUME(50) RACK(999)
  MNTMSG  MSGID(IAT5410)      ID(1) VOLUME(20) RACK(999)

La parte de Negrita, por ejemplo, define un POOL de cintas. Todas las cintas que empiecen por la etiqueta BCK*, entrarán dentro de este pool. Esto es util por si tenemos diferentes tamaños de cartuchos, como 3480, o 3590, asi se diferencian por etiquetas y el RMM los puedo utilizar en cada caso segun las reglas que le vengan desde el SMS.

Pues con esto, ya tenemos todo el sistema definido y listo para trabajar. Con esta configuración, hemos activado el RMM en modo manual, es decir, tendemos que montar las cintas en los cartuchos de manera manual, y el sistema NO va a aceptar ninguna cinta que no tenga como etiqueta un texto que empiece por BCK. Por lo tanto, cintas como BCK002 o BCK843 son cintas que si aceptará y trabajará con ellas, de lo contrario, cintas con cualquier otra etiqueta, las escupirá y se quedará esperando hasta que se le introduzcan las cintas que espera.

En el siguiente artículo explicaré los comandos mas utilizados, el proceso de Housekeeping, etc.

Euskal Encounter 18

Como de costumbre, he llevado las máquinas mainframe que tengo en mi local, a la cita anual de la scene informatica. Este año, ha habido algunas novedades: Por una parte, la empresa donde trabajo, Grupo Versia, me ha querido apoyar y patrocinar el evento, ayudandome asi a sufragar los gastos del transporte de las maquinas, que, suele ser bastante elevado. Por otra, IBM, se ha portado este año y me ha cedido para la Euskal un IBM z9 BC con 4 IFLs y 3 GPs, con un total de 2500 MIPS, que, en comparación con mi pobre z800 de 80 MIPS, pues es muchisimo mas potente.

Por otra parte, también he llevado un vetusto ES/9000, que retire de la Universidad de Deusto y la gente flipo bastante con esta máquina de hace casi 30 años, 5 MIPS y 16 MB de RAM. Y por último dos IBM p690 “regattas” que llevaban el Data Warehouse de Eroski, consistentes en 24 procesadores POWER4+ y 48 GB de RAM cada uno de ellos.

Este año, el Mainframe ha participado en dos pruebas: Por una parte, una prueba de stress en la cual la gente se debia conectar al sistema EyeOS que instale en el zLinux desde su PC, para demostrar si 4096 usuarios pueden trabajar simultáneamente, y por otro lada, el “gameFrame” o Mainframe para juegos, donde instalé dos MMORPGs, Lineage II y Aion: The Tower Of Eternity.

Lamentablemente, la prueba de stress no pudo llevarse a buen termino, ya que le Euskal este año tuvo algún problema de red, por lo que había gente que no podría participar, y como la prueba pretendía ser global, pues se dejó para otro año, no así el servidor de juegos, que tuvo gran aceptación entre los asistentes.

Sin mas, os dejo el link para visitar la Galeria de Fotos del evento.

Trabajando con ficheros SAVF y Transferencia FTP

El presente articulo explica algunos procedimientos de cómo trabajar con ficheros SAVF y operar con ellos, haciendo transferencias y demás entre equipos.

Un fichero SAVF es un tipo de fichero de salvado de datos, como si fuera un ZIP en Windows o un TAR en Unix, solo que este tipo de ficheros se dan entre equipos AS/400. El concepto de copia a cinta es el mismo, solo que un fichero SAVF se graba a disco en vez de a cinta. Lo bueno es que se puede crear un fichero SAVF desde un conjunto de bibliotecas o incluso incluirlo dentro de una copia completa de todo el sistema, ya que esta opción, si se dispone del disco suficiente, es mucho mas rápida que un salvado tradicional a cinta.

Crear un fichero SAVF y salvar una Biblioteca

Si tenemos una biblioteca que queremos salvar a un fichero SAVF, basta con ejecutar los siguientes pasos:

1.- Creamos un archivo de salvar SAVF llamado MIFICHERO dentro de la QGPL con el comando CRTSAVF FILE(QGPL/MIFICHERO).

2.- Con el fichero creado, la idea es salvar la biblioteca que necesitemos salvar, por ejemplo, la biblioteca MILIBRERIA, con el siguiente comando:

SAVLIB LIB(MILIBRERIA) DEV(*SAVF) SAVF(QGPL/MIFICHERO)

Con esto, tendremos un fichero de salvar cuyo contenido sea una biblioteca y todos sus objetos.

Sacar un fichero SAVF del AS/400 y transferirlo al PC

Para ello, lo más sencillo es utilizar el comando FTP. Por tanto, nos conectaríamos con un cliente sencillo de FTP por línea de comandos (el propio FTP del Windows nos vale) y haríamos los siguientes pasos:

1.- Abrir una ventana de Windows (cmd)

2.- Escribir ftp 192.168.1.200 (siendo 192.168.1.200 la IP de nuestro AS/400)

3.- Introducir el nombre de usuario y contraseña de un usuario autorizado del AS/400 (por ejemplo, QSECOFR)

4.- Entrar dentro del directorio QGPL con un cd qgpl

5.- Escribir bin para cambiar el modo de transferencia de modo texto a Binario

6.- Escribir QUOTE SITE NAMEFMT 1 para pasar de modo Biblioteca a modo Fichero -luego explico por que-.

7.- Para recibir el fichero hacer un get mifichero.savf

8.- Una vez recibido, hacer un quit para salir del ftp del sistema.

El modo SITE NAMEFMT es un tipo de nomenclatura que se da al AS/400 para las transferencias tradicionales de AS/400. Por defecto, esta en modo NAMEFMT 0, lo que significa que esta en modo “biblioteca”. En este estado, en el FTP podriamos haber hecho simplemente un get mifichero pero claro, en el PC te lo deja tal cual, sin extensión. Si internamente sabes que ese fichero es un SAVF perfecto, pero luego suelen surgir problemas si ese fichero lo subimos al AS/400, ya que el sistema detectara un fichero tipo FILE con atributo PF-DTA y no un FILE con atributo SAVF que es como deberia ser.

Por tanto, es interesante dotar a todas nuestras transferencias antes el comando QUOTE SITE NAMEFMT 1, ya que en modo 1 es en modo “directorio” y si haces el get de mifichero.savf, con extensión, el sistema ya sabe de que fichero se trata. Y claro, si ese fichero lo vuelves a subir al AS/400, con el NAMEFMT a 1 haces que la extensión SAVF la detecte y entonces el AS/400 crea el fichero SAVF como lo debe crear, es decir como FILE con atributo SAVF.

Por tanto, recomendacion: SITE NAMEFMT siempre a 1.

Transmisión de un fichero SAVF al AS/400

Para transmitir un fichero al AS/400 desde nuestro PC, usaremos el FTP:

1.- Abrimos una ventana de comandos de Windows

2.- Escribiremos ftp 192.168.1.200 (siendo 192.168.1.200 la IP de nuestro AS/400)

3.- Introduciremos el nombre de usuario y contraseña autorizados

4.- Escribiremos cd qgpl para situarnos en esa biblioteca por defecto

5.- Escribiremos QUOTE SITE NAMEFMT 1 para cambiarnos al modo de “directorios” (como hemos explicado).

6.- Escribiremos un bin para poner el modo de transferencia en binario

7.- Haremos un put mifichero.savf para cargar al AS/400.

8.- Opcional: Si queremos “descomprimir” el contenido del fichero SAVF que acabamos de subir, introducir el siguiente comando: QUOTE RCMD RSTLIB SAVLIB(MILIBRERIA) DEV(*SAVF) SAVF(QGPL/MIFICHERO) para que el contenido de ese fichero lo dejemos en la biblioteca MILIBRERIA (debemos tener los privilegios de acceso suficientes, primero para hacer un Remote Command (RCMD) y luego para poder restaurar).

9.- Con un quit, nos saldremos de la máquina.

NOTA: Si hacemos un SAVLIB con un parametro llamado TGTRLS podemos salvar un fichero para que pueda ser leido por una versión anterior del SO en otra máquina diferente, aunque solo mantiene una compatibilidad hacia atras de 2 versiones (un salvado en V6R1M0 puedes restaurarlo en un V5R3M0, pero no en anteriores). Tambien hay que tener cuidado, porque no siempre se pueden salvar todos los programas (sobre todo, aquellos que son RPG compilados para una version del SO en concreto).

Personalizando el sistema (QINTER Y QBATCH vs QBASE)

En esta entrega, explicaré un poco cómo personalizar el sistema, sobre todo en el modo de trabajar de la maquina. Tenemos la maquina recién instalada, pero no la tenemos ajustada como para ponerla en producción, ya que todos los valores son “por defecto” y no siempre sirven para nuestros propósitos (todo depende de la problemática de cada instalación).

Lo primero de todo, es comprobar el Subsistema de Control. En tiempo de instalación, este subsistema se llama QBASE, y engloba tanto los procesos de terminales interactivos como los trabajas Batch que queramos lanzar. En función de cada caso, quizás interese que los trabajos Batch no afecten al rendimiento interactivo, por tanto es necesario disponer de otro modo de funcionamiento que permita separar estos entornos. Esto es llevado a cabo por dos subsistemas que también existen en el iSeries, pero que se encuentran inactivos (porque por defecto se arranca el QBASE), que son QINTER para los trabajos interactivos y QBATCH para los trabajos Batch o de proceso por lotes.

Este método de funcionamiento esta controlado por el valor del sistema QCTLSBSD, que, si entramos con WRKSYSVAL y buscamos el valor QCTLSBSD, veremos que esta en QBASE, como en el ejemplo de la siguiente figura.

Fig. 1: Valor del Sistema QCTLSBSD

Para cambiar el modo de trabajo a dos subsistemas separados QBATCH y QINTER, basta con cambiar el valor QBASE de nuestra variable QCTLSBSD y poner en su lugar QCTL, como en la siguiente figura:

Fig. 2: Cambio de QBASE a QCTL

Por tanto, en la próxima IPL del sistema, el sistema QBASE no arrancará, pero sí lo harán los subsistemas QINTER y QBATCH.

Pero no nos detendremos aquí, vamos a personalizar todavía mas el tema: En ciertas empresas, existe el hecho de que sus terminales esta “personalizados” con el logo de la empresa, o lo que se tercie, abandonando el clásico y sobrio terminal verde de Inicio de Sesión. Por tanto, si es nuestro caso, y queremos que el usuario arranque el terminal y le aparezca el logo de la empresa en vez del clásico inicio de sesión, haremos lo siguiente:

1.- Utilizando el editor de pantallas que mas nos guste (en mi caso, me gusta el CODE400), utilizaremos el fuente de pantalla QDSIGNON que reside dentro de QDDSSRC en la biblioteca QGPL, y haremos una copia de dicho miembro en una biblioteca de trabajo nuestra, con un nombre distinto, como por ejemplo, QINTERSIGN.

2.- Este fichero lo editaremos, teniendo cuidado de no borrar los campos obligatorios y necesarios de la pantalla de inicio de sesión. Una vez visto el resultado, lo compilaremos, dejando el código objeto compilado en una biblioteca que hayamos creado (por ejemplo, SISTEMAS).

3.- Comprobaremos que funciona bien la pantalla, si desde el PDM, ponemos un 5 delante del miembro QINTERSIGN (Visualizar), e introducimos los valores por defecto, con lo que la pantalla se quedaría con una imagen similar a la siguiente:

Fig. 3: Aspecto final de archivo de pantalla QINTERSIGN

4.- Para asignar esta pantalla de inicio de sesión personalizada al subsistema QINTER, de forma que todo terminal que se conecte a él la visualice, ejecutaremos el mandato CHGSBSD SBSD(QINTER) SGNDSPF(SISTEMAS/QINTERSIGN) que hará cambiar la pantalla de inicio de sesión por defecto a la que hemos creado nosotros.

Para ver los cambios, basta con reiniciar el subsistema QINTER y ver que a partir de ahora, todo terminal que se conecte, tendrá esa nueva pantalla de inicio de sesión.

Hasta aquí de momento. Próximamente más, damas y caballeros.

Trabajando con Catálogos Virtuales en AS/400

En el mundo AS/400, hemos tenido una serie de vivencias a lo largo de los mantenimientos de las máquinas, que nos han hecho recopilar una grandísima cantidad de información en soportes de almacenamiento de CDs. Aun recuerdo los 25 CDs de servicios correctivos cumulativos (o PTFs) de cada versión del Sistema Operativo, con la cantidad de horas que se tardaba en cargar todo eso, mas luego todo el tiempo que se tiraba aplicando los susodichos parches o PTFs. O aun hoy, los 19 CDs de los que se compone la versión V5R4M0 del Sistema Operativo, y estamos hablando de un sistema operativo del año pasado…

Pues se acabó el hacer de disk-jockey. Desde la versión del Sistema Operativo V5R1M0, primero para hacer upgrades, y ya desde la versión V5R2M0 y con soporte completo incluso de escritura en la V5R3M0, existe la posibilidad de crear Catálogos Virtuales de Imágenes de CDs.

Que es un Catálogo Virtual de Imagenes?

Un Catálogo Virtual de Imágenes es una herramienta software, que, entre otras cosas, te permite cargar imágenes ISO de los CDs o DVDs de manera sencilla, de tal forma que te habilita crear un “JukeBox” o cargador de CD (como los de los coches), con tantas ISOs quieras que el sistema te leerá bajo petición. Para ello, antes crearás un dispositivo óptico virtual al que podrás asociarles un catálogo de imágenes concreto, y ese catálogo en su interior tendrá tantas ISOs como necesites. También puedes crear multitud de catálogos virtuales y cargarlos según te convenga.

Ya, bueno, pero para que sirve?

Lógicamente, crear un dispositivo virtual y varios catálogos de imágenes te permiten prescindir de los CDs y DVDs para siempre en soporte plástico. Por ejemplo, si necesitas cargar un conjunto cumulativo de PTFs, antes tenías que introducir y sacar CDs de la unidad de CD a medida que el sistema te los pedía, dando lugar a tensas esperas y sobre todo estar pendiente de los mensajes de consola cuando tocaba cambiar de CD para introducir el siguiente en secuencia o aleatoriamente. Ahora, todos esos CDs los puedo subir a los discos del AS/400 como ISOs, y puedo crear un catálogo de PTFs con esas 27 o 50 ISOs, y hacerlo disponible (cargarlo) en un soporte óptico virtual.

De esta forma, cuando quiera aplicar las PTFs, no tengo mas que decirle que las PTFs se encuentran en ese dispositivo virtual (en vez de en el tradicional OPT01 si es un CD, o TAP01 si están en cinta) y el sistema ira leyendo toda la información como le convenga, montando automáticamente las ISOs que necesite, de manera totalmente automática y sin intervención humana.

Además, no es lo mismo leer de un CD que leer directamente del disco ASP del sistema, por lo que la carga de las PTFs se haría con mucha rapidez.

Menuda pasada, no?

Pues si, pero evidentemente, surge un inconveniente: Es necesario espacio en disco para almacenar todas esas ISOs. Si el sistema tiene poco espacio disponible, no podríamos cargar todas las ISOs que nos gustarían, pero en mi experiencia eso no es demasiado problema, ya que en las instalaciones medianas en las que he trabajado, con un cambio de maquina, un sistema que tenia 20 o 30 GB de uso, con los nuevos discos de 300 GB que vienen con la máquina “por defecto”, pues te permite jugar con todo ese excedente de espacio para crear catálogos virtuales variopintos.

A titulo personal, me gusta tener un catálogo de imágenes con las imágenes en ISO de los DVDs del Sistema Operativo (unos 10 GB), de tal forma que si en un futuro quiero instalar una aplicación y necesita un pre-requisito que no he instalado en la instalación inicial del sistema, lo puedo hacer cuando quiera, simplemente por comodidad. Y por otro lado, tener uno o más catálogos de PTFs cumulativas. Más o menos cada 3 meses suelo conectarme a la Web de IBM Fixcentral y me suelo bajar en formato electrónico (es decir, en ISO o BIN, pero que son lo mismo) las últimas PTFs cumulativas que han salido para la release de mi Sistema Operativo. Las subo al iSeries y creo un catálogo con todas esas ISOs, y así, el día que actualice, tendré todo lo necesario para hacerlo desatendidamente y automáticamente. Y siempre guardo los catálogos antiguos por si acaso, habiendo espacio de sobra, no molestan, pero no guardo mas de dos catálogos de PTFs a la vez para que así la ventana de backup de la opción 21 no me suba demasiado.

Bien, y cuales son los pasos a seguir para tener mi catálogo?

Voy a utilizar como ejemplo, el catálogo que me crearé para los DVDs del Sistema Operativo. Lo primero, es tener las ISOs en tu PC, listas para subirlas al iSeries. Yo, las subo al IFS directamente, creando una carpeta llamada /OS y luego dando permisos para  compartirla (todo esto dentro de System i Navigator del iSeries Access for Windows).

Una vez subidas las ISOs, crearemos un dispositivo óptico virtual con el siguiente mandato:

CRTDEVOPT DEVD(OPTVRT01) RSRCNAME(*VRT)

Así que si vamos a ver la pantalla de trabajar con descripción de dispositivos (WRKDEVD), debería aparecernos el dispositivo recién creado.

Este dispositivo será el que gestionará enlazar los catálogos de imágenes, y poder así cargarlos.

Ya que estamos, pondremos On-line el dispositivo con el siguiente mandato:

VRYCFG CFGOBJ(OPTVRT01) CFGTYPE(*DEV) STATUS(*ON)

Ahora, el sistema ya es susceptible de ser leído por el iSeries cuando se lo pidamos.

Fig. 1: Dispositivo OPTVRT01

Una vez creado el dispositivo óptico virtual, procederemos a crear un catálogo de imágenes. Como vamos a crear varios en un futuro, vamos a darle un nombre significativo para saber que ISOs contendrá dicho catálogo, por ejemplo, OSV6R1M0 (porque contendrá el Sistema operativo V6R1M0), y le diremos donde están las ISOs que luego enlazaremos, así que introduciremos el siguiente mandato:

CRTIMGCLG IMGCLG(OSV6R1M0) DIR(‘/OS’)

Con este paso realizado, solo nos falta añadir las imágenes ISO de la carpeta dentro del catálogo. Para ello, tan sencillo como introducir un mandato por ISO a añadir:

ADDIMGCLGE IMGCLG(OSV6R1M0) FROMFILE(‘/OS/B2931_01.ISO’)  TOFILE(*FROMFILE)

Esto añade el primer DVD del SO. Cabe destacar que si no se pone el parámetro TOFILE, es decir, que el parámetro por defecto de TOFILE es *GEN, el sistema crea un nuevo fichero con el mismo tamaño pero su extensión es .ISO01. Esto lo hace para indexarlo en el catálogo, por lo que una vez cargada dicha ISO en el catálogo, nuestro fichero ISO se puede borrar, ya que el sistema utilizará a partir de este momento el que tiene extensión ISO01. De hecho, esto se suele utilizar para pasar de un DVD real a ISO, pero como en nuestro caso, la ISO ya está creada, pues con el TOFILE(*FROMFILE) te evitas crear un fichero adicional.

Con el mandato siguiente, añadiremos el segundo DVD del SO a nuestro catálogo

ADDIMGCLGE IMGCLG(OSV6R1M0) FROMFILE(‘/OS/B2931_02.ISO’)  TOFILE(*FROMFILE)

Y por ultimo, el DVD de programas diversos lo cargaremos así:

ADDIMGCLGE IMGCLG(OSV6R1M0) FROMFILE(‘/OS/F_MULTI_NLV.ISO’)  TOFILE(*FROMFILE)

Si ahora, introducimos el mandato WRKIMGCLGE IMGCLG(OSV6R1M0) podremos apreciar de acuerdo a la siguiente figura que el catálogo esta cargado y las ISOs enlazadas correctamente:

Fig. 2: Trabajar con entradas en el catálogo de imágenes

Como habéis visto en la captura de pantalla, el estado está en No preparado. Esto significa que el catálogo de imágenes no esta asociado a ningún dispositivo óptico virtual. Esto es perfectamente normal, solo que en el momento que queramos utilizar este catálogo para leerlo en el sistema, antes tendremos que cargarlo en nuestro dispositivo óptico virtual llamado OPTVRT01 creado al principio. Para ello, ejecutaremos el siguiente mandato:

LODIMGCLG IMGCLG(OSV6R1M0) DEV(OPTVRT01)

Por último, podéis comprobar que una vez cargado, el dispositivo esta preparado y el primer volumen ISO esta montado, es decir, que es como si hubiéramos metido dentro de la unidad de DVD el primero de los 3 DVDs.

Fig. 3: Catálogo montado y cargado

A partir de este momento, podemos leer el dispositivo OPTVRT01 con la información de todo el Sistema Operativo, a velocidades de disco duro. Con el mandato WRKOPTVOL, vemos según la siguiente figura que el CD ISO introducido en la unidad virtual es el B2931_01.

Fig. 4: Trabajar con volúmenes ópticos

Y todo esto se puede hacer con PTFs, con programas producto, en fin, con lo que se os ocurra. Se acabó estar esclavizado del CD del AS/400!

Instalación de i5/OS V6R1 en un Blade JS12

En artículo de hoy lo dedicaré a explicar como instalar desde cero el Sistema Operativo que corre en los equipos AS/400. Aunque los ejemplos hacen referencia a la oblea JS12, vale cualquier máquina con procesador POWER5 o POWER6, ya que el proceso es siempre el mismo.

A continuación, con todos los elementos disponibles a nuestro servicio, procederemos a realizar la instalación básica del sistema i5/OS (antes llamamdo OS/400), versión 6 Release 1. Para ello, lo primero que hacemos será iniciar la partición desde el portal VIOS y asegurarnos de tener el DVD asignado al JS12, y, por supuesto, el primer DVD de instalación del i5/OS preparado e introducido ( I_BASE_01 ). Y seguiremos los siguientes pasos:

1.- Al iniciar la partición, la debemos iniciar el modo D Manual, para que lea el DVD. Para ello, nos iremos a Propiedades y marcaremos la opción correspondiente. Al de un rato, veremos como lee el DVD esporádicamente y los códigos de referencia pasaran de C1XXYYY a C6XXYYYY, hasta lanzarse la consola de operaciones (una vez introducidos el usuario 11111111 y password 11111111) las figuras siguientes:

i5os01

Fig. 1: Arranque de la partición iSeries

i5os02

Fig. 2: Elección de la característica del idioma

i5os03

Fig. 3: Confirmación de la característica del idioma

2.- En esta figura, elegiremos la opción 1. Instalar Código Interno Bajo Licencia y daremos a Intro.

i5os04

Fig. 4: Instalar Código Interno bajo licencia

3.- A continuación, nos detecta el disco “hdisk3” que ha encontrado como candidato para instalarse. La siguiente opción es pulsar 1 para seleccionarlo y pulsar Intro:

i5os05

Fig. 5: Elección del disco destino del SO

4.- El siguiente paso es elegir la opción 2. Instalar Código Interno Bajo Licencia e Inicializar el Sistema y el sistema formateará el disco y posteriormente instalará el LIC, tal y como muestran las figuras siguientes.

i5os06

Fig. 6: Menú de Instalación del LIC

i5os07

Fig. 7: Confirmar el borrado del disco y la instalación del SO

i5os08

Fig. 8: Formato del Disco

i5os09

Fig. 9: Progreso de instalación del LIC

5.- Una vez terminado, el sistema reiniciará, arrancando en modo A Manual, y al cabo de unos minutos, nos aparecerá una advertencia, la cual aceptaremos pulsando PF10:

i5os10

Fig. 10: Nueva configuración de discos

6.- Una vez aceptada, llegaremos al menú DST. En este menú, directamente elegiremos la segunda opción, 2. Instalar el Sistema Operativo y pulsaremos Intro.

i5os11

Fig. 11: Menú inicial IPL

7.- En esta pantalla, seleccionaremos el medio de instalación, que, en nuestro caso, será desde 2. Medio óptico, y daremos a Intro, para luego volver a confirmar la instalación dando otra vez a Intro.

i5os12

Fig. 12: Elección del medio de instalación

i5os13

Fig. 13: Característica del Idioma de instalación

9.- En estos momentos, comenzará la instalación del sistema operativo. Si no hemos cambiado el CD I_BASE_01 por el DVD B2931_01, nos aparecerá una pantalla de advertencia, pidiendo un cambio en el CD. Una vez hecho el cambio, proseguirá la instalación.

10.- Antes de comenzar la copia de ficheros, aparecerá la siguiente panatlla, la cual rellenaremos con valores por omisión e introduciremos la fecha y la hora.

i5os14

Fig. 14: Elección de instalación y opciones

i5os15

Fig. 15: Progreso de instalación

11.- Durante el proceso, nos pedirá entrar dentro del sistema, por lo que utilizaremos el usuario QSECOFR (sin contraseña). Una vez dentro, nos pedirá introducir de nuevo datos de fecha, y características de arranque de transcriptores, etc. Dejaremos  los valores por defecto y pulsaremos Intro.

i5os16

Fig. 16: Inicio de Sesión

i5os17

Fig. 17: Opciones IPL

12.- Como hemos dejado la opción por defecto Establecer Opciones Principales Sistema en Y, la siguiente figura nos preguntará que opciones queremos establecer. Dejaremos las opciones por defecto.

i5os18

Fig. 18: Establecer Opciones Principales del Sistema

13.- La instalación continuará hasta que al final, nos aparezca por fin, la pantalla de Inicio de Sesión. En ella, nos conectaremos como usuario QSECOFR y password QSECOFR.

i5os19

Fig. 19: Progreso de la Instalación

14.- Evidentemente, la contraseña QSECOFR es la de por defecto, así que el sistema considerará que ha caducado, y por lo tanto, se debe cambiar. Por tanto, elegiremos nueva contraseña. Una vez hecho esto, llegaremos al menú para aceptar los acuerdos de licencia. Y, una vez elegido el acuerdo, y dado al PF15 (aceptar todo), llegaremos al menú principal i5/OS.

i5os20

Fig. 20: Cambio de contraseña QSECOFR

i5os22

Fig. 21: Trabajar con Acuerdos de Software

i5os23

Fig. 22: Menú Principal i5/OS

En este punto, tenemos un sistema que arranca, pero sin ningún producto instalado. Así que en otro artículo, explicaré como se instalan los productos adicionales.

Instalación de un Blade JS12 en un BladeCenter H

Inauguro sección!! En mi experiencia, me ha tocado tratar con muchas arquitecturas, pero rara vez he tenido tiempo para documentarlas y tratar de arrojar algo de luz sobre otras arquitecturas en las que he trabajado muchos años. Así que, para tratar de remediar esto, voy a empezar a escribir mis vivencias con un mainframe venido a menos, el AS/400 (ahora conocido como IBM System i).

Y, que mejor forma de inaugurar la sección, escribiendo un artículo sobre como se instala un nuevísimo iSeries, modelo “Blade”?

Así pues, alla vamos:

Yo siempre he sido de mirar máquinas y decir “ande o no ande, caballo grande”, así que cuando me encuentro cara a cara con este trasto que es como una carpetita de grande, empiezo a desconfiar.

Y no es para menos: Esta máquina se va a pinchar en un BladeCenter H, con una cabina de discos DS4700, fiber-channel por supuesto, a 4 Gbps, y sobradísima para el cliente, pero, claro, el cliente quiere disponer de copia de seguridad tradicional, nada de hacer SAVFs y librerías virtuales, ni nada, el quiere seguir haciendo un SAVE opción 21 en una cinta LTO. Así que, la primera en la frente: La UNICA unidad de cinta certificada para un JS12 es una IBM TS2340, unidad “tabletop” LTO4 con un conector SAS la mar de majo, pero incompatible con el sistema fiber-channel (o al menos, haciendo carísima la convivencia entre los dos, porque habría que añadir módulos de expansión en el BladeCenter adicionales, lo que hace que la solución suba muchisimo de precio).

Solución: Sustitución de la cabina DS4700 por una DS3200, con conectividad SAS, muchisimo mas económica, y añadiendo controladoras SAS al Blade, haciendo que la cabina pueda ser vista por la JS12 y pudiendo conectar la unidad de cinta a la misma red SAS. Bueno, podría haber sido peor, la DS3200 no es tan mala, y para las cargas que necesita el cliente, pues va estupendamente.

Una vez modificadas las configuraciones oportunas, me encuentro frente a frente con la máquina. Así que empiezo:

La máquina dispone de 4 GB de RAM de base, 1 procesador POWER6 y con respecto a las comunicaciones, dispone de dos tarjetas SAS de 3Gbps para almacenamiento y 2 tarjetas de red de GbE. También dispone de dos discos de 73 GB internos, con configuración en mirror (que luego habilitaremos), para albergar el sistema operativo VIOS (Virtual I/O Server).

Este sistema es necesario, de lo contrario, no se podría realizar ninguna instalación del OS/400 (perdón, queria decir i5/OS). Segunda en la frente, el sistema tiene un supervisor basado en AIX por encima, que, aunque muy flexible si se van a crear particiones o LPARes, para nuestro caso que solo irá una instancia i5/OS es un poco tontería, pero como la JS12 es obligatorio ponerlo, pues… a instalar el VIOS.

Instalación VIOS

Una vez cargado el DVD en el Blade, y asignado a la oblea JS12, éste arrancará un sistema VIOS basado en AIX. Los pasos a seguir son los siguientes:

js1201

Fig. 1: Arranque Oblea JS12

1.- Entraremos en el menú 1 = SMS Menu, pulsando un 1, y una vez dentro, elegiremos 5. Select Boot Options. Allí, elegiremos 1. Select Install/Boot Device3 CD/DVD, con lo que a continuación, elegiremos 6 USB y confirmaremos con 1 USB CDROM. Nos preguntará el modo de arranque y elegiremos 2 Normal Mode y 1 Yes para salir de todas las opciones del SMS. Por tanto, reiniciará y tardará unos 5 minutos en cargar el software de nuevo.

2.- Nos aparecerá una pantalla IBM llamada STARTING SOFTWARE (Fig. 2) y al de un rato, deberemos elegir la consola pulsando un 2 y dando a Enter. Lo siguiente es elegir el idioma, por lo que daremos a la opción adecuada y daremos a Enter.

js1202

Fig. 2: Arrancando Software

3.- En el menú Welcome to BOS, elegiremos Change/Show installation Settings and Install, y pulsaremos un 2 para verificar que los discos elegidos son los correctos. Los discos internos deberian ser hdisk0, y hdisk1, y si hay LUNs mapeadas, deberian ser hdisk2, hdisk3, etc. Si la elección es hdisk0, esta correcto, por lo que confirmaremos la instalación con la opción 0. Esto hará comenzar la instalación del VIOS.

4.- Una vez finalizada la instalación, el sistema reiniciará y al cabo de un rato, aparecerá en pantalla el prompt Login: el cual deberemos entrar con el usuario padmin (sin contraseña). Por tanto, la siguiente elección será la de introducir la contraseña. Una vez realizado ese paso, teclear license –accept para aceptar la licencia VIOS.

5.- Lo siguiente es configurar el mirroring de los discos, con el fin de que la partición VIOS este segura en caso de rotura de uno de los discos. Por tanto, y teniendo en cuenta que el disco hdisk1 es el otro disco dentro de la oblea, los comandos a introducir son los siguientes:

chsp –add hdisk1

mirrorios –f –defer hdisk1

(la opción defer es para hacerlo al final, por lo que es mejor reiniciar la partición VIOS).

6.- Para comprobar que se ha mirrorizado bien, introduciremos los comandos siguientes:

lsvg –lv rootvg : Deberían aparecer 2 PVs en vez de 1.

bootlist –mode normal –ls : Deberían aparecer 2 discos, el hdisk0 y hdisk1

7.- Para terminar con la consola, configuraremos las comunicaciones. Para ello, comprobaremos que disponemos de dos tarjetas de red, la ent0 y la ent1. Para comprobarlo, realizaremos un lsdev | grep hea y nos deberían aparecer la dos tarjetas. Por tanto, para configurar la tarjeta ent0, realizaremos el siguiente comando:

mktcpip –hostname VIOS –inetaddr 10.1.1.20 –interface en0 –netmask 255.255.255.0 –gateway 10.1.1.100 –nsrvaddr 10.1.1.100 –nsrvdomain dominio.com –start

Para comprobar que todo funciona bien, haciendo un lstcpip –stored deberíamos comprobar que los datos introducidos están correctos. Y, realizando un ping desde una máquina externa a nuestra IP, deberíamos llegar a ella. Y, por último, veremos si nos podemos conectar con navegador, para ello en el navegador de una máquina externa, introduciremos la URL http://10.1.1.20. Si vemos una imagen como la de la figura siguiente, todo estará perfecto.

js1203

Fig. 3: Interfaz de Administración VIOS


Instalación de Parches VIOS

Conociendo un problema con la bandeja USB de CD-ROM, que al parecer, dicha bandeja se “desconecta” cuando estas instalando el i5/OS, se ha instalado un Fixpack que previene el problema. Los pasos de instalación del Fixpack, han sido los siguientes:

1.- Una vez descargados los 4 CDs del Fixpack desde el Fixcentral de IBM (http://www-933.ibm.com/support/fixcentral/) tendremos a nuestra disposición el fixpack 21 del VIOS. Antes de nada, ejecutaremos el comando ioslevel para comprobar que versión tenemos. La versión es la 2.0.0.

2.- Introduciremos el primero de los 4 CDs y ejecutaremos los comandos siguientes:

updateios –commit (para aceptar los updates que no se hubieran aplicado)

updateios –accept –install –dev /dev/cd0 (esto instalará el fixpack)

Una vez finalizado, realizar un ioslevel para verificar que ahora es el V2.1.1.10 FP-21.

Por tanto, realizar un shutdown –restart para reiniciar el VIOS. Con esto, finaliza el uso de la consola VIOS, a partir de aquí se configura todo por navegador web.

Configuración Ethernet Virtual

Para que nuestro futuro iSeries se comunique con el exterior, es necesario habilitarle una tarjeta de red para su uso. Esto se consigue creando un Ethernet Virtual, que haga de puente usando nuestro Ethernet real. Para ello, seguiremos los siguientes pasos:

1.- Entraremos en la web del VIOS, con el usuario padmin y el password correspondiente.

2.- En el menú Ver/Modificar Adaptadores Ethernet de Sistema Principal, seleccionaremos el primer puerto ethernet (su hardware acaba en –P1-T6) y pulsaremos sobre Propiedades. Marcaremos la casilla Permitir puenteado de ethernet virtual y daremos a OK.

js1204

Fig. 4: Modificar Adaptador Virtual

3.- En el menú Ver/Modificar Ethernet Virtual, elegiremos sobre Puente de Ethernet Virtual y seleccionando Ethernet Virtual 1, cambiaremos su Adaptador Físico a la tarjeta modificada en el punto 2. Y pulsaremos sobre Aplicar.

js1205

Fig. 5:  Permitir Puenteado Ethernet Virtual

js1206

Fig. 6: Elección Ethernet Virtual

Por tanto, llegados a este punto, disponemos ya de una tarjeta de Gigabit Ethernet para el uso del futuro iSeries.

Creación de la Partición iSeries

Para crear un equipo iSeries, primero debemos crear una partición en la que funcionará el equipo. De hecho, el VIOS ya es una partición, la número 1. La partición que tendrá el iSeries, por tanto, es la numero 2. A esta partición se le asignarán recursos (Ethernet, disco, memoria, CPU, etc) y una vez asignada, se procederá a la instalación del iSeries.

js1207

Fig. 7: Partición VIOS en ejecución

Para crear la partición, pulsaremos el botón Crear Partición… lo que nos llevará a un asistente, el cual seguiremos sus pasos por las siguientes figuras:

js1208

Fig. 8: Nombre y Entorno de la partición

js1209

Fig. 9: Tamaño de memoria asignada

js1210

Fig. 10: Número de procesadores asignados

js1211

Fig. 11: Adaptadores de red asignados

js1212

Fig. 12: Asignación de almacenamiento virtual

js1213

Fig. 13: Elección LUN de la DS3200

Lógicamente, hemos creado una LUN para que esté disponible en el iSeries, que está alojada en la DS3200, y, evidéntemente, el zoning SAS está también definido para que esta oblea, pueda ver tanto la cinta LTO4 SAS como la cabina DS3200.

js1214

Fig. 14: Elección de la cinta LTO4 SAS

js1215

Fig. 15: Resumen de la partición que se va a crear

Una vez dado a Finalizar, la partición iSeries se creará sin problemas.

Instalación Consola de Operaciones

Para poder tener consola maestra en el iSeries, es necesario instalar la Consola de Operaciones en un equipo Windows, de modo que procederemos a instalar el IBM System i Access con esta opción.

Este programa sustituye a los clásicos terminales twinaxiales Infowindow que proveían la consola maestra DSP01. A partir de ahora, la DSP01 será una pantalla emulada del sistema. Por tanto, para realizar la instalación, y una vez instalado el IBM System i Access con la opción “Instalación Completa”, seguiremos los siguientes pasos:

1.- Abriremos el programa y pincharemos sobre el icono Nueva Conexión. Esto hará que nos salga un asistente de creación de la conexión de consola, tal y como muestra la figura siguiente. Así que pulsaremos sobre Siguiente.

js1216

Fig. 16: Asistente de Configuración Consola de Operaciones

2.- La siguiente pantalla muestra el tipo de conexión que queremos habilitar. Haremos clic en Consola local en una red (LAN) y luego en Siguiente.

js1217

Fig. 17: Elección del tipo de conexión

3.- Lo siguiente es elegir el nombre de la conexión. Elegiremos el nombre CONSOLA y a continuación, daremos una IP que no este en uso en la red, IP que virtualizará la propia consola.

js1218

Fig. 18: Nombre de la conexión y dirección IP asignada

js1219

Fig. 19: Datos IP de la conexión

3.- En esta figura, introduciremos la dirección IP y mascara de subred relativas a la conexión, así como el número de serie de la máquina JS12 y el número de partición al que se conectara (como el iSeries tiene la 2, pondremos un 2 como Partición Destino) .

js1220

Fig. 20: ID de dispositivo de herramientas de Servicio

4.- Lo siguiente es elegir el ID de dispositivo de herramientas de servicio. En este caso, seleccionaremos QCONSOLE por defecto. Con este paso, se finalizará el asistente.

js1221

Fig. 21: Finalización del asistente

js1222

Fig. 22: Conexión creada

5.- Ahora, pulsaremos sobre Conectar, para dejar a la consola a la espera de una conexión. La primera vez que conectemos, nos pedirá usuario y password, que, será en ambos casos 11111111 (8 unos).

js1223

Fig. 23: Esperando la conexión por parte del iSeries

Pues hasta aqui el artículo. En estos momentos, con introducir el CD del LIC-RSG, y arrancando en modo D Manual, procederíamos a la instalación del Sistema Operativo, pero eso lo dejo para un siguiente articulo.