# 環境準備

MiniPremにつきましては、[こちら](/dev/miniprem/miniprem-readme.md)のページをかならずお読みいただき、理解頂いた上でご利用頂いております。

## 前提条件

**ハードウェア**

下記条件よりもハードウェアスペックが低い場合でもインストールは可能ですが、コマ落ち、フリーズ、再接続などの動作不具合が発生する、あるいは期待する品質で使用できない可能性が高くなります。

| OS             | rootアクセスが可能なUbuntu 24.04システム（Ubuntu 22.04、ならびにWSLにはインストールできません。）                                                                                                                                                                                                                     |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| CPU            | <p>アーキテクチャ: x86-64 (Intel/AMD)<br>※ ARM プロセッサには対応していません<br>• ハイエンドIntel第14世代 / AMD Zen 5またはそれ以降<br>• コア数: 8 以上</p>                                                                                                                                                                   |
| RAM            | 32GB 以上                                                                                                                                                                                                                                                                              |
| NVMe SSD       | <p>• 容量: 256GB 以上<br>• スピード: PCIe 4.0 以上</p>                                                                                                                                                                                                                                         |
| NVIDIA RTX GPU | <p>GeForce RTX 4080以上 / RTX Ada Generation（6000 Ada等）以上<br>• GPUメモリ: 16GB 以上<br>• ドライババージョン: 推奨 nvidia-driver-580 以上（例：580系）※互換性のある最新ドライバを使用してください。<br>• CUDAバージョン: 12.2（またはそれ以降の互換バージョン, CUDA Version: 13.0可）<br>• <code>NVIDIA-smi</code>/<code>nvcc -V</code> コマンドで上記が確認できること</p> |

**その他環境**

| インターネット接続     | <p>• パケットロス、揺らぎの無いインターネット接続<br>• Dockerイメージのダウンロード（約10GB程度）、ストリーミング配信、ライセンス認証・音声認識・音声合成・LLMとの接続で使用します。</p>                                                       |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ブラウザ          | Google Chrome（バージョン124 以上）                                                                                                                                       |
| リモートアクセス手段・経路 | <p>SSHサーバーを準備していただき、ngrok等を使用してリモートアクセスすることも可能です。<br>その他、TeamViewer や AnyDesk などリモートアクセスにてインストール対象にリモート接続し、ターミナルでインストール作業を実行できる環境。接続に必要なアカウント等をお客様にてご提供ください。</p> |

**デジタルヒューマンを表示する端末**

表示端末は、MiniPremがインストールされた端末と同じである必要はありません。

[デジタルヒューマンを快適に利用するための端末要件](/users/faq/digitalhumans-system-requirements.md) をご覧下さい。

## **事前準備**

Ubuntu 24.04をクリーンインストールしたホストをご準備いただき、MiniPremインストーラーを実行する前に、以下のソフトウェアをインストールしておく必要があります。

下記手順は一例であり、事前準備における操作方法や問題について弊社はサポートいたしません。お客様の責任においてご準備、作業を行ってください。

1. **rootユーザーのパスワード設定**

   Ubuntu 24.04では、デフォルトでrootユーザーのパスワードが設定されていない場合があります。インストール作業にはroot権限が必要なため、事前に設定しておく必要があります。

   ※必ず作業後にrootアカウント/SSH/開放ポートの無効化・削除をしてください。

   ```bash
   # rootユーザーのパスワードを設定
   sudo passwd root
   # root権限を持つ一般ユーザーを設定する場合は以下
   sudo passwd <ユーザー名>

   # プロンプトが表示されたら、新しいパスワードを入力（2回）
   # Enter new UNIX password: [パスワードを入力]
   # Retype new UNIX password: [パスワードを再入力]
   ```
2. **システムパッケージの更新**

   ```bash
   sudo apt update && sudo apt upgrade -y
   ```
