Jetson NanoとAzure IoT Edgeランタイムのインストール

Azure IoT Edgeランタイム(v1.2)をJetson Nano(ARM64v8)でインストール手順についてなるべく簡単にまとめます。
[公式ドキュメント](https://docs.microsoft.com/en-us/azure/iot-edge/support)ではUbuntu 18.04 Server ARM64をTier 1としてサポートしていますが、まだPreviewの状態で、Jetson NanoはUbuntu 18.04 Desktop(Unity)なので完全一致しているわけではないですが、問題なくインストールできます。

Tier 1 : Microsoft社が確認とインストールパッケージを提供
Tier 2 : Microsoft社は非公式サポート、Azure IoT Edgeと互換性あるので使用可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287622/aa8a0749-b03f-2385-7b47-0678ec84d531.png)

# イメージ作成

[Nvidiaの開発キットウェブサイト](https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write)からWindows, MacOS, LinuxのOSに合わせてイメージをダウンロードしてSDカードに書き込みます。
Jetson Nano 2GBの場合は[こちら](https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-2gb-devkit#write)からダウンロードしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287622/df18d397-e24b-8bb4-501d-8962655d5822.png)

# セットアップ

[Nvidiaの開発キットウェブサイト](https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write)を参考して進めます。手順がわかりやすく書いてあるので、ほぼハマることなく進められます。

# 初期起動後の確認

```bash
# OS情報表示
$ uname -a
Linux jetson 4.9.253-tegra #1 SMP PREEMPT Mon Jul 26 12:13:06 PDT 2021 aarch64 aarch64 aarch64 GNU/Linux

# デスクトップ環境確認
$ echo $XDG_SESSION_DESKTOP
unity

# Jetpackバージョン確認
$ cat /etc/nv_tegra_release
# R32 (release), REVISION: 6.1, GCID: 27863751, BOARD: t210ref, EABI: aarch64, DATE: Mon Jul 26 19:20:30 UTC 2021

# モニタリングツール
$ sudo tegrastats
```

# 電力モードの設定

電源のタイプがMicro USBか、DCバレルジャックによって設定しておきます。

```bash:MicroUSB
$ sudo nvpmodel -q --verbose
$ sudo nvpmodel -m 1
$ sudo nvpmodel -q --verbose
```

```bash:DCバレルジャック
$ sudo nvpmodel -q --verbose
$ sudo nvpmodel -m 0
$ sudo nvpmodel -q --verbose
```

# (オプション)固定IP設定

```bash
$ sudo vi /etc/default/networking
--
CONFIGURE_INTERFACES=no

$ sudo vi /etc/network/interfaces
--
auto eth0
iface eth0 inet static
  address 192.168.0.100
  netmask 255.255.255.0
  gateway 192.168.0.1
  dns-nameservers 192.168.0.1,8.8.8.8

$ sudo reboot
```

# 必要なパッケージインストール

### curl

```bash
$ sudo apt update
$ sudo apt install -y curl
```

### (オプション)CPU/GPUの動作状態

```bash
$ sudo apt install python3-pip
$ sudo -H pip3 install jetson-stats
$ sudo systemctl restart jetson_stats.service
$ sudo jtop
```

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287622/7e0f4664-000e-4402-c42a-183e388ccfa7.png)

# IoT Edgeランタイムのインストール

```bash
# リポジトリ設定
$ curl https://packages.microsoft.com/config/ubuntu/18.04/multiarch/prod.list > ./microsoft-prod.list
$ sudo mv ./microsoft-prod.list /etc/apt/sources.list.d/
$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
$ sudo mv ./microsoft.gpg /etc/apt/trusted.gpg.d/

# IoT Edgeインストール
$ sudo apt update
$ sudo apt install -y aziot-edge

# コンテナーエンジン設定
$ sudo usermod -aG docker ${USER}
```

> Jetson Nanoイメージで既にNvidia Dockerが含まれているため、コンテナーエンジンインストールは不要です。

# デバイスのプロビジョニング

必要なコマンドのみ掲載します。

```bash:設定ファイル編集
$ sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
$ sudo vi /etc/aziot/config.toml
```

> ```text:設定内容
[provisioning]
source = "manual"
connection_string = "{IoT Edgeデバイスの接続文字列}"
```

```bash:設定ファイル反映
$ sudo iotedge config apply
$ sudo iotedge system status
$ iotedge list
NAME             STATUS           DESCRIPTION      CONFIG
edgeAgent        running          Up 18 seconds    mcr.microsoft.com/azureiotedge-agent:1.2
```