クラウド上でのメインフレーム開発環境構築 - (4) ZD&Tインスタンス作成概要(ADCD)

# はじめに
メインフレーム(z/OS)の開発環境をIBM Cloud上にセットアップしてみた時のログです。今回はいよいよZD&Tインスタンスの作成です。
ここでは一旦ZD&Tインスタンス作成の流れを一通りやってみます。
具体的にどのような構成が行われるのかといった詳細については別の記事で深掘りしていきたいと思います。

## 関連記事
[クラウド上でのメインフレーム開発環境構築 - (1) 仮想サーバー作成](https://qiita.com/tomotagwork/items/3b0c918c37ccf54a9ce8)
[クラウド上でのメインフレーム開発環境構築 - (2) ZD&T管理サーバーのインストール](https://qiita.com/tomotagwork/items/c6f52fd6e4aadbde3275)
[クラウド上でのメインフレーム開発環境構築 - (3) ライセンス管理](https://qiita.com/tomotagwork/items/319475bcc924989260ef)
[クラウド上でのメインフレーム開発環境構築 - (4) ZD&Tインスタンス作成概要(ADCD)](https://qiita.com/tomotagwork/items/d14d35d3ab3c35c07545)
[クラウド上でのメインフレーム開発環境構築 - (5) ZD&Tインスタンス作成詳説(ADCD)](https://qiita.com/tomotagwork/items/b00934969af680a30392)
[クラウド上でのメインフレーム開発環境構築 - (6) DeviceMapファイル補足](https://qiita.com/tomotagwork/items/fa3f9099e125806c410e)
[クラウド上でのメインフレーム開発環境構築 - (7) ネットワーク構成補足](https://qiita.com/tomotagwork/items/369367bae3d3cd3c8a15)
[クラウド上でのメインフレーム開発環境構築 - (8) ADCD IPL, Shutdown補足](https://qiita.com/tomotagwork/items/61b26ee8e25a605442ab)
[クラウド上でのメインフレーム開発環境構築 - (9) DASD管理補足](https://qiita.com/tomotagwork/items/a863c57be2902b8943d0)
[クラウド上でのメインフレーム開発環境構築 - (10)既存ZD&Tからイメージ作成](https://qiita.com/tomotagwork/items/d7ce2fc489a9e3fa08e2)

# 全体像
ようやくここからZD&Tインスタンス(つまりIBM Zシミュレーター本体)を作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/86d50c0f-9d6b-a0a8-7c8a-124554a02cb6.png)

ZD&Tインスタンスを作成する方法としては、大きく2種類あります。
1つはZD&Tインストーラーを使用して旧来のRD&TやZD&T PE(Personal Edition)と同じように個別にZD&Tインスタンスを作成する方法です。
もう1つは、イメージ・ストレージ・サーバーに管理されるz/OSイメージを基にWebサーバー経由でZD&Tインスタンスを作成する方法です。
今回は後者を想定して話を進めてきています。

後者の場合、まず元になる環境のイメージをイメージ・ストレージ・サーバー上に取り込む必要がありますが、元にするz/OS環境のイメージの選択肢としては以下の3つがあります。

- 製品提供の出来合いのz/OS環境(ADCDパッケージと呼ばれる)を元にZD&Tインスタンスを作成
- 既存の別のZD&Tインスタンスの環境を元にZD&Tインスタンスを作成
- 既存の実z/OS環境を元にZD&Tインスタンスを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/fa108d75-bd50-8160-7888-fa1651ab3089.png)

ここでは、IBM Cloudから接続できる他のZD&Tやz/OS環境が無いので、製品提供のADCDを元にZD&Tインスタンスを作成することにします。
ADCDには、z/OSだけでなく各種ミドルウェア(CICS, Db2, IMSなど)やコンパイラ(Enterprise COBOL)なども含まれています。

# ZD&Tインスタンス作成

## 事前準備

実際にインスタンス作成を行う前に、事前に環境周りの情報を設定しておく必要があります。

### ターゲット・サーバー関連

#### ZD&Tインスタンス実行ユーザー作成
ZD&Tインスタンス実行用のユーザーを作成します。ここではibmsys1というユーザーを作成することにします。

```
[taguchi@zdt02 ~]$ sudo useradd ibmsys1
[taguchi@zdt02 ~]$ sudo passwd ibmsys1
Changing password for user ibmsys1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
```

sudoできるようにwheelグループを付与します。

```
[taguchi@zdt02 home]$ sudo usermod -aG wheel ibmsys1
```

公開鍵認証でssh接続できるようにキーペアの設定しておきます(ここでは手順は割愛)。
参考: [公開鍵認証](https://qiita.com/tomotagwork/private/3b0c918c37ccf54a9ce8#%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E8%A8%AD%E5%AE%9A)

#### yum repository
ZD&Tインスタンスを作成するサーバーを"ターゲット・サーバー"と呼んでいます(ここではzdt02)。
まず、ターゲットサーバー側では、必要なパッケージがあればインストールできるように、yumが使用できる状態にしておく必要があります。

```
[ibmsys1@zdt02 ~]$ sudo yum repolist
Loaded plugins: product-id, search-disabled-repos, subscription-manager
repo id                                                             repo name                                                                   status
!rhel-7-server-optional-rpms/7Server/x86_64                         Red Hat Enterprise Linux 7 Server - Optional (RPMs)                         22,130
!rhel-7-server-rpms/7Server/x86_64                                  Red Hat Enterprise Linux 7 Server (RPMs)                                    30,637
!rhel-7-server-supplementary-rpms/7Server/x86_64                    Red Hat Enterprise Linux 7 Server - Supplementary (RPMs)                       383
repolist: 53,150
```


#### インストール先ディレクトリ作成

ZD&Tインスタンスを導入する先のディレクトリを作成します。デフォルトだと/home/ibmsys1ですが、追加したディスク配下に導入したいので、/mnt/ibmsys1というディレクトリを作っておき、そこに導入するようにします。

```
[ibmsys1@zdt02 mnt]$ sudo mkdir ibmsys1
[ibmsys1@zdt02 mnt]$ sudo chown ibmsys1:ibmsys1 ibmsys1
[ibmsys1@zdt02 mnt]$ ls -la
total 28
drwxr-xr-x.  4 root    root     4096 Oct 27 01:22 .
dr-xr-xr-x. 18 root    root     4096 Oct 27 02:32 ..
drwxr-xr-x.  3 ibmsys1 ibmsys1  4096 Oct 27 02:33 ibmsys1
drwx------.  2 root    root    16384 Sep 13 20:34 lost+found
```

#### ホスト名解決
この後、イメージ・ストレージ・サーバーやライセンス・サーバーのホスト名を指定しますが、ターゲットサーバーからそのホスト名でアクセスできるようにしておく必要があります。必要に応じて`/etc/hosts`やDNSなどの設定を行います。
ここでは、`/etc/hosts`にzdt01というホスト名とIPアドレスのマッピングをしておきます。(zdt02から、zdt01に対してpingが通るようにしておく)

#### 必要なパッケージのインストール
インスタンス作成時のチェックでncコマンドが使用されるようです。ncコマンドが使えるように、nmap-ncatパッケージをインストールしておきます。

```
[ibmsys1@zdt02 /]$ sudo yum install nmap-ncat
```

#### ターゲット・サーバーの登録
Webサーバー上でターゲット・サーバーを登録しておく必要があります。Webサーバー(Liberty)が起動していなければ起動してブラウザから接続します。

```
[taguchi@zdt01 ~]$ sudo /opt/ibm/zDT/bin/startServer.sh
```

zdtadminでログインし、"ターゲット環境"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/cef94863-c408-808f-5033-8d03d54a649e.png)

"ターゲット環境の追加" - Linux を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/c473ca14-4f60-12f1-75e3-d53d4fc57195.png)

ラベル、ホスト名(IPアドレス)、SSHポートを指定し、"詳細設定の調整"をONにして次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/94e40943-9781-c098-3059-f64575ba489c.png)

特権管理コマンド等を設定して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d1907f40-25cf-1957-e275-118bc2afa000.png)

ターゲットの環境のネットワーク構成情報を指定します。
デフォルトだと以下のような設定になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/42494717-5cb7-6cb8-bc58-789332c8c873.png)

これを、以下のように変更して、"ターゲット環境の追加"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/4ff9cc85-1725-4998-d9c7-a8899d0f3232.png)

ターゲット環境の情報が登録されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bc23d086-c92e-8c3c-f3f7-f185f8c1d397.png)

### イメージ・ストレージ・サーバー関連

イメージ・ストレージ・サーバーには、ZD&Tインスタンスを作成する際の元になるz/OSイメージを格納しておく必要があります。ftpでアクセスできる先にディレクトリを用意しておきます。ここはサイズが大きくなりがちですので、追加でマウントしたディスク上に保持するようにします。

`/mnt/ZDT_Image`ディレクトリを作成して、owner:groupをftpuser:ftpuserにしておきます。

```
[taguchi@zdt01 /mnt]$ sudo mkdir ZDT_Image
[taguchi@zdt01 /mnt]$ sudo chown ftpuser:ftpuser ZDT_Image
[taguchi@zdt01 /mnt]$ ls -la
total 36
drwxr-xr-x.  6 root    root     4096 Oct 26 23:54 .
dr-xr-xr-x. 19 root    root     4096 Sep 18 19:57 ..
drwxr-xr-x.  3 root    root     4096 Sep 14 03:37 Inst_Image
drwx------.  2 root    root    16384 Sep 13 19:25 lost+found
drwxr-xr-x.  4 root    root     4096 Sep 19 00:42 opt_ibm
drwxr-xr-x.  2 ftpuser ftpuser  4096 Oct 26 23:54 ZDT_Image
```

ftpuserのホーム以下からシンボリックリンクを張ります。

```
[taguchi@zdt01 /mnt]$ sudo ln -s /mnt/ZDT_Image/ /home/ftpuser/ZDT_Image
[taguchi@zdt01 /mnt]$ sudo ls -la /home/ftpuser
total 20
drwx------. 2 ftpuser ftpuser 4096 Oct 26 23:59 .
drwxr-xr-x. 6 root    root    4096 Sep 19 02:56 ..
-rw-r--r--. 1 ftpuser ftpuser   18 Mar 12  2019 .bash_logout
-rw-r--r--. 1 ftpuser ftpuser  193 Mar 12  2019 .bash_profile
-rw-r--r--. 1 ftpuser ftpuser  231 Mar 12  2019 .bashrc
lrwxrwxrwx. 1 root    root      15 Oct 26 23:59 ZDT_Image -> /mnt/ZDT_Image/
```

次に、イメージ・ストレージ・サーバーの情報を登録しておく必要があります。

管理コンソールにzdtadminでログインし、"イメージ・ストレージ"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9a2e3910-46cb-05f6-4a77-8e63976b1360.png)

イメージ・ストレージ・サーバーの情報を設定して保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a3c9329e-5b54-55b9-fed9-d38a5cfd9192.png)