3. **基本的な開発ツールのインストール**

   ```bash
   sudo apt install -y \
     curl \
     wget \
     git \
     build-essential \
     software-properties-common \
     apt-transport-https \
     ca-certificates \
     gnupg \
     lsb-release \
     unzip \
     jq \
     socat \
     openssl \
     smartmontools
   ```

   それぞれのパッケージの簡単な説明は以下の通り

   | パッケージ名                     | 説明                                                 |
   | -------------------------- | -------------------------------------------------- |
   | curl                       | コマンドラインでデータ転送を行うツール（主にHTTP/HTTPS/SFTPなど）           |
   | wget                       | インターネットからファイルをダウンロードするためのコマンドラインツール                |
   | git                        | 分散型バージョン管理システム（ソースコード管理などに利用される）                   |
   | build-essential            | gccやmakeなどC/C++の開発・ビルドに必要なツールのメタパッケージ              |
   | software-properties-common | add-apt-repositoryコマンドなど、リポジトリ管理用のスクリプトやツール        |
   | apt-transport-https        | aptでHTTPSプロトコルを使ったパッケージ取得を可能にする                    |
   | ca-certificates            | SSL/TLS通信の際の認証局（CA）の証明書パッケージ                       |
   | gnupg                      | GnuPG（PGP互換の暗号化ソフト。署名や暗号化/復号化、鍵管理に利用される）           |
   | lsb-release                | Linux Standard Base情報を表示するツール（lsb\_releaseコマンドを含む） |
   | unzip                      | zip形式の圧縮ファイルを解凍するためのコマンドラインツール                     |
   | jq                         | JSONデータを操作・整形・クエリできるコマンドラインツール                     |
   | socat                      | 多機能なバイナリ転送ツール（ポート転送やプロキシ、通信路の作成などができる）             |
   | openssl                    | SSL/TLS関連のツールおよび暗号化/証明書管理などの機能                     |
   | smartmontools              | S.M.A.R.T.（HDD/SSDの自己監視機能）情報の取得や自己診断ツール            |
4. **Google Chrome のインストール**

   ```bash
   # Chromeリポジトリの追加
   # 1. GPGキーをダウンロードして保存
   wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/googlechrome-linux-keyring.gpg

   # 2. リポジトリを追加（signed-byでキーを指定）
   echo "deb [arch=amd64 signed-by=/usr/share/keyrings/googlechrome-linux-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list

   # Chromeのインストール
   sudo apt update
   sudo apt install -y google-chrome-stable

   # バージョン確認（124以上であることを確認）
   google-chrome --version
   ```
