Last active
February 4, 2024 05:33
-
-
Save Potat0000/1e0c6095b6011fff6aab5ccf1eea57c1 to your computer and use it in GitHub Desktop.
A script to modify pve-manager
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# shellcheck disable=SC2016 | |
# 脚本功能: | |
# 1. 修改 LXC 源为清华源 | |
# 2. 在面板中显示 CPU 温度和频率 | |
# 3. 去除数据中心概要和节点概要中的订阅状态显示 | |
# 4. 去除无订阅弹窗 | |
# 适配版本: | |
# 在 PVE 7.4、8.0、8.1 上测试通过 | |
# 理论上适用于所有 Proxmox VE 7、8 | |
# 使用方法: | |
# 以 root 身份运行即可,运行后刷新浏览器缓存检查效果 | |
# 每次 pve-manager 更新后需重新运行一次脚本 | |
aplinfo="/usr/share/perl5/PVE/APLInfo.pm" | |
np="/usr/share/perl5/PVE/API2/Nodes.pm" | |
pvejs="/usr/share/pve-manager/js/pvemanagerlib.js" | |
plib="/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js" | |
if ! command -v sensors >/dev/null 2>&1; then | |
echo 安装 lm-sensors | |
apt update && apt install -y lm-sensors | |
fi | |
pvever=$(pveversion | awk -F "/" '{print $2}') | |
echo "PVE 版本: $pvever" | |
echo 备份源文件 | |
if [ ! -e "$np.$pvever.bak" ]; then cp $np "$np.$pvever.bak"; else cp "$np.$pvever.bak" $np; fi | |
if [ ! -e "$aplinfo.$pvever.bak" ]; then cp $aplinfo "$aplinfo.$pvever.bak"; else cp "$aplinfo.$pvever.bak" $aplinfo; fi | |
if [ ! -e "$plib.$pvever.bak" ]; then cp $plib "$plib.$pvever.bak"; else cp "$plib.$pvever.bak" $plib; fi | |
if [ ! -e "$pvejs.$pvever.bak" ]; then cp $pvejs "$pvejs.$pvever.bak"; else cp "$pvejs.$pvever.bak" $pvejs; fi | |
echo "修改 $(basename $aplinfo)" | |
echo " - 修改 LXC 源" | |
sed -i 's|http://download.proxmox.com|https://mirrors.bfsu.edu.cn/proxmox|g' $aplinfo | |
echo "修改 $(basename $np)" | |
echo " - 添加数据源" | |
therm='$res->{thermalstate} = `sensors`;' | |
cpure='$res->{cpure} = `cat /proc/cpuinfo | grep -i "cpu mhz"`;' | |
sed -i "/PVE::pvecfg::version_text()/a \ $cpure\n\ $therm" $np | |
echo "修改 $(basename $pvejs)" | |
echo " - 添加 CPU 温度和频率展示项" | |
tmpf=tmpfile.temp | |
cat >$tmpf <<'EOF' | |
{ | |
itemId: 'thermal', | |
colspan: 2, | |
printBar: false, | |
title: gettext('温度'), | |
textField: 'thermalstate', | |
renderer: value => { | |
const v = value.trim().split(/\n{2,}(?=[A-z]+[-_])/).map(v => { | |
let name = v.match(/^[^-]+/)[0] + ': '; | |
let tempure = v.match(/(?<=:\s+\+)(?:\d+(?:\.\d*[1-9])?)|N\/A/g); | |
if (tempure[0] == 'N/A') { | |
return ''; | |
} else { | |
tempure = tempure.map(v => v + '°C'); | |
} | |
if (/coretemp/i.test(name)) { | |
name = 'CPU: '; | |
tempure = tempure[0] + ' (' + tempure.slice(1).join(', ') + ')'; | |
} else if (/nvme/i.test(name)) { | |
name = 'NVME: '; | |
tempure = tempure[0]; | |
} else if (/iwlwifi/i.test(name)) { | |
name = 'WiFiCard: '; | |
tempure = tempure[0]; | |
} else { | |
tempure = tempure[0]; | |
} | |
return name + tempure; | |
}).filter(v => v !== ''); | |
return v.sort().join(' | '); | |
} | |
}, | |
{ | |
itemId: 'cpumhz', | |
colspan: 2, | |
printBar: false, | |
title: gettext('CPU频率'), | |
textField: 'cpure', | |
renderer: value => { | |
const v = value.match(/(?<=:\s+)\d+/g); | |
return v.map(e => e + 'MHz').join(' | '); | |
} | |
}, | |
EOF | |
ln=$(sed -n '/pveversion/,+10{/},/{=;q}}' $pvejs) | |
sed -i "${ln}r $tmpf" $pvejs | |
rm $tmpf | |
echo " - 去除数据中心概要和节点概要中的订阅状态显示" | |
ln=$(sed -n '/Load average/,+10{/},/{=;q}}' $pvejs) | |
sed -i "$((ln + 1)),$((ln + 5))d" $pvejs | |
ln1=$(sed -n '/pmxNodeInfoRepoStatus/{=;q}' $pvejs) | |
ln2=$(sed -n '/pmxNodeInfoRepoStatus/,+10{/})/{=;q}}' $pvejs) | |
sed -i "$((ln1 - 2)),${ln2}d" $pvejs | |
ln1=$(sed -n "/title: gettext('Subscriptions')/{=;q}" $pvejs) | |
ln2=$(sed -n "/title: gettext('Subscriptions')/,+20{/],/{=;q}}" $pvejs) | |
sed -i "$((ln1 - 1)),$((ln2 + 1))d" $pvejs | |
echo "修改 $(basename $plib)" | |
ln=$(sed -n '{N; /\s*if (.*data\.status.*) {/{=;q} ; D}' $plib) | |
if [ -z "$ln" ]; then | |
echo " - 无需去除弹窗" | |
else | |
echo " - 去除弹窗" | |
sed -i -r "$((ln - 1)) s/^(\s+).*$/\1if (false) {/" $plib | |
sed -i "$ln d" $plib | |
fi | |
echo -n "重启服务..." | |
systemctl restart pveproxy | |
echo " Done" | |
echo "请使用 Shift+F5 刷新浏览器缓存查看效果" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment