内容目录
关于PVE的一些初始化配置记录
去除订阅提示
pvetools是一个开源的pve工具,可以快速帮我们实现一些常用的pve配置。
这里我仅用来去除订阅提示。
pvetools托管在github上,只需要克隆git库即可:
cd ~
apt update
apt -y install git
git clone https://github.com/ivanhao/pvetools.git
克隆后直接使用pvetools即可:
cd pvetools
./pvetools.sh
我这里是使用xshell连接pve,运行后出现图形界面:
这里可以方便的配置apt国内源、去除企业源等功能。
这里我只用到了去除订阅提示功能,只需要选择这个选项一路回车,期间黑屏等待几秒即可跳出成功。
修改安装源与去除PVE企业源
修改安装源为中科大源。
cd /etc/apt
cp sources.list sources.list.bak
sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
PVE企业源需要订阅,这里修改为中科大的不需要订阅的源:
cd /etc/apt
cp -r sources.list.d/ sources.d.bak
cd sources.list.d/
rm -rf ceph.list
rm -rf pve-enterprise.list
source /etc/os-release
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve $VERSION_CODENAME pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
替换CT Template
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm.bak
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
安装常用软件
apt clean && apt autoclean && apt autoremove --purge
apt update
apt dist-upgrade
apt install htop lm-sensors unzip fail2ban vim tmux unattended-upgrades apt-listchanges powermgmt-base
apt install iperf iperf3 iftop net-tools ethtool
至此一些基础配置已经完成。
配置sensors监控数据
基于上述常用软件中已安装 lm-sensors
包的情况下配置,如果没有安装,则可以单独安装:
apt install lm-sensors
之后配置监控的数据源:
/usr/share/perl5/PVE/API2/Nodes.pm
编辑该文件,你可以使用 vim
工具来编辑,也可以用ftp客户端下载下来后用编辑器编辑,这里我下载到windows内用vscode来编辑:
根据文本 Read node status
来搜索,找到状态信息源配置处,在该方法内的最后, return $res;
前添加代码:
$res->{temperature} = `sensors`;
$res->{tdata} = `/usr/bin/s.sh`;
这里的 s.sh
文件可能是之前通过pvetools增加监控信息后遗留的,这里直接使用,s文件内容为:
r=`sensors|grep -E 'Package id 0|fan|Physical id 0|Core'|grep '^[a-zA-Z0-9].[[:print:]]*:.\s*\S*[0-9].\s*[A-Z].' -o|sed 's/:\ */:/g'|sed 's/:/":"/g'|sed 's/^/"/g' |sed 's/$/",/g'|sed 's/\ C\ /C/g'|sed 's/\ V\ /V/g'|sed 's/\ RP/RPM/g'|sed 's/\ //g'|awk 'BEGIN{ORS=""}{print $0}'|sed 's/\,$//g'|sed 's/°C/\°C/g'`
curC=`cat /proc/cpuinfo|grep MHz|awk 'NR==1{print $4}'`
max=`cat /proc/cpuinfo|grep GHz|awk -F "@" 'NR==1{print $2}'|sed 's/GHz//g'|sed 's/\ //g'`
maxC=`echo "$max * 1000"|bc -l`
minC=`lscpu|grep 'min MHz'|awk '{print $4}'`
c="\"CPU-MHz\":\""$curC"\",\"CPU-max-MHz\":\""$maxC"\",\"CPU-min-MHz\":\""$minC"\""
r="{"$r","$c"}"
echo $r
之后编辑js文件:
/usr/share/pve-manager/js/pvemanagerlib.js
通过搜索 Boot Mode
找到目标位置,在 Boot Mode
这个json的下方新增json:
{
itemId: 'temperature',
colspan: 2,
printBar: false,
title: gettext('Temperature'),
textField: 'temperature',
renderer: function(value) {
value = value.replace(/Â/g, '');
let data = [];
let cpus = value.matchAll(/^coretemp-isa-(\d{4})$\n.*?\n((?:Package|Core)[\s\S]*?^\n)+/gm);
for (const cpu of cpus) {
let cpuNumber = parseInt(cpu[1], 10);
data[cpuNumber] = {
packages: [],
cores: []
};
let packages = cpu[2].matchAll(/^Package id \d+:\s*([^°]+).*$/gm);
for (const package of packages) {
data[cpuNumber]['packages'].push(package[1]);
}
let cores = cpu[2].matchAll(/^Core \d+:\s*([^°]+).*$/gm);
for (const core of cores) {
data[cpuNumber]['cores'].push(core[1]);
}
}
let output = '';
for (const [i, cpu] of data.entries()) {
output += `CPU ${i}: `;
if (cpu.packages.length > 0) {
for (const packageTemp of cpu.packages) {
output += `${packageTemp}°C `;
}
}
if (cpu.cores.length > 0) {
output += '(';
for (const coreTemp of cpu.cores) {
output += `${coreTemp}, `;
}
output = output.slice(0, -2);
output += ')°C';
}
output += ' | ';
}
let boardTemp = value.match(/^acpitz-acpi-\d+$\n.*?\n^temp1:\s*([^°]+).*$/m);
if (boardTemp.length > 0) {
output += `Board: ${boardTemp[1]}°C | `
}
let nvmeTemp = value.match(/^nvme-pci-\d+$\n.*?\n^Composite:\s*([^°]+).*$/m);
if (nvmeTemp.length > 0) {
output += `NVME: ${nvmeTemp[1]}°C | `
}
output = output.slice(0, -3);
return output;
}
},
{
itemId: 'version',
colspan: 2,
printBar: false,
title: gettext('Manager Version'),
textField: 'pveversion',
value: '',
},
,{
itemId: 'MHz',
colspan: 2,
printBar: false,
title: gettext('CPU频率'),
textField: 'tdata',
renderer:function(value){
var d = JSON.parse(value);
f0 = d['CPU-MHz'];
f1 = d['CPU-min-MHz'];
f2 = d['CPU-max-MHz'];
return `CPU实时(Cur): ${f0} MHz | 最小(min): ${f1} MHz | 最大(max): ${f2} MHz `;
}
}
完成后重启pveproxy即可:
systemctl restart pveproxy
重启后页面需要 Ctrl
+ F5
强制刷新,在PVE概要页即可展示结果:
如果高度不够,修改 /usr/share/pve-manager/js/pvemanagerlib.js
文件的如下位置,可根据 extend
内容搜索至对应位置,修改 height
数值即可,420即上图的高度。
Ext.define('PVE.node.StatusView', {
extend: 'Proxmox.panel.StatusView',
alias: 'widget.pveNodeStatus',
// 监控面板高度
height: 420,
bodyPadding: '15 5 15 5',
layout: {
type: 'table',
columns: 2,
tableAttrs: {
style: {
width: '100%',
},
},
},
总结
记录PVE安装后的初始配置,以备不时之需。