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