134 lines
4.5 KiB
Bash
Executable File
134 lines
4.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
#
|
||
# ミドルウェア・ランタイム依存の準備スクリプト
|
||
#
|
||
# npm install 後や依存バージョン更新後に実行して、
|
||
# npm パッケージ以外のランタイム依存が揃っていることを確認する。
|
||
#
|
||
# ./scripts/prepare.sh
|
||
#
|
||
set -euo pipefail
|
||
|
||
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||
cd "$PROJECT_DIR"
|
||
|
||
OK=0
|
||
WARN=0
|
||
FAIL=0
|
||
|
||
pass() { echo " ✓ $1"; OK=$((OK + 1)); }
|
||
warn() { echo " △ $1"; WARN=$((WARN + 1)); }
|
||
fail() { echo " ✗ $1"; FAIL=$((FAIL + 1)); }
|
||
|
||
echo "=== ランタイム依存チェック ==="
|
||
echo ""
|
||
|
||
# -------------------------------------------------
|
||
# 1. Playwright ブラウザバイナリ
|
||
# -------------------------------------------------
|
||
echo "[1/4] Playwright ブラウザ..."
|
||
|
||
# playwright が要求する chromium のパスを取得
|
||
EXPECTED_PATH=$(node -e "
|
||
try {
|
||
const { chromium } = require('playwright');
|
||
console.log(chromium.executablePath());
|
||
} catch { process.exit(1); }
|
||
" 2>/dev/null) || EXPECTED_PATH=""
|
||
|
||
if [ -n "$EXPECTED_PATH" ] && [ -x "$EXPECTED_PATH" ]; then
|
||
pass "chromium: $EXPECTED_PATH"
|
||
else
|
||
echo " → ブラウザバイナリが見つかりません。インストール中..."
|
||
if npx playwright install chromium 2>&1 | tail -3; then
|
||
pass "chromium インストール完了"
|
||
else
|
||
fail "chromium のインストールに失敗しました。手動で 'npx playwright install chromium' を実行してください"
|
||
fi
|
||
fi
|
||
|
||
# システム共有ライブラリ(libnspr4, libnss3, libatk 等)の確認・インストール
|
||
# playwright install-deps は不足ライブラリを apt 等でインストールする(root 権限が必要)
|
||
if [ -n "$EXPECTED_PATH" ] && [ -x "$EXPECTED_PATH" ]; then
|
||
# ldd でリンク切れを簡易チェック
|
||
MISSING_LIBS=$(ldd "$EXPECTED_PATH" 2>/dev/null | grep "not found" || true)
|
||
if [ -n "$MISSING_LIBS" ]; then
|
||
echo " → 共有ライブラリが不足しています。インストール中..."
|
||
echo "$MISSING_LIBS" | head -5 | sed 's/^/ /'
|
||
if npx playwright install-deps chromium 2>&1 | tail -3; then
|
||
pass "システム依存ライブラリ インストール完了"
|
||
else
|
||
warn "システム依存ライブラリのインストールに失敗しました(root 権限が必要です)。手動で 'sudo npx playwright install-deps chromium' を実行してください"
|
||
fi
|
||
else
|
||
pass "システム依存ライブラリ: OK"
|
||
fi
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# -------------------------------------------------
|
||
# 2. noVNC 依存(オプション)
|
||
# -------------------------------------------------
|
||
echo "[2/4] noVNC 依存(オプション)..."
|
||
|
||
NOVNC_DEPS=(Xvfb x11vnc websockify)
|
||
NOVNC_MISSING=()
|
||
for cmd in "${NOVNC_DEPS[@]}"; do
|
||
if command -v "$cmd" >/dev/null 2>&1; then
|
||
pass "$cmd: $(command -v "$cmd")"
|
||
else
|
||
NOVNC_MISSING+=("$cmd")
|
||
fi
|
||
done
|
||
|
||
if [ ${#NOVNC_MISSING[@]} -gt 0 ]; then
|
||
warn "未インストール: ${NOVNC_MISSING[*]} — noVNC CAPTCHA 解決を使う場合は ./scripts/setup-novnc.sh を実行してください"
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# -------------------------------------------------
|
||
# 3. better-sqlite3 ネイティブモジュール
|
||
# -------------------------------------------------
|
||
echo "[3/4] ネイティブモジュール..."
|
||
|
||
if node -e "require('better-sqlite3')" 2>/dev/null; then
|
||
pass "better-sqlite3: ロード OK"
|
||
else
|
||
fail "better-sqlite3 のロードに失敗しました。'npm rebuild better-sqlite3' を試してください"
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# -------------------------------------------------
|
||
# 4. 日本語フォント(AnnotateImage のテキスト描画用)
|
||
# -------------------------------------------------
|
||
echo "[4/4] 日本語フォント(オプション)..."
|
||
|
||
if command -v fc-list >/dev/null 2>&1; then
|
||
if fc-list :lang=ja 2>/dev/null | grep -q .; then
|
||
pass "日本語フォント: 利用可能"
|
||
else
|
||
warn "日本語フォント未検出 — AnnotateImage のテキスト描画が □□□ になる可能性があります。'sudo apt install fonts-noto-cjk' を実行してください"
|
||
fi
|
||
else
|
||
warn "fc-list コマンドなし — フォント検出をスキップしました"
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# -------------------------------------------------
|
||
# サマリー
|
||
# -------------------------------------------------
|
||
echo "=== 結果: ✓ $OK △ $WARN ✗ $FAIL ==="
|
||
|
||
if [ "$FAIL" -gt 0 ]; then
|
||
echo ""
|
||
echo "エラーがあります。上記の指示に従って修正してください。"
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "準備完了です。"
|