Обновить setup_vps.sh

This commit is contained in:
NW
2025-05-13 11:48:40 +00:00
parent e808d89d8e
commit 2b14162c2d

View File

@@ -6,29 +6,6 @@ GREEN='\033[0;32m'
YELLOW='\033[1;33m' YELLOW='\033[1;33m'
NC='\033[0m' # No Color NC='\033[0m' # No Color
# Проверка дистрибутива
detect_distro() {
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
OS_CODENAME=$VERSION_CODENAME
elif type lsb_release >/dev/null 2>&1; then
OS=$(lsb_release -si | tr '[:upper:]' '[:lower:]')
OS_CODENAME=$(lsb_release -sc)
else
OS=$(cat /etc/issue | head -1 | awk '{print $1}' | tr '[:upper:]' '[:lower:]')
OS_CODENAME=$(cat /etc/apt/sources.list | grep -E '^deb ' | head -1 | awk '{print $3}')
fi
# Проверка на поддержку
if [[ "$OS" != "ubuntu" && "$OS" != "debian" ]]; then
echo -e "${RED}Ошибка: Этот скрипт поддерживает только Ubuntu и Debian.${NC}"
exit 1
fi
echo -e "${YELLOW}Обнаружена система: $OS $OS_CODENAME${NC}"
}
# Функция для проверки установки пакета # Функция для проверки установки пакета
check_install() { check_install() {
if command -v $1 &> /dev/null; then if command -v $1 &> /dev/null; then
@@ -45,23 +22,63 @@ check_install() {
fi fi
} }
# Установка Docker с правильными репозиториями # Функция для определения дистрибутива
install_docker() { detect_distro() {
if ! command -v docker &> /dev/null; then if [ -f /etc/os-release ]; then
echo -e "${YELLOW}Установка Docker для $OS...${NC}" . /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
}
# Предупреждение о запуске от root (только информативное)
if [ "$(id -u)" -eq 0 ]; then
echo -e "${YELLOW}Внимание: Скрипт запущен от root. Рекомендуется запускать от обычного пользователя с sudo.${NC}"
sleep 2
fi
# Обновление пакетов
echo -e "${YELLOW}Обновление пакетов...${NC}"
sudo apt-get update && sudo apt-get upgrade -y
if [ $? -ne 0 ]; then
echo -e "${RED}Ошибка при обновлении пакетов.${NC}"
exit 1
fi
# Установка базовых утилит
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 update
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 mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/$OS/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/$OS $OS_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
@@ -71,147 +88,102 @@ install_docker() {
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo -e "${GREEN}Docker успешно установлен.${NC}" echo -e "${GREEN}Docker успешно установлен.${NC}"
else else
echo -e "${YELLOW}Попытка установки Docker из стандартных репозиториев...${NC}" echo -e "${RED}Ошибка при установке Docker. Попробуем установить docker.io из стандартных репозиториев...${NC}"
sudo apt-get install -y docker.io docker-compose sudo apt-get install -y docker.io docker-compose-plugin
if [ $? -eq 0 ]; then
echo -e "${GREEN}Docker установлен из стандартных репозиториев.${NC}"
else
echo -e "${RED}Ошибка при установке Docker.${NC}"
exit 1
fi fi
fi else
else
echo -e "${GREEN}Docker уже установлен.${NC}" echo -e "${GREEN}Docker уже установлен.${NC}"
fi fi
}
# Установка btop с поддержкой GPU # Установка dry
install_btop() { if ! command -v dry &> /dev/null; then
if ! command -v btop &> /dev/null; then
echo -e "${YELLOW}Установка btop с поддержкой GPU...${NC}"
# Установка зависимостей для компиляции
echo -e "${YELLOW}Установка зависимостей...${NC}"
sudo apt-get install -y coreutils sed git build-essential
# Клонирование репозитория btop
echo -e "${YELLOW}Клонирование репозитория...${NC}"
git clone https://github.com/aristocratos/btop.git
cd btop
# Компиляция с поддержкой GPU
echo -e "${YELLOW}Компиляция...${NC}"
make GPU_SUPPORT=true
# Установка
echo -e "${YELLOW}Установка...${NC}"
sudo make install
# Настройка прав
echo -e "${YELLOW}Настройка прав...${NC}"
sudo make setcap
cd ..
rm -rf btop
echo -e "${GREEN}btop успешно установлен с поддержкой GPU.${NC}"
else
echo -e "${GREEN}btop уже установлен.${NC}"
fi
}
# Основной процесс установки
main() {
# Предупреждение (не блокирующее)
if [ "$(id -u)" -eq 0 ]; then
echo -e "${YELLOW}Внимание: Скрипт запущен от root. Рекомендуется запускать от обычного пользователя с sudo.${NC}"
fi
detect_distro
# Обновление пакетов
echo -e "${YELLOW}Обновление пакетов...${NC}"
sudo apt-get update && sudo apt-get upgrade -y
if [ $? -ne 0 ]; then
echo -e "${RED}Ошибка при обновлении пакетов.${NC}"
exit 1
fi
# Установка базовых утилит
check_install tmux
check_install mc
check_install git
check_install net-tools
# Установка Docker
install_docker
# Установка dry
if ! command -v dry &> /dev/null; then
echo -e "${YELLOW}Установка dry...${NC}" echo -e "${YELLOW}Установка dry...${NC}"
curl -sSL https://github.com/moncho/dry/releases/latest/download/dry-linux-amd64 -o dry curl -sSL https://github.com/moncho/dry/releases/latest/download/dry-linux-amd64 -o dry
chmod +x dry chmod +x dry
sudo mv dry /usr/local/bin/ sudo mv dry /usr/local/bin/
echo -e "${GREEN}dry успешно установлен.${NC}" echo -e "${GREEN}dry успешно установлен.${NC}"
else else
echo -e "${GREEN}dry уже установлен.${NC}" echo -e "${GREEN}dry уже установлен.${NC}"
fi fi
# Установка btop # Установка btop
install_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
# Добавление пользователя в группу docker case $btop_choice in
CURRENT_USER=${SUDO_USER:-$USER} 1)
if ! groups $CURRENT_USER | grep -q '\bdocker\b'; then check_install btop
echo -e "${YELLOW}Добавление пользователя $CURRENT_USER в группу docker...${NC}" ;;
sudo usermod -aG docker $CURRENT_USER 2)
echo -e "${GREEN}Пользователь добавлен в группу docker.${NC}" 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 "${GREEN}Пользователь $USER добавлен в группу docker.${NC}"
echo -e "${YELLOW}Для применения изменений可能需要 перезапустить сессию.${NC}" echo -e "${YELLOW}Для применения изменений可能需要 перезапустить сессию.${NC}"
else else
echo -e "${GREEN}Пользователь $CURRENT_USER уже в группе docker.${NC}" echo -e "${GREEN}Пользователь $USER уже в группе docker.${NC}"
fi fi
# Клонирование репозитория # Клонирование репозитория
REPO_URL="https://git.softuniq.eu/OpenDoor/opendoor-vpn-to-tor.git" REPO_DIR="opendoor-vpn-to-tor"
REPO_DIR="opendoor-vpn-to-tor" if [ ! -d "$REPO_DIR" ]; then
echo -e "${YELLOW}Клонирование репозитория opendoor-vpn-to-tor...${NC}"
if [ -d "$REPO_DIR" ]; then git clone https://git.softuniq.eu/OpenDoor/opendoor-vpn-to-tor.git "$REPO_DIR"
echo -e "${GREEN}Репозиторий уже клонирован в $REPO_DIR.${NC}"
else
echo -e "${YELLOW}Клонирование репозитория...${NC}"
git clone "$REPO_URL" "$REPO_DIR"
if [ $? -eq 0 ]; then
echo -e "${GREEN}Репозиторий успешно клонирован.${NC}" echo -e "${GREEN}Репозиторий успешно клонирован.${NC}"
else else
echo -e "${RED}Ошибка при клонировании репозитория.${NC}" echo -e "${GREEN}Репозиторий уже клонирован.${NC}"
exit 1 fi
fi
fi
# Копирование файлов tmux # Копирование файлов tmux
TMUX_SOURCE_DIR="./tmux/" if [ -d "tmux" ]; then
TMUX_TARGET_DIR="/root/"
if [ -d "$TMUX_SOURCE_DIR" ]; then
echo -e "${YELLOW}Копирование файлов tmux...${NC}" echo -e "${YELLOW}Копирование файлов tmux...${NC}"
sudo cp -r "$TMUX_SOURCE_DIR"/* "$TMUX_TARGET_DIR" sudo cp -r tmux/* /root/
echo -e "${GREEN}Файлы tmux успешно скопированы.${NC}" echo -e "${GREEN}Файлы tmux успешно скопированы.${NC}"
else else
echo -e "${YELLOW}Папка tmux не найдена. Копирование не выполнено.${NC}" echo -e "${YELLOW}Папка tmux не найдена. Копирование не выполнено.${NC}"
fi fi
# Вывод версий # Вывод версий установленных программ
echo -e "\n${GREEN}Установленные версии:${NC}" echo -e "\n${GREEN}=== Установленные версии ===${NC}"
tmux -V 2>/dev/null || echo "tmux: не удалось получить версию" tmux -V || echo "tmux: не удалось получить версию"
mc -V 2>/dev/null || echo "mc: не удалось получить версию" mc -V || echo "mc: не удалось получить версию"
dry --version 2>/dev/null || echo "dry: не удалось получить версию" dry --version || echo "dry: не удалось получить версию"
docker --version 2>/dev/null || echo "docker: не удалось получить версию" docker --version || echo "docker: не удалось получить версию"
docker compose version 2>/dev/null || echo "docker compose: не установлен" docker compose version || echo "docker compose: не удалось получить версию"
git --version 2>/dev/null || echo "git: не удалось получить версию" git --version || echo "git: не удалось получить версию"
btop --version 2>/dev/null || echo "btop: не удалось получить версию" btop --version || echo "btop: не удалось получить версию"
echo -e "\n${GREEN}Установка завершена успешно!${NC}" echo -e "\n${GREEN}Установка и настройка завершены!${NC}"
}
# Запуск главной функции
main