From ea6400540cc039c5d16ca84006da3cbc782a4164 Mon Sep 17 00:00:00 2001 From: anten-ka Date: Fri, 6 Mar 2026 19:04:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=83=D0=BD=D0=BA=D1=82=207:=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=BE=D0=B5=20=D0=BC=D0=B5=D0=BD=D1=8E=20?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20(=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=D0=B5=D0=B9=D0=BD=D0=B5=D1=80=20=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=B9=D0=BD=D0=B5=D1=80?= =?UTF-8?q?+Docker),=202=20=D0=BF=D0=BE=D0=B4=D1=82=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- install.sh | 209 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 198 insertions(+), 11 deletions(-) diff --git a/install.sh b/install.sh index f161a92..9f85105 100644 --- a/install.sh +++ b/install.sh @@ -929,6 +929,202 @@ install_bot_deps() { echo -e " ${GREEN}✓${NC} Зависимости установлены" } +# ── 7) Полное меню удаления ──────────────────────────────────────────────────── +menu_remove() { + clear + echo -e "${RED}╔══════════════════════════════════════════════════════════════╗${NC}" + echo -e "${RED}║ УДАЛЕНИЕ КОМПОНЕНТОВ ║${NC}" + echo -e "${RED}╚══════════════════════════════════════════════════════════════╝${NC}" + echo "" + echo -e " ${YELLOW}1)${NC} Удалить только контейнер MTProxy" + echo -e " (Docker и другие контейнеры останутся)" + echo "" + echo -e " ${RED}2)${NC} Удалить контейнер MTProxy + Docker полностью" + echo -e " ${RED}⚠ ВСЕ контейнеры и образы будут уничтожены!${NC}" + echo "" + echo -e " ${WHITE}0)${NC} Назад" + echo "" + local choice + read -p " Выбор: " choice + + case $choice in + 1) remove_container_only ;; + 2) remove_with_docker ;; + *) return ;; + esac +} + +remove_container_only() { + clear + echo -e "${YELLOW}╔══════════════════════════════════════════════════════════════╗${NC}" + echo -e "${YELLOW}║ Удаление контейнера MTProxy ║${NC}" + echo -e "${YELLOW}╚══════════════════════════════════════════════════════════════╝${NC}" + echo "" + echo -e " Будет удалено:" + echo -e " • Контейнер ${WHITE}$CONTAINER_NAME${NC}" + echo -e " • Telegram-бот (сервис ${WHITE}$SERVICE_NAME${NC})" + echo -e " • Файлы бота (${WHITE}$BOT_DIR${NC})" + echo -e " • Скрипт ${WHITE}/usr/local/bin/gotelegram${NC}" + echo "" + echo -e " Docker и другие контейнеры ${GREEN}НЕ будут затронуты${NC}." + echo "" + + # Подтверждение 1 + local yn + read -p " Вы уверены? (y/N): " yn + if [ "$yn" != "y" ] && [ "$yn" != "Y" ]; then + echo -e " ${GREEN}Отменено.${NC}" + read -p " Нажмите Enter..." + return + fi + + # Подтверждение 2 — случайное слово + local words=("УДАЛИТЬ" "СТЕРЕТЬ" "ПРОКСИ" "ОЧИСТКА" "ФИНАЛ" "СБРОС") + local confirm_word="${words[$((RANDOM % ${#words[@]}))]}" + echo "" + echo -e " ${RED}Для подтверждения введите слово:${NC} ${WHITE}${confirm_word}${NC}" + local input_word + read -p " >>> " input_word + if [ "$input_word" != "$confirm_word" ]; then + echo -e " ${GREEN}Слово не совпало. Удаление отменено.${NC}" + read -p " Нажмите Enter..." + return + fi + + echo "" + # Удаление + spinner_start "Остановка и удаление контейнера..." + docker stop "$CONTAINER_NAME" &>/dev/null + docker rm "$CONTAINER_NAME" &>/dev/null + spinner_stop + echo -e " ${GREEN}✓${NC} Контейнер удалён" + + spinner_start "Остановка Telegram-бота..." + systemctl stop "$SERVICE_NAME" 2>/dev/null + systemctl disable "$SERVICE_NAME" 2>/dev/null + rm -f "/etc/systemd/system/${SERVICE_NAME}.service" + systemctl daemon-reload 2>/dev/null + spinner_stop + echo -e " ${GREEN}✓${NC} Сервис бота удалён" + + rm -rf "$BOT_DIR" + echo -e " ${GREEN}✓${NC} Файлы бота удалены" + + rm -f /usr/local/bin/gotelegram + echo -e " ${GREEN}✓${NC} Скрипт gotelegram удалён" + + echo "" + echo -e "${GREEN}══════════════════════════════════════════════════${NC}" + echo -e "${GREEN} Удаление завершено. Docker остался на месте.${NC}" + echo -e "${GREEN}══════════════════════════════════════════════════${NC}" + read -p " Нажмите Enter..." +} + +remove_with_docker() { + clear + echo -e "${RED}╔══════════════════════════════════════════════════════════════╗${NC}" + echo -e "${RED}║ ⚠ ПОЛНОЕ УДАЛЕНИЕ: MTProxy + Docker + всё ⚠ ║${NC}" + echo -e "${RED}╚══════════════════════════════════════════════════════════════╝${NC}" + echo "" + echo -e " ${RED}ВНИМАНИЕ! Будет удалено ВСЁ:${NC}" + echo -e " • Контейнер ${WHITE}$CONTAINER_NAME${NC}" + echo -e " • Telegram-бот и файлы" + echo -e " • Скрипт gotelegram" + echo -e " • ${RED}Docker Engine полностью${NC}" + echo -e " • ${RED}ВСЕ Docker-контейнеры, образы и тома${NC}" + echo "" + + # Показываем что ещё есть в Docker + local other_containers + other_containers=$(docker ps -a --format '{{.Names}}\t{{.Image}}\t{{.Status}}' 2>/dev/null | grep -v "^${CONTAINER_NAME}") + if [ -n "$other_containers" ]; then + echo -e " ${RED}⚠ На сервере есть ДРУГИЕ контейнеры, которые тоже будут уничтожены:${NC}" + echo -e " ${RED}────────────────────────────────────────────────────────────────${NC}" + echo "$other_containers" | while IFS= read -r line; do + echo -e " ${WHITE}$line${NC}" + done + echo -e " ${RED}────────────────────────────────────────────────────────────────${NC}" + echo "" + fi + + # Подтверждение 1 + local yn + echo -e " ${RED}Это действие НЕОБРАТИМО.${NC}" + read -p " Вы точно уверены? (y/N): " yn + if [ "$yn" != "y" ] && [ "$yn" != "Y" ]; then + echo -e " ${GREEN}Отменено.${NC}" + read -p " Нажмите Enter..." + return + fi + + # Подтверждение 2 — случайное слово + local words=("УНИЧТОЖИТЬ" "ПОЛНЫЙ-СБРОС" "СТЕРЕТЬ-ВСЁ" "ПОДТВЕРЖДАЮ" "DOCKER-УДАЛИТЬ" "ТОЧНО-ДА") + local confirm_word="${words[$((RANDOM % ${#words[@]}))]}" + echo "" + echo -e " ${RED}████████████████████████████████████████████████████████████${NC}" + echo -e " ${RED}██${NC} Для подтверждения введите: ${WHITE}${confirm_word}${NC}" + echo -e " ${RED}████████████████████████████████████████████████████████████${NC}" + local input_word + read -p " >>> " input_word + if [ "$input_word" != "$confirm_word" ]; then + echo -e " ${GREEN}Слово не совпало. Удаление отменено.${NC}" + read -p " Нажмите Enter..." + return + fi + + echo "" + # Удаление MTProxy + spinner_start "Удаление контейнера MTProxy..." + docker stop "$CONTAINER_NAME" &>/dev/null + docker rm "$CONTAINER_NAME" &>/dev/null + spinner_stop + echo -e " ${GREEN}✓${NC} Контейнер MTProxy удалён" + + # Удаление бота + spinner_start "Удаление Telegram-бота..." + systemctl stop "$SERVICE_NAME" 2>/dev/null + systemctl disable "$SERVICE_NAME" 2>/dev/null + rm -f "/etc/systemd/system/${SERVICE_NAME}.service" + systemctl daemon-reload 2>/dev/null + rm -rf "$BOT_DIR" + spinner_stop + echo -e " ${GREEN}✓${NC} Telegram-бот удалён" + + # Удаление всех контейнеров Docker + spinner_start "Остановка всех контейнеров Docker..." + docker stop $(docker ps -aq) &>/dev/null + docker rm $(docker ps -aq) &>/dev/null + spinner_stop + echo -e " ${GREEN}✓${NC} Все контейнеры остановлены и удалены" + + # Удаление Docker + spinner_start "Удаление Docker Engine..." + systemctl stop docker 2>/dev/null + if command -v apt-get &>/dev/null; then + apt-get purge -y -qq docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 2>/dev/null + apt-get autoremove -y -qq 2>/dev/null + elif command -v dnf &>/dev/null; then + dnf remove -y docker-ce docker-ce-cli containerd.io 2>/dev/null + elif command -v yum &>/dev/null; then + yum remove -y docker-ce docker-ce-cli containerd.io 2>/dev/null + fi + rm -rf /var/lib/docker /var/lib/containerd /etc/docker + spinner_stop + echo -e " ${GREEN}✓${NC} Docker полностью удалён" + + # Удаление скрипта + rm -f /usr/local/bin/gotelegram + echo -e " ${GREEN}✓${NC} Скрипт gotelegram удалён" + + echo "" + echo -e "${GREEN}══════════════════════════════════════════════════${NC}" + echo -e "${GREEN} Полное удаление завершено.${NC}" + echo -e "${GREEN}══════════════════════════════════════════════════${NC}" + echo -e " Для повторной установки используйте команду curl." + read -p " Нажмите Enter для выхода..." + exit 0 +} + # ── Выход ──────────────────────────────────────────────────────────────────── show_exit() { clear @@ -983,7 +1179,7 @@ while true; do echo -e " ${GREEN}4)${NC} Перезапустить прокси" echo -e " ${GREEN}5)${NC} Логи прокси" echo -e " ${YELLOW}6)${NC} Показать PROMO" - echo -e " ${RED}7)${NC} Удалить прокси" + echo -e " ${RED}7)${NC} Удалить (полное меню удаления)" echo -e " ${WHITE}0)${NC} Выход" echo "" read -p " Пункт: " m_idx @@ -1008,16 +1204,7 @@ while true; do read -p "Нажмите Enter..." ;; 6) show_promo ;; - 7) - if proxy_is_running; then - docker stop "$CONTAINER_NAME" &>/dev/null - docker rm "$CONTAINER_NAME" &>/dev/null - echo -e "${GREEN}Прокси удалён.${NC}" - else - echo -e "${YELLOW}Прокси не был запущен.${NC}" - fi - read -p "Нажмите Enter..." - ;; + 7) menu_remove ;; 0) show_exit ;; *) echo -e "${RED}Неверный ввод.${NC}" ;; esac