V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
MiKing233
V2EX  ›  NAS

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

  •  2
     
  •   MiKing233 · 23 天前 · 1749 次点击

    先上图😁



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

    事情的起因是之前一直依赖的 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🤩

    辛苦你看完我的絮絮叨叨😁
    MiKing233
        1
    MiKing233  
    OP
       23 天前
    忘记说了, 项目在这里:
    MiKing233/PVE-Manager-Status( https://github.com/MiKing233/PVE-Manager-Status)
    netboy2008
        2
    netboy2008  
       23 天前 via iPhone
    不赖
    orangeshine
        3
    orangeshine  
       23 天前
    不错,已 star ,回家瞅瞅
    MiKing233
        4
    MiKing233  
    OP
       23 天前
    再补几张在不同设备上的截图
    帖子上面的是铭凡 MS-01 i9-13900H

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


    不知名山寨小主机 Intel N100
    aeron
        5
    aeron  
       23 天前
    有报错,pve8 ,
    v0rtix
        6
    v0rtix  
       23 天前
    报错了
    xiangchen2011
        7
    xiangchen2011  
       23 天前
    感觉不赖,赞一个
    MiKing233
        8
    MiKing233  
    OP
       23 天前
    @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
        9
    MiKing233  
    OP
       23 天前
    @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
        10
    v0rtix  
       23 天前
    MiKing233
        11
    MiKing233  
    OP
       23 天前
    @v0rtix 能确认一下 linux-cpupower 这个包安装了吗
    apt list --installed | grep linux-cpupower
    3573535
        12
    3573535  
       23 天前
    @MiKing233 安装 apt list --installed | grep linux-cpupower 后解决问题、
    3573535
        13
    3573535  
       23 天前
    后面不动了,刷新没显示,等等吧:
    🗃️ 检查依赖软件包安装情况...
    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
        14
    MiKing233  
    OP
       23 天前
    @3573535 到最后一步应该已经都改完了只是最后重启一次 pveproxy.service
    检查看看 pveproxy 的状态呢? systemctl status pveproxy.service
    rick13
        15
    rick13  
       22 天前
    多谢楼主,之前用的那个升级 pve 之后就不能用了,放完假回去弄弄
    v0rtix
        16
    v0rtix  
       22 天前
    @MiKing233 #11 已安装
    MiKing233
        17
    MiKing233  
    OP
       22 天前
    @3573535 #13
    @v0rtix #16

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

    https://github.com/MiKing233/PVE-Manager-Status/releases/tag/v0.4.10
    v0rtix
        18
    v0rtix  
       22 天前
    @MiKing233 #17
    MiKing233
        19
    MiKing233  
    OP
       22 天前
    @v0rtix 原来如此, 但怎么可能不存在 visudo 命令呢, 这个命令是 sudo 包带的, 正常安装 pve 一定会有 sudo 的, 你这个 pve 是通过非常规方式安装的吗, 还是说目前系统已经损坏? 这个不是我脚本存在的问题了, 你应该检查一下你的 os
    v0rtix
        20
    v0rtix  
       22 天前
    @MiKing233 #19 确实没有 sudo 我是官方安装的镜像 实测我装的两台 pve 都没有 sudo apt 安装 sudo 后可以正常使用了
    jinlong
        21
    jinlong  
       22 天前
    PVE 7 一路升级到 PVE 9 ,确实没有 sudo 命令。同样报错:
    visudo 语法检查的详细错误信息:
    --------------------------------------------------
    ./pve-manager-status.sh: line 176: visudo: command not found
    jinlong
        22
    jinlong  
       22 天前
    apt 手动安装 sudo 后命令执行成功,但是 AMD R7 5825U 功耗显示错误,提示:
    CPU 电源模式: performance | CPU 功耗: 0.00 W
    可能没对 AMD 进行适配,必要时楼主可以优化下。

    功能总体来说不错,感谢!
    MiKing233
        23
    MiKing233  
    OP
       22 天前
    @jinlong 那看起来 sudo 没有可能是个历史遗留问题, PVE7 没测试过, 但是我记得很清楚 PVE8 的 Debian12 和 PVE9 的 Debian13 安装好肯定是带 sudo 的. 功耗显示不正确的问题在 Github 提 issue 吧, 把 turbostat 命令完整执行结果贴出来.
    aeron
        24
    aeron  
       22 天前
    @MiKing233 #8 pve8 是没有 sodu 命令的,手动安装 sudo 后,可以安装成功
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1065 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:14 · PVG 02:14 · LAX 11:14 · JFK 14:14
    ♥ Do have faith in what you're doing.