Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 功能的下载资产,不可删改。
Expand Down Expand Up @@ -47,6 +47,7 @@ graph TD
SRC --> M08["08-tools-about<br/>诊断工具与项目信息"]
SRC --> M09["09-security<br/>安全中心"]
SRC --> M10["10-third-party<br/>第三方工具"]
SRC --> M11["11-help<br/>获取帮助"]

GHA --> W1["workflows/<br/>release/beta/PR"]

Expand All @@ -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` | -- |
Expand Down Expand Up @@ -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 架构师 |
47 changes: 47 additions & 0 deletions Docs/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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。
6 changes: 6 additions & 0 deletions UPDATE
Original file line number Diff line number Diff line change
@@ -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(指定确认词)
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
11.0.0
11.1.0
2 changes: 1 addition & 1 deletion lib/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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) |

## 关键依赖与配置
Expand Down
2 changes: 1 addition & 1 deletion lib/config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
10 changes: 6 additions & 4 deletions lib/runtime.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -212,14 +211,17 @@ main() {
10)
third_party_tools_menu
;;
11)
help_center_menu
;;
0)
echo "感谢使用,谢谢喵"
echo "再见!"
exit 0
;;
*)
log_error "哎呀,这个选项不存在呢"
log_warn "请输入 0-10 之间的数字"
log_warn "请输入 0-11 之间的数字"
;;
esac

Expand Down
19 changes: 17 additions & 2 deletions src/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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。

## 入口与启动

Expand All @@ -28,6 +28,7 @@
| 8 | `08-tools-about/` | 诊断工具与项目信息 | 3 | 低 |
| 9 | `09-security/` | 安全中心 | 4 | 中等 |
| 10 | `10-third-party/` | 第三方工具 | 5 | 低 |
| 11 | `11-help/` | 获取帮助 | 1 | 低 |

---

Expand Down Expand Up @@ -214,14 +215,27 @@

---

## 11-help -- 获取帮助

**菜单入口**: `help_center_menu()` 定义于 `init.sh`

| 文件 | 核心函数 | 功能 |
|---|---|---|
| `init.sh` | `help_center_menu()` | 二级菜单 |
| `info.sh` | `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/备份函数)
- **模块间交叉依赖**(仅 04/05/06 存在):
- `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/,不存在模块间引用

## 测试与质量

Expand Down Expand Up @@ -258,6 +272,7 @@ src/modules/
08-tools-about/ (3 文件) -- 诊断工具与项目信息
09-security/ (3 文件) -- 安全中心
10-third-party/ (4 文件) -- 第三方工具
11-help/ (2 文件) -- 获取帮助
```

## 变更记录 (Changelog)
Expand Down
3 changes: 3 additions & 0 deletions src/modules/01-optimization/cpupower.sh
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,9 @@ EOF
log_info "检测系统中的 NVME 硬盘"
nvi=0
for nvme in /dev/nvme[0-9]; do
# 控制器节点为字符设备(如 /dev/nvme0,major 243),命名空间才是块设备(/dev/nvme0n1,不匹配本模式);
# 字符设备校验同时兼容 glob 无匹配场景(字面模式字符串非字符设备,自然跳过)
[ -c "$nvme" ] || continue
chmod +s /usr/sbin/smartctl 2>/dev/null

cat >> $tmpf << EOF
Expand Down
34 changes: 33 additions & 1 deletion src/modules/04-gpu-passthrough/iommu.sh
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,34 @@ 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_high_risk_action \
"写入直通增强参数 iommu=pt 与 pcie_acs_override=downstream,multifunction" \
"会修改 GRUB 内核参数并强制拆分 IOMMU 组、开启直通模式,需重启生效" \
"参数配置错误可能导致宿主机开机失败或 IOMMU 组隔离异常;非必要场景不建议开启" \
"脚本会自动备份 /etc/default/grub,可通过 GRUB 备份恢复功能回滚" \
"IOMMU-ENHANCE"; then
if grub_add_param "iommu=pt"; then
if ! grub_add_param "pcie_acs_override=downstream,multifunction"; then
# 回滚本次已成功写入的参数,避免留下半套配置
grub_remove_param "iommu=pt"
log_error "直通增强参数写入失败,已回滚本次写入,未应用更改"
return 1
fi
# 即使基础 IOMMU 参数已存在(grub_changed=0),本次新写入也必须触发 update-grub
grub_changed=1
else
log_error "直通增强参数 iommu=pt 写入失败,未应用更改"
return 1
fi
else
Comment thread
coderabbitai[bot] marked this conversation as resolved.
log_info "已跳过直通增强参数。若后续遇到 IOMMU 分组问题,可重新运行本菜单开启。"
fi

# 屏蔽核显/声卡驱动仅适用于"把核显直通给虚拟机"的场景;
# 宿主机还需要本地显示输出时开启会导致控制台黑屏,因此默认不开启。
# 设备级 vfio-pci ids 绑定由各显卡专用直通菜单按实际硬件写入,此处不再写死。
Expand Down Expand Up @@ -160,7 +188,11 @@ disable_pass() {
return 1
fi

grub_remove_param "$iommu"
# 任一移除失败即中止,避免静默留下残留参数(未配置过的参数移除无副作用)
if ! grub_remove_param "$iommu" || ! grub_remove_param "iommu=pt" || ! grub_remove_param "pcie_acs_override"; then
log_error "GRUB 参数移除失败,请检查 /etc/default/grub 后重试"
return 1
fi
backup_file "/etc/modules"
# 先移除本工具的 marker 配置块,再精确清理历史版本写入的裸模块行(含 kvmgt,不误删其它行)
remove_block "/etc/modules" "IOMMU_BASE_MODULES"
Expand Down
2 changes: 1 addition & 1 deletion src/modules/06-networking/mac-bind.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}

Expand Down
48 changes: 48 additions & 0 deletions src/modules/11-help/info.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-3.0-only
# Copyright (C) 2026 Ciriu Networks

# 加 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}"
}
24 changes: 24 additions & 0 deletions src/modules/11-help/init.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/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
}
Loading