Update install.sh
Этот коммит содержится в:
+69
-20
@@ -1,6 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
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'
|
||||
YELLOW=$'\033[1;33m'
|
||||
@@ -9,7 +12,6 @@ BLUE=$'\033[0;34m'
|
||||
NC=$'\033[0m'
|
||||
|
||||
ENABLE_LOGS=true
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
SCRIPT_NAME="$(basename "$0")"
|
||||
SCRIPT_PATH="$SCRIPT_DIR/$SCRIPT_NAME"
|
||||
@@ -19,9 +21,10 @@ while [[ "$#" -gt 0 ]]; do
|
||||
case $1 in
|
||||
--quiet) ENABLE_LOGS=false ;;
|
||||
--verbose) ENABLE_LOGS=true ;;
|
||||
--check-update) check_updates; exit 0 ;;
|
||||
*)
|
||||
echo -e "${RED}Неизвестный параметр: $1${NC}"
|
||||
echo "Использование: $0 [--quiet|--verbose]"
|
||||
echo "Использование: $0 [--quiet|--verbose|--check-update]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -61,9 +64,63 @@ run_with_spinner() {
|
||||
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() {
|
||||
# Ждём освобождения APT
|
||||
while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do
|
||||
echo -e "${YELLOW}APT занят. Ждём...${NC}"; sleep 2
|
||||
done
|
||||
@@ -77,7 +134,6 @@ check_python() {
|
||||
echo -e "\n${GREEN}Python 3.11 уже установлен${NC}"; return 0
|
||||
fi
|
||||
echo -e "\n${YELLOW}Устанавливаю Python 3.11...${NC}"
|
||||
# Ожидание dpkg lock на Ubuntu 24.04
|
||||
if [[ "$UBUNTU_VERSION" == "24.04" ]]; then
|
||||
local max=30 cnt=1
|
||||
while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do
|
||||
@@ -93,7 +149,7 @@ check_python() {
|
||||
|
||||
# Установка зависимостей VPN-бота
|
||||
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
|
||||
@@ -105,12 +161,11 @@ install_and_configure_needrestart() {
|
||||
|
||||
# Клонирование репозитория
|
||||
clone_repository() {
|
||||
# Если скрипт запущен внутри клонированного репозитория, пропускаем
|
||||
if [[ -d ".git" ]]; then
|
||||
echo -e "${YELLOW}Репозиторий уже присутствует, пропускаем клонирование...${NC}"
|
||||
return
|
||||
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; }
|
||||
}
|
||||
|
||||
@@ -165,18 +220,11 @@ EOF
|
||||
|
||||
# Проверка и применение обновлений
|
||||
check_updates() {
|
||||
cd amnezia-bot || return 1
|
||||
local out err
|
||||
out=$(mktemp); err=$(mktemp)
|
||||
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
|
||||
if [[ ! -d "amnezia-bot/.git" ]]; then
|
||||
echo -e "${RED}Репозиторий не найден. Пожалуйста, установите бот сначала.${NC}"
|
||||
return 1
|
||||
fi
|
||||
echo -e "${YELLOW}Найдено обновление:${NC}\n$changes"
|
||||
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 ..
|
||||
check_github_updates
|
||||
}
|
||||
|
||||
# Удаление AmneziaWG
|
||||
@@ -194,7 +242,7 @@ service_control_menu() {
|
||||
while true; do
|
||||
echo -e "\n${BLUE}Управление службой${NC}"
|
||||
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
|
||||
case $act in
|
||||
1) run_with_spinner "Остановка" "sudo systemctl stop $SERVICE_NAME -q" ;;
|
||||
@@ -202,7 +250,8 @@ service_control_menu() {
|
||||
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" ;;
|
||||
5) remove_amneziawg ;;
|
||||
6) break ;;
|
||||
6) check_updates ;;
|
||||
7) break ;;
|
||||
*) echo "Неверно" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
Ссылка в новой задаче
Block a user