5. **NVIDIA ドライバーとCUDAツールキット**

   ※重要（互換性・UEFI/セキュアブート・ヘッダー）

   * 本ドキュメントでは nvidia-driver-580 以上を推奨します。`ubuntu-drivers autoinstall` は環境により別バージョンを選択する場合があるため、特定バージョンが必要な場合は `sudo ubuntu-drivers install nvidia-driver-580` のように明示的に指定してください。
   * Secure Boot（UEFIのセキュアブート）が有効だと、NVIDIA のカーネルモジュールがロードされないことがあります。Secure Boot を無効化するか、MOK 署名（モジュール署名）を行う手順を用意してください。
   * ドライバビルドに必要なカーネルヘッダと DKMS を事前にインストールしてください（下記参照）。
   * CUDA Toolkit をインストールする際は、インストールされるドライバとの互換性を必ず確認してください（CUDA パッケージによってはドライバを上書きする場合があります）。

   ```bash
   # カーネルヘッダと DKMS を事前に入れておく（ドライバインストール前）
   sudo apt update
   sudo apt install -y linux-headers-$(uname -r) dkms build-essential
   ```

   ```bash
   # NVIDIAドライバーの自動インストール
   # 既存のNVIDIAドライバーを削除
   sudo apt-get purge nvidia* -y
   sudo apt-get autoremove -y
   sudo apt-get autoclean

   # 依存パッケージのインストール
   sudo apt update
   sudo apt install -y ubuntu-drivers-common

   # 利用可能なドライバーを確認
   ubuntu-drivers devices

   # 推奨ドライバーを自動インストール
   sudo ubuntu-drivers autoinstall

   # 再起動
   sudo reboot

   -------
   # 特定バージョン（580）のインストール
   # 既存のNVIDIAドライバーを削除
   sudo apt-get purge nvidia* -y
   sudo apt-get autoremove -y
   sudo apt-get autoclean

   # パッケージリストを更新
   sudo apt update

   # 利用可能なドライバーを確認
   sudo ubuntu-drivers list --gpgpu

   # 特定バージョンをインストール
   sudo ubuntu-drivers install nvidia-driver-580

   # 再起動
   sudo reboot
   ```

   ※注意：CUDAリポジトリや `cuda-toolkit-<version>` をインストールすると、CUDA パッケージに含まれる NVIDIA ドライバが上書きされる場合があります。

   * 推奨ワークフロー：まず推奨ドライバ（例: nvidia-driver-580）をインストールして動作確認（nvidia-smi）を行い、その後 CUDA Toolkit をインストールするか、NVIDIA の CUDA ドライバ付きパッケージを利用する場合は互換性を確認してください。

   ```bash
   # CUDAリポジトリキーリングのインストール
   wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
   sudo dpkg -i cuda-keyring_1.1-1_all.deb
   sudo apt update

   # CUDA Toolkit 12.4を明示的にインストールする場合
   sudo apt install -y cuda-toolkit-12-4

   # 環境変数の設定（重要）
   echo 'export PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc
   echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc

   # 環境変数を即座に反映
   source ~/.bashrc

   # 再起動
   sudo reboot

   # インストール確認
   nvidia-smi
   nvcc -V
   ```
