その3:メインフレームOSのシステム生成がやってみたい！:MVS3.8JのSYSGEN、システム生成の実行


# MVS3.8JのSYSGEN、システム生成の実行
いよいよSYSGEN、システム生成の実行です。以下の手順は約50分です。

## 追加のDASDボリューム作成
「**<font color="red">./create.dasd.sh sysgen</font>**」で、MVSスタータシステム用のDASDボリュームの「dasd/mvsres.3350」、「dasd/mvs000.3350」、「dasd/spool1.3350」、「dasd/page00.3350」の4つを作ります。

それぞれのDASDボリュームの目的は次の通りです。

 * MVSRES.3350 - SYSGENが終わった後のMVS3.8JシステムのIPLのボリューム。
 * MVS000.3350 - MVS3.8Jのための追加のシステム・データセットが含まれています。
 * SPOOL1.3350 - JES2スプールキューデータセットが含まれています。
 * PAGE00.3350 - ページ・データセットが含まれています。

```bash:
$ pwd
/home/hercules/mvs
$ ./create.dasd.sh sysgen
This script creates DASD volumes for MVS 3.8j.
Changed directory to: /home/hercules/mvs/dasd
HHCDU044I Creating 3350 volume 111111: 560 cyls, 30 trks/cyl, 19456 bytes/track
HHCDU041I 560 cylinders successfully written to file mvsres.3350
HHCDI001I DASD initialization successfully completed.
HHCDU044I Creating 3350 volume 222222: 560 cyls, 30 trks/cyl, 19456 bytes/track
HHCDU041I 560 cylinders successfully written to file mvs000.3350
HHCDI001I DASD initialization successfully completed.
HHCDU044I Creating 3350 volume 333333: 560 cyls, 30 trks/cyl, 19456 bytes/track
HHCDU041I 560 cylinders successfully written to file spool1.3350
HHCDI001I DASD initialization successfully completed.
HHCDU044I Creating 3350 volume 444444: 560 cyls, 30 trks/cyl, 19456 bytes/track
HHCDU041I 560 cylinders successfully written to file page00.3350
HHCDI001I DASD initialization successfully completed.
Script completed successfully!
```

## MVSスターターシステムハードウェア構成
今回のハードウェア構成はHercules設定ファイル「sysgen.cnf」の通りなのですが、ここに図示している図と異なっています。

![image](https://qiita-image-store.s3.amazonaws.com/0/76786/573974f0-8c77-a6ff-5ab3-ffb14ccc48c4.png)

この図では、上記で作成した4つのDASDボリュームが表現されています。しかし、Hercules設定ファイル「sysgen.cnf」には、この4つがありません。
これには理由があり、これらのDASDボリュームはMVSスターターシステム上で実行されるユーティリティによって初期化します。そのユーティリティは、DASDボリュームが「**<font color="red">オフライン</font>**」でなければなりません。
このためMVSスターターシステムがIPLされる時には存在できないため、Hercules設定ファイル「sysgen.cnf」には記述していません。

## MVSスターターシステムの起動
TeraTermを3つ立ち上げておきます。一つはHerculesエミュレータ画面用。もう一つはマスタコンソール画面用です。もう一つは、完了コード確認用画面です。

Herculesエミュレータ画面のTeraTermで、「**<font color="red">hercules -f conf/sysgen.cnf</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

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

すると、Herculesエミュレータが実行を開始し、設定ファイルをロードし、次のメッセージが表示されます。

```bash:Herculesエミュレータ画面
HHCCP002I CPU0000 thread started: tid=B69FCB70, pid=2440, priority=15
HHCCP003I CPU0000 architecture mode S/370
HHCPN001I Control panel thread started: tid=B774E6D0, pid=2440
HHCAO001I Hercules Automatic Operator thread started;
          tid=B6569B70, pri=0, pid=2440
Command ==>
CPU0000 PSW=0000000000000000 24M.......                              instcount=0
```

Herculesエミュレータは、Hercules設定ファイルで指定されたI/Oデバイス0x01Fで指定された、コンソールデバイスに接続するTelnetクライアントのセッションを待っています。
マスタコンソール画面用のTeraTermに切り替え、「**<font color="red">telnet localhost 3270</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
$ telnet localhost 3270
```
すると、0x01Fデバイスに接続したとマスタコンソール画面に表示されます。

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

Herculesエミュレータ画面に切り替えると、こちらも同様に接続したと表示されています。

```bash:Herculeエミュレータ画面
HHCTE009I Client 127.0.0.1 connected to 3215 device 0:001F
Command ==>
CPU0000 PSW=0000000000000000 24M.......                              instcount=0
```

次は、スターターシステムのIPLです。Herculeエミュレータ画面に切り替え、コマンドラインに「**<font color="red">ipl 150</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。
これは、I/Oデバイスアドレス0x150の3330 DASDボリュームからMVS 3.7オペレーティングシステムをロードするように指示しています。

```bash:Herculeエミュレータ画面
HHCTE009I Client 127.0.0.1 connected to 3215 device 0:001F
Command ==> ipl 150
CPU0000 PSW=0000000000000000 24M.......                              instcount=0
```

しばらくすると、次のような画面となります。

```bash:Herculeエミュレータ画面
HHCCP048I 0170:CCW=03000000 20000001=>040E0000 0001AB6E 00000000 00000000 ......
HHCCP075I 0170:Stat=0200 Count=0001
HHCCP076I 0170:Sense=40220000 00C00300 00000000 00800100 010000FF FF000000
HHCCP077I 0170:Sense=INTREQ EOC WRI
Command ==>
CPU0000 PSW=070E000000000000 24..W.....                        instcount=531,173
```

マスタコンソール画面に切り替えると、次のように表示されます。

```bash:マスタコンソール画面
Connected to device 0:001F
IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 03.70.VS2
HHCTE006A Enter input for console device 001F
```

メッセージID=IEA101Aは、MVS3.7がロードされたことを示しています。
次に「Enter input console」とありますので、「**<font color="red">r 0,clpa</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します(注意:rとゼロの間は、空白があります)。少し時間がかかります。
「その２」手順の冒頭で、MVSスタータシステムのLPA(リンクパックエリア)を構築しましたが、ここで再び構築しているのは、「その２」手順の後半でいくつかのシステム・ロード・モジュールをリビルドしているので、再構築しています。

しばらくすると、次のようなJES2(Job Entry Subsystem 2)からのメッセージが表示されます。

```bash:マスタコンソール画面
 IEF165I // START JES2
 IEE351I SMF SYS1.MAN RECORDING NOT BEING USED
*00 $HASP426 SPECIFY OPTIONS - HASP-II, VERSION JES2 4.0
```

「**<font color="red">\*00 $HASP426</font>**」の応答要求に対して、前回スプールをフォーマットしたので、「**<font color="red">r 0,noreq</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

しばらくすると、次のような画面になります。

```bash:マスタコンソール画面
*00 $HASP426 SPECIFY OPTIONS - HASP-II, VERSION JES2 4.0
r 0,noreq
 IEE600I REPLY TO 00 IS;SUPPRESSED
 IEE041I THE SYSTEM LOG IS NOW ACTIVE
 $HASP160 PUNCH1   INACTIVE - CLASS=BK
 $HASP125 READER1  SKIPPING FOR JOB CARD
 $HASP150 SYSLOG   ON PRINTER1
 $HASP150 INIT     ON PRINTER1
 $HASP250 SYSLOG   IS PURGED
 $HASP150 INIT     ON PRINTER1
 $HASP250 INIT     IS PURGED
 $HASP100 INIT     ON STCINRDR
 $HASP150 INIT     ON PRINTER1
 $HASP250 INIT     IS PURGED
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 INIT     IS PURGED
 $HASP373 INIT     STARTED
 $HASP100 INIT     ON STCINRDR
 $HASP373 INIT     STARTED
 $HASP100 INIT     ON STCINRDR
 $HASP373 INIT     STARTED
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP309    INIT  2 INACTIVE ******** C=BA
 $HASP309    INIT  3 INACTIVE ******** C=CBA
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
```

以下の手順では、単一の実行空間でジョブを動かしたいので、イニシエータの2と3を止めます。
「**<font color="red">$pi2-3</font>**」入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
$pi2-3
 $HASP000 OK
 $HASP395 INIT     ENDED
 $HASP150 INIT     ON PRINTER1
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 INIT     IS PURGED
 $HASP395 INIT     ENDED
 $HASP150 INIT     ON PRINTER1
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 INIT     IS PURGED
```

これで、MVSスタータシステムは、ジョブおよびサービスオペレータコマンドを処理する準備ができました。
以降の手順で、いくつかのJCLを実行してSYSGENしていきます。

## ハードウェア構成変更(冒頭の4つのDASDボリュームを接続)

Herculesエミュレータが「アクティブ」中にDASDボリュームを追加するには、次のスクリプトをHerculeエミュレータで実行します。
Herculesエミュレータ画面のコマンドラインに、「**<font color="red">script conf/sysgen.script</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculeエミュレータ画面
Command ==> script conf/sysgen.script
CPU0000 PSW=070E000000000000 24..W.....                     instcount=27,309,731
```

すると、次のようなメッセージがHerculesエミュレータ画面に表示され、4つのDASDボリュームが接続されています。

```bash:Herculeエミュレータ画面
script conf/sysgen.script
#
####################################################################
#                HERCULES EMULATOR SCRIPT FILE                     #
####################################################################
#
# use for attaching new dasd volumes during MVS system generation
#
attach 149 3350 dasd/mvsres.3350
HHCDA020I dasd/mvsres.3350 cyls=560 heads=30 tracks=16800 trklen=19456
attach 14a 3350 dasd/mvs000.3350
HHCDA020I dasd/mvs000.3350 cyls=560 heads=30 tracks=16800 trklen=19456
attach 14b 3350 dasd/spool1.3350
HHCDA020I dasd/spool1.3350 cyls=560 heads=30 tracks=16800 trklen=19456
attach 14c 3350 dasd/page00.3350
HHCDA020I dasd/page00.3350 cyls=560 heads=30 tracks=16800 trklen=19456
HHCPN013I EOF reached on SCRIPT file. Processing complete.
Command ==>
CPU0000 PSW=070E000000000000 24..W.....                     instcount=27,560,566
```

## SYSGEN00:ターゲットDASDボリューム初期化とSYSGEN準備(所要時間:20分くらい)
先ほど作成した4つのDASDボリュームに新しいMVS3.8Jシステムがビルドされます。まずは、これらの4つのDASDボリュームを初期化します。

Herculesエミュレータ画面のコマンドプロンプトで、「**<font color="red">devinit 12 jcl/sysgen00.jcl eof</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
HHCPN013I EOF reached on SCRIPT file. Processing complete.
Command ==> devinit 12 jcl/sysgen00.jcl eof
CPU0000 PSW=070E000000000000 24..W.....                     instcount=27,914,015
```

マスタコンソール画面に切り替えると、次のようなメッセージが表示されています。

```bash:マスタコンソール画面
 $HASP100 SYSGEN00 ON READER1
 $HASP373 SYSGEN00 STARTED - INIT  1 - CLASS A - SYS H158
*01 ICK003D REPLY U TO ALTER VOLUME 149 CONTENTS, ELSE T
```

先頭アスタリスク(\*)付きのメッセージID=ICK003Dで、オペレータの応答を待ちになっていると思います。
これは、I/Oデバイスアドレス=0x149のオフラインになっているDASDボリュームの初期化のため、オペレータが所定の容量を持ったDASDボリュームを0x149のアドレスにマウントしているか確認するように要求しています。

ここはマウントしているので(実際にDASDボリュームをよっこらせと取り付けているわけではないですが)、「**<font color="red">r 1,u</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
*01 ICK003D REPLY U TO ALTER VOLUME 149 CONTENTS, ELSE T
r 1,u
 IEE600I REPLY TO 01 IS;SUPPRESSED
```

先頭アスタリスク(\*)付きのメッセージの応答連番が「**<font color="red">01</font>**」じゃないかもしれないですが、その時は、その番号で応答してください。

この後、I/Oデバイスアドレスの0x14a,0x14b,0x14cについて、同様にメッセージID=ICK003Dの応答要求がされます。
それぞれ、「**<font color="red">r 応答連番,U</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力して応えていきます。
すると、次のような画面になります。4つのDASDボリュームが初期化され、オンラインになった旨のメッセージです。

```bash:マスタコンソール画面
*01 ICK003D REPLY U TO ALTER VOLUME 149 CONTENTS, ELSE T
r 1,u
 IEE600I REPLY TO 01 IS;SUPPRESSED
*02 ICK003D REPLY U TO ALTER VOLUME 14A CONTENTS, ELSE T
r 2,u
 IEE600I REPLY TO 02 IS;SUPPRESSED
*03 ICK003D REPLY U TO ALTER VOLUME 14B CONTENTS, ELSE T
r 3,u
 IEE600I REPLY TO 03 IS;SUPPRESSED
*04 ICK003D REPLY U TO ALTER VOLUME 14C CONTENTS, ELSE T
r 4,u
 IEE600I REPLY TO 04 IS;SUPPRESSED
```

先頭アスタリスク(\*)付きのメッセージID=IEF166Dで、オペレータの応答を待ちになっていると思います。「**<font color="red">r 5,y</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
 $HASP100 SYSGEN00 ON INTRDR
 $HASP100 SYSGEN00 ON INTRDR
 IEF165I // V (149,14A,14B,14C),ONLINE
 IEF165I         00006400
*05 IEF166D REPLY Y/N TO EXECUTE/SUPPRESS COMMAND
 $HASP395 SYSGEN00 ENDED
 $HASP150 SYSGEN00 ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 SYSGEN00 IS PURGED
r 5,y
```

4つのDASDボリュームがありますので、引き続き先頭アスタリスク(\*)付きのメッセージID=IEF166Dで、応答待ちになります。
「**<font color="red">r 応答連番,y</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力して応えていきます。

```bash:マスタコンソール画面
 IEE600I REPLY TO 05 IS;Y
 IEE302I 149      ONLINE
 IEE302I 14A      ONLINE
 IEE302I 14B      ONLINE
 IEE302I 14C      ONLINE
 IEF165I // M 149,VOL=(SL,MVSRES),USE=PRIVATE
 IEF165I         00006500
*06 IEF166D REPLY Y/N TO EXECUTE/SUPPRESS COMMAND
r 6,y
 IEE600I REPLY TO 06 IS;Y
 IEF165I // M 14A,VOL=(SL,MVS000),USE=PRIVATE
 IEF165I         00006600
*07 IEF166D REPLY Y/N TO EXECUTE/SUPPRESS COMMAND
 $HASP100 MOUNT    ON STCINRDR
r 7,y
 IEE600I REPLY TO 07 IS;Y
 IEF165I // M 14B,VOL=(SL,SPOOL1),USE=PRIVATE
 IEF165I         00006700
*08 IEF166D REPLY Y/N TO EXECUTE/SUPPRESS COMMAND
 $HASP100 MOUNT    ON STCINRDR
r 8,y
 IEE600I REPLY TO 08 IS;Y
 IEF165I // M 14C,VOL=(SL,PAGE00),USE=PRIVATE
 IEF165I         00006800
*09 IEF166D REPLY Y/N TO EXECUTE/SUPPRESS COMMAND
 $HASP100 MOUNT    ON STCINRDR
r 9,y
 IEE600I REPLY TO 09 IS;Y
 $HASP100 MOUNT    ON STCINRDR
 $HASP373 MOUNT    STARTED
 $HASP395 MOUNT    ENDED
 $HASP150 MOUNT    ON PRINTER1
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 MOUNT    IS PURGED
 $HASP373 SYSGEN00 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP395 SYSGEN00 ENDED
 $HASP150 SYSGEN00 ON PRINTER1
 $HASP373 SYSGEN00 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 SYSGEN00 IS PURGED
 $HASP373 MOUNT    STARTED
 $HASP395 MOUNT    ENDED
 $HASP373 MOUNT    STARTED
 $HASP395 MOUNT    ENDED
 $HASP373 MOUNT    STARTED
 $HASP395 MOUNT    ENDED
 $HASP150 MOUNT    ON PRINTER1
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 MOUNT    IS PURGED
 $HASP150 MOUNT    ON PRINTER1
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 MOUNT    IS PURGED
 $HASP150 MOUNT    ON PRINTER1
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 MOUNT    IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen00</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ pwd
/home/hercules/mvs
$ ./condcode.pl prt00e.txt sysgen00
Searching prt00e.txt for MVS Job Name sysgen00

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
IEHPROGM                      0008 <--
ICKDSF                        0000
IEBGENER                      0000
IEFBR14                       0000
$ 
```

SYSGEN00ジョブのIEHPROGMステップで、完了コード「0008」となっています。これは期待値通りです。
これは、まだ存在しないデータセット(この後の手順で作られる)を削除しようとしているからです。もし、存在していて正常に削除した場合には、完了コードは「0000」です。

4つのDASDボリュームがちゃんとマウントされているか、完了コード確認画面で確認します。
完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt mount</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ pwd
/home/hercules/mvs
$ ./condcode.pl prt00e.txt mount
Searching prt00e.txt for MVS Job Name mount

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
14C                           0000
14A                           0000
14B                           0000
149                           0000
```

## SYSGEN01:ステージ1(所要時間:5分)
SYSGEN01ジョブ(sysgen01.jcl)は、これからビルドするMVS3.8Jシステムのハードウェア構成の仕様がすべて含まれています。

Herculesエミュレータ画面のコマンドラインで、
「**<font color="red">devinit 12 jcl/sysgen01.jcl eof</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> devinit 12 jcl/sysgen01.jcl eof
CPU0000 PSW=070E000000000000 24..W.....                    instcount=406,531,675
```

マスタコンソール画面に切り替えると、次のような画面になります。

```bash:マスタコンソール画面
 $HASP100 SYSGEN01 ON READER1
 $HASP373 SYSGEN01 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP100 SYSGEN01 ON INTRDR
 $HASP395 SYSGEN01 ENDED
 $HASP150 SYSGEN01 ON PRINTER1
 $HASP373 SYSGEN01 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 SYSGEN01 IS PURGED
 $HASP395 SYSGEN01 ENDED
 $HASP150 SYSGEN01 ON PUNCH1
 $HASP150 SYSGEN01 ON PRINTER1
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PUNCH1   INACTIVE - CLASS=BK
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 SYSGEN01 IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen01</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ pwd
/home/hercules/mvs
$ ./condcode.pl prt00e.txt sysgen01
Searching prt00e.txt for MVS Job Name sysgen01

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
CLEANUP                       0008 <--
ASMBLR                        0000
IEBGENER                      0000
PUNCH                         0000
```

CLEANUPジョブステップで、完了コード「0008」となっています。これは期待値通りです。
これは、まだ存在しないデータセット(この後の手順で作られる)を削除しようとしているからです。もし、存在していて正常に削除した場合には、完了コードは「0000」です。

PUCNHジョブステップでは、この後で実行するJCLのパンチカードデッキ(何枚ものパンチカードを束ねたもの)を生成するジョブステップです。
Hercules設定ファイルのI/Oアドレス0x013が示すファイル(pch013.txt)にカードイメージを書き込みます。

パンチカードについては、次を参照ください([wikipedia:パンチカード](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%B3%E3%83%81%E3%82%AB%E3%83%BC%E3%83%89))。

このパンチカードデッキは、SYSGEN、システム生成を行うためのマクロ命令の元になるものが記述されていますが、そのままではjclとして実行できません。テキストエディタ(viやメモ帳)で修正してもよいですが、修正を行うawkスクリプト(**<font color="red">stage2.awk</font>**)が用意されていますので、これを利用して「**<font color="red">stage2.jcl</font>**」を作ります。

完了コード確認画面でstage2.jclを作りましょう。完了コード確認画面で次のコマンドを入力します。

```bash:完了コード確認画面
$ pwd
/home/hurcules/mvs
$ gawk -f stage2.awk pch013.txt > ./jcl/stage2.jcl
```

### awkスクリプト(**<font color="red">stage2.awk</font>**)が行う修正:
1. JOB文に「TYPRUN=HOLD」を設定。
   * HOLD --- オペレータがジョブを解放するまで、そのジョブは実行しないで待ち行列に保留したいときに指定します。<br>
   * SCAN --- JCL構文エラーを見つけるためにJCLを実行しないで、構文チェックするときに指定します。

2. JOB文に「TIME=1439」を設定。
「TIME=1439」は、ジョブの実行時間制限を取っ払う指定です。 stage2のパンチカードデッキ内の各ジョブは、順次実行していかなければならないのですが、次のジョブを実行する前には、その前のジョブが正しく実行されていることを確認する必要があります。もし遅いコンピュータだった場合、この「TIME=1439」がなかったら、デフォルト(いったいデフォルト値はいくつなんだろう？)のジョブ時間制限に達すると異常終了してしまいます。<br>
注意:本当は、「TIME=1440」では？というのは、[IBM Knowledge Center z/OS MVS JCL Reference
SA23-1385-00](https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.ieab600/iea3b6_Subparameter_definition98.htm)では、「1440」もしくは「NOLIMIT」とあるため。それか、無制限にしてしまうといつまでも終わらなくなるので、さすがに24時間を超えるような場合は異常終了させようとの考えかもしれない。

3. JOBPARM文に、「LINES=100」を指定。
SYSOUTのMAX出力行数を100,000行としています。

4. JOBCAT文に、「SYS1.VSAM.MASTER.CATALOG」を指定。
このカードがないとMVSスターターシステムは、データセットを見つけることができません。

5. 「IDCAMS」を「IEFBR14」に文字列置換。
不明何のためにやっている？ユーザカタログから削除してマスタカタログを残すため？！
ジョブ内のSTEPY 6輸出はスターターシステムのマスター・カタログから（あなたはシステム生成時に上に運営されているすべてのデータセットがカタログされている）ユーザー・カタログ（から削除されます）。
これは、生成されたシステムの正しい動作のためには全く不要です。あなたは、このステップを実行することを可能にすると、後でスターターシステムからのデータセットへの便利なアクセスが必要な場合は、カタログを再接続するためにJOBをビルドして実行する必要があります。それだけで接続されたカタログを残すためにはるかに優れています。

6. sysgen01ジョブで生成されたデータセットの有効期限を「EXPDT=99350」から「EXPDT=00000」に変更。
「99350」の読み方は、1999年と350日です。恐らく、MVS3.8がリリースされた当時からすると、有効期限なしの意味だったのだと思います。既に21世紀になっているので、「99350」のままにしていると、この後のステージ2のジョブがデータセットに書き込む時に、約200の応答要求に応えなければなりません。これを全て「00000」にすることで、これらの無駄な応答を無くしています。

## SYSGEN01:ステージ2(所要時間:25分)
Herculesエミュレータ画面のコマンドラインで、
「**<font color="red">devinit 12 jcl/stage2.jcl eof</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> devinit 12 jcl/stage2.jcl eof
CPU0000 PSW=070E000000000000 24..W.....                  instcount=1,328,915,129
```

すると、マスタコンソール画面に切り替えると、次のような画面になります。

```bash:マスタコンソール画面
 $HASP100 SYSGEN1  ON READER1     SYSTEM GENERATION
 $HASP100 SYSGEN2  ON READER1     SYSTEM GENERATION
 $HASP100 SYSGEN3  ON READER1     SYSTEM GENERATION
 $HASP100 SYSGEN4  ON READER1     SYSTEM GENERATION
 $HASP100 SYSGEN5  ON READER1     SYSTEM GENERATION
 $HASP100 SYSGEN6  ON READER1     SYSTEM GENERATION
 $HASP101 SYSGEN1  HELD
 $HASP101 SYSGEN2  HELD
 $HASP101 SYSGEN3  HELD
 $HASP101 SYSGEN4  HELD
 $HASP101 SYSGEN5  HELD
 $HASP101 SYSGEN6  HELD
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
```

今、投入されたジョブは、ステージ1のawkスクリプトで修正した通り、HOLDされています(実行が保留されています)。

マスタコンソール画面で、このHOLD(保留)を解除するために、JES2コマンドを入力します。
マスタコンソール画面で、
「**<font color="red">$a'sysgen1'</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$a'sysgen1'
```

しばらくすると、次のようになります。

```bash:マスタコンソール画面
$a'sysgen1'
 $HASP000 SYSGEN1  RELEASED
 $HASP373 SYSGEN1  STARTED - INIT  1 - CLASS A - SYS H158
 $HASP395 SYSGEN1  ENDED
 $HASP150 SYSGEN1  ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 SYSGEN1  IS PURGED
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen1</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ pwd
/home/hurcules/mvs
$ ./condcode.pl prt00e.txt sysgen1
Searching prt00e.txt for MVS Job Name sysgen1

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
LPA1                          0000
SG2           A               0000
SG3           A               0000
SG4           A               0000
SG5           A               0000
SG6           A               0000
SG7           A               0000
SG8           A               0000
SG9           A               0000
SG10          A               0000
LPA11                         0000
SG12          LK              0000
SG13          LK              0000
SG14          LK              0000
SG15          LK              0000
SG16          LK              0000
SG17          LK              0000
SG18          LK              0000
SG19          LK              0004 <--
SG20          LK              0000
SG21          LK              0000
SG22          LK              0000
SG23          LK              0000
SG24          LK              0000
SG25          LK              0000
SG26          LK              0000
SG27          LK              0000
SG28          LK              0004 <--
SG29          LK              0004 <--
SG30          LK              0000
SG31          LK              0004 <--
SG32          LK              0004 <--
SG33          LK              0000
SG34          LK              0000
SG35          LK              0000
SG36          LK              0000
SG37          LK              0004 <--
SG38          LK              0000
SG39          LK              0000
SG40          LK              0000
$ 
```

この後、残りのジョブ、sysgen2、sysgen3、sysgen4、sysgen5、sysgen6を上記のJES2コマンド「**<font color="red">$コマンド</font>**」を使用して、HOLDを解除して実行していきます。

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

```bash:マスタコンソール画面
 $HASP250 SYSGEN1  IS PURGED
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$a'sysgen2'
```

しばらくすると、次のような画面になります。

```bash:マスタコンソール画面
$a'sysgen2'
 $HASP000 SYSGEN2  RELEASED
 $HASP373 SYSGEN2  STARTED - INIT  1 - CLASS A - SYS H158
 $HASP395 SYSGEN2  ENDED
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP150 SYSGEN2  ON PRINTER1
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 SYSGEN2  IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen2</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ ./condcode.pl prt00e.txt sysgen2
Searching prt00e.txt for MVS Job Name sysgen2

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
LNK1                          0000
SG2           A               0000
SG3           A               0000
SG4           A               0000
SG5           A               0000
LNK6                          0000
SG7           LK              0000
SG8           LK              0004 <--
SG9           LK              0000
SG10          LK              0000
SG11          LK              0000
SG12          LK              0000
SG13          LK              0004 <--
SG14          LK              0000
SG15          LK              0000
SG16          LK              0000
SG17          LK              0000
SG18          LK              0000
SG19          LK              0000
SG20          LK              0000
SG21          LK              0000
SG22          LK              0000
SG23          LK              0000
SG24          LK              0000
SG25          LK              0000
SG26          LK              0000
SG27          LK              0000
SG28          LK              0000
SG29          LK              0000
SG30          LK              0000
SG31          LK              0000
SG32          LK              0000
SG33          LK              0004 <--
SG34          LK              0000
SG35          LK              0000
SG36          LK              0000
SG37          LK              0000
SG38          LK              0000
SG39          LK              0000
SG40          LK              0000
SG41          LK              0000
SG42          LK              0000
SG43          LK              0000
SG44          LK              0000
SG45          LK              0000
```

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

```bash:マスタコンソール画面
 $HASP250 SYSGEN2  IS PURGED
$a'sysgen3'
```

しばらくすると、次のような画面になります。

```bash:マスタコンソール画面
$a'sysgen3'
 $HASP000 SYSGEN3  RELEASED
 $HASP373 SYSGEN3  STARTED - INIT  1 - CLASS A - SYS H158
 $HASP395 SYSGEN3  ENDED
 $HASP150 SYSGEN3  ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 SYSGEN3  IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen3</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ ./condcode.pl prt00e.txt sysgen3
Searching prt00e.txt for MVS Job Name sysgen3

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
SVC1                          0000
SVC2                          0000
SVC3                          0000
```

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

```bash:マスタコンソール画面
 $HASP250 SYSGEN3  IS PURGED
$a'sysgen4'
```

しばらくすると、次のような画面になります。

```bash:マスタコンソール画面
$a'sysgen4'
 $HASP000 SYSGEN4  RELEASED
 $HASP373 SYSGEN4  STARTED - INIT  1 - CLASS A - SYS H158
 $HASP395 SYSGEN4  ENDED
 $HASP150 SYSGEN4  ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 SYSGEN4  IS PURGED
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen4</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ ./condcode.pl prt00e.txt sysgen4
Searching prt00e.txt for MVS Job Name sysgen4

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
NUC1                          0000
SG2           A               0000
SG3           A               0000
SG4           A               0000
SG5           A               0000
SG6           A               0000
SG7           A               0000
SG8           A               0000
SG9           A               0000
SG10          A               0000
SG12          A               0000
NUC13                         0000
NUC14         LK              0004 <--
SG15          LK              0000
SG16          LK              0000
SG17          LK              0000
SG18          LK              0000
```

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

```bash:マスタコンソール画面
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$a'sysgen5'
```

SYSGEN5の2番目のジョブステップを実行すると、マスタコンソール画面に次のメッセージが表示されます。

```bash:マスタコンソール画面
$a'sysgen5'
 $HASP000 SYSGEN5  RELEASED
 $HASP373 SYSGEN5  STARTED - INIT  1 - CLASS A - SYS H158
 +IFC001I  D=3350 N=0B F=01080000 L=0108001D S=0108000002 DIP COMPLETE
```

これは、「SYS1.LOGREC」データセットが初期化されたときに表示されますので、エラーではありません。
しばらくすると、次のような画面になります。

```bash:マスタコンソール画面
$a'sysgen5'
 $HASP000 SYSGEN5  RELEASED
 $HASP373 SYSGEN5  STARTED - INIT  1 - CLASS A - SYS H158
 +IFC001I  D=3350 N=0B F=01080000 L=0108001D S=0108000002 DIP COMPLETE
 $HASP395 SYSGEN5  ENDED
 $HASP150 SYSGEN5  ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 SYSGEN5  IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen5</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ ./condcode.pl prt00e.txt sysgen5
Searching prt00e.txt for MVS Job Name sysgen5

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
MISC1                         0000
SG2                           0000
SG3                           0000
SG4           A               0000
SG5           A               0000
MISC6                         0000
SG7           LK              0000
SG8           LK              0000
SG9           LK              0000
SG10          LK              0000
SG11          LK              0000
SG12          LK              0000
SG13          LK              0000
SG14          LK              0000
SG15          LK              0000
SG16          LK              0000
SG17          LK              0000
SG18                          0000
SG19                          0000
SG20                          0000
```

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

```bash:マスタコンソール画面
 $HASP250 SYSGEN5  IS PURGED
$a'sysgen6'
```
しばらくすると、次のような画面になります。

```bash:マスタコンソール画面
$a'sysgen6'
 $HASP000 SYSGEN6  RELEASED
 $HASP373 SYSGEN6  STARTED - INIT  1 - CLASS A - SYS H158
 $HASP395 SYSGEN6  ENDED
 $HASP150 SYSGEN6  ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 SYSGEN6  IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen6</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ ./condcode.pl prt00e.txt sysgen6
Searching prt00e.txt for MVS Job Name sysgen6

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
LIST1                         0000
LIST2                         0000
STEPY                         0000
STEPZ1                        0008 <--
STEPZ2                        0000
```

## SYSGEN02:JES2の生成(所要時間:2分)
SMP(システム修正変更プログラム)の実行の間、JES2の構成要素がライブラリにロードされていますが、JES2ロード・モジュールを構築するためには、リンクエディタを使用する必要があります。

また、JES2の動作に必要なパラメータは、「SYS1.PARMLIB」と「SYS1.PROCLIB」に作成する必要があります。

これらのパラメータは、Hercules MVS ディスカッショングループで色々カスタマイズされて現在に至るようです。

JES2パラメータに関する参考情報:
[Tommy Sprinkle has made available the JES2 parameters](http://www.tommysprinkle.com/mvs/parmlib.html)

Herculesエミュレータ画面のコマンドラインで、
「**<font color="red">devinit 12 jcl/sysgen02.jcl eof</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> devinit 12 jcl/sysgen02.jcl eof
CPU0000 PSW=070E000000000000 24..W.....                  instcount=3,649,392,484
```

すると、マスタコンソール画面に切り替えると、次のような画面になります。

```bash:マスタコンソール画面
 $HASP100 SYSGEN02 ON READER1
 $HASP373 SYSGEN02 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP395 SYSGEN02 ENDED
 $HASP150 SYSGEN02 ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 SYSGEN02 IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen02</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ ./condcode.pl prt00e.txt sysgen02
Searching prt00e.txt for MVS Job Name sysgen02

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
JES2                          0000
SSSM                          0000
JES2PARM                      0000
JES2PRC                       0000
IEFBR14                       0000
```

## SYSGEN03(所要時間:15分)
SYSGEN03では、sysgen03.jclを実行します。このジョブでは、次のタスクを実行します。

 * 「SYS1.PARMLIB」データセットに「IEASYS00」メンバを作成。<br>
「IEASYS00」メンバには、IPLを行うごとに変えたくないデフォルト値やパラメーター値などを置く場所で、これを使用すると、IPL時のオペレーターの介入 を最小限に抑えることができます。「IEASYS00」メンバは自動的に読み取られるので、オペレーターは「SPECIFY SYSTEM PARAMETERS」に対して「Enter」や「U」で応答することができるので、エラーが発生してプロンプトが出る場合を除いて、オペレータのパラメータ入力を軽減できます。詳しくは、[IBM Knowledge Center IEASYSxx (システム・パラメーター・リスト)](http://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.2.0/com.ibm.zos.v2r2.ieae200/ieasys.htm)を参照。
 * 「SYS1.PARMLIB」データセットに「IEAAPFM00」メンバを作成。
IBM Knowledge Centerには、「「IEAAPFxx」メンバを使用すると、許可プログラム機能(APF)の許可を受けるプログラム・ライブ ラリーの指定を行うことができます。」ってあるけど、何のことだか全くわからない。参照先は[IBM Knowledge Center IEAAPFxx (許可プログラム機能リスト)](http://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.2.0/com.ibm.zos.v2r2.ieae200/ieaapf.htm)。

 * 「SYS1.PARMLIB」データセットに「SMFPRM00」メンバを作成。
詳しくは、[IBM Knowledge Center SMFPRMxx (システム管理機能 (SMF) パラメーター)](http://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.2.0/com.ibm.zos.v2r2.ieae200/smfprm.htm)を参照。
MVSとその制御下で実行されるプログラムに関する情報の記録と、システム管理機能に関連するパラメータが含まれているようです。
 * 「SYS1.PARMLIB」データセットに「IEALOD00」メンバを作成。
「IEALOD00」メンバは、実​​記憶にロードされ、固定されるMVSのための操作コードの一部が含まれているロード・モジュールを指定します。これらのモジュールは、非常に頻繁に実行されている記憶装置でそれらを固定すると、システムのパフォーマンスを向上させることができます。
英語直訳すぎで、よくわからないが、恐らくメモリ常駐プログラムの指定をしているのだと思われます。
 * 「SYS1.PARMLIB」データセットに「COMMND00」メンバを作成。
「COMMND00」メンバは、IPLの完了時に実行されるオペレータコマンドが含まれています。詳しくは、[IBM Knowledge Center COMMNDxx (初期設定時に自動的に出されるコマンド)](http://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.2.0/com.ibm.zos.v2r2.ieae200/commnd.htm)を参照。
 * 「SYS1.PARMLIB」データセットに「SETPFK00」メンバを作成。
「SETPFK00」メンバは、コンソールプログラムのファンクションキーの設定が含まれています。MVSコンソールに関連したコマンドをファンクションキーに割り当てると、ファンクションキーを押すだけで実行することができます。
詳しくは、[IBM Knowledge Center PFKTABxx (PF キー・テーブル定義)](http://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.2.0/com.ibm.zos.v2r2.ieae200/pfktab.htm)参照。
 * 「SYS1.PARMLIB」データセットに「LNKLST00」メンバを作成。
「LNKLST00」メンバは、自動バッチ、もしくは、TSO下で実行されたロード・モジュールに検索されるロード・モジュール・ライブラリが含まれています。詳しくは、[IBM Knowledge Center LNKLSTxx (LNKLST 連結)](http://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.2.0/com.ibm.zos.v2r2.ieae200/lnklstxx.htm)参照。
 * 「SYS1.PARMLIB」データセットに「VATLST00」メンバを作成。
「VATLST00」メンバは、DASDボリュームに関連する属性を定義しています。詳しくは、[IBM Knowledge Center VATLSTxx (ボリューム属性リスト)](http://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.2.0/com.ibm.zos.v2r2.ieae200/vatlst.htm)参照。
 * 「SYS1.PARMLIB」データセットに「PARMTZ」メンバを作成。
「PARMTZ」メンバは、ローカルタイムを確立するために、GMTからのオフセットを指定します。この手順では米国の中​​部標準時が設定されています。
 * 「SYS2.LOCAL.LPALIB」データセットを削除。
このライブラリは、システム生成時にローカルSVCモジュールを提供するために「SYSGEN00」ジョブによって作成されました。このジョブまで来たら、もう必要ないので削除します。
 * 「SYS2.LINKLIB」データセットのアロケーションとカタログ化。
「SYS1.LINKLIB」データセットはメインロード・モジュール・ライブラリであり、システム生成時に作成されます。しかし、そのライブラリに独自のロード・モジュールを追加するのはあまりよくありません。独自のロード・モジュールを格納する場所として、「SYS2.LINKLIB」データセットを作成しています。
 * 「SYS2.PROCLIB」データセットのアロケーションとカタログ化。
「SYS1.PROCLIB」データセットは、システムのカタログプロシージャのライブラリです。上記同様に独自のカタログプロシージャ用に「SYS2.PROCLIB」データセットを作成しています。
 * 「SYS2.CMDLIB」データセットのアロケーションとカタログ化。
「SYS1.LINKLIB」データセットは、バッチ処理用のロード・モジュール格納場所であるように、「SYS1.CMDLIB」はTSO用のロード・モジュールの格納場所です。「SYS2.CMDLIB」データセットは、上記同様に独自のTSO用ロード・モジュール格納場所として作成しています。
 * 「SYS2.HELP」データセットのアロケーションとカタログ化。
「SYS1.HELP」データセットがシステムTSOロード・モジュール用のヘルプ(構文とオペランドの使用説明書)の格納先です。「SYS2.HELP」データセットは、独自のTSOのロード・モジュール用のヘルプを格納する場所として作成しています。
 * 「SYS1.PROCLIB」データセットに「JES2」メンバを作成。
基本的なJES2カタログプロシージャは、「SYSGEN02」によって作成されましたが、よりカスタマイズされたプロシージャは、「SYS2.PROCLIB」データセットに組み込む/利用するために、ここで作成しておきます。
 * 「SYS2.PROCLIB」データセットに「CLEARDMP」メンバを作成。
致命的なエラーが発生した場合に、システム・ダンプが作られますが、これの出力先として「MVSRES」DASDボリュームに、3つのダンプ用のデータセットがアロケーションされています。これらの3つ全てがいっぱいとなった場合、システムが起動することができなくなります。「CLEARDMP」メンバは、これらのデータセットをマスタコンソール画面からクリアできるようにするメンバです。
 * 「SYS2.PROCLIB」データセットに「CLEARERP」メンバを作成。
ハードウェアエラーが発生した場合、「SYS1.LOGREC(​​環境エラー記録データセット)」にそのエラーエントリは記録されます。このデータセットは、エントリの有限数が設定されていて、最大容量に近づくと、マスタコンソールにデータセットをクリアするようにメッセージを出力します。「CLEARERP」メンバは、必要に応じてエラーエントリ内容を保存し、データセットをクリアできるようにするためメンバです。
 * 「SYS2.PROCLIB」データセットに「COMPRESS」メンバを作成。
ライブラリデータセットは、多くのアップデートがされると、頻繁に再編成が必要になります。「COMPRESS」メンバは、未使用エクステントの再利用、データセットの圧縮するために使用します。
 * 「SYS2.PROCLIB」データセットに、「SMPASM」、「SMPASML」、「SMPAPP」、「SMPREC」のメンバを作成。
これらのメンバはアセンブル、リンクするために使用されます。
 * 「SYS1.UMODMAC」、「SYS1.UMODCNTL」、「SYS1.UMODSRC」、「SYS1.UMODOBJ」、「SYS1.UMODLIB」のデータセットのアロケーションとカタログ化。これらのデータセットは、ユーザの変更を保持するために使用されます。
 * 「SYS1.CDS」、「SYS1.CRQ」、「SYS1.SMPCDS」データセットのアロケーションとカタログ化。
これらのデータセットは、ターゲット・システムへの変更を記録し追跡するために使用されます。
 * 「SMP」は、ターゲットシステムの環境に合わせて初期化します。
 * 「SYS2.CONTROL」データセットのアロケーションとカタログ化。
いくつかのカタログ手順は、制御カードが必要ですが、制御カードは、カタログプロシージャに含めることはできません。それらのデータセットタイプを保持するために、このライブラリーを作成します。
 * 「CLS」TSOコマンドとヘルプテキストを追加。
「CLS」TSOコマンドは、単にTSO画面をクリアするコマンドです(テープ=CBT 430、ファイル＃300からの短いプログラムです)。これは、「SYS2.HELP」データセットHELPテキストが置かれ、「SYS2.CMDLIB」データセットにコンパイルされたロード・モジュールが格納されます。。
 * 「SETPFKEY」バッチロードモジュールの実行手順を追加。
このプログラム(テープ=CBT 249、ファイル＃295から)は、ファンクションキーにオペレータコンソールコマンドを割り当てます。
「SYS2.LINKLIB」データセットにファンクションキー割り当てプログラムが格納され、「SYS2.PROCLIB」データセットに、ファンクションキー割り当て手順を格納します。「SYS1.PARMLIB(COMMND00)」でこのプログラム用に「START」コマンドが設定されていて、その中で「SYS1.PARMLIB(SETPFK00)」を実行しファンクションキーを設定してします。
 * 「ZTIMER」バッチ・ロード・モジュールの実行手順とパラメーター・メンバーの追加。
このプログラムは、アラームを表示したり、スケジュール、もしくは定期的にMVSオペレータコマンドを実行するために使用されるプログラムです。「SYS2.LINKLIB」データセットに格納され、これを実行する手順は「SYS2.PROCLIB」に格納されます。「SYS1.PARMLIB(COMMND00)」でこのプログラム用に「START」コマンドが設定されていて、その中で、「SYS2.CONTROL(ZTIMER)」は、定期的にJES2キュー内の未処理の出力をクリアします。
 * 「CLIP」バッチ・ロード・モジュールの実行手順を追加。
このプログラムは、オフラインDASDボリュームのラベルを変更するために、マスタコンソール画面から使用されます。「SYS2.LINKLIB」データセットに格納され、その実行手順は「SYS2.PROCLIB」に格納されます。

前置きが長くなりすぎましたが、sysgen03.jslを実行します。

Herculesエミュレータ画面のコマンドラインで、
「**<font color="red">devinit 12 jcl/sysgen03.jcl eof</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> devinit 12 jcl/sysgen03.jcl eof
CPU0000 PSW=070E000000000000 24..W.....                  instcount=3,737,502,211
```

すると、マスタコンソール画面に切り替えて、5分くらいすると次のような画面になります。

```bash:マスタコンソール画面
 $HASP100 SYSGEN03 ON READER1
 $HASP373 SYSGEN03 STARTED - INIT  1 - CLASS A - SYS H158
*IEC507D E 150,START1,SYSGEN03,
 IEC507D UPDATE08,SYS1.PROCLIB
*10 IEC507D REPLY 'U'-USE OR 'M'-UNLOAD
```
これは、I/Oデバイスアドレス0x150に接続されているstart1.3330 DASDボリュームにある、「SYS1.PROCLIB」データセットが有効期限付きで保護されている状態で、書き込みをしようとしたときに表示される応答要求です。
書き込みをしたいので、マスタコンソール画面で「**<font color="red">r 10,u</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
*10 IEC507D REPLY 'U'-USE OR 'M'-UNLOAD
r 10,u
```

しばらくすると、次のような画面になります。

```bash:マスタコンソール画面
r 10,u
 IEE600I REPLY TO 10 IS;U
 $HASP100 SYSGEN03 ON INTRDR
 $HASP395 SYSGEN03 ENDED
 $HASP150 SYSGEN03 ON PRINTER1
 $HASP373 SYSGEN03 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 SYSGEN03 IS PURGED
```

「$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE」が、中々表示されなくて、気になるときは、
「**<font color="red">D A,L</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
 $HASP250 SYSGEN03 IS PURGED
D A,L
 IEE102I 03.30.54 16.164 ACTIVITY 247
    00002 JOBS    00001 INITIATORS
   JES2     JES2     IEFPROC   V=V
   SYSGEN03 SMPAPP   HMASMP    V=V
    00000 TIME SHARING USERS
 $HASP395 SYSGEN03 ENDED
 $HASP150 SYSGEN03 ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 SYSGEN03 IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen03</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ ./condcode.pl prt00e.txt sysgen03
Searching prt00e.txt for MVS Job Name sysgen03

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
BACKUP01                      0000
UPDATE02                      0000
ALLOC03                       0000
BACKUP04                      0000
UPDATE05                      0000
UPDATE06                      0000
UPDATE08                      0000
SUBMIT09                      0000
UPDATE10                      0000
ASMFCL11      ASM             0000
ASMFCL11      LKED            0000
ASMFCL12      ASM             0000
ASMFCL12      LKED            0000
UPDATE13                      0000
ASMFCL14      ASM             0000
ASMFCL14      LKED            0000
UPDATE15                      0000
UPDATE16                      0000
ASMFCL17      ASM             0000
ASMFCL17      LKED            0000
UPDATE18                      0000
SMPAPP        HMASMP          0000
```

## SYSGEN04(所要時間:5分)
SYSGEN04では、sysgen04.jclを実行します。このジョブでは、次のタスクを実行します。

 * 「SYS1.PARMLIB」データセットに「IKJTSO00」メンバを作成します。
このメンバは、TSOの実行を制御するパラメータを指定します。
 * 「SYS1.PROCLIB」データセットに「IKJACCNT」メンバを作成します。
このメンバは、個々のTSOユーザーのアドレス空間を定義するパラメータを指定します。
 * 「SYS1.PROCLIB」データセットに「NET」メンバを作成します。
このメンバは、VTAMを開始する時に実行するメンバです。
 * 「SYS1.PROCLIB」データセットに「TSO」メンバを作成します。
このメンバは、TSOを開始する時に実行するメンバです。
 * 「SYS1.VTAMLST」データセットのアロケーションとカタログ化。
このライブラリは、VTAMの仕様が含まれています。
 * 「SYS1.VTAMLST」データセットに「ATCSTR00」メンバを作成します。
このメンバは、VTAMのパラメータを設定します。
 * 「SYS1.VTAMLST」データセットに「ATCCON00」メンバを作成します。
このメンバは、TSOアプリケーションとローカル3270端末用VTAMテーブルを設定します。
 * 「SYS1.VTAMLST」データセットに「APPLTSO」メンバを作成します。
このメンバは、すべてのローカル3270端末のログオンテーブルを設定します(初期値:8つ)。
 * 「SYS1.VTAMLST」データセットに「LCL400」メンバを作成します。
このメンバは、すべてのローカル3270端末を指定します(初期値:8つ)。
 * 「SYS1.VTAMSRC」データセットのアロケーションとカタログ化。
このライブラリは、VTAMのログオンテーブルが含まれます。
 * 「SYS1.VTAMSRC」データセットに「LOGTAB01」メンバを作成します。
このメンバは、VTAM用のログオンテーブルを解釈する際の定義を設定します。
 * 「SYS1.VTAMSRC」データセットに「LOGMOD01」メンバを作成します。
このメンバは、ローカル3270端末の全ての変数を定義します。
 * 「SYS1.CMDPROC」データセットのアロケーションとカタログ化。
このライブラリは、すべてのTSOユーザーが使用できるTSOコマンド・プロシージャ(CLIST)を格納します。
 * 「SYS1.CMDPROC」データセットに「STDLOGON」メンバを作成します。
デフォルトのTSOログオンメッセージを定義しています。
 * 「SYS1.CMDPROC」データセットに「USRLOGON」メンバを作成します。
デフォルトのTSOログオン・プロシージャを定義しています。
 * 「LOGTAB01」と「LOGMOD01」のアセンブルとリンクを実行します。

前置きが長いですが、sysgen04.jclを実行します。Herculesエミュレータ画面のコマンドラインで、「**<font color="red">devinit 12 jcl/sysgen04.jcl eof</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> devinit 12 jcl/sysgen04.jcl eof
CPU0000 PSW=070E000000000000 24..W.....                  instcount=6,498,264,054
```

すると、マスタコンソール画面に切り替えると、次のような画面になります。

```bash:マスタコンソール画面
 $HASP100 SYSGEN04 ON READER1
 $HASP373 SYSGEN04 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP395 SYSGEN04 ENDED
 $HASP150 SYSGEN04 ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 SYSGEN04 IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen04</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ ./condcode.pl prt00e.txt sysgen04
Searching prt00e.txt for MVS Job Name sysgen04

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
UPDATE01                      0000
UPDATE02                      0000
UPDATE03                      0000
UPDATE04                      0000
UPDATE05                      0000
UPDATE06                      0000
LOGTAB07      ASM             0000
LOGTAB07      LKED            0000
LOGMODE8      ASM             0000
LOGMODE8      LKED            0000
UPDATE09                      0000
UPDATE10                      0000
ASM11                         0000
LKED12                        0000
```

## SYSGEN05(所要時間:3分)
出口ルーチンとして、「IEFACTRT」ロード・モジュールがありますが、これは、ジョブやジョブステップの終了時にOSから呼び出されるサブルーチンです。これを利用すると、終了時に統計情報を自動的に取得したり、完了コードをマスタコンソール画面に表示したりできます。

SYSGEN05では、このMVS3.8JのSYSGEN手順の元ネタを公開している、[Jay Moseley](http://www.jaymoseley.com/hercules/)が利用している出口ルーチンをインストールします。

この出口ルーチンの特徴は、何かジョブで問題が起きたときに、いちいちプリント出力を検索しなくてもMVSコンソール上に、ジョブステップの完了コードが表示されることです。
JCLのJOB文のNOTIFYパラメータにTSOユーザーIDを指定していれば、それに情報を送信します。

SMF(システム管理機能)は、常に次の情報を収集します。

 * ジョブの開始
 * ジョブステップの開始
 * データセットのオープン
 * データセットのクローズ
 * ジョブステップの終了
 * ジョブ終了

などです。
収集される情報の量は、「SYS1.PARMLIB(SMFPRM00)」パラメータで設定したオプションに応じて変化します。
このパラメータは、IPLやオペレータによって上書きされることがあります。

システム生成時に作成された2つのデータセット「SYS1.MANX」と「SYS1.MANY」に収集された情報は格納されます。
これらのデータセットの一つは、アクティブな新しいレコードが書き込まれるデータセットで、このデータセットが一杯になると、SMFは、自動的にもう一方のデータセットに切り替えます。

この切り替えが起きると、マスタコンソール画面にデータセット内のデータを保存するために注意する必要がある旨のメッセージを表示します。このメッセージを受けて、オペレータは一杯になったデータセットの方をクリアする必要があります。

では、sysgen05.jclを実行しましょう。Herculesエミュレータ画面のコマンドラインで、「**<font color="red">devinit 12 jcl/sysgen05.jcl eof</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> devinit 12 jcl/sysgen05.jcl eof
CPU0000 PSW=070E000000000000 24..W.....                  instcount=6,596,271,224
```

すると、マスタコンソール画面に切り替えると、次のような画面になります。

```bash:マスタコンソール画面
 $HASP100 SYSGEN05 ON READER1
 $HASP373 SYSGEN05 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP395 SYSGEN05 ENDED
 $HASP150 SYSGEN05 ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 SYSGEN05 IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen05</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
[hercules@localhost mvs]$ ./condcode.pl prt00e.txt sysgen05
Searching prt00e.txt for MVS Job Name sysgen05

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
UPDATE01                      0000
SMPASM02      ASM             0000
SMPAPP03      HMASMP          0000
IDCAMS04                      0000
UPDATE05                      0000
UPDATE06                      0000
UPDATE07                      0000
SMPASM08      ASM             0000
SMPAPP09      HMASMP          0000
```

## SYSGEN06(所要時間:15分) 
SYSGEN06では、sysgen06.jclを実行します。このジョブでは、次のタスクを実行します(主にUSERMODのインストールです)

 * USERMOD TMVS804(source: Kevin Leonard)
MVS3.8Jのシステム生成ではIPL後に自動的にJES2を開始するMSTRJCLでSTARTコマンドを配置します。それは常にJES2を自動起動するには良い場所ではないので、このUSERMODでは、STARTコマンドを削除します(実際にはコメントとしてそれを残す)。このUSERMODは「SYS1.PARMLIB(COMMND00)」にJES2用のSTARTコマンドを配置するためステップがいくつかあります。

 * USERMOD AY12275(source: Kevin Leonard)
SMFアカウンティング統計情報のフィールド=TCTRSZが間違っているので、このフィールドの内容を修正します。

 * USERMOD TTS0801(source: Kevin Leonard)
オペレータによってTSOをシャットダウンされた後に出力されるメッセージID=IKT012Dを除去します。これは、オペレータの操作を簡素化するために行っています。もしこれをしなかった場合は、オペレータ応答として毎度"U"(ダンプなしで終了処理続行)か"DUMP"(仮想記憶域のダンプ)をすることになります。

 * USERMOD AZ58122(source: Peter van der Woude)
TSOユーザがログオフするたびに、コンソールに発行されたエラーメッセージを除去します。

 * USERMOD SLB0002 (source: Shelby Beach)
JOBとEXECカードREGIONパラメータは、キロバイト(K)でのサイズの指定が可能です。
MVSのその後のバージョンでは、メガバイト(M)の指定を可能にしました。
このUSERMODは、MVS3.8Jにメガバイト(M)を使用できるようにします。

 * USERMOD SYZM001 (source: Brian Westerman)
このUSERMODは、彼らがシステムタスクから送信されたメッセージにCN(00)を含めることを抑制します。

 * USERMOD ZUM0007 (source: Michael Koehne)
2000年問題の対策。1999年を超えるとTSOが誤った世紀を表示するTSOモジュールにパッチを適用します。

 * USERMOD ZUM0001 (source: Volker Bandke)
TSOの許可テーブルIKJEFTE2にコマンドを追加します。

 * USERMOD ZP60001 (source: Greg Price)
VTAMが初期化された後に自動的にTSOを開始するために、WTO出口ルーチンを追加します。

 * USERMOD ZP60002 (source: Greg Price)
TSO TESTが無効オペコードに遭遇した後に実行を停止しないように変更します。

 * USERMOD ZP60003 (source: Greg Price)
「IFOX00」は空白文を受け入れるように変更します。

 * USERMOD ZP60004 (source: Greg Price)
高輝度のアクション・コンソール・メッセージを表示するように変更。

 * USERMOD ZP60005 (source: Greg Price)
IOSが常にチャネルとデバイスI/Oカウントをメンテナンスするように変更します。

 * USERMOD ZP60006 (source: Greg Price)
データセットの解放時に、解放時のメッセージにEXCPカウント(たぶん、例外の数)を表示するように変更します。

 * USERMOD ZP60007 (source: Greg Price)
TSO / VTAMはGTFによってトレースするオプションを許可するように変更します。

 * USERMOD ZP60008 (source: Greg Price)
EWAとローカル非SNA 3270用のWSFサポートを追加します。

 * USERMOD ZP60009 (source: Greg Price)
TSO / VTAMにTPUTとTGETためNOEDITサポートを追加します。

 * USERMOD ZP60012 (source: Greg Price)
TSOセッションでABENDした場合に割り込みコードの報告を追加します。

 * USERMOD ZP60014 (source: Greg Price)
CLISTの制御変数と組み込み関数の拡張機能を追加します。

 * USERMOD ZP60015 (source: Greg Price)
 * USERMOD ZP60016 (source: Greg Price)
これら二つはSTATUS TSOコマンドのJES2ジョブ検索を拡張します。

 * USERMOD ZP60019 (source: Greg Price)
JCLで「TIME=1440」が記述されていた場合、CPU時間の記録します。

 * USERMOD ZP60026 (source: Greg Price)
TSO ALLOCATEコマンドにREUSEオペランドを追加します。

 * USERMOD ZP60032 (source: Greg Price)
GTTERMマクロは端末名を報告することができます。

 * USERMOD WM00017（不明ソース）
「\$U」と「\$DP」のJES2コマンドを追加します。

では、sysgen06.jclを実行します。
Herculesエミュレータ画面のコマンドラインで、「**<font color="red">devinit 12 jcl/sysgen06.jcl eof</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> devinit 12 jcl/sysgen06.jcl eof
CPU0000 PSW=070E000000000000 24..W.....                  instcount=6,911,044,576
```

すると、マスタコンソール画面に切り替えると、次のような画面になります。

```bash:マスタコンソール画面
 $HASP100 SYSGEN06 ON READER1
 $HASP100 SYSGEN06 ON READER1
 $HASP100 SYSGEN06 ON READER1
 $HASP100 SYSGEN06 ON READER1
 $HASP100 SYSGEN06 ON READER1
 $HASP373 SYSGEN06 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP395 SYSGEN06 ENDED
 $HASP150 SYSGEN06 ON PRINTER1
 $HASP373 SYSGEN06 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 SYSGEN06 IS PURGED
 $HASP395 SYSGEN06 ENDED
 $HASP150 SYSGEN06 ON PRINTER1
 $HASP373 SYSGEN06 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 SYSGEN06 IS PURGED
 $HASP395 SYSGEN06 ENDED
 $HASP150 SYSGEN06 ON PRINTER1
 $HASP373 SYSGEN06 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 SYSGEN06 IS PURGED
 $HASP395 SYSGEN06 ENDED
 $HASP150 SYSGEN06 ON PRINTER1
 $HASP373 SYSGEN06 STARTED - INIT  1 - CLASS A - SYS H158
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 SYSGEN06 IS PURGED
 $HASP395 SYSGEN06 ENDED
 $HASP150 SYSGEN06 ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 SYSGEN06 IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt sysgen06</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
[hercules@localhost mvs]$ ./condcode.pl prt00e.txt sysgen06
Searching prt00e.txt for MVS Job Name sysgen06

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
RECV01        HMASMP          0000
APPLY01       HMASMP          0000
IEHPROGM                      0000
IEBUPDTE                      0000
RECV02        HMASMP          0000
APPLY02       HMASMP          0000
RECV03        HMASMP          0000
APPLY03       HMASMP          0000
RECV04        HMASMP          0000
APPLY04       HMASMP          0000
RECV05        HMASMP          0000
APPLY05       HMASMP          0000
RECV06        HMASMP          0000
RECV07        HMASMP          0000
APPLY07       HMASMP          0000
IEBUPDTE                      0000
SMPASML       ASM             0000
SMPASML       LINK            0000
RECV08        HMASMP          0000
APPLY08       HMASMP          0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
RECV09        HMASMP          0000
APPLY09       HMASMP          0000
RECV10        HMASMP          0000
APPLY10       HMASMP          0000
RECV11        HMASMP          0000
APPLY11       HMASMP          0000
RECV12        HMASMP          0000
APPLY12       HMASMP          0000
RECV13        HMASMP          0000
APPLY13       HMASMP          0004 <--
RECV14        HMASMP          0000
APPLY14       HMASMP          0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
APPLY15       HMASMP          0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
RECV16        HMASMP          0000
APPLY16       HMASMP          0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
RECV17        HMASMP          0000
APPLY17       HMASMP          0004 <--
RECV18        HMASMP          0000
APPLY18       HMASMP          0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
RECV19        HMASMP          0000
APPLY19       HMASMP          0000
RECV20        HMASMP          0000
APPLY20       HMASMP          0000
RECV21        HMASMP          0000
APPLY21       HMASMP          0000
RECV22        HMASMP          0000
APPLY22       HMASMP          0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
IFOX00                        0000
IEBGENER                      0000
RECV23        HMASMP          0000
APPLY23       HMASMP          0000
RECV24        HMASMP          0000
APPLY24       HMASMP          0000
RECV25        HMASMP          0000
APPLY25       HMASMP          0004 <--
```

## FDZ1D02(所要時間:5分)
「FDZ1D02」では、「fdz1d02.jcl」を実行します。このジョブでは、次のタスクを実行します。

「FDZ1D02」はデバイスサポートファシリティver13のことで、一般的には、「ICKDSF:DASDの初期化プログラム」のことです。

「その２:メインフレームOSのシステム生成がやってみたい！」で「ICKDSF」をインストールしましたが、これはver6です。何故、ver13があるのに、ver6をインストールするのか？ですが、「ICKDSF」のver6は、ver6以降に登場したデバイスタイプを知らないのです。従って、3375/3380/3390 DASDボリュームを初期化するにはver13が必要です。
ver6は、3350 DASDボリュームの初期化に使います。3350/3375/3380/3390 DASDボリュームの初期化のために、ver6、ver13の両方が必要となります。

Herculesエミュレータが提供している、「DASDINIT」、「DASDLOAD」ユーティリティを使えば、これらのDASDボリュームを初期化することはできます。敢えて、MVSを使ってこれを解決するためにver6とver13の両方を使っています。

「fdz1d02.jcl」では、「product.het」テープイメージからライブラリを復元し、リンク・エディット、ビルドを行います。そのままでは、ver6の「ICKDSF」を上書きしてしまうので、「ICKDSF13」のロードモジュール名で
「SYS1.LINKLIB」データセットに格納します。

従って、DASDボリュームの初期化を行うときは、どちらのロードモジュールを利用するか注意してください。

 * 「3375/3380/3390 DASDボリュームの初期化には、「ICKDSF13」を利用
 * それ以前のDASDボリュームの初期化には、「ICKDSF」を利用

です。

Herculesエミュレータ画面のコマンドラインで、「**<font color="red">devinit 12 jcl/fdz1d02.jcl eof</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> devinit 12 jcl/fdz1d02.jcl eof
CPU0000 PSW=070E000000000000 24..W.....                 instcount=11,412,175,162
```

すると、マスタコンソール画面に切り替えると、次のような画面になります。
アスタリスク(\*)付きのメッセージID=IEF238Dが表示されています。テープイメージの取り付けをオペレータに要求しています。

```bash:マスタコンソール画面
 $HASP100 FDZ1D02  ON READER1     INSTALL DSF R13
 $HASP373 FDZ1D02  STARTED - INIT  1 - CLASS A - SYS H158
 IEF244I FDZ1D02 IEBCOPY - UNABLE TO ALLOCATE 1 UNIT(S)
         AT LEAST 1 OFFLINE UNIT(S) NEEDED.
 IEF489I FDZ1D02 - 1 UNIT(S) NEEDED FOR LIBIN1
 IEF247I FDZ1D02 - 182,183,184,282,283,284,170,171,270,271 OFFLINE
 IEF247I FDZ1D02 - 382,383,384,482,483,484,582,583,584,682 NOT ACCESSIBLE
 IEF247I FDZ1D02 - 683,684,370,371,470,471,570,571,670,671 NOT ACCESSIBLE
*11 IEF238D FDZ1D02 - REPLY DEVICE NAME OR 'CANCEL'.
```

Herculesエミュレータ画面のコマンドラインで、「**<font color="red">devinit 170 tape/product.het </font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:Herculesエミュレータ画面
Command ==> devinit 170 tape/product.het
CPU0000 PSW=070E000000000000 24..W.....                 instcount=11,413,686,263
```

マスタコンソール画面に切り替え、テープイメージの取り付けたのでMVSに応答します。
「**<font color="red">r 11,170</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。

```bash:マスタコンソール画面
*11 IEF238D FDZ1D02 - REPLY DEVICE NAME OR 'CANCEL'.
r 11,170
```

しばらくすると、次のような画面になります。

```bash:マスタコンソール画面
r 11,170
 IEE600I REPLY TO 11 IS;170
*IEF233A M 170,MVS38J,,FDZ1D02,IEBCOPY
 $HASP100 FDZ1D02  ON INTRDR      INSTALL DSF R13
 IEF234E K 170,MVS38J,PVT,FDZ1D02
 $HASP395 FDZ1D02  ENDED
 $HASP150 FDZ1D02  ON PRINTER1
 $HASP373 FDZ1D02  STARTED - INIT  1 - CLASS A - SYS H158
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP250 FDZ1D02  IS PURGED
 $HASP395 FDZ1D02  ENDED
 $HASP150 FDZ1D02  ON PRINTER1
 $HASP309    INIT  1 INACTIVE ******** C=A
 $HASP160 PRINTER1 INACTIVE - CLASS=AJ
 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
 $HASP250 FDZ1D02  IS PURGED
```

完了コード確認画面で「**<font color="red">./condcode.pl prt00e.txt fdz1d02</font>**」を入力し、「**<font color="red">Enter</font>**」キーを入力します。
完了コードの期待値は次の通りです。

```bash:完了コード確認画面
$ ./condcode.pl prt00e.txt fdz1d02
Searching prt00e.txt for MVS Job Name fdz1d02

Step Name     Proc Step Name  Completion Code
---------     --------------  ---------------
IEBCOPY                       0000
IDCAMS                        0000
IEBGENER                      0000
IEWL                          0000
IEHPROGM                      0000
```

## スナップショットの取得
以上で長かったSYSGEN、システム生成が終わりました。次の手順、「その4:メインフレームOSのシステム生成がやってみたい！:MVS3.8Jのカスタマイズ」では、TSO回りの使い勝手を向上させるユーティリティ類をインストールしますので、ここまでの変更のスナップショットを取ります。

### MVSスタータシステムをシャットダウン
マスタコンソール画面に切り替え、「**<font color="red">$p jes2</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。このコマンドは、正常にシャットダウンするように、JES2に指示しています。すると、次のメッセージが表示されます。

```bash:マスタコンソール画面
 $HASP250 FDZ1D02  IS PURGED
$p jes2
```

これはMVSスタータシステムがパワーダウンが可能であることを示しています。MVSはまだ実行されており、追加のオペレータコマンドを入力できる状態にあります。
「**<font color="red">z eod</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。
これは、全てのシステムファイルを閉じて、通常のシャットダウンの準備を指示しています。

```bash:マスタコンソール画面
$p jes2
 $HASP395 INIT     ENDED
 IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A
 IEE037I LOG NOT ACTIVE
2000 04.56.44 CONSOLE   IEE142I  01F NOW RECEIVING HARDCOPY
4000 04.56.44           IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A
4000 04.56.44           IEE037I LOG NOT ACTIVE
0000 04.56.44           IEF196I IEF142I JES2 JES2 - STEP WAS EXECUTED - COND CODE 0000
0000 04.56.44           IEF196I IEF285I   SYS1.PROCLIB                                 KEPT
0000 04.56.44           IEF196I IEF285I   VOL SER NOS= START1.
0000 04.56.44           IEF196I IEF285I   SYS1.HASPCKPT                                KEPT
0000 04.56.44           IEF196I IEF285I   VOL SER NOS= SPOOL0.
0000 04.56.44           IEF196I IEF285I   SYS1.HASPACE                                 KEPT
0000 04.56.44           IEF196I IEF285I   VOL SER NOS= SPOOL0.
z eod
```

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

```bash:マスタコンソール画面
z eod
4000 04.57.55           IEE334I HALT     EOD SUCCESSFUL
quiesce
```

このコマンドは、DASDボリュームに現在のバッファ状態を書き込むためにMVSスタータシステムに指示しています。
これで、Herculesエミュレータをシャットダウンする前に、メモリに保持しているすべての情報がDASDボリュームに書かれます。
Herculesエミュレータ画面に切り替え、「**<font color="red">quit</font>**」と入力し、「**<font color="red">Enter</font>**」キーを入力します。Herculesエミュレータは、エミュレートされたメインフレーム・デバイス用のすべてのファイルを閉じて終了します。

```bash:Herculesエミュレータ画面
HHCCP077I 0151:Sense=CMDREJ
HHCCP011I CPU0000: Disabled wait state
          PSW=000A0000 00000CCC
Command ==> quit
CPU0000 PSW=000A000000000CCC 24M.W.....                 instcount=11,457,432,321
```

### スナップショットの取得

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