"接続のテスト"をクリックして成功することを確認しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/20927984-139d-00a6-9eb3-a533add67b15.png)


### ライセンス・サーバー関連

ライセンス・サーバーの情報を登録しておく必要があります。

管理コンソールにzdtadminでログインし、"エミュレーター・ライセンス"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/cc39b883-b83d-1587-b275-2ca47c0eebc6.png)

ソフトウェアの1次の欄にライセンス・サーバーのホスト名を指定して保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bd4f2804-b583-4529-5f5a-d181cd17fbd3.png)

## イメージの作成 (from ADCD)

イメージ・ストレージ・サーバーのディレクトリ下(/mnt/ZDT_Image)に、adcdというディレクトリを作成します。その下にADCDの種類に応じて適当なディレクトリを作成します。ここでは2019_11(2019年11月のレベルのADCDを意味する)というディレクトリを作成します。
2019_11以下にはADCDのメタデータを意味するXMLファイル、さらにvolumesディレクトリ下に圧縮されたDASDイメージファイルを配置します。
階層構造としてはこんな感じです。

```
[taguchi@zdt01 /mnt/ZDT_Image]$ tree . --charset C
.
`-- adcd
    `-- 2019_11
        |-- ADCDTOOLS.XML
        `-- volumes
            |-- A4BLZ1.gz
            |-- A4C541.gz
            |-- A4C551.gz
            |-- A4CFG1.gz
            |-- A4DBAR.gz
            |-- A4DBB1.gz
            |-- A4DBB2.gz
            |-- A4DBC1.gz
            |-- A4DBC2.gz
            |-- A4DIS1.gz
            |-- A4DIS2.gz
            |-- A4DIS3.gz
            |-- A4IME1.gz
            |-- A4IMF1.gz
            |-- A4INM1.gz
            |-- A4KAN1.gz
            |-- A4PAGA.gz
            |-- A4PAGB.gz
            |-- A4PAGC.gz
            |-- A4PRD1.gz
            |-- A4PRD2.gz
            |-- A4PRD3.gz
            |-- A4PRD4.gz
            |-- A4RES1.ZPD
            |-- A4RES2.gz
            |-- A4SYS1.gz
            |-- A4USR1.gz
            |-- A4USS1.gz
            |-- A4USS2.gz
            |-- A4W901.gz
            |-- A4W902.gz
            |-- A4ZCX1.gz
            |-- SARES1.ZPD
            `-- ZDTRKT.gz

3 directories, 35 files
```