6. **事前準備の確認**

   すべての依存関係とシステム要件が正しく満たされているか確認してください。

   ※ ターミナルにコピペで実行することで、MiniPremのインストール前にシステムが要件を満たしているかを包括的に確認できます。

   ```bash
   TS=$(date +%Y%m%d_%H%M) && \
   ( \
   echo "========================================" && \
   echo "=== パッケージインストール確認 ===" && \
   echo "========================================" && \
   echo "" && \

   # パッケージ確認関数
   check_package() {
       local pkg_name="$1"
       local cmd_name="${2:-$1}"
       if command -v "$cmd_name" &> /dev/null; then
           echo "✅ $pkg_name: インストール済み"
           return 0
       elif dpkg -l "$pkg_name" 2>/dev/null | grep -q "^ii"; then
           echo "✅ $pkg_name: インストール済み（コマンドなし）"
           return 0
       else
           echo "❌ $pkg_name: インストールされていません"
           return 1
       fi
   }

   echo "--- 必須パッケージ確認 ---" && \

   # Google Chrome
   if command -v google-chrome &> /dev/null; then
       echo "✅ google-chrome: インストール済み ($(google-chrome --version 2>/dev/null || echo 'バージョン取得失敗'))"
   else
       echo "❌ google-chrome: インストールされていません"
   fi && \

   # NVIDIA Driver
   if command -v nvidia-smi &> /dev/null; then
       driver_ver=$(nvidia-smi --query-gpu=driver_version --format=csv,noheader 2>/dev/null | head -1)
       echo "✅ nvidia-driver: インストール済み (Driver: ${driver_ver:-不明})"
   else
       echo "❌ nvidia-driver: インストールされていません（nvidia-smiが見つかりません）"
   fi && \

   # curl
   if command -v curl &> /dev/null; then
       echo "✅ curl: インストール済み ($(curl --version 2>/dev/null | head -1))"
   else
       echo "❌ curl: インストールされていません"
   fi && \

   # wget
   if command -v wget &> /dev/null; then
       echo "✅ wget: インストール済み ($(wget --version 2>/dev/null | head -1))"
   else
       echo "❌ wget: インストールされていません"
   fi && \

   # git
   if command -v git &> /dev/null; then
       echo "✅ git: インストール済み ($(git --version 2>/dev/null))"
   else
       echo "❌ git: インストールされていません"
   fi && \

   # build-essential (gcc, make等で確認)
   if command -v gcc &> /dev/null && command -v make &> /dev/null; then
       echo "✅ build-essential: インストール済み (gcc: $(gcc --version 2>/dev/null | head -1))"
   elif dpkg -l build-essential 2>/dev/null | grep -q "^ii"; then
       echo "✅ build-essential: インストール済み"
   else
       echo "❌ build-essential: インストールされていません"
   fi && \

   # software-properties-common (add-apt-repositoryで確認)
   if command -v add-apt-repository &> /dev/null; then
       echo "✅ software-properties-common: インストール済み"
   elif dpkg -l software-properties-common 2>/dev/null | grep -q "^ii"; then
       echo "✅ software-properties-common: インストール済み"
   else
       echo "❌ software-properties-common: インストールされていません"
   fi && \

   # apt-transport-https
   if dpkg -l apt-transport-https 2>/dev/null | grep -q "^ii"; then
       echo "✅ apt-transport-https: インストール済み"
   else
       # 新しいUbuntuでは不要になっている場合がある
       echo "⚠️  apt-transport-https: インストールされていません（Ubuntu 18.04以降では不要な場合があります）"
   fi && \

   # ca-certificates
   if dpkg -l ca-certificates 2>/dev/null | grep -q "^ii"; then
       echo "✅ ca-certificates: インストール済み"
   else
       echo "❌ ca-certificates: インストールされていません"
   fi && \

   # gnupg
   if command -v gpg &> /dev/null; then
       echo "✅ gnupg: インストール済み ($(gpg --version 2>/dev/null | head -1))"
   elif dpkg -l gnupg 2>/dev/null | grep -q "^ii"; then
       echo "✅ gnupg: インストール済み"
   else
       echo "❌ gnupg: インストールされていません"
   fi && \

   # lsb-release
   if command -v lsb_release &> /dev/null; then
       echo "✅ lsb-release: インストール済み"
   elif dpkg -l lsb-release 2>/dev/null | grep -q "^ii"; then
       echo "✅ lsb-release: インストール済み"
   else
       echo "❌ lsb-release: インストールされていません"
   fi && \

   # unzip
   if command -v unzip &> /dev/null; then
       echo "✅ unzip: インストール済み ($(unzip -v 2>/dev/null | head -1))"
   else
       echo "❌ unzip: インストールされていません"
   fi && \

   # jq
   if command -v jq &> /dev/null; then
       echo "✅ jq: インストール済み ($(jq --version 2>/dev/null))"
   else
       echo "❌ jq: インストールされていません"
   fi && \

   # socat
   if command -v socat &> /dev/null; then
       echo "✅ socat: インストール済み ($(socat -V 2>/dev/null | head -1))"
   else
       echo "❌ socat: インストールされていません"
   fi && \

   # openssl
   if command -v openssl &> /dev/null; then
       echo "✅ openssl: インストール済み ($(openssl version 2>/dev/null))"
   else
       echo "❌ openssl: インストールされていません"
   fi && \

   # smartmontools
   if command -v smartctl &> /dev/null; then
       echo "✅ smartmontools: インストール済み ($(smartctl --version 2>/dev/null | head -1))"
   else
       echo "❌ smartmontools: インストールされていません"
   fi && \

   echo "" && \
   echo "========================================" && \
   echo "=== 未インストールパッケージ一覧 ===" && \
   echo "========================================" && \

   missing_packages="" && \

   # 未インストールパッケージの収集
   command -v google-chrome &> /dev/null || missing_packages="${missing_packages} google-chrome-stable" && \
   command -v nvidia-smi &> /dev/null || missing_packages="${missing_packages} nvidia-driver" && \
   command -v curl &> /dev/null || missing_packages="${missing_packages} curl" && \
   command -v wget &> /dev/null || missing_packages="${missing_packages} wget" && \
   command -v git &> /dev/null || missing_packages="${missing_packages} git" && \
   (command -v gcc &> /dev/null && command -v make &> /dev/null) || dpkg -l build-essential 2>/dev/null | grep -q "^ii" || missing_packages="${missing_packages} build-essential" && \
   (command -v add-apt-repository &> /dev/null || dpkg -l software-properties-common 2>/dev/null | grep -q "^ii") || missing_packages="${missing_packages} software-properties-common" && \
   dpkg -l ca-certificates 2>/dev/null | grep -q "^ii" || missing_packages="${missing_packages} ca-certificates" && \
   (command -v gpg &> /dev/null || dpkg -l gnupg 2>/dev/null | grep -q "^ii") || missing_packages="${missing_packages} gnupg" && \
   (command -v lsb_release &> /dev/null || dpkg -l lsb-release 2>/dev/null | grep -q "^ii") || missing_packages="${missing_packages} lsb-release" && \
   command -v unzip &> /dev/null || missing_packages="${missing_packages} unzip" && \
   command -v jq &> /dev/null || missing_packages="${missing_packages} jq" && \
   command -v socat &> /dev/null || missing_packages="${missing_packages} socat" && \
   command -v openssl &> /dev/null || missing_packages="${missing_packages} openssl" && \
   command -v smartctl &> /dev/null || missing_packages="${missing_packages} smartmontools" && \

   if [ -z "$missing_packages" ]; then
       echo "✅ すべての必須パッケージがインストールされています"
   else
       echo "❌ 以下のパッケージがインストールされていません:"
       echo "$missing_packages" | tr ' ' '\n' | grep -v '^$' | sed 's/^/   - /'
       echo ""
       echo "【インストールコマンド例】"
       echo "sudo apt update && sudo apt install -y$missing_packages"
   fi && \

   echo "" && \
   echo "========================================" && \
   echo "=== 権限確認 ===" && \
   echo "========================================" && \
   if [ "$(id -u)" = "0" ]; then echo "rootユーザーで実行中"; else echo "一般ユーザー（$(whoami)）で実行中"; fi && \
   sudo -v && echo "sudo（管理者権限）確認OK" || echo "sudo権限がありません" && \
   echo "=== OS情報 ===" && \
   lsb_release -a 2>/dev/null || echo "lsb_releaseが利用できません" && \
   uname -r && \
   echo -e "\n=== CPU情報 ===" && \
   lscpu | grep -E "Model name|CPU\(s\)|Thread\(s\) per core|Core\(s\) per socket" && \
   nproc && \
   echo -e "\n=== メモリ情報 ===" && \
   free -h && \
   sudo dmidecode -t memory | grep -E "Size|Speed|Type" | grep -v "No Module" | head -20 && \
   echo -e "\n=== ストレージ情報 ===" && \
   df -h / && \
   lsblk -d -o NAME,SIZE,TYPE,TRAN | grep -E "nvme|ssd" && \
   sudo smartctl -a /dev/nvme0n1 2>/dev/null | grep -E "Model|Capacity|Available Spare" || echo "smartctl not available or no NVMe drive" && \
   echo -e "\n=== GPU情報 ===" && \
   if command -v nvidia-smi &> /dev/null; then
       nvidia-smi && \
       nvidia-smi -q | grep -E "Product Name|FB Memory Usage|Driver Version|CUDA Version"
   else
       echo "nvidia-smiが利用できません（NVIDIAドライバ未インストール）"
   fi && \
   echo -e "\n=== ソフトウェアバージョン ===" && \
   if command -v google-chrome &> /dev/null; then
       google-chrome --version
   else
       echo "Google Chromeがインストールされていません"
   fi && \
   if command -v nvcc &> /dev/null; then
       nvcc -V
   else
       echo "CUDA Toolkit（nvcc）がインストールされていません"
   fi && \
   echo -e "\n=== ネットワーク接続 ===" && \
   if command -v curl &> /dev/null; then
       echo "Docker Hub接続テスト:" && \
       curl -s -o /dev/null -w "HTTP Status: %{http_code}, Time: %{time_total}s\n" https://hub.docker.com && \
       echo "UneeQ API接続テスト:" && \
       curl -s -o /dev/null -w "HTTP Status: %{http_code}, Time: %{time_total}s\n" https://api.uneeq.io && \
       echo "DHKK API接続テスト:" && \
       curl -s -o /dev/null -w "HTTP Status: %{http_code}, Time: %{time_total}s\n" https://hosted-experience.jp && \
       echo "DHKK 接続テスト:" && \
       curl -s -o /dev/null -w "HTTP Status: %{http_code}, Time: %{time_total}s\n" http://digitalhumans-demo.jp && \
       echo "Azure TTS接続テスト（主要リージョン）:" && \
       tmpfile=$(mktemp) && \
       for region in japaneast japanwest eastus eastus2 westus westus2 centralus southcentralus southeastasia eastasia koreacentral koreasouth eastindia; do 
           url="https://${region}.tts.speech.microsoft.com"
           echo "リージョン：$region へのping接続テスト"
           sum=0
           for i in {1..5}; do
               t=$(curl -s -o /dev/null -w "%{time_total}" "$url")
               printf "  %d回目: %s秒\n" "$i" "$t"
               sum=$(echo "$sum + $t" | bc)
           done
           avg=$(echo "scale=6; $sum/5" | bc)
           printf "  → 平均RTT: %s秒\n" "$avg"
           echo "${region},${avg}" >> "$tmpfile"
       done && \
       echo -e "\n=== Azure TTS 全リージョンRTT結果（RTTが短い順）===" && \
       sort -t, -k2,2n "$tmpfile" | awk -F, '{printf("  %2d. %-20s : %s秒\n", NR, $1, $2)}' && \
       rm -f "$tmpfile" && \
       echo "外部IPアドレス:" && \
       curl -s https://api.ipify.org && echo
   else
       echo "curlがインストールされていないため、ネットワークテストをスキップします"
   fi && \
   echo "=== パケットロス（WebRTC想定）テスト 10秒間 ===" && \
   (ping -s 1200 -i 0.02 -c 500 digitalhumans-demo.jp | tee ping_result.txt ; \
   loss_line=$(grep -i "packet loss" ping_result.txt) ; \
   echo -e "\n==== パケットロス結果 ====" ; \
   echo "$loss_line" ; \
   loss_percent=$(echo "$loss_line" | grep -oE '[0-9]+(\.[0-9]+)?%' | tr -d '%') ; \
   if [ -n "$loss_percent" ]; then \
       echo -e "\n==== WebRTC品質判定 ====" ; \
       if (( $(echo "$loss_percent <= 1" | bc -l) )); then \
           echo "✅ 優秀: パケットロス ${loss_percent}%" ; \
           echo "  - WebRTC通信に最適です" ; \
           echo "  - 高品質な音声・映像通信が可能" ; \
           echo "  - デジタルヒューマンの動作: 非常に滑らか" ; \
       elif (( $(echo "$loss_percent <= 3" | bc -l) )); then \
           echo "✅ 良好: パケットロス ${loss_percent}%" ; \
           echo "  - WebRTC通信は問題なく動作します" ; \
           echo "  - 音声・映像品質は良好" ; \
           echo "  - デジタルヒューマンの動作: 滑らか" ; \
       elif (( $(echo "$loss_percent <= 5" | bc -l) )); then \
           echo "⚠️  注意: パケットロス ${loss_percent}%" ; \
           echo "  - 音声/映像品質に若干の影響が出る可能性" ; \
           echo "  - 時折、音声の途切れや映像のカクつきが発生" ; \
           echo "  - デジタルヒューマンの動作: やや不安定" ; \
           echo "  - 推奨: ネットワーク環境の確認" ; \
       elif (( $(echo "$loss_percent <= 10" | bc -l) )); then \
           echo "⚠️  警告: パケットロス ${loss_percent}%" ; \
           echo "  - 音声の途切れや映像の乱れが頻繁に発生" ; \
           echo "  - ユーザー体験が大幅に低下" ; \
           echo "  - デジタルヒューマンの動作: 不安定" ; \
           echo "  - 必須: ネットワーク環境の改善" ; \
       else \
           echo "❌ 不適: パケットロス ${loss_percent}%" ; \
           echo "  - WebRTC通信には適していません" ; \
           echo "  - 音声・映像が頻繁に途切れます" ; \
           echo "  - デジタルヒューマンの動作: 使用困難" ; \
           echo "  - 必須: ネットワーク環境の大幅な改善が必要" ; \
       fi ; \
       echo -e "\n【推奨対策】" ; \
       if (( $(echo "$loss_percent > 3" | bc -l) )); then \
           echo "  1. 有線接続への切り替えを検討" ; \
           echo "  2. Wi-Fiの場合は5GHz帯の使用を推奨" ; \
           echo "  3. ルーターやアクセスポイントの再起動" ; \
           echo "  4. ネットワーク帯域の確保（他のアプリケーションの停止）" ; \
           echo "  5. ISPへの問い合わせ" ; \
       fi ; \
   fi ; \
   echo) && \
   echo -e "\nこのコマンド結果（miniprem_precheck_${TS}.txt）をコピペしてデジタルヒューマン株式会社へお送りください。" && \
   echo -e "\n==== 実行日時: ${TS} ====" \
   ) | tee miniprem_precheck_${TS}.txt

   ```

   確認結果の期待値

   ```bash
   === 権限確認 ===
   一般ユーザー（ubuntu）で実行中
   sudo（管理者権限）確認OK

   === OS情報 ===
   Distributor ID: Ubuntu
   Description:    Ubuntu 24.04 LTS    # バージョン確認
   Release:        24.04
   Codename:       noble

   === CPU情報 ===
   Model name:     [Intel/AMD CPU モデル]
   CPU(s):         16              # 8以上であること
   Thread(s) per core: 2
   Core(s) per socket: 8

   === メモリ情報 ===
                 total        used        free
   Mem:           31Gi        5.2Gi       20Gi    # 32GB以上であること

   === ストレージ情報 ===
   Filesystem      Size  Used Avail Use% Mounted on
   /dev/nvme0n1p2  468G   50G  394G  12% /        # 256GB以上の空き容量

   === GPU情報 ===
   Mon Oct  6 01:11:51 2025       
   +-----------------------------------------------------------------------------------------+
   | NVIDIA-SMI 580.65.06              Driver Version: 580.65.06      CUDA Version: 13.0     |
   +-----------------------------------------+------------------------+----------------------+
   | 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  Tesla T4                       Off |   00000000:00:1E.0 Off |                    0 |
   | N/A   32C    P0             27W /   70W |     622MiB /  15360MiB |      4%      Default |
   |                                         |                        |                  N/A |
   +-----------------------------------------+------------------------+----------------------+

   +-----------------------------------------------------------------------------------------+
   | Processes:                                                                              |
   |  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
   |        ID   ID                                                               Usage      |
   |=========================================================================================|
   |    0   N/A  N/A            1428    C+G   ...naries/Linux/Renny-Linux-Test        616MiB |
   +-----------------------------------------------------------------------------------------+

   === ソフトウェアバージョン ===
   Driver Version                            : 580.65.06
   CUDA Version                              : 13.0
   Docker version 24.0.7           # インストール済みの場合
   Docker Compose version v2.21.0  # インストール済みの場合

   --- 以下続く　---
   ```

