Files
cAIc/scripts/nuclear-clean.sh
T

126 lines
3.8 KiB
Bash

#!/usr/bin/env bash
# cAIc — nuclear clean uninstall
# Removes every trace of cAIc: bare-metal systemd install AND Docker stack.
# Prompts for each step. Use -y to skip ALL prompts (fully automatic).
# Use with extreme caution — will delete data and model files.
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SKIP=false
[ "${1:-}" = "-y" ] && SKIP=true
prompt_yn() {
if $SKIP; then return 0; fi
local msg=$1; local default=${2:-n}
if [[ "$default" == "y" ]]; then
read -p "$msg [Y/n] " r; [[ -z "$r" || "$r" =~ ^[Yy] ]]
else
read -p "$msg [y/N] " r; [[ "$r" =~ ^[Yy] ]]
fi
}
warn() { echo -e "${YELLOW}$1${NC}"; }
if ! $SKIP; then
echo ""
echo "${RED}================================================${NC}"
echo "${RED} cAIc NUCLEAR CLEAN - removes all traces${NC}"
echo "${RED} This will delete data, models, and the app.${NC}"
echo "${RED}================================================${NC}"
echo ""
echo "cAIc NUCLEAR CLEAN"
echo "=================="
read -p "Type 'yes' to continue: " confirm
if [ "$confirm" != "yes" ]; then
echo "Aborted."
exit 1
else
SKIP=true
fi
fi
if ! $SKIP; then
prompt_yn "Run nuclear clean?" y || { echo "Aborted."; exit 0; }
fi
echo ""
echo "========== PART 1: Docker stack =========="
if command -v docker &>/dev/null; then
# Stop all cAIc-related containers
docker compose down 2>/dev/null || docker-compose down 2>/dev/null || echo " no compose stack running"
docker ps --filter name=cai[c] --filter name=searxng --filter name=qdrant --filter name=rabbit --filter name=llama-server --filter name=ollama --filter name=caic -aq 2>/dev/null \
| xargs -r docker rm -f 2>/dev/null || true
docker volume rm caic_data caic_uploads searxng_config qdrant_storage rabbitmq_data ollama_models 2>/dev/null || echo " volumes already gone"
docker rmi caic:latest 2>/dev/null || echo " caic image already gone"
echo " Docker stack removed"
else
echo " Docker not installed — skipping"
fi
echo ""
echo "========== PART 2: Systemd service ========="
SERVICE_FILE="/etc/systemd/system/caic.service"
if [ -f "$SERVICE_FILE" ]; then
stop caic 2>/dev/null || true
systemctl disable caic 2>/dev/null || true
rm -f "$SERVICE_FILE"
systemctl daemon-reload
echo " systemd service removed"
else
echo " no systemd service found"
fi
echo ""
echo "========== PART 3: Install directory ========"
for dir in /opt/caic /var/lib/caic; do
if [ -d "$dir" ]; then
rm -rf "$dir"
echo " Removed: $dir"
else
echo " Skipped: $dir"
fi
done
echo ""
echo "========== PART 4: Config and state files ========"
for f in \
/home/gramps/.caic_amqp_secret \
hardware_state.json \
setup.log \
.env; do
rm -f "$f" 2>/dev/null || true
done
echo " Config/state files cleaned"
echo ""
echo "========== PART 5: Temp data ==========="
rm -rf /tmp/caic_uploads 2>/dev/null || true
echo " Temp data cleaned"
echo ""
echo "========== PART 6: User data (prompt each) ========="
if prompt_yn "Remove the repository (current dir)?" n; then
cd ..
rm -rf "$SCRIPT_DIR"
echo " Repository removed"
else
echo " Repository preserved"
fi
echo ""
echo "${GREEN}cAIc nuclear clean complete.${NC}"
echo ""
echo "Manually verify:"
echo " - ls /opt/caic/"
echo " - ls /etc/systemd/system/caic*"
echo " - docker images | grep -E \"caic|searx|qdrant|rabbit|llama|ollama\""
echo " - docker ps -a"
echo ""
echo "To remove Docker Engine itself:"
echo " sudo apt remove docker.io containerd runc"
echo " sudo rm -rf /var/lib/docker"
echo ""
echo "To remove python packages:"
echo " pip uninstall fastapi uvicorn httpx psutil jinja2 python-multipart pypdf aio-pika"