#!/bin/bash # ============================================================= # GUARDiA ITSM 제거 스크립트 (Linux) # ============================================================= # GS인증 이식성 > 설치성 요구사항 충족 # 사용법: sudo bash uninstall.sh [--purge] [--backup] # --purge : 데이터/로그까지 완전 삭제 # --backup : 삭제 전 데이터 백업 # --keep-java : Java 유지 # --keep-db : DB 데이터 유지 # ============================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" LOG_FILE="/var/log/guardia_uninstall.log" BACKUP_DIR="/var/backup/guardia_$(date +%Y%m%d_%H%M%S)" PURGE=false; DO_BACKUP=true; KEEP_JAVA=false; KEEP_DB=false while [[ $# -gt 0 ]]; do case "$1" in --purge) PURGE=true; shift ;; --no-backup) DO_BACKUP=false; shift ;; --keep-java) KEEP_JAVA=true; shift ;; --keep-db) KEEP_DB=true; shift ;; *) shift ;; esac done GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m' ok() { echo -e "${GREEN}[OK]${NC} $*" | tee -a "$LOG_FILE"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*" | tee -a "$LOG_FILE"; } fail() { echo -e "${RED}[FAIL]${NC} $*" | tee -a "$LOG_FILE"; } info() { echo -e " $*" | tee -a "$LOG_FILE"; } [[ $EUID -eq 0 ]] || { echo "root 권한으로 실행하세요: sudo bash $0"; exit 1; } echo "==================================================" echo " GUARDiA ITSM 제거" echo " 모드: $([ "$PURGE" == "true" ] && echo '완전삭제(purge)' || echo '표준제거')" echo "==================================================" # ── 1. 데이터 백업 ───────────────────────────────────────────── if [[ "$DO_BACKUP" == "true" ]]; then echo "[1/6] 데이터 백업 중..." mkdir -p "$BACKUP_DIR" # GUARDiA DB DB_FILE=$(find /opt/guardia /home -name "guardia_itsm.db" 2>/dev/null | head -1) [[ -f "$DB_FILE" ]] && cp "$DB_FILE" "$BACKUP_DIR/" && info "DB 백업: $DB_FILE" # 업로드 파일 UPLOAD_DIR=$(find /opt/guardia -name "uploads" -type d 2>/dev/null | head -1) [[ -d "$UPLOAD_DIR" ]] && cp -r "$UPLOAD_DIR" "$BACKUP_DIR/" && info "업로드 백업: $UPLOAD_DIR" # .env 설정 ENV_FILE=$(find /opt/guardia -name ".env" 2>/dev/null | head -1) [[ -f "$ENV_FILE" ]] && cp "$ENV_FILE" "$BACKUP_DIR/" && info ".env 백업" ok "백업 완료: $BACKUP_DIR" fi # ── 2. 서비스 중지 및 비활성화 ──────────────────────────────── echo "[2/6] GUARDiA 서비스 중지..." for svc in guardia-itsm scouter-server gitea tomcat9; do if systemctl is-active "$svc" &>/dev/null; then systemctl stop "$svc" 2>/dev/null && info "$svc 중지" fi if systemctl is-enabled "$svc" &>/dev/null; then systemctl disable "$svc" 2>/dev/null && info "$svc 비활성화" fi [[ -f "/etc/systemd/system/${svc}.service" ]] && \ rm -f "/etc/systemd/system/${svc}.service" && info "${svc}.service 삭제" done systemctl daemon-reload ok "서비스 제거 완료" # ── 3. Ollama 제거 ───────────────────────────────────────────── echo "[3/6] Ollama 제거..." if command -v ollama &>/dev/null; then systemctl stop ollama 2>/dev/null || true systemctl disable ollama 2>/dev/null || true rm -f /etc/systemd/system/ollama.service rm -f /usr/local/bin/ollama systemctl daemon-reload ok "Ollama 제거 완료" fi # ── 4. Gitea 제거 ────────────────────────────────────────────── echo "[4/6] Gitea 제거..." if command -v gitea &>/dev/null || [[ -f /usr/local/bin/gitea ]]; then rm -f /usr/local/bin/gitea if [[ "$PURGE" == "true" ]]; then rm -rf /var/lib/gitea /etc/gitea id git &>/dev/null && userdel git 2>/dev/null || true info "Gitea 데이터 삭제" fi ok "Gitea 제거 완료" fi # ── 5. GUARDiA 파일 제거 ────────────────────────────────────── echo "[5/6] GUARDiA 파일 제거..." # Python 가상환경 rm -rf /opt/guardia/venv info "Python 가상환경 제거" # 애플리케이션 파일 for dir in /opt/guardia/itsm /opt/guardia; do if [[ "$PURGE" == "true" ]]; then rm -rf "$dir" 2>/dev/null && info "$dir 제거" || true else # 소스/바이너리만 제거, 데이터는 유지 [[ -d "$dir" ]] && find "$dir" -name "*.py" -delete 2>/dev/null info "$dir 소스 제거 (데이터 유지)" fi done # Tomcat 제거 if [[ "$PURGE" == "true" ]]; then rm -rf /app/tomcat info "Tomcat 제거" fi # Nginx 설정 제거 if [[ -f /etc/nginx/sites-enabled/guardia ]]; then rm -f /etc/nginx/sites-enabled/guardia rm -f /etc/nginx/sites-available/guardia nginx -t 2>/dev/null && nginx -s reload 2>/dev/null || true info "Nginx 설정 제거" fi if [[ -f /etc/nginx/conf.d/guardia.conf ]]; then rm -f /etc/nginx/conf.d/guardia.conf nginx -t 2>/dev/null && nginx -s reload 2>/dev/null || true fi # Fail2ban 설정 제거 [[ -f /etc/fail2ban/jail.local ]] && rm -f /etc/fail2ban/jail.local # Logrotate 설정 제거 [[ -f /etc/logrotate.d/tomcat9 ]] && rm -f /etc/logrotate.d/tomcat9 # Java 환경변수 제거 rm -f /etc/profile.d/java.sh /etc/profile.d/maven.sh info "Java 환경변수 제거" # opsagent 계정 제거 if [[ "$PURGE" == "true" ]]; then id opsagent &>/dev/null && userdel opsagent 2>/dev/null && info "opsagent 계정 제거" id tomcat &>/dev/null && userdel tomcat 2>/dev/null && info "tomcat 계정 제거" fi # Java 제거 (선택) if [[ "$KEEP_JAVA" == "false" && "$PURGE" == "true" ]]; then if command -v apt-get &>/dev/null; then apt-get remove -y openjdk-17-jdk 2>/dev/null || true apt-get autoremove -y 2>/dev/null || true info "OpenJDK 17 제거" elif command -v dnf &>/dev/null; then dnf remove -y java-17-openjdk 2>/dev/null || true info "OpenJDK 17 제거" fi fi ok "GUARDiA 파일 제거 완료" # ── 6. DB 제거 (purge 모드) ─────────────────────────────────── if [[ "$PURGE" == "true" && "$KEEP_DB" == "false" ]]; then echo "[6/6] 데이터베이스 제거..." # PostgreSQL 제거 if command -v psql &>/dev/null; then sudo -u postgres psql -c "DROP DATABASE IF EXISTS guardia;" 2>/dev/null sudo -u postgres psql -c "DROP USER IF EXISTS guardia;" 2>/dev/null info "PostgreSQL DB/사용자 제거" fi # SQLite 제거 find / -name "guardia_itsm.db" 2>/dev/null | xargs rm -f ok "데이터베이스 제거 완료" else echo "[6/6] 데이터베이스 유지 (--purge 옵션 없음)" fi # ── 완료 보고 ────────────────────────────────────────────────── echo "" echo "==================================================" ok "GUARDiA ITSM 제거 완료!" echo "" if [[ "$DO_BACKUP" == "true" ]]; then info "백업 위치: $BACKUP_DIR" fi if [[ "$PURGE" != "true" ]]; then info "데이터 보존: /opt/guardia (purge 원하면 --purge 옵션 추가)" fi info "로그: $LOG_FILE" echo "=================================================="