São raras as fontes na internet sobre mainframe. Quem quer aprender sobre o ambiente destas máquinas precisa recorrer a cursos, que também são escassos.
No Brasil, os mainframers mais experientes (aka: dinossauros), se reúnem no ótimo fórum do site www.mainframes.com.br que traz discussões bastante úteis.
Se os experientes são dinossauros, eu ainda estou no ovo. Mas, aprendi muito ao tentar emular um ambiente mainframe em meu computador pessoal e espero que a informação seja útil para mais alguém.
O que será feito
Seu computador pessoal será o hospedeiro de um sistema mainframe.
Neste caso, será utilizado o sistema operacional MVS (Multiple Virtual Storage), da IBM, em uma emulação da arquitetura System/370.
Ingredientes
O experimento a seguir foi realizado em um computador comum (Notebook Toshiba A135, C2D 1.73 Ghz, 2 Gb RAM) rodando o sistema Debian GNU/Linux, Etch.
Para a compilação dos programas, são necessários os compiladores C gcc, C++ g++, a ferramenta make e os headers da biblioteca ncurses:
# apt-get install gcc g++ make libncurses5-dev
Ao final deste documento, sua máquina terá os seguintes softwares instalados:
– Emulador mainframe (Hercules);
– Emulador de terminal 3270;
Além dos arquivos de configuração e de inicialização do MVS.
O primeiro passo é a instalação do Hercules.
Hercules
As ferramentas utilizadas em ambiente de produção mainframe são pagas, pelo menos a maioria delas – quase sempre fornecidas pela IBM. Este é um dos problemas para quem está querendo se tornar um mainframer. Mas, quem não tem contato direto com este tipo de ambiente pode lançar mão de ferramentas open-source muito interessantes, como o Hercules.
O Hercules é um software que implementa as arquiteturas de mainframe System/370, ESA/390 e Z/Architecture. É possível instalar o Hercules no Windows, Linux ou MAC/OS.
Para instalar o Hercules, faça download dos fontes do site e inicie a compilação, como root.
# cd /usr/src/
# wget http://www.hercules-390.org/hercules-3.05.tar.gz
# tar xpvfz hercules-3.05.tar.gz # cd hercules-3.05
# ./configure
Este script deverá rodar sem erros para que a compilação seja executada:
# make
# make install
Com o Hercules instalado, vamos instalar o MVS.
MVS
A instalação do MVS é muito simples. Neste experimento utilizei um pacote que contém o sistema operacional equipado com TSO e VTAM.
Baixe e descompacte o pacote com o MVS:
# cd /usr/local/
# wget http://www.cbttape.org/ftp/schaefernet/mvsbin-v100.zip
# unzip mvsbin-v100.zip
# rm -f mvsbin-v100.zip
O diretório /usr/local/mvs será criado. Dentre outros, ele contém o arquivo de configuração que será lido pelo Hercules (/usr/local/mvs/mvs.cnf) e os volumes DASD (Direct Access Storage Device) que serão montados na inicialização do sistema.
O primeiro passo é a criação dos volumes DASD. Um script localizado em /usr/local/mvs/install/create_dasd.sh faz todo o trabalho. Mas antes é preciso fazer alguns ajustes no seu código. Com o editor de texto de sua preferência, altere o conteúdo do arquivo para o seguinte:
/usr/local/bin/dasdload spool1.ctl ../dasd/spool1
/usr/local/bin/dasdload tso001.ctl ../dasd/tso001
/usr/local/bin/dasdload work01.ctl ../dasd/work01
echo “DASD volumes created”
Por padrão, o script traz um caminho relativo do binário dasdload – o que iria nos causar problemas.
Execute o script ajustado para a criação dos volumes:
# cd /usr/local/mvs/install/
# sh create_dasd.sh
Os volumes foram criados. Porém, é preciso fazer uma alteração nos nomes dos volumes para que o Hercules consiga iniciar corretamente. Este processo pode levar alguns minutos.
# ls -lah /usr/local/mvs/dasd
total 772M
drwxr-sr-x 2 root src 4,0K 2008-03-18 07:42 .
drwxr-sr-x 6 root src 4,0K 2008-03-18 07:45 ..
-rw-r–r– 1 root src 312M 2001-01-22 22:32 mvsres
-rw-r–r– 1 root src 70M 2001-01-17 22:15 page01
-rw-r—– 1 root src 98M 2008-03-18 07:42 spool1?
-rw-r–r– 1 root src 98M 2001-01-22 22:32 sys001
-rw-r—– 1 root src 98M 2008-03-18 07:42 tso001?
-rw-r—– 1 root src 98M 2008-03-18 07:42 work01?
Repare que alguns volumes foram gerados com um “?” no final do nome. Ainda não descobri a causa deste problema. Enquanto não encontro a raiz do problema, o melhor é renomear os arquivos retirando o sinal de interrogação do final do nome.
Um outro ajuste precisa ser feito ao arquivo de configuração do MVS, /usr/local/mvs/mvs.cnf. Abra o arquivo com um editor de texto e insira a seguinte linha “ARCHMODE S/370“ no início:
#
# Configuration file for Hercules ESA/390 emulator
# MVS SYSTEM #
ARCHMODE S/370
CPUSERIAL 000611
Seu sistema MVS está pronto para rodar. Antes, porém, é preciso instalar um emulador de terminal 3270.
Emulador de terminal 3270
Os terminais 3270 da IBM eram, antigamente, a única forma de acessar os mainframes através de uma conexão física à máquina. Depois, com a evolução das redes, se tornou possível acessar um mainframe remotamente. Para isso, portanto, é preciso um emulador deste tipo de de terminal.
Existem vários emuladores de terminal, alguns deles proprietários. No nosso experimento iremos instalar um emulador open-source, o x3270.
O x3270 roda em diferentes formatos: tcl, x, windows e curses. Optei pela versão em curses, que requer apenas os headers da biblioteca ncurses.
Na minha compilação, não consegui passar ao script configure o local dos headers do ncurses. O script configure retornava o erro “configure: error: Found ncurses library but not
“. Precisei criar um link dinâmico para solucionar o problema:
# mkdir /usr/include/ncurses
# ln -s /usr/include/curses.h /usr/include/ncurses/ncurses.h
Para instalar o emulador, baixe o source e inicie a compilação:
# cd /usr/src/
# wget http://prdownloads.sourceforge.net/x3270/c3270-3.3.7p4.tgz?download
# tar xpvfz c3270-3.3.7p4.tgz
# cd c3270-3.3
# ./configure
# make
# make install
Agora a instalação dos programas está completa. É hora de iniciar o mainframe.
A primeira IPL
IPL significa Initial Program Load. No nosso caso, iremos fazer a IPL do MVS no Hercules.
Primeiro, vamos iniciar o Hercules com o arquivo de configuração do MVS:
# hercules -f /usr/local/mvs/mvs.cnf
O terminal do Hercules deverá ser iniciado como abaixo:
Imagem1: Console inicial do Hercules
Se o Hercules iniciou normalmente, será possível acessar o seu mainframe pessoal pelo terminal 3270 que acabamos de instalar.
Mantenha o console do Hercules rodando e inicie três sessões do emulador de terminal com o comando:
# c3270 0 3270
Isto deverá iniciar o emulador de terminal, com uma tela parecida a seguinte:
Imagem 2: Emulador de terminal 3270
Com os três terminais abertos, volte ao console do Hercules para fazer a IPL do MVS, com o comando:
Command ==> ipl 150
Este comando está dizendo para o Hercules fazer o IPL no mainframe pelo dispositivo de número 150. Os dispositivos estão listados no arquivo de configuração do MVS:
(…)
0131 3330 /usr/local/mvs/dasd/sys001
0150 3350 /usr/local/mvs/dasd/mvsres
0230 3330 /usr/local/mvs/dasd/spool1
(…)
Rode o comando, que deverá retornar uma saída sem erros, como da tela abaixo:
Imagem 3: IPL do mainframe
Na primeira tela, com a mensagem IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 03.8 .VS2, responda com o seguinte comando:
r 00, clpa
* Atenção: Na próxima vez que iniciar o MVS, use o comando r 00, u – isto irá pular a etapa de reconstrução da LPA.
Depois de algum tempo, o console irá retornar as seguintes linhas:
IEA301I IEALOD00 NOT FOUND IN SYS1.PARMLIB
IEA891I NO MAXUSER VALUE SPECIFIED, DEFAULT VALUE OF 256 USED
Em seguida será exibido um comando “//START JES2”, seguido de algumas mensagens. Duas delas precisam de resposta:
*00 IFB010D ENTER ‘IPL REASON,SUBSYSTEM ID’ OR ‘U’
IEE354I SMF PARAMETERS
IEE354I SID=H155
IEE354I JWT=10
IEE354I BUF=2000
IEE354I MAN=ALL
IEE354I EXT=YES
IEE354I OPT=2
IEE354I OPI=YES
*01 IEE357A REPLY WITH SMF VALUES OR U
Responda com dois comandos:
r 00,u
r 01,u
Depois de um tempo a mensagem “SMF NOW RECORDING…” será exibida.
Este é o momento em que o JES2 inicia. Serão exibidas algumas mensagens “IEF677I WARNING MESSAGES …”, que podem ser ignoradas, seguidas pelo pedido de parâmetros do JES:
*02 $HASP426 SPECIFY OPTIONS – HASP-II, VERSION JES2 4.1
É então preciso fazer uma inicialização “a frio” do JES, formatando o spool:
02, format, noreq
* Atenção: Na próxima vez que iniciar o MVS, use o comando r warm, noreq – isto irá inicializar o JES “a quente”.
Ao rodar este comando, o console vai estar cheio. Na parte de baixo do console será exibido “MESSAGE WAITING”. Para limpar o console, use o comando:
k
O sistema irá exibir “K E,1,9”, pressione
*03 $HASP479 UNABLE TO OBTAIN CKPT DATA SET LOCK – IO ERROR –
* REPLY Y OR N TO CONTINUE
Responda com:
r 03,y
Isto irá gerar outra mensagem:
*04 $HASP436 REPLY Y OR N TO CONFIRM CHECKPOINT RECORD CHANGE
Responda com:
r 04,y
* Atenção: Estes dois últimos comandos só serão necessários na primeira inicialização do MVS.
O JES está iniciado e pronto para rodar:
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
O próximo passo é iniciar o VTAM:
s net
Uma lista de mensagens irá aparecer:
$HASP100 NET ON STCINRDR
– $HASP373 NET STARTED
IST025I BLDL FAILED FOR IEDIAE IN VTAMLIB
IST025I BLDL FAILED FOR IEDIAE IN VTAMLIB
IST025I BLDL FAILED FOR IEDIAE IN VTAMLIB
IST025I BLDL FAILED FOR IEDIAE IN VTAMLIB
IST025I BLDL FAILED FOR IEDIAK IN VTAMLIB
IST025I BLDL FAILED FOR IEDIAK IN VTAMLIB
IST110I NETWORK SOLICITOR STARTED
IST093I APPTSO00 ACTIVE
IST093I LCLNSN00 ACTIVE
IST020I VTAM INITIALIZATION COMPLETE
IEA000I 021,IOE,05,0E00,400000000001,,,,21.14.45
IEA000I 022,IOE,05,0E00,400000000001,,,,21.14.46
As mensagens de erro “(…) BLDL FAILED (…)” podem ser ignoradas.
O terceiro emulador de console que foi aberto, neste momento irá mostrar a seguinte mensagem:
THIS TERMINAL IS LOGGED ON TO THE NETWORK SOLICITOR
Chegou a hora do TSO. Volte ao console principal e inicie o TSO com o seguinte comando:
s tso
A seguinte mensagem será exibida:
IKT005I TCAS IS INITIALIZED
Esta distribuição do MVS possui dois usuários de TSO: o padrão é o IBMUSER, mas também existe o SYSPROG que possui todos os privilégios, mas que pode usar mais comandos sem necessidade de armazenamento.
No terceiro console, rode:
LOGON IBMUSER
Você está pronto para usar o TSO.
Desligando a máquina
Para desligar o MVS, como no Linux, é preciso antes parar os serviços instalados. Utilize o console principal para rodar os comandos. Primeiro pare o TSO:
p tso
O console irá perguntar sobre as opções de finalização. Responda com o comando:
r nn,u (nn é o número da resposta)
Depois que o TSO estiver finalizado, pare o VTAM:
z net,quick
Depois de algum tempo a mensagem “IST102I VTAM IS NOW INACTIVE” irá confirmar a finalização do VTAM.
Em seguida, pare o JES2:
$pjes2
A mensagem “ $HASP085 JES2 TERMINATION COMPLETE” irá confirmar a sua finalização.
E, por último, “feche” o MVS com o comando:
z eod
Próximos desafios
Espero em breve continuar este how-to com um guia de instalação do RPF no MVS. O RPF é uma implementação open-source parecida com a proprietária ISPF.
Comentários? Dicas?
Se você usou este documento para instalar o Hercules, mande-me um e-mail ou adicione um comentário ao tópico.
Deixe um comentário