#!/bin/bash # 设置错误时立即退出 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查Windows版本 check_windows_version() { log_info "检查Windows版本..." # 获取Windows版本 windows_version=$(wsl --version 2>/dev/null || echo "WSL未安装") if [[ $windows_version == "WSL未安装" ]]; then log_error "未检测到WSL,请先安装WSL" return 1 fi # 检查Windows版本号 if [[ $(uname -r) =~ Microsoft ]]; then log_info "当前运行在WSL环境中" else log_error "当前不在WSL环境中" return 1 fi log_info "Windows版本信息:" echo "$windows_version" } # 检查WSL版本 check_wsl_version() { log_info "检查WSL版本..." # 获取WSL版本 wsl_version=$(wsl -l -v) # 检查是否使用WSL2 if echo "$wsl_version" | grep -q "VERSION.*2"; then log_info "WSL2已安装并启用" else log_error "未检测到WSL2,请升级到WSL2" return 1 fi log_info "WSL版本信息:" echo "$wsl_version" } # 检查系统要求 check_system_requirements() { log_info "检查系统要求..." # 检查内存 total_mem=$(free -h | grep Mem | awk '{print $2}') log_info "系统内存:$total_mem" # 检查磁盘空间 disk_space=$(df -h / | tail -1 | awk '{print $4}') log_info "可用磁盘空间:$disk_space" # 检查CPU cpu_info=$(lscpu | grep "Model name" | cut -f 2 -d ":" | sed 's/^[ \t]*//') log_info "CPU信息:$cpu_info" # 检查虚拟化支持 if grep -q "vmx\|svm" /proc/cpuinfo; then log_info "CPU支持虚拟化" else log_warn "CPU可能不支持虚拟化" fi } # 检查Debian版本 check_debian_version() { log_info "检查Debian版本..." # 获取Debian版本信息 debian_version=$(cat /etc/os-release | grep VERSION_CODENAME | cut -d= -f2) debian_id=$(cat /etc/os-release | grep ^ID= | cut -d= -f2) if [[ $debian_id == "debian" ]]; then log_info "当前系统:Debian $debian_version" else log_error "当前系统不是Debian" return 1 fi } # 检查系统更新 check_system_updates() { log_info "检查系统更新..." # 更新包列表 sudo apt-get update # 检查可更新的包 updates=$(apt list --upgradable 2>/dev/null | grep -v "Listing...") if [[ -n $updates ]]; then log_warn "发现可更新的包:" echo "$updates" else log_info "系统已是最新" fi } # 检查必要的系统组件 check_system_components() { log_info "检查系统组件..." # 检查必要的包 required_packages=( "curl" "wget" "git" "vim" "build-essential" "zsh" "python3" "python3-pip" "nodejs" "npm" "docker.io" "docker-compose" ) missing_packages=() for package in "${required_packages[@]}"; do if ! dpkg -l | grep -q "^ii $package "; then missing_packages+=("$package") fi done if [[ ${#missing_packages[@]} -gt 0 ]]; then log_warn "以下包未安装:" printf '%s\n' "${missing_packages[@]}" else log_info "所有必要的包已安装" fi } # 检查网络连接 check_network() { log_info "检查网络连接..." # 检查网络连接 if ping -c 1 8.8.8.8 &> /dev/null; then log_info "网络连接正常" else log_error "网络连接异常" return 1 fi # 检查DNS解析 if ping -c 1 google.com &> /dev/null; then log_info "DNS解析正常" else log_error "DNS解析异常" return 1 fi } # 检查WSL配置 check_wsl_config() { log_info "检查WSL配置..." # 检查WSL配置文件 if [ -f /etc/wsl.conf ]; then log_info "WSL配置文件存在" cat /etc/wsl.conf else log_warn "WSL配置文件不存在" fi # 检查内存限制 if grep -q "memory" /etc/wsl.conf 2>/dev/null; then log_info "WSL内存限制已配置" else log_warn "WSL内存限制未配置" fi # 检查处理器限制 if grep -q "processors" /etc/wsl.conf 2>/dev/null; then log_info "WSL处理器限制已配置" else log_warn "WSL处理器限制未配置" fi } # 主函数 main() { log_info "开始检查WSL2环境..." # 检查Windows版本 check_windows_version # 检查WSL版本 check_wsl_version # 检查系统要求 check_system_requirements # 检查Debian版本 check_debian_version # 检查系统更新 check_system_updates # 检查必要的系统组件 check_system_components # 检查网络连接 check_network # 检查WSL配置 check_wsl_config log_info "WSL2环境检查完成!" log_info "如果发现任何问题,请按照提示进行修复。" } # 执行主函数 main