Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (6) Stock Iamge基本操作/カスタマイズ

# はじめに
ここではWazi aaSのStock Imageを使用する場合の基本的な操作やカスタマイズの例について記載していきます。

※当記事は 2023年3月時点で提供されるStock Image: ibm-zos-2-4-s390x-dev-test-wazi-7 について記載しています。

## 関連記事

[Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (1) 概要](https://qiita.com/tomotagwork/items/487d91ea8ddfb50e7257)
[Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (2) 仮想サーバー作成](https://qiita.com/tomotagwork/items/9cea4c804f260d609eed)
[Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (3) ネットワーク構成](https://qiita.com/tomotagwork/items/be2803e504b87cf364e5)
[Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (4) Wazi aaS への接続](https://qiita.com/tomotagwork/items/b59717d767a91628b825)
[Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (5) Stock Iamge確認](https://qiita.com/tomotagwork/items/40b7eaec61e31f830cbe)
[Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (6) Stock Iamge基本操作/カスタマイズ](https://qiita.com/tomotagwork/items/0f2e914fd6263f2b40db)
[Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (7) Wazi Image Builder](https://qiita.com/tomotagwork/items/fcfd295aaa54fa597c4b)
[Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (7)' Wazi Image Builder - Trouble Shootingメモ](https://qiita.com/tomotagwork/items/fd804734595644a09d47)
[Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (8) Wazi aaS仮想サーバーの複製](https://qiita.com/tomotagwork/items/ef23025b1ca3800b73c1)
[Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (9) TerraformによるWazi aaS仮想サーバーの管理](https://qiita.com/tomotagwork/items/883652c1534d12f2b042)

# 基本操作

## シリアル・コンソール

参考: [Connecting to z/OS virtual server instances - Using serial console from IBM Cloud UI](https://www.ibm.com/docs/en/wazi-aas/1.0.0?topic=vpc-connecting-zos-virtual-server-instances)

ブラウザからIBM Cloudにログインし、Wazi aaS仮想サーバーのシリアル・コンソールに接続することで、IPL操作やMVSコマンドの実行などが行えます。いわゆるマスター・コンソールの簡易版のようなイメージです。

仮想サーバー・インスタンスの一覧画面を開きます。Wazi aaS仮想サーバーの"アクション"アクションをクリックし、プルダウン・メニューから"シリアル・コンソールを開く"を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/695721b8-30af-5d37-589e-b80e362e1054.png)

以下の画面が開くので、Ctrl+Lを押します(画面の指示とは違うので注意！)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f372239b-6475-0d92-4cf0-047b7f3d0776.png)

Command欄に`help`と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8a38c833-83e9-f1c5-1ddd-e8e3122c8a3f.png)

使用できるコマンドのヘルプが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d44f062b-582a-8d59-b645-a5ba4cc686ea.png)

oprmsgコマンドを使用すると、MVSコマンドを投入できます。「D T」(タイムスタンプの表示)を試してみます。
Command欄に`oprmsg 'D T'`と入力してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d0ddfae1-f510-dc46-e714-f07386bac786.png)

結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/490ef61c-366b-1d2d-d7db-52cda407ab73.png)

MVSコマンドを投入できることが確認できました。

※タブキーでConsole出力欄とCommand入力欄の切り替えができます。Console出力欄にフォーカスが当たっている状態で↑↓キーで表示をスクロールできます。


## シャットダウン
参考: [Shutting down z/OS virtual server instances](https://www.ibm.com/docs/en/wazi-aas/1.0.0?topic=vpc-shutting-down-zos-virtual-server-instances)

<font color="red">
※IBM Cloudの管理画面から仮想サーバーの停止をいきなり実施してしまうと、z/OS上の各サブシステムが稼働中に強制終了してしまう状況になります(いきなり電源が落ちるイメージ)。次回起動時に影響が出る可能性がありますので、各サブシステムを正常終了させてから仮想サーバーの停止を行うようにしてください。
</font>

Stock ImageではNetviewのスクリプトでサブシステムをまとめて停止させることができますので、シリアル・コンソールから以下のコマンドを投入します。

```
oprmsg '%netv shutsys'
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/39412d83-c293-0a73-5acf-c542aed08ad4.png)

一通りサブシステムの終了が終わると、最終的にNetveiew自体のアドレス・スペースも終了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/584b6921-63c7-0fa0-fa6f-cff6a7e6748e.png)

アドレス・スペース確認 ⇒ RACFのアドレススペースだけ残っている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/6a9a9bb3-90fe-0c06-09bd-d218f2aadf39.png)

念のためRACFを停止させておきます。以下のコマンドを投入。

```
oprmsg '<STOP'
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/7c21881d-acc6-0ab3-f6d7-60f412099d08.png)

再度アドレス・スペースの確認 ⇒ 全てのアドレス・スペースが停止されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bc1ebcb4-8618-b467-dc6f-ac667cc8b574.png)

IBM Cloudの管理画面にて仮想サーバー・インスタンスの一覧から、Wazi aaS仮想サーバーの右端のアクションメニューをクリックし、プルダウンメニューから"停止"を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b1834e8c-e7a0-ac78-4832-08876541b906.png)

停止をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/291fde70-fba6-19e4-ba70-9420e2fe1254.png)

Wazi aaS仮想サーバーが停止されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/33736e76-1c2e-5f32-6c03-c7aa3b55250f.png)

## IPL

Wazi aaSの仮想サーバーを開始すればz/OSまで自動で起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/0b91573a-2730-ffe5-0237-e65e07a571b8.png)

