ibm-lh-clientのインストール

## はじめに
ibm-lh-clientパッケージには、watsonx.dataへのアクセスや、watsonx.dataと連携するアプリケーションを開発するための便利なユーティリティとライブラリが含まれています。

ここではibm-lh-clientパッケージのインストール方法を紹介します。

## 環境
使用したサーバ環境は以下になります。
・Red Hat OpenShift Container Platform 4.14
・IBM Cloud Pak for Data (CP4D) 5.0.3
・IBM watsonx.data 2.0.3
・Presto (Java) v0.286
使用したクラアント環境は以下になります。
・Red Hat Enterprise Linux release 8.10 (Ootpa)ibm-lh-client
・Podman version 4.9.4-rhel
## 事前準備
最新バージョンのDockerまたはPodmanをクライアント環境にインストールしてください。DockerまたはPodmanどちらを選んでもかまいません。具体的は次をご参照ください：[Installing ibm-lh-client:Before you begin](https://www.ibm.com/docs/en/watsonx/watsonxdata/2.0.x?topic=package-installing-lh-client#taskinstall_client__prereq__1)。

今回は、クライアントとして使用するRHELにPodmanをインストールして検証を行いました。クライアントの導入や作業はnon-rootユーザーで行う必要があるので、ここではuser01というユーザーを使用しています。
```
[user01@client ~]$ podman -v
podman version 4.9.4-rhel
```
## インストール手順
### 1.必要情報収集
IBM Entitled Registry にアクセスするため、 [container software library](https://myibm.ibm.com/products-services/containerlibrary)から認証キー(entitlement key)を取得してください。認証キーを使用してIBM Entitled Registryからイメージをローカルシステムにプルすることができます。
![Screenshot 2024-10-06 at 17.45.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894284/37f78695-72cb-ae53-86aa-18ebec715774.png)


### 2.作業ディレクトリと環境変数を設定する
作業ディレクトリと環境変数を設定するために、以下のコード実行する必要があります。
```
mkdir <install_directory>
cd <install_directory>
export LH_ROOT_DIR=<install_directory>
export IBM_ENTITLEMENT_KEY=<ibm_entitlement_key> 
export LH_RELEASE_TAG=latest
export IBM_LH_TOOLBOX=cp.icr.io/cpopen/watsonx-data/ibm-lakehouse-toolbox:$LH_RELEASE_TAG
export LH_REGISTRY=cp.icr.io/cp/watsonx-data
export PROD_USER=cp
export IBM_ICR_IO=cp.icr.io
export DOCKER_EXE=<docker_exe>
export LANG=<lang>
```
上記のコードは5つのステップに分けることができます。以下で、実際実行した例を使って説明します。
#### (1)作業ディレクトリの作成
作業ディレクトリ`${HOME}/watsonxdata`を使用します。`${HOME}/watsonxdata`を作成して、環境変数`LH_ROOT_DIR`に`${HOME}/watsonxdata`を設定します。
```
[user01@client ~]$ mkdir watsonxdata
[user01@client ~]$ cd watsonxdata
[user01@client watsonxdata]$ export LH_ROOT_DIR=${HOME}/watsonxdata
```

#### (2)IBM_ENTITLEMENT_KEYの設定
上の[必要情報収集](https://qiita.com/Xu_Mingqin/private/f8d86eea20a08b214588#1必要情報収集)で収集した認証キー(entitlement key)を使います。
```
[user01@client watsonxdata]$ export IBM_ENTITLEMENT_KEY=<ibm_entitlement_key> 
```
#### (3)ibm-lh-clientパッケージの導入
今回は最新のCloud Pak for Data を使用するため、ibm-lh-clientパッケージのバージョンはlatestを指定します。本原稿執筆時点はlatestタグはv2.0.3に設定されています。Cloud Pak for Dataバージョンとibm-lh-clientパッケージバージョンは[Installing ibm-lh-client:Procedure](https://www.ibm.com/docs/en/watsonx/watsonxdata/2.0.x?topic=package-installing-lh-client#taskinstall_client__steps__1)の中の対応表"Release tags with Cloud Pak for Data versions"を確認してください。
```
[user01@client watsonxdata]$ export LH_RELEASE_TAG=latest
[user01@client watsonxdata]$ export IBM_LH_TOOLBOX=cp.icr.io/cpopen/watsonx-data/ibm-lakehouse-toolbox:$LH_RELEASE_TAG
[user01@client watsonxdata]$ export LH_REGISTRY=cp.icr.io/cp/watsonx-data
[user01@client watsonxdata]$ export PROD_USER=cp
[user01@client watsonxdata]$ export IBM_ICR_IO=cp.icr.io
```


#### (4)コンテナエンジンの設定
今回はPodmanを使用するので、DOCKER_EXEをPodmanに設定しています。
```
[user01@client watsonxdata]$ export DOCKER_EXE=podman
```
Dockerを使用している場合は、以下のコマンドを実行してください。
```
export DOCKER_EXE=docker
```

#### (5)環境変数`LANG`の設定
環境変数`LANG`は、マルチバイト文字（MBCS）をサポートするためにコンテナに渡されます。`LANG`が設定されていない場合、デフォルトは`en_US.UTF-8`と見なされます。日本語環境の場合は次のように指定します。
```
[user01@client watsonxdata]$ export LANG=ja_JP.utf8
```
`.bashrc`に`export LANG=ja_JP.utf8`を登録しておくと次回ログインする時から`export LANG=ja_JP.utf8`が設定されるので便利です。
 

### 3.ibm-lh-clientパッケージをコピーする
ibm-lh-clientパッケージをプルします。その後、クラアント環境にコピーします。
```
[user01@client watsonxdata]$ $DOCKER_EXE pull $IBM_LH_TOOLBOX
[user01@client watsonxdata]$ id=$($DOCKER_EXE create $IBM_LH_TOOLBOX)
[user01@client watsonxdata]$ $DOCKER_EXE cp $id:/opt - > /tmp/pkg.tar
[user01@client watsonxdata]$ $DOCKER_EXE rm $id
[user01@client watsonxdata]$ id=
```
### 4.ibm-lh-clientパッケージpkg.tarファイルを解凍する
ibm-lh-clientパッケージpkg.tarファイルを解凍します。
```
[user01@client watsonxdata]$ tar -xf /tmp/pkg.tar -C /tmp
```
bom.txtに記載されているChecksumを確認します。
```
[user01@client watsonxdata]$ cat /tmp/opt/bom.txt
...
Checksum
--------
# cksum /opt/*/*
4114574099 4810 /opt/client/README.txt
1774217242 765216 /opt/client/ibm-lh-client-2.0.3-148-20240912-005600-onprem-v2.0.3.tgz
1619773671 155 /opt/dev/README.txt
4147316610 767487 /opt/dev/ibm-lh-dev-2.0.3-148-20240912-005600-onprem-v2.0.3.tgz
```
次はcksumコマンドの出力です。bom.txtに記載されているChecksumとcksumコマンドの出力を比較して、内容が同じであることを確認します。
```
[user01@client watsonxdata]$ cksum /tmp/opt/*/*
1774217242 765216 /tmp/opt/client/ibm-lh-client-2.0.3-148-20240912-005600-onprem-v2.0.3.tgz
4114574099 4810 /tmp/opt/client/README.txt
4147316610 767487 /tmp/opt/dev/ibm-lh-dev-2.0.3-148-20240912-005600-onprem-v2.0.3.tgz
1619773671 155 /tmp/opt/dev/README.txt
```
ibm-lh-clientパッケージを`$LH_ROOT_DIR`で指定した`${HOME}/watsonxdata`という作業ディレクトリに解凍します。
```
[user01@client watsonxdata]$ tar -xf /tmp/opt/client/ibm-lh-client-*.tgz -C $LH_ROOT_DIR
```

 
### 5.レジストリにログインする
レジストリにログインします。
```
[user01@client watsonxdata]$ $DOCKER_EXE login ${IBM_ICR_IO} \
> --username=${PROD_USER} \
> --password=${IBM_ENTITLEMENT_KEY}
Login Succeeded!
```
### 6.セットアップスクリプトを実行する
最後に、セットアップスクリプトを実行します。
```
[user01@client watsonxdata]$ $LH_ROOT_DIR/ibm-lh-client/bin/setup --license_acceptance=y --runtime=$DOCKER_EXE
=======   updating configuration =======
creating /home/user01/watsonxdata/ibm-lh-client/localstorage/volumes/infra
==== pulling image for ibm-lh-client-mgmt from cp.icr.io/cp/watsonx-data  ==== 
...
==== pulling image for ibm-lh from cp.icr.io/cp/watsonx-data  ==== 
...
Writing manifest to image destination
...
```
以上、この6つのステップで、ibm-lh-clientパッケージのインストールが完了しました。

## ibm-lh-clientをインストールした後のディレクトリ構造
ibm-lh-clientパッケージが正常にインストールされた後、`${HOME}/watsonxdata`ディレクトリのディレクトリ構造は以下のようになります。
```
[user01@client watsonxdata]$ tree
.
`-- ibm-lh-client
    |-- bin
    |   |-- backup-restore
    |   |   |-- backup-metadata
    |   |   |-- extract-bucket-data
    |   |   |-- import-bucket-data
    |   |   |-- README.txt
    |   |   `-- restore-lakehouse
    |   |-- bash-run
    |   |-- cert-mgmt
    |   |-- common-utils.sh
    |   |-- connect-lh
    |   |-- dev-sandbox
    |   |-- extract_files.sh
    |   |-- ibm-lh
    |   |-- ibm-lh-client-mgmt
    |   |-- manage-engines
    |   |-- presto-cli
    |   |-- presto-run
    |   |-- python-run
    |   `-- setup
    |-- etc
    |   |-- ...
    |   `-- python-run.conf
    |-- examples
    |   `-- apis
    |       |-- ...
    |       `-- 11-statement.sh
    |-- licenses
    |   |-- ...
    |   `-- notices.txt
    |-- localstorage
    |   `-- volumes
    |       |-- ibm-lh
    |       |-- ibm-lh-client-mgmt
    |       |-- infra
    |       |   |-- ibm-lh-secrets
    |       |   |   `-- LH_TRUSTSTORE_PASSWORD
    |       |   `-- tls
    |       |       |-- aliases
    |       |       |-- cabundle.crt
    |       |       |-- pki
    |       |       |   `-- tls-ca-bundle.pem
    |       |       `-- truststore.jks
    |       |-- lh-cli
    |       |-- presto-cli
    |       `-- presto-run
    |-- README.txt
    `-- run

20 directories, 107 files
   
```

## 参考資料
ibm-lh-clientパッケージのインストールについては、[Installing ibm-lh-client](https://www.ibm.com/docs/en/watsonx/watsonxdata/2.0.x?topic=package-installing-lh-client#taskinstall_client__prereq__1)を参考にしてください。