#!/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|armhf) echo "arm" ;; *) echo "unsupported" ;; esac } # Функция для установки dry с учетом архитектуры ARM install_dry() { if command -v dry &> /dev/null; then echo -e "${GREEN}dry уже установлен.${NC}" return fi echo -e "${YELLOW}Установка dry для ARM...${NC}" # Для ARM устройств используем установку из репозиториев if sudo apt-get install -y dry; then echo -e "${GREEN}dry успешно установлен из репозиториев.${NC}" return fi # Если не удалось установить из репозиториев, пробуем собрать из исходников echo -e "${YELLOW}Установка зависимостей для сборки dry...${NC}" sudo apt-get install -y git golang make echo -e "${YELLOW}Клонирование репозитория dry...${NC}" git clone https://github.com/moncho/dry.git /tmp/dry-build cd /tmp/dry-build echo -e "${YELLOW}Сборка dry...${NC}" if make build; then sudo mv dry /usr/local/bin/ echo -e "${GREEN}dry успешно собран и установлен.${NC}" else echo -e "${RED}Не удалось собрать dry из исходников.${NC}" fi # Удаляем временные файлы cd ~ rm -rf /tmp/dry-build } # Функция для определения дистрибутива 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 } # Обновление пакетов echo -e "${YELLOW}Обновление пакетов...${NC}" sudo apt-get update && sudo apt-get upgrade -y || { echo -e "${RED}Ошибка при обновлении пакетов.${NC}" exit 1 } # Установка базовых утилит 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 if ! sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; then echo -e "${RED}Ошибка при установке Docker. Пробуем установить docker.io...${NC}" sudo apt-get install -y docker.io docker-compose-plugin || { echo -e "${RED}Не удалось установить Docker.${NC}" exit 1 } fi echo -e "${GREEN}Docker успешно установлен.${NC}" else echo -e "${GREEN}Docker уже установлен.${NC}" fi # Установка dry install_dry # Установка 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 "${RED}Не удалось добавить пользователя в группу docker.${NC}" 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 "${RED}Ошибка при клонировании репозитория.${NC}" exit 1 } echo -e "${GREEN}Репозиторий успешно клонирован.${NC}" else echo -e "${GREEN}Репозиторий уже клонирован.${NC}" fi # Копирование файлов tmux с проверкой TMUX_SRC_DIR="$REPO_DIR/tmux" if [ -d "$TMUX_SRC_DIR" ]; then echo -e "${YELLOW}Копирование файлов tmux из $TMUX_SRC_DIR в /root/...${NC}" if sudo cp -r "$TMUX_SRC_DIR/"* /root/ 2>/dev/null; then echo -e "${GREEN}Файлы tmux успешно скопированы.${NC}" else echo -e "${YELLOW}Попытка копирования отдельных файлов...${NC}" # Пробуем копировать файлы по одному for file in "$TMUX_SRC_DIR"/*; do if [ -f "$file" ]; then sudo cp "$file" /root/ && echo -e "${GREEN}Скопирован $file${NC}" || echo -e "${RED}Ошибка при копировании $file${NC}" fi done fi else echo -e "${YELLOW}Папка tmux не найдена в репозитории.${NC}" echo -e "${YELLOW}Ищем tmux файлы в других местах...${NC}" # Поиск tmux файлов в других местах репозитория find "$REPO_DIR" -name "*.tmux" -exec sudo cp {} /root/ \; 2>/dev/null && \ echo -e "${GREEN}Найдены и скопированы tmux файлы${NC}" || \ echo -e "${RED}Tmux файлы не найдены${NC}" fi # Вывод версий установленных программ echo -e "\n${GREEN}=== Установленные версии ===${NC}" tmux -V || echo "tmux: не удалось получить версию" mc -V || echo "mc: не удалось получить версию" command -v dry >/dev/null && (echo -n "dry: "; dry --version || echo "версия неизвестна") || 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}"