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).
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 "準備完了です。"
|