Archivos de February, 2008

Montando un equipo Hercules y z/OS para emulación de un entorno real (y III)

En el anterior artículo, hemos explicado cómo se arranca un PC con Hercules y cómo hemos conseguido una sesión TSO en nuestro emulador de terminal 3270 y hemos establecido una sesión TSO no-SNA con el hercules, bajo una pila TCP/IP proporcionada por el propio Hercules pero que emula un terminal 3278 conectada a una Unidad de Control IBM 3174.

Es decir, que ni tenemos red real, ni SNA, ni TCP/IP, ni nada. Por lo que un acceso de otro PC de la LAN a nuestro mainframe es imposible. De hecho, si desde otro PC hacemos un Telnet 3270 a la IP de nuestro equipo que corre Hercules, se establecería otra sesión TSO, pero del pool de terminales de Hercules que esté emulando una red real, y cogería la dirección 0702, es decir, una sesión VTAM local no-SNA. Pero… ¿Que hacemos para que el z/OS se comunique directamente por TCP/IP y así conseguir que se pueda conectar desde cualquier PC a un DB2 por un puerto?

Lo que hay que hacer es crear una tarjeta de red en el Hercules, para que el z/OS crea que tiene una tarjeta de red real (OSA) por la que puede correr tráfico TCP/IP y por el cual el CICS, DB2, y hasta las propias sesiones TSO puedan comunicarse.

Para definir un enlace de este tipo, primero debemos saber como funciona: Bajo GNU/Linux, se utiliza un dispositivo virtual TUN/TAP, ya que hercules no funciona con dispositivos de red reales. Para ello, se crea un enlace CTC virtual que comunicaría el Hercules con la pila TCP/IP de GNU/Linux. Recordemos que Hercules ya hace uso del TCP/IP, pero solo para emular dispositivos de terminales VTAM locales no-SNA. El grafico siguiente muestra la configuración que se desea realizar:

        +--------------------------------+
        |     GNU/Linux Debian           |
        |                                |
        +-------------+                  |
        |  Hercules   |                  +-------------+
        |-------------|                  |    eth0     |
        |  z/OS 1.6   |      TCP/IP ------------------> Red LAN
        |   TCP/IP    |                  |192.168.101.7|
        |-------------|         |        +-------------+
        |    CTCA     |         |        |
        |192.168.101.8|         |        |
        +------|------+     10.0.0.2     |
        |  /dev/tun           tun0       |
        |      |                |        |
        |      +----------------+        |
        |       Virtual CTC link         |
        |                                |
        +--------------------------------+

Usando el sistema TUN/TAP, podemos crear un enlace de red virtual que luego podremos conectarlo a la tarjeta de red real. Por un lado del TUN, el z/OS verá la dirección IP 192.168.101.8, que es la que utilizaremos para conectarnos desde el exterior y a la que daremos al z/OS para que todo tráfico que vaya a esa IP, sea respondida por z/OS. En el otro lado del enlace CTC, tendremos una dirección intermedia ficticia con la IP 10.0.0.2 que es el otro lado del dispositivo TUN, y este sistema enlaza ambas direcciones.

Luego, se le definiría en Linux una ruta desde la 10.0.0.2 a la 192.168.101.7 que es la IP real de nuestra máquina GNU/Linux y la cual tiene el dispositivo eth0, que harí­a el enrutado. Es decir, cuando todo esté configurado, si accedemos a 192.168.101.8 desde cualquier punto de la red, en realidad accederemos a la 192.168.101.7 y luego nos enrutará directamente al Hercules, con lo que tendríamos una conexión TCP/IP directa con el z/OS.

Sin más, definiremos en enlace en hercules añadiendo la siguiente linea en el fichero de configuración hercules.cnf:

0E20.2 CTCI 192.168.101.8 10.0.0.2

Se deben definir dos direcciones: Una para la transmisión y otra para la recepción, de ahí­ el 0E20.2, porque las direcciones IODEVICEs correspondientes serán 0E20 y 0E21. La razón por la que hemos elegido estas direcciones, es porque en el IODF del z/OS hay definidos esos dispositivos del tipo 3088 que se utilizan para enlaces CTCI y/o OSA, como he explicado en la pasada entrega y que está documentado en las instrucciones del AD/CD.

