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

4.8 KiB

Linux 存储管理器 - 跨平台兼容指南

概述

本项目支持 Arch LinuxCentOS/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,进行了以下修改:

  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

症状: 运行后没有任何窗口显示

解决:

# 检查 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

开发指南

添加新的系统兼容性

  1. platform_compat.py 中添加新的 OS 类型检测
  2. system_compat.py 中添加命令兼容性处理
  3. 更新本文档

测试兼容性

# 测试平台检测
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 操作
  • 其他所有原始文件

许可

与原项目相同。