anduril/jetpack-nixos
NixOS module for NVIDIA Jetson devices
jetpack‑nixos – NVIDIA Jetson 用 NixOS サポート(JetPack)
何であるか – Jetson開発キット向けに NVIDIA JetPack SDK(ファームウェア、カーネル、CUDA、cuDNN、TensorRT、GStreamerプラグイン、Vulkanなど)をパッケージ化する NixOS モジュールおよびオーバーレイ。JetPack が提供するドライバーやライブラリを同期したまま、Jetsonデバイス上で完全な NixOS システムをインストール・実行できるようにします。
なぜ重要か – JetsonボードはエッジAI、ロボット工学、コンピュータビジョンワークロードで人気があります。通常は NVIDIA の Ubuntu ベースイメージを使用し、ファームウェア、カーネル、CUDA のバージョンを手動で管理する必要があります。jetpack‑nixos は、宣言的 NixOS エコシステム内でこれらをすべて自動化し、再現可能なビルド、簡単なアップグレード、Nix 提供パッケージと JetPack コンポーネントの混在を可能にします。
主な機能
| 分野 | リポジトリで提供されるもの |
|---|---|
| ファームウェア | EDK2ベースのUEFIファームウェア、ARM Trusted Firmware、OP‑TEE をフラッシュするスクリプト。 |
| カーネル | NVIDIA提供の JetPack カーネル(または bring‑your‑own‑kernel オプションでメインラインカーネル)。 |
| GPUスタック | CUDA、cuDNN、TensorRT、NVIDIA コンテナーツールキット。 |
| マルチメディア | V4L2加速エンコード/デコード、GStreamerプラグイン、Wayland/GBM/EGL/Vulkanサポート。 |
| 電源管理 | nvpmodel、nvfancontrol。 |
| インストール | Flakeベースの ISO ビルダー(iso_minimal、iso_minimal_jp5)およびフラッシュユーティリティ(flash‑<device>-devkit)。 |
| コンテナサポート | Docker/Podman との統合、nvidia.com/gpu 用の CDIデバイス記述。 |
| アップデート | UEFIキャプセルベースの OTA ファームウェアアップデート、オプションの署名キャプセル認証。 |
一般的なワークフロー
- UEFIのフラッシュ – x86_64ホスト上で
nix build …#flash‑xavier‑agx‑devkit(または適切なデバイス)を実行し、生成されたスクリプトを root で実行。 - インストーラーISOの作成 –
nix build …#iso_minimal(または JetPack 5 用にiso_minimal_jp5)を実行し、ddを使ってUSBメモリに書き込む。 - Jetsonの起動 – UEFIブートマネージャーを使ってISOを起動し、標準の NixOS インストールガイドに従う。
- JetPackモジュールの有効化 –
configuration.nixで以下の設定を行う:hardware.nvidia-jetpack.enable = true; hardware.nvidia-jetpack.som = "orin-agx"; # または xavier‑agx など。 hardware.nvidia-jetpack.carrierBoard = "devkit"; hardware.graphics.enable = true; # GPUサポート - (オプション)コンテナ –
hardware.nvidia-container-toolkit.enableと Docker/Podman を有効化し、--device=nvidia.com/gpu=allでコンテナを実行。 - ファームウェアのアップグレード –
nixos-rebuild switchの後に、hardware.nvidia-jetpack.bootloader.autoUpdate = trueを設定するか、手動でキャプセルをビルド(nix build .#uefi-capsule-update‑xavier‑nx‑emmc‑devkit)し、デバイスに適用する。
使用すべき人
- Jetsonボードで再現可能なOSイメージが必要な ロボット工学/エッジAIエンジニア。
- CUDA加速MLフレームワーク(PyTorch、TensorFlow、OpenCV)を Nixシェルやコンテナ内で実行したい 研究者。
- 宣言的システム定義を好む DevOps/CI担当者 で、Jetsonスタック全体をバージョン管理したい人。
制限事項と注意点
- JetPack 5–7 でサポートされている Jetsonデバイスのみ対応(Orin AGX/NX/Nano、Xavier AGX/NX)。Nano/TX1/TX2 は明示的に非対応。
- ファームウェアおよび一部のフラッシュツール(
tegrarcm_v2)は x86_64 ホストでのみ実行可能。 - Xavier AGX は UEFI変数を eMMCパーティションに保存するため、Linuxからの実行時EFI変数変更は不可能。ブート順序は手動で設定する必要あり。
- 一部の Orin モデルではグラフィカルコンソール出力が不安定な場合あり。トラブルシューティングにはシリアルコンソールを推奨。
- CUDAバイナリは非フリー。
allowUnfree = trueを有効化し、Nixpkgs設定でcudaSupport = trueを設定する必要あり。 - JetPackバージョンを混在させる場合、ファームウェア、カーネル、rootfsはすべて同じメジャーバージョンに属する必要あり。JetPack 5のファームウェアと JetPack 6のカーネルを混在させることはできない。
クイックスタートスニペット(Flakeベース)
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
jetpack.url = "github:anduril/jetpack-nixos";
jetpack.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { self, nixpkgs, jetpack, ... }:
let
system = "aarch64-linux";
in {
nixosConfigurations.jetson = nixpkgs.lib.nixosSystem {
inherit system;
modules = [ ./configuration.nix jetpack.nixosModules.default ];
};
};
}
# configuration.nix(抜粋)
{
hardware.nvidia-jetpack.enable = true;
hardware.nvidia-jetpack.som = "orin-agx";
hardware.nvidia-jetpack.carrierBoard = "devkit";
hardware.graphics.enable = true;
hardware.nvidia-container-toolkit.enable = true;
virtualisation.docker.enable = true;
}
詳細情報の入手先
- リポジトリの README(この要約の元) – 詳細なフラッシュ、ISOビルド、カーネルオーバーレイ手順を含む。
- NVIDIA JetPack SDKドキュメント – TensorRT や電源モデルなど、ハードウェア固有の機能について。
- NixOSマニュアル – 一般的な NixOS インストールおよび Flake の使用方法。
- OpenEmbedded for Tegra (OE4T) – このプロジェクトで使用されるクリーンアップされたベンダーカーネルの元となる上流ソース。
結論:jetpack‑nixos は NVIDIA の JetPack AIスタックと、再現可能で宣言的な NixOS の世界の間の橋渡しを果たし、Jetsonエッジデバイス上でAIワークロード、コンテナ、カスタムカーネルを実行することを現実的かつ効率的に可能にします。
関連
- プロジェクト
- Dispatch
- プロジェクト
- プロジェクト
- プロジェクト