Los siguientes dos parámetros nos definirán las direcciones IP de los extremos del TUN/TAP: 192.168.101.8, que es la dirección de red que verá el z/OS y que hemos obtenido del administrador de red, y la 10.0.0.2, una dirección interna inventada que verá GNU/Linux y por la cual el driver TUN/TAP poseerá.

Con esto, la definición para el fichero de configuración de Hercules está realizada.

Creación del enlace TUN/TAP en GNU/Linux

Si no encontramos nada en /dev/net/tun, significa que el sistema TUN/TAP no está instalado o configurado. Si tenemos un kernel mayor que 2.4, el sistema tun/tap viene con el kernel, pero si no, habrá que recompilarlo con esa opción habilitada.

Los siguientes comandos (como root) crearán un dispositivo TUN:

mkdir /dev/net
mknod /dev/net/tun c 10 200
chgrp root /dev/net/tun
chmod g+w /dev/net/tun
chmod o-r /dev/net/tun

Luego, editar el fichero /etc/modules.conf añadiendo la siguiente lí­nea:

alias char-major-10-200 tun

Esto hará que el módulo se cargue cada vez que Hercules reclame la apertura de ese enlace. Esto se hace mediante a ejecución de hercules del fichero /usr/local/bin/hercifc quien es quien controla el enlace virtual. Para ello también deberemos configurar este fichero con los permisos adecuados, en nuestro caso con los comandos siguientes:

chgrp root /usr/local/bin/hercifc
chmod 4750 /usr/local/bin/hercifc

Como se deberá usar el IP-Forwarding para el enrutado entre el disposituvo TUN y la red real, ejecutando el siguiente comando lo habilitará:

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/tun0/proxy_arp

El siguiente comando habilita el forwarding IP de la tarjeta de red virtual a la real:

echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

Y, por último, definiremos una ruta en GNU/Linux para que sepa que todo lo que sea de 192.168.1.8 se vaya directamente a nuestro recién creado dispositivo TUN:

route add 192.168.101.8 dev tun0

Enrutado en los PCs Clientes

Este paso es opcional, pero no está de más ejecutarlo en todo PC de la red el cual queramos que entre en la máquina hercules, pero por el enlace CTC:

route add 192.168.101.8 mask 255.255.255.255 192.168.101.7 metric 1

Configuración final de TCP/IP en z/OS

Ya tenemos todo listo: Tenemos el camino desde fuera hacia hercules creado. Ahora, debemos customizar algunos datasets del z/OS para que escuchen al interfaz correcto con la IP correcta.

TCPIP.PROFILE.TCPIP

Se deben comentar algunas líneas que hacen referencia a los DEVICEs, los LINKs, los HOMEs y los GATEWAY, e introducir los siguientes valores:

DEVICE CTCDEV1 CTC E20
LINK CTCLINK1 CTC 0 CTCDEV1
HOME 192.168.101.8 CTCLINK1
GATEWAY
; Network   First Hop     Link Name Size   Subnet Mask  Subnet Value
10.0.0.2       =          CTCLINK1  1500   HOST
DEFAULTNET     10.0.0.2 CTCLINK1  1500   0
START CTCDEV1

Como habréis deducido, la primera lí­nea define el dispositivo de red, en la dirección E20. Importante también que el GATEWAY refleje el dispositivo TUN, ya que es por el que va a salir hacia afuera.

TCPIP.TCPIP.DATA

Se cambian los valores de:

DOMAINORIGIN  midominio.com  y
NSINTERADDR  195.235.113.3

Siempre y cuando Internet lo tengas desde Telefonica, ya que su DNS es esa IP. Para el resto, introducir el DNS que utilicéis en la red.

TCPIP.HOSTS.LOCAL

Se cambian los valores de:

HOST : 192.168.101.8   : hercules.midominio.com, p390: y
NSINTERADDR  195.235.113.3

Con esto, ya está todo configurado. Al hacer IPL de nuevo, Hercules levantará el interfaz TUN y a partir de ahi, la IP 192.168.1.8 estará disponible. Si podéis acceder a una sesión TSO por esa IP (y no por la 192.168.1.7), desde cualquier PC de la red, lo habéis conseguido.

NOTA: Es posible que no podáis abrir en modo edición los datasets TCPIP.TCPIP.DATA y el PROFILE. Si se da el caso, desde la master console, introducir el comando STOP TCPIP para parar el proceso. Entonces, si os dejará editarlo sin problemas.