管理コンソールにzdtadminでログインし、"Application Developers Controlled Distributions(ADCD)"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b0e74df5-7fca-385e-be69-7ec9a45787b9.png)

adcd以下のディレクトリからADCDが検出されると、この画面で詳細を選択できるようになります。
ADCDバージョンを選択し、イメージ名を付けて、右側のコンポーネントから必要なコンポーネント選択して、イメージの作成をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ed634ba8-599c-0b06-338a-fb80c1224f4d.png)

z/OSはデフォルトで選択されるので、ここではそれ以外にCICS V5.5とDb2 V12を選択してみます。

メッセージを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/0e1d594c-1791-d6fb-2bde-2d6436b375b7.png)

## 作成されたアセットの確認

"モニターおよび管理" から、作成されたアセットを確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d97f2db4-2cbf-bbfd-671c-b0bf272b191e.png)

ADCDから取り込んだイメージと、ターゲット環境の情報が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f7e5fee4-f999-817b-0059-332bb023f8af.png)



## ZD&Tインスタンスの作成(デプロイ)
準備が整ったので、いよいよZD&Tインスタンスの作成です。
上で取り込んだイメージをターゲット環境にデプロイします。

"デプロイ"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ac5ffd79-cf76-4dd5-39a5-b59ca15abddb.png)