## リモートインストール準備

リモートインストールを行うためのアプリケーション（[TeamViewer](https://www.teamviewer.com/ja/)など）はお客様にてご準備いただき、アカウント等をご提供ください。

また、TeamViewer等を使用せず、安全にリモートインストールするために一時的にVPN経由でSSH接続する方法も対応可能です。その際は下記の手順でご準備ください。

### インストール時の手順

1. **パッケージの更新**

   ```bash
   sudo apt update
   sudo apt upgrade -y
   ```
2. **OpenSSHサーバーのインストール**

   ```bash
   sudo apt install -y openssh-server
   ```
3. **OpenSSHサービスの状態確認と起動**
   * OpenSSHサービスが動いているか確認します:

     ```bash
     sudo systemctl status ssh
     ```
   * 必要に応じてサービスを開始

     ```bash
     sudo systemctl enable ssh
     sudo systemctl start ssh
     ```
4. **ファイアウォールの設定**
   * UFW（Uncomplicated Firewall）が有効になっている場合、SSHの許可設定を行います:

     ```bash
     sudo ufw allow ssh
     ```
5. **VPNをインストールします**

   `ngrok`をインストールします。下記の1か2の手順を行ってください。

   1. Aptを使用する

      ```bash
      # 1. GPGキーを追加
      curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null

      # 2. リポジトリを追加
      echo "deb https://ngrok-agent.s3.amazonaws.com noble main" | sudo tee /etc/apt/sources.list.d/ngrok.list

      # 3. パッケージリストを更新してインストール
      sudo apt update && sudo apt install ngrok
      ```
   2. Snapを使用する

      ```bash
      snap install ngrok
      ```
6. **VPNの認証情報を設定します**

   ```bash
   ngrok config add-authtoken {ここのキーは別途お知らせします}
   ```
7. **VPNを起動します**

   ```bash
   ngrok tcp --region=jp --remote-addr=1.tcp.jp.ngrok.io:{ポート番号は別途お伝えします} 22
   ```

   下記の様に表示されたら成功です。デジタルヒューマン株式会社のエキスパートへ接続ができた事をお知らせください。

   1. Ubuntuの `rootユーザー名` `パスワード` をお知らせ下さい。
   2. `Ctrl + C`を押すとVPNが終了してしまいますので、作業中は操作しないでください。

      ![image (1).png](/files/s3nUxUNEhnR7Uancp1As)

### インストール終了後の手順

* リモート接続用のサービス（ngrok, openssh, TeamViewer 等）は作業終了後に無効化または削除してください。
* Secure Boot を無効化した場合は、運用ポリシーに従って再有効化の可否を検討してください（モジュール署名を行った場合を除く）。
* root アカウント／SSH パスワード等は必ず変更・無効化してください（必要なら一時的にのみ有効化）。

1. **ngrokのセッションを終了**
   * ターミナルで`ngrok`が動作しているウィンドウをアクティブにして、`Ctrl + C`を押してセッションを終了します。
2. **ngrokの自動起動を無効化**:
   * 特に設定していない限り、`ngrok`は自動起動しません。サービス設定などを行った場合は無効化が必要です。以下のコマンドで確認し、無効化します:

     ```bash
     sudo systemctl disable ngrok
     ngrok config add-authtoken ""
     ```
3. **OpenSSHサーバーの停止**
   * SSHサーバーを停止し、必要に応じて無効化します。

     ```bash
     sudo systemctl stop ssh
     sudo systemctl disable ssh
     ```
4. **ファイアウォールでSSHのポートを閉じる** (必要に応じて)
   * 既にSSHアクセスが必要でない場合、ファイアウォールの設定を更新してポートを閉じます。

     ```bash
     sudo ufw deny ssh
     ```

これで、リモートインストール後のセキュリティ対策が完了します。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digitalhumans.jp/dev/miniprem/miniprem-prerequisites.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
