Этот коммит содержится в:
stevefoxru
2025-04-22 17:08:09 +03:00
коммит произвёл GitHub
родитель c9f0d0cb6d
Коммит 807ada129c
+81 -32
Просмотреть файл
@@ -1,6 +1,9 @@
#!/bin/bash #!/bin/bash
SERVICE_NAME="awg_bot" SERVICE_NAME="awg_bot"
REPO_URL="https://github.com/stevefoxru/amnezia-bot.git"
REPO_API="https://api.github.com/repos/stevefoxru/amnezia-bot"
LOCAL_VERSION_FILE="/root/amnezia-bot/.version"
GREEN=$'\033[0;32m' GREEN=$'\033[0;32m'
YELLOW=$'\033[1;33m' YELLOW=$'\033[1;33m'
@@ -9,7 +12,6 @@ BLUE=$'\033[0;34m'
NC=$'\033[0m' NC=$'\033[0m'
ENABLE_LOGS=true ENABLE_LOGS=true
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SCRIPT_NAME="$(basename "$0")" SCRIPT_NAME="$(basename "$0")"
SCRIPT_PATH="$SCRIPT_DIR/$SCRIPT_NAME" SCRIPT_PATH="$SCRIPT_DIR/$SCRIPT_NAME"
@@ -19,9 +21,10 @@ while [[ "$#" -gt 0 ]]; do
case $1 in case $1 in
--quiet) ENABLE_LOGS=false ;; --quiet) ENABLE_LOGS=false ;;
--verbose) ENABLE_LOGS=true ;; --verbose) ENABLE_LOGS=true ;;
--check-update) check_updates; exit 0 ;;
*) *)
echo -e "${RED}Неизвестный параметр: $1${NC}" echo -e "${RED}Неизвестный параметр: $1${NC}"
echo "Использование: $0 [--quiet|--verbose]" echo "Использование: $0 [--quiet|--verbose|--check-update]"
exit 1 exit 1
;; ;;
esac esac
@@ -61,9 +64,63 @@ run_with_spinner() {
fi fi
} }
# Проверка обновлений на GitHub
check_github_updates() {
local current_sha local_sha latest_sha
cd amnezia-bot || { echo -e "${RED}Каталог amnezia-bot не найден${NC}"; return 1; }
# Получение текущего SHA коммита
local_sha=$(git rev-parse HEAD 2>/dev/null || echo "unknown")
# Получение последнего коммита через GitHub API
if command -v curl &>/dev/null; then
latest_sha=$(curl -s "$REPO_API/commits/main" | jq -r '.sha' 2>/dev/null)
[[ -z "$latest_sha" ]] && { echo -e "${RED}Не удалось получить данные с GitHub${NC}"; cd ..; return 1; }
else
echo -e "${RED}curl не установлен${NC}"; cd ..; return 1
fi
# Сравнение версий
if [[ "$local_sha" == "$latest_sha" ]]; then
echo -e "${GREEN}Репозиторий актуален (SHA: $local_sha)${NC}"
cd ..; return 0
fi
echo -e "${YELLOW}Доступно обновление (текущий SHA: $local_sha, последний SHA: $latest_sha)${NC}"
echo -ne "${BLUE}1) Установить 2) Отменить: ${NC}"; read choice
if [[ "$choice" == "1" ]]; then
run_with_spinner "Обновление репозитория" "git pull"
echo "$latest_sha" > "$LOCAL_VERSION_FILE"
# Проверка обновления самого скрипта
check_script_update
run_with_spinner "Перезапуск службы" "sudo systemctl restart $SERVICE_NAME -q"
else
echo -e "${YELLOW}Обновление отменено${NC}"
fi
cd ..
}
# Проверка обновления самого скрипта
check_script_update() {
local temp_script=$(mktemp)
if [[ -f "amnezia-bot/install.sh" ]]; then
cp "amnezia-bot/install.sh" "$temp_script"
if ! cmp -s "$SCRIPT_PATH" "$temp_script"; then
echo -e "${YELLOW}Обнаружено обновление скрипта install.sh${NC}"
run_with_spinner "Обновление скрипта" "mv $temp_script $SCRIPT_PATH && chmod +x $SCRIPT_PATH"
echo -e "${GREEN}Скрипт обновлён, перезапускаю...${NC}"
exec "$SCRIPT_PATH" --check-update
else
rm -f "$temp_script"
fi
else
rm -f "$temp_script"
echo -e "${YELLOW}Скрипт install.sh не найден в репозитории${NC}"
fi
}
# Обновление и очистка системы # Обновление и очистка системы
update_and_clean_system() { update_and_clean_system() {
# Ждём освобождения APT
while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do
echo -e "${YELLOW}APT занят. Ждём...${NC}"; sleep 2 echo -e "${YELLOW}APT занят. Ждём...${NC}"; sleep 2
done done
@@ -77,7 +134,6 @@ check_python() {
echo -e "\n${GREEN}Python 3.11 уже установлен${NC}"; return 0 echo -e "\n${GREEN}Python 3.11 уже установлен${NC}"; return 0
fi fi
echo -e "\n${YELLOW}Устанавливаю Python 3.11...${NC}" echo -e "\n${YELLOW}Устанавливаю Python 3.11...${NC}"
# Ожидание dpkg lock на Ubuntu 24.04
if [[ "$UBUNTU_VERSION" == "24.04" ]]; then if [[ "$UBUNTU_VERSION" == "24.04" ]]; then
local max=30 cnt=1 local max=30 cnt=1
while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do
@@ -93,7 +149,7 @@ check_python() {
# Установка зависимостей VPN-бота # Установка зависимостей VPN-бота
install_dependencies() { install_dependencies() {
run_with_spinner "Установка зависимостей" "sudo apt-get install -y jq net-tools iptables resolvconf git -qq" run_with_spinner "Установка зависимостей" "sudo apt-get install -y jq net-tools iptables resolvconf git curl -qq"
} }
# Установка и конфиг needrestart # Установка и конфиг needrestart
@@ -105,12 +161,11 @@ install_and_configure_needrestart() {
# Клонирование репозитория # Клонирование репозитория
clone_repository() { clone_repository() {
# Если скрипт запущен внутри клонированного репозитория, пропускаем
if [[ -d ".git" ]]; then if [[ -d ".git" ]]; then
echo -e "${YELLOW}Репозиторий уже присутствует, пропускаем клонирование...${NC}" echo -e "${YELLOW}Репозиторий уже присутствует, пропускаем клонирование...${NC}"
return return
fi fi
run_with_spinner "Клонирование репозитория" "git clone https://github.com/stevefoxru/amnezia-bot.git -q" run_with_spinner "Клонирование репозитория" "git clone $REPO_URL -q"
cd amnezia-bot || { echo -e "${RED}Не удалось перейти в каталог amnezia-bot${NC}"; exit 1; } cd amnezia-bot || { echo -e "${RED}Не удалось перейти в каталог amnezia-bot${NC}"; exit 1; }
} }
@@ -165,18 +220,11 @@ EOF
# Проверка и применение обновлений # Проверка и применение обновлений
check_updates() { check_updates() {
cd amnezia-bot || return 1 if [[ ! -d "amnezia-bot/.git" ]]; then
local out err echo -e "${RED}Репозиторий не найден. Пожалуйста, установите бот сначала.${NC}"
out=$(mktemp); err=$(mktemp) return 1
git pull >"$out" 2>"$err" || { cat "$err"; rm -f "$out" "$err"; cd ..; return 1; }
local changes=$(<"$out"); rm -f "$out" "$err"
if [[ "$changes" == "Already up to date." ]]; then
echo -e "${GREEN}Обновлений нет${NC}"; cd ..; return 0
fi fi
echo -e "${YELLOW}Найдено обновление:${NC}\n$changes" check_github_updates
echo -ne "${BLUE}1) Установить 2) Отменить: ${NC}"; read choice
case $choice in 1) git pull; run_with_spinner "Перезапуск службы" "sudo systemctl restart $SERVICE_NAME -q" ;; *) echo "Отменено" ;; esac
cd ..
} }
# Удаление AmneziaWG # Удаление AmneziaWG
@@ -194,16 +242,17 @@ service_control_menu() {
while true; do while true; do
echo -e "\n${BLUE}Управление службой${NC}" echo -e "\n${BLUE}Управление службой${NC}"
sudo systemctl status "$SERVICE_NAME" | grep -E "Active:|Loaded:" sudo systemctl status "$SERVICE_NAME" | grep -E "Active:|Loaded:"
echo -e "1) Остановить 2) Перезапустить 3) Переустановить 4) Удалить службу 5) Удалить AmneziaWG 6) Назад" echo -e "1) Остановить 2) Перезапустить 3) Переустановить 4) Удалить службу 5) Удалить AmneziaWG 6) Проверить обновления 7) Назад"
echo -ne "${BLUE}Выберите: ${NC}"; read act echo -ne "${BLUE}Выберите: ${NC}"; read act
case $act in case $act in
1) run_with_spinner "Остановка" "sudo systemctl stop $SERVICE_NAME -q" ;; 1) run_with_spinner "Остановка" "sudo systemctl stop $SERVICE_NAME -q" ;;
2) run_with_spinner "Перезапуск" "sudo systemctl restart $SERVICE_NAME -q" ;; 2) run_with_spinner "Перезапуск" "sudo systemctl restart $SERVICE_NAME -q" ;;
3) reinstall_bot ;; 3) reinstall_bot ;;
4) run_with_spinner "Удаление службы" "sudo systemctl disable $SERVICE_NAME -q && sudo rm /etc/systemd/system/$SERVICE_NAME.service && sudo systemctl daemon-reload -q" ;; 4) run_with_spinner "Удаление службы" "sudo systemctl disable $SERVICE_NAME -q && sudo rm /etc/systemd/system/$SERVICE_NAME.service && sudo systemctl daemon-reload -q" ;;
5) remove_amneziawg ;; 5) remove_amneziawg ;;
6) break ;; 6) check_updates ;;
*) echo "Неверно" ;; 7) break ;;
*) echo "Неверно" ;;
esac esac
done done
} }
@@ -224,11 +273,11 @@ installed_menu() {
echo -e "\n${GREEN}1) Проверить обновления 2) Управление службой 3) Переустановить 4) Выход${NC}" echo -e "\n${GREEN}1) Проверить обновления 2) Управление службой 3) Переустановить 4) Выход${NC}"
echo -ne "${BLUE}Выберите: ${NC}"; read opt echo -ne "${BLUE}Выберите: ${NC}"; read opt
case $opt in case $opt in
1) check_updates ;; 1) check_updates ;;
2) service_control_menu ;; 2) service_control_menu ;;
3) reinstall_bot ;; 3) reinstall_bot ;;
4) exit 0 ;; 4) exit 0 ;;
*) echo "Неверно" ;; *) echo "Неверно" ;;
esac esac
done done
} }
@@ -245,7 +294,7 @@ install_bot() {
set_permissions set_permissions
initialize_bot initialize_bot
create_service create_service
echo -e "${GREEN}Установка завершена!${NC}" echo -e "${GREEN}Установка завершена!${NC}"
} }
# Точка входа # Точка входа