Ground-Zerro / Phobos Public
Code Issues Pull requests Actions Releases View on GitHub ↗
4.9 KB bash
#!/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 ""