Db2コマンド実行環境のインストール（Db2サーバー無し、ユーザー名を自由に設定、Linux編）

# 1. はじめに

Db2サーバーを導入すれば[CLP(command line processor)](https://www.ibm.com/docs/en/db2/11.5?topic=clp-command-line-processor-features)を利用できますが、
1. Db2クライアントだけを導入したい
2. Db2クライアント環境のユーザー名を[デフォルトのdb2inst1](https://www.ibm.com/docs/en/db2/11.5?topic=unix-creating-group-user-ids-db2-database-installation)以外の任意の名前にしたい

といった要望を聞くことがあります。本記事ではLinux環境を対象にして、この要望に応える手順をまとめます。要点は
1. CLPが同梱されている[IBM Data Server Runtime Clientパッケージ](https://www.ibm.com/docs/en/db2/11.5?topic=clients-data-server-client-driver-types)を導入すること
2. その際[`db2setup`コマンド](https://www.ibm.com/docs/en/db2/11.5?topic=clients-installing-data-server-unix-linux)を用いずに、[`db2_install`コマンド](https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2-install-install-db2-database-product)を使って導入し、次に[`db2icrt`コマンド](https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2icrt-create-instance)でインスタンスを作成すること
    - 補足）`db2setup`コマンドを実行すると基本的にはdb2inst1のインスタンスが作成されます。

です。（これがわかるまで時間がかかった。。）

本記事の目次は次の通りです。
1. はじめに
2. 手順実行の前提
3. 参考資料
4. 手順概要
5. 手順

# 2. 手順実行の前提
次の情報と実行環境が必要です。
1. IBM ID（Db2クライアントのパッケージをダウンロードするとき使用）
    - 持っていない方は[Qiita記事（IBMidを作成してみる）](https://qiita.com/Shumpei_Kubo/items/564126081dea547dd742)をご覧になって作成してください。
2. Linux環境とrootのパスワード
    - 本記事では CentOS Stream release 8 x86_64環境を用いますが、他Linuxディストリビューションにおいても[Db2サポート対象](https://www.ibm.com/docs/en/db2/11.5?topic=database-system-requirements)であれば、同じDb2コマンドを用いて導入できます。

# 3. 参考資料
- IBMマニュアル
    - IBM Data Server Client and driver types
        - https://www.ibm.com/docs/en/db2/11.5?topic=clients-data-server-client-driver-types
    - Db2 installation methods
        - https://www.ibm.com/docs/en/db2/11.5?topic=servers-db2-installation-methods
    - Installing IBM data server clients (Linux and UNIX)
        - https://www.ibm.com/docs/en/db2/11.5?topic=clients-installing-data-server-unix-linux
    - db2_install - Install Db2 database product command
        - https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2-install-install-db2-database-product
    - db2icrt - Create instance command
        - https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2icrt-create-instance
- Qiita
    - 【備忘録】Db2 インストール手順まとめ（Linux）
        - https://qiita.com/Haruka-Ogawa/items/9576399209b32f3016ea

# 4. 手順概要
1. Data Server Runtime Clientの導入パッケージを取得
2. Data Server Runtime Clientを導入
3. 任意の名前でユーザーを作成
4. 作成したユーザー用のDb2インスタンスを作成
5. 作成したユーザーにてCLPプロンプトを確認

# 5. 手順1) Data Server Runtime Clientの導入パッケージを取得
次のURLを開いてFix Centralに移動します。
https://www.ibm.com/support/fixcentral/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/1ebcda4c-4fd9-32e2-2a3f-5714bd763768.png)
この画面でSelect Productタブを選択し、次に4つのプルダウンメニューを下の通りに選択し、最後にContinueボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/c39834de-4c1c-ed93-fca3-5ba0e4c08995.png)
次の画面でBrowse for fixesを選択してContinueボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/e7f217b5-8f43-1d48-c767-3fea0bd4f58c.png)
次の画面でIBM Data Server Runtime Client (Linux/x86-64 64bit)を選択します。このバージョンは接続予定のDb2サーバーのバージョンに合わせてください。本記事では11.5.8.0を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/aa863437-899d-6727-4c63-5e18d3773ef0.png)
次の画面においてIBM IDでログインしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/82974049-8301-ba36-5918-889db19a28a5.png)
次の画面に表示される3つのファイルをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/03ce3645-ebfc-7a65-96d4-65f8ad34edae.png)
ダウンロードしたファイルをCentOS環境にコピーして（scp等でコピー）それが本物かどうかを`openssl`コマンドで確認します。参考のため1つ目のコマンドでCentOSのバージョンを表示しています。作業フォルダは任意ですが、本記事では`20230507`とそのサブディレクトリを用います。
```
$ ssh root@xxx.xxx.xxx.xxx
[root@cos8b ~]# cat /etc/centos-release
CentOS Stream release 8

[root@cos8b ~]# cd 20230507

[root@cos8b 20230507]# ls
publicKey.pem  v11.5.8_linuxx64_rtcl.tar.gz  v11.5.8_linuxx64_rtcl.tar.gz.sig

[root@cos8b 20230507]# openssl dgst -sha256 -verify publicKey.pem -signature v11.5.8_linuxx64_rtcl.tar.gz.sig v11.5.8_linuxx64_rtcl.tar.gz
Verified OK
```

# 5. 手順2) Data Server Runtime Clientを導入
gzファイルを解凍して内容を確認します。rtclディレクトリに導入コマンドdb2_install等が保存されています。
```
[root@cos8b 20230507]# tar xzf v11.5.8_linuxx64_rtcl.tar.gz

[root@cos8b 20230507]# ls
publicKey.pem  rtcl  v11.5.8_linuxx64_rtcl.tar.gz  v11.5.8_linuxx64_rtcl.tar.gz.sig

[root@cos8b 20230507]# cd rtcl

[root@cos8b rtcl]# ls
db2  db2_deinstall  db2_install  db2ls  db2prereqcheck  db2setup  installFixPack
```
導入前のチェックコマンド`db2prereqcheck`を実行します。オプション`-l`を付けると最新バージョン（現時点で11.5.8）のみをチェックします。不足パッケージに対してエラーメッセージが表示されます。
```
[root@cos8b rtcl]# ./db2prereqcheck -l
...
DBT3507E  The db2prereqcheck utility failed to find the following package or file: "kernel-source".
DBT3507E  The db2prereqcheck utility failed to find the following package or file: "".
DBT3507E  The db2prereqcheck utility failed to find the following package or file: "".
DBT3507E  The db2prereqcheck utility failed to find the following package or file: "gcc-c++".
DBT3507E  The db2prereqcheck utility failed to find the following package or file: "cpp".
DBT3507E  The db2prereqcheck utility failed to find the following package or file: "binutils".
DBT3507E  The db2prereqcheck utility failed to find the following package or file: "gcc".
DBT3563E  The db2prereqcheck utility determined that SELinux is enabled, which is not supported with GPFS.
DBT3618E  The db2prereqcheck utility detected that ksh is not linked to ksh or ksh93. This is required for Db2 High Availability Feature with Tivoli SA MP.
```
上のパッケージを導入します。なお環境に応じて上のエラーメッセージが異なり、導入するパッケージも異なってきます。
```
[root@cos8b rtcl]# dnf -y install gcc
Installed:
  binutils-2.30-120.el8.x86_64             cpp-8.5.0-19.el8.x86_64               gcc-8.5.0-19.el8.x86_64                 glibc-devel-2.28-225.el8.x86_64
  glibc-headers-2.28-225.el8.x86_64        isl-0.16.1-6.el8.x86_64               kernel-headers-4.18.0-489.el8.x86_64    libmpc-1.1.0-9.1.el8.x86_64
  libpkgconf-1.4.2-1.el8.x86_64            libxcrypt-devel-4.1.1-6.el8.x86_64    pkgconf-1.4.2-1.el8.x86_64              pkgconf-m4-1.4.2-1.el8.noarch
  pkgconf-pkg-config-1.4.2-1.el8.x86_64
Complete!

[root@cos8b rtcl]# dnf -y install gcc-c++
Installed:
  gcc-c++-8.5.0-19.el8.x86_64                                               libstdc++-devel-8.5.0-19.el8.x86_64
Complete!
```
チェックコマンド`db2prereqcheck`を再度実行します。オプション`-l`に加えて`-c`を付けます。これによってサーバー導入前のチェックは行わず、クライアント導入前のチェックを行います。
```
[root@cos8b rtcl]# ./db2prereqcheck -c -l
Requirement not matched for DB2 database "Client" . Version: "11.5.8.0".
Summary of prerequisites that are not met on the current system:
   DBT3514W  The db2prereqcheck utility failed to find the following 32-bit library file: "/lib/libpam.so*".
DBT3514W  The db2prereqcheck utility failed to find the following 32-bit library file: "libstdc++.so.6".
```
上の警告は32bitライブラリに関するものであるため対応せずそのままにして、`db2_install`コマンドを用いてDb2クライアントを導入します。
```
[root@cos8b rtcl]# ./db2_install
Requirement not matched for DB2 database "Server" . Version: "11.5.8.0".
...
The execution completed successfully.
```
導入結果を確認します。下のようにdb2コマンドはまだ実行できません。
```
[root@cos8b rtcl]# ls /opt/ibm/db2/V11.5/
adm  bin  bnd  cfg  conv  desktop  function  install  instance  java  json  lib32  lib64  license  logs  msg  Readme  security32  security64  tools

[root@cos8b rtcl]# which db2
/usr/bin/which: no db2 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
```

# 5. 手順3) 任意の名前でユーザーを作成
任意のユーザー名として本記事では`yamasakk`を用います。`useradd`コマンドにオプション`-m`を付けてホームディレクトリを作成します。
```
[root@cos8b rtcl]# useradd -m yamasakk

[root@cos8b rtcl]# passwd yamasakk
Changing password for user yamasakk.
...
passwd: all authentication tokens updated successfully.
```

# 5. 手順4) 作成したユーザー用のDb2インスタンスを作成
`db2icrt`コマンドを実行します。上で作成したユーザー名`yamasakk`を指定します。オプション`-s client`によってサーバー用ではなくクライアント用インスタンスを作成します。
```
[root@cos8b rtcl]# /opt/ibm/db2/V11.5/instance/db2icrt -s client yamasakk
...
The execution completed successfully.
```

# 5. 手順5) 作成したユーザーにてCLPプロンプトを確認
上で作成したユーザーでログインします。ホームディレクトリが作成されたこと、その配下にdb2コマンドが導入されていることを確認します。次にdb2コマンドを実行してCLPのプロンプトが表示されることを確認します。これで本記事の目的（サーバー導入無し、任意のユーザー名）を達成しました。
```
$ ssh yamasakk@xxx.xxx.xxx.xxx
[yamasakk@cos8b ~]$ pwd
/home/yamasakk

[yamasakk@cos8b ~]$ which db2
~/sqllib/bin/db2

[yamasakk@cos8b ~]$ db2
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 11.5.8.0
db2 =>
```