はじめに
ここではWazi aaSのStock Imageを使用する場合の基本的な操作やカスタマイズの例について記載していきます。
※当記事は 2023年3月時点で提供されるStock Image: ibm-zos-2-4-s390x-dev-test-wazi-7 について記載しています。
関連記事
Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (1) 概要
Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (2) 仮想サーバー作成
Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (3) ネットワーク構成
Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (4) Wazi aaS への接続
Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (5) Stock Iamge確認
Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (6) Stock Iamge基本操作/カスタマイズ
Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (7) Wazi Image Builder
Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (7)' Wazi Image Builder - Trouble Shootingメモ
Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (8) Wazi aaS仮想サーバーの複製
Wazi aaS: クラウド上でのメインフレーム開発環境構築 - (9) TerraformによるWazi aaS仮想サーバーの管理
基本操作
シリアル・コンソール
参考: Connecting to z/OS virtual server instances - Using serial console from IBM Cloud UI
ブラウザからIBM Cloudにログインし、Wazi aaS仮想サーバーのシリアル・コンソールに接続することで、IPL操作やMVSコマンドの実行などが行えます。いわゆるマスター・コンソールの簡易版のようなイメージです。
仮想サーバー・インスタンスの一覧画面を開きます。Wazi aaS仮想サーバーの"アクション"アクションをクリックし、プルダウン・メニューから"シリアル・コンソールを開く"を選択します。
以下の画面が開くので、Ctrl+Lを押します(画面の指示とは違うので注意!)。
oprmsgコマンドを使用すると、MVSコマンドを投入できます。「D T」(タイムスタンプの表示)を試してみます。
Command欄にoprmsg 'D T'
と入力してみます。
MVSコマンドを投入できることが確認できました。
※タブキーでConsole出力欄とCommand入力欄の切り替えができます。Console出力欄にフォーカスが当たっている状態で↑↓キーで表示をスクロールできます。
シャットダウン
参考: Shutting down z/OS virtual server instances
※IBM Cloudの管理画面から仮想サーバーの停止をいきなり実施してしまうと、z/OS上の各サブシステムが稼働中に強制終了してしまう状況になります(いきなり電源が落ちるイメージ)。次回起動時に影響が出る可能性がありますので、各サブシステムを正常終了させてから仮想サーバーの停止を行うようにしてください。Stock ImageではNetviewのスクリプトでサブシステムをまとめて停止させることができますので、シリアル・コンソールから以下のコマンドを投入します。
oprmsg '%netv shutsys'
一通りサブシステムの終了が終わると、最終的にNetveiew自体のアドレス・スペースも終了します。
アドレス・スペース確認 ⇒ RACFのアドレススペースだけ残っている
念のためRACFを停止させておきます。以下のコマンドを投入。
oprmsg '<STOP'
再度アドレス・スペースの確認 ⇒ 全てのアドレス・スペースが停止されました。
IBM Cloudの管理画面にて仮想サーバー・インスタンスの一覧から、Wazi aaS仮想サーバーの右端のアクションメニューをクリックし、プルダウンメニューから"停止"を選択
IPL
Wazi aaSの仮想サーバーを開始すればz/OSまで自動で起動します。
参考: Changing active I/O software configuration for z/OS virtual server instances
Note: z/OS stock images always IPL with LOADxx member LOADK2 found in SYS0.IPLPARM.
シリアル・コンソールからアドレス・スペースの状況を確認し、TSOが上がってくればTSOへのログインが可能になります。
カスタマイズ例
タイム・ゾーン
デフォルトではCLOCKxxのTIMEZONE指定がTIMEZONE W.04.00.00
となっています。これを日本の標準時TIMEZONE E.09.00.00
に変更します
OPERATOR NOPROMPT
TIMEZONE E.09.00.00
STPMODE NO
STPZONE NO
ETRMODE NO
ETRZONE NO
USS側の設定も変更します。
/etc/profileを編集し、TZ=EST5EDT
となっているところを TZ=JST-9
に変更します。
/etc/profile抜粋
...
# ======================================================================
# TZ environment variable
# -----------------------
# Specifies the local time zone.
# ======================================================================
TZ=JST-9
export TZ
...
自動起動コンポーネントの制御
Stock Imageに含まれるいくつかのアドレス・スペースはNetview管理のスクリプトで自動起動されるよう制御されています。自動起動の有無は、IEASYMxxの変数で制御できるようになってます。以下のIEASYMxxの各変数でIPL
と指定されているコンポーネントはIPL時に自動起動の対象となります。NOS
と指定されているコンポーネントはIPL時に自動起動されません。(IPL時に自動起動させたくないコンポーネントについてはIPL
⇒NOS
に変更すればOKです。)
IEASYMxx抜粋
...
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')
...
TSOユーザー作成
TSOユーザー作成用のJCLサンプル
//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))
/*
//
管理用のユーザーを追加するイメージのサンプルです。以下のような設定でユーザーを作成しています。
- ユーザー: 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) 仮想サーバー作成 - データ・ボリュームの作成
上の記事でも記載したように、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 の概要
Block Storage for VPC は、インスタンスの作成時にブート・ボリュームとしてインスタンスに接続するか、または 2 次データ・ボリュームとして接続する、ブロック・レベルのボリュームを提供します。 リージョン内のアカウントごとに最大 300 個の Block Storage for VPC ボリュームを構成できます。 このクォータの引き上げを要求するには、サポート Case を開き、さらに多くのボリュームを必要とするゾーンを指定してください。
一度に 1 つの仮想サーバー・インスタンスに接続できるブート・ボリュームは 1 つのみですが、最大 12 個の Block Storage for VPC データ・ボリュームを単一インスタンスに接続できます。 その他の制限については、『ボリューム接続の制限』を参照してください。
1VOL:50GBにするとして、12個までとなると 50GB x 12 = 600GB くらいです。これ以上必要ということであればEAVの利用を検討する必要があります。
参考: Configuring additional disk volumes for z/OS 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
(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の例)
//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)
65,520シリンダー(≒55GB)を超えるサイズのDASDを扱う場合、EAV(Extended Address Volume)機能を有効化する必要があります。
動的変更: MVSコマンドSETSMS
を使用してオプションUSEEAV(YES)
を動的に設定します。
SETSMS USEEAV(YES)
IEE712I SETSMS PROCESSING COMPLETE
SMSオプション設定確認
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 = *
静的設定: IPL時にも有効化する場合は、IGDSMSxxにUSEEAV(YES)
を追記します。
SMS
ACDS(VSPROV.ACDS)
COMMDS(VSPROV.COMMDS)
INTERVAL(5)
SYSTEMS(32)
TRACE(ON)
TYPE(ERROR)
USEEAV(YES)
TOD変更
参考: Setting the time-of-day clock
以下の手順でIPLすることでTODの変更をすることができました。
恒常的なカスタマイズというよりは、システム・タイムの設定を変更して特定の日時でテストしたい場合の一時的な設定変更のイメージです。
CLOCKxxで OPERATOR PROMPT
を指定します。
例:
OPERATOR PROMPT
TIMEZONE E.09.00.00
STPMODE NO
STPZONE NO
ETRMODE NO
ETRZONE NO
※PARMLIBの変更はIPL時の挙動に大きく影響します。場合によってはIPLできなくなる可能性がありますのでご注意ください。
その後、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'
次にReplyでUを返すと、指定した時刻が反映されます。
oprmsg 'R 0,U'
反映された時刻が確認できるので、再度ReplyでUを返します。
oprmsg 'R 0,U'
その後IPLが進んでいき、指定した日時で起動されました。
FTPカスタマイズ
クラウド環境だとポート番号でネットワーク通信を制御したいことがよくあります。デフォルトだとFTPのデータ通信用のポートは1024~65535のいわゆるエフェメラル・ポートと呼ばれる範囲から動的に割り当てられることになり、これだと範囲が広すぎます。
Passiveモードでの通信時にデータ通信用のポート範囲を制御しておくと、ポートの制御がしやすいので制限しておくとよいでしょう。
Passiveモード時のデータ通信用ポートのレンジは"PASSIVEDATAPORTS" というFTPプロパティで制御できます。
参考: PASSIVEDATAPORTS (FTP server) statement
以下は、Passiveモードでのデータ通信用ポートのレンジを50000~50004に制限している例です。
...
PASSIVEDATAPORTS (50000,50004)
...
合せて、TCPIPプロファイルも設定変更し、上のポートを予約しておきます。
...
PORTRANGE 50000 5 TCP AUTHPORT
...