文章目录

前言

  之前从朋友那拿了一台I5 7200U的工控机,这个配置只拿来跑软路由也太浪费资源了,所以开始折腾了下虚拟机,弄一个all in one的服务器放在家里的弱电箱,目前我见得比较多的虚拟机是Proxmox VE和Vmware ESXI,这次我选择用PVE。安装虚拟机和配置双软路由什么的,网络上教程挺多,弄下来好像也没有什么难点,按部就班配置就完成了。
  PVE下默认是没有CPU温度显示的,我这机器又是打算放弱电箱里的,没温度显示不舒服啊,于是开始研究,并最终解决。


更新apt-get

  网络上也有相关的添加教程,总体来说还是挺简单的,没遇到什么大问题;因为要通过apt-get安装温度显示模块,所以一开始要先升级下pve的apt-get,以下内容复制于网络

在PVE下打开shell或者ssh登录PVE,这个nano反正就是编辑这个文件的意思,类似vim
nano /etc/apt/sources.list.d/pve-enterprise.list
注释掉
#deb https://enterprise.proxmox.com/debian/pve stretch pve-enterprise
也可以直接删除掉(推荐)
rm -f /etc/apt/sources.list.d/pve-enterprise.list

为了更新proxmox 还需要
nano /etc/apt/sources.list
添加内容:
deb http://download.proxmox.com/debian stretch pve-no-subscription

然后返回到默认目录,执行
echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list

wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg

我当时没重启,执行apt-get update还是没响应,隔天开机登录重新执行apt-get update就可以了(这里有点迷)

安装sensors

  之前的apt-get update就是为了能够安装sensors,因为我一开始直接安装老是报错无法找到源,安装还是进入pve的shell,执行下面三句命令

apt-get install lm-sensors

sensors-detect

sensors

执行过程中所有选项,我直接一路yes到底了。。

管理界面添加温度显示

  上面安装完之后就可以在shell里看CPU和封装的温度了,现在把温度添加到管理界面,这里我推荐用WinSCP等工具链接到PVE,把文件拖到本地用Notepad++之类的修改,而不是直接用在shell里修改,当然如果你nano、vim等用的炉火纯青当我没说。

#首先是编辑这个文件,执行
vim /usr/share/perl5/PVE/API2/Nodes.pm
---------------------------------------

$res->{ksm} = {
    shared => $meminfo->{memshared},
};
$res->{sensinfo} = `sensors`;  //在原有基础上新增这一行,不会使用vim的老老实实下载文件来改;
$res->{swap} = {
    free => $meminfo->{swapfree},
    total => $meminfo->{swaptotal},
    used => $meminfo->{swapused},
};

//然后是下面这个文件,这里我个人不推荐vim,因为我不会用,这文件4万行代码~果断下载下来notepad++

/usr/share/pve-manager/js/pvemanagerlib.js

//打开定位到下面这一段
{
    itemId: 'version',
    colspan: 2,
    printBar: false,
    title: gettext('PVE Manager Version'),
    textField: 'pveversion',
    value: ''
},  //注意这个逗号,很容易被忽略,会造成白屏,然后复制添加下面的代码,然后保存
{
        itemId: 'sensinfo',
        colspan: 2,
        title: gettext('CPU温度'),
        textField: 'sensinfo',
        renderer:function(value){
            const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
            const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
            const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1];
            const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1];
            const c4 = value.match(/Core 4.*?\+([\d\.]+)?/)[1];
            const c5 = value.match(/Core 5.*?\+([\d\.]+)?/)[1];
            const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
            return `Package: ${p0}℃  Core0: ${c0}℃ | Core1: ${c1}℃ | Core2: ${c2}℃ | Core3: ${c3}℃ | Core4: ${c4}℃ | Core5: ${c5}℃`
        }
}

温度显示错误解决

  如果是直接CTRL+C然后CTRL+V上面的代码,结果很大概率是会报错的,我就是页面一直加载中,F12直接看错误原因。



  因为我这台工控机是i5 7200U,是双核四线程,网上的代码都是定义了5个核心,但是并没有说明要根据自己的机器酌情修改代码,这里我只保留Core0 和 Core1 的温度显示,意思是只显示第0和第1核的温度,其余的删除;package是CPU封装温度,这个不用改。然后下面return 的那段字符串记得也删除多余的核心变量,这里附上我自己机器的修改代码结果

{
        itemId: 'sensinfo',
        colspan: 2,
        title: gettext('CPU温度'),
        textField: 'sensinfo',
        renderer:function(value){
            const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
            const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
            const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
            return `Package: ${p0}℃  Core0: ${c0}℃ | Core1: ${c1}℃`
        }
}

重启Porxmox页面服务

systemctl restart pveproxy

完成


人活着一定要争口气,哪怕生为草绳,也要做绑螃蟹的那根。