#!/bin/bash # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Функция для проверки установки пакета 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 if [ $? -eq 0 ]; then echo -e "${GREEN}$1 успешно установлен.${NC}" else echo -e "${RED}Ошибка при установке $1.${NC}" exit 1 fi fi } # Функция для определения архитектуры процессора get_arch() { ARCH=$(uname -m) case $ARCH in x86_64) echo "amd64" ;; aarch64) echo "arm64" ;; armv7l) echo "armv7" ;; armv6l) echo "armv6" ;; *) echo "$ARCH" ;; esac } # Функция для определения дистрибутива 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 "${RED}Не удалось определить дистрибутив.${NC}" exit 1 fi } # Предупреждение о запуске от root (только информативное) if [ "$(id -u)" -eq 0 ]; then echo -e "${YELLOW}Внимание: Скрипт запущен от root.${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}" ARCH=$(get_arch) DRY_URL="https://github.com/moncho/dry/releases/latest/download/dry-linux-${ARCH}" echo -e "${YELLOW}Скачивание dry для архитектуры ${ARCH}...${NC}" curl -sSL $DRY_URL -o dry if [ $? -ne 0 ]; then echo -e "${RED}Ошибка при скачивании dry.${NC}" echo -e "${YELLOW}Попробуем установить из альтернативного источника...${NC}" sudo apt-get install -y dry else chmod +x dry sudo mv dry /usr/local/bin/ echo -e "${GREEN}dry успешно установлен.${NC}" fi 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}" # Копирование файлов tmux из репозитория в /root/ if [ -d "$REPO_DIR/tmux" ]; then echo -e "${YELLOW}Копирование файлов tmux в /root/...${NC}" sudo cp -r "$REPO_DIR/tmux/"* /root/ echo -e "${GREEN}Файлы tmux успешно скопированы.${NC}" else echo -e "${YELLOW}Папка tmux не найдена в репозитории.${NC}" fi else echo -e "${GREEN}Репозиторий уже клонирован.${NC}" # Проверяем и копируем файлы tmux если репозиторий уже существует if [ -d "$REPO_DIR/tmux" ]; then echo -e "${YELLOW}Копирование файлов tmux в /root/...${NC}" sudo cp -r "$REPO_DIR/tmux/"* /root/ echo -e "${GREEN}Файлы tmux успешно скопированы.${NC}" fi 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}"