Montando un equipo Hercules y z/OS para emulación de un entorno real (II)

La anterior entrega explicaba a nivel introductorio lo que es un AD/CD y su aplicación. En esta, explicaremos como preparar el PC que va a convertirse próximamente en un mainframe.

Partiremos de un PC con GNU/Linux. En mi ejemplo, he elegido Debian, pero los comandos que voy a dar lo mismo valen para la Ubuntu, ya que voy a utilizar el conocido comando apt para instalar software.
También parto desde el hecho que ese PC está conectado a una LAN por una tarjeta de red y que dicho PC tiene su IP fija y su acceso a Internet, y, evidentemente, si queremos usar una consola 3270 necesaria para Hercules, necesitamos tener algún sistema X-Window funcionando en nuestro equipo aunque no es del todo obligatorio.

Pues bien, si hacemos un apt-get install hercules, nos instalará el emulador Hercules. Así­ de sencillo.

Si hacemos un apt-get install x3270, instalaremos el emulador de terminal 3270 para GNU/Linux. Si no queremos tener X-Window, podríamos instalar un emulador de terminal en modo texto llamado c3270, de modo que con un apt-get install c3270 lo tendríamos instalado y así­ prescindir del entorno X-Window.

Configuración Hercules

De acuerdo, si Hercules se ha instalado bien, deberíamoss tener un directorio llamado /etc/hercules y en su interior, un archivo llamado hercules.cnf. Ese es el archivo de configuración, y ese fichero viene por defecto. Lo renombraremos para tenerlo guardado por si acaso, y añadiremos el nuestro con una información similar a esta:

#
# Configuration file for Hercules & IBM ADCD z/OS 1.6
CPUSERIAL 000000 # CPU serial number
CPUMODEL  9672   # CPU model number
MAINSIZE  768    # Main storage size in megabytes
XPNDSIZE  0      # Expanded storage size in megabytes
CNSLPORT  23     # TCP port number to which consoles connect
NUMCPU    1      # Number of CPUs
TZOFFSET  +0100
OSTAILOR  OS/390  # OS tailoring
PANRATE   FAST    # Panel refresh rate
ARCHMODE  ESAME   # Architecture mode S/370, ESA/390 or ESAME
PGMPRDOS  LICENSED  # Allow OS/390 and Z/OS systems to run 

#
# IPL parameter
#
LOADPARM  0A82CS.. 

# Device list
#---  ----  --------------------
0700  3270
0701  3270
0702  3270
0900  3270
0901  3270
0A80  3390  /ZOS16/s6res1.a80
0A81  3390  /ZOS16/s6res2.a81
0A82  3390  /ZOS16/os39m1.a82
0A83  3390  /ZOS16/s6db21.a83
0A84  3390  /ZOS16/s6cic1.a84
0A85  3390  /ZOS16/s6dis1.a85
0A86  3390  /ZOS16/s6dis2.a86
0A87  3390  /ZOS16/s6uss1.a87
0A88  3390  /ZOS16/s6dis3.a88
0A89  3390  /ZOS16/s6ims1.a89
0A8A  3390  /ZOS16/s6was1.a8a
0A8B  3390  /ZOS16/s6was2.a8b
0A8C  3390  /ZOS16/sares1.a8c
0A8D  3390  /ZOS16/s6dis4.a8d
0A8F  3390  /ZOS16/saipl1.a8f
0E20.2  CTCI  192.168.101.8 10.0.0.2

Como habréis podido comprobar, la parte de arriba hace referencia al tipo de máquina, modelo, etc. Podéis utilizar este fichero como base, o ir a la web del emulador Hercules e investigar que significa cada opción y que valor poner.

Como también podéis ver, he hecho una lista con las direcciones de los discos y la carpeta donde se encuentran, asÍ­ como los terminales, el CTC y luego, el parámetro LOADPARM, que contiene 0A82CS.. el cual significa que el disco IODF es el 0A82 y el parámetro de arranque es CS (Cold Start) debido que existe un miembro LOADCS en SYS1.IPLPARM. Todo esto está documentado en las instrucciones de los CDs, así como todos los parámetros posibles que se pueden poner.

