#!/bin/bash

# 脚本名称: ctyunos_deepseek.sh
# 功能：自动检查系统类型，检测是否已安装Ollama，安装必要软件、配置Ollama服务，安装并运行指定的DeepSeek模型
# 增加网络检测功能，提升脚本健壮性

# 系统类型检查
check_system() {
    if grep -q "ctyunos" /etc/os-release; then
        echo "当前系统为 CTyunOS，继续安装..."
    else
        echo "错误：当前系统不是 CTyunOS，脚本仅支持 CTyunOS 系统！"
        exit 1
    fi
}

# 检查Ollama是否已安装
check_ollama_installed() {
    if which ollama &>/dev/null; then
        echo "检测到 Ollama 已安装，跳过安装步骤。"
        return 0
    else
        echo "未检测到 Ollama，继续安装..."
        return 1
    fi
}

# 检查网络连接
check_network() {
    echo "正在检测网络连接..."
    if curl -I -m 5 https://ollama.com &>/dev/null; then
        echo "网络连接正常！"
        return 0
    else
        echo "网络连接失败，无法连接到https://ollama.com ，请检查网络设置或联系管理员解决！"
        exit 1
    fi
}

# 帮助说明
show_help() {
    echo "使用方法: $0 [选项]"
    echo "选项:"
    echo "  --install          安装必要软件和Ollama，配置Ollama服务"
    echo "  --run <模型编号>   运行指定的DeepSeek模型"
    echo "  --help             显示帮助信息"
    echo ""
    echo "模型编号:"
    echo "  1. 1.5B Qwen DeepSeek R1"
    echo "  2. 7B Qwen DeepSeek R1"
    echo "  3. 8B Llama DeepSeek R1"
    echo "  4. 14B Qwen DeepSeek R1"
    echo "  5. 32B Qwen DeepSeek R1"
    echo "  6. 70B Llama DeepSeek R1"
    echo ""
    echo "示例:"
    echo "  $0 --install         # 安装环境和配置服务"
    echo "  $0 --run 1           # 运行1.5B Qwen DeepSeek R1模型"
    exit 1
}

# 步骤1：安装必要软件
install_software() {
    echo "正在安装必要软件：python3, python3-pip, git, curl..."
    yum install python3 python3-pip git curl -y
    if [ $? -ne 0 ]; then
        echo "软件安装失败，请检查网络或权限！"
        exit 1
    fi
    echo "必要软件安装完成！"
}

# 步骤2：安装Ollama
install_ollama() {
    echo "正在安装Ollama..."
    if ! curl -fsSL https://ollama.com/install.sh | sh; then
        echo "Ollama安装失败，无法连接到 github.com ,请检查网络连接或联系管理员解决！"
        exit 1
    fi
    echo "Ollama安装完成！"
}

# 步骤3：配置Ollama服务支持外部IP访问
configure_ollama() {
    echo "正在配置Ollama服务支持外部IP访问..."
    OLLAMA_SERVICE_FILE="/etc/systemd/system/ollama.service"
    if [ -f "$OLLAMA_SERVICE_FILE" ]; then
        # 在Service块中追加配置
        sed -i '/\[Service\]/a Environment="OLLAMA_HOST=0.0.0.0"\nEnvironment="OLLAMA_ORIGINS=*"' "$OLLAMA_SERVICE_FILE"
        echo "Ollama服务文件配置完成！"
    else
        echo "未找到Ollama服务文件，配置失败！"
        exit 1
    fi
}

# 步骤4：启动Ollama服务
start_ollama() {
    echo "正在启动Ollama服务..."
    systemctl daemon-reload
    systemctl enable ollama
    systemctl start ollama
    if systemctl is-active --quiet ollama; then
        echo "Ollama服务启动成功！"
    else
        echo "Ollama服务启动失败，请检查日志！"
        exit 1
    fi

    echo "正在检查Ollama端口（11434）是否监听..."
    if ! netstat -tulpn | grep 11434; then
        echo "Ollama端口未监听，请检查服务状态！"
        exit 1
    fi
    echo "Ollama端口监听正常！"
}

