115 lines
5.4 KiB
Bash
Executable File
115 lines
5.4 KiB
Bash
Executable File
#!/bin/bash
|
||
# Montana node — установка одной командой на macOS.
|
||
#
|
||
# Использование (одна строка в Terminal.app):
|
||
# curl -sSL https://raw.githubusercontent.com/efir369999/Montana/main/Код/scripts/install-mac.sh | bash
|
||
#
|
||
# Что делает:
|
||
# 1. Проверяет macOS + Xcode CLT (запрашивает установку если нет)
|
||
# 2. Ставит Rust toolchain через rustup (если нет)
|
||
# 3. Клонирует репозиторий в $HOME/.cache/montana-source
|
||
# 4. Собирает release бинарь
|
||
# 5. Копирует бинарь + .command-обёртки в ~/Applications/Montana/
|
||
# 6. Открывает Finder в папке узла
|
||
#
|
||
# НЕ требует sudo. Всё в $HOME пользователя.
|
||
|
||
set -euo pipefail
|
||
|
||
REPO_URL="${MONTANA_REPO_URL:-https://github.com/efir369999/Montana.git}"
|
||
REPO_BRANCH="${MONTANA_REPO_BRANCH:-main}"
|
||
SOURCE_CACHE="$HOME/.cache/montana-source"
|
||
# Локация установки: env var INSTALL_DIR либо default ~/Applications/Montana.
|
||
INSTALL_DIR="${INSTALL_DIR:-$HOME/Applications/Montana}"
|
||
DATA_DIR="$INSTALL_DIR/data"
|
||
|
||
log() { printf '\033[1;32m[install-mac]\033[0m %s\n' "$*"; }
|
||
warn() { printf '\033[1;33m[install-mac]\033[0m %s\n' "$*" >&2; }
|
||
die() { printf '\033[1;31m[install-mac] ОШИБКА:\033[0m %s\n' "$*" >&2; exit 1; }
|
||
|
||
# --- Шаг 1: проверка платформы ---
|
||
if [ "$(uname -s)" != "Darwin" ]; then
|
||
die "это installer для macOS. Для Linux VPS используйте install-vps.sh"
|
||
fi
|
||
log "обнаружен macOS $(sw_vers -productVersion 2>/dev/null || echo unknown), arch $(uname -m)"
|
||
|
||
# --- Шаг 2: Xcode Command Line Tools ---
|
||
if ! xcode-select -p >/dev/null 2>&1; then
|
||
warn "Xcode Command Line Tools не установлены."
|
||
warn "Сейчас откроется системный диалог установки CLT — нажмите «Установить»."
|
||
warn "После завершения установки запустите этот скрипт снова."
|
||
xcode-select --install || true
|
||
die "дождитесь окончания установки Xcode CLT и повторите команду"
|
||
fi
|
||
|
||
# --- Шаг 3: Rust toolchain ---
|
||
if ! command -v cargo >/dev/null 2>&1; then
|
||
log "устанавливаю Rust toolchain (rustup minimal)..."
|
||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \
|
||
sh -s -- -y --default-toolchain stable --profile minimal --no-modify-path
|
||
fi
|
||
export PATH="$HOME/.cargo/bin:$PATH"
|
||
if ! command -v cargo >/dev/null 2>&1; then
|
||
die "cargo не доступен после rustup install. Перезапустите Terminal."
|
||
fi
|
||
log "Rust: $(cargo --version)"
|
||
|
||
# --- Шаг 4: clone/update repo ---
|
||
mkdir -p "$(dirname "$SOURCE_CACHE")"
|
||
if [ -d "$SOURCE_CACHE/.git" ]; then
|
||
log "обновляю репозиторий $SOURCE_CACHE..."
|
||
cd "$SOURCE_CACHE"
|
||
git fetch origin "$REPO_BRANCH"
|
||
git reset --hard "origin/$REPO_BRANCH"
|
||
else
|
||
log "клонирую $REPO_URL (branch $REPO_BRANCH) → $SOURCE_CACHE..."
|
||
rm -rf "$SOURCE_CACHE"
|
||
git clone --branch "$REPO_BRANCH" --single-branch "$REPO_URL" "$SOURCE_CACHE"
|
||
fi
|
||
|
||
# --- Шаг 5: build бинарь ---
|
||
SOURCE_DIR="$SOURCE_CACHE/Код"
|
||
if [ ! -d "$SOURCE_DIR" ]; then
|
||
die "директория '$SOURCE_DIR' не найдена в репозитории"
|
||
fi
|
||
cd "$SOURCE_DIR"
|
||
log "собираю montana-node release (5-10 минут на первом запуске)..."
|
||
cargo build --release -p montana-node 2>&1 | tail -3
|
||
|
||
# --- Шаг 6: install в ~/Applications/Montana/ ---
|
||
mkdir -p "$INSTALL_DIR" "$DATA_DIR"
|
||
|
||
log "копирую бинарь и обёртки в $INSTALL_DIR..."
|
||
cp -f target/release/montana-node "$INSTALL_DIR/montana-node"
|
||
chmod 0755 "$INSTALL_DIR/montana-node"
|
||
|
||
cp -f "$SOURCE_DIR/dist/macOS/Montana"/*.command "$INSTALL_DIR/"
|
||
cp -f "$SOURCE_DIR/dist/macOS/Montana/README.txt" "$INSTALL_DIR/"
|
||
chmod 0755 "$INSTALL_DIR"/*.command
|
||
|
||
# Снять quarantine attribute если есть (на случай если файлы скачивались через Safari)
|
||
xattr -dr com.apple.quarantine "$INSTALL_DIR" 2>/dev/null || true
|
||
|
||
# --- Шаг 7: финальный отчёт + открытие Finder ---
|
||
log ""
|
||
log "================================================================"
|
||
log " УСТАНОВКА ЗАВЕРШЕНА"
|
||
log "================================================================"
|
||
log ""
|
||
log "Бинарь: $INSTALL_DIR/montana-node"
|
||
log "Данные: $DATA_DIR"
|
||
log "Обёртки: $INSTALL_DIR/*.command"
|
||
log ""
|
||
log "Дальнейшие шаги:"
|
||
log " 1. Дабл-клик «1. Создать identity» — генерирует 24 слова + ключи"
|
||
log " 2. Дабл-клик «6. Запустить узел» — БОЕВОЙ РЕЖИМ, реальный VDF"
|
||
log ""
|
||
log "Жизненный цикл узла на M-class Mac (~46 сек/окно при D=252M):"
|
||
log " Phase 1: Bootstrap → CandidateVdf (~10 часов wall-clock VDF)"
|
||
log " Phase 2: CandidateVdf → Registered (NodeRegistration через canonical)"
|
||
log " Phase 3: Registered → Active (selection event на W % 336 == 0)"
|
||
log " Phase 4: Active (13 Ɉ per окно через apply_proposal)"
|
||
log ""
|
||
log "Открываю Finder в папке узла..."
|
||
open "$INSTALL_DIR" 2>/dev/null || warn "не удалось открыть Finder автоматически — откройте $INSTALL_DIR вручную"
|