0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NVIDIA JetsonにCanonical Ubuntuをインストールする方法

Posted at

はじめに

UbuntuがNVIDIA Jetsonを正式にサポートしたので、インストール方法を紹介する。NVIDIA社が提供しているSDK Managerからインストールする方法とは異なる。また、OS自体のコア部分は共通だが、壁紙や初期にインストールされているライブラリなどが異なる。

動作確認環境

公式には、以下のハードが動作確認されている。詳細はUbuntu 22.04 for NVIDIA Jetson Orin Release Notes v1.2を参照。

  • Jetson AGX Orin開発者キット
  • Jetson Orin Nano開発者キット
  • Jetson Orin NXモジュール on Jetson Orin Nano開発者キット

方法

公式ドキュメントUbuntu 22.04 for NVIDIA Jetson Orin Instructions v1.2の手順通りにインストールを進める。

ホストでの作業

インストール準備

最初に、以下の「Download 22.04」と「Download Jetson AGX Orin boot firmware」から各々以下のファイルをホストPCにダウンロードする。

  • ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img.xz
  • Jetson_Linux_R36.4.3_aarch64.tbz2

image.png

インストールに必要な依存パッケージをインストールする。

sudo apt update
sudo apt install -y python3 mkbootimg bzip2 cpp device-tree-compiler

ダウンロードした「Jetson_Linux_R36.4.3_aarch64.tbz2」を作業フォルダに移動させて、以下のコマンドを実行する。

例: ダウンロードフォルダ「~/Downloads」、作業フォルダ「~/canonical_ubuntu_jetson」の場合
mkdir -p ~/canonical_ubuntu_jetson
cd ~/canonical_ubuntu_jetson
cp ~/Downloads/Jetson_Linux_R36.4.3_aarch64.tbz2 .
tar xf Jetson_Linux_R36.4.3_aarch64.tbz2
cd Linux_for_Tegra
sudo ./tools/l4t_flash_prerequisites.sh

ブートファームウエアのアップグレード

Jetsonをリカバリーモードで起動する。詳細は以下を参照。

リカバリモードで起動したJetsonとホストPCと接続して、ホストPCで、lsusbコマンドで、ID 0955:7023 NVIDIA Corp. APXがあることを確認する。

lsusb
Bus 001 Device 005: ID 0955:7023 NVIDIA Corp. APX
Bus 001 Device 004: ID 8087:0033 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Linux_for_Tegraを展開したフォルダ(例:~/canonical_ubuntu_jetson/Linux_for_Tegra
)に移動して、スクリプトを実行する。

作業フォルダ「~/canonical_ubuntu_jetson」の場合
cd ~/canonical_ubuntu_for_jetson
cd Linux_for_Tegra

Orin AGXの場合な以下のコマンドを実行して、bootファームウエアをアップグレードする。

Orin AGX
sudo ./flash.sh p3737-0000-p3701-0000-qspi internal 

Orin Nano/NXの場合は以下のコマンドを実行する。

Orin Nano/NX
sudo ./flash.sh p3768-0000-p3767-0000-a0-qspi internal 

Jetsonへの書き込み

以下の2つの方法がある。

  1. ホストでSSDに書き込み&JetsonにSSDを換装
  2. L4Tスクリプトで直接JetsonのSSDにリストア

SSDをホストに接続する手段がある場合は、1を推奨する。ホストに接続する手段がない場合は2の直接書き込める方法を推奨する。

ホストでSSDに書き込み&JetsonにSSDを換装

Jetsonの電源を切って、SSDを取り出し以下を実行する。

  1. 起動メディア(SSDなど)をホストPCに換装して、以下コマンドなどで確認する
    sudo fdisk -l
    
    デバイスが見つかれば成功。
    /dev/sda
    
  2. 起動イメージを以下のコマンドで起動メディアにコピーする

例: ~/Downloads:保存フォルダ、書き込み先:/dev/sdaの場合

cd ~/Downloads
xzcat ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img.xz | sudo dd of=/dev/sda bs=16M status=progress
sudo sync

書き込み先のパス(/dev/sdx)を間違えないように注意する。間違えるとOSのデータなどが消えてしまう。

  1. 起動メディアをホストPCから取り出して、Jetson開発者キットに換装する
  2. モニタにJetsonを接続してJetsonが起動すれば成功

