opendoor-base-install/setup_vps.sh
2025-05-17 19:49:34 +00:00

270 lines
12 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
# Определяем архитектуру
ARCH=$(get_arch)
echo -e "${YELLOW}Установка dry для архитектуры ${ARCH}...${NC}"
# 1. Попытка установки из репозиториев
if sudo apt-get install -y dry 2>/dev/null; then
echo -e "${GREEN}dry успешно установлен из репозиториев.${NC}"
return
fi
# 2. Установка предварительно собранного бинарника для текущей архитектуры
echo -e "${YELLOW}Установка готового бинарника...${NC}"
# Определяем точную версию dry
LATEST_VERSION=$(curl -s https://api.github.com/repos/moncho/dry/releases/latest | grep 'tag_name' | cut -d\" -f4)
# Формируем URL в зависимости от архитектуры
case $ARCH in
"amd64")
DRY_URL="https://github.com/moncho/dry/releases/download/${LATEST_VERSION}/dry-linux-amd64"
;;
"arm64")
DRY_URL="https://github.com/moncho/dry/releases/download/${LATEST_VERSION}/dry-linux-arm64"
;;
"arm")
DRY_URL="https://github.com/moncho/dry/releases/download/${LATEST_VERSION}/dry-linux-arm"
;;
*)
echo -e "${RED}Неподдерживаемая архитектура: $ARCH${NC}"
echo -e "${YELLOW}Попробуйте установить через Docker:${NC}"
echo "docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock moncho/dry"
exit 1
;;
esac
echo -e "${YELLOW}Скачивание dry...${NC}"
if curl -fsSL "$DRY_URL" -o /tmp/dry; then
sudo mv /tmp/dry /usr/local/bin/dry
sudo chmod +x /usr/local/bin/dry
echo -e "${GREEN}dry успешно установлен.${NC}"
# Проверка работы
if /usr/local/bin/dry --version; then
echo -e "${GREEN}Проверка прошла успешно.${NC}"
else
echo -e "${RED}Ошибка при запуске dry. Возможно несовместимость архитектуры.${NC}"
echo -e "${YELLOW}Попробуйте установить через Docker:${NC}"
echo "docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock moncho/dry"
fi
else
echo -e "${RED}Не удалось скачать dry.${NC}"
echo -e "${YELLOW}Альтернативные варианты:${NC}"
echo "1. Установите вручную:"
echo " wget $DRY_URL"
echo " chmod +x dry-linux-*"
echo " sudo mv dry-linux-* /usr/local/bin/dry"
echo "2. Используйте Docker-версию:"
echo " docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock moncho/dry"
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 с проверкой
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}"