S/370

Emulador Hercules

Herramientas de usuario

Herramientas del sitio


mvs:cookbook

Recetario (Cookbook)

JCL

  • Dejar el resultado en Held Out: Asignar el trabajo a la cola de salida X en la linea de JOB del JCL. Se indica con el parámetro MSGCLASS=X. Ejemplo:
        //EJEMPLO JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=HERC01
  • Notificar el resultado en pantalla: Añadir el parámetro NOTIFY=usuario en la definición del JOB. Ejemplo:
        //EJEMPLO JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=HERC01
  • Buscar en un PROCLIB local: Antes del primer EXEC se añade la línea siguiente (se recomienda a continuación de la línea JOB):
    //JOBPROC  DD DSN=HERC01.PROCLIB,DISP=SHR,SYSPROC=YES

    Donde HERC01.PROCLIB, que se indica a modo de ejemplo, es el PDS que contiene los procedimientos realizados por el usuario. El parámetro SYSPROC (en este caso puede omitirse, ya que por defecto vale YES, y solo es necesario ponerlo cuando es NO) indica que si no encuentra el PROCLIB en el PDS indicado continúe la búsqueda por los PDS del sistema, como hace normalmente.

Alta de usuario

Añadir la línea:

usuario ADMIN pass Y

a SYS1.SECURE.CNTL(USERS) (Nota: Está en orden alfabético).

ADMIN indica un usuario con acceso a todo menos RAKF, USER un usuario ordinario y RAKFADM un adminisrador de RAKF.

Actualizar las listas de RAKF ejecutando en la consola el comando:

    S RAKFUSER

Lanzar el JCL, SYS2.JCLLIB(ADDUSER) con los valores adecuados.

Cambiar el password

Al entrar en el sistema teclear (en lugar del password):

pass-actual/pass-nuevo

Al teclear no se visualiza ningún carácter

Ejemplo: Cambiar pass4u por secreto

PASS4U/SECRETO

Baja de usuario

En TSO (prompt READY) se escriben los comandos escritos en rojo:

 READY
PROFILE NOPREFIX
 READY
ALLOC F(SYSUADS) DA('SYS1.UADS')
 READY
ALLOC F(SYSLBC) DA('SYS1.BRODCAST')
 READY
ACCOUNT
 ACCOUNT
SYNC
 BROADCAST DATA SET INITIALIZED AND SYNCHRONIZED
DEL (usuario)
 DELETED
END
 READY
FREE F(SYSLBC)
 READY
FREE F(SYSUADS)
 READY

Editar SYS1.SECURE.CNTL(USERS) y eliminar la(s) línea(s) correspondientes al usuario:

usuario ADMIN pass Y

Actualizar las listas de RAKF ejecutando en la consola el comando:

S RAKFUSER

Ahora se pueden borrar todos los dataset del usuario, si procede.

Reiniciar una sesión interrumpida

Añadir la palabra RECON a continuación del nombre de usuario en la pantalla de conexión (Login)

Ejemplo: Conectar de nuevo al usuario HERC01

HERC01 RECON

Detener el sistema desde la consola hercules

Lanzar el script shutdown, con la orden:

script scripts/shutdown

Desactivar RAKF

Se lanzan los trabajos RAKF.SAMPLIB(VSAMSRAC) y RAKF.SAMPLIB(VTOCSRAC) para limpiar los indicadores de RACF. Se Añade el parámetro TYPRUN=HOLD a la tarjeta (línea) JOB para que al hacer el SUB el trabajo quede suspendido (HOLD).

Editar SYS1.PARMLIB(RAKFINIT) y cambiar de la primera línea de YES a NO.

Salir de la sesión y desde la consola dar las ordenes (poner la barra / delante si se trabaja desde la consola integrada):

$A 'VSAMSRAC'
$A 'VTOCSRAC'

En ocasiones VTOCSRAC da algunos avisos relacionados con nombres largos de datasets que pueden ser ignorados tranquilamente.

Reiniciar el sistema (o hacer un Re-IPL). En este punto RAKF está desarmado.

Reactivar RAKF

