243 lines
5.3 KiB
Bash
243 lines
5.3 KiB
Bash
#!/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 |