イメージもターゲット環境も今はそれぞれ1つずつしか作ってないので、それぞれ選択して、"イメージのデプロイ"をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d0b405cf-4a69-7bfa-4e9b-244fc2c6992f.png)

ユーザーIDにはZD&Tインスタンス実行用に作成したユーザーを指定します。そのユーザーでsshアクセスするための秘密鍵と、インストール先のディレクトリも指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/4e1a9274-faf4-83b3-8f02-3ff9144314ca.png)


ここで、ディレクトリの存在/アクセス権チェック、ライセンス・サーバーへのアクセスチェック(ncコマンド)が行われます。

z/OSの管理ユーザー(IBMUSER)のパスワードを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/edd81931-cd68-a640-fad1-e20b25db2fd6.png)

ZD&Tインスタンスに割り当てる各種リソース設定を行います。

プロセッサー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/0d3f7773-60ee-1686-d891-2a3bd2e90991.png)

メモリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/053c9796-6630-e366-cad4-7e967b8afb65.png)

IPLコマンドはデフォルトのまま(LOASxxにCS指定したらうまくうごかなかった...)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/657da716-b702-4f67-6a6a-256106bf9913.png)

デバイス・アドレス、IODFアドレス、LOADPARMは元にしているADCDのメタデータのXML(ADCDTOOLS.XML)に記載されているものがデフォルトで採用されています。

```xml:ADCDTOOLS.XML
...
        <zsystem_information>
                <zos_version>z/OS 02.04.00.0</zos_version>
                <load_suffix>AU</load_suffix>
                <iodf_address>0A82</iodf_address>
                <ipl_device_number>0A80</ipl_device_number>
...
```

