1. Yokogawa_Mita

    Posted

    Yokogawa_Mita
Changes in title
+Ubuntu 18.04にAzure IoT Edgeランタイムをインストールする
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,311 @@
+横河電機のエッジコントローラe-RT3 Plus F3RP70-2L[^e-RT3]をAzure IoT認定デバイス[^azure]に登録する担当者として、Azure IoT Edgeについて勉強しました。
+その内容を数回に分けてご紹介します。
+
+
+---
+
+# 環境
+
+動作確認したデバイス(OS)
+
+- e-RT3 Plus F3RP70-2L(Ubuntu 18.04 32bit)
+- Raspberry Pi 4 Model B (Ubuntu Server 18.04 32bit)
+
+これらのデバイスでは `armhf` アーキテクチャのパッケージが動作します。
+また、Windows 10 搭載のPCでデバイスを操作してIoT Edgeをインストールしています。
+
+
+# Azure IoT Edgeとは
+Azure IoT Edgeとは、エッジ機器に向けたIoT環境の構築が簡単に実現できるサービスです。Azure IoT Edgeを使用することでエッジ機器を簡単にクラウドに接続でき、データのやり取りやモジュール(エッジ機器で実行させるプログラム)のデプロイが遠隔でできるようになります。
+詳しくは[Azure IoT Edge](https://azure.microsoft.com/ja-jp/services/iot-edge/)のウェブサイトをご覧ください。
+
+
+
+# 準備
+
+
+## Azureアカウントの作成
+まだアカウントを所持していない場合は作成します。
+初めの期間は一部サービスが無料で使用できたりクレジットが付いてくるので、お試し感覚で始められます。
+
+[Microsoft Azure](https://azure.microsoft.com/ja-jp/)
+
+## IoT Hubの作成
+Azureへサインアップしたら、Azure PortalからIoT Hubを作成します。
+
+1. Azure Portalの左上にある+マークの「リソースを作成」をクリックします。
+
+2. 左のカテゴリから「モノのインターネット(IoT)」をクリックし、右側に表示されるサービスから「IoT Hub」をクリックします。
+![iothub_001_p.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/26182348-a5ce-0ca7-a332-c05065a6bbf6.png)
+
+
+
+
+1. 基本の情報を入力します。
+サブスクリプション、リソースグループ、領域を選択し、任意のIoT Hub名を入力します。
+リソースグループをまだ作成していない場合は「新規作成」をクリックして作成します。
+入力出来たら上部の「ネットワーク」タブか下部の「次へ:ネットワーク」ボタンをクリックし次へ進みます。
+![iothub_002_p.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/75b226eb-a469-503a-fd75-37c8267a8104.png)
+
+1. ネットワークの情報を入力します。
+任意の内容を選択してください。
+今回はあらかじめ選択されている「パブリック エンドポイント (すべてのネットワーク)」を選択します。
+その後、上部の「サイズとスケール」タブか下部の「次へ:サイズとスケール」ボタンをクリックし次へ進みます。
+
+
+1. サイズとスケールの情報を入力します。
+「価格とスケールティア」ではIoT Edgeが使用可能なFreeレベルかStandardレベルから任意のレベルを選択します。
+Freeレベルは無料で使用することが可能で、Standardレベルは課金が必要です。
+その他の項目は今回は特に変更せずに次の「タグ」へ進みます。
+![iothub_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/24ccdaf3-d6d6-a341-cb57-96bc919ce773.png)
+
+
+
+1. タグの情報を入力します。
+今回はタグは使用しないので、何も入力せずに次の「確認および作成」へ進みます。
+
+
+1. 確認および作成
+入力した情報に問題がなければ左下の青い「作成」ボタンをクリックします。
+
+これでIoT Hubの作成は完了です。
+次回の作業でIoT Hubへ接続します。
+
+
+
+# インストール
+基本的にはMicrosoft公式のドキュメント[^doc]に従いますが、こちらではARM 32bitデバイスでの手順に絞って説明します。
+作業するディレクトリは特に問いません。
+
+## リポジトリの登録
+下記のコマンドでリポジトリを登録します。
+
+
+```bash
+curl https://packages.microsoft.com/config/ubuntu/18.04/multiarch/prod.list > ./microsoft-prod.list
+```
+
+
+次に、`apt` コマンド使用時に参照できるように `sources.list.d` へコピーします。
+
+
+
+```bash
+sudo cp ./microsoft-prod.list /etc/apt/sources.list.d/
+```
+
+※[Proxy設定](#proxy設定)や[sudoers設定](#sudoers設定)が必要な場合の説明が補足セクションにあります。
+
+
+## GPG公開キーの登録
+下記のコマンドでGPG公開キーを登録します。
+
+```bash
+curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
+sudo cp ./microsoft.gpg /etc/apt/trusted.gpg.d/
+```
+
+
+## コンテナーランタイムのインストール
+パッケージリストを更新し、コンテナーランタイムのMobyエンジンと、Mobyコマンドラインインターフェイスをインストールします。
+Mobyエンジンのインストール時にMobyコマンドラインインターフェイス(moby-cli)も一緒にインストールされます。
+
+
+```bash
+sudo apt update
+sudo apt install moby-engine
+```
+
+## Azure IoT Edgeセキュリティデーモンのインストール
+公式ドキュメント[^doc]では `apt` コマンドでのインストール手順が初めに紹介されていますが、`armhf` アーキテクチャのパッケージはこちらの手順では取得できませんでした。
+
+
+```bash
+$ sudo apt search iotedge
+Sorting... Done
+Full Text Search... Done
+iotedge/bionic 1.0.9.4-1 amd64 # amd64しかない
+ Azure IoT Edge Security Daemon
+```
+
+
+なので、[Azure IoT Edgeリリース](https://github.com/Azure/azure-iotedge/releases)から `armhf` アーキテクチャのセキュリティデーモンをインストールします。
+
+リリース一覧からインストールしたいバージョンのAssetsを展開し、`libiothsm` と `iotedge` のUbuntu用 `armhf` アーキテクチャのリンクを探します。
+一覧にはUbuntu 16.04のファイルしかありませんが、Ubuntu 18.04でも問題なく動作します。
+2020/8/25現在は1.0.9.4が最新の安定版のため、本バージョンを例にして説明します。
+※ `libiothsm` から先にインストールしてください。
+
+![iotedge_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/b9c0bc35-3778-9279-5243-d85c50e426e6.png)
+
+
+### libiothsm
+上記の画像の `libiothsm-std_1.0.9.4-1_ubuntu16.04_armhf.deb` を右クリックし、リンクのアドレスをコピーします。
+コピーしたリンクを下記のコマンドの `<libiothsm-std link>` に置き換えて実行します。
+`curl -L <libiothsm-std link> -o libiothsm-std.deb && sudo dpkg -i ./libiothsm-std.deb`
+実際のコマンドは以下の通りです。
+
+
+```bash
+curl -L https://github.com/Azure/azure-iotedge/releases/download/1.0.9.4/libiothsm-std_1.0.9.4-1_ubuntu16.04_armhf.deb -o libiothsm-std.deb && sudo dpkg -i ./libiothsm-std.deb
+```
+
+
+### iotedge
+上記の画像の `iotedge_1.0.9.4-1_ubuntu16.04_armhf.deb` を右クリックし、リンクのアドレスをコピーします。
+コピーしたリンクを下記のコマンドの `<iotedge link>` に置き換えて実行します。
+`curl -L <iotedge link> -o iotedge.deb && sudo dpkg -i ./iotedge.deb`
+実際のコマンドは以下の通りです。
+
+
+```bash
+curl -L https://github.com/Azure/azure-iotedge/releases/download/1.0.9.4/iotedge_1.0.9.4-1_ubuntu16.04_armhf.deb -o iotedge.deb && sudo dpkg -i ./iotedge.deb
+```
+
+
+
+## インストールの確認
+コンテナーランタイムとAzure IoT Edgeセキュリティデーモンがインストールできていることを確認します。
+
+* コンテナーランタイム
+以下のコマンドで確認します。
+
+```bash
+$ docker --version
+Docker version 19.03.12+azure, build 0ed913b885c8919944a2e4c8d0b80a318a8dd48b
+```
+
+* Azure IoT Edgeセキュリティデーモン
+以下のコマンドで確認します。
+
+```bash
+$ iotedge --version
+iotedge 1.0.9.4
+```
+
+
+<!-- # アップグレード
+基本的に、公式ドキュメント[^upgrade]の「セキュリティ デーモンの更新」セクションの内容に従います。
+
+## コンテナーランタイムのアップグレード
+`apt` コマンドでアップグレードできます。
+
+
+```bash
+#パッケージリストの更新
+sudo apt update
+# 更新可能なパッケージリスト一覧表示
+sudo apt list --upgradable
+# アップグレード
+sudo apt dist-upgrade
+```
+
+
+
+## Azure IoT Edgeセキュリティデーモンのアップグレード
+
+ARM 32bitデバイスの場合は `apt` コマンドでアップグレードができないので、[インストール時と同様の手順](#azure-iot-edgeセキュリティデーモンのインストール)で新しいバージョンの `armhf` アーキテクチャを選んでインストールすると自動的に新しいバージョンに上書きされます。
+
+-->
+
+# 補足
+
+## Proxy設定
+社内での作業にはProxy設定が必要でした。
+個人的に最も苦労したことの一つがProxyに関することなので、それぞれ環境は異なると思いますが私の設定した内容をご紹介します。
+
+`apt`、`curl`コマンドを使用するため環境変数にProxy URLを設定します。
+Proxy URLは例えば `http://username:password@example.com:port/` です。
+ご自身の環境によって変わりますので、詳しくは管理者の方へお問い合わせください。
+
+今回は `http_proxy`、`https_proxy`それぞれに設定して作業しました。
+
+
+```bash
+export http_proxy="http://username:password@xxx.com:port/"
+export https_proxy="http://username:password@xxx.com:port/"
+```
+
+
+環境変数は `env` コマンドで確認できます。
+こちらの手順で設定する場合、ログオフやシャットダウンを行うと設定内容が消去されます。
+
+また、Proxy設定を行った場合は環境変数を引き継ぐ `-E` オプションを `sudo` 使用時に付与して実行してください。
+
+
+```bash
+# aptコマンドの例
+sudo -E apt update
+sudo -E apt install moby-engine
+```
+
+
+設定した環境変数の消去は以下のコマンドで行います。
+
+```bash
+unset http_proxy https_proxy
+```
+
+
+## sudoers設定
+一般ユーザでの作業時にroot権限が必要なコマンドを使用する場合は通常 `sudo` を先頭に加えますが、以下のように拒否されてしまうことがあります。
+
+```bash
+# 一般ユーザusernameでの作業
+$ sudo apt update
+[sudo] password for username: # パスワードを入力
+username is not in the sudoers file. This incident will be reported.
+```
+
+このような場合に設定を行います。
+設定はroot権限で行うので、一旦 `su` コマンドで `root` ユーザに切り替えます。
+
+```bash
+$ su
+Password: # rootのパスワードを入力
+root@ubuntu:/home/username#
+```
+
+`visudo` コマンドで設定ファイルを編集します。
+
+
+```bash
+visudo
+```
+
+設定ファイルに以下の行を書き加えて保存します。
+`username` はご自身のユーザ名に置き換えてください。
+
+```bash
+username ALL=(ALL) ALL # 一般ユーザusernameの場合
+```
+
+`root` からログアウトし、`sudo` コマンドが通るか確認します。
+
+```bash
+root@ubuntu:/home/username# exit
+exit
+username@ubuntu:~$ sudo apt update
+[sudo] password for username: # パスワードを入力
+Get:1 http://ports.ubuntu.com/ubuntu-ports bionic InRelease [242 kB]
+...
+
+username@ubuntu:~$
+```
+
+
+
+# 次回
+IoT Edgeランタイムのインストールができました。
+次回はセキュリティデーモンを設定し、IoT Hubへ接続する手順を書いていきます。
+
+→~~次回~~
+
+# 参考文献
+
+[^e-RT3]: [リアルタイムOSコントローラ e-RT3 Plus F3RP70-2L](https://www.yokogawa.co.jp/solutions/products-platforms/control-system/real-time-os-controller/ert3-ai-platform/)
+[^azure]: [Microsoft Azure Certified for IoTデバイスカタログ](https://catalog.azureiotsolutions.com/)
+[^doc]: [Debian ベースの Linux システムに Azure IoT Edge ランタイムをインストールする](https://docs.microsoft.com/ja-jp/azure/iot-edge/how-to-install-iot-edge-linux)
+[^upgrade]: [IoT Edge セキュリティ デーモンおよびランタイムの更新](https://docs.microsoft.com/ja-jp/azure/iot-edge/how-to-update-iot-edge)
+
+