PCで FIWARE ( Orion Context Broker ) を体験する、 MIRACLE LINUX 8.4 も試してみる

# 概要
FIWAREを体験することを目的に、PCの仮想環境（VirtualBox）上で動かします。
CentOSを使いたいところですが、CentOS8が2021年末にサポート終了となりましたので、今回はMIRACLE LINUX 8.4を仮想OSとして試します。

今回利用するDockerもRedHatでサポートされなくなりまして、こちらもPodmanに移行する？KubernetesとかOpenShiftだからDockerなんかもう使えない人達ってそんなに多いの？？などなど、悩ましく感じております。。。

## ご注意
この記事では、PCの仮想環境(VirtualBox)上でFIWAREを動かすという体験を目的としており、FIWAREの構築やサービス開発を目的とした解説ではありません。
より実践的に試されたい方は、MIRACLE LINUXを飛ばし、パブリッククラウドサービスのDocker環境でFIWAREを試してください。

## 作業環境
| アプリケーション　FIWARE         |
|:--------------------------------:|
| Docker docker-compose 環境                       |
| 仮想マシン MIRACLE LINUX 8.4     |
| 仮想環境　VirtualBox             |
| OS Windows10                     |
| ノートPC                         |

## FIWAREとは
FIWAREとはスマートなソリューションを構築するためのオープンソース・プラットフォームです。
特徴として、IoTなどのビッグデータをもとに様々なサービスを開発／提供するのに必要となる標準APIの実装や、関連するシステム構築などを容易に行うことができます。
活用例として、様々なインフラやサービスが多種多様なビッグデータを生成する都市規模のビッグデータにさえ対応可能な仕組みになっていることから、日本でもスマートシティへの取組で注目されています。

https://www.letsfiware.jp/

このような課題やニーズはデータを活用したサービス開発に共通したもので、実現するためのプラットフォームはFIWAREだけではなく、他にも多くの団体や企業が取組を行っています。
ただ、オープンソース・プラットフォームであり、docker上で比較的簡単に動作するため、このようなプラットフォームをPCで動かして体験してみるのはお手軽ではないかと考えました。

