Jetson Nano 延命

# 1.はじめに
公式のDeveloper Kitでは、Ubuntuが18.04で既にサポートが終了しております。
Ubuntuを20.04にすることで、少しでも延命したいと思います。

# 2.参照先
## USBから起動
https://qiita.com/kitazaki/items/cb87be80a760184513dc
## 18.04から20.04
https://qiita.com/Manyan3/items/c1d583dbfef443536cef
https://qengineering.eu/install-ubuntu-20.04-on-jetson-nano.html

# 3.準備する物
Jetson Nano
MicroSD(32GB以上)
モニタ、キーボード、マウス
MicroSDでUpgradeすると大変時間が掛かるため、私はUSB-SSD上で行ってます。

# 4.MicroSDの作成
## DL
Jetson Download Centerから、「Jetson Nano Developer Kit SD Card Image」をDLします。
## MicroSDに焼く
詳細は割愛します。私は「BalenaEtcher」で焼きました。

# 5.起動
Jetson Nano Developer Kit SD Card ImageのMicroSDをJetson Nanoに挿して起動します。
User、Password、言語等の設定をします。
以下、起動後の画面になります。
![no1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1473918/38dac274-cc39-d88a-eca3-d631a4539fb0.png)

# 6.MicroSDからUSB-SSDへ
2.参照先の「USBから起動」の通り実行します。