参考: [Changing active I/O software configuration for z/OS virtual server instances](https://www.ibm.com/docs/en/wazi-aas/1.0.0?topic=czvicv-changing-active-io-software-configuration-zos-virtual-server-instances)
>Note: z/OS stock images always IPL with LOADxx member LOADK2 found in SYS0.IPLPARM. 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2693857f-2009-ffeb-3070-6e9d18376391.png)

シリアル・コンソールからアドレス・スペースの状況を確認し、TSOが上がってくればTSOへのログインが可能になります。

# カスタマイズ例

## タイム・ゾーン

デフォルトではCLOCKxxのTIMEZONE指定が`TIMEZONE W.04.00.00`となっています。これを日本の標準時`TIMEZONE E.09.00.00`に変更します

```SYS1.PARMLIB(CLOCK00)
OPERATOR NOPROMPT    
TIMEZONE E.09.00.00  
STPMODE NO           
STPZONE NO           
ETRMODE NO           
ETRZONE NO           
```

USS側の設定も変更します。

/etc/profileを編集し、`TZ=EST5EDT` となっているところを `TZ=JST-9`に変更します。

<details><summary><font color="blue">/etc/profile抜粋</font></summary><div>

```sh:/etc/profile抜粋
...
# ======================================================================
#                      TZ environment variable
#                      -----------------------
# Specifies the local time zone.
# ======================================================================
TZ=JST-9
export TZ
...
```

</div></details>


## 自動起動コンポーネントの制御

Stock Imageに含まれるいくつかのアドレス・スペースはNetview管理のスクリプトで自動起動されるよう制御されています。自動起動の有無は、IEASYMxxの変数で制御できるようになってます。以下のIEASYMxxの各変数で`IPL`と指定されているコンポーネントはIPL時に自動起動の対象となります。`NOS`と指定されているコンポーネントはIPL時に自動起動されません。(IPL時に自動起動させたくないコンポーネントについては`IPL`⇒`NOS`に変更すればOKです。)

<details><summary><font color="blue">IEASYMxx抜粋</font></summary><div>

```K2.PARMLIB(IEASYMK2)抜粋
...
SYMDEF(&DBGMGR='IPL')
SYMDEF(&EQAPROF='IPL')
SYMDEF(&EQARMTD='IPL')
SYMDEF(&CICSTS61='IPL')
SYMDEF(&CSQ9MSTR='IPL')
SYMDEF(&CSQ9CHIN='IPL')
SYMDEF(&IMS15RL1='IPL')
SYMDEF(&IMS15CR1='IPL')
SYMDEF(&DBD1MSTR='IPL')
SYMDEF(&IZUANG1='IPL')
SYMDEF(&IZUSVR1='IPL')
SYMDEF(&JMON='IPL')
SYMDEF(&RSED='IPL')
SYMDEF(&RSEAPI='IPL')
SYMDEF(&DBB='IPL')
SYMDEF(&DBBS='IPL')
SYMDEF(&ZOSCSRV='IPL')
...
```

