# Linux 存储管理器 - 跨平台兼容指南 ## 概述 本项目支持 **Arch Linux** 和 **CentOS/RHEL 8** 两大平台,统一使用 **Tkinter** 作为 GUI 后端,确保跨平台一致性。 ## 平台支持 | 平台 | Python版本 | GUI后端 | 状态 | |------|-----------|---------|------| | Arch Linux | 3.7+ | Tkinter | ✓ 完全支持 | | CentOS 8 | 3.6 | Tkinter | ✓ 完全支持 | | CentOS 8 Stream | 3.9+ | Tkinter | ✓ 完全支持 | | RHEL 8 | 3.6 | Tkinter | ✓ 完全支持 | | Ubuntu/Debian | 3.x | Tkinter | ✓ 支持 | ## 为什么使用 Tkinter? - **Python 内置**: 无需额外安装,减小打包体积 - **跨版本兼容**: 支持 Python 3.6+,包括 CentOS 8 - **跨发行版**: 所有 Linux 发行版都原生支持 - **打包稳定**: PyInstaller 处理更可靠 ## 新文件说明 ### 兼容性模块 - **`platform_compat.py`** - 平台检测模块 - 自动检测操作系统类型 - 检查系统前提条件 - 提供安装指南 - **`system_compat.py`** - 系统命令兼容性模块 - 处理不同系统版本的命令差异 - 支持 lsblk JSON/普通输出解析 - 支持 LVM JSON/普通输出解析 ### 入口文件 - **`main.py`** - 统一入口点 - 使用 Tkinter 后端 - 显示友好的错误提示 - 支持命令行和图形错误显示 ### 构建脚本 - **`build-compat.sh`** - 跨平台构建脚本 - 自动检测系统并安装依赖 - 执行 PyInstaller 打包 - 创建启动脚本 - **`run.sh`** - 启动脚本 - 检测打包版本或源码版本 - 自动启动合适的入口 - **`disk-manager-compat.spec`** - PyInstaller 打包配置 - 包含 Tkinter 相关依赖 - 支持单文件打包 ## 快速开始 ### 1. 源码运行 ```bash # 直接运行 python3 main.py # 或使用启动脚本 ./run.sh ``` ### 2. 构建可执行文件 ```bash # 使用新的构建脚本 ./build-compat.sh # 或手动构建 pyinstaller -F --name "disk-manager" main.py # 输出: dist/disk-manager ``` ### 3. 安装依赖 #### Arch Linux ```bash sudo pacman -Sy python tk parted mdadm lvm2 sudo pacman -Sy dosfstools e2fsprogs xfsprogs ntfs-3g pip3 install pexpect ``` #### CentOS 8 / RHEL 8 ```bash sudo yum install -y python3 python3-tkinter parted mdadm lvm2 sudo yum install -y dosfstools e2fsprogs xfsprogs ntfs-3g pip3 install pexpect ``` ## 技术细节 ### 系统命令兼容性 | 命令 | 处理方式 | |------|---------| | lsblk | 使用 KNAME 列 (所有系统都支持) | | LVM | 自动检测 JSON 支持,否则回退到普通格式 | | mdadm | 标准命令,各系统一致 | | parted | 标准命令,各系统一致 | ### Python 3.6 兼容性修改 为支持 CentOS 8 的 Python 3.6,进行了以下修改: 1. **system_info.py** - 使用 `stdout=subprocess.PIPE` 代替 `capture_output=True` 2. **platform_compat.py** - 同上处理 3. **system_compat.py** - 手动解码字节到字符串 4. **smart_monitor.py** - 为 `dataclasses` 提供回退实现 5. **disk_operations_tkinter.py** - 修复 f-string 中文引号问题 ## 故障排除 ### 问题: 无法启动 GUI **症状**: 运行后没有任何窗口显示 **解决**: ```bash # 检查 tkinter 是否安装 python3 -c "import tkinter; print('OK')" # 如果没有安装 # CentOS 8: sudo yum install python3-tkinter # Arch Linux: sudo pacman -S tk ``` ### 问题: 无法识别磁盘 **症状**: 磁盘列表为空 **解决**: ```bash # 检查权限 sudo python3 main.py # 检查 lsblk lsblk -J ``` ### 问题: 缺少命令 **症状**: 提示缺少某些系统命令 **解决**: ```bash # 安装基础工具 sudo yum install -y parted mdadm lvm2 # CentOS # 或 sudo pacman -S parted mdadm lvm2 # Arch ``` ## 开发指南 ### 添加新的系统兼容性 1. 在 `platform_compat.py` 中添加新的 OS 类型检测 2. 在 `system_compat.py` 中添加命令兼容性处理 3. 更新本文档 ### 测试兼容性 ```bash # 测试平台检测 python3 platform_compat.py # 测试系统命令兼容性 python3 -c " from system_compat import get_system_compat compat = get_system_compat() print('lsblk JSON:', compat.supports_lsblk_json()) print('LVM JSON:', compat.supports_lvm_json()) " ``` ## 文件列表 ### 新增文件 - `main.py` - 统一入口 - `platform_compat.py` - 平台检测 - `system_compat.py` - 命令兼容 - `build-compat.sh` - 构建脚本 - `run.sh` - 启动脚本 - `disk-manager-compat.spec` - 打包配置 - `README_COMPAT.md` - 本文档 ### 修改的文件 - `system_info.py` - 使用兼容性模块 - `smart_monitor.py` - dataclass 兼容 - `disk_operations_tkinter.py` - f-string 修复 ### 保留的原文件 - `mainwindow_tkinter.py` - Tkinter 主窗口 - `disk_operations_tkinter.py` - 磁盘操作 - `lvm_operations_tkinter.py` - LVM 操作 - `raid_operations_tkinter.py` - RAID 操作 - 其他所有原始文件 ## 许可 与原项目相同。