Saltar al contenido principal

Instalar emulador zPDT

ZD&T está basado en la herramienta zPDT (IBM z Systems Personal Development Tool). El emulador zPDT es el software que emula el Mainframe.

info

El Redbook de zPDT. Se explica cómo usar el emulador:
http://www.redbooks.ibm.com/redbooks/pdfs/sg248205.pdf

Es necesario tener instalado el servidor de licencias. Se necesita para poder ejecutar el emulador y también para poder desencriptar los discos *RES1.ZPD que vienen con las distribuciones ADCD.

Este emulador no puede estar instalado en la misma máquina que la herramienta para la administración web o que el servidor de licencias..

Instalar únicamente el emulador es para aquellos usuarios que no quieren tener la herramienta web. Por ejemplo, solo quieren tener un sistema con un emulador instalado. Esta opción es más “rápida”, pero es más difícil de administrar.

NOTA

Antes de empezar la instalación, hay que asegurarse de tener espacio para almacenar los discos del sistema. Unos 300GB para la versión ADCD z/OS 2.4 de Noviembre 2019. Además de tener espacio para nuestros discos de usuario.

info

Para hacer la instalación, se siguen los siguientes pasos:
https://www.ibm.com/docs/en/zdt/12.0.5?topic=edition-installing-zdt-emulator

Requisitos previos e instalación

Antes de empezar, debemos cumplir estos requisitos (comandos para instalarlos en Ubuntu):

apt-get -y install iptables
dpkg --add-architecture i386
apt-get -y update
apt-get -y install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 lib32stdc++6
apt-get -y install ftp
apt-get -y install perl
apt-get -y install zip
apt-get -y install unzip
apt-get -y install gzip
apt-get -y install bc
apt-get -y install libasound2
apt-get -f install

Copiamos el paquete de instalación a esta máquina. En mi caso, se llama ZDT_Install_EE_V12.0.5.0.tgz

Abrimos un terminal y vamos a la ruta en la que lo hemos copiado. Cambiamos los permisos a 775:

chmod 755 ZDT_Install_EE_V12.0.5.0.tgz

Descomprimimos el fichero con el comando:

tar -xzvf ZDT_Install_EE_V12.0.5.0.tgz

Ejecutamos el programa para hacer la instalación:

./ZDT_Install_EE_V12.0.5.0.x86_64

Emuframe image

Aparecerán las distintas opciones para la instalación. En este caso, elegimos la opción 4 para instalar el emulador.

Emuframe image

Elegimos la opción 1 - Install. Emuframe image

Después de pulsar intro (un rato…), si estamos de acuerdo con la licencia, aceptamos.

Emuframe image

Esta opción sirve para compartir la IP del sistema Linux (en este caso, Ubuntu) con el z/OS. De esta forma no es necesario darle una nueva IP estática a z/OS para poder interactuar directamente con el sistema z/OS.

aviso

Para responder una cosa u otra, tendréis que tener en cuenta vuestra configuración ya que si hacéis la configuración automática, hará cambios en el sistema Linux, el firewall de Linux y la definición TCPIP de z/OS.

En mi caso, le daré a Y, para probar cómo funciona.

Emuframe image

También podemos decidir si queremos que nos instale las dependencias de forma automática. El sistema debe poder acceder a internet.

Emuframe image

Esperamos un poco y el emulador quedará instalado. Con la instalación, se crea el usuario ibmsys1. Debemos cambiar la password de este usuario usando el comando:

passwd ibmsys1

Emuframe image

Si queremos confirmar que está bien instalado, podemos usar el comando:

dpkg -l | grep z1091

Emuframe image

Conectar con servidor de licencias

Ahora vamos a cambiar la configuración para indicar nuestro servidor de licencias que instalamos en la entrada anterior. Para hacerlo vamos a la ruta /usr/z1090/bin y ejecutamos el comando:

./clientconfig

Emuframe image

Como servidor de licencias está basado en software, pondré la IP del sistema en el que instalé el servidor de licencias.

Emuframe image