Antes de arrancar hercules, tomad especial atención al parámetro CNSLPORT, ya que si ponemos el 23 (el telnet), debemos estar seguros que no tenemos ningún servidor telnet funcionando en nuestra máquina. He puesto el 23, porque de ese modo, las sesiones x3270 se configuran automáticamente y no hay que pasarle datos del puerto de escucha y demÁs.

Arranque Hercules

Bueno, pues con todo esto, ya está listo. Ejecutando hercules como root, arrancará el emulador. Si no encuentra el fichero de configuración, deberemos escribir hercules -c  /etc/hercules/hercules.cnf

A partir de este momento, en ese terminal de Debian estará el emulador. Si tenemos X-Window, es el momento de volver a Él con un Ctl+Alt+F9 y lanzar el emulador x3270 con una conexión a localhost. En ese momento, debería parecer que el x3270 está conectado a Hercules con un mensaje, y diciendo el número de terminal y la dirección del terminal (como es el primero, debería tener la dirección 0700).

Arranque del z/OS

Si volvemos a la consola donde tenemos el hercules funcionando, basta con escribir IPL 0A80 y veremos como empezarán a salir mensajes y cómo el contador de instrucciones de debajo a la derecha empieza a funcionar.

Entonces, si ahora vamos a la consola x3270 que hemos abierto anteriormente, deberían empezar a salir un montón de mensajes de inicio del z/OS. El texto debe ser de color turquesa, que corresponde al Nucleus Initialization Program o NIP. En este punto, yo os remitiría a las instrucciones del ADCD donde indica cómo y qué responder a los posibles mensajes que vayan apareciendo. El primero probablemente sea para establecer el Sysplex ADCDPL, por lo que responderemos r 00,I y veremos como va progresando el arranque de la máquina.

Una vez arrancada y cargados los programas de inicialización, la pantalla cambiará de texto turquesa a texto verde, los cuales los mensajes de advertencia o preguntas aparecerán en blanco y los mensajes de error, en rojo. Nuevamente, os remito a las instrucciones del ADCD por si aparecen preguntas (por ejemplo, el tipo de arranque del JES2, etc).

En este punto, podéis abrir una nueva sesión x3270, la cual ha tenido que pillar la dirección 0701, la siguiente del rango que Hercules nos da. Al de un rato, esa pantalla debe cambiar a un color de texto rojo y un banner de z/OS.

Ahora, ya estamos preparados para hacer LOGON en vuestra propia máquina mainframe por primera vez en vuestras vidas en casa: El usuario “root” es IBMUSER y su password, SYS1. Y a partir de aquí­ a aprender a usar un poco el ISPF, que es el editor TSO que se utiliza para escribir JCLs, submitirlos, etc.

NOTA con respecto al arranque CS: La primera vez que lo ejecutéis, SIEMPRE debéis arrancar en modo Cold Start para permitir formatear los SPOOLes del JES2, ya que, de lo contrario, dará un casque gordo. Una vez hecha la IPL bien, el resto de las veces, en función de lo que queráis arrancar (DB2, CICS, etc), podéis cambiar el LOADPARM del fichero de configuración del Hercules por DC (ColdStart de CICS y DB2) o DB(Warm Start de DB2 y CICS) y así arrancar todos los productos.
En la siguiente entrega, explicaré como configurar una tarjeta de red virtual con el fin de que el z/OS se comunique directamente por la red sin pasar por el Hercules, con el fin de poder conectarlos al DB2, CICS, etc, por TCP/IP nativo.

Montando un equipo Hercules y z/OS para emulación de un entorno real

El presente artículo viene motivado por algunos comentaristas que piden como instalar un hercules con z/OS para así­ tener un mainframe emulado, al cual se conectarían PCs en red para trabajar con los datos de DB2, CICS, etc. y generar así­ un entorno de desarrollo completo.

Comentaros también que la preparación de este entorno es ilegal, ya que no se dispone de una licencia de IBM para poder hacer funcionar el sistema Operativo z/OS bajo Hercules, pero bueno, como por aquí parece que a la gente le gusta vivir peligrosamente, pues allá vamos.

