Jetson Nanoを買いました

## 概要
前から気になっていたのですが、在庫が復活していたので、購入してみました。
菱洋エレクトロで注文して、2日で届きました。12,312円（税込み）で送料無料なので正規代理店の直販が最安だと思います。
まだOS入れただけで何もしてませんが、ハマった点を書いておきます。

![jetson_nano_getting_started_board.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276188/216a91d4-6aa0-bcf7-0607-7a5e45d15baf.jpeg)

## 電源
USB microBだと2A以上。
ACアダプタだと、5V、4A必要。ACアダプタはセンタープラス、内径 2.1 mm 外径 5.5 mmですが、DC jackのすぐ後ろにあるJ48をショートしないと入力できません。ただし、ショートしてしまうと、USB入力はできなくなります。どちらかしか選択できない。
ショートピンは入ってないので、ACアダプタ使用する場合は用意したほうがいいです。

USBだと5Wモードでしか動作しません。CPUは2coreのみ、GPUも周波数が抑えられます。
ACアダプタだとデフォルトで10Wモード、5Wモードと切り替えが可能。

## FANはDC5V
非常に重要です。5Vです！
通常のPC向けのFANは12Vなので、動かないことはないけど、動きません。
AmazonとかでJetosonNano表示すると、おススメにFANが表示されますが、おそらく12V用なのでちゃんと確認しましょう。

なんかおかしいなと思ってたんだけど。注文しなおしました(>_<)

ついでに、PWM対応のFANの場合、温度が低いと、FANは止まったままです。
50度くらいになると回りだしますが、負荷をかけなくても[jtop](https://github.com/rbonghi/jetson_stats)を使用して動作確認できます。
jtopで"3 CTRL"を開き、FANのSpeedを"m"キーと"p"キーで変更できます。
設定を変えると、jtopを閉じるまでその設定のままになるので注意。


## ヒートシンクのねじ穴
M3だと入りません。M2.6がちょうどいい感じ。
FAN買ってついてくるネジはたぶんM3なので別途用意したほうがいいと思います。

## インストール
公式手順(下記)に従ってインストールしていきます。
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit
Ubuntuなので特に問題ないと思いますが、~~現在ダウンロードできるバージョンは、jetson-nano-sd-r32.1.1-2019-05-31.imgで、インストールの最終段階で、「applying changes」の表示で止まってしまいます。何度やっても同じなのでバグですかね。CHANCELボタンで抜ければ、普通に立ち上がります。なんとなく気持ち悪いけど…~~
※2019/07/30追記。"jr32.2-2019-07-16"では30分程度で完了しました。フォーラムに通信帯域によっては時間がかかるという記載があります。

インストール後は、最初からSSH使えます。vimも入ってます。

## 固定IP化
GUIで設定すれば特にハマることはないと思います。
コマンドラインで設定する場合は、netplan入っていないので、以下のどちらかになるようです。

- /etc/network/interfaces.d/に設定ファイルを作成する

拡張子なしで、ファイル名は何でもいいようです。

```
$ sudo vi /etc/network/interfaces.d/network
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0

# DHCP 
# iface eth0 inet dhcp

# Static IP
iface eth0 inet static
address 192.168.0.40
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.1,8.8.8.8
```
再起動で反映する。

- nmcliコマンドで設定する

```
#デバイス名を確認(NAMEがデバイス名)
$ nmcli connection show
#NAMEを指定("wired 1"の場合)
$ sudo nmcli connection mod "wired 1" \
> ipv4.addresses "192.168.0.40/24" \
> ipv4.gateway "192.168.0.1" \
> ipv4.dns "192.168.0.1,8.8.8.8" \
> ipv4.method "manual"
```
再起動で反映。

## docker & docker-compose
あんまり使わないのかな・・・。全然情報がなくて。

dockerは最初から入っていますが、dockerグループにユーザーが入っていないのでsudoが必要。
sudo不要にするにはdockerグループにユーザーを追加する。

```
$ sudo usermod -aG docker $USER
$ exit
```
一度ログアウトして、再ログインすると反映される。

docker-composeは入っていません。ARMだから公式イメージもありません。
ラズパイと同じでいいのかな…
というわけで、とりあえず以下で動きました。
(※docker ver19.03にアップグレードすると動かないかも。OSイメージも変えたので何が原因か未検証です)

```
$ git clone https://github.com/docker/compose.git
$ cd compose
$ git checkout bump-1.23.2
$ sed -i -e 's:^VENV=/code/.tox/py36:VENV=/code/.venv; python3 -m venv $VENV:' script/build/linux-entrypoint
$ sed -i -e '/requirements-build.txt/ i $VENV/bin/pip install -q -r requirements.txt' script/build/linux-entrypoint
$ docker build -t docker-compose:armhf -f Dockerfile.armhf .
```
10分弱ほどでビルドできます。
ビルド後、コンテナから取り出して権限の設定。

```
$ docker run --rm --entrypoint="script/build/linux-entrypoint" -v $(pwd)/dist:/code/dist -v $(pwd)/.git:/code/.git "docker-compose:armhf"
$ sudo cp dist/docker-compose-Linux-aarch64 /usr/local/bin/docker-compose
$ sudo chown root:root /usr/local/bin/docker-compose
$ sudo chmod 0755 /usr/local/bin/docker-compose

$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01
```

nvidia-dockerはサポートしていないとのこと。残念ですね…
この辺に情報があります。
https://devtalk.nvidia.com/default/topic/1050809/jetson-nano/docker-image-to-see-if-cuda-is-working-in-container-on-jetson-nano-/

※docker ver19.03でGPU対応したようですね。デフォルトで入っているものはまだ古いバージョンですが、
`curl -sSL https://get.docker.com | sh`でアップグレード可能。

---
せっかく買ったので、いろいろ遊んでみたいと思っていますが、チュートリアルあるようなのでその辺から攻めていきます。