Una vez hecho (y con el servidor de licencias funcionando), usamos el siguiente comando para comprobar que funciona:

NOTA

Cuando lo hice la primera vez, no conectó con el servidor de licencias porque la licencia la puse más tarde. Con hacer un reinicio del sistema donde estoy instalando el emulador zPDT, quedó solucionado y mostró la información de la licencia.

./query_license

Emuframe image

Crear instancia del sistema

Ahora vamos a crear la instancia (es decir, la configuración de discos y demás recursos que arrancaremos) del emulador. Para hacer esto, lo primero es tener los discos del sistema que arrancaremos. En mi caso, la versión que usaré es la ADCD z/OS 2.4 Edición Noviembre 2019.

Entramos con el usuario ibmsys1 y guardamos los discos en la ruta /home/ibmsys1/volumes

Los discos *RES1.ZPD tendremos que desencriptarlos.

Emuframe image

Ahora nos tenemos que asegurar que el owner de todos los volúmenes sea un usuario que no sea root (por ejemplo, ibmsys1). Además de dar permisos “755”.

chown ibmsys1 *
chgrp zpdt *
chmod 755 *

En mi caso, el owner y el grupo estaban bien, pero los permisos no. En la imagen se pueden ver las diferencias.

Emuframe image

Para desencriptar los volumes *RES1.ZPD usaremos los siguientes comandos:

cd /usr/z1090/bin
./Z1091_ADCD_install fichero_entrada fichero_salida

Por ejemplo:

./Z1091_ADCD_install /home/ibmsys1/volumes/A4RES1.ZPD /home/ibmsys1/volumes/A4RES1
./Z1091_ADCD_install /home/ibmsys1/volumes/SARES1.ZPD /home/ibmsys1/volumes/SARES1

Error al desencriptar discos ZPD

Al ejecutar el comando, me apareció el siguiente error:

error while loading shared libraries: libawsDiskItf.so

Al parecer, esto puede ser por no usar el usuario que NO es root (ibmsys1), pero yo estaba usando ese usuario…
Incluso creé el usuario ibmsys2, que tampoco era root, pero el error era el mismo. Comprobé que esa librería existía en /usr/z1090/bin

Emuframe image

En este punto, estaba un poco perdido (incluso reinstalé Ubuntu y no funcionaba).

Probé otro programa (el que inicia el emulador, awsstart) y vi que también daba error al cargar otra librería diferente, que, además, estaba en /usr/z1090/bin
Esto me dio que pensar que el problema estaba en alguna variable de entorno que no estaba bien definida.
Al comprobar el fichero oculto “.bashrc” dentro de /home/ibmsys1, vi que intenta definir unas variables, pero debe haber algún error en el fichero y no lo hace.

Emuframe image

Al dar esos comandos a mano en un terminal con el usuario “ibmsys1”, todo empezó a funcionar.

export PATH=/usr/z1090/bin:$PATH
export LD_LIBRARY_PATH=/usr/z1090/bin:$LD_LIBRARY_PATH
export MANPATH=/usr/z1090/man:$MANPATH
ulimit -c unlimited
ulimit -d unlimited
ulimit -m unlimited
ulimit -v unlimited

Emuframe image

Aunque esto funcionase, el problema seguía existiendo, porque al reiniciar había que dar los comandos de nuevo. Investigando un poco más, esto ocurre porque cuando se crea el usuario, el “shell” que le asigna es /bin/sh, en vez de /bin/bash. Se puede comprobar con el comando getent passwd y buscamos el usuario.

Emuframe image

Lo podemos cambiar con el comando:

chsh -s /bin/bash ibmsys1

Emuframe image

Emuframe image

Con esto cambiado, ya es posible reiniciar el sistema que funcionará correctamente.
Después de esto, pude extraer los discos correctamente.

Emuframe image

Ahora que tenemos todos los volúmenes para usarlos, vamos a crear el “devmap”. Se puede hacer de forma manual, pero hay un script que lo hace directamente. Para ejecutarlo:

