Files
PVE-Tools-9/lib/CLAUDE.md
Maple 886e82f0cb refactor: 模块化重构 — 拆分 lib/ 基础设施层与 src/modules/ 功能模块
PVE-Tools.sh 从 ~14,700 行单文件重构为 150 行入口点,
所有函数按职责拆分到独立文件,通过 source 机制加载。

lib/ — 基础设施层(零业务逻辑)
  config.sh: 全局变量与常量
  core.sh: 日志、UI、确认、备份、GRUB、进度条
  network.sh: 网络检测、镜像选择
  runtime.sh: 运行时守卫、main() 入口

src/modules/ — 功能模块(10 个目录)
  01-optimization  02-sources  03-boot-kernel
  04-gpu-passthrough  05-vm-container  06-networking
  07-storage-disk  08-tools-about  09-security  10-third-party

新增 build.sh(合并编译)和 dev.sh(开发 source 入口),
release.yml 新增构建步骤,CI 适配模块化结构。
2026-07-08 11:15:59 +08:00

6.6 KiB
Raw Blame History

根目录 > lib

lib -- 基础设施层

模块职责

提供 PVE Tools Pro 全部功能模块所需的基础设施函数与全局变量零业务逻辑。按固定顺序加载config.sh -> core.sh -> network.sh -> runtime.sh。

入口与启动

项目 说明
加载方式 PVE-Tools.sh(生产)或 dev.sh(开发)按固定顺序 source
加载顺序 config.sh -> core.sh -> network.sh -> runtime.sh(严格)
对外暴露 全部函数和全局变量对后续加载的 src/modules/ 可见

文件清单

config.sh -- 全局变量与常量(约 254 行)

类别 变量 说明
版本信息 CURRENT_VERSION, BUILD_NICKNAME, VERSION_FILE_URL, UPDATE_FILE_URL, PVE_TOOLS_SCRIPT_URL 版本号、更新 URL
镜像源注册表 MIRROR_NAMES[], MIRROR_IDS[], MIRROR_DEBIAN_URIS[], MIRROR_SECURITY_URIS[], MIRROR_PVE_URIS[], MIRROR_CEPH_URIS[], MIRROR_CT_URIS[] 20+ 个镜像源(官方/阿里云/腾讯云/清华/中科大等)
镜像选择状态 MIRROR_SELECTED_DEBIAN, MIRROR_SELECTED_SECURITY, MIRROR_SELECTED_PVE, MIRROR_SELECTED_CEPH, MIRROR_SELECTED_CT 当前选中的镜像索引
网络检测 CF_TRACE_URL, GITHUB_MIRROR_PREFIX, USER_COUNTRY_CODE, NETWORK_MODE, IS_OFFLINE_MODE, USE_MIRROR_FOR_UPDATE Cloudflare 地区检测、镜像加速
URL 常量 FASTPVE_INSTALLER_URL, COOLERCONTROL_*_URL, NVIDIA_*_URL, THIRD_PARTY_*_URL 各功能的外部资源地址
路径常量 VM_CONFIG_EXPORT_DIR, VM_BACKUP_CRON_FILE, HOST_NETWORK_*_FILE, PVE_CLUSTER_FIREWALL_FILE, PVE_KVM_ROM_DIR 运行时文件路径
PVE 版本 PVE_VERSION_DETECTED, PVE_MAJOR_VERSION 运行时检测结果
安全 RISK_ACK_BYPASS, DEBUG_MODE, LEGAL_VERSION 风险控制标志

core.sh -- 核心工具函数(约 507 行)

