montana/Монтана-Протокол/Код/scripts/install-mac.sh

115 lines
5.4 KiB
Bash
Executable File
Raw Permalink 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.

#!/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 вручную"