その1:メインフレームOSのシステム生成がやってみたい！:MVSスタータシステムの構築

# メインフレームOSのシステム生成がやってみたい！やってみた！できた！以下そのやり方。
前回の記事「[メインフレームOSをCent OS下で動かす](http://qiita.com/madilloar/items/7966d6191924e13483ec) 」でHerculesエミュレータをインストールし、このエミュレータ上でメインフレームOSのMVS3.8Jをインストールして動かしました。
しかし、インストールとはいっても、やっていることは、ディスクイメージを所定のディレクトリにコピーしているようなものなので、手っ取り早いけれど、これじゃない感ありありです。

やはり、メインフレームOSのシステム生成、System Generation(通称SYSGEN)をすごくやってみたいです。ということで、以下チャレンジしてみました。

最初のチャレンジでは、[前回記事](http://qiita.com/madilloar/items/7966d6191924e13483ec)で利用した、「[The MVS Tur(n)key System, Version 3](http://www.bsp-gmbh.com/turnkey/index.html)」の、「[Installing the Sysgen System](http://www.bsp-gmbh.com/turnkey/cookbook/inst_ls.html)」に従ってSYSGENにチャレンジしていたのですが、記述通りにやってもできないところがいくつかあり、最後、どうしても解決できないABENDがあり挫折しました。[*脚注1](#脚注1)

しばらく、悶々としていたのですが、あれこれググって、上手くいく手順を見つけました。さらにこの手順に若干のアレンジを加えたものも上手くいったので、今回はそのアレンジの方で紹介します。
ベースとなっている手順は、「[Installing MVS 3.8](http://www.jaymoseley.com/hercules/installMVS/install.htm)」です。

アレンジは、圧縮形式のDASDを生成し、これにMVS3.8Jをインストールするというものです。ベースの手順ではスピードとディスクのトレードオフからスピード重視を基本的な考え方として、非圧縮のDASDにインストールしています。
非圧縮形式で一度インストールしてうまくいきましたので、圧縮形式で試してみたのが今回のアレンジです(私のVirtualBox環境のディスクがカツカツだったというのもありますが・・・)。

# ところで、システム生成(System Generation(SYSGEN)って何？
[System Generation (OS)](https://en.wikipedia.org/wiki/System_Generation_(OS))より抜粋と意訳。
IBMは、単にテープからディスクにシステムを復元するためのメカニズムを提供するのではなく、システム生成プロセスを提供しなければならない、いくつかの理由がありました。

System/360は自己識別I/​​Oデバイスを持っていないため、顧客が任意のアドレスでI/Oデバイスのインストールができました。

意訳：自己識別I/​​Oデバイス(self-identifying I/O devices)ってなんだ？たぶん、当時はメモリやディスクをぶっ差したら自動的に認識してくれるようなお便利な仕組みがなかったのだと思います。
そのため、どのアドレスにどのI/Oデバイスを接続するのか、顧客自らが決定して接続していたのだと思います。

その結果、IBMは、OS/360へI/O構成を定義するメカニズムを顧客に提供しなければなりませんでした。
また、OS/360は、いくつかの異なるインストールオプションがサポートされていましたが、顧客固有のインストールに必要なオプションを選択するための方法が必要でした。
顧客の本番環境での使用を意図して、設定済みの完成したドライバを提供するのではなく、OSの制御下でSYSGENプロセスを一連のジョブとして実行し、システムを生成します。


# 事前準備
## Herculesエミュレータのインストール
前回の記事「[メインフレームOSをCent OS下で動かす](http://qiita.com/madilloar/items/7966d6191924e13483ec) 」を参照のこと。

## MVSスターターシステムとMVS3.8Jディストリビューションの入手
### MVSスターターシステムの入手
「[MVSスターターシステムのテープ](http://www.jaymoseley.com/hercules/downloads/archives/vs2StartTapes.rar)」（6.6メガバイト）[MD5：3504f627f4bb6ec0a6c46a3ced6c8cf4]。
このRAR形式の圧縮ファイルの中に「vs2start.het」テープイメージと「vs2spool.het」テープイメージがあります。

このMVSスターターシステムは、MVS3.7のシステムです。スターターシステムは２本のテープイメージで構成されており、その内訳は、
(1)スタンドアロンのDASDの初期化プログラム
(2)DASDにテープダンプを復元するスタンドアロンプログラム
(3)およびDASDボリュームのテープ・ダンプ
が含まれます。

### MVS3.8Jディストリビューションの入手
「[MVS3.8Jディストリビューション](http://www.jaymoseley.com/hercules/downloads/archives/mvs38distTapes.rar)」（17.8メガバイト）[MD5：0e793cacf886b32be4295987ddc781ff]。
このRAR形式の圧縮ファイルの中に「product.het」テープイメージと「smp4b.het」テープイメージがあります。(md5.txtも入っていますが説明するまでもないので)
この２本テープイメージの内訳は、
(1)MVSの3.8jの製品ライブラリ
(2)システム修正変更プログラム（SMP）ロード・モジュールとプロシージャ
が含まれています。

### インストールスクリプトやインストールJCL類 の入手
「[インストールスクリプトやインストールJCL類](http://www.jaymoseley.com/hercules/downloads/archives/installmvs.rar)」（14.9メガバイト）[MD5：26c9b7d4ea4da3b41099e6e067482fb5]。
このRAR形式の圧縮ファイルの中には、インストールに必要なスクリプトやJCL、パッチのテープイメージなどが入っていますが、例の「nc.exe」、つまりnetcatが含まれています。このため、[前回記事](http://qiita.com/madilloar/items/7966d6191924e13483ec)でもありましたが、ダウンロードするとウィルスチェックに引っかかると思います。[前回記事](http://qiita.com/madilloar/items/7966d6191924e13483ec)同様に無くてよいプログラムなので取り除きます。

### コンパイラやツール類の入手
「[コンパイラやツール類](http://www.jaymoseley.com/hercules/downloads/archives/SYSCPK.tar.gz)」（11.9メガバイト）［MD5: b38ac0345f15b0b62ea24306044abd13］。
「[RPF:ロブ・プリンス・プログラミングファシリティ](http://www.jaymoseley.com/hercules/downloads/archives/rpf153.tgz)」（1.3メガバイト）［MD5: 7867333254f345da1434b4f4211806fe]。

### RPF：ロブ・プリンス・プログラミングファシリティって何？
「wikipedia:[ISPF (Interactive System Productivity Facility)](https://ja.wikipedia.org/wiki/ISPF)」によく似たインターフェースのフリーのデータセットツール類、スクリーンエディタです。
ISPFはIBM製品なのでインストールできないので、これをインストールします。

# MVSスタータシステムの構築
## ディレクトリ構成
次のディレクトリ構成を前提としたインストールになります。

```text:
hercules
  +-mvs
    +-conf
    +-dasd
    +-jcl
    +-sajob
    +-tape
```

次のコマンドを順に叩き、前提としたディレクトリ構成を構築し、スクリプトやテープイメージを配置していきます。

```bash:
$ pwd
/home/hercules
$ mkdir mvs
$ cd mvs
$ wget http://www.jaymoseley.com/hercules/downloads/archives/vs2StartTapes.rar
$ wget http://www.jaymoseley.com/hercules/downloads/archives/mvs38distTapes.rar
$ wget http://www.jaymoseley.com/hercules/downloads/archives/installmvs.rar
$ wget http://www.jaymoseley.com/hercules/downloads/archives/SYSCPK.tar.gz
$ wget http://www.jaymoseley.com/hercules/downloads/archives/rpf153.tgz
$ unrar x installmvs.rar
$ rm nc.exe
$ unrar x mvs38distTapes.rar
$ unrar x vs2StartTapes.rar
$ mv *.het ./tape
$ tar xvfz SYSCPK.tar.gz
$ tar xvfz rpf153.tgz 
$ chmod u+x ./create.dasd.sh ./condcode.pl
```

## アレンジ
アレンジは、圧縮形式のDASDを生成し、これにMVS3.8Jをインストールするというものです。「[ベースの手順](http://www.jaymoseley.com/hercules/installMVS/install.htm)」では非圧縮のDASDにインストールしますが、アレンジでは圧縮形式にします。

```bash:DASD生成スクリプトを修正し、dasdiniコマンドライン引数に"-z"を追加し、圧縮形式のDASDで生成できるようにします。
$ pwd
/home/hercules/mvs
$ cp -p create.dasd.sh create.dasd.sh.org
$ sed -i -e 's/dasdinit -a/dasdinit -a -z/g' create.dasd.sh
$ diff create.dasd.sh.org create.dasd.sh
38c38
< dasdinit -a start1.3330 3330 111111
---
> dasdinit -a -z start1.3330 3330 111111

以下省略

```

```bash:コンパイラ・ツール類のDASDを圧縮形式のDASDにコピーして、非圧縮形式の方を削除します。
$ pwd
/home/hercules/mvs
$ cd dasd
$ dasdcopy -z syscpk.3350 syscpk.3350.z
$ rm syscpk.3350
$ mv syscpk.3350.z syscpk.3350
$ chmod 640 syscpk.3350
```
# MVSスターターシステムの構築
## DASDボリュームの作成
「**<font color="red">./create.dasd.sh starter</font>**」で、MVSスタータシステム用のDASDボリュームの「dasd/start1.3330」、「spool0.3330 」の2つを作ります。

```
$ pwd
/home/hercules/mvs
$ ./create.dasd.sh starter
This script creates DASD volumes for MVS 3.8j.
Changed directory to: /home/hercules/mvs/dasd
HHCDU044I Creating 3330 volume 111111: 411 cyls, 19 trks/cyl, 13312 bytes/track
HHCDU041I 411 cylinders successfully written to file start1.3330
HHCDI001I DASD initialization successfully completed.
HHCDU044I Creating 3330 volume 111111: 411 cyls, 19 trks/cyl, 13312 bytes/track
HHCDU041I 411 cylinders successfully written to file spool0.3330
HHCDI001I DASD initialization successfully completed.
Script completed successfully!
```

## DASDボリュームの初期化とスターターシステムをテープからリストア
2本のテープイメージ(vsstart.hetとvsspool.het)は、MVSスターターシステムを実行するために必要な2つのDASDボリューム(start1とspool)のダンプが含まれています。
これらのテープには、2つのプログラムがあり、一つは、DASD初期化プログラム「DASDI ver7.80」であり、もう一つは、ダンプリストアプログラム「DUMP/RESTORE ver7.83」です。

上記で作成した2つのDASDボリュームを初期化する、DASD初期化プログラムと、テープからMVSスタータプログラムのダンプをリストアする、ダンプリストアプログラムをロードするためにHeraculesを利用しています。

プログラムがロードできたら、初期化されたDASDボリュームにテープからテープに格納されている、MVSスタータシステムのダンプイメージをリストアします。

次の図は、Heracules設定ファイル「ibcdmprs.cnf」に定義している各I/Oデバイスのアドレスの関係を表しています。

![image](https://qiita-image-store.s3.amazonaws.com/0/76786/a5428e51-3c01-3be4-ef92-a76923644747.png)




TeraTermからsshでherculesユーザで2つログインします。一つはHerculesエミュレータ画面用、もう一つはマスタコンソール画面用です。

Herculesエミュレータ画面で「**<font color="red">hercules -f conf/ibcdmprs.cnf</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力すると、次のような画面になります。

```bash:Herculesエミュレータ画面
$ pwd
/home/hercules/mvs
$ hercules -f conf/ibcdmprs.cnf

省略

HHCCF065I Hercules: tid=B77876D0, pid=4002, pgid=4002, priority=0
HHCTE001I Console connection thread started: tid=B74FFB70, pid=4002
HHCDA020I dasd/start1.3330 cyls=411 heads=19 tracks=7809 trklen=13312
HHCTE003I Waiting for console connection on port 3270
HHCDA020I dasd/spool0.3330 cyls=411 heads=19 tracks=7809 trklen=13312
HHCTA004I 0280: tape/vs2start.het is a Hercules Emulated Tape file
HHCTA004I 0281: tape/vs2spool.het is a Hercules Emulated Tape file
HHCTT002I Timer thread started: tid=B68FBB70, pid=4002, priority=0
HHCCP002I CPU0000 thread started: tid=B69FCB70, pid=4002, priority=15
HHCCP003I CPU0000 architecture mode S/370
HHCPN001I Control panel thread started: tid=B77876D0, pid=4002
HHCAO001I Hercules Automatic Operator thread started;
          tid=B6569B70, pri=0, pid=4002
Command ==>
CPU0000 PSW=0000000000000000 24M.......                              instcount=0
```
Herculesエミュレータは、I/Oデバイスアドレス0x0009で、ポート番号3270で接続を待っている状態です。
この状態になってから、マスタコンソール画面で、「**<font color="red">tenlet localhost 3270</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力すると、次のような画面になります。3270エミュレータはまだ使えないので、telnetで接続します。

```bash:マスタコンソール画面
$ pwd
/home/hercules/mvs
$ telnet localhost 3270
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hercules version 3.12 built on May 15 2016 11:28:26
running on localhost.localdoma (Linux-2.6.32-573.26.1.el6.#1 SMP Tue May 3 21:55:43 UTC 2016 i686 UP)
Connected to device 0:0009
```

Herculesエミュレータ画面 に切り替えると、こちらにも0x0009に接続されたとメッセージが表示されます。
Herculesエミュレータ画面で「**<font color="red">ipl 280</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
HHCTE009I Client 127.0.0.1 connected to 1052 device 0:0009
Command ==> ipl 280
CPU0000 PSW=0000000000000000 24M....... instcount=0
```
これは、Heracules設定ファイル「ibcdmprs.cnf」で定義されている、

```text:
「0280    3420    tape/vs2start.het 」
```

からの実行を意味し、I/Oデバイスのアドレス0x280でエミュレートされているテープイメージ(tape/vs2start.het)の先頭に配置してあるDASD初期化プログラムをロードして実行するようにHerculesエミュレータに指示していることになります。

すると次のような画面になります。
画面下部に表示されたプログラム・ステータス・ワード末尾四桁が、「**<font color="red">FFFF</font>**」になることを確認します。

```bash:Herculesエミュレータ画面
HHCTE009I Client 127.0.0.1 connected to 1052 device 0:0009
ipl 280
Command ==>
CPU0000 PSW=FF0600808000FFFF 24..W.....                         instcount=71,451
```

マスタコンソール画面を開き、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
Connected to device 0:0009
```

すると、次のような画面になります。

```bash:マスタコンソール画面
Connected to device 0:0009

IBC105A DEFINE INPUT DEVICE. DASDI 7.80
HHCTE006A Enter input for console device 0009
```

DASD初期化プログラムの「DASDI」はI/Oデバイス0x0009からの入力を待っているので、「**<font color="red">input=1442,00c</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
Connected to device 0:0009
IBC105A DEFINE INPUT DEVICE. DASDI 7.80
HHCTE006A Enter input for console device 0009
input=1442,00c
```

この入力は、「ibcdmprs.cnf」に記述されている 次の文の実行します。
これは、I/Oデバイスアドレス0x00c(カードリーダデバイス)から「instart1.sajob」を実行することになります。

```text:
「000C 1442 sajobs/instart1.sajob」
```

すると、次のような画面になります。

```bash:マスタコンソール画面
Connected to device 0:0009
IBC105A DEFINE INPUT DEVICE. DASDI 7.80
HHCTE006A Enter input for console device 0009
input=1442,00c
IBC105A  DEFINE INPUT DEVICE. DASDI  7.80
                    DASDI  7.80
START1 JOB 'INITIALIZE MVS STARTER SYSTEM RES VOLUME'
       MSG TODEV=1052,TOADDR=009
       DADEF TODEV=3330,TOADDR=150,IPL=NO,VOLID=111111,BYPASS=YES
       VLD NEWVOLID=START1,OWNERID=HERCULES
       VTOCD STRTADR=1,EXTENT=5
       END
IBC163A  END OF JOB.
IBC202A INTERV. REQUIRED  00C 02 0E00   4010 0000  3800                         
IBC154A  READY READER 00C.  DEPRESS INTERRUPT KEY.
```

Herculesエミュレータ画面を開きます。
すると、次のような画面になっています。
プログラム・ステータス・ワードの末尾四桁が「**<font color="red">1111</font>**」になっていることを確認します。これは、I/Oデバイスアドレス0x00cのカードリーダからJOBを読み込んで実行し、スターターシステムをリストアするDASDの初期化が完了したことを示しています。

```bash:Herculesエミュレータ画面
HHCCP048I 000C:CCW=020003F1 20000050=>00000000 00000000 00000000 00000000 ......
HHCCP075I 000C:Stat=0E00 Count=0050 =>00000000 00000000 00000000 00000000 ......
HHCCP076I 000C:Sense=40100000 00000000 00000000 00000000 00000000 00000000
HHCCP077I 000C:Sense=INTREQ MSG
Command ==>
CPU0000 PSW=0106000080001111 24..W.....                        instcount=678,449
```
Herculesエミュレータ画面のコマンドプロンプトに「**<font color="red">stop</font>**」と入力し「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
HHCCP077I 000C:Sense=INTREQ MSG
Command ==> stop
CPU0000 PSW=0106000080001111 24..W..... instcount=678,449
```

次に、コマンドプロンプトに「**<font color="red">ipl 280</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。


```bash:Herculesエミュレータ画面
HHCCP077I 000C:Sense=INTREQ MSG
stop
Command ==> ipl 280
CPU0000 PSW=0106000080001111 24M.W.....                        instcount=678,449
```

これは、先ほどのDASD初期化プログラムのロードと同じように、今度はリストアプログラムをロードします。
プログラム・ステータス・ワードの末尾四桁が「**<font color="red">FFFF</font>**」であることを確認します。

```bash:Herculesエミュレータ画面
ipl 280
Command ==>
CPU0000 PSW=FF0600808000FFFF 24..W.....                         instcount=58,036
```

マスターコンソール画面に切り替えます。

```bash:マスタコンソール画面
IBC163A END OF JOB.
IBC202A INTERV. REQUIRED 00C 02 0E00 4010 0000 3800
IBC154A READY READER 00C. DEPRESS INTERRUPT KEY.
```

「**<font color="red">Enter</font>**」キーを入力します。すると次のような画面になり、リストアプログラムの「DUMP/RESTORE」はI/Oデバイス0x0009からの入力を待っています。

```bash:マスタコンソール画面
IBC105A DEFINE INPUT DEVICE. DUMP/RESTORE 7.83
HHCTE006A Enter input for console device 0009
```

ここで、「**<font color="red">input=1442,00d</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
IBC105A DEFINE INPUT DEVICE. DUMP/RESTORE 7.83
HHCTE006A Enter input for console device 0009
input=1442,00d
```

Hercules設定ファイルの「ibcdmprs.cnf」の次の行「000D    1442    sajobs/rsstart1.sajob」の「rsstart1.sajob 」ジョブをI/Oデバイスアドレス0x00dのカードリーダから読み込んで実行します。

```bash:マスタコンソール画面
IBC105A DEFINE INPUT DEVICE. DUMP/RESTORE 7.83
                    DUMP/RESTORE 7.83
START1 JOB 'RESTORE MVS STARTER SYSTEM RES VOLUME'
       MSG TODEV=1052,TOADDR=009
       RESTORE FROMDEV=3400,FROMADDR=280,TODEV=3330,TOADDR=150,
               VOLID=START1
       END
IBC163A  END OF JOB.
```

Herculesエミュレータ画面に切り替えます。すると、次の様な画面になっています。
プログラム・ステータス・ワード末尾四桁が「**<font color="red">EEEE</font>**」であることを確認します。
これは、DUMP/RESTOREプログラムがDASDにスターターシステムをリストア完了したことを示しています。

```bash:Herculesエミュレータ画面
ipl 280
HHCCD001I Readahead thread 1 started: tid=B5C60B70, pid=4012
HHCCD001I Readahead thread 2 started: tid=B5B5FB70, pid=4012
Command ==>
CPU0000 PSW=000600008000EEEE 24..W.....                    instcount=760,926,340
```

ここまでで、「dasd/start1.3330」DASDの初期化とリストアまでが終わりました。
次は、「dasd/spool0.3330」DASDの初期化とリストアです。
Herculesエミュレータ画面のコマンドプロンプトに「**<font color="red">stop</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> stop
CPU0000 PSW=000600008000EEEE 24..W.....                  instcount=1,196,792,748
```
次に、Herculesエミュレータ画面のコマンドプロンプトに「**<font color="red">ipl 281</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
stop
Command ==> ipl 281
CPU0000 PSW=000600008000EEEE 24M.W.....                  instcount=1,196,792,748
```

プログラム・ステータス・ワード末尾四桁が「**<font color="red">FFFF</font>**」であることを確認します。

```bash:Herculesエミュレータ画面
stop
ipl 281
Command ==>
CPU0000 PSW=FF0600808000FFFF 24..W.....                         instcount=71,343
```

マスタコンソール画面に切り替えます。

```bash:マスタコンソール画面
  END
IBC163A END OF JOB.
```

「**<font color="red">Enter</font>**」キーを入力します。すると、入力待ち状態になります。

```bash:マスタコンソール画面
IBC105A  DEFINE INPUT DEVICE. DASDI  7.80
HHCTE006A Enter input for console device 0009
```

「**<font color="red">input=1442,00e</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
IBC105A  DEFINE INPUT DEVICE. DASDI  7.80
HHCTE006A Enter input for console device 0009
input=1442,00e
```

これは、「Herculesエミュレータ設定ファイル」の「ibcdmprs.cnf」の「000E 1442 sajobs/inspool0.sajob」の「inspool0.sajob」をI/Oデバイスアドレスの0x00eのカードリーダデバイスからDASD初期化プログラムの「DASDI」を読み込んで実行します。

```bash:マスタコンソール画面
                    DASDI  7.80
SPOOL0 JOB 'INITIALIZE MVS STARTER SYSTEM SPOOL VOLUME'
       MSG TODEV=1052,TOADDR=009
       DADEF TODEV=3330,TOADDR=151,IPL=NO,VOLID=111111,BYPASS=YES
       VLD NEWVOLID=SPOOL0,OWNERID=HERCULES
       VTOCD STRTADR=1,EXTENT=5
       END
IBC163A  END OF JOB.
IBC202A INTERV. REQUIRED  00E 02 0E00   4010 0000  3100                         
IBC154A  READY READER 00E.  DEPRESS INTERRUPT KEY.
```

Herculesエミュレータ画面に切り替えます。すると、次の様な画面になっています。
プログラム・ステータス・ワード末尾四桁が「**<font color="red">1111</font>**」であることを確認します。
これは、I/Oデバイスアドレス0x00eのカードリーダからJOBを読み込んで実行し、スターターシステムをリストアするDASDの初期化が完了したことを示すています。

```bash:Herculesエミュレータ画面
ipl 281
HHCCP048I 000E:CCW=020003F1 20000050=>00000000 00000000 00000000 00000000 ......
HHCCP075I 000E:Stat=0E00 Count=0050 =>00000000 00000000 00000000 00000000 ......
HHCCP076I 000E:Sense=40100000 00000000 00000000 00000000 00000000 00000000
HHCCP077I 000E:Sense=INTREQ MSG
Command ==>
CPU0000 PSW=0106000080001111 24..W.....                      instcount=1,819,625
```

「**<font color="red">stop</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> stop
CPU0000 PSW=0106000080001111 24..W.....                      instcount=1,819,625
```

次に、「**<font color="red">ipl 281</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
プログラム・ステータス・ワード末尾四桁が「**<font color="red">FFFF</font>**」であることを確認します。

```bash:Herculesエミュレータ画面
stop
Command ==> ipl 281
CPU0000 PSW=FF0600808000FFFF 24..W.....                         instcount=58,036
```

マスタコンソール画面」に切り替えます。

```bash:マスタコンソール画面
IBC163A END OF JOB.
IBC202A INTERV. REQUIRED 00E 02 0E00 4010 0000 3100
IBC154A READY READER 00E. DEPRESS INTERRUPT KEY.
```

「**<font color="red">Enter</font>**」キーを入力すると、次のよう画面になり、入力待ち状態になっています。

```bash:マスタコンソール画面
IBC105A DEFINE INPUT DEVICE. DUMP/RESTORE 7.83
HHCTE006A Enter input for console device 0009
```

「**<font color="red">input=1442,00f</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
IBC105A DEFINE INPUT DEVICE. DUMP/RESTORE 7.83
HHCTE006A Enter input for console device 0009
input=1442,00f
```

Hercules設定ファイルの「ibcdmprs.cnf」の次の行「000F    1442    sajobs/rsspool0.sajob」の「rsspool0.sajob 」ジョブをI/Oデバイスアドレス0x00fのカードリーダから読み込んで実行します。

```bash:マスタコンソール画面
                    DUMP/RESTORE 7.83
SPOOL0 JOB 'RESTORE MVS STARTER SYSTEM SPOOL VOLUME'
       MSG TODEV=1052,TOADDR=009
       RESTORE FROMDEV=3400,FROMADDR=281,TODEV=3330,TOADDR=151,
               VOLID=SPOOL0
       END
IBC163A  END OF JOB.
```

Herculesエミュレータ画面に切り替えます。すると、次の様な画面になっています。
プログラム・ステータス・ワード末尾四桁が「**<font color="red">EEEE</font>**」であることを確認します。
これは、DUMP/RESTOREプログラムがDASDにスターターシステムをリストア完了したことを示しています。

```bash:Herculesエミュレータ画面
stop
ipl 281
Command ==>
CPU0000 PSW=000600008000EEEE 24..W.....                  instcount=1,910,855,520
```

これで、DASDボリュームの初期化とMVSスターターシステムのリストアが完了しました。
Herculesエミュレータ画面のコマンドラインで「**<font color="red">quit</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力して終了します。

```bash:Herculesエミュレータ画面
stop
ipl 281
Command ==> quit
CPU0000 PSW=000600008000EEEE 24..W.....                  instcount=1,910,855,520
```

```bash:Herculesエミュレータ画面
quit
HHCIN900I Begin Hercules shutdown
HHCIN901I Releasing configuration
HHCAO002I Hercules Automatic Operator thread ended
HHCCP008I CPU0000 thread ended: tid=B68FCB70, pid=4012
HHCTT003I Timer thread ended
HHCCF047I Subchannel 0:0000 detached
HHCCF047I Subchannel 0:0001 detached
HHCCF047I Subchannel 0:0002 detached
HHCCF047I Subchannel 0:0003 detached
HHCCF047I Subchannel 0:0004 detached
HHCCD210I           size free  nbr st   reads  writes l2reads    hits switches
HHCCD211I                                                  readaheads   misses
HHCCD212I --------------------------------------------------------------------
HHCCD213I [*]    4693775   0%    0         19    8352       1     299    10499
HHCCD214I                                                         293        2
HHCCD215I dasd/start1.3330
HHCCD216I [0]    4693775   0%    0 rw      19    8352       1
HHCCF047I Subchannel 0:0005 detached
HHCCD210I           size free  nbr st   reads  writes l2reads    hits switches
HHCCD211I                                                  readaheads   misses
HHCCD212I --------------------------------------------------------------------
HHCCD213I [*]    3129206   8%    3         90   11012       1     300    13159
HHCCD214I                                                         295        3
HHCCD215I dasd/spool0.3330
HHCCD216I [0]    3129206   8%    3 rw      90   11012       1
HHCCD011I Readahead thread 2 stopping: tid=B5B5FB70, pid=4012
HHCCD011I Readahead thread 1 stopping: tid=B5C60B70, pid=4012
HHCCD013I Garbage collector thread stopping: tid=B5F63B70, pid=4012
HHCCD012I Writer thread 2 stopping: tid=B6266B70, pid=4012
HHCCD012I Writer thread 1 stopping: tid=B6367B70, pid=4012
HHCCF047I Subchannel 0:0006 detached
HHCCF047I Subchannel 0:0007 detached
HHCCF047I Subchannel 0:0008 detached
HHCIN902I Configuration release complete
HHCIN903I Calling termination routines
HHCHD900I Begin shutdown sequence
HHCHD901I Calling panel_cleanup
HHCTE004I Console connection thread terminated
HHCHD902I logger_term complete
HHCHD909I Shutdown sequence complete
HHCIN904I All termination routines complete
HHCIN909I Hercules shutdown complete
HHCIN099I Hercules terminated
HHCHD900I Begin shutdown sequence
HHCHD909I Shutdown sequence complete
$ 
```

## スナップショットの取得
この先の作業で、何らかのエラーが発生したときに戻れる地点を作るために、ここで、ディレクトリをtarで固めておく。

```bash:Herculesエミュレータ画面
$ pwd
/home/hercules
$ tar cvfj mvs.01.tar.bz2 ./mvs
```

### 脚注1
例えば、「makeadisk」スクリプト内に記述されている「ckd2cckd」のコマンドライン引数が古いバージョンのコマンドライン引数で記述されているため、「MVSDLB」DASDの生成がエラーで作れなかったり(これはググって解決できましたが)、一番の謎は、「SG0030」JCLで「MVSDLB」DASD にデータセットを生成するのですが、容量不足でABENDしてしまうのです。「SG0030」JCLを修正して、初期割り当て量を"1"にして、とりあえずデータセット生成を成功させることはできるのですが、今度は「SG0040」JCLでこれらのデータセットにMVS3.8Jディストリビューションテープからライブラリをコピーしようとすると、容量不足でABENDしてしまいました。容量不足になるところを増やして他は減らしてとモグラたたきを繰り返しましたが、根本的にDASDの生成と割り当てがあっていないようなので、この手順はあきらめました。