Update install.sh
Этот коммит содержится в:
+69
-20
@@ -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,7 +242,7 @@ 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" ;;
|
||||||
@@ -202,7 +250,8 @@ service_control_menu() {
|
|||||||
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 ;;
|
||||||
|
7) break ;;
|
||||||
*) echo "Неверно" ;;
|
*) echo "Неверно" ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user