opendoor-base-install/setup_vps.sh
2025-05-13 14:31:03 +00:00

232 lines
9.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 согласно официальной документации
install_dry() {
if command -v dry &> /dev/null; then
echo -e "${GREEN}dry уже установлен.${NC}"
return
fi
echo -e "${YELLOW}Установка dry...${NC}"
# Установка через go (если установлен)
if command -v go &> /dev/null; then
echo -e "${YELLOW}Установка через go...${NC}"
go install github.com/moncho/dry@latest
if [ $? -eq 0 ]; then
echo -e "${GREEN}dry успешно установлен через go.${NC}"
return
fi
fi
# Установка через скачивание бинарника
ARCH=$(get_arch)
if [ "$ARCH" == "unsupported" ]; then
echo -e "${RED}Архитектура не поддерживается для dry.${NC}"
return
fi
echo -e "${YELLOW}Скачивание dry для архитектуры ${ARCH}...${NC}"
LATEST_RELEASE=$(curl -s https://api.github.com/repos/moncho/dry/releases/latest | grep 'tag_name' | cut -d\" -f4)
DRY_URL="https://github.com/moncho/dry/releases/download/${LATEST_RELEASE}/dry-linux-${ARCH}"
if curl -fsSL $DRY_URL -o /tmp/dry; then
chmod +x /tmp/dry
sudo mv /tmp/dry /usr/local/bin/
echo -e "${GREEN}dry успешно установлен.${NC}"
else
echo -e "${RED}Не удалось установить dry.${NC}"
fi
}
# Функция для определения дистрибутива
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 (с проверкой существования)
if [ -d "$REPO_DIR" ]; then
if [ -d "$REPO_DIR/tmux" ]; then
echo -e "${YELLOW}Копирование файлов tmux...${NC}"
sudo cp -r "$REPO_DIR/tmux/." /root/ 2>/dev/null && \
echo -e "${GREEN}Файлы tmux успешно скопированы.${NC}" || \
echo -e "${RED}Не удалось скопировать файлы tmux.${NC}"
else
echo -e "${YELLOW}Папка tmux не найдена в репозитории.${NC}"
fi
else
echo -e "${YELLOW}Репозиторий не найден, копирование 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 2>/dev/null || 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}"