From 6e3634654f9874e29df46408642598bbfacfc6dc Mon Sep 17 00:00:00 2001 From: NW Date: Tue, 13 May 2025 10:58:05 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20setup=5Fvps.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- setup_vps.sh | 186 +++++++++++++-------------------------------------- 1 file changed, 47 insertions(+), 139 deletions(-) diff --git a/setup_vps.sh b/setup_vps.sh index e8c5403..f5abec3 100644 --- a/setup_vps.sh +++ b/setup_vps.sh @@ -1,7 +1,7 @@ #!/bin/bash -# VPS Auto-Setup Script v2.0 -# Универсальный установщик для Ubuntu/Debian с автоматическим определением дистрибутива +# VPS Auto-Setup Script v2.1 +# Универсальный установщик для Ubuntu/Debian # Цвета для вывода RED='\033[0;31m' @@ -9,13 +9,27 @@ GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color +# Функция для безопасного запуска от root +check_root() { + if [ "$(id -u)" -eq 0 ]; then + echo -e "${YELLOW}Предупреждение: Скрипт запущен от root.${NC}" + echo -e "${YELLOW}Рекомендуется запускать от обычного пользователя с sudo.${NC}" + read -p "Продолжить установку? [y/N] " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo -e "${RED}Установка отменена.${NC}" + exit 1 + fi + fi +} + # Функция для проверки установки пакета check_install() { if command -v $1 &> /dev/null; then echo -e "${GREEN}$1 уже установлен.${NC}" else echo -e "Установка ${YELLOW}$1${NC}..." - sudo apt-get install -y $1 + apt-get install -y $1 if [ $? -eq 0 ]; then echo -e "${GREEN}$1 успешно установлен.${NC}" else @@ -25,132 +39,63 @@ check_install() { fi } -# Определение дистрибутива и его версии +# Определение дистрибутива detect_distro() { if [ -f /etc/os-release ]; then . /etc/os-release DISTRO=$ID - VERSION=$VERSION_ID CODENAME=$VERSION_CODENAME + [ -z "$CODENAME" ] && CODENAME=$(echo "$VERSION" | cut -d '(' -f2 | cut -d ')' -f1) else echo -e "${RED}Не удалось определить дистрибутив!${NC}" exit 1 fi - echo -e "\n${YELLOW}Обнаружен дистрибутив: ${DISTRO} ${VERSION} (${CODENAME})${NC}\n" + echo -e "\n${YELLOW}Обнаружен дистрибутив: ${DISTRO} (${CODENAME})${NC}\n" } -# Установка Docker с правильными репозиториями +# Установка Docker install_docker() { if ! command -v docker &> /dev/null; then echo -e "Установка ${YELLOW}Docker${NC} для ${DISTRO}..." # Установка зависимостей - sudo apt-get install -y apt-transport-https ca-certificates curl gnupg + 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 - sudo chmod a+r /etc/apt/keyrings/docker.gpg + install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/${DISTRO}/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg + 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} ${CODENAME} stable" | \ - sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + tee /etc/apt/sources.list.d/docker.list > /dev/null - sudo apt-get update + apt-get update # Попытка установки Docker CE - if sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; then + if apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; then echo -e "${GREEN}Docker успешно установлен.${NC}" else - echo -e "${YELLOW}Ошибка при установке Docker CE. Пробуем установить docker.io из стандартных репозиториев...${NC}" - sudo apt-get install -y docker.io docker-compose + echo -e "${YELLOW}Ошибка при установке Docker CE. Пробуем установить docker.io...${NC}" + apt-get install -y docker.io docker-compose fi else echo -e "${GREEN}Docker уже установлен.${NC}" fi } -# Установка tmux с выбором варианта -install_tmux() { - if command -v tmux &> /dev/null; then - echo -e "${GREEN}tmux уже установлен. Версия: $(tmux -V)${NC}" - return - fi - - echo -e "\n${YELLOW}Выберите вариант установки tmux:${NC}" - echo "1) Стандартная установка из репозитория" - echo "2) Установка из исходников с поддержкой GPU (требует больше времени)" - read -p "Ваш выбор [1-2] (по умолчанию 1): " choice - - case $choice in - 2) - echo -e "Установка ${YELLOW}tmux из исходников${NC}..." - sudo apt-get install -y libevent-dev ncurses-dev build-essential bison pkg-config - git clone https://github.com/tmux/tmux.git - cd tmux - latest_tag=$(git describe --abbrev=0 --tags) - git checkout $latest_tag - ./configure --enable-gpu - make - sudo make install - cd .. - rm -rf tmux - ;; - *) - echo -e "Установка ${YELLOW}tmux из репозитория${NC}..." - sudo apt-get install -y tmux - ;; - esac - - if command -v tmux &> /dev/null; then - echo -e "${GREEN}tmux успешно установлен. Версия: $(tmux -V)${NC}" - else - echo -e "${RED}Ошибка при установке tmux!${NC}" - exit 1 - fi -} - -# Установка btop с поддержкой GPU -install_btop() { - if ! command -v btop &> /dev/null; then - echo -e "Установка ${YELLOW}btop с поддержкой GPU${NC}..." - - sudo apt-get install -y coreutils sed git build-essential gcc g++ - - git clone https://github.com/aristocratos/btop.git - cd btop - make GPU_SUPPORT=true - sudo make install - sudo make setcap - cd .. - rm -rf btop - - if [ $? -eq 0 ]; then - echo -e "${GREEN}btop успешно установлен с поддержкой GPU.${NC}" - else - echo -e "${RED}Ошибка при установке btop.${NC}" - exit 1 - fi - else - echo -e "${GREEN}btop уже установлен.${NC}" - fi -} - # Основной процесс установки main() { # Проверка на root - if [ "$(id -u)" -eq 0 ]; then - echo -e "${RED}Не рекомендуется запускать скрипт от root. Запустите от обычного пользователя с sudo.${NC}" - exit 1 - fi + check_root # Определение дистрибутива detect_distro # Обновление пакетов echo -e "\n${YELLOW}Обновление пакетов...${NC}" - sudo apt-get update && sudo apt-get upgrade -y + apt-get update && apt-get upgrade -y # Установка базовых утилит echo -e "\n${YELLOW}Установка базовых утилит...${NC}" @@ -159,68 +104,31 @@ main() { check_install net-tools check_install curl check_install wget - - # Установка tmux - install_tmux + check_install tmux # Установка Docker install_docker - # Установка dry - if ! command -v dry &> /dev/null; then - echo -e "\n${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 - if ! groups $USER | grep -q '\bdocker\b'; then + if [ "$(id -u)" -ne 0 ] && ! groups $USER | grep -q '\bdocker\b'; then echo -e "\n${YELLOW}Добавление пользователя $USER в группу docker...${NC}" - sudo usermod -aG docker $USER + 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 "\n${YELLOW}Клонирование репозитория...${NC}" - git clone https://git.softuniq.eu/OpenDoor/opendoor-vpn-to-tor.git "$REPO_DIR" - else - echo -e "${GREEN}Репозиторий уже клонирован в $REPO_DIR.${NC}" - fi - - # Копирование файлов tmux - TMUX_SOURCE_DIR="./tmux/" - if [ -d "$TMUX_SOURCE_DIR" ]; then - echo -e "\n${YELLOW}Копирование файлов tmux...${NC}" - sudo cp -r "$TMUX_SOURCE_DIR" /root/ - else - echo -e "${YELLOW}Папка $TMUX_SOURCE_DIR не найдена. Копирование не выполнено.${NC}" - fi - - # Вывод версий - echo -e "\n${YELLOW}Установленные версии:${NC}" - echo -n "tmux: "; tmux -V - echo -n "mc: "; mc -V - echo -n "dry: "; dry --version - echo -n "Docker: "; docker --version - echo -n "Docker Compose: "; docker compose version - echo -n "Git: "; git --version - echo -n "btop: "; btop --version - - echo -e "\n${GREEN}Установка и настройка успешно завершены!${NC}" + echo -e "\n${GREEN}Установка успешно завершена!${NC}" echo -e "${YELLOW}Для применения всех изменений рекомендуется перезапустить сессию.${NC}" } -# Запуск главной функции -main \ No newline at end of file +# Запуск (с проверкой на прямой запуск) +if [ "$0" = "$BASH_SOURCE" ]; then + # Если скрипт запущен напрямую, а не через source + if [[ $EUID -eq 0 ]]; then + # Если root, запускаем напрямую + main + else + # Если не root, запускаем через sudo + sudo bash -c "$(declare -f main check_root check_install detect_distro install_docker); main" + fi +fi \ No newline at end of file