KeiSeiKit-1.0/install/preflight/ollama-local.sh
Parfii-bot a3ffaed374 fix(install,router): close 5 HIGH audit findings
1. HIGH-1: onboarding ↔ kei-model-router связка
   До: onboarding мастер писал ~/.claude/config/onboarding.toml,
   но router его не читал — выбор провайдера декоративный.
   После: lib-onboarding.sh::onboarding_write_config доп. пишет
   ~/.claude/config/user-model-override.toml; registry.rs::Registry
   получил load_user_override() возвращающий UserModelOverride.
   Приоритет: --pinned > user-override > agent-profiles default_model_ref.
   2 новых теста (round-trip TOML, optional transport).

2. HIGH-2: eval "$install_cmd" → bash -c "$install_cmd"
   До: lib-preflight.sh::preflight_offer_install делал eval.
   После: bash -c с явным subshell + печать команды юзеру до запуска.

3. HIGH-3: codex.sh regex false-pass
   До: grep -qiE "logged.in|active" пропускал "not logged in" как pass.
   После: сначала negative-pattern (not logged|signed out|please log in),
   потом positive (\blogged in\b|status: active|auth: yes).

4. HIGH-4: path traversal в source preflight
   До: lib-preflight.sh::preflight_run делал source без валидации
   provider id — `../../../evil` сработал бы.
   После: whitelist regex ^[a-z0-9][a-z0-9_-]{0,63}$ + realpath
   проверка что resolved путь не вышел за PREFLIGHT_DIR.

5. HIGH-5: curl|sh без verification
   ollama-local.sh + google-vertex.sh теперь печатают предупреждение
   что Linux-установка тянет shell-скрипт с внешнего сервера без
   проверки хэша/подписи, и предлагают альтернативу.

MEDIUM попутно:
   - anthropic-bedrock.sh: один вызов aws sts get-caller-identity
     вместо двух (экономит 1-3с), различает cred-error от network
     по тексту stderr, маскирует account ID в ARN перед печатью.
   - mlx-local.sh: pip install --user mlx-lm вместо global pip install
     (не требует sudo, не загрязняет system Python).

Тесты: cargo test --lib 80/80, bash -n всех изменённых файлов чисто.
2026-05-17 16:28:33 +08:00

34 lines
1.6 KiB
Bash
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.

# shellcheck shell=bash
# preflight/ollama-local.sh — Ollama daemon на 127.0.0.1:11434.
preflight_check_ollama_local() {
if ! command -v ollama >/dev/null 2>&1; then
local cmd
case "$(uname -s)" in
Darwin) cmd="brew install ollama" ;;
Linux)
# WARNING: curl|sh без verification — supply-chain риск.
# Если есть apt/dnf — лучше через них, но ollama не в репах
# большинства дистров. Предупреждаем юзера явно.
echo " ⚠ Linux установка ollama тянет скрипт с https://ollama.com и" >&2
echo " выполняет его как shell — без проверки хэша/подписи." >&2
echo " Альтернатива: скачать вручную с https://ollama.com/download/linux" >&2
echo " и проверить SHA256 перед запуском." >&2
cmd="curl -fsSL https://ollama.com/install.sh | sh"
;;
*) cmd="см. https://ollama.com/download" ;;
esac
preflight_offer_install "ollama" "$cmd" || return 1
fi
# Проверяем что daemon запущен.
if ! curl -fsS --max-time 3 http://127.0.0.1:11434/api/tags >/dev/null 2>&1; then
echo "" >&2
echo " ⚠ ollama daemon не запущен." >&2
echo " Запустите: ollama serve (или brew services start ollama на macOS)" >&2
echo "" >&2
return 1
fi
echo " ✓ ollama: $(ollama --version 2>&1 | head -1)" >&2
echo " ✓ daemon: 127.0.0.1:11434 отвечает" >&2
return 0
}