Lanzar los trabajos RAKF.SAMPLIB(VSAMSRAC) y RAKF.SAMPLIB(VTOCSRAC) para reactivar los indicadores de RACF. Añadir el parámetro TYPRUN=HOLD a la tarjeta (línea) JOB para que al hacer el SUB el trabajo quede suspendido (HOLD), y lo más importante es cambiar setracf a ON en las líneas 30 y 39 respectivamente.

Editar SYS1.PARMLIB(RAKFINIT) y cambiar de la primera línea de NO a YES.

Salir de la sesión y desde la consola dar la orden (poner la barra / delante si se trabaja desde la consola integrada):

$A 'VSAMSRAC'
$A 'VTOCSRAC'

En ocasiones VTOCSRAC da algunos avisos relacionados con nombres largos de datasets que pueden ser ignorados tranquilamente.

Reiniciar el sistema (o hacer un Re-IPL). En este punto RAKF está rearmado.

Format JES2 (reinicializa contadores JobID)

Si no se hizo nunca, en SYS1.PARMLIB, crear un miembro COMMND03, copiando el COMMND00 y añadiendo el contenido señalado en rojo.

COM='S CMD1'
COM='S BSPPILOT'
COM='S JES2,,,PARM='FORMAT,NOREQ''

Este miembro se puede conservar para repetir el proceso en el futuro.

Editar el archivo de script ./scripts/SCR101A_default para que el sistema se inicie con el COMMND03:

#**********************************************************************
#***                                                                ***
#*** Script:  SCR101A_default                                       ***
#***                                                                ***
#*** Purpose: OS/VS2-MVS 3.8j IPL for unattended operations         ***
#***          Issue empty reply to message IEA101A (default)        ***
#***                                                                ***
#*** Updated: 2014/12/22                                            ***
#***                                                                ***
#**********************************************************************
#
# delay reply to message IEA101A
#
pause ${IPL_PAUSE:=4}
/R 00,CMD=03

(Re)Iniciar el sistema.

Una vez iniciado, detener el sistema desde la consola HERCULES con el comando:

script scripts/shutdown

Reponer el archivo ./scripts/SCR101A_default a sus valores originales, es decir eliminando lo que está en rojo en el listado anterior (ojo, conservar la barra / inicial).

Añadir un disco DASD

En primer lugar es necesario disponer de la información necesaria:

  • El modelo de disco, que determina su geometría y su capacidad, a seleccionar en la Tabla I que relaciona los discos (DASD) soportados por Hercules y definidos en el Tk4-.
  • El nombre de volumen con un máximo de 6 caracteres.
  • El puerto «físico» al que se conecta, para indicarlo en el archivo de configuración de Hercules. El puerto debe estar libre y corresponder al modelo de disco seleccionado, que se puede consultar en la Tabla II.

Se utiliza el siguiente script:

create-dasd.sh
#!/bin/bash
 
if [ "$#" -ne 3 ]
then
	echo "Usage is "
	echo -e "\n\t`basename $0` <model> <name> <port>\n"
	exit 1
fi
 
echo $2 $1 \* >temp.plf
rm -f $2.$3
dasdload -bz2 temp.plf $2.$3 2
rm temp.plf
 
exit 0

Como ejemplo se creará y activará un disco 3390 llamado USER00 y conectado al puerto 199.

Primero se crea invocando el script con los parámetros siguientes:

./create-dasd.sh 3390 user00 199

NOTA: Para nombrar el archivo se ha seguido la nomenclatura que usa el Tk4- consistente en poner el nombre de la etiqueta de volumen, un punto y el puerto al que se asocia.

Instalación y activación:

Se copia el archivo creado al directorio ./dasd.

Con el sistema detenido se edita el archivo ./conf/tk4-.cnf y se añaden estas lineas hacia el final, entre los «Source DASD» y los «TK4- updates»:

#
# User & Data DASD
#
INCLUDE conf/user_dasd.cnf

y se copia en ./conf/ el archivo user_dasd.cnf:

user_dasd.cnf
#
# User & Data DASD
# 
0199 3390 dasd/user00.199
#19A 3390 dasd/user0a.19a
#19B 3390 dasd/user0b.19b
#19C 3390 dasd/user0c.19c
#19D 3390 dasd/user0d.19d
#19E 3390 dasd/user0e.19e
#19F 3390 dasd/user0f.19f
#299 3390 dasd/data00.299
#29A 3390 dasd/data0a.29a
#29B 3390 dasd/data0b.29b
#29C 3390 dasd/data0c.29c
#29D 3390 dasd/data0d.29d
#29E 3390 dasd/data0e.29e
#29F 3390 dasd/data0f.29f

Los discos USER0A-USER0F están comentados para uso futuro.

Se inicia el sistema y al DataSet SYS1.PARMLIB(VATLST00) se le añade esta línea al final:

USER00,1,1,3390    ,N                 User Space 00

En el próximo reinicio el Volumen estará disponible.

Añadir un CMDPROC

Editar SYS1.CMDPROC(USRLOGON) y en la linea de ALLOC FILE(SYSPROC) se añade el dataset deseado.

En el siguiente logon estará disponible.

Añadir un PROCLIB

Editar SYS1.PROCLIB(JES2) y en PROC00 se añade(n) el/los DD deseados.

Al próximo reinicio el/los PROCLIBs estarán incluidos.

Script para crear el entorno de un usuario

El script original para crear el entorno de un usuario es SYS2.PROCLIB(ADDUSER), este procedimiento se invoca por SYS2.JCLLIB(ADDUSER):

//ADDUSER PROC HLQ=MISSING,UTYPE= USER(P) or SYSP(P)
//CLEANUP EXEC PGM=IEFBR14
//ASM      DD  DISP=(MOD,DELETE),DSN=&HLQ..TEST.ASM,
//             UNIT=TSO,SPACE=(TRK,(0))
//CMDPROC  DD  DISP=(MOD,DELETE),DSN=&HLQ..CMDPROC,
//             UNIT=TSO,SPACE=(TRK,(0))
//CNTL     DD  DISP=(MOD,DELETE),DSN=&HLQ..TEST.CNTL,
//             UNIT=TSO,SPACE=(TRK,(0))
//LOADLIB  DD  DISP=(MOD,DELETE),DSN=&HLQ..TEST.LOADLIB,
//             UNIT=TSO,SPACE=(TRK,(0))
//BLDCRD1 EXEC PGM=IEUASM,
//             PARM='NOLIST,TERM,DECK,NOLOAD,NOOBJ,SYSPARM(&HLQ)'
//SYSUT1   DD  UNIT=VIO,SPACE=(CYL,(1,1))
//SYSUT2   DD  UNIT=VIO,SPACE=(CYL,(1,1))
//SYSUT3   DD  UNIT=VIO,SPACE=(CYL,(1,1))
//SYSTERM  DD  SYSOUT=*
//SYSPUNCH DD  DISP=(,PASS),
//             UNIT=WORK,
//             SPACE=(TRK,(1,1)),
//             DCB=SYS1.OBJPDS01
//SYSIN    DD  DISP=SHR,DSN=SYS2.SYSINLIB(DEFALIAS)
//BLDCRD2 EXEC PGM=IEUASM,
//             PARM='NOLIST,TERM,DECK,NOLOAD,NOOBJ,SYSPARM(&HLQ)'
//SYSUT1   DD  UNIT=VIO,SPACE=(CYL,(1,1))
//SYSUT2   DD  UNIT=VIO,SPACE=(CYL,(1,1))
//SYSUT3   DD  UNIT=VIO,SPACE=(CYL,(1,1))
//SYSTERM  DD  SYSOUT=*
//SYSPUNCH DD  DISP=(,PASS),UNIT=WORK,SPACE=(TRK,(1,1)),
//             DCB=SYS1.OBJPDS01
//SYSIN    DD  DISP=SHR,DSN=SYS2.SYSINLIB(ADD&UTYPE)
//ALIAS   EXEC PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  DISP=(OLD,DELETE),DSN=*.BLDCRD1.SYSPUNCH
//ADDUSER EXEC PGM=IKJEFT01
//SYSUADS  DD  DISP=SHR,DSN=SYS1.UADS
//SYSLBC   DD  DISP=SHR,DSN=SYS1.BRODCAST
//SYSTSPRT DD  SYSOUT=*
//SYSTSIN  DD  DISP=(OLD,DELETE),DSN=*.BLDCRD2.SYSPUNCH
//ALLOC   EXEC PGM=IEFBR14
//CMDPROC  DD  DISP=(,CATLG),DSN=&HLQ..CMDPROC,
//             UNIT=TSO,
//             SPACE=(CYL,(1,1,20)),
//             DCB=SYS1.MACLIB
//ASM      DD  DISP=(,CATLG),DSN=&HLQ..TEST.ASM,
//             UNIT=TSO,
//             SPACE=(CYL,(1,1,20)),
//             DCB=SYS1.MACLIB
//CNTL     DD  DISP=(,CATLG),DSN=&HLQ..TEST.CNTL,
//             UNIT=TSO,
//             SPACE=(CYL,(1,1,20)),
//             DCB=SYS1.MACLIB
//LOADLIB  DD  DISP=(,CATLG),DSN=&HLQ..TEST.LOADLIB,
//             UNIT=TSO,
//             SPACE=(CYL,(1,1,20)),
//             DCB=SYS1.LINKLIB

