diff --git a/setup_vps.sh b/setup_vps.sh index 53ef817..4a28026 100644 --- a/setup_vps.sh +++ b/setup_vps.sh @@ -6,29 +6,6 @@ GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color -# Проверка дистрибутива -detect_distro() { - if [ -f /etc/os-release ]; then - . /etc/os-release - OS=$ID - OS_CODENAME=$VERSION_CODENAME - elif type lsb_release >/dev/null 2>&1; then - OS=$(lsb_release -si | tr '[:upper:]' '[:lower:]') - OS_CODENAME=$(lsb_release -sc) - else - OS=$(cat /etc/issue | head -1 | awk '{print $1}' | tr '[:upper:]' '[:lower:]') - OS_CODENAME=$(cat /etc/apt/sources.list | grep -E '^deb ' | head -1 | awk '{print $3}') - fi - - # Проверка на поддержку - if [[ "$OS" != "ubuntu" && "$OS" != "debian" ]]; then - echo -e "${RED}Ошибка: Этот скрипт поддерживает только Ubuntu и Debian.${NC}" - exit 1 - fi - - echo -e "${YELLOW}Обнаружена система: $OS $OS_CODENAME${NC}" -} - # Функция для проверки установки пакета check_install() { if command -v $1 &> /dev/null; then @@ -45,173 +22,168 @@ check_install() { fi } -# Установка Docker с правильными репозиториями -install_docker() { - if ! command -v docker &> /dev/null; then - echo -e "${YELLOW}Установка Docker для $OS...${NC}" - - # Установка зависимостей - sudo apt-get update - sudo apt-get install -y apt-transport-https ca-certificates curl gnupg - - # Добавление официального GPG ключа Docker - sudo install -m 0755 -d /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/$OS/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg - sudo chmod a+r /etc/apt/keyrings/docker.gpg - - # Добавление репозитория Docker - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$OS $OS_CODENAME stable" | \ - sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - - sudo apt-get update - - # Установка Docker - sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - - if [ $? -eq 0 ]; then - echo -e "${GREEN}Docker успешно установлен.${NC}" - else - echo -e "${YELLOW}Попытка установки Docker из стандартных репозиториев...${NC}" - sudo apt-get install -y docker.io docker-compose - if [ $? -eq 0 ]; then - echo -e "${GREEN}Docker установлен из стандартных репозиториев.${NC}" - else - echo -e "${RED}Ошибка при установке Docker.${NC}" - exit 1 - fi - fi +# Функция для определения дистрибутива +detect_distro() { + if [ -f /etc/os-release ]; then + . /etc/os-release + DISTRO=$ID + VERSION_CODENAME=$VERSION_CODENAME + elif [ -f /etc/lsb-release ]; then + . /etc/lsb-release + DISTRO=${DISTRIB_ID,,} + VERSION_CODENAME=$DISTRIB_CODENAME else - echo -e "${GREEN}Docker уже установлен.${NC}" - fi -} - -# Установка btop с поддержкой GPU -install_btop() { - if ! command -v btop &> /dev/null; then - echo -e "${YELLOW}Установка btop с поддержкой GPU...${NC}" - - # Установка зависимостей для компиляции - echo -e "${YELLOW}Установка зависимостей...${NC}" - sudo apt-get install -y coreutils sed git build-essential - - # Клонирование репозитория btop - echo -e "${YELLOW}Клонирование репозитория...${NC}" - git clone https://github.com/aristocratos/btop.git - cd btop - - # Компиляция с поддержкой GPU - echo -e "${YELLOW}Компиляция...${NC}" - make GPU_SUPPORT=true - - # Установка - echo -e "${YELLOW}Установка...${NC}" - sudo make install - - # Настройка прав - echo -e "${YELLOW}Настройка прав...${NC}" - sudo make setcap - - cd .. - rm -rf btop - - echo -e "${GREEN}btop успешно установлен с поддержкой GPU.${NC}" - else - echo -e "${GREEN}btop уже установлен.${NC}" - fi -} - -# Основной процесс установки -main() { - # Предупреждение (не блокирующее) - if [ "$(id -u)" -eq 0 ]; then - echo -e "${YELLOW}Внимание: Скрипт запущен от root. Рекомендуется запускать от обычного пользователя с sudo.${NC}" - fi - - detect_distro - - # Обновление пакетов - echo -e "${YELLOW}Обновление пакетов...${NC}" - sudo apt-get update && sudo apt-get upgrade -y - if [ $? -ne 0 ]; then - echo -e "${RED}Ошибка при обновлении пакетов.${NC}" + echo -e "${RED}Не удалось определить дистрибутив.${NC}" exit 1 fi - - # Установка базовых утилит - check_install tmux - check_install mc - check_install git - check_install net-tools - - # Установка Docker - install_docker - - # Установка dry - if ! command -v dry &> /dev/null; then - echo -e "${YELLOW}Установка dry...${NC}" - curl -sSL https://github.com/moncho/dry/releases/latest/download/dry-linux-amd64 -o dry - chmod +x dry - sudo mv dry /usr/local/bin/ - echo -e "${GREEN}dry успешно установлен.${NC}" - else - echo -e "${GREEN}dry уже установлен.${NC}" - fi - - # Установка btop - install_btop - - # Добавление пользователя в группу docker - CURRENT_USER=${SUDO_USER:-$USER} - if ! groups $CURRENT_USER | grep -q '\bdocker\b'; then - echo -e "${YELLOW}Добавление пользователя $CURRENT_USER в группу docker...${NC}" - sudo usermod -aG docker $CURRENT_USER - echo -e "${GREEN}Пользователь добавлен в группу docker.${NC}" - echo -e "${YELLOW}Для применения изменений可能需要 перезапустить сессию.${NC}" - else - echo -e "${GREEN}Пользователь $CURRENT_USER уже в группе docker.${NC}" - fi - - # Клонирование репозитория - REPO_URL="https://git.softuniq.eu/OpenDoor/opendoor-vpn-to-tor.git" - REPO_DIR="opendoor-vpn-to-tor" - - if [ -d "$REPO_DIR" ]; then - echo -e "${GREEN}Репозиторий уже клонирован в $REPO_DIR.${NC}" - else - echo -e "${YELLOW}Клонирование репозитория...${NC}" - git clone "$REPO_URL" "$REPO_DIR" - if [ $? -eq 0 ]; then - echo -e "${GREEN}Репозиторий успешно клонирован.${NC}" - else - echo -e "${RED}Ошибка при клонировании репозитория.${NC}" - exit 1 - fi - fi - - # Копирование файлов tmux - TMUX_SOURCE_DIR="./tmux/" - TMUX_TARGET_DIR="/root/" - - if [ -d "$TMUX_SOURCE_DIR" ]; then - echo -e "${YELLOW}Копирование файлов tmux...${NC}" - sudo cp -r "$TMUX_SOURCE_DIR"/* "$TMUX_TARGET_DIR" - echo -e "${GREEN}Файлы tmux успешно скопированы.${NC}" - else - echo -e "${YELLOW}Папка tmux не найдена. Копирование не выполнено.${NC}" - fi - - # Вывод версий - echo -e "\n${GREEN}Установленные версии:${NC}" - tmux -V 2>/dev/null || echo "tmux: не удалось получить версию" - mc -V 2>/dev/null || echo "mc: не удалось получить версию" - dry --version 2>/dev/null || echo "dry: не удалось получить версию" - docker --version 2>/dev/null || echo "docker: не удалось получить версию" - docker compose version 2>/dev/null || echo "docker compose: не установлен" - git --version 2>/dev/null || echo "git: не удалось получить версию" - btop --version 2>/dev/null || echo "btop: не удалось получить версию" - - echo -e "\n${GREEN}Установка завершена успешно!${NC}" } -# Запуск главной функции -main \ No newline at end of file +# Предупреждение о запуске от root (только информативное) +if [ "$(id -u)" -eq 0 ]; then + echo -e "${YELLOW}Внимание: Скрипт запущен от root. Рекомендуется запускать от обычного пользователя с sudo.${NC}" + sleep 2 +fi + +# Обновление пакетов +echo -e "${YELLOW}Обновление пакетов...${NC}" +sudo apt-get update && sudo apt-get upgrade -y +if [ $? -ne 0 ]; then + echo -e "${RED}Ошибка при обновлении пакетов.${NC}" + exit 1 +fi + +# Установка базовых утилит +check_install tmux +check_install mc +check_install git +check_install net-tools +check_install curl +check_install wget +check_install build-essential + +# Определение дистрибутива для установки Docker +detect_distro + +# Установка Docker +if ! command -v docker &> /dev/null; then + echo -e "${YELLOW}Установка Docker для $DISTRO...${NC}" + + # Установка зависимостей + sudo apt-get install -y apt-transport-https ca-certificates curl gnupg + + # Добавление официального GPG ключа Docker + sudo mkdir -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/$DISTRO/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + sudo chmod a+r /etc/apt/keyrings/docker.gpg + + # Добавление репозитория Docker + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$DISTRO \ + $VERSION_CODENAME stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + + sudo apt-get update + + # Установка Docker + sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + if [ $? -eq 0 ]; then + echo -e "${GREEN}Docker успешно установлен.${NC}" + else + echo -e "${RED}Ошибка при установке Docker. Попробуем установить docker.io из стандартных репозиториев...${NC}" + sudo apt-get install -y docker.io docker-compose-plugin + fi +else + echo -e "${GREEN}Docker уже установлен.${NC}" +fi + +# Установка dry +if ! command -v dry &> /dev/null; then + echo -e "${YELLOW}Установка dry...${NC}" + curl -sSL https://github.com/moncho/dry/releases/latest/download/dry-linux-amd64 -o dry + chmod +x dry + sudo mv dry /usr/local/bin/ + echo -e "${GREEN}dry успешно установлен.${NC}" +else + echo -e "${GREEN}dry уже установлен.${NC}" +fi + +# Установка btop +if ! command -v btop &> /dev/null; then + echo -e "${YELLOW}Установка btop...${NC}" + echo "Выберите вариант установки:" + echo "1) Быстрая установка из репозитория (без поддержки GPU)" + echo "2) Компиляция из исходников с поддержкой GPU" + read -p "Ваш выбор (1/2): " btop_choice + + case $btop_choice in + 1) + check_install btop + ;; + 2) + echo -e "${YELLOW}Установка зависимостей для компиляции btop...${NC}" + sudo apt-get install -y coreutils sed git build-essential + + echo -e "${YELLOW}Клонирование репозитория btop...${NC}" + git clone https://github.com/aristocratos/btop.git + cd btop + + echo -e "${YELLOW}Компиляция btop с поддержкой GPU...${NC}" + make GPU_SUPPORT=true + + echo -e "${YELLOW}Установка btop...${NC}" + sudo make install + + echo -e "${YELLOW}Настройка прав для мониторинга GPU...${NC}" + sudo make setcap + + cd .. + rm -rf btop + ;; + *) + echo -e "${YELLOW}Устанавливаю из репозитория.${NC}" + check_install btop + ;; + esac +else + echo -e "${GREEN}btop уже установлен.${NC}" +fi + +# Добавление пользователя в группу docker +if ! groups $USER | grep -q '\bdocker\b'; then + echo -e "${YELLOW}Добавление пользователя $USER в группу docker...${NC}" + sudo usermod -aG docker $USER + echo -e "${GREEN}Пользователь $USER добавлен в группу docker.${NC}" + echo -e "${YELLOW}Для применения изменений可能需要 перезапустить сессию.${NC}" +else + echo -e "${GREEN}Пользователь $USER уже в группе docker.${NC}" +fi + +# Клонирование репозитория +REPO_DIR="opendoor-vpn-to-tor" +if [ ! -d "$REPO_DIR" ]; then + echo -e "${YELLOW}Клонирование репозитория opendoor-vpn-to-tor...${NC}" + git clone https://git.softuniq.eu/OpenDoor/opendoor-vpn-to-tor.git "$REPO_DIR" + echo -e "${GREEN}Репозиторий успешно клонирован.${NC}" +else + echo -e "${GREEN}Репозиторий уже клонирован.${NC}" +fi + +# Копирование файлов tmux +if [ -d "tmux" ]; then + echo -e "${YELLOW}Копирование файлов tmux...${NC}" + sudo cp -r tmux/* /root/ + echo -e "${GREEN}Файлы tmux успешно скопированы.${NC}" +else + echo -e "${YELLOW}Папка tmux не найдена. Копирование не выполнено.${NC}" +fi + +# Вывод версий установленных программ +echo -e "\n${GREEN}=== Установленные версии ===${NC}" +tmux -V || echo "tmux: не удалось получить версию" +mc -V || echo "mc: не удалось получить версию" +dry --version || echo "dry: не удалось получить версию" +docker --version || echo "docker: не удалось получить версию" +docker compose version || echo "docker compose: не удалось получить версию" +git --version || echo "git: не удалось получить версию" +btop --version || echo "btop: не удалось получить версию" + +echo -e "\n${GREEN}Установка и настройка завершены!${NC}" \ No newline at end of file