diff --git a/setup_vps.sh b/setup_vps.sh index 5961060..53ef817 100644 --- a/setup_vps.sh +++ b/setup_vps.sh @@ -1,55 +1,67 @@ #!/bin/bash -# Проверка, что скрипт не запущен от root -if [ "$(id -u)" -eq 0 ]; then - echo "Не рекомендуется запускать скрипт от root. Запустите от обычного пользователя с sudo." - exit 1 -fi +# Цвета для вывода +RED='\033[0;31m' +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 - echo "$1 уже установлен." + if command -v $1 &> /dev/null; then + echo -e "${GREEN}$1 уже установлен.${NC}" else - echo "Установка $1..." - sudo apt-get install -y "$1" + echo -e "${YELLOW}Установка $1...${NC}" + sudo apt-get install -y $1 if [ $? -eq 0 ]; then - echo "$1 успешно установлен." + echo -e "${GREEN}$1 успешно установлен.${NC}" else - echo "Ошибка при установке $1." + echo -e "${RED}Ошибка при установке $1.${NC}" exit 1 fi fi } -# Функция для определения дистрибутива -detect_distro() { - if [ -f /etc/os-release ]; then - . /etc/os-release - DISTRO=$ID - VERSION_CODENAME=$VERSION_CODENAME - else - echo "Не удалось определить дистрибутив." - exit 1 - fi -} - -# Функция для установки Docker +# Установка Docker с правильными репозиториями install_docker() { if ! command -v docker &> /dev/null; then - echo "Установка Docker для $DISTRO..." + 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/$DISTRO/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + 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/$DISTRO \ - $VERSION_CODENAME stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + 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 @@ -57,113 +69,149 @@ install_docker() { sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin if [ $? -eq 0 ]; then - echo "Docker успешно установлен." + echo -e "${GREEN}Docker успешно установлен.${NC}" else - echo "Ошибка при установке Docker из официального репозитория. Пробуем установить из стандартных репозиториев..." + 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 else - echo "Docker уже установлен." + echo -e "${GREEN}Docker уже установлен.${NC}" fi } -# Функция для установки tmux -install_tmux() { - echo "Выберите вариант установки tmux:" - echo "1) Установка из репозитория (простая)" - echo "2) Установка с поддержкой GPU и компиляцией" - read -p "Введите номер варианта (1/2): " tmux_choice +# Установка btop с поддержкой GPU +install_btop() { + if ! command -v btop &> /dev/null; then + echo -e "${YELLOW}Установка btop с поддержкой GPU...${NC}" - case $tmux_choice in - 1) - check_install tmux - ;; - 2) - echo "Установка tmux с поддержкой GPU и компиляцией..." - sudo apt-get install -y libevent-dev ncurses-dev build-essential bison pkg-config - git clone https://github.com/tmux/tmux.git - cd tmux - git checkout $(git tag | sort -V | tail -n 1) - ./configure --enable-gpu - make - sudo make install - cd .. - rm -rf tmux - ;; - *) - echo "Неверный выбор. Устанавливается tmux из репозитория." - check_install tmux - ;; - esac + # Установка зависимостей для компиляции + 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 } # Основной процесс установки -echo "Начало установки..." -detect_distro -echo "Определен дистрибутив: $DISTRO $VERSION_CODENAME" +main() { + # Предупреждение (не блокирующее) + if [ "$(id -u)" -eq 0 ]; then + echo -e "${YELLOW}Внимание: Скрипт запущен от root. Рекомендуется запускать от обычного пользователя с sudo.${NC}" + fi -# Обновление пакетов -echo "Обновление пакетов..." -sudo apt-get update && sudo apt-get upgrade -y + detect_distro -# Установка основных утилит -install_tmux -check_install mc -check_install git -check_install net-tools + # Обновление пакетов + echo -e "${YELLOW}Обновление пакетов...${NC}" + sudo apt-get update && sudo apt-get upgrade -y + if [ $? -ne 0 ]; then + echo -e "${RED}Ошибка при обновлении пакетов.${NC}" + exit 1 + fi -# Установка Docker -install_docker + # Установка базовых утилит + check_install tmux + check_install mc + check_install git + check_install net-tools -# Установка dry -if ! command -v dry &> /dev/null; then - echo "Установка dry..." - curl -sSL https://github.com/moncho/dry/releases/latest/download/dry-linux-amd64 -o dry - chmod +x dry - sudo mv dry /usr/local/bin/ -fi + # Установка Docker + install_docker -# Установка btop с поддержкой GPU -if ! command -v btop &> /dev/null; then - echo "Установка btop с поддержкой GPU..." - sudo apt-get install -y coreutils sed git build-essential - git clone https://github.com/aristocratos/btop.git - cd btop - make GPU_SUPPORT=true - sudo make install - sudo make setcap - cd .. - rm -rf btop -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 -# Добавление пользователя в группу docker -if ! groups "$USER" | grep -q '\bdocker\b'; then - echo "Добавление пользователя $USER в группу docker..." - sudo usermod -aG docker "$USER" - echo "Перезагрузите сессию или выполните 'newgrp docker' для применения изменений." -fi + # Установка btop + install_btop -# Клонирование репозитория -REPO_DIR="opendoor-vpn-to-tor" -if [ ! -d "$REPO_DIR" ]; then - echo "Клонирование репозитория..." - git clone https://git.softuniq.eu/OpenDoor/opendoor-vpn-to-tor.git "$REPO_DIR" -fi + # Добавление пользователя в группу 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 -# Копирование файлов tmux -if [ -d "./tmux" ]; then - echo "Копирование файлов tmux..." - sudo cp -r ./tmux/* /root/ -fi + # Клонирование репозитория + REPO_URL="https://git.softuniq.eu/OpenDoor/opendoor-vpn-to-tor.git" + REPO_DIR="opendoor-vpn-to-tor" -# Проверка установленных версий -echo "Установленные версии:" -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 не установлен" + 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 -echo "Установка и настройка завершены!" \ No newline at end of file + # Копирование файлов 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