## FIWARE Orion Context Broker
rion Context Brokerサポートページはこちら
https://fiware-orion.letsfiware.jp/
詳細はこちらの資料がお勧めです。
[FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.6.0対応)](https://www.slideshare.net/fisuda/orion-context-broker-20220301-251267820)

FIWARE でスマートなソリューションを開発するのに、データ（≒コンテキスト情報）の扱いが重要になります。
FIWARE Orion Context BrokerはFIWAREの一部ですが、コンテキスト情報を扱うパブリッシュ/サブスクライブコンテキストブローカーGEを実装したものです。
FIWARE NGSI APIのインターフェイスを提供し、IoTセンサーや他システムとRestfulなAPIによってコンテキスト情報を収集したり連携したりする機能を実現します。

## MIRACLE LINUX 8.4 も試します
CentOSの移行先OSを考えている最中のため、MIRACLE LINUXを久しぶりに使ってみます。
開発されているサイバートラスト株式会社様（日本企業）は CentOS 8 とバイナリ互換を維持した最新の Linux OS を 2021 年 10 月よりライセンスフリーで公開 されています。
MIRACLE LINUX 8.4はRed Hat Enterprise Linux 8.4がベースになっているとのことです。
私見としては、日本企業のOSサポートは環境移行プロジェクトでは魅力的ですし、日本企業の日本製Linuxが普及すると良いなーという想いもあります。

https://www.cybertrust.co.jp/pressrelease/2021/0916-miraclelinux-license-free.html?_ga=2.48351076.372594642.1651040396-1468859605.1651040396

## MIRACLE LINUX 8.4のダウンロード
[MIRACLE LINUX](https://repo.dist.miraclelinux.net/miraclelinux/isos/8.4-released/x86_64/)から MIRACLELINUX-8.4-minimal-x86_64.iso　(2022/04/27時点最新版)をダウンロードします。

## VirtualBoxの仮想マシンへMIRACLE LINUX 8.4をインストール

### 仮想マシンの設定

![WS20220427_000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/15a0888e-8e89-2f0c-b43b-4018dca5c93a.jpeg)

![WS20220427_000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/52ab4e03-d673-5585-5f4a-bc53496670c4.jpeg)

![WS20220427_000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/52956c6f-5639-db2b-b38d-ab463c4d89da.jpeg)

![WS20220427_000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/aaba0548-7fed-50f0-a4c8-7ce320d7c74b.jpeg)

![WS20220427_000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/eda89b41-546e-27ec-303e-31a3cc0bc366.jpeg)

![WS20220427_000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/863794eb-7686-8f8f-6709-0866d0e46ad4.jpeg)

作成した仮想マシン > 設定 > ストレージ で、ダウンロードした MIRACLELINUX-8.4-minimal-x86_64.iso を「ディスクファイルを追加」で光学ドライブへ追加します
属性 > 光学ドライブの右端、DVDアイコンを左クリックすると「ディスクファイルを追加」が出てきます
![WS20220427_000008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/a3255761-f146-a382-5286-318d5eb8bdbc.jpeg)

作成した仮想マシン > 設定 > ネットワーク > アダプター2 で 「ホストオンリーアダプター」を有効にします
![WS20220427_000009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/76822471-d231-3e8f-4048-0b5d75239aff.jpeg)

ツール > ネットワーク > 作成　でアダプターを作成します
IPv4 アドレスとネットマスク（多分、環境によって異なる）がOSの設定で必要になりますので、メモしておいてください
例の場合、IPv4 アドレス 192.168.56.1 、サブネットマスク　255.255.255.0(/24) になります
![WS20220427_000010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/8b6eb021-91f7-4674-2df1-4ee0c40ba475.jpeg)

## 仮想マシン へ MIRACLE LINUX 8.4 をインストール
仮想マシンを起動します

<B>注意</B>　MacのBOOTCAMPでVirtualBoxを使う場合、右Hostkeyが無くて困ります
キャプチャー解除ができないとVirtualBoxから抜けられなくなります
作成した仮想マシンが起動後　入力 > キーボード > キーボードの設定 で、「ホストキーの組合せ」の「ショートカット」を変更してください > Left Windows などに変更してください。

解像度が不足し、やりづらいですが、BOOTCAMP環境では解像度の変更が上手くいかず。
インストール後に対応することにして、インストール作業を進めていきます。
<B>解像度の変更方法</B>
最初の画面で、Tabキーを押した後に表示されるコマンドの後に"[半角スペース]inst.resolution=1360×768"など入力し、Enterキーを押します。 
![WS202204301_000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/25262d18-358b-583f-b38c-ef0599951b64.jpeg)

起動後、最初の画面でEnter
![WS20220428_000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/3512f6ca-1a53-b993-0195-9d14ffe4971b.jpeg)

![WS20220428_000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/553ff0ac-472f-c4d2-43e4-1d0f125360f1.jpeg)

設定します（解像度の関係で、ユーザーの設定から下が表示されず）
![WS20220428_000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/dc3bde84-85bf-e368-5ca1-efe6abd31964.jpeg)

東京を指定
![WS20220430_000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/513a0fb8-0487-605d-4300-ad3aee3e989e.jpeg)

今回は設定変更せず、左上の完了を押す
![WS20220428_000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/f5b54b9d-6404-7a86-b64b-55b5e255f8a4.jpeg)

ここをクリックして「rootパスワード」を表示し、設定します
![WS20220430_000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/19359314-57a7-746a-0b21-488510484f16.jpeg)

ここまで設定すれば、右下の「インストールの開始」ボタンが押せるようになります
![WS20220430_000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/7657752c-890e-f0b6-9447-c641d9b6ea2e.jpeg)

インストール完了後にシステムの再起動を押します
![WS20220430_000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/84ed97d9-8946-9930-7ae4-96f99b77b976.jpeg)

rootでログインできることを確認します
![WS20220430_000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/693b6159-bc41-c1fb-a44d-48baed4ada8a.jpeg)

仮想マシンを停止します
```console
shutdown -h now
```

## 仮想マシンのネットワーク設定（ホストオンリーアダプター）
仮想マシンを起動し、rootでログインします

NetworkManagert TUI を nmtui コマンドで起動、ネットワークの設定を行います
```console
nmtui
```

Edit a connection を選択しEnter
![WS20220430_000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/36af03cf-8e60-23ba-b756-e1c3d5240f38.jpeg)

以降、環境によって設定内容が異なる恐れがあります。

### enp0s3 の設定例
インターフェース１、NATについての設定です。

矢印キーやTabキーでenp0s3を選択しEnter
![WS20220430_000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/87c46487-5fbb-8905-00a6-584c85a81f19.jpeg)

<B>設定の変更方法</B>
選択したい項目を矢印キーやTabキーで選択、直接入力かEnterキーを押せば選択できます
チェック[X]を入力する場合は該当箇所を選択状態にしてからSpaceキーを押すと[X]と[ ]が交互に表示されます。
設定できれば OK でEnterキーを押してください（やり直したい場合は Cancel ）

enp0s3 の設定例
![WS20220430_000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/19100f4e-221f-17a8-5217-b81d9365b4e5.jpeg)

設定できれば OK でEnterキーを押すと、前の画面になります

### enp0s8 の設定例
インターフェース２、ホストオンリーアダプターについての設定です。

矢印キーやTabキーでenp0s8を選択しEnter
![WS20220430_000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/4eeeb76f-01f3-5ca4-b35a-f22a5d848e27.jpeg)

enp0s8 の設定例
IPv4 CONFIGURATION の<Show>を選択し、Enterキーを押すと詳細項目が表示され、設定できるようになります

例の場合、ホストオンリーアダプタでメモしたIPv4 アドレス 192.168.56.1 、サブネットマスク　255.255.255.0(/24) でしたので、このネットワーク内のIPv4 アドレス 192.168.56.2 、サブネットマスク　255.255.255.0(/24) をenp0s8に設定しています。
![WS20220430_000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/8f79d81a-323c-d8af-0afc-14369017a9b6.jpeg)

設定できれば OK でEnterキーを押すと、前の画面になります
Back で戻り、 OK でnmtuiを終了します
![WS20220430_000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/12785d63-6a02-5720-3d2b-5a64506fd092.jpeg)
![WS20220430_000008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/5a5342a9-e0e9-521f-9db3-fe9c0a6df428.jpeg)

DNSサーバ関連の対策として、GoogleのDNSサーバ IPアドレス 8.8.8.8 を追加。
/etc/resolv.conf の最後に nameserver 8.8.8.8 を追記します。
nano の操作： 保存 Ctrl+s 、nanoの終了 Ctrl+xです

```console
nano /etc/resolv.conf
```

変更例
![WS20220503_000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/b10bb577-a289-989d-787c-5dd64abf9482.jpeg)

設定を反映するため NetworkManager を再起動します
```console
systemctl restart NetworkManager
```

ping でインターネット接続ができることを確認します
止める方法　Ctrl + c
```console
ping google.com
```

## Docker環境の構築
<B>Dockerをインストールしますが、通常の手順ではエラーになりました</B>
現象：
systemctl start docker で起動すると「Failed to start docker.service: Unit not found.」エラーが出て起動できない。

<B>現時点の方針：</B>
docker の CentOS repository を追加する

<B>今後の課題：</B>
docker の repositoryでCentOS互換だと以下を追加します。。。
https://download.docker.com/linux/centos/docker-ce.repo
CentOSの移行先を検討していましたが、Dockerも含めて考えないといけないですかね。

yum に docker の repositoryを追加するため、yum-utilsをインストールします

```console
yum install -y yum-utils
```

yum に docker の repositoryを追加

```console
yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
```

docker-ce-stableが追加されていることを確認します

```console
dnf repolist
```
![WS20220501_000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/aaa01038-6a6b-40e1-e16a-5784682a7edd.jpeg)

インストールします
```console
yum install -y docker-ce docker-ce-cli containerd.io
```

Dockerを起動
```console
systemctl start docker
```

Dockerの自動起動を有効
```console
systemctl enable docker
```

作業用のグループ fiware とユーザー fiw01 を作成します
sudo コマンドが使えるように wheel グループにも所属させます
```console
groupadd fiware
useradd -g fiware fiw01
usermod -aG wheel fiw01
```

ユーザー fiw01 のパスワードを設定します
```console
passwd fiw01
```

ユーザー fiw01 が Docker を利用できるようにします
設定したパスワードを忘れないでください
```console
usermod -a -G docker fiw01
```

ユーザーを fiw01 へ切り替えるだけで良いのですが、確認のため再起動しておきます
```console
shutdown -r now
```

ユーザー fiw01 でログインし、以降は fiw01 で作業します。

## docker-composeのインストール
docker-compose をダウンロードします

```console
sudo curl -L \
https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 \
-o /usr/local/bin/docker-compose
```

ダウンロードしたファイルに実行権限を付与します

```console
sudo chmod +x /usr/local/bin/docker-compose
```

例：
![WS20220503_000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/f1771ce1-e5d7-38e9-30d3-b2ac09c11ff9.jpeg)

確認します
```console
docker-compose --version
```

例：
![WS20220503_000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/774a7d4b-f6f0-f1ed-ebdc-256ad1f87709.jpeg)

## Docker環境にFIWARE Orion Context Broker を導入
Orion Context Broker は Docker hub で公式の Orion docker コンテナを使用してインストールすることができます。
[Docker で Orion Context Broker を使用する方法](https://fiware-orion.letsfiware.jp/user/docker/)
[github.com/telefonicaid/fiware-orion](https://github.com/telefonicaid/fiware-orion)

FIWARE用のディレクトリを作成し移動

```console
mkdir ~/fiware
cd ~/fiware
```

~/fiware/docker-compose.yml を作成

```console
nano ~/fiware/docker-compose.yml
```

![WS20220503_000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/d2d352b5-8ba9-43b5-debf-859917279d15.jpeg)

```~/fiware/docker-compose.yml
version: "3"

services:
  orion:
    image: fiware/orion
    ports:
      - "1026:1026"
    depends_on:
      - mongo
    command: -dbhost mongo

  mongo:
    image: mongo:4.4
    command: --nojournal
```

![WS20220503_000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/29224748-92c0-e02b-23c1-146477ee8195.jpeg)

~/fiware で sudo docker-compose up を実行します

```console
cd ~/fiware
sudo /usr/local/bin/docker-compose up
```

Docker Hub の公開リポジトリから Orion Context Broker と MongoDB のダウンロードが開始されます、終了後に自動的に起動します
![WS20220503_000009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/5acdc965-b6bd-f95d-475e-4606f22e9012.jpeg)

Orion Context Broker と MongoDB が実行中の例
![WS20220503_000011.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/ef460c00-a86e-6e7d-96e2-db10b356fe83.jpeg)

## Orion Context Broker の動作試験
Orion Context Broker のバージョンを確認し、動作試験をします

OS Windows10 のWebブラウザを開き、仮想マシン MIRACLE LINUX 8.4 の enp0s8 のポート番号 1026 に対してAPIアクセスします。

具体的には enp0s8に設定したIPアドレスが192.168.56.2の場合、URLとして http://192.168.56.2:1026/version を入力しアクセスします。
すると Orion Context Broker のバージョンがAPIの応答として表示されます。

例：
![WS20220503_000012.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/a63f5b6c-948b-aba8-18c0-902737b2e5b4.jpeg)

Orion Context Broker と MongoDB　は Ctrl + c で停止できます。
仮想マシンの停止方法は以下になります。
```console
sudo shutdown -h now
```