maestro/scripts/prepare.sh
clade 7049a874f3 feat: initial public release (MAESTRO v0.1.0)
Open-source release of MAESTRO, an agent orchestration platform that runs
LLM-driven tasks through sandboxed tools, with a web UI. Apache-2.0.
See README.md and docs/ (getting-started, configuration, architecture).
2026-06-03 04:01:14 +00:00

134 lines
4.5 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/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 "準備完了です。"