Обновить setup_vps.sh

This commit is contained in:
NW
2025-05-13 11:16:21 +00:00
parent 0cef82e756
commit 2899a4f2e8

View File

@@ -1,96 +1,89 @@
#!/bin/bash #!/bin/bash
# VPS Auto-Setup Script v2.0 # Проверка, что скрипт не запущен от root
# Универсальный установщик для Ubuntu/Debian с автоматическим определением дистрибутива if [ "$(id -u)" -eq 0 ]; then
echo "Не рекомендуется запускать скрипт от root. Запустите от обычного пользователя с sudo."
# Цвета для вывода exit 1
RED='\033[0;31m' fi
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Функция для проверки установки пакета # Функция для проверки установки пакета
check_install() { check_install() {
if command -v $1 &> /dev/null; then if command -v "$1" &> /dev/null; then
echo -e "${GREEN}$1 уже установлен.${NC}" echo "$1 уже установлен."
else else
echo -e "Установка ${YELLOW}$1${NC}..." echo "Установка $1..."
sudo apt-get install -y $1 sudo apt-get install -y "$1"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo -e "${GREEN}$1 успешно установлен.${NC}" echo "$1 успешно установлен."
else else
echo -e "${RED}Ошибка при установке $1.${NC}" echo "Ошибка при установке $1."
exit 1 exit 1
fi fi
fi fi
} }
# Определение дистрибутива и его версии # Функция для определения дистрибутива
detect_distro() { detect_distro() {
if [ -f /etc/os-release ]; then if [ -f /etc/os-release ]; then
. /etc/os-release . /etc/os-release
DISTRO=$ID DISTRO=$ID
VERSION=$VERSION_ID VERSION_CODENAME=$VERSION_CODENAME
CODENAME=$VERSION_CODENAME
else else
echo -e "${RED}Не удалось определить дистрибутив!${NC}" echo "Не удалось определить дистрибутив."
exit 1 exit 1
fi fi
echo -e "\n${YELLOW}Обнаружен дистрибутив: ${DISTRO} ${VERSION} (${CODENAME})${NC}\n"
} }
# Установка Docker с правильными репозиториями # Функция для установки Docker
install_docker() { install_docker() {
if ! command -v docker &> /dev/null; then if ! command -v docker &> /dev/null; then
echo -e "Установка ${YELLOW}Docker${NC} для ${DISTRO}..." echo "Установка Docker для $DISTRO..."
# Установка зависимостей # Установка зависимостей
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
# Добавление GPG ключа Docker # Добавление официального GPG ключа Docker
sudo install -m 0755 -d /etc/apt/keyrings 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/$DISTRO/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Добавление репозитория Docker # Добавление репозитория Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/${DISTRO} ${CODENAME} stable" | \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$DISTRO \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $VERSION_CODENAME stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update sudo apt-get update
# Попытка установки Docker CE # Установка Docker
if sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; then sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
echo -e "${GREEN}Docker успешно установлен.${NC}"
if [ $? -eq 0 ]; then
echo "Docker успешно установлен."
else else
echo -e "${YELLOW}Ошибка при установке Docker CE. Пробуем установить docker.io из стандартных репозиториев...${NC}" echo "Ошибка при установке Docker из официального репозитория. Пробуем установить из стандартных репозиториев..."
sudo apt-get install -y docker.io docker-compose sudo apt-get install -y docker.io docker-compose
fi fi
else else
echo -e "${GREEN}Docker уже установлен.${NC}" echo "Docker уже установлен."
fi fi
} }
# Установка tmux с выбором варианта # Функция для установки tmux
install_tmux() { install_tmux() {
if command -v tmux &> /dev/null; then echo "Выберите вариант установки tmux:"
echo -e "${GREEN}tmux уже установлен. Версия: $(tmux -V)${NC}" echo "1) Установка из репозитория (простая)"
return echo "2) Установка с поддержкой GPU и компиляцией"
fi read -p "Введите номер варианта (1/2): " tmux_choice
echo -e "\n${YELLOW}Выберите вариант установки tmux:${NC}" case $tmux_choice in
echo "1) Стандартная установка из репозитория" 1)
echo "2) Установка из исходников с поддержкой GPU (требует больше времени)" check_install tmux
read -p "Ваш выбор [1-2] (по умолчанию 1): " choice ;;
case $choice in
2) 2)
echo -e "Установка ${YELLOW}tmux из исходников${NC}..." echo "Установка tmux с поддержкой GPU и компиляцией..."
sudo apt-get install -y libevent-dev ncurses-dev build-essential bison pkg-config sudo apt-get install -y libevent-dev ncurses-dev build-essential bison pkg-config
git clone https://github.com/tmux/tmux.git git clone https://github.com/tmux/tmux.git
cd tmux cd tmux
latest_tag=$(git describe --abbrev=0 --tags) git checkout $(git tag | sort -V | tail -n 1)
git checkout $latest_tag
./configure --enable-gpu ./configure --enable-gpu
make make
sudo make install sudo make install
@@ -98,129 +91,79 @@ install_tmux() {
rm -rf tmux rm -rf tmux
;; ;;
*) *)
echo -e "Установка ${YELLOW}tmux из репозитория${NC}..." echo "Неверный выбор. Устанавливается tmux из репозитория."
sudo apt-get install -y tmux check_install tmux
;; ;;
esac 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() { echo "Начало установки..."
# Проверка на root detect_distro
if [ "$(id -u)" -eq 0 ]; then echo "Определен дистрибутив: $DISTRO $VERSION_CODENAME"
echo -e "${RED}Не рекомендуется запускать скрипт от root. Запустите от обычного пользователя с sudo.${NC}"
exit 1
fi
# Определение дистрибутива # Обновление пакетов
detect_distro echo "Обновление пакетов..."
sudo apt-get update && sudo apt-get upgrade -y
# Обновление пакетов # Установка основных утилит
echo -e "\n${YELLOW}Обновление пакетов...${NC}" install_tmux
sudo apt-get update && sudo apt-get upgrade -y check_install mc
check_install git
check_install net-tools
# Установка базовых утилит # Установка Docker
echo -e "\n${YELLOW}Установка базовых утилит...${NC}" install_docker
check_install mc
check_install git
check_install net-tools
check_install curl
check_install wget
# Установка tmux # Установка dry
install_tmux 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 # Установка btop с поддержкой GPU
install_docker 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 # Добавление пользователя в группу docker
if ! command -v dry &> /dev/null; then if ! groups "$USER" | grep -q '\bdocker\b'; then
echo -e "\n${YELLOW}Установка dry...${NC}" echo "Добавление пользователя $USER в группу docker..."
curl -sSL https://github.com/moncho/dry/releases/latest/download/dry-linux-amd64 -o dry sudo usermod -aG docker "$USER"
chmod +x dry echo "Перезагрузите сессию или выполните 'newgrp docker' для применения изменений."
sudo mv dry /usr/local/bin/ fi
echo -e "${GREEN}dry успешно установлен.${NC}"
else
echo -e "${GREEN}dry уже установлен.${NC}"
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 # Копирование файлов tmux
if ! groups $USER | grep -q '\bdocker\b'; then if [ -d "./tmux" ]; then
echo -e "\n${YELLOW}Добавление пользователя $USER в группу docker...${NC}" echo "Копирование файлов tmux..."
sudo usermod -aG docker $USER sudo cp -r ./tmux/* /root/
echo -e "${GREEN}Пользователь $USER добавлен в группу docker.${NC}" fi
echo -e "${YELLOW}Для применения изменений необходимо перезапустить сессию.${NC}"
else
echo -e "${GREEN}Пользователь $USER уже в группе docker.${NC}"
fi
# Клонирование репозитория # Проверка установленных версий
REPO_DIR="opendoor-vpn-to-tor" echo "Установленные версии:"
if [ ! -d "$REPO_DIR" ]; then tmux -V 2>/dev/null || echo "tmux не установлен"
echo -e "\n${YELLOW}Клонирование репозитория...${NC}" mc -V 2>/dev/null || echo "mc не установлен"
git clone https://git.softuniq.eu/OpenDoor/opendoor-vpn-to-tor.git "$REPO_DIR" dry --version 2>/dev/null || echo "dry не установлен"
else docker --version 2>/dev/null || echo "docker не установлен"
echo -e "${GREEN}Репозиторий уже клонирован в $REPO_DIR.${NC}" docker compose version 2>/dev/null || echo "docker compose не установлен"
fi git --version 2>/dev/null || echo "git не установлен"
btop --version 2>/dev/null || echo "btop не установлен"
# Копирование файлов tmux echo "Установка и настройка завершены!"
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 "${YELLOW}Для применения всех изменений рекомендуется перезапустить сессию.${NC}"
}
# Запуск главной функции
main