DockerでメインフレームOSを動かす(マスターコンソール起動)

メインフレームOSのマスターコンソールで入力するようなコマンドは、Hercules HTTPサーバ(``localhost:8038``)にアクセスすれば入力できるのですが、3270エミュレータでマスターコンソールに接続したくなったので、以下覚書。

# 3270エミュレータでマスターコンソールに接続できる設定をする
ホスト側で次のコマンドを入力してコンテナに入ります。

```
docker-compose run --rm turnkey4 bash -p
```

コンテナ側で次のコマンドでマスターコンソールモードの設定をします。

```bash
/opt/turnkey4/unattended/set_console_mode
```

を入力します。

``` bash
Hercules console mode activated for unattended operations (mvs.bat)
Press any key to continue...
```

と表示されますので、何かキーを入力します。

コンテナ側で次のコマンドで正しく設定されたか確認します。

```
cat /opt/turnkey4/unattended/mode
```

``CONSOLE``と表示さればOKです。

```
CONSOLE
```

```
exit
```
でコンテナから抜けます。

# マスターコンソールに3270エミュレータで接続してみる

## メインフレームOSの起動

ホスト側でコンテナを起動します。

```
docker-compose up -d
```

ホスト側で次のコマンドを入力して、メインフレームOSの実行ログを表示してOSが起動したか確認します。

```
docker exec -it prj_turnkey4_turnkey4_1 bash -c 'tail -f /opt/turnkey4/log/3033.log'
```

次が表示されたら起動完了です。

```
HHC01603I *
HHC01603I *                           ************   ****  *****          ||
HHC01603I *                           **   **   **    **    **           |||
HHC01603I *                           **   **   **    **   **           ||||
HHC01603I *                                **         **  **           || ||
HHC01603I *        |l      _,,,---,,_      **         ** **           ||  ||
HHC01603I * ZZZzz /,'.-'`'    -.  ;-;;,    **         ****           ||   ||
HHC01603I *      |,4-  ) )-,_. ,( (  ''-'  **         *****         ||    ||
HHC01603I *     '---''(_/--'  `-')_)       **         **  **       ||     ||    ||||||||||
HHC01603I *                                **         **   **      |||||||||||  Update 08
HHC01603I *       The MVS 3.8j             **         **    **            ||
HHC01603I *     Tur(n)key System           **         **     **           ||
HHC01603I *                              ******      ****     ***       ||||||
HHC01603I *
HHC01603I *            TK3 created by Volker Bandke       vbandke@bsp-gmbh.com
HHC01603I *            TK4- update by Juergen Winkelmann  winkelmann@id.ethz.ch
HHC01603I *                     see TK4-.CREDITS for complete credits
HHC01603I *
HHC02264I Script 5: file scripts/tk4-.rc processing ended
```

## マスターコンソール用デバイス番号の10番に接続できるようにする

Webブラウザを立ち上げ、Hercules HTTPサーバ(``localhost:8038``)にアクセスします。

``Command:``テキストボックスに
```
attach 010 3270 CONS
```

を入力し、``Send``ボタンをクリックします。これはデバイス番号``010``に3270エミュレータで接続できるようにするおまじないです。

次にホスト側でマスターコンソールに3270エミュレータで接続するコマンドをたたきます。

```
./cons.sh
```

中身はこんな感じ。``10@localhost:3270``の``10@``の所に注目してください。これが上記のデバイス番号``010``と対応しています。

```bash
#!/bin/sh
export TERM=xterm_my
c3270 -charset us-intl -model 3279-2 -keymap c3270.keymap 10@localhost:3270
```

``./cons.sh``をたたいた後は、次のような画面が表示されます。``Device number``に注目してください。``0:0010``となっていて、上記のデバイス番号``010``と対応しています。

```
File      Options   Keypad

 Hercules Version  : 4.00
 Host name         : 47c973fd15e2
 Host OS           : Linux-5.10.102.1-microsof #1 SMP Wed Mar 2 00:30:59 UTC 202
 Host Architecture : x86_64
 Processors        : MP=4
 LPAR Name         : HERCULES
 Device number     : 0:0010
```


次にWebブラウザ側のHercules HTTPサーバ(``localhost:8038``)に戻り、``Command:``テキストボックスに

```
/v 010,console,auth=all
```
を入力し、``Send``ボタンをクリックします。


ホストOS側のマスターコンソール画面を見て、次のような画面が表示されればOKです。

```
  IEE152I     ENTER     CANCEL     D C,K


  IEE163I MODE= RD
```

ホスト側でbashを起動し、``Hello World!``を表示するJCLを次のコマンドでメインフレームOSに投入してみます。

```
./hercsub localhost:3505 hellocob.jcl
```

マスターコンロール側に画面を切り替えてみると、次のように``Hello World!``が表示されていればOKです。

```
File      Options   Keypad

      JOB   19  $HASP100 COBOL    ON READER1     MADILLOAR
      JOB   19  IEF677I WARNING MESSAGE(S) FOR JOB COBOL    ISSUED
    - JOB   19  $HASP373 COBOL    STARTED - INIT  1 - CLASS A - SYS TK4-
    - JOB   19  +Hello World!
    - JOB   19  $HASP395 COBOL    ENDED
                $HASP309    INIT  1 INACTIVE ******** C=A
      JOB   19  $HASP150 COBOL    ON PRINTER1       370 LINES
                $HASP160 PRINTER1 INACTIVE - CLASS=A
      JOB   19  $HASP250 COBOL    IS PURGED











  IEE152I     ENTER     CANCEL     D C,K


  IEE163I MODE= RD
```