L4Tスクリプトで直接JetsonのSSDにリストア

SSDが換装されていない場合は、一度Jetsonの電源を切ってSSDを換装し、再度JetsonをリカバリモードにしてホストPCと接続する。

NVIDIAが用意しているL4TスクリプトでJetsonのSSDにイメージを書き込む。詳細は以下を参照。

Linux_for_Tegraディレクトリで、DRIVERSのSample Root Filesystemをダウンロードして展開する。手動で以下のサイトからダウンロードできるが、今回はwgetコマンドでダウンロードする。

Linux_for_Tegraを展開したフォルダ(例:~/canonical_ubuntu_jetson/Linux_for_Tegra
)に移動して、wgetコマンドでダウンロードする。

~/canonical_ubuntu_for_jetson/Linux_for_Tegra
wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.3/release/Tegra_Linux_Sample-Root-Filesystem_r36.4.3_aarch64.tbz2
sudo tar xf Tegra_Linux_Sample-Root-Filesystem_r36.4.3_aarch64.tbz2 -C rootfs
sudo ./apply_binaries.sh 

以下のコマンドでイメージを書き込む。

sudo ./tools/backup_restore/l4t_backup_restore.sh -r --raw-image \ jammy-preinstalled-server-arm64+tegra-igx.img -e <device> <board-type> 
  • <board-type> : Jetsonデバイスの種類
    • AGX Orin開発者キットの場合: jetson-agx-orin-devkit
    • Orin Nano/NX開発者キットの場合: jetson-orin-nano-devkit
  • <device>
    • USB接続のSATA SSDなどの場合: sda
    • NVMe(SSD)の場合: nvme0n1

こちらからダウンロードしておいた、Ubuntu 22.04の圧縮イメージファイル(ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img.xz)を解凍して、Linux_for_Tegraディレクトリに移動する。

cd ~/Downloads/
unxz ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img.xz
ls

以下のファイルがあれば解凍成功。

ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img

Linux_for_TegraディレクトリにUbuntuイメージを移動する。
```bash: 作業フォルダ(~/canonical_ubuntu_jetson
mv ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img ~/canonical_ubuntu_for_jetson/Linux_for_Tegra/


以下のコマンドでAGX Orin開発者キットをSSDにインストールする。

```bash
cd ~/canonical_ubuntu_for_jetson/Linux_for_Tegra/
sudo ./tools/backup_restore/l4t_backup_restore.sh -r --raw-image ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img -e nvme0n1 jetson-agx-orin-devkit 

以下のようなメッセージが出れば成功。

***************************************
*                                     *
*  Step 3: Start the flashing process *
*                                     *
***************************************
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for device to expose ssh ......Waiting for device to expose ssh ...Device has booted into initrd. You can ssh to the target by the command:
$ ssh root@fc00:1:1:0::2
Cleaning up...
Log is saved to Linux_for_Tegra/initrdlog/flash_1-2_0_20250430-105916.log 
Run command: 
ln -s /proc/self/fd /dev/fd && mount -o nolock [fc00:1:1::1]:/home/srg/canonical_ubuntu_for_jetson/ubuntu22.04_r36.4.3/Linux_for_Tegra /mnt && /mnt/nvrestore_partitions.sh -e nvme0n1 -n --raw-image /mnt/ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img 
 on root@fc00:1:1::2
/mnt ~
nvrestore_partitions.sh Restoring /dev/nvme0n1 with image /mnt/ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img...
5422+1 records in
5422+1 records out
5422220800 bytes (5.4 GB, 5.0 GiB) copied, 5.97964 s, 907 MB/s
5171+0 records in
5171+0 records out
5422186496 bytes (5.4 GB, 5.0 GiB) copied, 3.94038 s, 1.4 GB/s
34304+0 records in
34304+0 records out
34304 bytes (34 kB, 34 KiB) copied, 0.0485917 s, 706 kB/s
Done
nvrestore_partitions.sh: Successful to restore with raw disk image /mnt/ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img

Jetsonをモニタにつなぎ、リセットボタンを押してJetsonを再起動して正常に起動すれば成功。

