给 PVE 概要页面做了一个添加硬件监控信息的脚本工具

6 天前
 MiKing233

先上图😁



下面是我最近的心路历程, 写的有点啰嗦:

事情的起因是之前一直依赖的 pve_source ( https://bbs.x86pi.com/thread?topicId=20) 已经好几年没再更新, 忘记从 ProxmoxVE 8.4.x 的哪个版本开始, 包括现在的 9.0, 应该是 pve-manager 改了什么东西, 导致用 pve_source 添加的监控信息变成了左对齐, 强迫症看着实在是受不了, 如图


如果只是用来看温度功耗风扇转速这些那还好, 起码看着怪了点功能至少是正常的, 但是新版本导致 pve_source 完全破坏了存储信息页面, 正常显示页面如下


使用 pve_source 修改后无法正常显示



但是由于这么些年, 早已习惯透过 PVE 管理页面来 review 一些硬件状态, 尤其是集群多节点的场景, 鼠标点点就能看到各个 Server 的状态, 而不需要 ssh 上去敲命令, 这个现状让我沮丧了很长一段时间, 包括后来基于 Debian13 的 PVE9 发布, 测试 pve_source 仍然是不能正常使用的, 但由于 pve_source 是不开源的, 原作者不更新你也没办法, 并且看论坛下面的留言也有不少人反馈新版本无法正常工作了, 但是看了一眼最后更新日期还是在 23 年 12 月, 无奈... 那段时间甚至都有打算 apt-mark hold pve-manager 永远钉在旧版本再也不升级

转机在九月初到来... 那天我和往常一样上班时间摸鱼逛逛 GitHub, 偶然发现一个项目 xiangfeidexiaohuo/pve-diy ( https://github.com/xiangfeidexiaohuo/pve-diy), 看了一下该项目修改自 shidahuilang/pve ( https://github.com/shidahuilang/pve) 并做了一些改进和优化, 最让我兴奋的当然还是开源, 但我实际使用了一下发现功能上相比 pve_source 还是欠缺太多, 并且很多功能甚至不能正常工作, 例如代码中注释掉的风扇转速部分, 删掉注释 PVE 的界面直接崩溃了, 其他的一些功能在我手上几台不同的小主机上测试也都有不同程度的问题, 并且坦白讲代码内部也有大量需要修复的逻辑错误, 不过好在他是开源的, 至少已经写好了一个不算太差的底子, 于是乎接下来的几周工作摸鱼时间, 基本都在一边测一边改

其实最开始我的想法其实也只是想把功能方面改到能正常自用就行, 不过这个脚本给了我一个启发, 它里面使用<strong>来加粗显示</strong>, 不过坦白讲我没感觉到变得有多粗, 于是乎我想看看这个加粗是不是真的生效了便改成了字体用红色渲染, 那会也不知道怎么了突然灵光乍现, 想着能不能用不同的颜色动态的渲染传感器输出的值, 这样温度高低, CPU 频率高低这些不就一眼扫过去看颜色就知道 loading 高低了吗, 说干就干后面的几周基本都在修 BUG 加功能, 到 9 月末基本已经实现了预期的所有功能, 回想这几周还挺兴奋的, 至少扫清了我升级到 PVE9 的障碍, 不过玩 PVE 的圈子我感觉还是太小, 想着 V 站应该会有不少用 PVE 的, 也许有和我一样最近被这个问题困扰的, 索性最后整理了一下决定开源到 Github 上

不过最近一周直到我发这篇帖子之前, 项目才最终上传到 Github 上, 因为过去的一周我发现一个, 社区约定俗成, 但是在安全上存在巨大隐性风险的问题...
由于 PVE 的前端页面是通过 pveproxy.service 这个服务运行的, 运行的用户不是 root 而是 www-data, 但想要前端显示这些监控项目, 例如硬盘的项目, 实际是使用 iostat 和 smartctl 这些命令输出的, wwww-data 没有 root 权限, 于是乎包含 pve_source 在内的这一票添加概览页监控的脚本, 直接简单粗暴的使用 chmod +s /usr/sbin/smartctl 这样的方式, 来让 www-data 用户可以用 root 权限运行这些命令, 但这也代表任何用户, 都可以用 root 来执行这些命令, 我个人感觉这埋下了一个巨大的坑, 如果这些程序包含潜在漏洞, 普通用户则可以借此提权到 root, 除非你保证这台 server 只有 root 一个用户
于是乎过去一周一直在处理这个问题, 不过好在算是想了一个比较完美的方案, 通过向/etc/sudoers.d 中为 www-data 添加特定几个监控用到的特定命令, 再让 www-data 以 sudo 来执行它们来减小风险影响范围, 不至于任何用户都可以 root 去执行这些命令


鉴于本人充其量最多算一个"系统管理员", 并不是专业的程序员, 而且手上也没有各种各样的设备用于测试, 项目刚刚起步, 如果可以请提 issue 帮助我继续完善, 如果这个项目能够帮到你我也倍感荣幸, 请不要吝啬你的 Star🤩

辛苦你看完我的絮絮叨叨😁
1469 次点击
所在节点    NAS
24 条回复
MiKing233
6 天前
忘记说了, 项目在这里:
MiKing233/PVE-Manager-Status( https://github.com/MiKing233/PVE-Manager-Status)
netboy2008
6 天前
不赖
orangeshine
6 天前
不错,已 star ,回家瞅瞅
MiKing233
6 天前
再补几张在不同设备上的截图
帖子上面的是铭凡 MS-01 i9-13900H

零刻 SER8 8845HS AMD 的读不到每个核心的温度


不知名山寨小主机 Intel N100
aeron
6 天前
有报错,pve8 ,
v0rtix
6 天前
报错了
xiangchen2011
6 天前
感觉不赖,赞一个
MiKing233
6 天前
@aeron 这几个命令执行有输出吗?

command -v iostat
command -v sensors
command -v smartctl
command -v turbostat

或者手动修改 160 行
if visudo -c -f "${TMP_SUDOERS}" &> /dev/null; then
修改为
if visudo -c -f "${TMP_SUDOERS}"; then
然后再执行一遍, 应该能看到具体报错信息
MiKing233
6 天前
@v0rtix 这几个命令执行有输出吗?

command -v iostat
command -v sensors
command -v smartctl
command -v turbostat

或者手动修改 160 行
if visudo -c -f "${TMP_SUDOERS}" &> /dev/null; then
修改为
if visudo -c -f "${TMP_SUDOERS}"; then
然后再执行一遍, 应该能看到具体报错信息
v0rtix
6 天前
MiKing233
6 天前
@v0rtix 能确认一下 linux-cpupower 这个包安装了吗
apt list --installed | grep linux-cpupower
3573535
6 天前
@MiKing233 安装 apt list --installed | grep linux-cpupower 后解决问题、
3573535
6 天前
后面不动了,刷新没显示,等等吧:
🗃️ 检查依赖软件包安装情况...
sysstat: 已安装✅
lm-sensors: 已安装✅
smartmontools: 已安装✅
所有依赖软件包均已安装!

🧰 开始配置传感器模块...
发现传感器模块, 正在配置以便开机自动加载
模块 coretemp 已存在于 /etc/modules ➡️
未找到 /etc/init.d/kmod 跳过此步骤 ➡️
传感器模块已配置完成!

🔩 配置必要的执行权限...
允许 www-data 用户以 sudo 权限执行部分监控命令
正在配置 sudoers 规则内容并进行语法检查...
sudoers 规则语法检查通过 ✅
已成功配置 sudo 规则于: /etc/sudoers.d/pve-manager-status 🔐

📝 开始执行修改...
正在修改: /usr/share/perl5/PVE/API2/Nodes.pm...
正在修改: /usr/share/pve-manager/js/pvemanagerlib.js...
正在调整页面高度: /usr/share/pve-manager/js/pvemanagerlib.js...

🔁 等待服务 pveproxy.service 重启...
MiKing233
6 天前
@3573535 到最后一步应该已经都改完了只是最后重启一次 pveproxy.service
检查看看 pveproxy 的状态呢? systemctl status pveproxy.service
rick13
5 天前
多谢楼主,之前用的那个升级 pve 之后就不能用了,放完假回去弄弄
v0rtix
5 天前
@MiKing233 #11 已安装
MiKing233
5 天前
@3573535 #13
@v0rtix #16

请帮忙试试最新的版本, 现在错误会有 debug 输出

https://github.com/MiKing233/PVE-Manager-Status/releases/tag/v0.4.10
v0rtix
5 天前
@MiKing233 #17
MiKing233
5 天前
@v0rtix 原来如此, 但怎么可能不存在 visudo 命令呢, 这个命令是 sudo 包带的, 正常安装 pve 一定会有 sudo 的, 你这个 pve 是通过非常规方式安装的吗, 还是说目前系统已经损坏? 这个不是我脚本存在的问题了, 你应该检查一下你的 os
v0rtix
5 天前
@MiKing233 #19 确实没有 sudo 我是官方安装的镜像 实测我装的两台 pve 都没有 sudo apt 安装 sudo 后可以正常使用了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1163417

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX