JetPackのアップデート方法(例: JetPack 4.4から4.5に)

## はじめに

NVIDIA Jetson Nanoをこれから使うというときは、JetPackの最新版でセットアップしてから、使い始めるかと思います。その初期のセットアップ方法としては、[JetPack SDK](https://developer.nvidia.com/embedded/jetpack)のページなどで、

* [SDカードのイメージ](https://developer.nvidia.com/jetson-nano-sd-card-image)をダウンロードして新しいSDに書き込む
* ホストPCで[SDK Manager](https://developer.nvidia.com/nvsdk-manager)を用いてUSB経由で書き込む

という方法が用意されていますが、今回は、既に使い始めたユーザが、JetPackの環境をアップデートする場合の手順をまとめておきます。

もちろん、既存ユーザでも、上記の2つの方法で新規にセットアップして、ユーザ領域のソフトウェア環境を別途バックアップから戻す、などという方法でもよいと思いますが、そのままアップデートしたい場合の手順です。

以下では、NVIDIAの公式ドキュメントに沿って書いてみます。

## 手順(ドキュメントの在り処と共に)

[JetPack Documentation](https://docs.nvidia.com/jetson/jetpack/install-jetpack/index.html#package-management-tool)の[1.3.2. Upgrade JetPack](https://docs.nvidia.com/jetson/jetpack/install-jetpack/index.html#upgrade-jetpack)から、1.のFirst, upgrade L4T.を見ると、the section "To upgrade to a new minor release"を参照せよ、などと言いつつ、そこの[リンク](https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fquick_start.html%23wwpID0EXHA)をたどると、あれ、どこだ？って感じですが、Over-The-Air UpdatesのUpdating the Jetson DeviceのTo upgrade to a new minor releaseあたりで、以下の、具体的な手順が示されています。

1.Open the apt source configuration file in a text editor, for example:

```
$ sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list
```
2.Change the repository name and download URL in the deb commands.
3.Save and close the source configuration file.

r32.4をr32.5に変更

```
deb https://repo.download.nvidia.com/jetson/common r32.5 main
deb https://repo.download.nvidia.com/jetson/t210 r32.5 main
```

4.Enter the commands:

```
$ sudo apt update
$ sudo apt dist-upgrade
```
進捗率70%ぐらいで以下のように尋ねられるので、Yと答える。

```
設定ファイル '/etc/apt/sources.list.d/nvidia-l4t-apt-source.list'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** nvidia-l4t-apt-source.list (Y/I/N/O/D/Z) [デフォルト=N] ? 
```

この後も2回ほどYと回答。
完了時にリブートするように通知される。

5.Reboot your Jetson device when the upgrade is finished.

```
$ sudo reboot
```

ここまで行ったら、あと少し、1.3.2. Upgrade JetPackの
2. Next, upgrade the other JetPack components.
に進んで、

```
$ sudo apt install nvidia-jetpack
```

で、終わりですね。

## 終わりに

今回、JetPackのアップデートをする手順を紹介してみましたが、カーネルやドライバやDevice Treeに手を入れている場合は、結局、また、それらのカスタマイズ作業をする必要があるように思います。

このアップデートで、ある程度、そのカスタマイズ領域も含めて新しいバージョンに移行できるかという期待があったのですが、このアップデート直後のJetson Nanoでは自分のカスタマイズ内容は入っておらず(ま、そうなりますね)、結局、新しいバージョンのソースコードに基づくカーネルのビルド環境を移して(私は、別SDからコピーしました)、カーネルイメージのコピーやmake modules_installを実行しました。

カーネルなどにカスタマイズしている場合のスムーズなアップデート方法を模索中ですが、今のところ、[別の記事](https://qiita.com/MakotoA67/items/7a31d45289315b66476d)で紹介したように、SDK ManagerでホストPCに構築した環境の元で、新しいJetPackの環境で、新しい別のSDにセットアップして、うまくいくか確認する、ということになるのではないかと思います。

でないと、いきなり、本記事で紹介したようなアップデートを行って、うまく動かなくなったら、戻りようがないような気がします。。
さほど、JetPackのバージョンに依存しないアプリ開発のみを行っている場合は、今回のようなアップデートでも大丈夫なのかな、と思いました。

(追記)
Qiitaにも既に同様な記事
[NVIDIA JetPackとL4Tのアップグレード方法 (OTA)](https://qiita.com/ntrlmt/items/5faf16d73102feeb5856)
(こちらは、L4Tにも触れられていますが)が投稿されていますね。ま、その手順が、JetPack 4.4から4.5でも確認できた、というところです。

(2021/9/7追記)
JetPack 4.5から4.6のアップグレードをやってみたのですが、何かエラーになってしまいました。その記録をとらすにリブートしてしまいました。すみません。uname -aの結果は正常っぽかったですし、大丈夫だったのかもしれませんが、私は、どうせまた自分のカーネルカスタマイズ分はいれなおさないといけないので、新規ユーザと同様に、JetPack 4.6のSDイメージからセットアップしました。また、別記事のように、SDK Managerからのセットアップにも成功しています。