#!/bin/bash # 3588AdminBackend 环境检查脚本 # 用于检查目标系统是否满足运行要求 echo "========== 3588AdminBackend 环境检查 ==========" echo "" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' PASS=0 FAIL=0 WARN=0 check_pass() { echo -e "${GREEN}✓${NC} $1" ((PASS++)) } check_fail() { echo -e "${RED}✗${NC} $1" ((FAIL++)) } check_warn() { echo -e "${YELLOW}⚠${NC} $1" ((WARN++)) } # 1. 检查操作系统 echo "[系统信息]" echo " 主机名: $(hostname)" if [ -f /etc/os-release ]; then . /etc/os-release echo " 操作系统: $NAME $VERSION" if [[ "$NAME" == *"Ubuntu"* ]] && [[ "$VERSION_ID" == "22.04" ]]; then check_pass "Ubuntu 22.04 detected" else check_warn "非 Ubuntu 22.04,可能兼容但未经测试" fi else check_warn "无法检测操作系统版本" fi # 2. 检查架构 echo "" echo "[硬件信息]" ARCH=$(uname -m) echo " 架构: $ARCH" if [ "$ARCH" = "x86_64" ]; then check_pass "x86_64 架构" elif [ "$ARCH" = "aarch64" ]; then check_warn "ARM64 架构,请使用 ARM64 版本二进制" else check_warn "未知架构: $ARCH" fi echo " CPU: $(nproc) 核" echo " 内存: $(free -h | awk '/^Mem:/ {print $2}')" # 3. 检查网络工具 echo "" echo "[网络工具]" if command -v curl >/dev/null 2>&1; then check_pass "curl 已安装" else check_warn "curl 未安装 (建议使用: apt-get install curl)" fi if command -v wget >/dev/null 2>&1; then check_pass "wget 已安装" else check_warn "wget 未安装" fi if command -v netstat >/dev/null 2>&1 || command -v ss >/dev/null 2>&1; then check_pass "网络工具(netstat/ss)已安装" else check_warn "建议安装 net-tools 或 iproute2" fi # 4. 检查端口占用 echo "" echo "[端口检查]" PORT_18080=false PORT_35688=false if command -v ss >/dev/null 2>&1; then PORT_18080=$(ss -tln | grep -q ':18080 ' && echo true || echo false) PORT_35688=$(ss -uln | grep -q ':35688 ' && echo true || echo false) elif command -v netstat >/dev/null 2>&1; then PORT_18080=$(netstat -tln 2>/dev/null | grep -q ':18080 ' && echo true || echo false) PORT_35688=$(netstat -uln 2>/dev/null | grep -q ':35688 ' && echo true || echo false) fi if [ "$PORT_18080" = true ]; then check_warn "端口 18080 已被占用" else check_pass "端口 18080 可用" fi if [ "$PORT_35688" = true ]; then check_warn "端口 35688 已被占用" else check_pass "端口 35688 可用" fi # 5. 检查防火墙 echo "" echo "[防火墙]" if command -v ufw >/dev/null 2>&1; then UFW_STATUS=$(ufw status 2>/dev/null | grep -i status | awk '{print $2}') echo " UFW 状态: $UFW_STATUS" if [ "$UFW_STATUS" = "active" ]; then if ufw status | grep -q '18080'; then check_pass "UFW 已开放 18080 端口" else check_warn "UFW 已启用但未开放 18080 端口" echo " 建议执行: sudo ufw allow 18080/tcp" fi if ufw status | grep -q '35688'; then check_pass "UFW 已开放 35688 端口" else check_warn "UFW 已启用但未开放 35688 端口" echo " 建议执行: sudo ufw allow 35688/udp" fi fi elif command -v firewall-cmd >/dev/null 2>&1; then check_warn "检测到 firewalld,请手动配置端口" else echo " 未检测到防火墙" fi # 6. 检查磁盘空间 echo "" echo "[磁盘空间]" DISK_AVAIL=$(df -BG /opt 2>/dev/null | tail -1 | awk '{print $4}' | tr -d 'G') if [ -z "$DISK_AVAIL" ]; then DISK_AVAIL=$(df -BG / 2>/dev/null | tail -1 | awk '{print $4}' | tr -d 'G') fi if [ "$DISK_AVAIL" -ge 1 ]; then check_pass "磁盘空间充足 (${DISK_AVAIL}G 可用)" else check_warn "磁盘空间不足 (${DISK_AVAIL}G 可用,建议至少 1GB)" fi # 7. 检查权限 echo "" echo "[权限检查]" if [ "$EUID" -eq 0 ]; then check_pass "当前为 root 用户" else check_warn "当前非 root 用户,安装需要 root 权限" fi # 8. 检查 Python(用于配置验证) echo "" echo "[其他工具]" if command -v python3 >/dev/null 2>&1; then check_pass "Python3 已安装 ($(python3 --version))" else check_warn "Python3 未安装 (用于配置验证)" fi if command -v jq >/dev/null 2>&1; then check_pass "jq 已安装 (JSON 处理工具)" else echo " jq 未安装 (可选,用于 JSON 处理)" fi # 总结 echo "" echo "========== 检查总结 ==========" echo -e "通过: ${GREEN}$PASS${NC} 警告: ${YELLOW}$WARN${NC} 失败: ${RED}$FAIL${NC}" echo "" if [ $FAIL -gt 0 ]; then echo -e "${RED}环境检查未通过,请解决上述问题后再安装${NC}" exit 1 elif [ $WARN -gt 0 ]; then echo -e "${YELLOW}环境基本满足,但有一些警告需要注意${NC}" exit 0 else echo -e "${GREEN}环境检查全部通过,可以安装${NC}" exit 0 fi