クラウド上でのメインフレーム開発環境構築 - (3) ライセンス管理

# はじめに
メインフレーム(z/OS)の開発環境をIBM Cloud上にセットアップしてみた時のログです。今回はライセンスのアクティベート処理について。

## 関連記事
[クラウド上でのメインフレーム開発環境構築 - (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)

# 全体像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2df6de4d-aac3-14bf-0967-3f5d0275f468.png)

今回はライセンス・サーバーに対してライセンスのアクティベート処理を行います。
ZD&Tインスタンスはライセンス・サーバーと通信を行いライセンスが有効であることが確認されると稼働できるようになります。従って、事前にライセンス・サーバーに有効なライセンスを適用しておく必要があります。
※もちろんこれは有償製品なので、事前にライセンスを購入しておく必要があります。

# ライセンスのアクティベート
参考: [ソフトウェア・ベースのライセンス交付](https://www.ibm.com/support/knowledgecenter/ja/SSTQBD_12.0.5/com.ibm.zsys.rdt.guide.activ.doc/topics/c_software_based_license_server.html)

ライセンスをアクティベートするには、大まかに以下のような流れで行います。

- ライセンス・サーバーでリクエスト・ファイルを作成
- リクエスト・ファイルを元にRational Licence Key CenterのWebサイトからアップデート・ファイルを取得
- アップデート・ファイルをライセンス・サーバーに適用

## リクエスト・ファイル作成
まず、ライセンス・サーバーを導入したサーバー上で、ライセンス・ファイルを入手するための"リクエスト・ファイル"なるものを作成する必要があります。このライセンス・ファイルには、ライセンス・サーバーのH/W情報などが含まれることになるため、H/W情報が変わってしまった場合はライセンスのアクティベートをし直す必要があります(そのため、クラウド上であっても特定のH/W上で稼働できる環境を選択する必要があります。今回は一時的なテスト環境のためめその辺は意識してません)。

参考: [IBM Z Development and Test Environment 12.0.5 - Overview](https://www.ibm.com/support/knowledgecenter/en/SSTQBD_12.0.5/com.ibm.zdt.overview.gs.doc/topics/c_product_overview.html)

>ZD&T Enterprise Edition and Parallel Sysplex can work on cloud and VMs. <font color="red">You need to make sure that the underlying hardware is not changed by your cloud service provider. CPU or hard drive needs to be a static entity to ensure that all ZD&T editions work.</font>

rootユーザーで/opt/IBM/LDK/以下のrequest_licenseコマンドを実行します。

```
[root@zdt01 ~]# cd /opt/IBM/LDK
[root@zdt01 /opt/IBM/LDK]# ./request_license
zPDT/LDK license request started.
fingerprint status 0
The request file created is: ~/zdt01_ibmj-cloud-freeusage-p052_cloud_1603110779.zip

Success
[root@zdt01 /opt/IBM/LDK]# ls -la ~ | grep zdt01
-rw-r--r--.  1 root root 1147 Oct 19 07:32 zdt01_ibmj-cloud-freeusage-p052_cloud_1603110779.zip
```

ホームディレクトリにリクエスト・ファイルが作成されました。
これをインターネット接続可能なPCに転送します。

## アップデート・ファイルの取得
※この作業はインターネット接続可能なPC上で行います。

参考: [ソフトウェア・ベースのライセンス交付 - 更新ファイルの取得 - ソフトウェア・ベースのライセンス・サーバーの場合](https://www.ibm.com/support/knowledgecenter/ja/SSTQBD_12.0.5/com.ibm.zsys.rdt.guide.activ.doc/topics/RDTAG36_sl.html)

上で取得したリクエスト・ファイルを元に、"アップデート・ファイル"というものを[Rational License Key Center](https://www.ibm.com/links?url=https%3A%2F%2Flicensing.subscribenet.com%2Fcontrol%2Fibmr%2Flogin)というWebサイトからインターネット経由で入手する必要があります。
ZD&Tは有償製品ですので購入時に取得したライセンス情報を元にRational License Key Centerでアカウントを作成しておく必要があります。
そのアカウントを使用して、上のガイドに従ってリクエスト・ファイルを元にアップデート・ファイルを生成します。
例: `zdt01_ibmj-cloud-freeusage-p052_cloud_1603110779_update.zip`
アップデート・ファイルを入手したらライセンス・サーバー上に転送します。

## アップデート・ファイルの適用
参考: [ソフトウェア・ベースのライセンス・サーバー・マシンへの更新ファイルの適用](https://www.ibm.com/support/knowledgecenter/ja/SSTQBD_12.0.5/com.ibm.zsys.rdt.guide.activ.doc/topics/obt_act_sblk.html)
ライセンスのアクティベートを行うために、入手したアップデート・ファイルをライセンス・サーバーに適用します。
アップデートファイルは`/root/License/zdt01_ibmj-cloud-freeusage-p052_cloud_1603110779_update.zip`に配置している想定です。
rootユーザーでupdate_licenseコマンドを実行します。

```
[root@zdt01 ~]# cd /opt/IBM/LDK/
[root@zdt01 /opt/IBM/LDK]# ./update_license /root/License/zdt01_ibmj-cloud-freeusage-p052_cloud_1603110779_update.zip
opened /root/License/zdt01_ibmj-cloud-freeusage-p052_cloud_1603110779_update.v2c
read
The license update was successful.
There were no additional results to display.
```

以下のコマンドで適用されたライセンスの確認ができます。

```
[root@zdt01 /opt/IBM/LDK]# ./query_license

The following key is available:

HASP-SL key_id=742677908500558229  feature(s):
FID Feature Name          Expiration         Logins MaxLogins
334-   ADCD License  Tue Oct 19,2021 18:59:59    0    1
333-    CPU License  Tue Oct 19,2021 18:59:59    0    8

Host Information:  zdt01.ibmj-cloud-freeusage-p052.cloud   localhost


 No login sessions
```

ibmsys1ユーザーで以下のコマンドを実行します。

```
[ibmsys1@zdt01 ~]$ cd /usr/z1090/bin/
[ibmsys1@zdt01 /usr/z1090/bin]$ ./uimserverstart

 uimserver is already running.
```

これでライセンスの適用は完了です。

# 補足

## ライセンス・サーバーの実体

ここまで、単に「ライセンス・サーバー」と言ってきたものの実体としては、細かくみると"ライセンス・サーバー"と"UIMサーバー"の2つのコンポーネントから構成されます。それぞれ1947, 9451のポートをListenしてZD&Tインスタンスのライセンスを管理します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/4c520eca-0915-e49a-8aa2-0f9a07c4da8c.png)

ライセンス・サーバーをセットアップすると、hasplmd.serviceというsystemdのサービスと、ibmsys1ユーザーのcrontabに`/usr/z1090/bin/uimserverstart` のエントリーが追加されます。

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

systemdサービス “hasplmd.service” により起動
コマンド: /usr/sbin/hasplmd
ポート: 1947(tcp, udp)


```xxx:systemd
[taguchi@zdt01 ~]$ sudo systemctl status hasplmd.service
● hasplmd.service - Sentinel LDK Runtime Environment (hasplmd daemon)
   Loaded: loaded (/etc/systemd/system/hasplmd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-10-19 07:29:03 CDT; 1 weeks 0 days ago
  Process: 1605 ExecStart=/usr/sbin/hasplmd -s (code=exited, status=0/SUCCESS)
 Main PID: 1619 (hasplmd)
   CGroup: /system.slice/hasplmd.service
           mq1619 /usr/sbin/hasplmd -s

Oct 19 07:29:03 zdt01.ibmj-cloud-freeusage-p052.cloud systemd[1]: Starting Sentinel LDK Runtime Environment (hasplmd daemon)...
Oct 19 07:29:03 zdt01.ibmj-cloud-freeusage-p052.cloud hasplmd[1619]: HASP LM v21.0.1.77814 loaded
Oct 19 07:29:03 zdt01.ibmj-cloud-freeusage-p052.cloud systemd[1]: Started Sentinel LDK Runtime Environment (hasplmd daemon).
```

```xxx:ポート
[taguchi@zdt01 ~]$ ss -an | grep 1947
udp    UNCONN     0      0         *:1947                  *:*
tcp    LISTEN     0      128       *:1947                  *:*

[taguchi@zdt01 ~]$ sudo lsof -i:1947
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
hasplmd 1619 root    9u  IPv4  15129      0t0  TCP *:sentinelsrm (LISTEN)
hasplmd 1619 root   10u  IPv4  15130      0t0  UDP *:sentinelsrm

[taguchi@zdt01 ~]$ sudo cat /etc/services | grep sentinelsrm
sentinelsrm     1947/tcp                # SentinelSRM
sentinelsrm     1947/udp                # SentinelSRM
```



### UIMサーバー

ibmsys1ユーザーのcrontabにより起動
コマンド: /usr/z1090/bin/uimserverstart
ポート: 9451(tcp)

```xxx:ibmsys1のcrontab
[ibmsys1@zdt01 /usr/z1090/bin]$ crontab -l
@reboot  /usr/z1090/bin/uimserverstart reboot > /dev/null
*/13 * * * * /usr/z1090/bin/uimserverstart > /dev/null
```

```xxx:プロセス
[taguchi@zdt01 ~]$ ps -ef | grep uimserver | grep -v grep
ibmsys1   1640     1  0 Oct19 ?        00:00:06 /usr/z1090/bin/uimserver
```

```xxx:ポート
[taguchi@zdt01 ~]$ ss -an | grep 9451
tcp    LISTEN     0      32        *:9451                  *:*

[taguchi@zdt01 ~]$ sudo lsof -i:9451
COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
uimserver 1640 ibmsys1    4u  IPv4  15350      0t0  TCP *:9451 (LISTEN)
```

## CP数について
管理対象の各ZD&Tインスタンスでは、Linuxが稼働しているサーバー(今回のようなCloud環境の場合は仮想サーバー)の論理コア数をZD&Tのプロセッサーとして割り当てることができます。
ライセンス・サーバーでは、管理対象のZD&Tインスタンスに割り当て可能なCP数のトータルの数が管理されます。

```
[root@zdt01 /opt/IBM/LDK]# ./query_license

The following key is available:

HASP-SL key_id=742677908500558229  feature(s):
FID Feature Name          Expiration         Logins MaxLogins
334-   ADCD License  Tue Oct 19,2021 18:59:59    0    1
333-    CPU License  Tue Oct 19,2021 18:59:59    0    8

Host Information:  zdt01.ibmj-cloud-freeusage-p052.cloud   localhost


 No login sessions
```

query_licenseコマンド結果の、CPU Licenseの MaxLoginsで示されている数が該当します(上の例だと"8")。

有効なCP数が"8"の場合、1CPずつ割り当てたインスタンスを8個構成する、8CP割り当てのインスタンスを1つ構成する、5CP割り当てのインスタンス1つ+3CP割り当てのインスタンスを1つ、といったようにライセンスで有効なCP数を超えない範囲で複数のインスタンスに割り振りが可能です。
1つのZD&Tインスタンスには、最大で8CPまで割り当て可能です。
参考: [Allocating multiple licenses](https://www.ibm.com/support/knowledgecenter/en/SSTQBD_12.0.5/com.ibm.zdt.zpdt.license.server.doc/topics/zpdt_managing_multiple_licenses.html)

各々のZD&Tに割り当てるCP数は、ZD&Tインスタンスが稼働するサーバーのCP数を超えることはできません。また、Linux稼働用に少なくとも1コアはZD&Tに割り当てずに残しておく必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f11538f8-73eb-428f-d695-a36602d8c30e.png)

1インスタンスに割り当てるCP数(上限8)については、それぞれGCP, zIIP, IFL(IBM Integrated Facility for Linux Processors)として認識させることができます。例えば、以下の定義例は7つ分のCPをZD&Tインスタンスに割り当てており、その内訳としてGCPx5, zIIPx2を指定しています。(数字の後にProcessorの種類をその数分だけ指定)

```xxx:DeviceMapファイル抜粋
[system]
processors      7 cp cp cp cp cp ziip ziip
memory          16G
3270port        3270
```

ちなみにzIIPとして割り当てた分はライセンスを消費しませんので、上の例だと5CP分のライセンスがあれば足ります。
(少なくともGCPは1つ以上指定する必要があり、全てzIIPとすることはできません。)

## ライセンスの更新について
上の手順を見ても分かるように、ライセンス・サーバーのH/W情報をリクエスト・ファイルという形で抽出してそれを元にアップデート・ファイルを生成し、ライセンスのアクティベートを行っています。そのため、ライセンス・サーバーのH/Wが変わるとライセンスが無効になってしまいます。その場合は再度アップデート・ファイルを入手しなおしてアクティベートする必要があります。

またライセンスの有効期間は1年ですので、1年ごとにライセンスの更新を行う必要があります。