252 lines
11 KiB
Bash
252 lines
11 KiB
Bash
#!/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 на ARM устройства
|
||
install_dry() {
|
||
if command -v dry &> /dev/null; then
|
||
echo -e "${GREEN}dry уже установлен.${NC}"
|
||
return
|
||
fi
|
||
|
||
echo -e "${YELLOW}Установка dry для ARM...${NC}"
|
||
|
||
# 1. Попытка установки из репозиториев
|
||
if sudo apt-get install -y dry 2>/dev/null; then
|
||
echo -e "${GREEN}dry успешно установлен из репозиториев.${NC}"
|
||
return
|
||
fi
|
||
|
||
# 2. Установка предварительно собранного бинарника для ARM
|
||
echo -e "${YELLOW}Установка готового бинарника для ARM...${NC}"
|
||
|
||
# Определяем точную версию dry
|
||
LATEST_VERSION=$(curl -s https://api.github.com/repos/moncho/dry/releases/latest | grep 'tag_name' | cut -d\" -f4)
|
||
|
||
# Для Orange Pi Zero (ARMv7) используем armv6 бинарник для совместимости
|
||
DRY_URL="https://github.com/moncho/dry/releases/download/${LATEST_VERSION}/dry-linux-arm"
|
||
|
||
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 https://github.com/moncho/dry/releases/latest/download/dry-linux-arm"
|
||
echo " chmod +x dry-linux-arm"
|
||
echo " sudo mv dry-linux-arm /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}" |