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