Lo primero agradecer a Model9 que me permita probar este software, con una licencia temporal, en mi entorno ZDT para poder escribir sobre el producto.
Model9 es un software que permite transferir datos que tengamos en Mainframe (por ejemplo, ficheros migrados o backups que estén en cintas) a la nube (AWS, Google Cloud, IBM Cloud…). Podéis conocer más sobre Model9 en su web: https://model9.io/
En el momento que escribo esto dispongo de dos versiones: la v2.3.5 y v2.4.0 (que salió hace unos días). Al principio sólo tenía la v2.3.5 y sólo podía hacer una instalación, pero ahora mi idea es instalar la v2.3.5 y, en una entrada posterior, actualizar a la v2.4.0.
La documentación que seguiré se encuentra en: https://docs.model9.io/
Dispongo de los siguientes ficheros:
Agente de z/OS
model9-v2.3.5_build_eee8cba0-agent.tar
Imagen Docker para arquitectura s390x (Linux en Mainframe o zCX en z/OS)
model9-v2.3.5_build_eee8cba0-server-s390x.zip
Imagen Docker para el resto de sistemas
model9-v2.3.5_build_eee8cba0-server.zip
Scripts de comprobación de los prerrequisitos
VerificationScripts.zip
Antes de empezar, podemos ver si nuestra instancia cumple con los requerimientos mínimos de espacio. En mi caso, ya preparé esta instancia en una entrada anterior.
Comando:
MODIFY ZCX001,DISPLAY,DISK
Ahora voy a conectar a mi instancia zCX desde OMVS:
ssh
This email address is being protected from spambots. You need JavaScript enabled to view it. -p 8022
Voy a aprovechar para enseñar a crear un usuario y así poder conectar desde otro equipo.
Con los siguientes comandos crearé el usuario “javzcx” y lo añadiré a los grupos “docker” y “sudo”.
sudo adduser --ingroup docker javzcx
sudo adduser javzcx sudo
Podremos acceder con el nuevo usuario desde otro pc:
ssh
This email address is being protected from spambots. You need JavaScript enabled to view it. -p 8022
Siguiendo el manual, tendremos que crear dos volúmenes para el servidor y la base de datos:
docker volume create model9
docker volume create model9db
Podemos verlos con:
docker volume ls
Ahora hay que cargar una imagen de Linux Alpine. En el caso de no poder acceder a internet desde zCX, podemos descargarlo desde otro sistema, empaquetarlo en “tar” y enviarlo.
Comandos:
docker pull s390x/alpine
docker save s390x/apine > alpine.tar
Ahora tenemos que transferir el fichero “alpine.tar” a la instancia zCX. En mi caso, usando el siguiente método la velocidad de transferencia es lenta, pero, como este fichero es pequeño, lo haré de esta manera.
sftp -P 8022
This email address is being protected from spambots. You need JavaScript enabled to view it. put alpine.tar /tmp
Si las transferencias de ficheros por “sftp” va lenta (unos 50-100KB), hay que comprobar que hayamos incluido la ruta en Ubuntu.
Ahora tenemos que cargar la imagen:
docker load --input /tmp/alpine.tar
Podemos ver las imágenes cargadas con:
docker image ls
Ejecutamos la imagen:
docker run -d --rm --name dummy -v model9:/root s390x/alpine \
tail -f /dev/null
Con el siguiente comando podemos ver los procesos que se ejecutan:
docker ps
Volvemos a conectarnos por sftp para subir el archivo “model9-v2.3.5_build_eee8cba0-server-s390x.zip”
sftp -P 8022
This email address is being protected from spambots. You need JavaScript enabled to view it. put model9-v2.3.5_build_eee8cba0-server-s390x.zip /tmp
Desde el terminal SSH, copiamos el fichero al contenedor “alpine”.
cd /tmp
docker cp model9-v2.3.5_build_eee8cba0-server-s390x.zip dummy:/root/model9-2.3.5_build_eee8cba0-server-s390x.zip
Ejecutaremos los siguientes comandos para acceder al contenedor “Alpine” y descomprimir el archivo. Hay que tener cuidado porque en la documentación el nombre del archivo en el comando “unzip” es incorrecto:
docker exec -it dummy sh
cd /root
unzip /root/model9-2.3.5_build_eee8cba0-server-s390x.zip
Pulsamos Control+D para salir del contenedor.
Ahora copiamos los siguientes paquetes a la instancia zCX. Recordamos que estos paquetes han sido extraídos en el paso anterior pero dentro del contendor “Alpine”.
docker cp dummy:/root/model9-v2.3.5_build_eee8cba0-s390x.docker ./
docker cp dummy:/root/postgres-s390x-12.3.docker.gz ./
Ahora cargamos las dos imágenes.
docker load -i model9-v2.3.5_build_eee8cba0-s390x.docker
docker load -i postgres-s390x-12.3.docker.gz
Ahora arrancaremos la base de datos:
docker run -p 127.0.0.1:5432:5432 \
-v model9db:/var/lib/postgresql/data:z \
--name model9db --restart unless-stopped \
-e POSTGRES_PASSWORD=model9 -e POSTGRES_DB=model9 -d s390x/postgres
Comprobaremos que está en ejecución con el comando “docker ps”.
También podemos comprobar el estado con el comando:
docker logs model9db
Ahora hay que adaptar el fichero de configuración del servidor. Usaremos los siguientes comandos:
docker exec -it dummy sh
cd /root
vi conf/model9-local.yml
Tenemos que actualizar la licencia, los datos del agente (IP y puerto) e indicar los datos para conectar con el almacenamiento (Azure, en mi caso).
Al final de la entrada explico los pasos que seguí para crear el almacenamiento.
En mi caso, el puerto del agente será el 9999 y la IP es la de mi z/OS.
Para utilizar el editor “vi”, pulsaremos la letra “i” para entrar en modo inserción y pegaremos la clave en el campo correspondiente. Después pulsaremos la tecla “ESC” para volver al modo comando y escribiremos “:wq” para guardar y salir.
Parámetros necesarios para Azure:
model9.objstore.endpoint.api.id: azureblob-oauth2
model9.objstore.jclouds-config.jclouds.oauth.audience: https://storage.azure.com/
model9.objstore.jclouds-config.jclouds.oauth.credential-type: clientCredentialsSecret
model9.objstore.endpoint.url: https://testmodel9.blob.core.windows.net
model9.objstore.resources.container.name: testmodel-container
model9.objstore.jclouds-config.jclouds.azureblob-oauth2.storageaccount: testmodel9
model9.objstore.jclouds-config.oauth.endpoint: https://login.microsoftonline.com/tenan-id/oauth2/token
model9.objstore.endpoint.userid: application_id (client_id)
model9.objstore.endpoint.password: application_secret (client_secret)
Cuando hayamos terminado, salimos del contenedor pulsando “Control+D”.
Ejecutamos el siguiente comando para arrancar el servidor. Es diferente al mostrado en la documentación porque yo no he configurado “MinIO”. También he puesto los puerto 8443 y 8080 para que escuche la aplicación.
docker run -d -p 0.0.0.0:8443:443 -p 0.0.0.0:8080:80 \
-v model9:/model9:z -h EMUFRAMEzCX --restart unless-stopped \
-e "TZ=Europe/Madrid" \
-e "CATALINA_OPTS=-Xmx2048m -Djdk.nativeCBC=false -Xjit:maxOnsiteCacheSlotForInstanceOf=0" \
--link model9db:model9db \
--name model9-v2.3.5 model9:v2.3.5.eee8cba0
Podemos ver el arranque con el comando:
docker logs model9-v2.3.5
Veremos los mensajes indicando que se ha conectado correctamente al almacenamiento y el tiempo que ha tardado en arrancar.
Este tiempo es elevado en ZDT porque el rendimiento de java en este sistema emulado es bastante malo (no es culpa de Model9). En un entorno real, esto debería funcionar correctamente. De hecho, probando el arranque del servidor en Docker en un sistema Windows, el arranque tardó menos de un minuto.
Podremos acceder a la web usando la IP del sistema zCX y el puerto 8443. En mi caso:
https://10.1.3.10:8443/login/show
Si no hemos arrancado el agente en z/OS, no podremos logarnos porque la seguridad se controla mediante el producto que usemos en z/OS (RACF, por ejemplo).
Ahora voy a enseñar los pasos que seguí en Azure para poder configurar el almacenamiento.
Yo seguí los siguientes pasos:
https://docs.model9.io/cloud-and-storage-integration/microsoft-azure-configuration
Primero creé una cuenta de almacenamiento.
Elegí las opciones más básicas porque no necesito más.
Entré en la cuenta de almacenamiento y fui al apartado Contenedores y creé uno.
Entramos en Propiedades del contenedor para conocer la URL del almacenamiento, ya que la necesitaremos.
Después registré la aplicación necesaria para poder acceder al contenedor.
Creé una aplicación nueva con las siguientes opciones.
Entramos en la aplicación y apuntamos el id de aplicación (client id) y el id de directorio (tenant id).
Vamos a Certificados y secretos para generar la clave de acceso.
Generamos una nueva clave y la apuntaremos para usarla.
Ahora tenemos que asociar la aplicación con la cuenta de almacenamiento.
Volvemos a la cuenta de almacenamiento y entramos en Control de acceso (IAM).
Hay que elegir lo siguiente:
Role - “Storage Blob Data Contributor”
Assign access to - “User, Group, or service principal”
Select - The Model9 registered application you created in the previous step
En Seleccionar miembros, buscamos la aplicación creada y la incluimos.
Por último, revisamos y asignamos.
Comprobamos que se ha añadido correctamente.
Espero que os haya gustado esta primera parte de Model9.