Para empezar, lo primero que debemos conseguir es el AD/CD (Application Development CD) del Emule, buscando por algo así­ como IBM_ADCD_ZOS. Los resultados pueden ser dispares y de varias versiones del SO. Hay que ser pacientes, no tiene precisamente muchas fuentes y va a tardar en bajarlo, aunque si os bajáis la última versión, la 1.6, debería tener más fuentes. Son 16 ficheros ISO, es decir, 16 CDs, dentro de los cuales hay un ZIP que tiene un volumen 3390-3 comprimido. Es decir, tendremos 16 ZIPs en total y en uno de los CDs, además, también vendrá documentación.

Que es un AD/CD? No, no es un grupo de Heavy Metal ;) Es un conjunto de CDs los cuales tiene un Sistema Operativo de mainframe y todas las aplicaciones habidas y por haber de desarrollo del momento con las últimas versiones en el momento de su lanzamiento. Este sistema, además del propio sistema operativo z/OS, viene la última versión del CICS, del DB2, IMS, JDK, herramientas de TCP/IP, Cobol, Language Environments, etc, del momento de aparición de esa versión, y este paquete de software se distribuye sobre todo a ISVs (Independent Software Vendors) como Computer Associates, Candle, BMC, etc, que programan aplicaciones para esos sistemas, y que necesitan tener un mainframe para poder diseñar esos programas.

Entonces, como estas empresas no van a comprar un mainframe solo para programar aplicaciones accesorias de este entorno, IBM hace años tuvo la idea de vender una solución empaquetada de Hard y Soft llamada PC Server S/390 junto con el AD/CD que era un IBM PC Server 520 con una tarjeta procesadora PCI de S/390 que tenia muy poca potencia, pero que bastaba para tener tu mainframe sin grandes problemas. Se instalaban esos CDs en ese equipo y voila! Los discos se emulaban y las cintas, también, aunque disponía de una cinta DAT de 4mm para el caso por lo que o podrías grabar una cinta real, o un fichero de cinta emulada. Después del PC Server 520, vino el Multiprise 3000 con la misma filosofía pero con un procesador 9672-Generación 5, pero los discos seguían siendo emulados, y la tarjeta de red y unidades de cinta, también. Mas tarde, un emulador llamado FLEX-ES sustituyó a estas máquinas, pero hace pocos años este emulador también ha sido descatalogado, ya que en la actualidad es mucho menos costoso adquirir un mainframe real entry-level como por ejemplo, un z9 Business Class que los mastodontes de aquella Época.

Así­ que imaginaos el ADCD como si fuera una imagen de GHOST de un mainframe completo, con todos los programas y productos IBM instalados en una sola maquina, el cual, una vez “descomprimido”, tendrás un mainframe listo para hacerlo funcionar sin tener que instalar absolutamente nada.

Recopilando Información

Una vez conseguido los 16 volúmenes, y grabados al PC que ejecutará Hercules en la carpeta /ZOS16 (en el caso que os hayáis descargado esa versión), pasaremos a leer las instrucciones que vienen en uno de los CDs, sobre todo lo relativo a cuales son los volúmenes residentes, de catálogo, IODF y que direcciones de terminales debemos configurar para la Master Console y las sesiones TSO no-SNA.

Con que objeto? Pues porque para que el sistema nos funcione, debemos plasmar en Hercules la MISMA configuración con la que viene el Sistema Operativo configurado, cuando se generó la instalación en un mainframe real, de lo contrario, no arrancará. También debemos conocer la dirección de arranque o IPL, la dirección del disco donde está el IODF así­ como saber con que parámetros podemos arrancar (Cold Start, Warm Start, etc). Todo esto viene en las instrucciones, así­ que leéroslas con detenimiento.

Por lo general, en todas las versiones ADCD los discos 3390 han sido siempre 16, desde la dirección 0A80 a la 0A8F, los terminales han sido del 0700 al 071F y del 0900 al 091F, siendo la 0700 la dirección de la Master Console y la 0701, 0702, etc, las sesiones TSO no-SNA. Por Último, las tarjetas de red o CTC-links suelen estar en las direcciones 0E20 a la 0E23 y de la 0E40 a la 0E43. Por tanto, ya sabemos que direcciones debemos configurar en nuestro hercules cuando lo vayamos a instalar, pero nuevamente os remito a leer las instrucciones para que no hayan equívocos.

En la siguiente entrega, explicaré como preparar el equipo e instalar hercules de una manera rápida, sencilla y eficaz.