# 7.不要アプリの削除
USB-SSDから起動ができましたら、不要アプリの削除を行います。
## 必須削除
chromium-browser
```
sudo apt purge chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra
```
## 任意削除
私は「libreoffice」と「thunderbird」を削除しました。
```
sudo apt purge libreoffice* thunderbird*
sudo apt clean
sudo apt autoremove
```
# 8.18.04のUpdate
(注意)ここのUpdateが上手くいかないと、20.04に上げても起動しなくなります。
必ず、Updateしてエラーが無い状態にします。
## update
```
sudo apt update
***********
(省略)
***********
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードできるパッケージが 318 個あります。表示するには 'apt list --upgradable' を実行してください。
```
結構な量があります(笑)
```
sudo apt upgrade
***********
(省略)
***********
アップグレード: 317 個、新規インストール: 6 個、削除: 0 個、保留: 1 個。
666 MB のアーカイブを取得する必要があります。
この操作後に 4,080 kB のディスク容量が解放されます。
続行しますか? [Y/n] Y ←「Y」入力しEnter
***********
(省略)
***********
設定ファイル '/etc/ld.so.conf.d/nvidia-tegra.conf'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** nvidia-tegra.conf (Y/I/N/O/D/Z) [デフォルト=N] ? Y ← 「Y」入力しEnter
***********
(省略)
***********
設定ファイル '/etc/systemd/nv-oem-config-post.sh'
 ==> これはインストールしてから (あなたかスクリプトによって) 削除されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** nv-oem-config-post.sh (Y/I/N/O/D/Z) [デフォルト=N] ? Y ← 「Y」入力しEnter
***********
(省略)
***********
 lqqqqqqqqqqqqqqqqqqqqqqqqu Configuring docker.io tqqqqqqqqqqqqqqqqqqqqqqqqqk
  x                                                                          x
  x If Docker is upgraded without restarting the Docker daemon, Docker will  x
  x often have trouble starting new containers, and in some cases even       x
  x maintaining the containers it is currently running. See                  x
  x https://launchpad.net/bugs/1658691 for an example of this breakage.      x
  x                                                                          x
  x Normally, upgrading the package would simply restart the associated      x
  x daemon(s). In the case of the Docker daemon, that would also imply       x
  x stopping all running containers (which will only be restarted if         x
  x they're part of a "service", have an appropriate restart policy          x
  x configured, or have some other means of being restarted such as an       x
  x external systemd unit).                                                  x
  x                                                                          x
  x Automatically restart Docker daemon?                                     x
  x                                                                          x
  x                    <Yes>                       <No>                      x
  x                                                                          x
  mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
<No>を選択
***********
(省略)
***********
nvidia-l4t-kernel (4.9.337-tegra-32.7.4-20230608212426) のトリガを処理しています ...
処理中にエラーが発生しました:
 nvidia-l4t-bootloader
 nvidia-l4t-xusb-firmware
 nvidia-l4t-initrd
E: Sub-process /usr/bin/dpkg returned an error code (1)
```
ここでエラーが出力します。
このエラーを放置したまま20.04にすると起動しなくなります(経験済み)
下記のコマンドを実行します。
```
sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/backup/
sudo mkdir /var/lib/dpkg/info/
sudo apt update
sudo apt -f install
sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/backup/
sudo rm -rf /var/lib/dpkg/info
sudo mv /var/lib/dpkg/backup/ /var/lib/dpkg/info/
sudo apt install nvidia-l4t-bootloader
sudo apt install nvidia-l4t-xusb-firmware
sudo apt install nvidia-l4t-initrd
```
またUpdate確認をします。
```
sudo apt update && sudo apt -y upgrade && sudo apt -y dist-upgrade && sudo apt -y autoremove -y
```
上記を実行して、エラーの表示がありませんでしたので、1度再起動します。
```
sudo reboot
```
問題無く起動できることを確認します。
# 18.04から20.04へ
## 前準備
2.参照先のUSBから起動にある
https://qiita.com/kitazaki/items/cb87be80a760184513dc
を参照してください。
参照するのは、
・release-upgradesの編集
・prompt=normal と書き換え保存します。
・編集後に以下の通り実行
です。
## 20.04へUpgrade
下記の通り入力します。
```
sudo do-release-upgrade
***********
(省略)
***********
パッケージリストを読み込んでいます... Done
依存関係ツリーを作成しています
状態情報を読み取っています... Done
No snaps are installed yet. Try 'snap install hello-world'.

Checking for installed snaps

Calculating snap size requirements

リポジトリ情報のアップデート

サードパーティが提供するリポジトリを使わない設定にしました

sources.list にあるサードパーティが提供するリポジトリを使わない設定にしました。>アップグレード完了後、'ソフトウェアソース'
ツールもしくはパッケージマネージャーを使って再び利用可能な設定にすることができま
す。

続けるには [ENTER] キーを押してください ←(Enter)
***********
(省略)
***********
アップグレードを開始しますか？


25 個のインストール済みパッケージは Canonical
によってサポートされなくなりました。ただしコミュニティからのサポートは受けること
ができます。

37 個のパッケージが削除されます。 605 個の新規パッケージがインストールされます。
 1747
個のパッケージがアップグレードされます。

合計 1,232 M をダウンロードする必要があります。 このダウンロードは約 4 分 かかり
ます。

アップグレードをインストールするのに数時間かかることがあります。ダウンロードが完
了してしまうと、処理はキャンセルできません。

 続行する[yN]  詳細 [d] y ← 「y」入力してEnter
Lock screen disabled

Your lock screen has been disabled and will remain disabled until you
reboot.

続けるには [ENTER] キーを押してください ← Enter

***********
(省略)
***********
キーボード、キーボードのレイアウトの選択は、japaneseにしました
***********
(省略)
***********
configuring gdm3はOKを選択
configuring gdm3でgdm3を選択
***********
(省略)
***********
Automatically restart Docker daemon?
は<No>を選択しました
***********
(省略)
***********
設定ファイル '/etc/X11/app-defaults/XScreenSaver-nogl'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** XScreenSaver-nogl (Y/I/N/O/D/Z) [デフォルト=N] ?　N ← 「N」を入力してEnter
***********
(省略)
***********
設定ファイル '/etc/update-manager/release-upgrades'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** release-upgrades (Y/I/N/O/D/Z) [デフォルト=N] ?　N ← 「N」を入力してEnter
***********
(省略)
***********
設定ファイル '/etc/update-motd.d/91-release-upgrade'
 ==> これはインストールしてから (あなたかスクリプトによって) 削除されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** 91-release-upgrade (Y/I/N/O/D/Z) [デフォルト=N] ?　N ← 「N」を入力してEnter
***********
(省略)
***********
設定ファイル '/etc/xdg/autostart/blueman.desktop'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** blueman.desktop (Y/I/N/O/D/Z) [デフォルト=N] ?　N ← 「N」を入力してEnter
***********
(省略)
***********
設定ファイル '/etc/xdg/autostart/clipit-startup.desktop'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** clipit-startup.desktop (Y/I/N/O/D/Z) [デフォルト=N] ?　N ← 「N」を入力してEnter
***********
(省略)
***********
設定ファイル '/etc/gdm3/custom.conf'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** custom.conf (Y/I/N/O/D/Z) [デフォルト=N] ?N ← 「N」を入力してEnter
***********
(省略)
***********
古いソフトウェアを検索しています
状態情報を読み取っています... Done

サポートが中止された（あるいはリポジトリに存在しない）パッケージを削除しますか？



136 個のパッケージが削除されます。 3 個の新規パッケージがインストールされます。

アップグレードの取得とインストールには数時間かかることがあります。ダウンロードが
完了してしまうと、処理はキャンセルできません。

 続行する[yN]  詳細 [d] y ← 「y」を入力してEnter
***********
(省略)
***********
システムのアップグレードが完了しました。

再起動が必要です

アップグレードを完了するには再起動が必要です。
'Y' を選択すると再起動します。

続行する[yN] N ← 「N」を入力してEnter(重要)
```
:::note alert
注意
最後に再起動は絶対にしないようにしてください。
:::
# 9.Upgrade後の処理
## 
2.参照先の18.04から20.04
https://qiita.com/Manyan3/items/c1d583dbfef443536cef
を参照してください。
参照するのは、
・prompt=normal を元に戻します(必須)
の前後の
```
sudo vi /etc/update-manager/release-upgrades
prompt=never
```
です。
# 10.再起動
```
sudo reboot
```
再起動後の画面
![no2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1473918/c66a280d-fa77-446e-59c0-24ee63c21aac.png)
# 11.後処理
icd.dを削除します。
```
sudo rm -rf /usr/share/vulkan/icd.d
```
Updateします。
```
sudo apt update && sudo apt -y upgrade && sudo apt -y dist-upgrade && sudo apt -y autoremove
```
循環シンボリックリンクを削除します。
```
sudo rm /usr/share/applications/vpi1_demos
```
トップバーの歪んだnvidiaロゴを削除します
```
cd /usr/share/nvpmodel_indicator
sudo mv nv_logo.svg no_logo.svg
```
最後の再起動
```
sudo reboot
```
![no3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1473918/b8f048d3-2556-92b9-18b4-24fe8307f418.png)
# 12. 20.04になっているか確認
```
lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.6 LTS
Release:        20.04
Codename:       focal
```
# 13.まとめ
Ubuntuを20.04にすることで、2025年4月までサポートされます。