</div></details>


## TSOユーザー作成

<details><summary><font color="blue">TSOユーザー作成用のJCLサンプル</font></summary><div>

```ADDUSER
//ADDUSER  JOB   (),
//         CLASS=A,
//         MSGCLASS=D,
//         MSGLEVEL=(1,1),
//         TIME=1440
//*
//S0       EXEC PGM=IKJEFT01,DYNAMNBR=75,TIME=100,REGION=6M
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTERM  DD DUMMY
//SYSUADS  DD DSN=SYS1.UADS,DISP=SHR
//*SYSLBC   DD DSN=SYS1.BRODCAST,DISP=SHR
//SYSTSIN  DD *
  ADDUSER (TEST01) PASSWORD(PSWD) OPERATIONS   -
   OWNER(SYS1) DFLTGRP(SYS1)                                 -
   TSO(ACCTNUM(ACCT001) PROC(DB2PROC) JOBCLASS(A) MSGCLASS(X) -
      HOLDCLASS(X) SYSOUTCLASS(X) SIZE(4048) MAXSIZE(0)) -
   OMVS(UID(100100) HOME(/u/TEST01) PROGRAM(/bin/sh))
  PERMIT ACCT001   ACCESS(READ) CLASS(ACCTNUM) ID(TEST01)
  PERMIT DB2PROC   ACCESS(READ) CLASS(TSOPROC) ID(TEST01)
  PERMIT JCL       ACCESS(READ) CLASS(TSOAUTH) ID(TEST01)
  PERMIT OPER      ACCESS(READ) CLASS(TSOAUTH) ID(TEST01)
  PERMIT ACCT      ACCESS(READ) CLASS(TSOAUTH) ID(TEST01)
  PERMIT CONSOLE   ACCESS(READ) CLASS(TSOAUTH) ID(TEST01)
  SETROPTS RACLIST(ACCTNUM) REFRESH
  SETROPTS RACLIST(TSOPROC) REFRESH
  SETROPTS RACLIST(TSOAUTH) REFRESH
  CONNECT TEST01 GROUP(IZUADMIN)
/*
//*----------------------------------------------------------------
//ALIAS   EXEC PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
 DEF   ALIAS(NAME(TEST01) REL(CATALOG.VS01.TSO))
/*
//
```

</div></details>

管理用のユーザーを追加するイメージのサンプルです。以下のような設定でユーザーを作成しています。

- ユーザー: TEST01
- 初期パスワード: PSWD
- OMVS-UID: 100100
- OMVS-Home Directory: /u/TEST01
- z/OSMF: IZUADMINグループ



## DASD追加

Stock Imageで提供されているDASDは大抵SMS管理になっていて、ACS Routineに定義されていないユーザー作成のデータセットを作成する場合、通常はUSRVS1というVOLUMEが使われます。このVOLUMEはデフォルトだと空きが約10GB程度です。
これ以上のサイズのDASDが必要な場合は追加が必要になります。
DASDはIBM Cloud上のリソースでいうと、実体としてはVPC上のBlock Storageが使われます。Block Storageを作成してWazi aaSの仮想サーバーに割り当てると、それが1つのDASDとして利用できるようになります。

