Обновить setup_vps.sh
This commit is contained in:
parent
e15cab3d5e
commit
6e3634654f
186
setup_vps.sh
186
setup_vps.sh
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# VPS Auto-Setup Script v2.0
|
# VPS Auto-Setup Script v2.1
|
||||||
# Универсальный установщик для Ubuntu/Debian с автоматическим определением дистрибутива
|
# Универсальный установщик для Ubuntu/Debian
|
||||||
|
|
||||||
# Цвета для вывода
|
# Цвета для вывода
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
@ -9,13 +9,27 @@ GREEN='\033[0;32m'
|
|||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Функция для безопасного запуска от root
|
||||||
|
check_root() {
|
||||||
|
if [ "$(id -u)" -eq 0 ]; then
|
||||||
|
echo -e "${YELLOW}Предупреждение: Скрипт запущен от root.${NC}"
|
||||||
|
echo -e "${YELLOW}Рекомендуется запускать от обычного пользователя с sudo.${NC}"
|
||||||
|
read -p "Продолжить установку? [y/N] " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
echo -e "${RED}Установка отменена.${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Функция для проверки установки пакета
|
# Функция для проверки установки пакета
|
||||||
check_install() {
|
check_install() {
|
||||||
if command -v $1 &> /dev/null; then
|
if command -v $1 &> /dev/null; then
|
||||||
echo -e "${GREEN}$1 уже установлен.${NC}"
|
echo -e "${GREEN}$1 уже установлен.${NC}"
|
||||||
else
|
else
|
||||||
echo -e "Установка ${YELLOW}$1${NC}..."
|
echo -e "Установка ${YELLOW}$1${NC}..."
|
||||||
sudo apt-get install -y $1
|
apt-get install -y $1
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo -e "${GREEN}$1 успешно установлен.${NC}"
|
echo -e "${GREEN}$1 успешно установлен.${NC}"
|
||||||
else
|
else
|
||||||
@ -25,132 +39,63 @@ check_install() {
|
|||||||
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
|
|
||||||
CODENAME=$VERSION_CODENAME
|
CODENAME=$VERSION_CODENAME
|
||||||
|
[ -z "$CODENAME" ] && CODENAME=$(echo "$VERSION" | cut -d '(' -f2 | cut -d ')' -f1)
|
||||||
else
|
else
|
||||||
echo -e "${RED}Не удалось определить дистрибутив!${NC}"
|
echo -e "${RED}Не удалось определить дистрибутив!${NC}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "\n${YELLOW}Обнаружен дистрибутив: ${DISTRO} ${VERSION} (${CODENAME})${NC}\n"
|
echo -e "\n${YELLOW}Обнаружен дистрибутив: ${DISTRO} (${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 -e "Установка ${YELLOW}Docker${NC} для ${DISTRO}..."
|
||||||
|
|
||||||
# Установка зависимостей
|
# Установка зависимостей
|
||||||
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
|
apt-get install -y apt-transport-https ca-certificates curl gnupg
|
||||||
|
|
||||||
# Добавление GPG ключа Docker
|
# Добавление GPG ключа Docker
|
||||||
sudo install -m 0755 -d /etc/apt/keyrings
|
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 | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||||
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
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} ${CODENAME} stable" | \
|
||||||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
|
|
||||||
# Попытка установки Docker CE
|
# Попытка установки Docker CE
|
||||||
if sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; then
|
if apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; then
|
||||||
echo -e "${GREEN}Docker успешно установлен.${NC}"
|
echo -e "${GREEN}Docker успешно установлен.${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${YELLOW}Ошибка при установке Docker CE. Пробуем установить docker.io из стандартных репозиториев...${NC}"
|
echo -e "${YELLOW}Ошибка при установке Docker CE. Пробуем установить docker.io...${NC}"
|
||||||
sudo apt-get install -y docker.io docker-compose
|
apt-get install -y docker.io docker-compose
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo -e "${GREEN}Docker уже установлен.${NC}"
|
echo -e "${GREEN}Docker уже установлен.${NC}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Установка tmux с выбором варианта
|
|
||||||
install_tmux() {
|
|
||||||
if command -v tmux &> /dev/null; then
|
|
||||||
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 -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() {
|
main() {
|
||||||
# Проверка на root
|
# Проверка на root
|
||||||
if [ "$(id -u)" -eq 0 ]; then
|
check_root
|
||||||
echo -e "${RED}Не рекомендуется запускать скрипт от root. Запустите от обычного пользователя с sudo.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Определение дистрибутива
|
# Определение дистрибутива
|
||||||
detect_distro
|
detect_distro
|
||||||
|
|
||||||
# Обновление пакетов
|
# Обновление пакетов
|
||||||
echo -e "\n${YELLOW}Обновление пакетов...${NC}"
|
echo -e "\n${YELLOW}Обновление пакетов...${NC}"
|
||||||
sudo apt-get update && sudo apt-get upgrade -y
|
apt-get update && apt-get upgrade -y
|
||||||
|
|
||||||
# Установка базовых утилит
|
# Установка базовых утилит
|
||||||
echo -e "\n${YELLOW}Установка базовых утилит...${NC}"
|
echo -e "\n${YELLOW}Установка базовых утилит...${NC}"
|
||||||
@ -159,68 +104,31 @@ main() {
|
|||||||
check_install net-tools
|
check_install net-tools
|
||||||
check_install curl
|
check_install curl
|
||||||
check_install wget
|
check_install wget
|
||||||
|
check_install tmux
|
||||||
# Установка tmux
|
|
||||||
install_tmux
|
|
||||||
|
|
||||||
# Установка Docker
|
# Установка Docker
|
||||||
install_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
|
|
||||||
install_btop
|
|
||||||
|
|
||||||
# Добавление пользователя в группу docker
|
# Добавление пользователя в группу docker
|
||||||
if ! groups $USER | grep -q '\bdocker\b'; then
|
if [ "$(id -u)" -ne 0 ] && ! groups $USER | grep -q '\bdocker\b'; then
|
||||||
echo -e "\n${YELLOW}Добавление пользователя $USER в группу docker...${NC}"
|
echo -e "\n${YELLOW}Добавление пользователя $USER в группу docker...${NC}"
|
||||||
sudo usermod -aG docker $USER
|
usermod -aG docker $USER
|
||||||
echo -e "${GREEN}Пользователь $USER добавлен в группу docker.${NC}"
|
echo -e "${GREEN}Пользователь $USER добавлен в группу docker.${NC}"
|
||||||
echo -e "${YELLOW}Для применения изменений необходимо перезапустить сессию.${NC}"
|
echo -e "${YELLOW}Для применения изменений необходимо перезапустить сессию.${NC}"
|
||||||
else
|
|
||||||
echo -e "${GREEN}Пользователь $USER уже в группе docker.${NC}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Клонирование репозитория
|
echo -e "\n${GREEN}Установка успешно завершена!${NC}"
|
||||||
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 -e "${GREEN}Репозиторий уже клонирован в $REPO_DIR.${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Копирование файлов 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 -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}"
|
echo -e "${YELLOW}Для применения всех изменений рекомендуется перезапустить сессию.${NC}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Запуск главной функции
|
# Запуск (с проверкой на прямой запуск)
|
||||||
main
|
if [ "$0" = "$BASH_SOURCE" ]; then
|
||||||
|
# Если скрипт запущен напрямую, а не через source
|
||||||
|
if [[ $EUID -eq 0 ]]; then
|
||||||
|
# Если root, запускаем напрямую
|
||||||
|
main
|
||||||
|
else
|
||||||
|
# Если не root, запускаем через sudo
|
||||||
|
sudo bash -c "$(declare -f main check_root check_install detect_distro install_docker); main"
|
||||||
|
fi
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user