cd /opt/ConfigGuideSample
perl create_devmap.pl ruta_volumenes > generateddevmap

Por ejemplo:

perl create_devmap.pl /home/ibmsys1/volumes > generateddevmap

En mi caso, falló porque faltaba el paquete “net-tools”. Tras instalarlo (apt-get install net-tools), funcionó correctamente.

Emuframe image

El resultado es:

Emuframe image

Emuframe image

Ahora copiaremos los ficheros generateddevmap y runzpdt del directorio /opt/ConfigGuideSample al directorio en el que tenemos los volúmenes (/home/ibmsys1/volumes).

Emuframe image

Iniciar emulador

Iniciamos el emulador con el comando:

./runzpdt -d <devmap name> -l <loadparm option>

Por ejemplo:

./runzpdt -d generateddevmap -l cs

Emuframe image

Empezará a arrancar:

Emuframe image

Emuframe image

Para responder pondremos:

oprmsg 'R 00,I'

Emuframe image

Para activar la consola, conectamos un terminal 3270 con la IP del sistema y el puerto “3270”. Usamos los comandos:

oprmsg 'v cn(\*),activate'
oprmsg 'v 700,console'

Emuframe image

Corregir error arranque ADCD

Sorprendentemente, ¡este sistema no arrancará! Cuando VTAM intente arrancar dirá que hay un módulo que no está en una librería APF.

Emuframe image

El arranque se quedará parado.

Emuframe image

Con el comando D PROG,APF, vemos las librerías que están que están autorizadas:

OPRMSG: LABEL: FORMAT=DYNAMIC
OPRMSG: LABEL: ENTRY VOLUME DSNAME
OPRMSG: 1 A4RES1 SYS1.LINKLIB
OPRMSG: 2 A4RES1 SYS1.SVCLIB
OPRMSG: 3 A4RES1 SYS1.SHASLNKE
OPRMSG: 4 A4RES1 SYS1.SIEAMIGE
OPRMSG: 5 A4RES1 SYS1.MIGLIB
OPRMSG: 6 A4RES1 SYS1.SERBLINK
OPRMSG: 7 A4RES1 SYS1.SIEALNKE
OPRMSG: 8 A4RES1 SYS1.CSSLIB
OPRMSG: 9 A4RES1 GIM.SGIMLMD0
OPRMSG: 10 A4RES1 SYS1.SHASMIG
OPRMSG: 11 A4RES2 CSF.SCSFMOD0
OPRMSG: 12 A4RES2 ISF.SISFLOAD
OPRMSG: 13 A4RES1 SYS1.SBDTCMD
OPRMSG: 14 A4RES1 SYS1.SBDTLIB
OPRMSG: 15 A4CFG1 USER.Z24A.LINKLIB
OPRMSG: 16 A4CFG1 FEU.Z24A.LINKLIB
OPRMSG: 17 A4SYS1 ADCD.Z24A.LINKLIB
OPRMSG: 18 A4CFG1 USER.Z24A.VTAMLIB
OPRMSG: 19 A4CFG1 FEU.Z24A.VTAMLIB
OPRMSG: 20 A4SYS1 ADCD.Z24A.VTAMLIB
OPRMSG: 21 A4RES1 FFST.SEPWMOD2
OPRMSG: 22 A4RES1 FFST.SEPWMOD4
OPRMSG: 23 A4RES2 NFS.NFSLIBE
OPRMSG: 24 A4RES1 TCPIP.SEZATCP
OPRMSG: 25 A4RES1 TCPIP.SEZALNK2
OPRMSG: 26 A4RES2 TCPIP.SEZADSIL
OPRMSG: 27 A4RES1 TCPIP.SEZALPA
OPRMSG: 28 A4RES1 TCPIP.SEZALOAD
OPRMSG: 29 A4RES1 ISP.SISPLOAD
OPRMSG: 30 A4RES1 SYS1.VTAMLIB
OPRMSG: 31 A4RES1 SYS1.SISTCLIB
OPRMSG: 32 A4RES2 CEE.SCEERUN
OPRMSG: 33 A4RES2 CEE.SCEERUN2
OPRMSG: 34 A4RES1 CBC.SCLBDLL
OPRMSG: 35 A4RES1 CBC.SCLBDLL2
OPRMSG: 36 A4PRD2 IGY630.SIGYCOMP
OPRMSG: 37 A4PRD1 EQAE10.SEQABMOD
OPRMSG: 38 A4PRD1 EQAE10.SEQAAUTH
OPRMSG: 39 A4PRD1 FAN140.SEAGLPA
OPRMSG: 40 A4PRD1 DIT130.SDITMOD1
OPRMSG: 41 A4PRD1 FELE10.SFEKAUTH
OPRMSG: 42 A4PRD1 FELE10.SFELLPA
OPRMSG: 43 A4PRD1 FEUC04.SFEUAUTH
OPRMSG: 44 A4PRD2 CSQ911.SCSQLINK
OPRMSG: 45 A4PRD2 CSQ911.SCSQAUTH
OPRMSG: 46 A4PRD2 CSQ911.CSQ9.SCSQAUTH
OPRMSG: 47 A4PRD2 CSQ911.SCSQSNLE
OPRMSG: 48 A4PRD2 CSQ911.SCSQANLE
OPRMSG: 49 A4PRD2 CSQ911.SCSQMVR1