参考: [(2) 仮想サーバー作成 - データ・ボリュームの作成](https://qiita.com/tomotagwork/private/9cea4c804f260d609eed#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%9C%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%A0%E3%81%AE%E4%BD%9C%E6%88%90)

上の記事でも記載したように、65,520シリンダー(≒55GB)を超えるサイズのDASDを扱う場合は、z/OS側ではEAV(Extended Address Volume)という機能が使われますので、65,520シリンダーを超えるエリアを使用する際にはEAV用の設定が必要になります(PARMLIB IGDSMSxxでのUSEEAV=YES指定やBREAKPOINTVALUE指定、JCL DDステートメントでのEATTRオプション指定など)。
EAVを使用したくなければ、データ・ボリューム(Block Storage)の作成単位を55GB以下にしておくことをおすすめします。

ただし、以下の通り1インスタンスで使用できるデータ・ボリュームの数には制限がありますのでそちらもご注意ください(12個は少ない...)。
参考: [Block Storage for VPC の概要](https://cloud.ibm.com/docs/vpc?topic=vpc-block-storage-about&interface=ui)
>Block Storage for VPC は、インスタンスの作成時にブート・ボリュームとしてインスタンスに接続するか、または 2 次データ・ボリュームとして接続する、ブロック・レベルのボリュームを提供します。 リージョン内のアカウントごとに最大 300 個の Block Storage for VPC ボリュームを構成できます。 このクォータの引き上げを要求するには、[サポート Case を開き](https://cloud.ibm.com/docs/vpc?topic=vpc-manage-storage-limit)、さらに多くのボリュームを必要とするゾーンを指定してください。
一度に 1 つの仮想サーバー・インスタンスに接続できるブート・ボリュームは 1 つのみですが、**最大 12 個の Block Storage for VPC データ・ボリュームを単一インスタンスに接続できます。** その他の制限については、[『ボリューム接続の制限』](https://cloud.ibm.com/docs/vpc?topic=vpc-attaching-block-storage&interface=ui#vol-attach-limits)を参照してください。

1VOL:50GBにするとして、12個までとなると 50GB x 12 = 600GB くらいです。これ以上必要ということであればEAVの利用を検討する必要があります。

参考: [Configuring additional disk volumes for z/OS virtual server instances](https://www.ibm.com/docs/en/wazi-aas/1.0.0?topic=czvicv-configuring-additional-disk-volumes-zos-virtual-server-instances)

>If your z/OS instance is created by using one of the IBM-provided z/OS stock images, the size of the new block storage volume must not exceed 55 GB. The storage volumes larger than 55 GB are considered to be Extended Address Volumes (EAV). To work around this restriction and use larger volumes, you must run the command SETSMS USEEAV(YES) on the z/OS instance before you attach a larger block storage device. If you are using EAV volumes, you must also ensure the intended use case for the additional volume supports EAV.
In addition to running the command SETSMS USEEAV(YES), you also need to harden this new system setting in system parmlib in case the z/OS system is shut down and re-IPLed. Otherwise, the setting might be reverted to the default USEEAV(NO).

### DASD追加手順例

基本的には以下のガイドに従ってDASD追加を行います。

参考: [Configuring additional disk volumes for z/OS virtual server instances](https://www.ibm.com/docs/en/wazi-aas/1.0.0?topic=czvicv-configuring-additional-disk-volumes-zos-virtual-server-instances)

#### (1)Block Storageの作成
一般的な手順に従って、DASDとして認識させたサイズのBlock Storageを確保し、Wazi aaS仮想サーバーに割り当てます。
(ここでは詳細手順は省略)

#### (2)アタッチされるアドレスの確認
Wazi aaS仮想サーバーにBlock Storageが割り当てられると、TSOログオン時に以下のメッセージが表示されます。

```
 IKJ56455I IBMUSER LOGON IN PROGRESS AT 14:17:43 ON APRIL 24, 2023    
  Preparing attached block storage vdd of size 500G                   
  Attached block storage vdd1 on address DE02                         
 READY                                                                
```

上の例では、500GBのDASDが`DE02`というアドレスにアタッチされたことが分かります。
あとは通常のz/OSでの手順と同様、このアドレスをDASDとしてイニシャライズ、オンラインにして利用すればよいです。

#### (3)DASDイニシャライズ

以下のようなJCLを流してイニシャライズを行います。(non-SMSの例)

```jcl:INITDASD例
//INITDASD JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//* MOD-3: VTOC(0,1,974) INDEX(65,0,50)
//* MOD-9: VTOC(0,1,2939) INDEX(196,0,150)
//*
//FORMAT   EXEC PGM=ICKDSF,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
 INIT UNIT(DE02) NOVALIDATE NVFY VOLID(TEMP01) PURGE -
   VTOC(0,1,2939) INDEX(196,0,150)
/*
```

Reply聞かれるのでUを返す

```
*0006 ICK003D REPLY U TO ALTER VOLUME DE02 CONTENTS, ELSE T                
 R 6,U                                                                     
 IEE600I REPLY TO 0006 IS;U                                                
 ICK061I   DE02 VTOC INDEX CREATION SUCCESSFUL: VOLUME IS IN INDEX FORMAT  
 IEF404I INITDASD - ENDED - TIME=09.16.43                                  
 $HASP395 INITDASD ENDED - RC=0000                                         
 $HASP309 INIT 6    INACTIVE ******** C=A                                  
 SE '09.16.43 JOB00680 $HASP165 INITDASD ENDED AT N1 MAXCC=0000',LOGON,    
 USER=(IBMUSER)                                                            
```

#### (4)オンライン

以下のコマンドで`DE02`をオンラインにします。

```
V DE02,ONLINE                                                     
IEE476I UNIT DE02 INFORMATION     518                             
IEE763I NAME= IECDINIT CODE= 0000000001070401                     
IEC816I DE02 VARY ONLINE - CU AUTHORIZATION FAILED SER=IBM-00002  
IEE764I END OF IEE476I    RELATED MESSAGES                        
IEE302I DE02     ONLINE    
```

確認

```
D U,,,DE00                                           
IEE457I 09.19.40 UNIT STATUS 521                     
UNIT TYPE STATUS        VOLSER     VOLSTATE      SS  
DE00 3390 A             USRVS1     PRIV/RSDNT     0  
DE01 3390 A             DEVVS1     PRIV/RSDNT     0  
DE02 3390 O             TEMP01     PRIV/RSDNT     0  
DE03 3390 F-NRD                        /RSDNT     0  
DE04 3390 F-NRD                        /RSDNT     0  
DE05 3390 F-NRD                        /RSDNT     0  
DE06 3390 F-NRD                        /RSDNT     0  
DE07 3390 F-NRD                        /RSDNT     0  
DE08 3390 F-NRD                        /RSDNT     0  
DE09 3390 F-NRD                        /RSDNT     0  
DE0A 3390 F-NRD                        /RSDNT     0  
DE0B 3390 F-NRD                        /RSDNT     0  
DE0C 3390 F-NRD                        /RSDNT     0  
DE0D 3390 F-NRD                        /RSDNT     0  
DE0E 3390 F-NRD                        /RSDNT     0  
DE0F 3390 F-NRD                        /RSDNT     0  
```                                       

VTOC情報

```
Essssssssssssssssssssss VTOC Summary Information sssssssssssssssssssssssN 
e Volume . : TEMP01                                                     e 
e                                                                       e 
e Unit . . : 3390               Free Space                              e 
e                                                                       e 
e  VTOC Data                    Total              Tracks         Cyls  e 
e  Tracks  . :     2,939        Size  . . :     8,778,355      585,223  e 
e  %Used . . :         1        Largest . :     7,798,770      519,918  e 
e  Free DSCBS:   146,938        Free                                    e 
e                               Extents . :       3                     e 
e                                                                       e 
e  Volume Data                  Track Managed      Tracks         Cyls  e 
e  Tracks . :     8,781,570     Size  . . :       979,585       65,305  e 
e  %Used  . :             0     Largest . :       979,480       65,298  e 
e  Trks/Cyls:            15     Free                                    e 
e Command ===>                                                          e 
e  F1=Help    F2=Split   F3=Exit    F9=Swap   F12=Cancel                e 
DsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssM 
```

## EAV有効化
参考: [Controlling allocations to extended address volumes (EAVs)](https://www.ibm.com/docs/en/zos/2.4.0?topic=eavs-controlling-allocations-extended-address-volumes)

65,520シリンダー(≒55GB)を超えるサイズのDASDを扱う場合、EAV(Extended Address Volume)機能を有効化する必要があります。

動的変更: MVSコマンド`SETSMS`を使用してオプション`USEEAV(YES)`を動的に設定します。

```
SETSMS USEEAV(YES)                    
IEE712I SETSMS   PROCESSING COMPLETE  
```

<details><summary><font color="blue">SMSオプション設定確認</font></summary><div>

```
D SMS,OPTIONS                                      
IGD002I 13:03:26 DISPLAY SMS 696                   
ACDS     = VSPROV.ACDS                             
COMMDS   = VSPROV.COMMDS                           
ACDS LEVEL = z/OS V2.4                             
SMS PARMLIB MEMBER NAME = IGDSMS00                 
INTERVAL = 5           DINTERVAL = 150             
SMF_TIME = YES          CACHETIME = 3600           
CF_TIME = 3600          PDSE_RESTARTABLE_AS = NO   
PDSE_BMFTIME = 3600     PDSE1_BMFTIME = 3600       
PDSE_LRUTIME = 60       PDSE1_LRUTIME = 60         
PDSE_LRUCYCLES = 15    PDSE1_LRUCYCLES = 15        
LOCAL_DEADLOCK = 15     GLOBAL_DEADLOCK = 4        
REVERIFY = NO           DSNTYPE = PDS              
ACSDEFAULTS = NO        PDSESHARING = NORMAL       
OVRD_EXPDT = NO         SYSTEMS = 32               
PDSE_HSP_SIZE = 0MB   PDSE1_HSP_SIZE = 0MB         
USE_RESOWNER = YES      RLS_MAX_POOL_SIZE = 100MB  
RLSINIT = NO            RLSTMOUT = 0               
COMPRESS = GENERIC                                 
LOG_OF_LOGS =                                      
RLS_RECOV_LOGGING = NO                                           
CICSVR_INIT = NO        CICSVR_DSNAME_PREFIX = DWW.              
CICSVR_RCDS_PREFIX = DWW                                         
CICSVR_GRPNAME_SUFFIX = PROD                                     
CICSVR_ZZVALUE_PARM =                                            
CICSVR_UNDOLOG_CONTROL =                                         
CICSVR_UNDOLOG_PREFIX = DWW                                      
CICSVR_BACKOUT_CONTROL =                                         
CICSVR_GENERAL_CONTROL =                                         
IGD002I 13:03:26 DISPLAY SMS                                     
Rls_MaxCfFeatureLevel = Z                                        
RlsAboveThebarMaxPoolSize = 0  RlsFixedPoolSize = 0              
PDSE_MONITOR = (YES,0,0)  PDSE1_MONITOR = (YES,0,0)              
PDSE_DIRECTORY_STORAGE = 2000M PDSE1_DIRECTORY_STORAGE = 2000M   
PDSE_BUFFER_BEYOND_CLOSE = NO   PDSE1_BUFFER_BEYOND_CLOSE = NO   
GDS_RECLAIM = YES       DSSTIMEOUT = 0                           
BLOCKTOKENSIZE = NOREQUIRE       FAST_VOLSEL = OFF               
USEEAV = YES            BREAKPOINTVALUE = 10                     
OAMPROC =               SUPPRESS_DRMSGS = NO                     
OAMTASK =           PDSE_SYSEVENT_DONTSWAP = NO                  
DB2SSID =                SAM_USE_HPF = YES                     
CA_RECLAIM = DATACLAS                                          
PS_EXT_VERSION = 1      VSAM_ZHYPERLINK = NO                   
SUPPRESS_SMSMSG = IGD17054I(NO ) IGD17227I(NO ) IGD17395I(NO ) 
                  IGD17002I(NO )                               
HONOR_DSNTYPE_PDSE = NO   PDSE_VERSION = 1                     
USER_ACSVAR = ( , , )     BYPASS_CLUSTER_PREFERENCING = NO     
MAXGENS_LIMIT = 0                                              
PDSE_PENDING_DELETE_INTERVAL = 0                               
ACS_LOGWRITES = DISABLE                                        
ACS_ROUTINE_DEBUG = (DISABLE)                                  
IGD002I 13:03:26 DISPLAY SMS                                   
TRACE    = ON     SIZE = 128K     TYPE = ERROR                 
  JOBNAME = *    ASID = *                                      
  TRACING EVENTS:                                              
    MODULE = ON   SMSSJF = ON   SMSSSI = ON   ACSINT = ON      
    OPCMD  = ON   CONFC  = ON   CDSC   = ON   CONFS  = ON      
    MSG    = ON   ERR    = ON   CONFR  = ON   CONFA  = ON      
    ACSPRO = ON   IDAX   = ON   DISP   = ON   CATG   = ON      
    VOLREF = ON   SCHEDP = ON   SCHEDS = ON   VTOCL  = ON      
    VTOCD  = ON   VTOCR  = ON   VTOCC  = ON   VTOCA  = ON    
    RCD    = ON   DCF    = ON   DPN    = ON   TVR    = ON    
    DSTACK = ON   UAFF   = ON   DEBUG  = ON                  
VOLSELMSG = (OFF,0)    TYPE = ERROR    JOBNAME = *           
    ASID = *  STEPNAME = *                                   
    DSNAME = *                                               
```

</div></details>


静的設定: IPL時にも有効化する場合は、IGDSMSxxに`USEEAV(YES)`を追記します。

```SYS1.PARMLIB(IGDSMS00)
SMS                        
ACDS(VSPROV.ACDS)          
COMMDS(VSPROV.COMMDS)      
INTERVAL(5)                
SYSTEMS(32)                
TRACE(ON)                  
TYPE(ERROR)                
USEEAV(YES)                
```

## TOD変更

参考: [Setting the time-of-day clock](https://www.ibm.com/docs/en/zos/2.5.0?topic=command-setting-time-day-clock)

以下の手順でIPLすることでTODの変更をすることができました。
恒常的なカスタマイズというよりは、システム・タイムの設定を変更して特定の日時でテストしたい場合の一時的な設定変更のイメージです。

CLOCKxxで `OPERATOR PROMPT`を指定します。

例:

```SYS1.PARMLIB(CLOCK00)
OPERATOR PROMPT    
TIMEZONE E.09.00.00  
STPMODE NO           
STPZONE NO           
ETRMODE NO           
ETRZONE NO 
```

<font color="red">※PARMLIBの変更はIPL時の挙動に大きく影響します。場合によってはIPLできなくなる可能性がありますのでご注意ください。</font>

その後、Wazi aaSをシャットダウンし、IPLします。

シリアル・コンソールを開くと、IPLの際以下のようなメッセージが出力されます。
```
IEA888A UTC   DATE=2023.150,CLOCK=12.05.19                              
IEA888A LOCAL DATE=2023.150,CLOCK=21.05.19  REPLY U, OR UTC/LOCAL TIME  
```

これに対してoprmsgコマンド経由でReplyを以下のように返します。
`oprmsg 'R 0,DATE=2024.001,CLOCK=10.00.00,UTC'`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/25443752-dd9f-da37-094e-3b70fec26c44.png)

次にReplyでUを返すと、指定した時刻が反映されます。
`oprmsg 'R 0,U'`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/30cdd4cd-6d27-9631-38d5-f6e0de8ab82c.png)

反映された時刻が確認できるので、再度ReplyでUを返します。
`oprmsg 'R 0,U'`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/14601e22-ebe7-032f-b501-0cde6f37d215.png)

その後IPLが進んでいき、指定した日時で起動されました。

## FTPカスタマイズ
クラウド環境だとポート番号でネットワーク通信を制御したいことがよくあります。デフォルトだとFTPのデータ通信用のポートは1024～65535のいわゆるエフェメラル・ポートと呼ばれる範囲から動的に割り当てられることになり、これだと範囲が広すぎます。
Passiveモードでの通信時にデータ通信用のポート範囲を制御しておくと、ポートの制御がしやすいので制限しておくとよいでしょう。

Passiveモード時のデータ通信用ポートのレンジは"PASSIVEDATAPORTS" というFTPプロパティで制御できます。
参考: [PASSIVEDATAPORTS (FTP server) statement](https://www.ibm.com/docs/en/zos/2.5.0?topic=protocol-passivedataports-ftp-server-statement)

以下は、Passiveモードでのデータ通信用ポートのレンジを50000～50004に制限している例です。

```xxx:TCPIP.TCPPARMS(FTPSDATA)抜粋
...
PASSIVEDATAPORTS (50000,50004)
...
```

合せて、TCPIPプロファイルも設定変更し、上のポートを予約しておきます。

```xxx:K2.TCPPARMS(PROFILE)抜粋
...

PORTRANGE 50000 5 TCP AUTHPORT 
...
```