Wazi: OpenShift上でのメインフレーム開発環境構築 - (3)イメージ・ストレージ・サーバーの構成

# はじめに
Wazi環境構築のログです。今回はイメージ・ストレージ・サーバーの構成について。

## 関連記事
[Wazi: OpenShift上でのメインフレーム開発環境構築 - (1)事前準備](https://qiita.com/tomotagwork/items/4f254440959ff0a97e4b)
[Wazi: OpenShift上でのメインフレーム開発環境構築 - (2)ライセンス・サーバーの構成](https://qiita.com/tomotagwork/items/2017ef0fbf8777a3c95e)
[Wazi: OpenShift上でのメインフレーム開発環境構築 - (3)イメージ・ストレージ・サーバーの構成](https://qiita.com/tomotagwork/items/1577193ca59eb2ae1fa5)
[Wazi: OpenShift上でのメインフレーム開発環境構築 - (4)OpenShiftクラスターの構成](https://qiita.com/tomotagwork/items/d0b358db6b0bfd819ffe)
[Wazi: OpenShift上でのメインフレーム開発環境構築 - (5)Sandboxインスタンスの作成](https://qiita.com/tomotagwork/items/74193fb90e3a3acd9c9b)
[Wazi: OpenShift上でのメインフレーム開発環境構築 - (6)Sandboxインスタンスの確認](https://qiita.com/tomotagwork/items/c8370878c0fd549b0a44)
[Wazi: OpenShift上でのメインフレーム開発環境構築 - (7)Sandboxインスタンスへの接続](https://qiita.com/tomotagwork/items/cfeec0ccab50d72a48e2)
[Wazi: OpenShift上でのメインフレーム開発環境構築 - (8)Sandboxのカスタマイズ](https://qiita.com/tomotagwork/items/52f66ab9c78b9d8b3131)
[Wazi: OpenShift上でのメインフレーム開発環境構築 - (9)Wazi Developer for Workspacesの作成](https://qiita.com/tomotagwork/items/7de6f979dabe160175e3)

# 全体像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/5334e228-2ebe-9f3d-91ba-640a404511e8.png)
今回は図の矢印部分のイメージ・ストレージ・サーバーの構成です。
イメージ・ストレージ・サーバーはOpenShift上にも構成することが可能ですが、ここでは仮想サーバー上に構成することにします(ライセンス・サーバーと相乗り)。

# イメージ・ストレージ・サーバーのセットアップ
参考: [Installing an SFTP server](https://www.ibm.com/docs/en/wdfrhcw/1.2.0?topic=sandbox-installing-sftp-server)
イメージ・ストレージ・サーバーの実体はsftpサーバーです。Sandboxのインスタンスを作成する際に、元となるz/OS DASDイメージファイルをsftpサーバーからコピーすることになるので、そのための準備をしておきます。

## sftpサーバー(sshd)
sftpはsshを利用したファイル転送プロトコルなので、OSパッケージとしてはsshサーバーがあればOKです。

```
[TOMOTAG@iseip20201222-1106-alphabet-1 ~]$ sudo yum list installed | grep openssh-server
openssh-server.x86_64               7.4p1-21.el7             installed
```

```
[TOMOTAG@iseip20201222-1106-alphabet-1 ~]$ systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-12-28 02:48:17 CST; 20h ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 956 (sshd)
   CGroup: /system.slice/sshd.service
           mq956 /usr/sbin/sshd -D

Dec 28 02:48:17 iseip20201222-1106-alphabet-1.jp-ise.com systemd[1]: Starting OpenSSH server daemon...
Dec 28 02:48:17 iseip20201222-1106-alphabet-1.jp-ise.com sshd[956]: Server listening on 0.0.0.0 port 22.
Dec 28 02:48:17 iseip20201222-1106-alphabet-1.jp-ise.com sshd[956]: Server listening on :: port 22.
Dec 28 02:48:17 iseip20201222-1106-alphabet-1.jp-ise.com systemd[1]: Started OpenSSH server daemon.
...
```

## sftp用構成

sftpで使用するディレクトリとして`/mnt/sftp`を作成します。

```
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt]$ sudo mkdir sftp

[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt]$ ls -la
total 32
drwxr-xr-x.  5 root root  4096 Dec 28 23:35 .
drwxr-xr-x+ 19 root root  4096 Dec 28 19:53 ..
drwxrwxrwx.  4 root root  4096 Dec 28 18:58 Inst_Image
drwx------.  2 root root 16384 Dec 28 18:24 lost+found
drwxr-xr-x.  2 root root  4096 Dec 28 23:35 sftp
```

sftp用のユーザー"ftpuser1"とグループ"ftpusers"を作成し、パスワードを設定しておきます。

```
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp]$ sudo groupadd ftpusers
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp]$ sudo  useradd -g ftpusers -d /ftpuser1 -s /sbin/nologin ftpuser1

[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp]$ sudo id ftpuser1
uid=1010(ftpuser1) gid=1011(ftpusers) groups=1011(ftpusers)

[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp]$ sudo passwd ftpuser1
Changing password for user ftpuser1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
```

sftpのルートディレクトリとして/mnt/sftp/ftpuser1を作成します。

```
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp]$ sudo mkdir ftpuser1
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp]$ sudo chown ftpuser1:ftpusers ftpuser1
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp]$ ls -la
total 12
drwxr-xr-x. 3 root     root     4096 Dec 28 23:41 .
drwxr-xr-x. 5 root     root     4096 Dec 28 23:35 ..
drwxr-xr-x. 2 ftpuser1 ftpusers 4096 Dec 28 23:41 ftpuser1
```

SSHの構成ファイル"sshd_config"を編集して、このftpuser1についての設定を行います。

```xxx:/etc/ssh/sshd_config
...
Match User ftpuser1
        PasswordAuthentication yes
        ForceCommand internal-sftp
        ChrootDirectory /mnt/sftp
        PermitTunnel no
        AllowAgentForwarding no
        AllowTcpForwarding no
        X11Forwarding no
```

※Sandbox作成時はOpenShiftのOperatorを使用することになりますが、この時sftpへのアクセスはユーザーID/パスワードでの認証に限られるようです(公開鍵による認証は不可)。今回の仮想サーバーの環境はsshは`PasswordAuthentidation no`に設定してパスワード認証を無効化していましたが、このftp用のに関しては`PasswordAuthentication yes`に設定しています。合わせてこのユーザーはsftp専用とするために、`ForceCommand internal-sftp`などを設定しています。

sshd再起動

```
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp]$ sudo systemctl restart sshd
```

Windows PCからSSL/VPN経由でsftpできることを確認。

```
c:\y\temp>sftp ftpuser1@xxxxx
The authenticity of host 'xxxxx (xxxxx)' can't be established.
ECDSA key fingerprint is SHA256:WLiyVkG/vtxAF5/5O7WAv2uh5V+TkeH2RGoqfH6UDWY.
Are you sure you want to continue connecting (yes/no)?
Warning: Permanently added 'xxxxx' (ECDSA) to the list of known hosts.
ftpuser1@xxxxx's password:
Connected to ftpuser1@xxxxx.
sftp> pwd
Remote working directory: /ftpuser1
sftp> put test.txt
Uploading test.txt to /ftpuser1/test.txt
test.txt                                                                              100%   17     0.1KB/s   00:00
```

## ADCDの配置
参考: [Configuring Extended ADCD](https://www.ibm.com/docs/en/wdfrhcw/1.2.0?topic=environments-configuring-extended-adcd)
ZD&Tと同様に、Waziでも出来合いのz/OSイメージ(各ミドルウェアや開発環境などが構成されたもの)を含むDASDイメージが提供されています。これはADCD(Application Developer Controlled Distribution)と呼ばれています。このADCD関連のファイルをsftpサーバーに配置します。

ftp用のディレクトリ下に、`adcd/zos24_2020may/volumes`というディレクトリを作成します。

```
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp/ftpuser1]$ sudo mkdir adcd
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp/ftpuser1]$ cd adcd
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp/ftpuser1/adcd]$ sudo mkdir zos24_2020may
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp/ftpuser1/adcd]$ cd zos24_2020may/
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp/ftpuser1/adcd/zos24_2020may]$ sudo mkdir volumes
```

ここにADCD関連ファイルを配置します(メタデータファイル、圧縮された状態のDASDイメージファイル、devicemapファイルなど)。トータルでファイルサイズが46GBくらいあるので、ICOS経由で転送するのがよいです。
ファイル配置後の構造としては以下のようになります。

```
[TOMOTAG@iseip20201222-1106-alphabet-1 /mnt/sftp/ftpuser1]$ tree . --charset C
.
`-- adcd
    `-- zos24_2020may
        |-- ADCDTOOLS.XML
        `-- volumes
            |-- B4BLZ1.gz
            |-- B4C541.gz
            |-- B4C551.gz
            |-- B4CFG1.gz
            |-- B4DBAR.gz
            |-- B4DBB1.gz
            |-- B4DBB2.gz
            |-- B4DBC1.gz
            |-- B4DBC2.gz
            |-- B4DIS1.gz
            |-- B4DIS2.gz
            |-- B4DIS3.gz
            |-- B4IME1.gz
            |-- B4IMF1.gz
            |-- B4INM1.gz
            |-- B4KAN1.gz
            |-- B4PAGA.gz
            |-- B4PAGB.gz
            |-- B4PAGC.gz
            |-- B4PRD1.gz
            |-- B4PRD2.gz
            |-- B4PRD3.gz
            |-- B4PRD4.gz
            |-- B4RES1.ZPD
            |-- B4RES2.gz
            |-- B4SYS1.gz
            |-- B4USR1.gz
            |-- B4USS1.gz
            |-- B4USS2.gz
            |-- B4W901.gz
            |-- B4W902.gz
            |-- B4ZCX1.gz
            |-- B4ZWE1.gz
            |-- devmap.txt
            |-- inventory.txt
            `-- SARES1.ZPD

3 directories, 37 files
```

# ネットワーク構成
sftp(ssh)のポート番号(デフォルト:22)に対してOpenShiftクラスター上のサービスからアクセスできるようにネットワーク構成をしておく必要があります(firewalの設定を行っている場合など)。