Zoweと戯れる - (1) インストール

# はじめに
z/OSの新しいインターフェースを提供するZowe("ゾーウィ")というオープンソースプロジェクトがあります。2019年4月にV1.1.0、5月にV1.2.0がリリースされました(オプションでの有償サポート契約もありますが、基本無償で入手可能です)。
従来のPCOMを使った3270ベースのユーザーインターフェースではなく、ブラウザ、コマンド、APIといった、イマドキの環境から利用しやすいインターフェースが提供されることになります。
コンセプトはすばらしいと思います。Command Level Interfaceが提供されるというのがグッと来ますねぇ。
はやくこれが当たり前に提供されるようになって欲しい。
ということで、この環境を使ってみたく、テスト環境にインストールしてみました。その時の作業ログです。

参考:
[Zowe Home](https://zowe.org/home/)
[Zowe Docs](https://docs.zowe.org/stable/)

## 関連記事
[Zoweと戯れる - (1) インストール](https://qiita.com/tomotagwork/items/e0fdb744f9c30fc224ed)
[Zoweと戯れる - (2) Zoweデスクトップ](https://qiita.com/tomotagwork/private/cc06368abf3a8caaaac5)
[Zoweと戯れる - (3) Zowe CLI](https://qiita.com/tomotagwork/private/78cd7c63dd00a29564a4)
[Zoweと戯れる - (4) VSCode Extension for Zowe](https://qiita.com/tomotagwork/items/8cdc99e669f8ae82eddc)

# 環境情報
今回使用する環境はz/OS V2.3を使用します。
Zoweの前提はこちら
[System requirements](https://docs.zowe.org/stable/user-guide/systemrequirements.html#z-os-system-requirements-host)
>z/OS Version 2.2 or later.
>IBM z/OS Management Facility (z/OSMF) Version 2.2 or Version 2.3

# セットアップ作業メモ
以下のドキュメントを参考に、インストールしていきます。
[Installing Zowe](https://docs.zowe.org/stable/user-guide/install-zos.html)

## VOLUME追加
結構USS上のサイズが必要です。
とりあえずZOWE用に3390-9型1本(≒8.5GB)用意して作業することにします。
今回はzD&T(IBM ZをIntel Linux上でエミュレーションする製品)の環境使うので、その辺のメモも残しておきます。

(1)DASDイメージファイル作成
コマンド例
```$ alcckd ZOWE00 -d3390-9```

(2) Devicemapファイル定義追加
```device 0AA6 3390 3390 /home/ibmsys1/z1090/disks/ZOWE00```

(3) IPL実施

(4) DASDイニシャライズ

```jcl:INITDASD
//INITDASD JOB CLASS=A,MSGCLASS=X,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(0AA5) NOVALIDATE NVFY VOLID(ZOWE01) PURGE -         
   VTOC(0,1,2939) INDEX(196,0,150)                             
/*     
```

(5) DASDオンライン
```V 0AA5,ONLINE```

(6) UCATとAlias作成しておく

```jcl:DEFUCAT
//DEFUCAT  JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID 
//*-----------------------------------------------------        
//STEP    EXEC PGM=IDCAMS                                       
//SYSPRINT DD  SYSOUT=*                                         
//SYSIN DD *                                                    
 DEFINE USERCATALOG (                               +           
              NAME(USERCAT.Z23A.ZOWE01)             +           
              VOL(ZOWE01)                           +           
              BUFSP(8192)                           +           
              CYL(20 10)                            +           
              ICFCATALOG                            +           
              )                                                 
/* 
```

```jcl:DEFALIAS
//DEFALIAS JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID   
//*-----------------------------------------------------          
//STEP    EXEC PGM=IDCAMS                                         
//SYSPRINT DD  SYSOUT=*                                           
//SYSIN DD *                                                      
 DEF ALIAS(NAME(ZOWE01) RELATE(USERCAT.Z23A.ZOWE01))              
/* 
```

## zFS準備

USS上にマウントするファイルシステム(zFS)を作成してマウントする。

(1) USS上にマウントポイント作成
とりあえず、以下のディレクトリにがっつりでかいzFSマウントして、この下を使うことにする。
```# mkdir /usr/lpp/util```

(2) zFS作成とマウント
Node.jsやらPythonやらzoweやらが結構でかいらしい。
USS上でファイル解凍することも考えて、がっつり4000シリンダー(≒3.0GB)くらいのもの作ってマウントします。(が、実際にはこれでも足りなかった...。最終的にはzFSとして4GBくらい消費してます。)

```jcl:ZFSCRE
//ZFSCRE   JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID         
//*-----------------------------------------------------                
//********************************************************************* 
//ALLOCZ   EXEC PGM=IDCAMS                                              
//SYSPRINT DD SYSOUT=*                                                  
//SYSIN    DD  *                                                        
   DEFINE CLUSTER(NAME(ZOWE01.ZFS) -                                    
   LINEAR CYLINDERS(4000 120) SHAREOPTIONS(3) VOLUMES(ZOWE01))          
//********************************************************************* 
//*        CHECK FOR CONDITION CODE 0 - JOB ENDS IF RC IS NOT 0       * 
//********************************************************************* 
//RCCHCK   IF ALLOCZ.RC=0 THEN                                          
//********************************************************************* 
//* FORMAT THIS STEP FORMATS YOUR NEWLY CREATED ZFS DATA SET.         * 
//*        THIS STEP SHOULD COMPLETE WITH A RETURN CODE OF 0.         * 
//********************************************************************* 
//FORMAT EXEC   PGM=IOEAGFMT,REGION=0M,                                 
//       PARM=('-aggregate ZOWE01.ZFS -compat')                         
//*  STEPLIB  DD DSN=IOE.SIOELMOD,DISP=SHR                              
//SYSPRINT DD     SYSOUT=*                                              
//********************************************************************* 
//*  MOUNT THIS STEP MOUNTS YOUR NEWLY CREATED ZFS FILE SYSTEM        * 
//*  USING THE AGGRGROW PARAMETER.                                    * 
//********************************************************************* 
//MOUNT    EXEC PGM=IKJEFT01                                            
//SYSTSPRT DD   SYSOUT=*                                                
//SYSPRINT DD   SYSOUT=*                                                
//SYSTSIN  DD   *                                                       
  MOUNT FILESYSTEM('ZOWE01.ZFS') +                                      
     TYPE(ZFS) MODE(RDWR) PARM('AGGRGROW') +                            
     MOUNTPOINT('/usr/lpp/util')                                        
//RCCHCK   ENDIF                                                        
```

IPL後も自動マウントされるように、BPXPRMxxにマウント指定しておきます。

```xxx:BPXPRMxx
MOUNT    FILESYSTEM('ZOWE01.ZFS')    
         MOUNTPOINT('/usr/lpp/util') 
         TYPE(ZFS) MODE(RDWR)        
```

※以降のステップを進めていくにあたって、zFS用のVSAMが87000トラックでExtentが頭打ちになってしまいました。どうやらVSAMの4GBのサイズに達してしまったらしい。
なので、一旦上のファイルシステムをアンマウントし、以下のようにEXTENDEDADDRESSABLEを指定して4GB以上のアクセスを可能にしてあげてから、マウントし直す必要がありました！(DEFINE CLUSTERでzFS作成するときにこれを最初から有効化する方法がイマイチ分からなかった...)

```JCL:ZFSALT
//ZFSALT   JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID   
//*-----------------------------------------------------          
//ALTER    EXEC PGM=IDCAMS                                        
//SYSPRINT DD   SYSOUT=*                                          
//SYSIN    DD   *                                                 
     ALTER -                                                      
          ZOWE01.ZFS -                                            
          EXTENDEDADDRESSABLE                                     
//*                                                               
```

参考: [DFSMS Access Method Services Commands - ALTER](https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.idai200/da6i2056.htm)


## Node.jsのセットアップ
Zowe Application Frameworkの前提としてNode.jsが必要らしいので、z/OS上にNode.jsをインストールします。

[Zowe - Installing Node.js on z/OS](https://zowe.github.io/docs-site/latest/user-guide/install-nodejs-zos.html#hardware-and-software-requirements)
上のサイトから、以下のnode.jsのダウンロードサイトへのリンクが張られています。
https://developer.ibm.com/node/sdk/ztp/#downloads-ztp
これはIBM SDK for node.js for z/OS のTrial版のようです。

z/OS版のnode.jsは基本ライセンスチャージは無しで入手できます。

- Traial(Webからダウンロード/ PAXアーカイブ形式) =>無償
- Official Procuct(shopzからオーダー/ SMP/E形式) => 無償
- Subscription & Support (サポート契約) => 有償

参考: 無償版の入手について
[IBM SDK for Node.js - z/OS](https://www.ibm.com/us-en/marketplace/sdk-nodejs-compiler-zos/purchase)
[How to obtain IBM SDK for Node.js – z/OS, at no charge](https://developer.ibm.com/mainframe/2019/04/17/ibm-sdk-for-node-js-z-os-at-no-charge/)

さて、飛ばされた先のダウンロードサイトみてみると...
[IBM SDK for Node.js – z/OS Trial](https://developer.ibm.com/node/sdk/ztp/#downloads-ztp)
んー、なんだかNode.jsの前提としてPerlとPythonとMakeも必要らしい。面倒だのう。まずはこれらを入手してインストールします。
これらはRocket Softwareのサイトからダウンロードできます。
ユーザー登録が必要ですが、無料で入手可能です。

例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2648155a-8bf6-5a84-98e1-e573f0b06796.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/74d44a9b-8d35-894f-6db8-cd78e34af84a.png)

以下をダウンロード
Gzip 1.9  (gzip-1.9-edc_b002.180703.tar 約1MB) 
  => 後続のブツが軒並みgzで提供されてるのでそれを解凍するためにまずコイツが必要！
bash 4.3 (bash-4.3_b018.170518.tar.gz 約1MB)
  => Pythonの前提になってるのでコイツも必要！
Perl 5.24.0 (perl-5.24.0_b007.180202.tar.gz 約30MB)
Python 2.7.13 (python-2017-04-12-py27.tar.gz 約480MB)
Make 4.1 (make-4.1_b0002.160426.tar.gz 約400KB)

### Gzip
USS上に/usr/lpp/util/Gzip作って、tarを転送してそこに解凍。
で、このディレクトリのbinをPATHに追加

```xxx:実行例
$ cd /usr/lpp/util/Gzip
$ tar -xvf gzip-1.9-edc_b002.180703.tar
$ export PATH=$PATH:/usr/lpp/util/Gzip/bin
```

これでgzipが使えるようになった。

```xxx:実行例
$ gzip --help
Usage: gzip [OPTION]... [FILE]...
Compress or uncompress FILEs (by default, compress FILES in-place).

Mandatory arguments to long options are mandatory for short options too.

  -c, --stdout      write on standard output, keep original files unchanged
  -d, --decompress  decompress
  -f, --force       force overwrite of output file and compress links
  -h, --help        give this help
  -k, --keep        keep (don't delete) input files
  -l, --list        list compressed file contents
  -L, --license     display software license
  -n, --no-name     do not save or restore the original name and timestamp
  -N, --name        save or restore the original name and timestamp
  -q, --quiet       suppress all warnings
  -r, --recursive   operate recursively on directories
      --rsyncable   make rsync-friendly archive
  -S, --suffix=SUF  use suffix SUF on compressed files
      --synchronous synchronous output (safer if system crashes, but slower)
  -t, --test        test compressed file integrity
  -v, --verbose     verbose mode (up to 4 times)
  -V, --version     display version number
  -1, --fast        compress faster
  -9, --best        compress better
  -z, --zedc        Unauthorized interface for zEnterprise Data Compression

With no FILE, or when FILE is -, read standard input.

Report bugs to <bug-gzip@gnu.org>.
```

展開後のGzipディレクトリサイズ: 2,398KB


### Bash
ダウンロードしたxxx.tar.gzファイルを/usr/lpp/util/Bash/に転送して解凍。
で、このディレクトリのbinをPATHに追加

```xxx:実行例
$ gunzip bash-4.3_b018.170518.tar.gz
$ tar -xvf bash-4.3_b018.170518.tar
$ export PATH=$PATH:/usr/lpp/util/Bash/bin
```

展開後のBashディレクトリサイズ:8,281KB (うちtarファイルが4MBくらい)


### Perl
ダウンロードしたxxx.tar.gzファイルを/usr/lpp/util/Perl/に転送して解凍。
で、このディレクトリのbinをPATHに追加

```xxx:実行例
$ gzip -d perl-5.24.0_b007.180202.tar.gz
$ tar -C /usr/lpp/util/Perl -xovf perl-5.24.0_b007.180202.tar
```
展開後のPerlディレクトリサイズ:248,177KB (うちtarファイルが120MBくらい)

```
$ chmod -R 755 /usr/lpp/util/Perl/bin/*
$ find /usr/lpp/util/Perl/lib -type f -exec chmod 644 {} \;
$ find /usr/lpp/util/Perl/lib -type f -name '*.so' -exec chmod 755 {} \;
$ cd /usr/lpp/util/Perl/bin
$ ./change_pwd_perl.sh
```

環境変数設定

```sh:.profile
### for Perl
export  _CEE_RUNOPTS='FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)'
export _TAG_REDIR_ERR='TXT'
export _TAG_REDIR_IN='TXT'
export _TAG_REDIR_OUT='TXT'
export PATH=$PATH:/usr/lpp/util/Perl/bin
export MANPATH=$MANPATH:/usr/lpp/util/Perl/share/man
export PERL5LIB=$PERL5LIB:/usr/lpp/util/Perl/lib/perl5
export LIBPATH=$LIBPATH:/usr/lpp/util/Perl/lib/perl5/5.24.0/os390/CORE
```

### Python
ダウンロードしたxxx.tar.gzファイルを/usr/lpp/util/Python/に転送して解凍。
で、このディレクトリのbinをPATHに追加
(一応installファイルの手順に倣ってみた)

```
$ cd /usr/lpp/util/Python
$ gzip -d -c python-2017-04-12-py27.tar.gz | tar xoUXf -
$ cd python-2017-04-12-py27
$ mv * ..
$ cd ..
$ rmdir python-2017-04-12-py27
```

展開後のPythonディレクトリサイズ:2,932,636KB (うちtar.gzファイルが480MBくらい)
なんと！ほとんどコイツで食いつぶされた。

```
$ rm python-2017-04-12-py27.tar.gz
$ export PKGS_BASE=`pwd`/pkgs
$ export BASH_PREFIX=/usr/lpp/util/Bash
$ export PERL_PREFIX=/usr/lpp/util/Perl
$ export _BPXK_AUTOCVT=ALL
$ python27/bin/install_all_packages
```

最終的なPtyhonディレクトリのサイズ: 2,508,833KB

参考: Pythonインストールについて
https://forum.rocketsoftware.com/t/python-installation-on-z-os-filesystem/577

環境変数設定

```sh:.profile
### for Python
export _BPXK_AUTOCVT=ALL
INSTALL=/usr/lpp/util/Python
export PYTHON_ENV=python27 # pr python36 or both, to match your desired environment
export PYTHON_HOME=/usr/lpp/util/Python/$PYTHON_ENV
export PATH=$PYTHON_HOME/bin:$PATH
export LIBPATH=$PYTHON_HOME/lib:$LIBPATH
export FFI_LIB=$PYTHON_HOME/lib/ffi
#export TERMINFO=$PYTHON_HOME/share/terminfo
export PKG_CONFIG_PATH=$PYTHON_HOME/lib/pkgconfig:$PYTHON_HOME/share/pkgconfig
export CURL_CA_BUNDLE=$PYTHON_HOME/etc/ssl/cacert.pem
```

これでPythonコマンド実行できた。

```
$ python -V
Python 2.7.13
```
※TERMINFO環境変数を有効化すると、teratermが文字化けしておかしなことになったのでコメントアウト。

### Make
ダウンロードしたxxx.tar.gzファイルを/usr/lpp/util/Make/に転送して解凍。
で、このディレクトリのbinをPATHに追加

```xxx:実行例
$ gunzip make-4.1_b0002.160426.tar.gz
$ tar -xvf make-4.1_b0002.160426.tar
$ export PATH=$PATH:/usr/lpp/util/Make/bin
```

展開後のMakeディレクトリサイズ:3,145KB (うちtarファイルが1.5MBくらい)

### Node.js

やっとNode.js。
以下からTrialをダウンロード。
https://developer.ibm.com/node/sdk/ztp/#downloads-ztp

※正式な製品版の場合はSMP/Eでのインストールとなります。

ダウンロードしたファイル: ibm-6.17.0.0-trial-node-v6.17.0-os390-s390x.pax.Z (約200MB)
ダウンロードしたファイルを/usr/lpp/util/Nodejs/に転送して解凍。

```xxx:実行例
$ pax -rf ibm-6.17.0.0-trial-node-v6.17.0-os390-s390x.pax.Z -x pax
```

展開後のNodejsディレクトリサイズ:645,172KB (うちpax.Zファイルが200MBくらい)

```xxx:実行例
$ rm ibm-6.17.0.0-trial-node-v6.17.0-os390-s390x.pax.Z
$ cd node-v6.17.0-os390-s390x
$ export COMPILER_INSTALL_HLQ=ZOWE01.CPP
$ ./unpack.pl
...
(中略)
<INFO> running : /Z23A/usr/lpp/util/Nodejs/node-v6.17.0-os390-s390x/bin/njsc++ ._temp.hello.cpp -o hello -qphaseid && /Z23A/usr/lpp/util/Nodejs/node-v6.17.0-os390-s390x/bin/run ./hello && rm -f ._temp.hello.cpp hello!
CNJ0000(I) Product(5655-SDK) Phase(CNJEOPTP) Level(D170803.N106)
CNJ0000(I) Product(5655-SDK) Phase(CNJDRVR ) Level(D170803.N106)
CNJ0000(I) Product(5655-SDK) Phase(CNJECL  ) Level(D170803.N106)
===-------------------------------------------------------------------------===
                             Front-end time report
===-------------------------------------------------------------------------===
  Total Execution Time: 23.0638 seconds (24.8405 wall clock)

   ---User Time---   --System Time--   --User+System--   ---Wall Time---  --- Name ---
  17.2979 (100.0%)   5.7660 (100.0%)  23.0638 (100.0%)  24.8405 (100.0%)  Front-end timer
  17.2979 (100.0%)   5.7660 (100.0%)  23.0638 (100.0%)  24.8405 (100.0%)  Total

CNJ0000(I) Product(5655-SDK) Phase(CNJETBY ) Level(D170803.N106)
CNJ0000(I) Product(5655-SDK) Phase(CNJECWI ) Level(D170803.N106)
W-TRANS - Phase Ends; CPU sec=0.37
OPTIMIZ - Phase Ends; CPU sec=0.06
REGALLO - Phase Ends; CPU sec=0.03
AS      - Phase Ends; CPU sec=0.05
Hello C++ World!
<INFO> installation complete!
```

unpack.plというperlのスクリプトで、以下のデータセットが意図しないVOLに作られてしまった。

```
Command - Enter "/" to select action                  Message           Volume 
-------------------------------------------------------------------------------
         ZOWE01                                                         *ALIAS 
         ZOWE01.CPP.ZOSV221.D170810.BINDER.LOAD                         A3SYS1 
         ZOWE01.CPP.ZOSV221.D170810.SCNJCMP                             A3SYS1 
         ZOWE01.SETUP.JCLLIB                                            ZOWE01 
         ZOWE01.ZFS                                                     *VSAM* 
         ZOWE01.ZFS.DATA                                                ZOWE01 
```

Perlのスクリプトざっとみると、COMPILER_INSTALL_VOLSER環境変数でVOL指定もできそうだった...。うーんしまった。面倒なのでそのまま。

この時点でサイズはこんくらい。

```
Command - Enter "/" to select action                        Tracks %Used   XT 
------------------------------------------------------------------------------
         ZOWE01                                                               
         ZOWE01.CPP.ZOSV221.D170810.BINDER.LOAD                 78   99     1 
         ZOWE01.CPP.ZOSV221.D170810.SCNJCMP                   3499   99     1 
         ZOWE01.SETUP.JCLLIB                                   150    2     1 
         ZOWE01.ZFS                                                           
         ZOWE01.ZFS.DATA                                     74400    ?     9 
```

最終的なNodejsディレクトリサイズ:736,277KB 

コマンド実行確認。

```
$ export PATH=$PATH:/usr/lpp/util/Nodejs/node-v6.17.0-os390-s390x/bin
$ node --version
v6.17.0
$ npm --version
3.10.10
```

## z/OSMFのセットアップ

上がっていなければ起動！

```
S IZUANG1                                                              
IRR812I PROFILE IZUANG1.* (G) IN THE STARTED CLASS WAS USED 174        
        TO START IZUANG1 WITH JOBNAME IZUANG1.                         
$HASP100 IZUANG1  ON STCINRDR                                          
IEF695I START IZUANG1  WITH JOBNAME IZUANG1  IS ASSIGNED TO USER IZUSVR
 , GROUP IZUADMIN                                                      
$HASP373 IZUANG1  STARTED                                              
IEF403I IZUANG1 - STARTED - TIME=19.01.27                              
CWWKB0069I INITIALIZATION IS COMPLETE FOR THE IZUANG1 ANGEL PROCESS.   

S IZUSVR1                                                              
IRR812I PROFILE IZUSVR1.* (G) IN THE STARTED CLASS WAS USED 183        
        TO START IZUSVR1 WITH JOBNAME IZUSVR1.                         
$HASP100 IZUSVR1  ON STCINRDR                                          
IEF695I START IZUSVR1  WITH JOBNAME IZUSVR1  IS ASSIGNED TO USER IZUSVR
 , GROUP IZUADMIN                                                      
$HASP373 IZUSVR1  STARTED                                              
IEF403I IZUSVR1 - STARTED - TIME=19.03.09                              
+IEE252I MEMBER IZUPRM00 FOUND IN ADCD.Z23A.PARMLIB                    
```

STDOUT確認

```xxx:STDOUT
...
IZUG056I: The file /var/zosmf/configuration/active_configuration.cfg            
        : was saved to a backup file                                            
        : /var/zosmf/configuration/backup_configuration.04.26.19.01.03.41.      
IZUG210I: The z/OSMF Configuration Utility has completed successfully at Fri Apr 26 01:03:42 UTC 2019.  
IZUG349I: The z/OSMF STANDALONE Server home page can be accessed at             
        : https://ZDTPE01.MK.ISE.COM:10443/zosmf                                
        : after the z/OSMF server is started on your system.                    
```

起動したら上のメッセージにあるアドレスにブラウザからアクセスしてみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f364bb91-312c-7d4f-9b59-ebd0bde885f2.png)

デフォルトだと各ユーザーはz/OSMF経由でアクセスする権限が無いので、RACFで適切な権限設定をする必要があります。
参考: [z/OSMF のセキュリティー構成要件](https://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.3.0/com.ibm.zos.v2r3.izua300/izuconfig_SecurityStructuresForZosmf.htm)
こあたりを参考に、とりあえず"USER01"に管理者用のグループ"IZUADMIN"を割当ててみます。
TSOコマンド: ```CONNECT USER01 GROUP(IZUADMIN)```
これでz/OSMFにログインできました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b5ba27de-cb69-1903-9e57-0987e2368274.png)


>※余談
>貧弱なPC(ThinkPad X230)で、VMWare Hypervisorで仮想化してLinux(RHEL)立てて、その上にzD&Tを起動するという構成になっているせいもあると思いますが、z/OSMFがむちゃくちゃ重い。この何重にも仮想化されている環境だとそもそもz/OSMF(実体はLiberty)が起動する際もCPUがブン回ってなかなか起動しない。普通にTN3270経由でPCOM使ったりCICS上げたりというのはそこまでストレス無く使えているんですが。Javaが厳しいのかしら。実環境だとziipにオフロードできるはずなのでそこまで問題にはならないんでしょうけど。実際、素のz/OS環境だとz/OSMFは割りとさくさく動いています。逆に言えばTN3270+PCOMはやっぱりパフォーマンスとしてはかなり優秀ですね。

z/OSMF起動時のログみてると、アプリの起動にやたらと時間がかかってる...

```
Launching zosmfServer (WebSphere Application Server 17.0.0.1, Liberty Dev Use 17.0.0.1, z/OSMF 2.3.0/wlp-1.0.16.cl170120170531-1330) on IBM J9 VM, version 8.0.5.0 - pmz6480sr5-20170905_01(SR5) (en_US)  
[AUDIT   ] CWWKE0001I: The server zosmfServer has been launched.                                                                    
[AUDIT   ] CWWKG0028A: Processing included configuration resource: /var/zosmf/configuration/servers/zosmfServer/apps/izucagui.xml   
[AUDIT   ] CWWKG0028A: Processing included configuration resource: /var/zosmf/configuration/servers/zosmfServer/apps/izucp.xml      
[AUDIT   ] CWWKG0028A: Processing included configuration resource: /var/zosmf/configuration/servers/zosmfServer/apps/izudDm.xml     
[AUDIT   ] CWWKG0028A: Processing included configuration resource: /var/zosmf/configuration/servers/zosmfServer/apps/izuIncidentLog.
[AUDIT   ] CWWKG0028A: Processing included configuration resource: /var/zosmf/configuration/servers/zosmfServer/apps/izuis.xml      
[AUDIT   ] CWWKG0028A: Processing included configuration resource: /var/zosmf/configuration/servers/zosmfServer/apps/izurm.xml      
[AUDIT   ] CWWKG0028A: Processing included configuration resource: /var/zosmf/configuration/servers/zosmfServer/apps/izuwlm.xml     
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilitySoftwareDeployment has not started in 30.129 seconds.                       
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityHelpApp has not started in 30.333 seconds.                                  
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityImportUtility has not started in 30.369 seconds.                            
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityResourceMonitoring has not started in 30.339 seconds.                       
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityWorkflow has not started in 30.422 seconds.                                 
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityTsoServices has not started in 30.371 seconds.                              
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityProvisioning has not started in 30.486 seconds.                             
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityWorkloadManagement has not started in 30.373 seconds.                       
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityCapacityProvisioning has not started in 30.372 seconds.                     
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityVariables has not started in 30.576 seconds.                                
[AUDIT   ] CWWKZ0022W: Application IzuConfigurationAssistant has not started in 30.385 seconds.  
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacility has not started in 30.070 seconds.                                        
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityIncidentLog has not started in 30.398 seconds.                             
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityRestFiles has not started in 30.058 seconds.                               
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityRestConsoles has not started in 30.178 seconds.                            
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityRestJobs has not started in 30.047 seconds.                                
[AUDIT   ] CWWKZ0022W: Application IzuManagementFacilityISPF has not started in 30.044 seconds.                                    
[AUDIT   ] CWWKF0015I: The server has the following interim fixes active in the runtime: PI81714,PI81297. For a full listing of ins
[AUDIT   ] CWWKF0012I: The server installed the following features: [jsp-2.2, servlet-3.0, ssl-1.0, jndi-1.0, jdbc-4.0, appSecurity
[AUDIT   ] CWWKF0011I: The server zosmfServer is ready to run a smarter planet.                                                    
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/restjobs/                        
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/IzuImportUtility/                
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/                                 
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/izur/                            
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/webispf/                         
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/tsoApp/                          
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/restfiles/                       
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/restconsoles/                    
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/pdw/                             
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/zwlm/                            
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/variables/   
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/izucp/                 
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/dm/                    
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/provisioning/          
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/workflow/              
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/ca/                    
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityRestJobs started in 505.946 seconds.                             
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/rest/                  
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityImportUtility started in 554.844 seconds.                        
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/helps/                 
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityTsoServices started in 577.276 seconds.                          
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityVariables started in 609.317 seconds.                            
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityRestConsoles started in 611.354 seconds.                         
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityISPF started in 628.453 seconds.                                 
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityResourceMonitoring started in 653.488 seconds.                   
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/resource-mgmt/         
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityRestFiles started in 680.577 seconds.                            
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityIncidentLog started in 730.876 seconds.                          
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityCapacityProvisioning started in 755.102 seconds.                 
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/IzuUICommon/           
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/swmgmt/                
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/zosmf/swmgmt/               
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityProvisioning started in 838.819 seconds.                        
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityWorkloadManagement started in 848.135 seconds.                  
[AUDIT   ] CWWKT0016I: Web application available (default_host): https://xxxxx:10443/IzuDojo/                    
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilitySoftwareDeployment started in 874.546 seconds.                  
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacility started in 895.880 seconds.                                    
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityWorkflow started in 898.926 seconds.                            
[AUDIT   ] CWWKZ0001I: Application IzuManagementFacilityHelpApp started in 1017.186 seconds.                            
[AUDIT   ] CWWKZ0001I: Application IzuConfigurationAssistant started in 1160.608 seconds.                                               
```

このzD&T環境だと無理があるかもしれないが...
とりあえずz/OSMF周りは必要に応じてカスタマイズするとして次に進もう。

## ZOWEのセットアップ
ようやくここからZOWE本体のセットアップにとりかかります。
以下の手順を参考に。
参考: [Installing Zowe on z/OS](https://zowe.github.io/docs-site/latest/user-guide/install-zos.html)

### インストーラーの入手
以下のサイトからダウンロード
[Zowe - download](https://zowe.org/download/)

zowe-1.2.0.pax / 約395MB
zowe-cli-package-1.2.0.zip / 約11MB

zowe-1.2.0.paxを、USS上の/usr/lpp/util/Zowe/以下にアップします。

### paxファイル展開

/usr/lpp/util/Zowe/に移動して以下のコマンド実行。
```$ pax -ppx -rf zowe-1.2.0.pax```

zowe-1.2.0以下にインストーラーが展開される。
展開後のZoweディレクトリサイズ:792,016KB (うちpax.Zファイルが395MBくらい)

```xxx:
$ cd /usr/lpp/util/Zowe/zowe-1.2.0
$ ls -la
total 112
drwxr-xr-x   6 OMVSKERN SYS1        8192 May  1 13:35 .
drwxr-xr-x   3 OMVSKERN SYS1        8192 May 13 12:38 ..
drwxr-xr-x   6 OMVSKERN SYS1        8192 May  1 13:35 files
drwxr-xr-x   2 OMVSKERN SYS1        8192 May  1 13:35 install
drwxr-xr-x   2 OMVSKERN SYS1        8192 May  1 13:07 licenses
-rw-r--r--   1 OMVSKERN SYS1         910 May  1 13:35 manifest.json
drwxr-xr-x   3 OMVSKERN SYS1        8192 May  1 13:35 scripts
```

ここから、Zoweランタイム、Zowe Cross Memory Sreverという2つのコンポーネントをインストールする必要があるようです。それぞれインストールしていきます。

### Zoweランタイム

#### zowe-install.ymlファイル編集


```yml:/usr/lpp/util/Zowe/zowe-1.2.0/install/zowe-install.yml
# =================================================================
# zowe install configuration
# =================================================================
# zowe-install: The directory that zowe will be installed into
install:
  rootDir=/usr/lpp/util/Zowe/1.2.0

api-mediation:
  catalogPort=7552
  discoveryPort=7553
  gatewayPort=7554
  externalCertificate=
  externalCertificateAlias=
  externalCertificateAuthorities=
  verifyCertificatesOfServices=true
  enableSso=false
  zosmfKeyring=IZUKeyring.IZUDFLT
  zosmfUser=IZUSVR

zos-services:
  jobsAPIPort=8545
  mvsAPIPort=8547

zowe-desktop-apps:
  jobsExplorerPort=8546
  mvsExplorerPort=8548
  ussExplorerPort=8550

zlux-server:
  httpsPort=8544
  zssPort=8542

terminals:
  sshPort=22
  telnetPort=23
# security=tls

# started task JCL member for Zowe job - these entries are not case-sensitive
zowe-server-proclib:
# dsName=SYS1.PROCLIB   # Example of required dataset name.  Do not enclose it in quotes.
#  If you omit the 'dsName' tag or specify 'dsName=auto',
#  the install script scans the datasets in the PROCLIB concatenation
#  and places the JCL member in the first dataset where the installing
#  user has write access.
  #dsName=auto
  dsName=USER.Z23A.PROCLIB.T1
  memberName=ZOWESVR

# Do not delete this last line
```

rootDir(zoweインストール先ディレクトリ)と、dsNameだけ環境に合わせて変更し、その他はデフォルト設定とします。
インストール先は、/usr/lpp/util/Zowe/1.2.0としたので、このディレクトリだけ作っておきます。

#### 事前チェック

```xxx:実行例
$ cd /usr/lpp/util/Zowe/zowe-1.2.0/install
$ ./zowe-check-prereqs.sh
Script zowe-check-prereqs.sh started
Info: INSTALL_DIR environment variable is empty
Info: INSTALL_DIR environment variable is now set to /Z23A/usr/lpp/util/Zowe/zowe-1.2.0/install

Check entries in the install directory
OK

Check user has the basic auth to list the resources

Check RACF or other SAF security settings are correct

Check IZUGUEST
Error: user IZUGUEST is not in group IZUUNGRP

Is opercmd available?

OK: opercmd is available

Check z/OS RELEASE
release of z/OS is RELEASE z/OS 02.03.00 LICENSE = z/OS
OK: version 02.03.00 is supported

Check install user is a member of the IZUADMIN group
Installer's TSO userid:
IBMUSER
installer's group(s):
IZUADMIN
OK

Check user can issue START/STOP commands
OK

Check user can issue SDSF commands
OK

Check the ports in the yaml file are not already in use
OK

Check z/OSMF servers are up
Error: Job IZUANG1 is not executing

Check enough free space is available in target z/OS USS HFS install folder
Info: Existing directory to be checked is /usr/lpp/util/Zowe/1.2.0
Error: NO adequate-sized area(s) found
size of largest free area in /usr/lpp/util/Zowe/1.2.0 is 440289 KB
minimum required is 450 MB

Check Node version
OK

Check Java version
OK

Check CEE_RUNOPTS
_CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)"


Check USS AUTOCVT
OK: OMVS AUTOCVT is set to OFF
Warning: _BPXK_AUTOCVT is set to ALL
OK: _BPXK_CCSIDS is not set

Script zowe-check-prereqs.sh ended
```

エラーになっているものをそれぞれ対応する。

>Check IZUGUEST
>Error: user IZUGUEST is not in group IZUUNGRP

以下のコマンド実行
TSOコマンド: ```CONNECT IZUGUEST GROUP(IZUUNGRP)````

>Check z/OSMF servers are up
>Error: Job IZUANG1 is not executing

ANGELプロセス挙げ忘れてたので、以下のコマンドで起動します。
```S IZUANG1```

>Check enough free space is available in target z/OS USS HFS install folder
>Info: Existing directory to be checked is /usr/lpp/util/Zowe/1.2.0
>Error: NO adequate-sized area(s) found
>size of largest free area in /usr/lpp/util/Zowe/1.2.0 is 440289 KB
minimum required is 450 MB

これは勝手にExtentされるはずなので放置します。

再度チェック！

```xxx:実行例
$ cd /usr/lpp/util/Zowe/zowe-1.2.0/install
$ ./zowe-check-prereqs.sh
Script zowe-check-prereqs.sh started
Info: INSTALL_DIR environment variable is empty
Info: INSTALL_DIR environment variable is now set to /Z23A/usr/lpp/util/Zowe/zowe-1.2.0/install

Check entries in the install directory
OK

Check user has the basic auth to list the resources

Check RACF or other SAF security settings are correct

Check IZUGUEST
OK

Is opercmd available?

OK: opercmd is available

Check z/OS RELEASE
release of z/OS is RELEASE z/OS 02.03.00 LICENSE = z/OS
OK: version 02.03.00 is supported

Check install user is a member of the IZUADMIN group
Installer's TSO userid:
IBMUSER
installer's group(s):
IZUADMIN
OK

Check user can issue START/STOP commands
OK

Check user can issue SDSF commands
OK

Check the ports in the yaml file are not already in use
OK

Check z/OSMF servers are up
OK

Check enough free space is available in target z/OS USS HFS install folder
Info: Existing directory to be checked is /usr/lpp/util/Zowe/1.2.0
Error: NO adequate-sized area(s) found
size of largest free area in /usr/lpp/util/Zowe/1.2.0 is 430921 KB
minimum required is 450 MB

Check job ICSF or CSF
OK

Check Node version
OK

Check Java version
OK

Check CEE_RUNOPTS
_CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)"


Check USS AUTOCVT
OK: OMVS AUTOCVT is set to OFF
Warning: _BPXK_AUTOCVT is set to ALL
OK: _BPXK_CCSIDS is not set

Script zowe-check-prereqs.sh ended
```


#### Zoweランタイムのインストール

インストール用シェルスクリプト実行

```xxx:実行例
$ cd /usr/lpp/util/Zowe/zowe-1.2.0/install
$ ./zowe-install.sh
---------------------------------------------------------------------
Locating Environment Variables...
  Liberty bootstrap.properties found  at /var/zosmf/configuration/servers/zosmfServer/
** Adding line: export ZOWE_ZOSMF_PATH=/var/zosmf/configuration/servers/zosmfServer/ to ~/.zowe_profile  **
** Adding line: export ZOWE_ZOSMF_PORT=10443 to ~/.zowe_profile  **
   java version 18 found at  /usr/lpp/java/J8.0_64
** Adding line: export ZOWE_JAVA_HOME=/usr/lpp/java/J8.0_64 to ~/.zowe_profile  **
  NODE_HOME value of /usr/lpp/util/Nodejs/node-v6.17.0-os390-s390x will be validated
** Adding line: export ZOWE_EXPLORER_HOST=ZDTPE01.MK.ISE.COM to ~/.zowe_profile  **
error : dig could not find IP of hostname ZDTPE01.MK.ISE.COM
    Please enter the ZOWE_IPADDRESS of this system
xx.xx.xx.xx
warning : ping ZDTPE01.MK.ISE.COM did not match stated IP address xx.xx.xx.xx
** Adding line: export ZOWE_IPADDRESS=xx.xx.xx.xx to ~/.zowe_profile  **
Reading install variables from zowe-install.sh
  ZOWE_ZOSMF_USERID not specified:  Defaulting to IZUSVR
Beginning install of Zowe 1.2.0 into directory  /usr/lpp/util/Zowe/1.2.0
-----
Zowe 1.2.0 runtime install completed into directory /usr/lpp/util/Zowe/1.2.0
The install script zowe-install.sh does not need to be re-run as it completed successfully
---------------------------------------------------------------------
Attempting to setup Zowe API Mediation Layer certificates ...
  Setting up Zowe API Mediation Layer certificates...
JIT: env var TR_Options is set to noResumableTrapHandler
JIT: env var TR_Options is set to noResumableTrapHandler
apiml_cm.sh --action trust-zosmf has failed. See /Z23A/usr/lpp/util/Zowe/zowe-1.2.0/install/..//log/2019-05-13-13-36-22.log for more details
WARNING: z/OSMF is not trusted by the API Mediation Layer. Follow instructions in Zowe documentation about manual steps to trust z/OSMF
  Issue following commands as a user that has permissions to export public certificates from z/OSMF keyring:
    cd /usr/lpp/util/Zowe/1.2.0/api-mediation
    scripts/apiml_cm.sh --action trust-zosmf --zosmf-keyring IZUKeyring.IZUDFLT --zosmf-userid IZUSVR
  Certificate setup done.
Attempting to setup Zowe Explorer API certificates ...
---------------------------------------------------------------------
Attempting to set Unix file permissions ...
  The permissions were successfully changed
---------------------------------------------------------------------
Attempting to create ZOWESVR PROCLIB member ...
Unable to create the PROCLIB member
  Failed to put ZOWESVR.JCL in a PROCLIB dataset.
  Please add it manually from /usr/lpp/util/Zowe/1.2.0/ZOWESVR.JCL to your PROCLIB
    To find PROCLIB datasets, issue /$D PROCLIB in SDSF
---------------------------------------------------------------------
To start Zowe run the script /usr/lpp/util/Zowe/1.2.0/scripts/zowe-start.sh
   (or in SDSF directly issue the command /S ZOWESVR)
To stop Zowe run the script /usr/lpp/util/Zowe/1.2.0/scripts/zowe-stop.sh
  (or in SDSF directly the command /C ZOWESVR)
```

logにこんな感じのエラーが出てた。

```
keytool error (likely untranslated): java.io.IOException: The private key of DefaultzOSMFCert.IZUDFLT is not available or no authority to access th
e private key
It is not possible to read z/OSMF keyring IZUSVR/IZUKeyring.IZUDFLT. The effective user ID was: OMVSKERN. You need to run this command as user that
 has access to the z/OSMF keyring:
  cd /Z23A/usr/lpp/util/Zowe/1.2.0/api-mediation
  scripts/apiml_cm.sh --action trust-zosmf --zosmf-keyring IZUKeyring.IZUDFLT --zosmf-userid IZUSVR
apiml_cm.sh --action trust-zosmf returned: 1
```

IBMUSERでやってんだけどな...。
とりあえず、IZUSVRユーザーにパスワード設定して、無理やり```su IZUSVR```でスイッチして上のスクリプト動かす。

```
$ cd /usr/lpp/util/Zowe/1.2.0/api-mediation
$ ./scripts/apiml_cm.sh --action trust-zosmf --zosmf-keyring IZUKeyring.IZUDFLT --zosmf-userid IZUSVR
Listing entries in the z/OSMF keyring (IZUKeyring.IZUDFLT):
JIT: env var TR_Options is set to noResumableTrapHandler

Keystore type: JCERACFKS
Keystore provider: IBMJCE

Your keystore contains 2 entries

zOSMFCA, May 9, 2019, trustedCertEntry,
Certificate fingerprint (SHA1): E4:92:C8:8B:0D:D7:2D:D5:32:8A:4C:21:A3:97:56:72:C4:C2:AF:10
DefaultzOSMFCert.IZUDFLT, May 9, 2019, keyEntry,
Certificate fingerprint (SHA1): 82:B6:65:27:1B:B0:AB:23:4A:48:C2:0A:FD:FB:51:21:4F:BC:D5:C6
JIT: env var TR_Options is set to noResumableTrapHandler
Exporting certificate 'zOSMFCA' from z/OSMF:
JIT: env var TR_Options is set to noResumableTrapHandler
Certificate stored in file </tmp/zosmf_cert_1.cer>
Import a certificate to the truststore:
Calling keytool -importcert -trustcacerts -noprompt -file /tmp/zosmf_cert_1.cer -alias zOSMFCA -keystore keystore/localhost/localhost.truststore.p12 -storepass password -storetype PKCS12
JIT: env var TR_Options is set to noResumableTrapHandler
Certificate was added to keystore
keytool error (likely untranslated): java.io.FileNotFoundException: keystore/localhost/localhost.truststore.p12 (EDC5111I Permission denied.)
keytool returned: 1
```

おしい。権限の問題っぽいので```CONNECT IZUSVR GROUP(SYS1) ```でIZUSVRユーザーにSYS1グループをくっつけてリトライ。

```
$ cd /usr/lpp/util/Zowe/1.2.0/api-mediation
$ ./scripts/apiml_cm.sh --action trust-zosmf --zosmf-keyring 
Listing entries in the z/OSMF keyring (IZUKeyring.IZUDFLT):
JIT: env var TR_Options is set to noResumableTrapHandler

Keystore type: JCERACFKS
Keystore provider: IBMJCE

Your keystore contains 2 entries

zOSMFCA, May 13, 2019, trustedCertEntry,
Certificate fingerprint (SHA1): E4:92:C8:8B:0D:D7:2D:D5:32:8A:4C:21:A3:97:56:72:C4:C2:AF:10
DefaultzOSMFCert.IZUDFLT, May 13, 2019, keyEntry,
Certificate fingerprint (SHA1): 82:B6:65:27:1B:B0:AB:23:4A:48:C2:0A:FD:FB:51:21:4F:BC:D5:C6
JIT: env var TR_Options is set to noResumableTrapHandler
Exporting certificate 'zOSMFCA' from z/OSMF:
JIT: env var TR_Options is set to noResumableTrapHandler
Certificate stored in file </tmp/zosmf_cert_1.cer>
Import a certificate to the truststore:
Calling keytool -importcert -trustcacerts -noprompt -file /tmp/zosmf_cert_1.cer -alias zOSMFCA -keystore keystore/localhost/localhost.truststore.p12 -storepass password -storetype PKCS12
JIT: env var TR_Options is set to noResumableTrapHandler
Certificate was added to keystore
keytool returned: 0
Exporting certificate 'DefaultzOSMFCert.IZUDFLT' from z/OSMF:
JIT: env var TR_Options is set to noResumableTrapHandler
Certificate stored in file </tmp/zosmf_cert_2.cer>
Import a certificate to the truststore:
Calling keytool -importcert -trustcacerts -noprompt -file /tmp/zosmf_cert_2.cer -alias DefaultzOSMFCert.IZUDFLT -keystore keystore/localhost/localhost.truststore.p12 -storepass password -storetype PKCS12
JIT: env var TR_Options is set to noResumableTrapHandler
Certificate was added to keystore
keytool returned: 0
```

ようやくOK。

IBMUSERのhome(/u/ibmuser/)に.zowe_profileというのが出来ていて環境変数の設定があったので、.profileに組込んでみました。(IPADDRESSだけ変更)

```sh:/u/ibmuser/.zowe_profile
export NODE_HOME=/usr/lpp/util/Nodejs/node-v6.17.0-os390-s390x
export ZOWE_ZOSMF_PATH=/var/zosmf/configuration/servers/zosmfServer/
export ZOWE_ZOSMF_PORT=10443
export ZOWE_JAVA_HOME=/usr/lpp/java/J8.0_64
export ZOWE_EXPLORER_HOST=ZDTPE01.MK.ISE.COM
export ZOWE_IPADDRESS=xxxxx
```

```sh:/u/ibmuser/.profile
### for Zowe
export ZOWE_ROOT_DIR=/usr/lpp/util/Zowe/1.2.0
. /u/ibmuser/.zowe_profile
```

起動プロシージャーの作成もなぜか失敗しているようなので、/usr/lpp/util/Zowe/1.2.0/ZOWESVR.JCLに作成されているプロシージャーを手動でUSER.Z23A.PROCLIB.T1(ZOWESVR)にコピーします。

※次のZOWEランタイム起動で、シェルスクリプト実行時におかしなSyntax Errorが出てしまいました。\_BPXK_AUTOCVT環境変数の指定が効いていないようで、コード変換がうまくされていない様子。/etc/profileに指定してもNGだったので、プロシージャーで明示的に\_BPXK_AUTOCVT=ALLを指定することにしました。

```xxx:USER.Z23A.PROCLIB.T1(ZOWESVR)
//ZOWESVR   PROC SRVRPATH='/usr/lpp/util/Zowe/1.2.0'                         
//*-------------------------------------------------------------------       
//* SRVRPATH - The path to the HFS directory where the                       
//*            server was installed.                                         
//*-------------------------------------------------------------------       
//EXPORT EXPORT SYMLIST=*                                                    
//*---------------------------------------------------------                 
//* Start the node server                                                    
//*---------------------------------------------------------                 
//ZOWESTEP EXEC PGM=BPXBATSL,REGION=0M,TIME=NOLIMIT,                         
//  PARM='PGM /bin/sh &SRVRPATH/scripts/internal/run-zowe.sh'                
//STDOUT   DD SYSOUT=*                                                       
//STDERR   DD SYSOUT=*                                                       
//STDENV   DD *                                   
_BPXK_AUTOCVT=ALL                         
```

#### Started task

以下のTSOコマンド実行

```
RDEFINE STARTED ZOWESVR.* UACC(NONE) STDATA(USER(IZUSVR) GROUP(IZUADMIN) PRIVILEGED(NO) TRUSTED(NO) TRACE(YES))  
SETROPTS REFRESH RACLIST(STARTED)
```

#### ユーザー権限

ユーザー"USER01"を管理者としてIZUADMINグループに登録

```
CONNECT (USER01) GROUP(IZUADMIN)
```

#### ZOWEランタイム起動

ZOWEランタイムを起動してみます。

```
$ cd /usr/lpp/util/Zowe/1.2.0/scripts
$ ./zowe-start.sh
S0W1      2019133  13:58:34.35             ISF031I CONSOLE MYCONS ACTIVATED
S0W1      2019133  13:58:34.35            -S ZOWESVR,SRVRPATH='/Z23A/usr/lpp/util/Zowe/1.2.0'
ISF754I Command 'SET CONSOLE MYCONS' generated from associated variable ISFCONS.
ISF776I Processing started for action 1 of 1.
ISF769I System command issued, command text: S ZOWESVR,SRVRPATH='/Z23A/usr/lpp/util/Zowe/1.2.0'.
ISF766I Request completed, status: NO RESPONSE RECEIVED.
Start command issued, check SDSF job log ...
```

これを実行すると、裏では色んなサービスがJava、もしくはNode.jsのアプリとしてポコポコ起動してくるようで、貧弱なZD&T環境だと重たい...。CPUが100%張り付きっぱなしになって画面のレスポンスが返らなくなる。
1時間後くらいにようやく落ち着いてきたのでZOWE*がListenしているポートをNETSTATで見てみると...

```
ZOWESVR3 00056845 0.0.0.0..7554          0.0.0.0..0             LISTEN
ZOWESVR3 000567B0 0.0.0.0..8546          0.0.0.0..0             LISTEN
ZOWESVR5 000567BD 0.0.0.0..8548          0.0.0.0..0             LISTEN
ZOWESVR5 000567BE 127.0.0.1..8542        0.0.0.0..0             LISTEN
ZOWESVR6 000567FC 0.0.0.0..8545          0.0.0.0..0             LISTEN
ZOWESVR6 00056827 0.0.0.0..7553          0.0.0.0..0             LISTEN
ZOWESVR7 000567C5 0.0.0.0..8550          0.0.0.0..0             LISTEN
ZOWESVR7 000567C4 0.0.0.0..8544          0.0.0.0..0             LISTEN
ZOWESVR9 00056D11 0.0.0.0..7552          0.0.0.0..0             LISTEN
ZOWESVR9 00056803 0.0.0.0..8547          0.0.0.0..0             LISTEN
```

それっぽいポートがListenされてました。

### Zowe Cross Memory Server

参考: [Manually installing the Zowe Cross Memory Server](https://zowe.github.io/docs-site/latest/user-guide/install-zos.html#manually-installing-the-zowe-cross-memory-server)

#### paxファイル展開

```
$ cd /usr/lpp/util/Zowe/zowe-1.2.0/files
$ mkdir zss
$ cd zss
$ pax -ppx -rf ../zss.pax
$ ls
LOADLIB    SAMPLIB    zssServer
```

#### ZWESIS01 load module and proclib

PDS 'ZOWE01.SISLOAD'を作成し、ライブラリーをコピー

```
$ cd LOADLIB
$ cp ZWESIS01 "//'ZOWE01.SISLOAD(ZWESIS01)'"
```

files/zss/SAMPLIB/ZWESIS01をPROCLIBにコピーしてDSNを環境に合わせて編集。

```xxx:USER.Z23A.PROCLIB.T1(ZWESIS01)
//ZWESIS01  PROC NAME='ZWESIS_STD',MEM=00,RGN=0M  
//********************************************************************/   
//ZWESIS01 EXEC PGM=ZWESIS01,REGION=&RGN,                                 
//         PARM='NAME=&NAME,MEM=&MEM'                                     
//STEPLIB  DD   DSNAME=ZOWE01.SISLOAD,DISP=SHR                            
//PARMLIB  DD   DSNAME=ZOWE01.SISSAMP,DISP=SHR                            
//SYSPRINT DD   SYSOUT=*                                                  
```

#### PPT Entry

ADCD.Z23A.PARMLIB(SCHED00)に以下を追加
```PPT PGMNAME(ZWESIS01) KEY(4) NOSWAP```

反映

```xxx:コマンド実行例
SET SCH=00                                                      
IEE252I MEMBER  SCHED00 FOUND IN ADCD.Z23A.PARMLIB              
IEF729I MT STATEMENT IGNORED, NOT SUPPORTED FOR DYNAMIC UPDATE. 
IEE536I SCH      VALUE 00 NOW IN EFFECT                         
```


#### APF-authorization

とりあえず動的変更。

```xxx:コマンド実行例
SETPROG APF,ADD,DSNAME=ZOWE01.SISLOAD,VOLUME=ZOWE01                
CSV410I DATA SET ZOWE01.SISLOAD ON VOLUME ZOWE01 ADDED TO APF LIST 

D PROG,APF,DSNAME=ZOWE01.SISLOAD         
CSV450I 17.30.02 PROG,APF DISPLAY 828    
FORMAT=DYNAMIC                           
ENTRY VOLUME DSNAME                      
   1  ZOWE01 ZOWE01.SISLOAD              
```

IPL後も有効化するため、PROGxxに以下を追加しておく。

```xxx:ADCD.Z23A.PARMLIB(PROGAB)
APF ADD                                                                 
    DSNAME(ZOWE01.SISLOAD)                               VOLUME(ZOWE01) 
```

#### PARMLIB member

PDS 'ZOWE01.SISSAMP'を作成し、files/zss/SAMPLIB/ZWESIP00をコピー

```
$ cd SAMPLIB
$ cp ZWESIP00 "//'ZOWE01.SISSAMP(ZWESIP00)'"
```

#### Security requirements for the cross memory server

FACILITYクラスはActiveになってるので、以下のTSOコマンドを実行

```
RDEFINE FACILITY ZWES.IS UACC(NONE)
PERMIT ZWES.IS CLASS(FACILITY) ID(IZUSVR) ACCESS(READ)
SETROPTS RACLIST(FACILITY) REFRESH
```

#### ICSF cryptographic services
保留

#### Security environment switching

FACILITYクラスにBPX.SERVER, BPX.DAEMONは定義されてるので、以下のTSOコマンドを実行

```
PERMIT BPX.SERVER CLASS(FACILITY) ID(IZUSVR) ACCESS(UPDATE)
PERMIT BPX.DAEMON CLASS(FACILITY) ID(IZUSVR) ACCESS(UPDATE)
SETROPTS RACLIST(FACILITY) REFRESH     
```

#### Zowe Cross Memory Serverの起動
SDSFから起動！

```
S ZWESIS01                                                              
S ZWESIS01                                                              
IRR812I PROFILE * (G) IN THE STARTED CLASS WAS USED 307                 
        TO START ZWESIS01 WITH JOBNAME ZWESIS01.                        
$HASP100 ZWESIS01 ON STCINRDR                                           
IEF695I START ZWESIS01 WITH JOBNAME ZWESIS01 IS ASSIGNED TO USER START1 
 , GROUP SYS1                                                           
$HASP373 ZWESIS01 STARTED                                               
ZWES0001I ZSS Cross-Memory Server starting, version is 1.0.5            
IEF761I ZWESIS01 ZWESIS01 PARMLIB ZWESIS DD IS ALREADY ALLOCATED AND    
WILL BE USED BY THIS TASK.                                              
IEE252I MEMBER ZWESIP00 FOUND IN ZOWE01.SISSAMP                         
ZWES0105I Core server initialization started 314                        
ZWES0240W Discarding outdated LPA module at 1D4F7000 (2019-03-29        
18:19:46.526373 - 2019-04-30 14:53:47.809793)                           
ZWES0109I Core server ready 316 
ZWES0200I Modify commands: 317                                         
           DISPLAY  OPTION_NAME  - Print service information           
             OPTION_NAME:                                              
               CONFIG - Print server configuration information (defau  
           FLUSH   - Print all pending log messages                    
           LOG <COMP_ID> <LOG_LEVEL> - Set log level                   
             COMP_ID:                                                  
               CMS   - Cross memory server                             
               CMSPC - PC routines                                     
               STC   - STC base                                        
             LOG_LEVEL:                                                
               SEVERE                                                  
               WARNING                                                 
               INFO                                                    
               DEBUG                                                   
               DEBUG2                                                  
               DEBUG3                                                                               
```

ModifyでDISPLAYコマンド打ってみる。

```                              
F ZWESIS01,DISPLAY                              
ZWES0220I Modify DISPLAY command received 319   
ZWES0222I Server name - 'ZWESIS_STD      '  320 
         Global area address = 0x1D547000       
           Version          = 2                 
           Key              = 4                 
           Subpool          = 228               
           Size             = 4096              
           Flags            = 0x00000000        
           Server address   = 0x1F872630        
           Server ASID      = 0x0065            
           Server flags     = 0x00000002        
           ECSA block count = 0                 
           PC-ss PC number  = 0x00180700        
           PC-ss seq number = 0x00000004        
           PC-cp PC number  = 0x00180701        
           PC-cp seq number = 0x00000004        
           PC log level     = 2                           
```

動いてるっぽい。

### インストール状況の確認

#### 構成確認

以下のスクリプトを実行。

```
$ cd /usr/lpp/util/Zowe/1.2.0/scripts
$ ./zowe-verify.sh
Script zowe-verify.sh started

Info: ZOWE_ROOT_DIR environment variable is set to /usr/lpp/util/Zowe/1.2.0

Check SAF security settings are correct
Check IZUSVR has UPDATE access to BPX.SERVER and BPX.DAEMON
OK

Check ZOWESVR processes are runnning /usr/lpp/util/Zowe/1.2.0 code
OK: /usr/lpp/util/Zowe/1.2.0 code is running in ZOWESVR

Check ZOWESVR processes are runnning nodeCluster code
nodeCluster OK
zluxCluster OK

Check ZOWESVR is defined as STC to RACF and is assigned correct userid and group.
OK: Found matching STARTED profile entry ZOWESVR.* for task ZOWESVR
OK: Profile ZOWESVR.* is assigned to user IZUSVR
OK: Profile ZOWESVR.* is assigned to group IZUADMIN
OK: Started task ZOWESVR is assigned to the correct RACF user and group

Info: ZOWE job name is ZOWESVR
Check ZOWESVR job is started with user IZUSVR
OK: job ZOWESVR is executing
Info: ZOWE_ROOT_DIR is set to /usr/lpp/util/Zowe/1.2.0
OK: opercmd is available

Check all ZOWESVR jobs have userid IZUSVR
OK: job ZOWESVR is executing
OK: All USERIDs of ZOWESVR are IZUSVR

check ZOWESVR jobs in execution
Info: ZOWESVR4 is not running
OK

Check port settings from Zowe config files
OK: api catalog port is 7552

OK: api discovery port is 7553

OK: api gateway port is 7554

OK: explorer jobs api server port is 8545

OK: explorer datasets api server port is 8547

OK: zlux server httpsPort is 8544
OK: zss server port is 8542
OK: zss server port is 8542


OK: terminal_sshPort is 22

OK: terminal_telnetPort is 23

OK: jes explorer server port is 8546

OK: mvs explorer server port is 8548

OK: uss explorer server port is 8550


Check explorer server https port in the 3 explorer web/index.html files
OK: Port 7554
OK: Port 7554
OK: Port 7554

Check Ports are assigned to jobs
Info: Ports in use by ZOWESVR1 jobs

Info: Ports in use by ZOWESVR3 jobs
07554
08546

Info: Ports in use by ZOWESVR5 jobs
08548
08542

Info: Ports in use by ZOWESVR6 jobs
08545
07553

Info: Ports in use by ZOWESVR7 jobs
08544
08550

Info: Ports in use by ZOWESVR8 jobs

Info: Ports in use by ZOWESVR9 jobs
07552
08547


Check Node is installed and working
OK: version is v6.17.0

Check version of z/OS
Info: release of z/OS is RELEASE z/OS 02.03.00 LICENSE = z/OS
OK: version 02.03.00 is supported

Check IZUFPROC
OK

Check zosmfServer is ready to run a smarter planet
Error: zosmfServer is not ready to run a smarter planet


Check servers are up

Check jobs AXR CEA ICSF CSF
OK

Check relevant -s extattr bits
OK

Check relevant -p extattr bits
OK

Check files are executable
OK

Script zowe-verify.sh finished
```

以下のエラーが出ました。

>Check zosmfServer is ready to run a smarter planet
Error: zosmfServer is not ready to run a smarter planet

z/OSMFの起動はしてるんだけどな...。
チェックしているスクリプトの中身見てみると、こんな感じで判定していました。

```sh:zowe-verify.sh(抜粋)
# 5. z/OSMF
echo
echo Check zosmfServer is ready to run a smarter planet
#  is zosmfServer ready to run a smarter planet?
zosmfMsgLog=/var/zosmf/data/logs/zosmfServer/logs/messages.log
ls $zosmfMsgLog 1> /dev/null
if [[ $? -eq 0 ]]
then
    # log file could be large ... msg is normally at record number 79.  Allow for 200.
    head -200 $zosmfMsgLog | iconv -f IBM-850 -t IBM-1047 | grep "zosmfServer is ready to run a smarter planet" > /dev/null
    if [[ $? -ne 0 ]]
    then
        echo Error: zosmfServer is not ready to run a smarter planet # > /dev/null
    else
        echo OK
    fi
fi
```

この部分！
```head -200 $zosmfMsgLog | iconv -f IBM-850 -t IBM-1047 | grep "zosmfServer is ready to run a smarter planet" > /dev/null```
z/OSMFのログ見て、ready to run a smarter planetのメッセージ有無を判定してるんですけど、当該ファイルはちゃんとタグ付けされてるのに、なぜかiconvで無駄にコード変換しちゃってる！んー、バグじゃね？あるいは\_BPXK_AUTOCVT辺りの指定が悪いのだろうか？でも正解がよく分からん。

```xxx:(参考)ファイル属性
$ ls -laT /var/zosmf/data/logs/zosmfServer/logs | grep messages.log
t ISO8859-1   T=on  -rw-rw----   1 IZUSVR   IZUADMIN   25862 May  9 15:33 messages.log
```

案の定、素で上のコマンド打つと文字化けしますな。iconvはずせばうまくひっかかりますので、このメッセージは無視します。(iconv省けばOKになるはず)

ということで、ここはクリアとみなします。

#### Verifying Zowe Application Framework installation

ブラウザから以下にアクセスしてみる
https://hostname:8544/ZLUX/plugins/org.zowe.zlux.bootstrap/web/index.html

ログイン画面キターーーー！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b1eb1a74-f928-d82d-82d6-37e2b50be1be.png)

ログインするとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/6b61cceb-d05f-ddfc-43eb-2efd30c22a7b.png)


#### Verifying z/OS Services installation


ブラウザから```https://hostname:7554/api/v1/jobs?prefix=*```にアクセス

ユーザーID/パスワード入力後、認証したユーザー(USER01)のJOBの結果が返されました！
うまくいったようです。

```xxx:結果
{

    "items": [
        {
            "jobId": "TSU00097",
            "jobName": "USER01",
            "owner": "USER01",
            "type": "TSU",
            "status": "OUTPUT",
            "returnCode": "ABEND S622",
            "subsystem": "JES2",
            "executionClass": "TSU",
            "phaseName": "Job is on the hard copy queue"
        },
        {
            "jobId": "TSU00034",
            "jobName": "USER01",
            "owner": "USER01",
            "type": "TSU",
            "status": "OUTPUT",
            "returnCode": "ABEND S622",
            "subsystem": "JES2",
            "executionClass": "TSU",
            "phaseName": "Job is on the hard copy queue"
        },
        {
            "jobId": "TSU00127",
            "jobName": "USER01",
            "owner": "USER01",
            "type": "TSU",
            "status": "ACTIVE",
            "returnCode": null,
            "subsystem": "JES2",
            "executionClass": "TSU",
            "phaseName": "Job is actively executing"
        }
    ]

}
```

#### Verifying API Mediation installation

ブラウザから```https://hostname:7554/api/v1/apicatalog/application/state```にアクセス

```xxx:結果
{

    "messages": [
        {
            "messageType": "ERROR",
            "messageNumber": "MFS0104",
            "messageContent": "No response received within the allowed time: The service did not respond in time",
            "messageKey": "apiml.common.serviceTimeout"
        }
    ]

}
```


```sh:/usr/lpp/util/Zowe/1.2.0/api-mediation/scripts/api-mediation-start-gateway.sh
export JAVA_HOME=/usr/lpp/java/J8.0_64
if [[ ":$PATH:" == *":$JAVA_HOME/bin:"* ]]; then
  echo "ZOWE_JAVA_HOME already exists on the PATH"
else
  echo "Appending ZOWE_JAVA_HOME/bin to the PATH..."
  export PATH=$PATH:$JAVA_HOME/bin
  echo "Done."
fi

DIR=`dirname $0`

java -Xms32m -Xmx256m -Xquickstart \
    -Dibm.serversocket.recover=true \
    -Dfile.encoding=UTF-8 \
    -Djava.io.tmpdir=/tmp \
    -Dspring.profiles.include= \
    -Dapiml.service.hostname=ZDTPE01.MK.ISE.COM \
    -Dapiml.service.port=7554 \
    -Dapiml.service.discoveryServiceUrls=https://ZDTPE01.MK.ISE.COM:7553/eureka/ \
    -Dapiml.service.preferIpAddress=true \
    -Dapiml.service.ipAddress=xxxxx \
    -Dapiml.gateway.timeoutMillis=900000 \
    -Dapiml.security.verifySslCertificatesOfServices=true \
    -Dapiml.security.zosmfServiceId=zosmf \
    -Dserver.address=0.0.0.0 \
    -Dserver.ssl.enabled=true \
    -Dserver.ssl.keyStore=$DIR/../keystore/localhost/localhost.keystore.p12 \
    -Dserver.ssl.keyStoreType=PKCS12 \
    -Dserver.ssl.keyStorePassword=password \
    -Dserver.ssl.keyAlias=localhost \
    -Dserver.ssl.keyPassword=password \
    -Dserver.ssl.trustStore=$DIR/../keystore/localhost/localhost.truststore.p12 \
    -Dserver.ssl.trustStoreType=PKCS12 \
    -Dserver.ssl.trustStorePassword=password \
    -Djava.protocol.handler.pkgs=com.ibm.crypto.provider \
    -jar $DIR/../gateway-service.jar &
```

以下の指定が30000msec(30sec)になっていたので、900000msec(900sec)に変更してみる。(マシンが貧弱なので極端に大きくしてみる)
```-Dapiml.gateway.timeoutMillis=900000 \```

タイムアウトのエラーは出なくなったが、404のエラーになっちゃいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9df4b8aa-f437-e3bd-80aa-0c7b4d045e16.png)

Dashboadのリンクをクリックすると以下のページに飛ばされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f56eec24-7db9-9094-9895-bed34d1d0d85.png)

うーん、最後のチェックなんだけど、微妙な状況になってしまいました。
とりあえず一旦保留にして、必要に応じて直していこうかと。

ということでインストールは一区切りとします。

# おまけ

ZOWE用のデータセットはこんな感じになりました。サイズでか過ぎ...

```
DSLIST - Data Sets Matching ZOWE01                                  Row 1 of 8
                                                                              
Command - Enter "/" to select action                        Tracks %Used   XT 
------------------------------------------------------------------------------
         ZOWE01                                                               
         ZOWE01.CPP.ZOSV221.D170810.BINDER.LOAD                 78   99     1 
         ZOWE01.CPP.ZOSV221.D170810.SCNJCMP                   3499   99     1 
         ZOWE01.SETUP.JCLLIB                                   150    2     1 
         ZOWE01.SISLOAD                                        100   19     1 
         ZOWE01.SISSAMP                                        100    1     1 
         ZOWE01.ZFS                                                           
         ZOWE01.ZFS.DATA                                     90600    ?    18 
```