diff --git a/CLAUDE.md b/CLAUDE.md index ce83873..b52493f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,7 +12,7 @@ PVE Tools Pro 是一个面向 Proxmox VE 9.x 的交互式 Bash 运维工具集 - **入口层**: `PVE-Tools.sh`(约 330 行)-- 本地开发时按固定顺序 source lib/ 与 src/modules/(各模块 init.sh 显式优先);远程 curl 运行时从 GitHub Releases(`releases/latest/download/PVE-Tools.sh`)下载构建产物执行,带重试/限速/校验/原子落盘守护。 - **基础设施层**: `lib/` -- 全局变量(config.sh)、日志/UI/确认/备份/GRUB(core.sh)、菜单交互框架(menu.sh)、网络检测/镜像选择(network.sh)、运行时守卫与主循环(runtime.sh)。 -- **功能模块层**: `src/modules/` -- 10 个子目录对应主菜单 1-10 项,每个子目录内按功能拆分文件(init.sh 为菜单入口)。 +- **功能模块层**: `src/modules/` -- 11 个子目录对应主菜单 1-11 项,每个子目录内按功能拆分文件(init.sh 为菜单入口)。 - **构建系统**: `build.sh` 按顺序拼接 lib/*.sh + src/modules/**/*.sh 为 `dist/PVE-Tools.sh`(gitignore,CI 构建);`dev.sh` 直接 source 全部源码供开发调试。 - **辅助工具集**: `Tools/` 集成来自 tteck 社区的 13 个独立维护脚本(不参与构建,供用户手动执行)。 - **插件市场**: `Modules/` 提供第三方脚本与二进制资产;`Modules/VGPU/*.so` 是 vGPU Unlock 功能的下载资产,不可删改。 @@ -47,6 +47,7 @@ graph TD SRC --> M08["08-tools-about
诊断工具与项目信息"] SRC --> M09["09-security
安全中心"] SRC --> M10["10-third-party
第三方工具"] + SRC --> M11["11-help
获取帮助"] GHA --> W1["workflows/
release/beta/PR"] @@ -64,7 +65,7 @@ graph TD |---|---|---|---|---| | `/` (根) | Bash | 入口脚本:本地 source / 远程下载 Releases 单文件 | `PVE-Tools.sh` (~330行) | `README.md` | | `lib/` | Bash | 基础设施层:全局变量、日志、UI、菜单框架、网络、运行时 | `config.sh`, `core.sh`, `menu.sh`, `network.sh`, `runtime.sh` | [lib/CLAUDE.md](./lib/CLAUDE.md) | -| `src/modules/` | Bash | 功能模块层:10 个子模块,对应主菜单 1-10 | 各 `*/init.sh` | [src/CLAUDE.md](./src/CLAUDE.md) | +| `src/modules/` | Bash | 功能模块层:11 个子模块,对应主菜单 1-11 | 各 `*/init.sh` | [src/CLAUDE.md](./src/CLAUDE.md) | | `Tools/` | Bash | 第三方系统维护脚本集(13个,不参与构建) | 各 `.sh` 文件 | [Tools/CLAUDE.md](./Tools/CLAUDE.md) | | `Modules/` | Bash/二进制 | 插件市场与分发资产(VGPU .so 为下载资产) | `install-zsh.sh`, `VGPU/*.so` | [Modules/CLAUDE.md](./Modules/CLAUDE.md) | | `Docs/` | Markdown | 补充文档与《重构计划》设计稿 | `future-guide.md`, `重构计划-PVE-Tools模块化拆分.md` | -- | @@ -214,6 +215,7 @@ foo_menu_dispatch() { # case 处理选项;未识别 return 1;末尾必 | 日期 | 变更 | 来源 | |---|---|---| +| 2026-08-19 | 硬件直通一键配置 (IOMMU) 新增可选增强参数:iommu=pt 与 pcie_acs_override=downstream,multifunction(强制拆分 IOMMU 组,解决 GPU 与系统盘同组时 vfio-pci 误接管系统盘问题);关闭流程同步移除 | GitHub Issue | | 2026-07-26 | 交互层框架化:新增 lib/menu.sh,全部菜单迁移 run_menu;确认体系两档成文;GPU 直通 marker 统一与互斥检测;GRUB 参数函数数组化;文档按现实重写(修正入口行数/远程模式/shc 等失真);仓库卫生清理;CI 护栏补全 | 交互层收口整理 | | 2026-07-08 | 项目模块化重构完成:单文件拆分为 lib/ + src/modules/(10 子模块)。新增 build.sh/dev.sh。Web/ 目录移除。 | claude-init 架构师 | | 2026-04-28 | 初始化 CLAUDE.md 体系 | claude-init 架构师 | diff --git a/Docs/CHANGELOG.md b/Docs/CHANGELOG.md new file mode 100644 index 0000000..34b2b42 --- /dev/null +++ b/Docs/CHANGELOG.md @@ -0,0 +1,47 @@ +# 更新日志 (Changelog) + +更新日志明细,面向用户。线上更新检测数据源见根目录 `UPDATE` 文件(本文件为详细版)。 + +## v11.1.0 (2026-08-19) + +### 新增:获取帮助板块(主菜单 11) + +新增独立板块,二级菜单三个入口: + +1. **加 Q 群水群** — QQ 群 `1031976463`,PVE 玩法与踩坑经验交流 +2. **加聊天社区咨询** — Telegram 群 `https://t.me/pvetools233`,与 QQ 水群相互独立 +3. **加作者付费咨询** — 一对一技术支持 / 紧急情况 / 深度排查 / 合作洽谈 + +付费咨询说明:项目免费开源,但作者**一般不提供免费的技术支持和免费解答方案**;紧急情况或谈合作欢迎直接联系作者(QQ `1520942621` / 微信 `kilomaple2024` / Telegram `https://t.me/pvetools_bot` / 邮件 `contact@u3u.icu`)。觉得工具好用想赞助作者,可前往官网支持页 `https://pve.u3u.icu/support` 或直接联系作者转账。 + +### 新增:硬件直通一键配置 (IOMMU) 可选增强参数 + +在「4. 硬件直通与显卡 → 6. 硬件直通一键配置 (IOMMU)」开启流程中,新增可选确认步骤,可选择写入直通增强参数: + +- `iommu=pt` — 开启 IOMMU 直通模式,减少 DMA 重映射开销 +- `pcie_acs_override=downstream,multifunction` — 强制拆分 IOMMU 组 + +适用场景:部分主板在 PCIe 拆分后会将 GPU 与系统盘/NVMe 分配到**同一个 IOMMU 组**,GPU 直通时 vfio-pci 会按组接管所有设备(包括系统盘),导致开机即崩溃。本选项可避免此问题。关闭流程已同步移除这两个参数。 + +### 修复:温度监控误报 nvme0 + +修复了无 NVMe 硬盘时温度监控误报「检测到 nvme0 / 已添加 1 块」的问题。根因是 bash glob 在无匹配时返回字面模式字符串 `/dev/nvme[0-9]`,被误当作真实设备;现在循环内增加真实块设备校验,无设备时正确显示「已添加 0 块」。 + +### 其他 + +- 修正 MAC 绑定接口名校验的错误提示文案(「不允许特殊字符」) + +--- + +## v11.0.0 (2026-07-26) + +- 交互层框架化:新增 `lib/menu.sh`,全部菜单迁移 `run_menu`,统一 EOF/Ctrl+C 守卫与 pause 节奏 +- 确认体系两档成文:轻档 `confirm_action` / 重档 `confirm_high_risk_action`(指定确认词) +- GPU 直通加固:marker 统一写入、多方案互斥检测、IOMMU 开/关强制确认;去掉写死 PCI ID 与默认核显黑名单 +- GRUB 参数数组化精确增删,新增 `grub_has_param`;默认内核优先 `proxmox-boot-tool kernel pin` +- 远程安装与自更新改走 GitHub Releases 完整单文件;修正 vGPU so 真实路径 +- CI 护栏补全:源码 shellcheck、构建函数一致性、UPDATE 新鲜度、dist 安全扫描、发版前校验与 SHA256SUMS +- 文档与仓库卫生:按现实重写 CLAUDE/AGENTS;修正 README-JP 文件名;清理历史截图与无关大文件 +- Build 代号更新为 Liino + +更早期版本历史请见根目录 `UPDATE` 文件与 GitHub Releases。 diff --git a/UPDATE b/UPDATE index 52b0a77..99e9cb5 100644 --- a/UPDATE +++ b/UPDATE @@ -1,3 +1,9 @@ +v11.1.0 +- 新增「获取帮助」板块(主菜单 11):QQ 水群 / Telegram 聊天社区 / 作者付费咨询与赞助入口 +- 硬件直通一键配置 (IOMMU) 新增可选增强参数:iommu=pt 与 pcie_acs_override=downstream,multifunction(强制拆分 IOMMU 组,解决 GPU 与系统盘同组时 vfio-pci 误接管系统盘问题) +- 修复温度监控在无 NVMe 硬盘时误报 nvme0 的问题(glob 无匹配陷阱) +- 修正 MAC 绑定接口名校验的错误提示文案 + v11.0.0 - 交互层框架化:新增 lib/menu.sh,全部菜单迁移 run_menu,统一 EOF/Ctrl+C 守卫与 pause 节奏 - 确认体系两档成文:轻档 confirm_action / 重档 confirm_high_risk_action(指定确认词) diff --git a/VERSION b/VERSION index 275283a..68d8f15 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.0.0 +11.1.0 diff --git a/lib/CLAUDE.md b/lib/CLAUDE.md index 35d9b4b..9dee16d 100644 --- a/lib/CLAUDE.md +++ b/lib/CLAUDE.md @@ -83,7 +83,7 @@ | `check_debug_mode()` | 解析 `--i-know-what-i-do` 和 `--debug` 参数 | | `check_pve_version()` | PVE 版本检测(非 PVE9 环境需确认风险,拦截高危自动化) | | `block_non_pve9_destructive()` | 非 PVE9 环境拦截换源/升级等破坏性操作 | -| `show_menu()` | 主菜单(10 个功能入口 + 一言 Tips) | +| `show_menu()` | 主菜单(11 个功能入口 + 一言 Tips) | | `main()` | **脚本主入口**:trap INT(Ctrl+C 中断当前输入回上级而非杀进程)-> 权限/许可/调试/PVE 版本/网络检查 -> 更新检查 -> 主循环(read 带 EOF 守卫优雅退出;子菜单返回不重复 pause) | ## 关键依赖与配置 diff --git a/lib/config.sh b/lib/config.sh index 2191bbf..11bfe17 100644 --- a/lib/config.sh +++ b/lib/config.sh @@ -3,7 +3,7 @@ # Copyright (C) 2026 Ciriu Networks # 版本信息 -CURRENT_VERSION="11.0.0" +CURRENT_VERSION="11.1.0" BUILD_NICKNAME="Liino" VERSION_FILE_URL="https://raw.githubusercontent.com/PVE-Tools/PVE-Tools-9/main/VERSION" UPDATE_FILE_URL="https://raw.githubusercontent.com/PVE-Tools/PVE-Tools-9/main/UPDATE" diff --git a/lib/runtime.sh b/lib/runtime.sh index 7f75607..77a41e1 100644 --- a/lib/runtime.sh +++ b/lib/runtime.sh @@ -137,15 +137,14 @@ show_menu() { show_menu_option "8" "诊断工具与项目信息 ${CYAN}( 系统信息 / 救砖 / 脚本管理 )${NC}" show_menu_option "9" "安全中心 ${CYAN}( 风险检查 / SSH加固 / CVE修补 )${NC}" show_menu_option "10" "第三方工具 ${CYAN}( CoolerControl / IT87驱动 / 社区脚本 )${NC}" + show_menu_option "11" "获取帮助 ${CYAN}( 联系作者 / 付费咨询 / 社区 )${NC}" echo "$UI_DIVIDER" show_menu_option "0" "${RED}退出脚本${NC}" show_menu_footer echo echo -e " ${YELLOW}Tips: ${SESSION_TIP:-一言获取失败,本次会话不再重试。}${NC}" - echo -e "本项目正在收集用户意见,如您愿意,请前往填写问卷,这能帮到整个项目!" - echo -e "-> https://wj.qq.com/s2/27286538/9d9d/" echo - echo -ne " ${PRIMARY}请输入您的选择 [0-10]: ${NC}" + echo -ne " ${PRIMARY}请输入您的选择 [0-11]: ${NC}" } # 应急救砖工具箱菜单 main() { @@ -212,6 +211,9 @@ main() { 10) third_party_tools_menu ;; + 11) + help_center_menu + ;; 0) echo "感谢使用,谢谢喵" echo "再见!" @@ -219,7 +221,7 @@ main() { ;; *) log_error "哎呀,这个选项不存在呢" - log_warn "请输入 0-10 之间的数字" + log_warn "请输入 0-11 之间的数字" ;; esac diff --git a/src/CLAUDE.md b/src/CLAUDE.md index 953c366..cdeefcc 100644 --- a/src/CLAUDE.md +++ b/src/CLAUDE.md @@ -4,7 +4,7 @@ ## 模块职责 -承载 PVE Tools Pro 全部业务逻辑,按主菜单编号拆分为 10 个子模块。每个子模块的 `init.sh` 为菜单入口函数,其余文件按功能领域进一步拆分。所有脚本由 `PVE-Tools.sh` 或 `dev.sh` 在 lib/ 加载完成后统一 source。 +承载 PVE Tools Pro 全部业务逻辑,按主菜单编号拆分为 11 个子模块。每个子模块的 `init.sh` 为菜单入口函数,其余文件按功能领域进一步拆分。所有脚本由 `PVE-Tools.sh` 或 `dev.sh` 在 lib/ 加载完成后统一 source。 ## 入口与启动 @@ -28,6 +28,7 @@ | 8 | `08-tools-about/` | 诊断工具与项目信息 | 3 | 低 | | 9 | `09-security/` | 安全中心 | 4 | 中等 | | 10 | `10-third-party/` | 第三方工具 | 5 | 低 | +| 11 | `11-help/` | 获取帮助 | 1 | 低 | --- @@ -214,6 +215,18 @@ --- +## 11-help -- 获取帮助 + +**菜单入口**: `help_center_menu()` 定义于 `init.sh` + +| 文件 | 核心函数 | 功能 | +|---|---|---| +| `init.sh` | `help_center_menu()`, `help_show_qq_group()`, `help_show_telegram_group()`, `help_show_paid_consult()` | 二级菜单 + 联系/付费咨询/社区信息展示 | + +**依赖**: 仅依赖 `lib/`(`show_menu_header` / `UI_DIVIDER` 展示组件)。 + +--- + ## 关键依赖与配置 - **lib/ 先决条件**: 所有模块均依赖 `lib/config.sh`(全局变量)和 `lib/core.sh`(日志/UI/备份函数) @@ -221,7 +234,7 @@ - `04-gpu-passthrough`: nvidia.sh 的辅助函数被 amd-*.sh 复用;iommu.sh 被多个子模块复用 - `05-vm-container`: storage-helper.sh 被 7 个同模块文件复用 - `06-networking`: interface.sh 被 6 个同模块文件复用 -- **无跨模块依赖**: 模块 01/02/03/07/08/09/10 仅依赖 lib/,不存在模块间引用 +- **无跨模块依赖**: 模块 01/02/03/07/08/09/10/11 仅依赖 lib/,不存在模块间引用 ## 测试与质量 @@ -258,6 +271,7 @@ src/modules/ 08-tools-about/ (3 文件) -- 诊断工具与项目信息 09-security/ (3 文件) -- 安全中心 10-third-party/ (4 文件) -- 第三方工具 + 11-help/ (1 文件) -- 获取帮助 ``` ## 变更记录 (Changelog) diff --git a/src/modules/01-optimization/cpupower.sh b/src/modules/01-optimization/cpupower.sh index 3bc12f4..765a6a2 100644 --- a/src/modules/01-optimization/cpupower.sh +++ b/src/modules/01-optimization/cpupower.sh @@ -327,6 +327,8 @@ EOF log_info "检测系统中的 NVME 硬盘" nvi=0 for nvme in /dev/nvme[0-9]; do + # glob 无匹配时 bash 会返回字面模式字符串,需校验真实块设备后跳过(参考下方 SATA 检测) + [ -b "$nvme" ] || continue chmod +s /usr/sbin/smartctl 2>/dev/null cat >> $tmpf << EOF diff --git a/src/modules/04-gpu-passthrough/iommu.sh b/src/modules/04-gpu-passthrough/iommu.sh index ddc70cd..1fdfb61 100644 --- a/src/modules/04-gpu-passthrough/iommu.sh +++ b/src/modules/04-gpu-passthrough/iommu.sh @@ -110,6 +110,20 @@ kvmgt" log_info "/etc/modules 中已存在 vfio 模块,跳过。" fi + # 可选增强:部分主板的 PCIe 拆分会将 GPU 与系统盘/NVMe 分到同一 IOMMU 组, + # GPU 直通时 vfio-pci 会误接管系统盘控制器导致开机崩溃; + # 常规单显卡直通不受影响,因此默认询问后由用户决定是否开启。 + echo -e "${YELLOW}是否同时启用直通增强参数 iommu=pt 与 pcie_acs_override=downstream,multifunction?${NC}" + echo -e "${RED}仅在 GPU 与系统盘/NVMe 同属一个 IOMMU 组、GPU 直通时 vfio-pci 误接管系统盘导致开机崩溃的情况下建议开启;会强制拆分 IOMMU 组并开启直通模式。${NC}" + if confirm_action "写入直通增强参数 iommu=pt 与 pcie_acs_override(一般不需要)"; then + grub_add_param "iommu=pt" + grub_add_param "pcie_acs_override=downstream,multifunction" + # 即使基础 IOMMU 参数已存在(grub_changed=0),本次新写入也必须触发 update-grub + grub_changed=1 + else + log_info "已跳过直通增强参数。若后续遇到 IOMMU 分组问题,可重新运行本菜单开启。" + fi + # 屏蔽核显/声卡驱动仅适用于"把核显直通给虚拟机"的场景; # 宿主机还需要本地显示输出时开启会导致控制台黑屏,因此默认不开启。 # 设备级 vfio-pci ids 绑定由各显卡专用直通菜单按实际硬件写入,此处不再写死。 @@ -161,6 +175,9 @@ disable_pass() { fi grub_remove_param "$iommu" + # 同步移除可选直通增强参数(按 key 精确匹配,未配置过时无副作用) + grub_remove_param "iommu=pt" + grub_remove_param "pcie_acs_override" backup_file "/etc/modules" # 先移除本工具的 marker 配置块,再精确清理历史版本写入的裸模块行(含 kvmgt,不误删其它行) remove_block "/etc/modules" "IOMMU_BASE_MODULES" diff --git a/src/modules/06-networking/mac-bind.sh b/src/modules/06-networking/mac-bind.sh index a6d267a..63e0816 100644 --- a/src/modules/06-networking/mac-bind.sh +++ b/src/modules/06-networking/mac-bind.sh @@ -368,7 +368,7 @@ host_network_create_mac_binding() { read -r -p "请输入固定接口名称(如 lan0、pve-eth0): " fixed_name [[ -n "$fixed_name" ]] || { display_error "接口名称不能为空"; return 1; } host_network_validate_systemd_link_name "$fixed_name" || { - display_error "接口名称不合法: $fixed_name" "名称需为 1-15 位,只允许字母、数字、_、.、-,且不能是纯数字或保留名。" + display_error "接口名称不合法: $fixed_name" "名称需为 1-15 位,只允许字母、数字(不允许特殊字符)。且不能是纯数字或保留名。" return 1 } diff --git a/src/modules/11-help/init.sh b/src/modules/11-help/init.sh new file mode 100644 index 0000000..37c6e79 --- /dev/null +++ b/src/modules/11-help/init.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0-only +# Copyright (C) 2026 Ciriu Networks + +# 获取帮助菜单 +help_center_menu() { + run_menu "获取帮助" help_center_menu_render help_center_menu_dispatch "0-3" +} + +help_center_menu_render() { + show_menu_option "1" "加 Q 群水群 ${CYAN}(闲聊交流)${NC}" + show_menu_option "2" "加聊天社区咨询 ${CYAN}(Telegram 群)${NC}" + show_menu_option "3" "加作者付费咨询 ${CYAN}(一对一技术支持)${NC}" +} + +help_center_menu_dispatch() { + case "$1" in + 1) help_show_qq_group ;; + 2) help_show_telegram_group ;; + 3) help_show_paid_consult ;; + *) return 1 ;; + esac + return 0 +} + +# 加 Q 群水群(闲聊交流为主,技术问题不保证有解答) +help_show_qq_group() { + clear + show_menu_header "加 Q 群水群" + + echo " 欢迎加入 PVE-Tools QQ 水群,与大家交流 PVE 玩法与踩坑经验。" + echo + echo " QQ 群号: ${CYAN}1031976463${NC}" + echo + echo -e "${YELLOW}提示:${NC} 本群以闲聊交流为主,技术问题不保证有解答;需要技术支持请前往付费咨询。" + echo "${UI_DIVIDER}" +} + +# 加聊天社区咨询(Telegram 群,与 QQ 水群相互独立) +help_show_telegram_group() { + clear + show_menu_header "加聊天社区咨询" + + echo " 欢迎加入 PVE-Tools Telegram 聊天社区,与全球用户交流使用心得。" + echo + echo " Telegram 群: ${CYAN}https://t.me/pvetools233${NC}" + echo + echo -e "${YELLOW}提示:${NC} 本社区与 QQ 水群相互独立;技术问题不保证有解答,需要技术支持请前往付费咨询。" + echo "${UI_DIVIDER}" +} + +# 加作者付费咨询(不提供免费技术支持,赞助入口一并展示) +help_show_paid_consult() { + clear + show_menu_header "加作者付费咨询" + + echo " 写脚本、维护项目需要时间和精力,这也是作者的饭碗。本工具免费开源," + echo " 但一般不提供免费的技术支持和免费解答方案,感谢理解~" + echo + echo -e " ${RED}紧急情况 / 深度排查 / 谈合作:${NC}" + echo " QQ: 1520942621" + echo " 微信: kilomaple2024" + echo " Telegram: https://t.me/pvetools_bot" + echo " 邮件: contact@u3u.icu" + echo + echo " 想赞助作者:去官网支持一下,或直接加联系方式给作者转钱,感谢投喂!" + echo " 官网支持页: ${CYAN}https://pve.u3u.icu/support${NC}" + echo "${UI_DIVIDER}" +}