Files
maestro/scripts/prepare.sh
T
oss-sync 57702b4f34
CI / build-and-test (push) Canceled after 0s
sync: update from private repo (2336949a)
2026-09-17 11:29:31 +00:00

156 lines
5.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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/5] 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/5] 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/5] ネイティブモジュール..."
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/5] 日本語フォント(オプション)..."
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 ""
# -------------------------------------------------
# 5. LibreOffice(Officeプレビュー・Excel数式検証用、オプション)
# -------------------------------------------------
echo "[5/5] LibreOffice(オプション)..."
# .pptx/.ppt の画像化にはsoffice、Excel詳細編集の数式再計算にはCalc + Python UNOを使う。
# 未導入でもExcelプレビューとセル単位の軽量編集は利用できる。Dockerイメージは
# libreoffice-impress / libreoffice-calc / python3-unoを同梱する。
if command -v soffice >/dev/null 2>&1; then
pass "soffice: $(command -v soffice)"
else
warn "soffice 未検出 — PowerPointプレビューとExcel数式検証に必要です。'sudo apt install --no-install-recommends libreoffice-impress libreoffice-calc python3-uno' を実行してください(Excelプレビューには不要)"
fi
if command -v python3 >/dev/null 2>&1 && python3 -c 'import uno' >/dev/null 2>&1; then
pass "Python UNO: 利用可能"
else
warn "Python UNO 未検出 — Excel詳細編集の数式検証に必要です。'sudo apt install --no-install-recommends libreoffice-calc python3-uno' を実行してください"
fi
echo ""
# -------------------------------------------------
# サマリー
# -------------------------------------------------
echo "=== 結果: ✓ $OK △ $WARN ✗ $FAIL ==="
if [ "$FAIL" -gt 0 ]; then
echo ""
echo "エラーがあります。上記の指示に従って修正してください。"
exit 1
fi
echo ""
echo "準備完了です。"