192 lines
4.8 KiB
Bash
192 lines
4.8 KiB
Bash
#!/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
|