update universal distribution check

This commit is contained in:
NW 2025-05-13 10:54:28 +00:00
parent 4cbe9e36c3
commit e15cab3d5e

View File

@ -1,244 +1,226 @@
#!/bin/bash
# VPS Auto-Setup Script v2.0
# Универсальный установщик для Ubuntu/Debian с автоматическим определением дистрибутива
# Цвета для вывода
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 "$1 уже установлен."
echo -e "${GREEN}$1 уже установлен.${NC}"
else
echo "Установка $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
}
# Функция для установки tmux с поддержкой GPU и компиляцией
install_tmux_with_gpu() {
echo "Установка tmux с поддержкой GPU и компиляцией..."
# Определение дистрибутива и его версии
detect_distro() {
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO=$ID
VERSION=$VERSION_ID
CODENAME=$VERSION_CODENAME
else
echo -e "${RED}Не удалось определить дистрибутив!${NC}"
exit 1
fi
# Установка зависимостей
sudo apt-get install -y libevent-dev ncurses-dev build-essential bison pkg-config
echo -e "\n${YELLOW}Обнаружен дистрибутив: ${DISTRO} ${VERSION} (${CODENAME})${NC}\n"
}
# Клонирование репозитория
git clone https://github.com/tmux/tmux.git
cd tmux
# Установка Docker с правильными репозиториями
install_docker() {
if ! command -v docker &> /dev/null; then
echo -e "Установка ${YELLOW}Docker${NC} для ${DISTRO}..."
# Выбор версии (последней стабильной)
git checkout $(git tag | sort -V | tail -n 1)
# Установка зависимостей
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
# Конфигурация и компиляция
./configure --enable-gpu
make
# Добавление 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
# Установка
sudo make install
# Добавление репозитория 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
# Возврат в исходную директорию
cd ..
rm -rf tmux
sudo 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
echo -e "${GREEN}Docker успешно установлен.${NC}"
else
echo -e "${YELLOW}Ошибка при установке Docker CE. Пробуем установить docker.io из стандартных репозиториев...${NC}"
sudo 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 "tmux с поддержкой GPU успешно установлен."
tmux -V
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 "Ошибка при установке tmux с поддержкой GPU."
echo -e "${RED}Ошибка при установке tmux!${NC}"
exit 1
fi
}
# Функция для простой установки tmux из репозитория
install_tmux_simple() {
check_install tmux
echo "Установлена версия tmux из репозитория:"
tmux -V
}
# Обновление пакетов
echo "Обновление пакетов..."
sudo apt-get update && sudo apt-get upgrade -y
if [ $? -ne 0 ]; then
echo "Ошибка при обновлении пакетов."
exit 1
fi
# Запрос выбора установки tmux
echo "Выберите вариант установки tmux:"
echo "1) Установка из репозитория (простая)"
echo "2) Установка с поддержкой GPU и компиляцией"
read -p "Введите номер варианта (1/2): " tmux_choice
case $tmux_choice in
1)
install_tmux_simple
;;
2)
install_tmux_with_gpu
;;
*)
echo "Неверный выбор. Устанавливается tmux из репозитория."
install_tmux_simple
;;
esac
# Установка mc (Midnight Commander)
check_install mc
# Установка git
check_install git
# Установка net-tools
check_install net-tools
# Установка Docker
if ! command -v docker &> /dev/null; then
echo "Установка Docker..."
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
if [ $? -eq 0 ]; then
echo "Docker успешно установлен."
else
echo "Ошибка при установке Docker."
exit 1
fi
else
echo "Docker уже установлен."
fi
# Установка Docker Compose Plugin (docker compose, без дефиса)
if ! docker compose version &> /dev/null; then
echo "Установка Docker Compose Plugin..."
sudo apt-get install -y docker-compose-plugin
if [ $? -eq 0 ]; then
echo "Docker Compose Plugin успешно установлен."
else
echo "Ошибка при установке Docker Compose Plugin."
exit 1
fi
else
echo "Docker Compose Plugin уже установлен."
fi
# Установка dry (интерфейс для управления Docker)
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/
if [ $? -eq 0 ]; then
echo "dry успешно установлен."
else
echo "Ошибка при установке dry."
exit 1
fi
else
echo "dry уже установлен."
fi
# Установка btop с поддержкой GPU
if ! command -v btop &> /dev/null; then
echo "Установка btop с поддержкой GPU..."
install_btop() {
if ! command -v btop &> /dev/null; then
echo -e "Установка ${YELLOW}btop с поддержкой GPU${NC}..."
# Установка зависимостей для компиляции
echo "Установка зависимостей для компиляции btop..."
sudo apt-get install -y coreutils sed git build-essential gcc-11 g++-11
sudo apt-get install -y coreutils sed git build-essential gcc g++
# Клонирование репозитория btop
echo "Клонирование репозитория btop..."
git clone https://github.com/aristocratos/btop.git
cd btop
git clone https://github.com/aristocratos/btop.git
cd btop
make GPU_SUPPORT=true
sudo make install
sudo make setcap
cd ..
rm -rf btop
# Компиляция с поддержкой GPU
echo "Компиляция btop с поддержкой GPU..."
make GPU_SUPPORT=true
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
# Определение дистрибутива
detect_distro
# Обновление пакетов
echo -e "\n${YELLOW}Обновление пакетов...${NC}"
sudo apt-get update && sudo apt-get upgrade -y
# Установка базовых утилит
echo -e "\n${YELLOW}Установка базовых утилит...${NC}"
check_install mc
check_install git
check_install net-tools
check_install curl
check_install wget
# Установка tmux
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
echo "Установка btop..."
sudo make install
install_btop
# Настройка прав для мониторинга GPU
echo "Настройка прав для мониторинга GPU..."
sudo make setcap
# Возврат в исходную директорию
cd ..
rm -rf btop
if [ $? -eq 0 ]; then
echo "btop успешно установлен с поддержкой GPU."
# Добавление пользователя в группу docker
if ! groups $USER | grep -q '\bdocker\b'; then
echo -e "\n${YELLOW}Добавление пользователя $USER в группу docker...${NC}"
sudo usermod -aG docker $USER
echo -e "${GREEN}Пользователь $USER добавлен в группу docker.${NC}"
echo -e "${YELLOW}Для применения изменений необходимо перезапустить сессию.${NC}"
else
echo "Ошибка при установке btop."
exit 1
echo -e "${GREEN}Пользователь $USER уже в группе docker.${NC}"
fi
else
echo "btop уже установлен."
fi
# Добавление текущего пользователя в группу docker
if ! groups $USER | grep -q '\bdocker\b'; then
echo "Добавление пользователя $USER в группу docker..."
sudo usermod -aG docker $USER
if [ $? -eq 0 ]; then
echo "Пользователь $USER добавлен в группу docker."
echo "Перезагрузите сессию или выполните 'newgrp docker' для применения изменений."
# Клонирование репозитория
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 "Ошибка при добавлении пользователя в группу docker."
exit 1
echo -e "${GREEN}Репозиторий уже клонирован в $REPO_DIR.${NC}"
fi
else
echo "Пользователь $USER уже в группе docker."
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 "Репозиторий уже клонирован в директорию $REPO_DIR."
else
echo "Клонирование репозитория $REPO_URL..."
git clone "$REPO_URL" "$REPO_DIR"
if [ $? -eq 0 ]; then
echo "Репозиторий успешно клонирован в директорию $REPO_DIR."
# Копирование файлов 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 "Ошибка при клонировании репозитория."
exit 1
echo -e "${YELLOW}Папка $TMUX_SOURCE_DIR не найдена. Копирование не выполнено.${NC}"
fi
fi
# Копирование файлов из папки tmux в /root/
TMUX_SOURCE_DIR="./tmux/"
TMUX_TARGET_DIR="/root/"
# Вывод версий
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
if [ -d "$TMUX_SOURCE_DIR" ]; then
echo "Копирование файлов из $TMUX_SOURCE_DIR в $TMUX_TARGET_DIR..."
sudo cp -r "$TMUX_SOURCE_DIR"/* "$TMUX_TARGET_DIR"
if [ $? -eq 0 ]; then
echo "Файлы успешно скопированы."
else
echo "Ошибка при копировании файлов."
exit 1
fi
else
echo "Папка $TMUX_SOURCE_DIR не найдена. Копирование не выполнено."
fi
echo -e "\n${GREEN}Установка и настройка успешно завершены!${NC}"
echo -e "${YELLOW}Для применения всех изменений рекомендуется перезапустить сессию.${NC}"
}
# Вывод версий установленных программ
echo "Установленные версии:"
tmux -V
mc -V
dry --version
docker --version
docker compose version
git --version
btop --version
ifconfig --version
echo "Установка и настройка завершены!"
# Запуск главной функции
main