Jetsonでの作業

JetsonをモニタにつないでJetsonの起動を確認する。GRUBの画面が出てくるので、「Ubuntu」を選択するとUbuntuが起動する。

image.png

※起動に多少時間がかかる(Ubuntu 22.04という文字がしばらく出てから文字が消えると起動する)。

AGX Orin開発者キットは、モニタ出力がDisplayPortとなっているが、DisplayPort⇒HDMI変換アダプタではモニタがブルースクリーンになることがある。筆者の環境ではDisplayPort⇒DVI変換で正常に表示された。ブルースクリーンになる場合は、ケーブルやモニタを交換することを推奨。
JetPack5系統では正常に表示されていたので、JetPack6のドライバ関連の問題の可能性が高い。

https://forums.developer.nvidia.com/t/agx-orin-displays-a-blue-screen-after-flash-jetpack6-2/327731/8

起動後は、

  • ユーザ名: ubuntu
  • パスワード: ubuntu

でログインして、新規パスワードへパスワードを変更をする(必須)。

```bash
Ubuntu 22.04 LTS ubuntu ttyTCU0

ubuntu login: ubuntu
Password:

Login incorrect
ubuntu login: ubuntu
Password:
You are required to change your password immediately (administrator enforced).
Changing password for ubuntu.
Current password:
New password:
Retype new password:
You must choose a longer password.
New password:
Retype new password:
Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-1020-nvidia-tegra-igx aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

 System information as of Tue Nov 21 21:02:51 UTC 2023

  System load:  0.11               Swap usage:  0%       Users logged in: 0
  Usage of /:   0.2% of 916.74GB   Temperature: 47.1 C
  Memory usage: 1%                 Processes:   266

The list of available updates is more than a week old.
To check for new updates run: sudo apt update


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

IPの設定は、デフォルトではDHCP設定となっている。

sudo cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eno1:
            dhcp4: true
            dhcp6: true
            match:
                macaddress: 48:b0:2d:7f:ac:d4
            set-name: eno1
    version: 2

ネットワークに接続して、各種ライブラリをインストールする。

Canonical Ubuntuでは、JetPack(nvidia-jetpack)は依存関係のエラーでインストールできない。CUDAなどNVIDIA関連のライブラリは個別にインストールが必要となる。

NVIDIAのライブラリ関連のインストール

NVIDIAドライバ

PPAを追加する。

sudo add-apt-repository ppa:ubuntu-tegra/updates 

NVIDIAドライバをインストールする。

sudo apt install -y nvidia-tegra-drivers-36 

ユーザをGPU関連のグループに追加して再起動する。

# Adding user to group render allows running GPU related commands as non root
# video group is necessary to use the camera
sudo usermod -a -G render,video ubuntu
sudo reboot 

再起動後にNVIDIAドライバが認識されているか確認する。

nvidia-smi

以下のようになれば成功。

Fri May 23 01:33:30 2025
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 540.4.0                Driver Version: 540.4.0      CUDA Version: 12.6     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  Orin (nvgpu)                  N/A  | N/A              N/A |                  N/A |
| N/A   N/A  N/A               N/A /  N/A | Not Supported        |     N/A          N/A |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

CUDA

PPAを追加する。

sudo apt-key adv --fetch-keys \ "https://repo.download.nvidia.com/jetson/jetson-ota-public.asc" 
sudo add-apt-repository -y \ "deb https://repo.download.nvidia.com/jetson/t234 r36.4 main" 
sudo add-apt-repository -y \ "deb https://repo.download.nvidia.com/jetson/common r36.4 main" 

CUDAをインストールする。

# CUDA
sudo apt install -y cuda
# Tensor RT
sudo apt install -y libnvinfer-bin libnvinfer-samples
# cuda-samples dependencies
sudo apt install -y cmake

echo "export PATH=/usr/local/cuda-12.6/bin\${PATH:+:\${PATH}}" >> ~/.profile
echo "export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PA TH}}" >> ~/.profile
# Logout or reboot to apply the profile change sudo reboot 
sudo reboot 

jtop

Jetsonのモニタリングツール。CPUやGPUの利用状況などがわかる。

以下のコマンドを実行してインストールする。

sudo apt install python3-pip
sudo -H pip install jetson-stats

以下のコマンドで起動する。上手くいかない場合はsudoをつける。

jtop

エラーで起動しない場合は、

sudo jtop

image.png

image.png

image.png

その他のライブラリのインストール

必要に応じて以下のライブラリをインストールする。

SSH

sudo apt update
sudo apt install openssh-server

再起動。

sudo systemctl status ssh

エラーになる場合は、再インストールして再起動する。(2025/4/30に試した際は再インストールで解決した。)

sudo apt purge openssh-server
sudo apt install openssh-server

Docker関連

Docker関連をインストールする。詳細は以下を参照。

最初にDocker本体を以下の手順に沿ってインストールする。

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
NVIDIA Container Toolkit

Docker内でGPUを利用するために、「NVIDIA Container Toolkit」をインストールする。

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

Desktop環境(GUI環境)

GUI環境が必要な場合にインストールする。

sudo apt install -y ubuntu-desktop-minimal
sudo sed -i 's/allowed_users.*/allowed_users=anybody/' "/etc/X11/Xwrapper.config"
echo "needs_root_rights=yes" | sudo tee -a "/etc/X11/Xwrapper.config"
sudo sed 's/#WaylandEnable=false/WaylandEnable= false/' -i /etc/gdm3/custom.conf
sudo adduser gdm video
sudo reboot 

再起動後にGUI環境が利用可能となる。

image.png

設定変更

Power Modeの変更

以下のコマンドで現状の設定を確認する。

 変更前
sudo nvpmodel -q
NV Power Mode: MODE_30W
2

パフォーマンスを優先する場合は、MAX_Nに変更する。

MAX_N(最大)に変更
sudo nvpmodel -m 0

再起動後に反映される。

NVPM WARN: Golden image context is already created
NVPM WARN: Reboot required for changing to this power mode: 1
NVPM WARN: DO YOU WANT TO REBOOT NOW? enter YES/yes to confirm:

YES

NVPM WARN: rebooting..

トラブルシューティング

Dockerでnvidia-container-runtimeエラー

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v2.task/moby/8e122e0c814aec7100fe0f6d582e5878a2bd5a8a2c52abf2fb7e4682e4d865f4/log.json: no such file or directory): exec: "nvidia-container-runtime": executable file not found in $PATH: <nil>: unknown

NVIDIA Container Toolkitが入っていない場合は、インストールする。

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

デスクトップ環境で有線ネットワークが管理対象外になる

image.png

CUIで管理されているのが原因。

以下で現状確認する。

cd /etc/netplan
ls
50-cloud-init.yaml
sudo cat /etc/netplan/50-cloud-init.yaml

以下のようになっている。

50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eno1:
            dhcp4: true
            dhcp6: true
            match:
                macaddress: 48:b0:2d:7f:ac:d4
            set-name: eno1
    version: 2

renderer: NetworkManagerを追加する。

network:
    version: 2
    renderer: NetworkManager
    ethernets:
        eno1:
            dhcp4: true
            dhcp6: true
            match:
                macaddress: 48:b0:2d:7f:ac:d4
            set-name: eno1

NetworkManagerの設定を確認及び修正する。

sudo vi /etc/NetworkManager/NetworkManager.conf

以下のようになっている。

[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

managed=falseからmanaged=trueに変更する。

[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=true

[device]
wifi.scan-rand-mac-address=no

以下のコマンドで設定を反映する。

sudo netplan generate
sudo netplan apply
sudo systemctl restart NetworkManager

アップグレードやソフトをインストールできない

エラー内容
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 4295 (unattended-upgr)

自動更新ソフトがバックグランドで実行中のため発生しているエラー。10分くらい待つと自然に解消される。

まとめ

NVIDIA JetsonへのCanonical Ubuntuのインストール方法を紹介した。JetPackが直接インストールできないなど不便な点もあるが、デフォルトではデスクトップ環境など入っておらず、軽量なので自身でカスタマイズしたい方にお勧め。
今後は、NVIDIAが提供するJetson Linuxとより統合されていくことが予想されるので、インストール方法など統一され、より手軽に使いやすくなって欲しい。

参考:Canonicalの公式GitHubでドキュメントなどが整備されつつある。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?