Seguimos con la instalación de IBM Z Development & Test Environment Enterprise Edition. ZD&T está basado en la herramienta zPDT (IBM z Systems Personal Development Tool). En esta entrada, nos vamos a centrar instalar el emulador que se usa en la herramienta zPDT, que es el software que emula el Mainframe.
El Redbook de zPDT, donde se explica cómo usar el emulador, es el siguiente:
Antes de hacer instalar el emulador, debemos instalar el servidor de licencias. Revisad este post para hacer la instalación:
Este servidor de licencias es necesario para poder ejecutar el emulador y también para poder desencriptar los discos *RES1.ZPD que vienen con las distribuciones ADCD. El proceso de desencriptado lo que hace es “marcar” estos dos discos con la licencia, para evitar que sea compartido/vendido por internet. En caso de que se comparta o se venda por internet, se podría identificar la licencia y el cliente asociado.
Como dijimos en la entrada de la instalación del servidor de licencias, 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. Por este motivo, me he creado una nueva máquina virtual en VMware ESXi con Ubuntu Desktop 18.04.4.
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.
Antes de empezar, debemos cumplir estos prerrequisitos (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
apt-get dist-upgrade
Para hacer la instalación, seguiremos estos pasos:
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
Aparecerán las distintas opciones para la instalación. En este caso, elegimos la opción 4 para instalar el emulador.
Para instalar, 1 - Install.
Después de pulsar intro (un rato…), si estamos de acuerdo con la licencia, aceptamos.
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.
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.
También podemos decidir si queremos que nos instale las dependencias de forma automática. El sistema debe poder acceder a internet. Si instalamos los prerrequisitos anteriormente, podemos responder N.
Esperamos un poco y el emulador quedará instalado. Durante la instalación, se crea el usuario ibmsys1. Debemos cambiar la password de este usuario usando el comando:
passwd ibmsys1
Si queremos confirmar que está bien instalado, podemos usar el comando:
dpkg -l | grep z1091
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
Como servidor de licencias está basado en software, pondré la IP del sistema en el que instalé el servidor de licencias.
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
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.
Lo primero, nos logamos con el usuario ibmsys1 y guardamos los discos en la ruta /home/ibmsys1/volumes
Los discos *RES1.ZPD debemos desencriptarlos.
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”. Usaremos los comandos:
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.
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
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
En este punto, estaba un poco perdido (incluso reinstalé Ubuntu y no funcionaba), pero me dio por probar 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.
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
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.
Lo podemos cambiar con el comando:
chsh -s /bin/bash ibmsys1
Con esto cambiado, ya es posible reiniciar el sistema que funcionará correctamente. Después de esto, pude extraer los discos correctamente.
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.
El resultado es:
Ahora copiaremos los ficheros “generateddevmap” y “runzpdt” del directorio “/opt/ConfigGuideSample” al directorio en el que tenemos los volúmenes (/home/ibmsys1/volumes).
Iniciamos el emulador con el comando:
./runzpdt -d <devmap name> -l <loadparm option>
Por ejemplo:
./runzpdt -d generateddevmap -l cs
Empezará a arrancar:
Para responder pondremos:
oprmsg 'R 00,I'
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'
Sorprendentemente, ¡este sistema no arrancará! Cuando VTAM intente arrancar dirá que hay un módulo que no está en una librería APF.
El arranque se quedará parado.
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
Ahora ya podemos arrancar VTAM. Comando:
S VTAM
Ahora arrancará correctamente.
Esperamos a que arranque todo.
Ya podremos acceder al sistema.
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.
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.
Comprobar el parámetro PROG del miembro IEASYSCS.
Añadir la librería al miembro PROGAB. Ya está definida para futuros IPLs.
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 el “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.
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
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.
Ya hemos comprobado que funciona correctamente. En la próxima entra instalaremos la utilidad web y aprenderemos a usarla.