IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた（2.IBM Cloud CLI準備）

#はじめに

「[IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた](https://qiita.com/shimauma_Zzzzz/items/9a513abdf02d11fff55b)」　の　第2回です。
ここでは、 IBM Cloud の CLI のセットアップについて記載します。
図でいう赤枠、自宅側の Linux 環境上の話です。
Linux を利用せず、クラウドのコンソールだけでためしてみる場合は第2回は不要です。

![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/d86c30ef-326e-cb92-bf40-a2560fea774b.png)



実施内容は以下の通りです。

- IBM Cloud CLI のインストール
- containerd、Docker のインストール （CentOS 8 のみ）
- AutoComplete 設定
- IBM Cloud ログイン

#IBM Cloud CLI のインストール

これに関しては、IBM Cloud のドキュメントや他の Qiita の記事などがあり、
割愛しようかと思いましたが、Cent OS 8 を利用した時にはエラーが発生したため
その記録の意味も含めて記載しておきます。

[IBM Cloud CLI の概説](https://cloud.ibm.com/docs/cli?topic=cli-getting-started) に記載がある通り
curl で導入します。
（余談ですが、今回 IBM Cloud のドキュメントを見ましたが結構しっかりしている印象でした。）

```console:CLI導入
# curl -sL https://ibm.biz/idt-installer | bash

[main] --==[ IBM Cloud Developer Tools for Linux/MacOS - Installer, v1.2.3 ]==--
which: no ibmcloud in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[install] Starting Update...
which: no ibmcloud in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[install_deps_with_yum] Checking for and updating 'yum' support on Linux
[install_deps_with_yum] Installing/updating external dependency: curl

=======================================================================================================================================
 パッケージ                             アーキテクチャー         バージョン                          リポジトリー                サイズ
=======================================================================================================================================
インストール:
 git                                    x86_64                   2.18.4-2.el8_2                      AppStream                   186 k
依存関係のインストール:
 git-core                               x86_64                   2.18.4-2.el8_2                      AppStream                   4.0 M
 git-core-doc                           noarch                   2.18.4-2.el8_2                      AppStream                   2.3 M

...(略)...

Docker CE Stable - x86_64                                                                              118 kB/s |  25 kB     00:00
メタデータキャッシュを作成しました。
+ '[' -n '' ']'
+ sh -c 'yum install -y -q docker-ce'
エラー:
 問題: package docker-ce-3:19.03.12-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
  - cannot install the best candidate for the job
  - package containerd.io-1.2.10-3.2.el7.x86_64 is filtered out by modular filtering
  - package containerd.io-1.2.13-3.1.el7.x86_64 is filtered out by modular filtering

...(略)...

[install_plugins] Running 'ibmcloud plugin list'...
インストール済みプラグインをリストしています...

プラグイン名                           バージョン   状況
cloud-functions/wsk/functions/fn       1.0.45
cloud-object-storage                   1.1.3
container-registry                     0.1.485
container-service/kubernetes-service   1.0.143

[install_plugins] Finished installing/updating plugins
[env_setup] WARN: Please restart your shell to enable 'ic' alias for ibmcloud!
[install] Install finished.
[main] --==[ Total time: 95 seconds ]==--

```

CentOS 8 の場合、真ん中あたりで docker-ce のインストールエラーが発生します。
これは、CentOS 8 からは Red Hat Enterprise Linux 8 と同様に、
コンテナ環境の管理は docker ではなく podman で実施することに変わっているためです。

#containerd、docker のインストール

containerd、docker については手動で導入します。
( CentOS 8 以外の人はスキップで構いません）

docker をいきなり入れようとすると、 containerd との依存関係エラーが表示されます。

```console:依存関係エラー
# dnf install docker-ce
メタデータの期限切れの最終確認: 1:18:26 時間前の 2020年08月15日 13時14分38秒 に実施しました。
エラー:
 問題: package docker-ce-3:19.03.12-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
  - cannot install the best candidate for the job
  - package containerd.io-1.2.10-3.2.el7.x86_64 is filtered out by modular filtering
...(略)...
```

containerd ですが、 docker-ce のリポジトリにある containerd では古く、
containerd をダウンロードしてきて、それを入れる、という必要があるようです。
（ここではダウンロードしてから入れましたがネット上の URL を直接指定して入れてもよいです）

```console:containerdダウンロード
# curl -o containerd.io-1.2.13-3.2.el7.x86_64.rpm  https://download.docker.com/linux/centos/7/x86_64/stable/Pac
kages/containerd.io-1.2.13-3.2.el7.x86_64.rpm
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 25.4M  100 25.4M    0     0  76.3M      0 --:--:-- --:--:-- --:--:-- 76.1M

# ls
containerd.io-1.2.13-3.2.el7.x86_64.rpm
```

次に、dnf で containerd を入れます。

```console:containerdインストール
# dnf -y install containerd.io-1.2.13-3.2.el7.x86_64.rpm

メタデータの期限切れの最終確認: 1:20:10 時間前の 2020年08月15日 13時14分38秒 に実施しました。
依存関係が解決しました。
=======================================================================================================================================
 パッケージ                            Arch            バージョン                                          リポジトリー          サイズ
=======================================================================================================================================
インストール中:
 containerd.io                         x86_64          1.2.13-3.2.el7                                      @commandline           25 M
依存関係のインストール中:

...(略)...

完了しました!
```

次に docker-ce を導入します。

```console:docker-ceインストール
# dnf -y install docker-ce

メタデータの期限切れの最終確認: 1:21:44 時間前の 2020年08月15日 13時14分38秒 に実施しました。
依存関係が解決しました。
=======================================================================================================================================
 パッケージ                      アーキテクチャー         バージョン                          リポジトリー                       サイズ
=======================================================================================================================================
インストール中:
 docker-ce                       x86_64                   3:19.03.12-3.el7                    docker-ce-stable                    24 M
依存関係のインストール中:

...(略)...

完了しました!
```

docker の自動起動設定を行い、起動します。

```console:docker自動起動・起動
# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.

# systemctl start docker

# systemctl status docker

● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-08-15 14:41:04 JST; 7s ago
     Docs: https://docs.docker.com
 Main PID: 17250 (dockerd)
    Tasks: 13
   Memory: 39.0M
   CGroup: /system.slice/docker.service
           mq17250 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

 8月 15 14:41:03 sakura dockerd[17250]: time="2020-08-15T14:41:03.913415219+09:00" level=info msg="ClientConn switching balancer to \">
 8月 15 14:41:03 sakura dockerd[17250]: time="2020-08-15T14:41:03.946613109+09:00" level=warning msg="Your kernel does not support cgr>
 8月 15 14:41:03 sakura dockerd[17250]: time="2020-08-15T14:41:03.946648895+09:00" level=warning msg="Your kernel does not support cgr>
```

#AutoComplete 設定

docker も無事入ったため、 CLI の確認を行うとともに、 AutoComplete 設定を行います。

```console:CLI確認
# which ibmcloud
/usr/local/bin/ibmcloud

# ibmcloud dev help
名前:
   ibmcloud dev - アプリケーションの作成、開発、デプロイ、およびモニターを行います

使用法:
   ibmcloud dev command [arguments...] [command options]

バージョン:
   2.4.8

...(略)...
```

ibmcloud コマンドですが、非常に多様なコマンド、オプションがあります。
それをうまく使いこなすために便利なのが autocomplete です。
`bash_autocomplete` を source します。

```console:bash_autocomplete
# source /usr/local/ibmcloud/autocomplete/bash_autocomplete
```

できれば、 .bash_profile 等に上記のコマンドを入れておきましょう。

#IBM Cloud ログイン

IBM Cloud にログインします。
今回は `--sso` オプションでログインしていますが、通常は `--sso` 無しでのログインを行ってください。
その際、e-mail アドレス等を入力する必要があります。

```console:IBMCloud_login
# ibmcloud login --sso
API エンドポイント: https://cloud.ibm.com

https://identity-1.ap-north.iam.cloud.ibm.com/identity/passcode からワンタイム・コードを取得して、続行します。
デフォルトのブラウザーで URL を開きますか? [Y/n] > n
One Time Code >
認証中です...
OK
```

「One Time Code >」プロンプトが表示されたら、ブラウザを開いて該当の URL にアクセスしてください。
ワンタイムパスワードが表示されるため、 それをコピー＆ペーストで プロンプトのところに入力して、
エンターを押せばよいです。
（なお、パスワード自体や *** などの文字列は表示されないため、うまくペーストされたのかはわかりにくいです）

自分の IBM ID を複数のアカウントに登録している場合は、選択画面が表示されます。

```console:アカウント選択
アカウントを選択:
1. Nagao's Account (ac3facaxxxxxxxxxxxxxxxxxxxx)
2. aaa
3. bbb
数値を入力してください> 1
ターゲットのアカウント Nagao's Account (ac3facaxxxxxxxxxxxxxxxxxxxx)
```

初回のみ、続いて地域等の選択があります。

```console:地域選択
地域を選択します (または Enter キーを押してスキップします):
1. au-syd
2. in-che
3. jp-osa
4. jp-tok
5. kr-seo
6. eu-de
7. eu-gb
8. us-south
9. us-south-test
10. us-east
数値を入力してください> 6
ターゲットの地域 eu-de


API エンドポイント:      https://cloud.ibm.com
地域:                    eu-de
ユーザー:                xxx@xx.xxx.com
アカウント:              Nagao's Account (ac3facaxxxxxxxxxxxxxxxxxxxxxxxxxx)
リソース・グループ:      リソース・グループがターゲットになっていません。'ibmcloud target -g RESOURCE_GROUP' を使用してください
CF API エンドポイント:
組織:
スペース:

IBM Cloud CLI の今後の改善のために、使用統計の収集にご協力ください。
このデータは、IBM 外には決して公開されません。
詳細については、IBM プライバシー・ステートメント: https://www.ibm.com/privacy/jp/ja/ を参照してください。
使用データの集計を有効または無効にするには、'ibmcloud config --usage-stats-collect [true | false]'　を実行します

使用統計を IBM に送信しますか? [y/n]> n
```

これでログインが完了です。

---
お疲れ様でした。
今回はここまでとし、次回は [3. IBM Cloud kubernetes Service (IKS) の準備] について実施します。

←：[IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた（1.概要）](https://qiita.com/shimauma_Zzzzz/items/9a513abdf02d11fff55b)
→：[IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた（3.IBM Cloud kubernetes Service (IKS) の準備）](https://qiita.com/shimauma_Zzzzz/items/893ea7ca238ca5e2b1c7)

---