# 步骤5：安装指定的DeepSeek模型
install_deepseek() {
    echo "请选择要安装的DeepSeek模型："
    echo "1. 极简版: 1.5B Qwen DeepSeek R1"
    echo "2. 入门版: 7B Qwen DeepSeek R1"
    echo "3. 专业版: 8B Llama DeepSeek R1"
    echo "4. 进阶版: 14B Qwen DeepSeek R1"
    echo "5. 专家版: 32B Qwen DeepSeek R1"
    echo "6. 大师级: 70B Llama DeepSeek R1"

    read -p "请输入对应的编号 (1-6): " choice

    case $choice in
        1)
            echo "正在下载 极简版: 1.5B Qwen DeepSeek R1..."
            if ! ollama run deepseek-r1:1.5b; then
                echo "模型下载失败，无法连接到github.com ,请检查网络连接或联系管理员解决！"
                exit 1
            fi
            ;;
        2)
            echo "正在下载 入门版: 7B Qwen DeepSeek R1..."
            if ! ollama run deepseek-r1:7b; then
                echo "模型下载失败，无法连接到github.com ,请检查网络连接或联系管理员解决！"
                exit 1
            fi
            ;;
        3)
            echo "正在下载 专业版: 8B Llama DeepSeek R1..."
            if ! ollama run deepseek-r1:8b; then
                echo "模型下载失败，无法连接到github.com ,请检查网络连接或联系管理员解决！"
                exit 1
            fi
            ;;
        4)
            echo "正在下载 进阶版: 14B Qwen DeepSeek R1..."
            if ! ollama run deepseek-r1:14b; then
                echo "模型下载失败，无法连接到github.com ,请检查网络连接或联系管理员解决！"
                exit 1
            fi
            ;;
        5)
            echo "正在下载 专家版: 32B Qwen DeepSeek R1..."
            if ! ollama run deepseek-r1:32b; then
                echo "模型下载失败，无法连接到github.com ,请检查网络连接或联系管理员解决！"
                exit 1
            fi
            ;;
        6)
            echo "正在下载 大师级: 70B Llama DeepSeek R1..."
            if ! ollama run deepseek-r1:70b; then
                echo "模型下载失败，无法连接到github.com ,请检查网络连接或联系管理员解决！"
                exit 1
            fi
            ;;
        *)
            echo "无效的选择，请输入1到6之间的数字。"
            exit 1
            ;;
    esac
}

# 步骤6：运行指定的DeepSeek模型
run_deepseek() {
    local model_num=$1
    case $model_num in
        1)
            echo "正在运行 极简版: 1.5B Qwen DeepSeek R1..."
            ollama run deepseek-r1:1.5b
            ;;
        2)
            echo "正在运行 入门版: 7B Qwen DeepSeek R1..."
            ollama run deepseek-r1:7b
            ;;
        3)
            echo "正在运行 专业版: 8B Llama DeepSeek R1..."
            ollama run deepseek-r1:8b
            ;;
        4)
            echo "正在运行 进阶版: 14B Qwen DeepSeek R1..."
            ollama run deepseek-r1:14b
            ;;
        5)
            echo "正在运行 专家版: 32B Qwen DeepSeek R1..."
            ollama run deepseek-r1:32b
            ;;
        6)
            echo "正在运行 大师级: 70B Llama DeepSeek R1..."
            ollama run deepseek-r1:70b
            ;;
        *)
            echo "无效的模型编号，请输入1到6之间的数字。"
            exit 1
            ;;
    esac
}

# 主程序逻辑
if [ $# -eq 0 ]; then
    show_help
fi

check_system
check_network

case $1 in
    --install)
        check_ollama_installed || {
            install_software
            install_ollama
            configure_ollama
            start_ollama
        }
        install_deepseek
        ;;
    --run)
        if [ -z "$2" ]; then
            echo "错误：未指定模型编号！"
            show_help
        else
            run_deepseek "$2"
        fi
        ;;
    --help)
        show_help
        ;;
    *)
        echo "错误：未知选项 '$1'！"
        show_help
        ;;
esac

