はじめに
UbuntuがNVIDIA Jetsonを正式にサポートしたので、インストール方法を紹介する。NVIDIA社が提供しているSDK Managerからインストールする方法とは異なる。また、OS自体のコア部分は共通だが、壁紙や初期にインストールされているライブラリなどが異なる。
動作確認環境
-
ホスト:Ubuntu
- Ubuntu 22.04 x86_64
-
ターゲット:Jetson
- NVIDIA Jetson AGX Orin開発者キット(32GB)
- Ubuntu Server 22.04 for NVIDIA Jetson
- https://cdimage.ubuntu.com/releases/jammy/release/nvidia-tegra/ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img.xz
- Image SHA256SUM: 27c54b9f3a23b4c8a6a8490cc41281061b359fea031c44ebdf7932316331f68a
- Boot firmware 36.4.3 (Jetson Linux R36.4.3(JetPack 6.2))
- https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.3/release/Jetson_Linux_r36.4.3_aarch64.tbz2
- SHA256SUM: 949a44049c4ce6a8efdf572ea0820c874f6ee5d41ca3e4935b9f0e38d11873d2
- Ubuntu Server 22.04 for NVIDIA Jetson
- NVIDIA Jetson AGX Orin開発者キット(32GB)
公式には、以下のハードが動作確認されている。詳細は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
インストールに必要な依存パッケージをインストールする。
sudo apt update
sudo apt install -y python3 mkbootimg bzip2 cpp device-tree-compiler
ダウンロードした「Jetson_Linux_R36.4.3_aarch64.tbz2」を作業フォルダに移動させて、以下のコマンドを実行する。
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
)に移動して、スクリプトを実行する。
cd ~/canonical_ubuntu_for_jetson
cd Linux_for_Tegra
Orin AGXの場合な以下のコマンドを実行して、bootファームウエアをアップグレードする。
sudo ./flash.sh p3737-0000-p3701-0000-qspi internal
Orin Nano/NXの場合は以下のコマンドを実行する。
sudo ./flash.sh p3768-0000-p3767-0000-a0-qspi internal
Jetsonへの書き込み
以下の2つの方法がある。
- ホストでSSDに書き込み&JetsonにSSDを換装
- L4Tスクリプトで直接JetsonのSSDにリストア
SSDをホストに接続する手段がある場合は、1を推奨する。ホストに接続する手段がない場合は2の直接書き込める方法を推奨する。
ホストでSSDに書き込み&JetsonにSSDを換装
Jetsonの電源を切って、SSDを取り出し以下を実行する。
- 起動メディア(SSDなど)をホストPCに換装して、以下コマンドなどで確認する
デバイスが見つかれば成功。
sudo fdisk -l
/dev/sda
- 起動イメージを以下のコマンドで起動メディアにコピーする
例: ~/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のデータなどが消えてしまう。
- 起動メディアをホストPCから取り出して、Jetson開発者キットに換装する
- モニタに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が起動する。
※起動に多少時間がかかる(Ubuntu 22.04という文字がしばらく出てから文字が消えると起動する)。
AGX Orin開発者キットは、モニタ出力がDisplayPortとなっているが、DisplayPort⇒HDMI変換アダプタではモニタがブルースクリーンになることがある。筆者の環境ではDisplayPort⇒DVI変換で正常に表示された。ブルースクリーンになる場合は、ケーブルやモニタを交換することを推奨。
JetPack5系統では正常に表示されていたので、JetPack6のドライバ関連の問題の可能性が高い。
起動後は、
- ユーザ名: 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
その他のライブラリのインストール
必要に応じて以下のライブラリをインストールする。
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環境が利用可能となる。
設定変更
Power Modeの変更
以下のコマンドで現状の設定を確認する。
sudo nvpmodel -q
NV Power Mode: MODE_30W
2
パフォーマンスを優先する場合は、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
デスクトップ環境で有線ネットワークが管理対象外になる
CUIで管理されているのが原因。
以下で現状確認する。
cd /etc/netplan
ls
50-cloud-init.yaml
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
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でドキュメントなどが整備されつつある。
参考