Files
3dp-manager/delete-custom.sh
T

246 lines
8.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
#################################
# TRAP
#################################
trap 'echo -e "\033[1;31m[ERROR]\033[0m Ошибка в строке $LINENO"; exit 1' ERR
#################################
# HELPERS
#################################
log() { echo -e "\033[1;32m[INFO]\033[0m $1"; }
warn() { echo -e "\033[1;33m[WARN]\033[0m $1"; }
die() { echo -e "\033[1;31m[ERROR]\033[0m $1"; exit 1; }
need_root() {
[[ $EUID -eq 0 ]] || die "Запускать только от root"
}
#################################
# PARSE ARGS
#################################
PROJECT_DIR="/opt/3dp-manager"
SOURCE_DIR="/opt/3dp-manager-src"
REMOVE_HYSTERIA=0
while getopts ":p:s:hH" opt; do
case "$opt" in
p) PROJECT_DIR="$OPTARG" ;;
s) SOURCE_DIR="$OPTARG" ;;
H) REMOVE_HYSTERIA=1 ;;
h)
echo "Удаление 3dp-manager (custom-ветка dp-custom)"
echo ""
echo "Использование:"
echo " delete-custom.sh [-p <project_dir>] [-s <source_dir>] [-H]"
echo ""
echo "Параметры:"
echo " -p Папка установки (по умолчанию: /opt/3dp-manager)"
echo " -s Папка исходников (по умолчанию: /opt/3dp-manager-src)"
echo " -H Удалить Hysteria 2 вместе с 3dp-manager"
echo " -h Показать эту справку"
echo ""
echo "Пример:"
echo " delete-custom.sh -H"
exit 0
;;
:) die "Параметр -$OPTARG требует значение" ;;
\?) die "Неизвестный параметр: -$OPTARG" ;;
esac
done
#################################
# CONFIRMATION
#################################
read -r -p "Вы уверены, что хотите удалить 3dp-manager (custom)? (y/n): " answer
case "$answer" in
y|Y)
log "Начинаю удаление..."
;;
*)
log "Удаление отменено"
exit 1
;;
esac
#################################
# START
#################################
need_root
log "Удаляем 3dp-manager (custom-ветка)"
#################################
# DOCKER COMPOSE DOWN
#################################
resolve_compose_cmd() {
if docker compose version >/dev/null 2>&1; then
COMPOSE_CMD=("docker" "compose")
elif command -v docker-compose >/dev/null 2>&1; then
COMPOSE_CMD=("docker-compose")
else
warn "Docker Compose не найден — пропуск"
COMPOSE_CMD=()
fi
}
resolve_compose_cmd
if [[ ${#COMPOSE_CMD[@]} -gt 0 ]]; then
# Попробуем с docker-compose.custom.yml (если есть)
if [[ -d "$PROJECT_DIR" ]] && [[ -f "$PROJECT_DIR/docker-compose.yml" ]]; then
cd "$PROJECT_DIR"
if [[ -f "$PROJECT_DIR/docker-compose.custom.yml" ]]; then
log "Останавливаем custom-контейнеры"
"${COMPOSE_CMD[@]}" -f docker-compose.yml -f docker-compose.custom.yml down --volumes --remove-orphans || warn "Ошибка при custom compose down"
else
log "Останавливаем контейнеры"
"${COMPOSE_CMD[@]}" down --volumes --remove-orphans || warn "Ошибка при docker compose down"
fi
else
# Попробуем остановить любые контейнеры 3dp-manager
running=$(docker ps --filter "name=3dp-" --format '{{.Names}}' 2>/dev/null || true)
if [[ -n "$running" ]]; then
log "Найдены запущенные контейнеры 3dp: $running"
docker stop $running || warn "Ошибка при остановке контейнеров"
docker rm $running || warn "Ошибка при удалении контейнеров"
fi
fi
fi
#################################
# CLEAN IMAGES
#################################
log "Удаляем custom-образы (если есть)"
docker images --format '{{.Repository}}:{{.Tag}}' \
| grep -E '3dp-manager-server:custom|3dp-manager-client:custom' \
| xargs -r docker rmi -f 2>/dev/null || true
log "Удаляем образы 3dp-manager (общие)"
docker images --format '{{.Repository}}:{{.Tag}}' \
| grep '3dp-manager' \
| xargs -r docker rmi -f 2>/dev/null || true
# Dangling images
docker image prune -f 2>/dev/null || true
#################################
# REMOVE HYSTERIA 2 (опционально)
#################################
if [[ $REMOVE_HYSTERIA -eq 1 ]]; then
log "Удаление Hysteria 2..."
if systemctl is-active --quiet hysteria-server 2>/dev/null; then
systemctl stop hysteria-server || warn "Ошибка при остановке hysteria-server"
systemctl disable hysteria-server || true
fi
# Удаляем systemd unit
if [[ -f /etc/systemd/system/hysteria-server.service ]]; then
rm -f /etc/systemd/system/hysteria-server.service
log "Unit hysteria-server.service удалён"
fi
# Удаляем шаблон unit'а (hysteria-server@.service)
if [[ -f /etc/systemd/system/hysteria-server@.service ]]; then
rm -f /etc/systemd/system/hysteria-server@.service
log "Unit hysteria-server@.service удалён"
fi
# Перезагружаем systemd
systemctl daemon-reload
# Удаляем бинарник
if command -v hysteria &>/dev/null; then
HYSTERIA_BIN="$(command -v hysteria)"
rm -f "$HYSTERIA_BIN"
log "Бинарник hysteria удалён: $HYSTERIA_BIN"
fi
# Удаляем конфиг и пустую директорию
if [[ -d /etc/hysteria ]]; then
rm -rf /etc/hysteria
log "Директория /etc/hysteria удалена"
fi
# Удаляем firewall правила Hysteria
if command -v ufw &>/dev/null; then
# Удаляем правило для порта 8443 (если это только Hysteria)
warn "Правила UFW для Hysteria (UDP 8443) нужно удалить вручную: sudo ufw status numbered"
fi
log "Hysteria 2 удалён"
else
warn "Hysteria 2 НЕ удалён. Для удаления: delete-custom.sh -H"
fi
#################################
# FIREWALL — удалить правила 3dp-manager
#################################
if command -v ufw &>/dev/null; then
log "Удаляем правила UFW для 3dp-manager..."
# Удаляем правила для портов 443, 8443, 10000-20000, 30000-60000 (только те, что добавлял 3dp-manager)
# Это может затронуть и другие сервисы, поэтому просто предупреждаем
warn "Правила UFW (443, 8443, 10000-60000) нужно проверить/удалить вручную:"
warn "sudo ufw status numbered"
fi
#################################
# REMOVE DIRECTORIES
#################################
log "Удаляем $PROJECT_DIR"
rm -rf "$PROJECT_DIR"
log "Удаляем $SOURCE_DIR"
rm -rf "$SOURCE_DIR"
#################################
# REMOVE SYSTEMD SERVICE (если есть)
#################################
if [[ -f /etc/systemd/system/3dp-manager.service ]]; then
systemctl stop 3dp-manager 2>/dev/null || true
systemctl disable 3dp-manager 2>/dev/null || true
rm -f /etc/systemd/system/3dp-manager.service
systemctl daemon-reload
log "Systemd unit 3dp-manager.service удалён"
fi
#################################
# REMOVE CRON ENTRIES (если есть)
#################################
# Скрипты могли добавлять cron для автоматического обновления
# Проверяем cron текущего пользователя и root
for user in root "${SUDO_USER:-}"; do
if [[ -n "$user" ]]; then
cron_jobs=$(sudo -u "$user" crontab -l 2>/dev/null | grep -v '3dp-manager' || true)
if [[ -z "$cron_jobs" ]]; then
sudo -u "$user" crontab -r 2>/dev/null || true
log "Cron jobs для $user удалены"
else
echo "$cron_jobs" | sudo -u "$user" crontab - 2>/dev/null || true
fi
fi
done
#################################
# DONE
#################################
log "✔ 3dp-manager (custom) полностью удалён"
log ""
log "Что было удалено:"
log " • Контейнеры и образы Docker"
log "$PROJECT_DIR"
log "$SOURCE_DIR"
log ""
if [[ $REMOVE_HYSTERIA -eq 1 ]]; then
log " • Hysteria 2"
else
warn " Hysteria 2 НЕ удалён (используйте -H для удаления)"
fi
warn ""
warn "Проверьте вручную:"
warn " • sudo ufw status numbered — правила firewall"
warn " • /etc/letsencrypt/live/ — SSL сертификаты (если были)"