El problema de este arranque es que la tarea VTAM tiene el dataset NET621.SCNMLNK1 en la DD VTAMLIB, pero este dataset no está APF autorizado, haciendo que ninguno de esa concatenación esté APF autorizado.

Para resolverlo y que el sistema arranque, añadimos el dataset a la lista APF de forma dinámica.

SETPROG APF,ADD,DSNAME=NET621.SCNMLNK1,VOLUME=A4PRD3

Emuframe image

Ahora ya podemos arrancar VTAM. Comando:

S VTAM

Emuframe image

Ahora arrancará correctamente.

Emuframe image

Esperamos a que arranque todo.

Emuframe image

Ya podremos acceder al sistema.

Emuframe image

Ahora aprovechamos para arreglar el error en la librería correspondiente.
Confirmamos que la librería NET621.SCNMLNK1 está en la concatenación de la DD VTAMLIB.

Emuframe image

Para saber el miembro PROGxx en el que debemos añadir el dataset, podemos hacer lo siguiente:

Consultar el miembro LOADCS (porque arrancamos con el loadparm CS) y mirar parámetro SYSPARM, que hace referencia al miembro IEASYS, en este caso, IEASYSCS.

Emuframe image

Comprobar el parámetro PROG del miembro IEASYSCS.

Emuframe image

Añadir la librería al miembro PROGAB. Ya está definida para futuros IPLs.

Emuframe image

Parada del sistema y el emulador

Para parar el emulador, utilizaremos los comandos de shutdown que existen en estos sistemas (que existan aquí no quiere decir que estén en otros sistemas “reales”).
En mi caso, como he arrancado con el LOADPARM “CS”, pararé con el comando S SHUTDOWN.
Otro comando que sirve para parar es S SHUTALL.
Hay más disponibles, pero principalmente uso esos dos.

Una vez haya parado todo, después del comando $PJES2, haremos el comando QUIESCE en la consola de z/OS.
Es una forma de parar los procesadores.
Después en el terminal del emulador (en Ubuntu), daremos el comando awsstop para parar el emulador.

Emuframe image

 Instalar terminal x3270

De forma opcional, podemos instalar el terminal x3270 y configurar el arranque del emulador para tener la consola en este terminal.

Para instalar x3270:

apt-get install x3270

Emuframe image

Después, hay que añadir este comando al fichero Devmap:

command 2 x3270 -model 3 localhost:3270
NOTA

“model 3” es un terminal de 32 líneas y “model 4” es de 43. Debemos usar el puerto que tengamos configurado.

De esta forma, cuando arranquemos el emulador, arrancará el terminal y tendremos la consola.

Emuframe image