※LOADxx接尾部(LOADPARM)は、以下から適当なものを選択可能なはずですが、デフォルトのAUというのがここには無い。CS指定したIPL時にらうまくVTAMが起動しませんでした。AUのままだと起動しました。ZD&Tで提供されるADCDのパッケージはここに記載されているものと完全に同一という訳では無く、ZD&T用にカスタマイズされているっぽい...。
参考: [ADCD z/OS V2R4 November Edition of 2019 - LOADPARMS Options](http://dtsc.dfw.ibm.com/MVSDS/'HTTPD2.ADCD.GLOBAL.SHTML(A24AREAD)'#Header_07)

最後、完了をクリックすると以下の状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/e67fb47b-8e86-c12e-1f5e-318f3e907682.png)

モニターを確認します。
エラーが発生すると、モニターで警告マークがつきますので、「・・・」のメニューからログの取得を行って、適宜修正します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a7edef8f-0b43-ab53-bb46-acbe42fc1209.png)

モニター画面でデプロイ進行中に以下のパーセンテージ表記をクリックすると詳細な進行状況が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f93ad833-4249-7375-f49e-987fa4a5cf6d.png)

進行状況詳細
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/85aa06a0-0acf-7794-69ef-5e723fa039fb.png)

完了すると、利用可能の状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/3a8df9ce-b640-15bd-6313-9fbd79edfbe0.png)


# PCOMからの接続

## マスター・コンソール
PCOMからマスター・コンソールに接続してみます。これはnon-SNA端末と呼ばれる端末に接続することになります。zdt02上では3270ぽーとでnon-SNA端末のポートをListenしているので、PCOMからzdt02上の3270ポートに対して接続構成を行います。LUNameにはmstconを指定します。

TN3270構成としてはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/75af71fa-b104-9721-79c7-9e49ab5b782e.png)

構成ファイルを直接編集する場合はこんな感じになります。一旦これはこのまま。

```xxx:xxx.WS
...
[Telnet3270]
HostName=zdt02
HostPortNumber=3270
Security=N
LastConfigHostDoesNotTimeout=N
CertSelection=AUTOSELECT
LUName=mstcon
[Communication]
Link=telnet3270
....
```

これで接続するとこういう画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/188e343d-e45a-311a-ae79-9a1afaa83363.png)

別途zdt02にteratermからibmsys1ユーザーログインして、以下のコマンドを実行します。

```
[ibmsys1@zdt02 ~]$ oprmsg 'V CN(*),ACTIVATE'
[ibmsys1@zdt02 ~]$ oprmsg 'V 700,CONSOLE'
```

すると、先ほどのPCOM画面がマスター・コンソールとして利用できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/1b89d966-3d41-3e87-edc0-892a1dab9d57.png)

## TSO

マスターコンソールと同様に3270ポートに対して接続構成を行いますが、TSO接続する場合LUNameをtso1としてください。(デフォルトではtso1～tso4までの4つのTSO用のnon-SNA端末が定義されています。)

```xxx:xxx.WS
...
[Telnet3270]
HostName=zdt02
HostPortNumber=3270
Security=N
LastConfigHostDoesNotTimeout=N
CertSelection=AUTOSELECT
LUName=tso1
[Communication]
Link=telnet3270
....
```

接続するとTSO画面が開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/36049045-c835-2416-7b71-b05b9bfb7d64.png)

L TSO と打って、IBMUSERでデプロイ時に指定したパスワードを指定してTSOにログインできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/642182fc-0018-fe25-653f-5c52f83113eb.png)

あとは普通のz/OSと同じように操作できます。

# ZD&Tインスタンスの起動/停止

モニター画面のインスタンスのメニューから、開始/停止の制御ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9f09f181-2aef-1f53-26d0-9a9de0139166.png)

※ただし、ここでの停止方法はいきなり電源OFFでOSごと強制終了するようなイメージになってしまうので注意が必要です。この手順で停止する前にミドルウェア等は事前に終了させておく必要があります。

# まとめ
これで一通り目標にしていた環境は整いました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/013b677c-a399-16e3-d36c-ea205bfa1da5.png)