From 8dfe31c1c5b41d312f823a2fa822f944fb48f129 Mon Sep 17 00:00:00 2001 From: ryan Date: Fri, 29 May 2026 09:13:31 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E]=20=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E6=97=A7=E7=89=88=E6=9C=AC=20agent=20=E5=8D=B8=E8=BD=BD?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/uninstall-agent-legacy.sh | 192 ++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 scripts/uninstall-agent-legacy.sh diff --git a/scripts/uninstall-agent-legacy.sh b/scripts/uninstall-agent-legacy.sh new file mode 100644 index 00000000..0da898d8 --- /dev/null +++ b/scripts/uninstall-agent-legacy.sh @@ -0,0 +1,192 @@ +#!/usr/bin/env bash +set -euo pipefail + +INSTALL_DIR="/opt/openflare-agent" +SERVICE_NAME="openflare-agent" + +usage() { + cat </dev/null | head -n 1 || true) + if [[ -z "$match" ]]; then + return 0 + fi + + printf '%s\n' "$match" | sed -E 's/.*:[[:space:]]*"([^"]*)"/\1/' +} + +AGENT_BINARY="${INSTALL_DIR}/openflare-agent" +CONFIG_FILE="${INSTALL_DIR}/agent.json" +SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service" + +OPENRESTY_PATH="" +OPENRESTY_CONTAINER_NAME="openflare-openresty" +OPENRESTY_DOCKER_IMAGE="openresty/openresty:alpine" +DOCKER_BINARY="docker" +OPENRESTY_MODE="unknown" + +if [[ -f "$CONFIG_FILE" ]]; then + OPENRESTY_PATH="$(json_get_string "$CONFIG_FILE" "openresty_path")" + OPENRESTY_CONTAINER_NAME="$(json_get_string "$CONFIG_FILE" "openresty_container_name")" + OPENRESTY_DOCKER_IMAGE="$(json_get_string "$CONFIG_FILE" "openresty_docker_image")" + DOCKER_BINARY="$(json_get_string "$CONFIG_FILE" "docker_binary")" + + if [[ -z "$OPENRESTY_CONTAINER_NAME" ]]; then + OPENRESTY_CONTAINER_NAME="openflare-openresty" + fi + if [[ -z "$OPENRESTY_DOCKER_IMAGE" ]]; then + OPENRESTY_DOCKER_IMAGE="openresty/openresty:alpine" + fi + if [[ -z "$DOCKER_BINARY" ]]; then + DOCKER_BINARY="docker" + fi + + if [[ -n "$OPENRESTY_PATH" ]]; then + OPENRESTY_MODE="local" + else + OPENRESTY_MODE="docker" + fi +fi + +SYSTEMCTL_AVAILABLE="false" +if command -v systemctl >/dev/null 2>&1; then + SYSTEMCTL_AVAILABLE="true" +fi + +echo "Uninstalling OpenFlare Agent from ${INSTALL_DIR}..." + +if [[ "$SYSTEMCTL_AVAILABLE" == "true" ]]; then + if systemctl is-active --quiet "$SERVICE_NAME"; then + echo "Stopping service: ${SERVICE_NAME}" + systemctl stop "$SERVICE_NAME" + fi + + if systemctl is-enabled --quiet "$SERVICE_NAME" >/dev/null 2>&1; then + echo "Disabling service: ${SERVICE_NAME}" + systemctl disable "$SERVICE_NAME" >/dev/null 2>&1 || true + fi +fi + +if command -v pgrep >/dev/null 2>&1; then + mapfile -t agent_pids < <(pgrep -f "$AGENT_BINARY" || true) + if (( ${#agent_pids[@]} > 0 )); then + echo "Stopping agent process: ${agent_pids[*]}" + kill "${agent_pids[@]}" || true + sleep 1 + + mapfile -t remaining_agent_pids < <(pgrep -f "$AGENT_BINARY" || true) + if (( ${#remaining_agent_pids[@]} > 0 )); then + echo "Force stopping remaining agent process: ${remaining_agent_pids[*]}" + kill -9 "${remaining_agent_pids[@]}" || true + fi + fi +fi + +if [[ -f "$SERVICE_FILE" ]]; then + echo "Removing service file: ${SERVICE_FILE}" + rm -f "$SERVICE_FILE" +fi + +if [[ "$SYSTEMCTL_AVAILABLE" == "true" ]]; then + systemctl daemon-reload || true + systemctl reset-failed "$SERVICE_NAME" >/dev/null 2>&1 || true +fi + +if [[ -d "$INSTALL_DIR" ]]; then + echo "Removing installation directory: ${INSTALL_DIR}" + rm -rf "$INSTALL_DIR" +else + echo "Installation directory not found, skipping: ${INSTALL_DIR}" +fi + +echo "Agent uninstall complete." +echo "" +echo "Checking OpenResty installation mode..." + +if [[ "$OPENRESTY_MODE" == "docker" ]]; then + echo "Detected Docker OpenResty mode." + + if ! command -v "$DOCKER_BINARY" >/dev/null 2>&1; then + echo "Docker binary '${DOCKER_BINARY}' was not found." + echo "Please remove container '${OPENRESTY_CONTAINER_NAME}' and image '${OPENRESTY_DOCKER_IMAGE}' manually." + exit 0 + fi + + if "$DOCKER_BINARY" inspect "$OPENRESTY_CONTAINER_NAME" >/dev/null 2>&1; then + if [[ -z "$OPENRESTY_DOCKER_IMAGE" ]]; then + OPENRESTY_DOCKER_IMAGE="$("$DOCKER_BINARY" inspect -f '{{.Config.Image}}' "$OPENRESTY_CONTAINER_NAME" 2>/dev/null || true)" + fi + + echo "Removing Docker container: ${OPENRESTY_CONTAINER_NAME}" + "$DOCKER_BINARY" rm -f "$OPENRESTY_CONTAINER_NAME" + else + echo "Docker container not found, skipping: ${OPENRESTY_CONTAINER_NAME}" + fi + + if [[ -n "$OPENRESTY_DOCKER_IMAGE" ]] && "$DOCKER_BINARY" image inspect "$OPENRESTY_DOCKER_IMAGE" >/dev/null 2>&1; then + other_container_ids="$("$DOCKER_BINARY" ps -a --filter "ancestor=${OPENRESTY_DOCKER_IMAGE}" --format '{{.ID}}' 2>/dev/null || true)" + if [[ -z "$other_container_ids" ]]; then + echo "Removing Docker image: ${OPENRESTY_DOCKER_IMAGE}" + if ! "$DOCKER_BINARY" image rm "$OPENRESTY_DOCKER_IMAGE"; then + echo "Image removal skipped because Docker reported it is still in use." + fi + else + echo "Docker image is still used by other containers, skipping image removal: ${OPENRESTY_DOCKER_IMAGE}" + fi + fi + + echo "Docker OpenResty cleanup complete." +elif [[ "$OPENRESTY_MODE" == "local" ]]; then + echo "Detected local OpenResty mode via openresty_path:" + echo " ${OPENRESTY_PATH}" + echo "Agent has been removed, but the local OpenResty installation was not modified." + echo "Please uninstall the local OpenResty manually if you no longer need it." +else + echo "OpenResty mode could not be determined because ${CONFIG_FILE} was not found before uninstall." + echo "If you were using Docker OpenResty, please remove its container and image manually if needed." +fi + +echo "" +echo "OpenFlare Agent uninstall finished."