Этот коммит содержится в:
stevefoxru
2025-04-22 17:56:19 +03:00
коммит произвёл GitHub
родитель 985e8307a9
Коммит 996c41546e
+81 -83
Просмотреть файл
@@ -16,6 +16,74 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SCRIPT_NAME="$(basename "$0")"
SCRIPT_PATH="$SCRIPT_DIR/$SCRIPT_NAME"
# Функция проверки обновлений на GitHub
check_github_updates() {
local current_sha local_sha latest_sha auto_mode="$1"
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}"
if [[ "$auto_mode" == "--auto" ]]; then
# Проверка на наличие локальных изменений
if git status --porcelain | grep -q .; then
echo -e "${YELLOW}Обнаружены локальные изменения. Сбрасываем их...${NC}"
run_with_spinner "Сброс локальных изменений" "git reset --hard && git clean -fd"
fi
run_with_spinner "Обновление репозитория" "git pull"
if [ $? -ne 0 ]; then
echo -e "${RED}Не удалось обновить репозиторий${NC}"
cd ..; return 1
fi
echo "$latest_sha" > "$LOCAL_VERSION_FILE"
check_script_update
run_with_spinner "Перезапуск службы" "sudo systemctl restart $SERVICE_NAME -q"
else
echo -ne "${BLUE}1) Установить 2) Отменить: ${NC}"; read choice
if [[ "$choice" == "1" ]]; then
if git status --porcelain | grep -q .; then
echo -e "${YELLOW}Обнаружены локальные изменения. Сбрасываем их...${NC}"
run_with_spinner "Сброс локальных изменений" "git reset --hard && git clean -fd"
fi
run_with_spinner "Обновление репозитория" "git pull"
if [ $? -ne 0 ]; then
echo -e "${RED}Не удалось обновить репозиторий${NC}"
cd ..; return 1
fi
echo "$latest_sha" > "$LOCAL_VERSION_FILE"
check_script_update
run_with_spinner "Перезапуск службы" "sudo systemctl restart $SERVICE_NAME -q"
else
echo -e "${YELLOW}Обновление отменено${NC}"
fi
fi
cd ..
}
# Проверка и применение обновлений
check_updates() {
if [[ ! -d "amnezia-bot/.git" ]]; then
echo -e "${RED}Репозиторий не найден. Пожалуйста, установите бот сначала.${NC}"
return 1
fi
check_github_updates --auto
}
# Параметры скрипта
while [[ "$#" -gt 0 ]]; do
case $1 in
@@ -31,19 +99,6 @@ while [[ "$#" -gt 0 ]]; do
shift
done
# Получение версии Ubuntu
get_ubuntu_version() {
if command -v lsb_release &>/dev/null; then
UBUNTU_VERSION=$(lsb_release -rs)
UBUNTU_CODENAME=$(lsb_release -cs)
DISTRIB_ID=$(lsb_release -is)
[[ "$DISTRIB_ID" != "Ubuntu" ]] && { echo -e "${RED}Скрипт поддерживает только Ubuntu. Обнаружена система: $DISTRIB_ID${NC}"; exit 1; }
else
echo -e "${RED}lsb_release не установлен. Установите пакет lsb-release.${NC}"
exit 1
fi
}
# Функция запуска команд с индикатором
run_with_spinner() {
local description="$1"; shift
@@ -64,67 +119,6 @@ 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}"
# Автоматическое обновление при вызове из бота
if [[ "$1" == "--auto" ]]; then
# Проверка на наличие локальных изменений
if git status --porcelain | grep -q .; then
echo -e "${YELLOW}Обнаружены локальные изменения. Сбрасываем их...${NC}"
run_with_spinner "Сброс локальных изменений" "git reset --hard && git clean -fd"
fi
run_with_spinner "Обновление репозитория" "git pull"
if [ $? -ne 0 ]; then
echo -e "${RED}Не удалось обновить репозиторий${NC}"
cd ..; return 1
fi
echo "$latest_sha" > "$LOCAL_VERSION_FILE"
check_script_update
run_with_spinner "Перезапуск службы" "sudo systemctl restart $SERVICE_NAME -q"
else
echo -ne "${BLUE}1) Установить 2) Отменить: ${NC}"; read choice
if [[ "$choice" == "1" ]]; then
# Проверка на наличие локальных изменений
if git status --porcelain | grep -q .; then
echo -e "${YELLOW}Обнаружены локальные изменения. Сбрасываем их...${NC}"
run_with_spinner "Сброс локальных изменений" "git reset --hard && git clean -fd"
fi
run_with_spinner "Обновление репозитория" "git pull"
if [ $? -ne 0 ]; then
echo -e "${RED}Не удалось обновить репозиторий${NC}"
cd ..; return 1
fi
echo "$latest_sha" > "$LOCAL_VERSION_FILE"
check_script_update
run_with_spinner "Перезапуск службы" "sudo systemctl restart $SERVICE_NAME -q"
else
echo -e "${YELLOW}Обновление отменено${NC}"
fi
fi
cd ..
}
# Проверка обновления самого скрипта
check_script_update() {
local temp_script=$(mktemp)
@@ -144,6 +138,19 @@ check_script_update() {
fi
}
# Получение версии Ubuntu
get_ubuntu_version() {
if command -v lsb_release &>/dev/null; then
UBUNTU_VERSION=$(lsb_release -rs)
UBUNTU_CODENAME=$(lsb_release -cs)
DISTRIB_ID=$(lsb_release -is)
[[ "$DISTRIB_ID" != "Ubuntu" ]] && { echo -e "${RED}Скрипт поддерживает только Ubuntu. Обнаружена система: $DISTRIB_ID${NC}"; exit 1; }
else
echo -e "${RED}lsb_release не установлен. Установите пакет lsb-release.${NC}"
exit 1
fi
}
# Обновление и очистка системы
update_and_clean_system() {
while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do
@@ -243,15 +250,6 @@ EOF
run_with_spinner "Включение автозапуска" "sudo systemctl enable $SERVICE_NAME -q"
}
# Проверка и применение обновлений
check_updates() {
if [[ ! -d "amnezia-bot/.git" ]]; then
echo -e "${RED}Репозиторий не найден. Пожалуйста, установите бот сначала.${NC}"
return 1
fi
check_github_updates --auto
}
# Удаление AmneziaWG
remove_amneziawg() {
echo -ne "${YELLOW}Удалить AmneziaWG? (y/n): ${NC}"; read ans