4.8 KiB
4.8 KiB
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. 源码运行
# 直接运行
python3 main.py
# 或使用启动脚本
./run.sh
2. 构建可执行文件
# 使用新的构建脚本
./build-compat.sh
# 或手动构建
pyinstaller -F --name "disk-manager" main.py
# 输出: dist/disk-manager
3. 安装依赖
Arch Linux
sudo pacman -Sy python tk parted mdadm lvm2
sudo pacman -Sy dosfstools e2fsprogs xfsprogs ntfs-3g
pip3 install pexpect
CentOS 8 / RHEL 8
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,进行了以下修改:
- system_info.py - 使用
stdout=subprocess.PIPE代替capture_output=True - platform_compat.py - 同上处理
- system_compat.py - 手动解码字节到字符串
- smart_monitor.py - 为
dataclasses提供回退实现 - disk_operations_tkinter.py - 修复 f-string 中文引号问题
故障排除
问题: 无法启动 GUI
症状: 运行后没有任何窗口显示
解决:
# 检查 tkinter 是否安装
python3 -c "import tkinter; print('OK')"
# 如果没有安装
# CentOS 8:
sudo yum install python3-tkinter
# Arch Linux:
sudo pacman -S tk
问题: 无法识别磁盘
症状: 磁盘列表为空
解决:
# 检查权限
sudo python3 main.py
# 检查 lsblk
lsblk -J
问题: 缺少命令
症状: 提示缺少某些系统命令
解决:
# 安装基础工具
sudo yum install -y parted mdadm lvm2 # CentOS
# 或
sudo pacman -S parted mdadm lvm2 # Arch
开发指南
添加新的系统兼容性
- 在
platform_compat.py中添加新的 OS 类型检测 - 在
system_compat.py中添加命令兼容性处理 - 更新本文档
测试兼容性
# 测试平台检测
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 操作- 其他所有原始文件
许可
与原项目相同。