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サポート。
電源管理 nvpmodelnvfancontrol
インストール Flakeベースの ISO ビルダー(iso_minimaliso_minimal_jp5)およびフラッシュユーティリティ(flash‑<device>-devkit)。
コンテナサポート Docker/Podman との統合、nvidia.com/gpu 用の CDIデバイス記述。
アップデート UEFIキャプセルベースの OTA ファームウェアアップデート、オプションの署名キャプセル認証。

一般的なワークフロー

  1. UEFIのフラッシュ – x86_64ホスト上で nix build …#flash‑xavier‑agx‑devkit(または適切なデバイス)を実行し、生成されたスクリプトを root で実行。
  2. インストーラーISOの作成nix build …#iso_minimal(または JetPack 5 用に iso_minimal_jp5)を実行し、dd を使ってUSBメモリに書き込む。
  3. Jetsonの起動 – UEFIブートマネージャーを使ってISOを起動し、標準の NixOS インストールガイドに従う。
  4. 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サポート
    
  5. (オプション)コンテナhardware.nvidia-container-toolkit.enable と Docker/Podman を有効化し、--device=nvidia.com/gpu=all でコンテナを実行。
  6. ファームウェアのアップグレード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
  • プロジェクト
  • プロジェクト
  • プロジェクト