首页
/ Reinstall.sh 脚本深度解析:Linux/Windows系统一键重装工具

Reinstall.sh 脚本深度解析:Linux/Windows系统一键重装工具

2025-07-07 07:58:56作者:齐冠琰

概述

reinstall.sh 是一个功能强大的系统重装脚本,支持多种Linux发行版和Windows系统的自动化安装。该脚本设计精巧,能够在各种环境下稳定运行,包括物理机、虚拟机以及特殊环境如Alpine Linux等。

核心功能

1. 多系统支持

脚本支持以下主流操作系统:

  • Linux发行版:CentOS、Debian、Ubuntu、Alpine、Arch Linux等
  • Windows系统:通过指定镜像名称或ISO链接安装
  • 特殊模式:DD镜像安装和netboot.xyz网络启动

2. 安装选项配置

提供丰富的安装选项:

  • 密码设置(默认密码为123@@@)
  • SSH密钥配置
  • 端口自定义(SSH、Web、RDP等)
  • 网络配置(仅Windows支持ICMP ping)
  • 驱动添加(Windows专用)

技术实现细节

1. 环境检测与适配

脚本包含完善的环境检测机制:

  • 判断地理位置(用于选择镜像源)
  • 检测运行环境(Windows/Cygwin、Linux等)
  • 识别虚拟化环境
  • 检查CPU是否支持x86-64-v3指令集
is_in_region() {
    [ "$force_cn" = 1 ] && return 0
    # 通过访问特定URL检测地理位置
    if ! _loc=$(curl -L http://www.example.com/cdn-cgi/trace | grep '^loc='); then
        error_and_exit "Can not get location."
    fi
    [ "$_loc" = CN ]
}

2. 文件类型识别增强

脚本实现了增强的文件类型识别功能,能够准确判断各种镜像格式:

  • 支持多层压缩格式(如.tar.gz)
  • 特殊处理qcow2等虚拟磁盘格式
  • 兼容不同系统的file命令输出差异
file_enhanced() {
    # 递归解压并分析文件类型
    while true; do
        type="$(file -b $file | fix_file_type)"
        case "$type" in
        xz|gzip|zstd)
            # 解压一层后继续分析
            ;;
        *)
            break
            ;;
        esac
    done
}

3. Windows系统特殊处理

针对Windows环境提供了专门的支持:

  • 通过系统管理工具获取系统信息
  • 处理Windows路径格式
  • 支持PowerShell脚本调用
sysinfo() {
    # 封装系统信息获取命令,兼容不同实现
    if is_have_cmd wmic; then
        command wmic "$@" /format:list
    else
        # 使用PowerShell脚本替代
        powershell -File "$(cygpath -w "$tmp/sysinfo.ps1")" \
            -Namespace "$namespace" \
            -Class "$class"
    fi
}

4. 错误处理与日志记录

脚本实现了完善的错误处理机制:

  • 使用trap捕获错误并显示行号
  • 过滤日志中的敏感信息(如密码)
  • 支持重试机制(特别是网络请求)
# 错误处理函数
trap_err() {
    line_no=$1
    ret_no=$2
    error "Line $line_no return $ret_no"
    sed -n "$line_no"p "$THIS_SCRIPT"
}

# 记录日志,过滤密码信息
exec > >(tee >(grep -iv password >>/reinstall.log)) 2>&1

使用建议

  1. 网络环境:在特定地区使用时,脚本会自动选择本地镜像源加速下载

  2. 系统要求

    • 确保有足够的磁盘空间(至少1GB临时空间)
    • 推荐在物理机或KVM/Xen等完整虚拟化环境中使用
  3. Windows安装

    • 可通过--image-name指定版本
    • 支持语言包选择(如--lang=zh-cn
    • 可添加额外驱动(--add-driver
  4. 高级功能

    • 使用DD模式安装自定义镜像
    • 通过netboot.xyz实现网络启动
    • Alpine Linux实时模式支持

常见问题解决

  1. 镜像下载失败:检查网络连接,或使用--img指定备用镜像URL

  2. CPU兼容性问题:部分新版系统需要x86-64-v3指令集支持,旧CPU可能无法安装

  3. 容器环境限制:脚本不支持在容器内直接运行,需使用专用工具

  4. Windows信息获取:无系统管理工具的系统会自动使用PowerShell替代方案

总结

reinstall.sh是一个功能全面、适应性强的一键重装系统工具,其设计考虑了各种边缘情况和特殊环境。通过封装复杂的系统安装流程,它极大简化了系统部署工作,特别适合需要频繁重装系统的场景或批量部署环境。