Files
diskmanager2/README_COMPAT.md
2026-02-10 02:54:13 +08:00

216 lines
4.8 KiB
Markdown

# 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 操作
- 其他所有原始文件
## 许可
与原项目相同。