#!/bin/bash set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' error_exit() { echo -e "${RED}Ошибка: $1${NC}" >&2 exit 1 } log_message() { echo -e "${GREEN}$1${NC}" } trap 'error_exit "Неожиданная ошибка в строке $LINENO"' ERR check_root() { if [[ $EUID -ne 0 ]]; then error_exit "Скрипт должен быть запущен с правами root" fi } install_git() { if ! command -v git &> /dev/null; then log_message "Git не найден. Установка..." if [ -f /etc/debian_version ]; then apt-get update -q >/dev/null 2>&1 || error_exit "Не удалось обновить список пакетов" apt-get install -y -q git >/dev/null 2>&1 || error_exit "Не удалось установить git" else error_exit "Неподдерживаемая ОС" fi fi } clone_repository() { PHOBOS_BASE_DIR="/opt/Phobos" REPO_DIR="$PHOBOS_BASE_DIR/repo" if [ -d "$REPO_DIR" ]; then log_message "Удаление существующего репозитория..." rm -rf "$REPO_DIR" fi mkdir -p "$REPO_DIR" log_message "Клонирование репозитория Phobos..." cd "$REPO_DIR" git init >/dev/null 2>&1 git remote add origin https://github.com/Ground-Zerro/Phobos.git >/dev/null 2>&1 git config core.sparseCheckout true >/dev/null 2>&1 echo "server" > .git/info/sparse-checkout echo "client" >> .git/info/sparse-checkout echo "wg-obfuscator" >> .git/info/sparse-checkout git pull origin main >/dev/null 2>&1 || error_exit "Не удалось загрузить репозиторий" rm -rf .git >/dev/null 2>&1 find server -name "*.sh" -exec chmod +x {} \; 2>/dev/null || true find client -name "*.sh" -exec chmod +x {} \; 2>/dev/null || true log_message "Репозиторий загружен" } prompt_username() { echo if [ -t 1 ]; then exec < /dev/tty fi while true; do read -p "Введите имя первого клиента: " username if [ -z "$username" ]; then echo "Имя не может быть пустым" continue fi if [[ ! "$username" =~ ^[a-zA-Z0-9_-]+$ ]]; then echo "Некорректное имя. Используйте только буквы, цифры, _ и -" continue fi break done export FIRST_CLIENT="$username" log_message "Имя клиента: $username" } prompt_obfuscation_level() { echo "" echo "==========================================" echo " Выберите уровень маскировки трафика" echo "==========================================" echo "" echo " 1) Легкая" echo " 2) Достаточная" echo " 3) Средняя" echo " 4) Выше среднего" echo " 5) Кошмар!" echo "" while true; do read -p "Ваш выбор [1-5]: " choice case "$choice" in 1|2|3|4|5) export OBF_LEVEL="$choice" break ;; *) echo "Некорректный ввод. Введите число от 1 до 5." ;; esac done } run_installer() { REPO_DIR="/opt/Phobos/repo" INSTALLER="$REPO_DIR/server/scripts/phobos-installer.sh" if [ ! -f "$INSTALLER" ]; then error_exit "Установщик не найден: $INSTALLER" fi chmod +x "$INSTALLER" log_message "Запуск установки Phobos..." "$INSTALLER" || error_exit "Ошибка установки" log_message "Установка завершена" } add_first_client() { CLIENT_SCRIPT="/opt/Phobos/repo/server/scripts/phobos-client.sh" if [ ! -f "$CLIENT_SCRIPT" ]; then error_exit "Скрипт управления клиентами не найден" fi local retries=0 while ! ip link show wg0 >/dev/null 2>&1; do retries=$((retries + 1)) [ "$retries" -ge 15 ] && error_exit "Интерфейс wg0 не поднялся" sleep 1 done log_message "Создание клиента $FIRST_CLIENT..." "$CLIENT_SCRIPT" add "$FIRST_CLIENT" || error_exit "Ошибка создания клиента" log_message "Клиент $FIRST_CLIENT создан" } check_root install_git clone_repository prompt_username prompt_obfuscation_level run_installer add_first_client echo "" log_message "==========================================" log_message " Развертывание Phobos завершено!" log_message "==========================================" log_message "Клиент '$FIRST_CLIENT' создан." log_message "Запустите 'phobos' для управления системой." echo ""