# 14.追記
コメントのOpenSSLについて確認しました。
```
$ openssl version
OpenSSL 1.1.1f  31 Mar 2020
```
と表示しました。
https://www.openssl.org/policies/releasestrat.html
を拝見しますと、
```
Version 1.1.1 will be supported until 2023-09-11 (LTS). 
```
の記載がありました。
# 15. OpenSSLのUpdate
## DL
下記より、
https://www.openssl.org/source/
```
openssl-3.1.1.tar.gz (SHA256) (PGP sign) (SHA1)
```
をDLします。
## 解凍
DLしたディレクトリに移動して解凍します。
```
tar -zxvf openssl-3.1.1.tar.gz
```
解凍すると、
```
openssl-3.1.1
```
のディレクトリが出来ます。
## Build&Install
解凍したディレクトリに入ります
```
cd openssl-3.1.1
```
buildします。
```
sudo ./config
(省略)
sudo make
(省略)
sudo make install
```
## 古いOpenSSLを退避
```
cd /usr/bin
sudo mv openssl openssl.org
```
## buildしたOpenSSLを設定
```
ln -s /usr/local/bin/openssl
```
## ldconfig
```
sudo ldconfig /usr/local/lib/
```
## OpenSSLのversion確認
```
openssl version
OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
```
一応、これでOpenSSLを上げることができました。
## OpenSSLの参照先
https://www.trusted-design.net/archives/933/
こちらを参考にさせていただきました。