函数 说明
setup_colors() 颜色系统初始化,支持 NO_COLOR 环境变量
log_info(), log_warn(), log_error(), log_step(), log_success(), log_tips() 统一日志(带时间戳,写入 /var/log/pve-tools.log
display_error(), display_success() 带提示的增增强错误/成功反馈
confirm_action() 通用确认提示(输入 'yes'
confirm_high_risk_action() 高风险确认(需输入指定确认词如 CONFIRM
vm_show_data_risk_banner() VM 数据风险横幅
ensure_legal_acceptance() 许可条款首次接受检查
backup_file() 配置文件备份到 /var/backups/pve-tools/
pve_tools_download_url(), pve_tools_download_file() curl/wget 封装的下载工具
pve_tools_choose_update_urls(), pve_tools_version_gt() 更新 URL 选择与版本比较
apply_block(), remove_block() 标记配置块写入/删除(# PVE-TOOLS BEGIN/END
grub_add_param(), grub_remove_param() GRUB 内核参数幂等管理
show_progress(), update_progress(), show_status(), show_progress_bar() 进度指示与状态反馈
pause_function() "按任意键继续..."
show_menu_header(), show_menu_footer(), show_menu_option() 统一菜单 UI

network.sh -- 网络基础设施(约 218 行,仅头部已读)

函数 说明
detect_network_region() Cloudflare Trace 检测用户地区CN 自动启用镜像)
fetch_session_tip() 一言 API 获取每日提示
network_show_diagnostics() 网络诊断IP/路由/DNS
network_can_access_internet(), network_offline_guard() 连通性检测与离线模式
disable_ups_service(), enable_ups_service(), show_ups_diagnostics() NUT UPS 服务管理
mirror_*() 系列函数 镜像源选择系统URI 查询、选择、重置、汇总、推荐提示)
select_mirror() 镜像统一选择入口
show_banner() 启动横幅显示

runtime.sh -- 运行时守卫与主入口(约 235 行)

函数 说明
check_root() root 权限检查
check_debug_mode() 解析 --i-know-what-i-do--debug 参数
check_packages() 依赖包检查sudo, curl
check_pve_version() PVE 版本检测(非 PVE9 环境拦截高风险操作)
block_non_pve9_destructive() 非 PVE9 环境拦截一键优化/换源/升级等破坏性操作
show_menu() 主菜单10 个功能入口 + 一言 Tips
main() 脚本主入口:权限检查 -> 许可确认 -> 调试模式 -> PVE 版本 -> 网络检测 -> 一言 -> 更新检查 -> 主循环

关键依赖与配置

  • 运行环境: Proxmox VE 9.x (Debian 13 Trixie)root 权限
  • 外部依赖: curlwget(网络操作)、sudo(权限提升)
  • 加载顺序严格: config.sh 必须先于 core.sh 加载(全局变量依赖);runtime.sh 最后加载(包含 main() 函数)
  • 全局变量: 所有以大写字母开头的变量为全局变量,src/modules/ 中所有脚本均可直接访问

数据模型

本模块不涉及持久化数据。全局变量在脚本运行期间存在于内存中。/var/lib/pve-tools/legal_acceptance_* 文件用于记录许可条款接受状态。

测试与质量

  • 语法检查: bash -n 对每个 lib/*.sh 文件
  • 静态分析: shellcheck 覆盖(需配合 --source-path 处理跨文件引用)
  • CI 覆盖: 所有 lib 文件在 pr-validation.yml 的 shellcheck 范围内

常见问题 (FAQ)

Q: 为什么加载顺序很重要? config.sh 定义全局变量,core.shsetup_colors() 和日志函数依赖颜色变量,network.sh 的镜像选择函数依赖 core.sh 中的 UI 函数,runtime.shmain() 调用 network.shcore.sh 中的函数。

Q: 可以在 src/modules/ 中重新加载 lib 文件吗? 不需要。PVE-Tools.shdev.sh 在加载任何模块之前已经 source 了所有 lib 文件,所有函数和变量对后续加载的模块全局可见。

Q: config.sh 中新增镜像源如何操作? 在每个并行数组末尾追加对应元素即可。MIRROR_NAMESMIRROR_IDSMIRROR_*_URIS 数组的索引一一对应。

相关文件清单

lib/
  config.sh                       # 全局变量与常量254行
  core.sh                         # 核心工具函数507行
  network.sh                      # 网络检测与镜像选择(~218行+镜像函数)
  runtime.sh                      # 运行时守卫与 main()235行

变更记录 (Changelog)

日期 变更
2026-07-08 初始化 lib 模块 CLAUDE.md模块化重构新增模块