Este código crea los dataset siguientes:

  • usuario.CMDPROC
  • usuario.TEST.ASM
  • usuario.TEST.CNTL
  • usuario.TEST.LOADLIB

El cambio más importante se recomienda es sustituir TEST.ASM por TEST.SRC para guardar todos los archivos de código fuente.

Añadir más terminales

TK4- viene con 7 terminales de usuario locales activos a pantalla completa (aparte de las consolas), cuyas direcciones son '00C0' a '00C6', dichos terminales están accesibles (por defecto) a través del puerto 3270.

Para añadir más terminales, hay que indicarlo en tres puntos, MVS, VTAM y Hercules.

Inidicarselo a MVS es complicado, ya que implica realizar un IOGEN. Sin embargo, por defecto ya vienen definidos terminales (aparte de las consolas) en los puertos '00C0' a '00C6', '01C0' a '01C6' y '02C0' a '02C6'. También vienen en '03C0' a '03C6' aunque tienen otros usos (TCAM) y '00B0' a '00B6' que no he explorado. De todas formas con los primeros se pueden incluir hasta 21 terminales. En los puertos '0xC7' se definen impresoras. En caso de no desear una ingente cantidad de terminales, no es necesario hacer un IOGEN.

En cuanto a VTAM, incorpora los terminales de '00C0' a '00C6' y la impresora en '00C7', en el fichero SYS1.VTAMLST(L3274). Basta editarlo y añadir al final más líneas como las que ya incorpora, actualizando las direcciones, por ejemplo:

CUU1C0   LOCAL TERM=3277,CUADDR=1C0,ISTATUS=ACTIVE,                    +
               LOGTAB=ETHLOGON,LOGAPPL=NETSOL,                         +
               FEATUR2=(MODEL2,PFK)

Una vez editado también hay que borrar el archivo SYS1.VTAMOBJ(L3274) para que se vuelva a generar. En el próximo reinicio estarán disponibles los nuevos terminales.

Por último, informar a hercules de la existencia de los terminales es muy sencillo, basta editar la configuración conf/tk4-.cnf y añadir en la sección local 3270 devices (VTAM) los terminales, como por ejemplo:

01C0 3270
Para terminar basta reiniciar el sistema y ya se dispondrá de los nuevos terminales.

Parar MF1

Para parar momentaneamente MF1 se ejecuta en la consola (no olvidar poner / en caso de utilizar la consola integrada):

P MF1

Para que no arranque automaticamente al inicio del sistema, la solución consiste en editar SYS1.PARMLIB(STARTSTD) y comentar (poner un * al principio) la línea:

* CMD S MF1.MF1

Si estando parado es necesario iniciarlo, entonces en la consola (recordar / si se usa la consola integrada) se escribe:

S MF1
© 2021 por jCæsar

Herramientas de la página