#はじめに
z/OSではIPL時に参照されるパラメーターがあちこちに散らばっていて、それらを辿るのに恐ろしく深くて広い階層が広がっているように感じてしまいます(慣れればそうでもないのでしょうけど)。
ここではD IPLINFO
コマンドで表示される情報から、各種PARMLIBなどを辿ってみます。
基本、各種パラメーターを設定するためのメンバー名のプレフィックスは固定で、後ろ2文字のサフィックスを可変にして実際どれを使うのか制御するということになっています(LOADxxとかIEASYSxxとか)。
前提: 主にミドルウェア担当者目線で個人的に良く見る所を書いてます。
環境: z/OS V2.1
#IPLINFO
SDSFで、D IPLINFO
でIPLに関する情報が確認できます。
D IPLINFO
IEE254I 20.01.44 IPLINFO DISPLAY 724
SYSTEM IPLED AT 15.42.13 ON 07/25/2016
RELEASE z/OS 02.01.00 LICENSE = z/OS
USED LOADT1 IN SYS1.IPLPARM ON 00A82
ARCHLVL = 2 MTLSHARE = N
IEASYM LIST = 00
IEASYS LIST = T1 (OP)
IODF DEVICE: ORIGINAL(00A82) CURRENT(00A82)
IPL DEVICE: ORIGINAL(00A80) CURRENT(00A80) VOLUME(S1RES1)
まずUSED LOADT1 IN SYS1.IPLPARM ON 00A82
という行に着目します。これは、アドレス0A82に割り当てられているVolume上のSYS1.IPLPARMデータセットのLOADT1というメンバーを参照してIPLされていることを示しています。
0A82というアドレスのVolumeの情報を見てみましょう。
D U,,,0A82,1
IEE457I 20.24.57 UNIT STATUS 766
UNIT TYPE STATUS VOLSER VOLSTATE
0A82 3390 A S1SYS1 STRG/RSDNT
S1SYS1というVOLSER名であることが分かりました。
#LOADxx
S1SYS1上の、SYS1.IPLPARM(LOADT1)を見てみましょう。
IODF 99 SYS1
SYSCAT S1SYS1113CCATALOG.Z21S.MASTER
SYSPARM T1
IEASYM 00
NUCLST 00
PARMLIB USER.PARMLIB S1CFG1
PARMLIB ADCD.Z21S.PARMLIB S1SYS1
PARMLIB SYS1.PARMLIB S1RES1
NUCLEUS 1
SYSPLEX ADCDPL
使用するIODFやらマスターカタログの情報などがあります。
SYSPARM T1
という行に注目してみましょう。これは、IEASYST1 というメンバーを参照することを指しています(IEASYSは固定でサフィックスとしてここではT1を使いますよという指定)。
メンバー名は分かりましたが、どこのデータセットにあるものを使うか、というと、下にPARMLIB ....
と指定されている行が複数ありますね。このPARMLIBで指定されたデータセットを上から順に探索し、はじめに出てくるIEASYST1が参照されます。
#IEASYSxx
2つ目のPARMLIBに指定されているADCD.Z21S.PARMLIBにIEASYST1が見つかったとしましょう。こいつを覗いてみると...
CLOCK=00, SELECT CLOCK00
CLPA,
CMB=(UNITR,COMM,GRAPH,CHRDR), ADDITIONAL CMB ENTRIES
CMD=T1,
CON=(00,NOJES3), SELECT CONSOL00
COUPLE=00, RRS
CSA=(3000,400000), CSA RANGE
DIAG=00, SELECT DIAG00, DIAGNOSTIC COMMANDS
DUMP=DASD, PLACE SVC DUMPS ON DASD DEVICES
FIX=00, SELECT IEAFIX00, FIX MODULES SPECIFIED
GRS=NONE, NO COORDINATION OF GRS REQUESTS
ILMMODE=NONE, EXPLICITLY DISABLE LICENSE MANAGER
LNKAUTH=LNKLST, AUTHORIZE LNKLST00, APFTAB IS ALTERNATE
LOGCLS=L, WILL NOT BE PRINTED BY DEFAULT
LOGLMT=999999, MAX WTL MESSAGES QUEUED, MUST BE 6 DIGITS
LOGREC=SYS1.LOGREC, ERROR RECORDING
LPA=T1, SELECT LPALSTCI
MAXUSER=250, SYS TASKS PLUS INITS PLUS TSOUSERS
MLPA=00, SELECT IEALPA00, MLPA PARAMETERS
MSTRJCL=00, SELECT MSTJCLEX, MASTER JCL
OMVS=(00,BP,IZ,BL,CI), SELECT BPXPRMXX
OPI=YES, ALLOW OPERATOR OVERRIDE
PAGE=(SYS1.PLPA.PAGE,
SYS1.COMMON.PAGE,
SYS1.LOCALA.PAGE,
SYS1.LOCALB.PAGE,L),
PAK=00, SELECT IEAPAK00
PLEXCFG=ANY, RRS
PROG=T1, SELECT PROGCI, DYNAMIC APF LIST
PROD=(00,01), PLEASE NOTE IFAPRD01
REAL=128, ALLOWS 2 64K OR 1 128K JOB TO RUN V=R
RSU=0, NO RECONFIG STORAGE UNITS
RSVNONR=100, RESERVED ASVT ENTRIES
RSVSTRT=5, RESERVED ASVT ENTRIES
SCH=DB, SELECT SCHED00
...(略)
こんな感じでパラメーターのリストがありますが、これも実は各メンバーのサフィックスが指定してあるだけなんです。こいつが各種パラメーターの親玉みたいなもんです。
例えば、CMD=T1
はCOMMNDxxのサフィックスがT1である、すなわちCOMMNDT1というメンバーを参照しますよという指定です。
例えば、OMVS=(00,BP,IZ,BL,CI)
というようにサフィックスが複数指定されているものもあります。OMVSの場合BPXPRMという固定のプレフィックスが付きますので、BPXPRM00, BPXPRMBP, BPXPRMIZ, BPXPRMBL, BPXPRMCI というメンバーを使用する、ということになります。用途によってメンバーを分ける場合などこのように複数メンバーに分けて管理されます。
データセットはIEASYSxxと同様、LOADxxに指定されたPARMLIBから探索されます。
#JES
JES関連のパラメーターを追ってみます。
IEASYSxxのMSTRJCL=00
の行を見ます。これはマスターJCLとしてMSTJCL00を参照することを意味します。同じADCD.Z21S.PARMLIBにあるものとしましょう。
//MSTJCL00 JOB MSGLEVEL=(1,1),TIME=1440
// EXEC PGM=IEEMB860,DPRTY=(15,15)
//STCINRDR DD SYSOUT=(A,INTRDR)
//TSOINRDR DD SYSOUT=(A,INTRDR)
//IEFPDSI DD DSN=ADCD.&SYSVER..PROCLIB,DISP=SHR
// DD DSN=SYS1.PROCLIB,DISP=SHR
//SYSUADS DD DSN=SYS1.UADS,DISP=SHR
//SYSLBC DD DSN=SYS1.BRODCAST,DISP=SHR
ここで、IEFPDSIというDDにコンカチされているデータセット(ADCD.&SYSVER..PROCLIB, SYS1.PROCLIB)に着目します。このDDを上から探索していって最初に見つかったJES2というメンバーがJES2のプロシージャーとして使用されます。
JES2の中身を見てみましょう。
//JES2 PROC MEMBER=JES2PARM,ALTMEM=JES2BACK
//IEFPROC EXEC PGM=HASJES20,DPRTY=(15,15),TIME=1440,PERFORM=9
//ALTPARM DD DSN=ADCD.&SYSVER..PARMLIB(&ALTMEM),DISP=SHR
//HASPPARM DD DSN=ADCD.&SYSVER..PARMLIB(&MEMBER),DISP=SHR
//PROC00 DD DSN=USER.PROCLIB,DISP=SHR
// DD DSN=ADCD.&SYSVER..PROCLIB,DISP=SHR
// DD DSN=CEE.SCEEPROC,DISP=SHR
// DD DSN=CSQ710.SCSQPROC,DISP=SHR
// DD DSN=IOE.SIOEPROC,DISP=SHR
// DD DSN=EOY.SEOYPROC,DISP=SHR
// DD DSN=HLA.SASMSAM1,DISP=SHR
// DD DSN=CBC.SCCNPRC,DISP=SHR
// DD DSN=SYS1.PROCLIB,DISP=SHR
//HASPLIST DD DDNAME=IEFRDER
PROC00というDDにコンカチされているデータセット(USER.PROCLIBなど)に注目して下さい。STARTコマンドで起動されるSTCタスクのプロシージャーなどは、ここにコンカチされているデータセットを順に探索して実行されます。
#VTAM
VTAMが使用するパラメーターはVTAM起動時オプションで指定されるのでVTAM起動コマンドを確認する必要があります。VTAM起動方法は環境によって異なりますが、COMMNDxxで起動される場合そこから辿れます。
COMMANDxxを参照
COM='S JES2,PARM='WARM,NOREQ''
COM='S VLF,SUB=MSTR'
COM='S VTAM,,,(LIST=00)'
COM='S VTAMT1'
COM='S DLF,SUB=MSTR'
COM='DD ADD,VOL=S1SYS1'
COM='DD NAME=SYS1.&ADCDLVL..DMP&SEQ'
COM='DD ALLOC=ACTIVE'
ここでCOM='S VTAM,,,(LIST=00)'
という行に着目します。ここでVTAMというプロシージャーをオプション付きでスタートさせています。
(VTAMという分かりやすいプロシージャー名が使われているのでよいですが、環境によっては全く異なる名前のプロシージャーを使っていることもあるので注意。)
LIST=00という指定は、ATCSTR00というメンバーをVTAM起動オプションとして参照することを指します。このメンバーの探索パスは、VTAM起動プロシージャーを参照する必要があります。
VTAMプロシージャーはJESの章で示したとおり、JES2のDDにコンカチされているデータセットから探索されます。
//VTAM PROC
//* DOC: THIS IS THE CATALOGED PROCEDURE USED FOR
//* STARTING ACF/VTAM.
//*
//* THE VTAMLST DD STATEMENT IDENTIFIES WHERE
//* VTAM NETWORK DEFINITION STATEMENTS AND START
//* OPTIONS ARE LOCATED.
//*
//* THE VTAMLIB DD STATEMENT IDENTIFIES WHERE THE
//* VTAM LOAD MODULES USED ONLY IN VTAM'S PRIVATE
//* ADDRESS SPACE ARE TO BE FOUND.
//*
//*
//VTAM EXEC PGM=ISTINM01,REGION=0M,
// DPRTY=(15,15),TIME=1440,PERFORM=8
//VTAMLST DD DISP=SHR,
// DSN=USER.VTAMLST
// DD DISP=SHR,
// DSN=ADCD.&SYSVER..VTAMLST
// DD DISP=SHR,
// DSN=SYS1.VTAMLST
//VTAMLIB DD DISP=SHR,
// DSN=USER.VTAMLIB
// DD DISP=SHR,
// DSN=ADCD.&SYSVER..VTAMLIB
// DD DISP=SHR,
// DSN=SYS1.VTAMLIB
//SISTCLIB DD DISP=SHR,
// DSN=SYS1.SISTCLIB
//SYSABEND DD SYSOUT=*,HOLD=YES
//DSDBCTRL DD DSN=SYS1.DSDBCTRL,DISP=SHR
//DSDB1 DD DSN=SYS1.DSDB1,DISP=SHR
//DSDB2 DD DSN=SYS1.DSDB2,DISP=SHR
//TRSDB DD DSN=SYS1.TRSDB,DISP=SHR
このVTAMLSTというDDにコンカチされているデータセットからATCSTRxxが探索されます。
CONFIG=00,SUPP=NOSUP,
SSCPID=06,NOPROMPT,
HOSTSA=6,MAXSUBA=31,
SSCPNAME=ADCDSSCP,HOSTPU=ADCD$PUC,
NETID=NETD,
NODETYPE=NN,
DYNLU=YES,
CRPLBUF=(208,,15,,1,16),
IOBUF=(400,508,19,,1,20),
LFBUF=(104,,0,,1,1),
LPBUF=(64,,0,,1,1),
SFBUF=(163,,0,,1,1)
*/*
*/* LIB: SYS1.VTAMLST(ATCSTR00)
*/* GDE: CBIPO COMMUNICATIONS
*/* DOC: THIS MEMBER CONTAINS THE ACF/VTAM DEFAULT
*/* START OPTIONS ON THE MODEL INSTALLATION SYSTEM.
*/*
ここに起動時パラメーターがいくつか指定されていますが、まだ階層は続きます。CONFIG=00
という指定は、ATCCON00というメンバーが参照されることを示しています。探索場所はATCSTRxxと同じです。
A0600,NSNA70X,DYNMODEL,COSAPPN,
A0TCP,OSATRL2,IMS11APL,IMS12APL,
IMS13APL,DB9GLU,CICSAPPL,DBAGLU,DBBGLU
ここに使用されるVTAM資源(TRL大ノードやらAPPL大ノードやら)のメンバー名が指定されています。
例えば...
OSATRL1 VBUILD TYPE=TRL
OSATRL1E TRLE LNCTL=MPC,READ=(0400),WRITE=(0401),DATAPATH=(0402), X
PORTNAME=ADM1ETP, X
MPCLEVEL=QDIO
CICSAPPL VBUILD TYPE=APPL
CICSTS52 APPL AUTH=(ACQ,VPACE,PASS),EAS=100,HAVAIL=YES, X
PARSESS=YES,SONSCIP=YES,VPACING=5
CICSTS51 APPL AUTH=(ACQ,VPACE,PASS),EAS=100,HAVAIL=YES, X
PARSESS=YES,SONSCIP=YES,VPACING=5
CICSTS42 APPL AUTH=(ACQ,VPACE,PASS),EAS=100,HAVAIL=YES, X
PARSESS=YES,SONSCIP=YES,VPACING=5
CT51* APPL AUTH=(ACQ,VPACE,PASS),EAS=100,HAVAIL=YES, X
PARSESS=YES,SONSCIP=YES,VPACING=5
ふー、長かった。
#TCPIP
TCPIPのパラメーターについてもVTAMと辿り方は似ています。
COMMNDxxから起動されているそれっぽいプロシージャーを見つけて、プロシージャーの中身を確認します。
//TCPIP PROC PARMS='CTRACE(CTIEZB00)'
//*
//TCPIP EXEC PGM=EZBTCPIP,REGION=0M,TIME=1440,
// PARM='&PARMS'
//*
//STEPLIB DD DSN=ADCD.&SYSVER..VTAMLIB,DISP=SHR
//*
//SYSPRINT DD SYSOUT=H,DCB=(RECFM=VB,LRECL=132,BLKSIZE=136)
//ALGPRINT DD SYSOUT=*,DCB=(RECFM=VB,LRECL=132,BLKSIZE=136)
//CFGPRINT DD SYSOUT=*,DCB=(RECFM=VB,LRECL=132,BLKSIZE=136)
//SYSOUT DD SYSOUT=H,DCB=(RECFM=VB,LRECL=132,BLKSIZE=136)
//CEEDUMP DD SYSOUT=*,DCB=(RECFM=VB,LRECL=132,BLKSIZE=136)
//SYSERROR DD SYSOUT=*
//*
//PROFILE DD DISP=SHR,DSN=ADCD.&SYSVER..TCPPARMS(PROF2)
//SYSTCPD DD DSN=TCPIP.TCPIP.DATA,DISP=SHR
末尾2行のDDが参照されるProfile, TCPDATAです。
#その他
あとはこの辺↓注目してみることが多いですが、IEASYSxxから辿るだけなので割愛。
PROGxx => APFとかLINKLSTとか
BPXPRMxx => zFS, MOUNT, Network関連とか
それから、所々出てくるシンボル(&xx.という書式のいわゆる変数ですね)は、IEASYMxxに定義されていたりします。