珂珂的个人博客 - 一个程序猿的个人网站

PVE折腾记

    由于有一台11代  i5 1135G7  的软路由,听说6.1内核后可以核显SRIOV  这个核显这么好那必须要折腾下,果断格式化以前安装的Esxi  。在网上下载的最新安装包proxmox-ve_8.1-1  iso 无法安装,感觉是包损坏,怀疑是迅雷下载,又迅雷重新下载又让威联通下载,结果得到的文件sha值是一样,但sha512和官网的不一致?

不管了先安装以前下载好的proxmox-ve_8.0-2.iso   ,一切顺利。

2024.1.3 更新

恩山论坛https://www.right.com.cn/forum/thread-8313811-1-1.html 

1.用rufus写入pve 8.1.iso镜像到u盘,可以正常安装了。

2.用rufus在写入iso时,提示pve 8.1.iso是一个“Hybride镜像,只能用dd方式写入”,猜测可能是8.1引入了安全引导模式造成的。

3.Ventoy无法引导,猜测可能也是第3条的原因。

4.下载新的Ventoy,已解决这个问题:https://github.com/ventoy/Ventoy/actions/runs/7088423200


刚好我就是用Ventoy安装的,版本是1.0.96

   一、

    首先解决pve联网, 我的路由器是192.168.8.3  在界面中将网关改为192.168.8.3,  DNS也改为192.168.8.3

DNS也可以使用 nano /etc/resolv.conf 修改

然后用ssh 连接,ping www.baidu.com 检测是否联网。

    

    二、

    接下来更换源,这里我走了弯路,先在PVE节点->更新->存储库  禁用掉系统自带的企业源,然后添加新源,网上找的无法使用,好像不是针对8.0的。有人说存储库是跟版本有关系的,8.0用的是bookworm, 我之前添加的会出现bullseye  、buster什么的  。

然后发现apt update 会有错误出现,安装apt-get install lm-sensors -y也无法找到包Unable to locate package lm-sensors。还以为跟界面上提示的错误“没有启用Proxmox VE存储库,你没有得到任何更新”有关。 还以为是没重启,结果重启也不行

最后找到可行的资料

编辑/etc/apt/sources.list   编辑前最好先备份下

cp /etc/apt/sources.list /etc/apt/sources.list.backup

sources.list 添加以下内容

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
 
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
 
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
 
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
 
deb http://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription

下段的deb-src有什么区别

deb-src http://mirrors.tuna.tsinghua.edu.cn/debian bookworm main contrib non-free non-free-firmware
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian bookworm-backports main contrib non-free non-free-firmware
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware

编辑完后用cat /etc/apt/sources.list  检查下

同理编辑/etc/apt/sources.list.d/ceph.list

内容为

deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription


添加pve-8软件包仓库,应该已经在上面sources.list最后一行添加了

echo "deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-enterprise.list

然后在pve管理界面中禁用掉企业库

之后

apt update

果然ok

可以执行apt-get upgrade 或apt dist-upgrade -y真正更新,注意区别。先不执行吧


确认版本

pveversion

替换CT Templates

参考http://mirrors.ustc.edu.cn/help/proxmox.html#id5

将 /usr/share/perl5/PVE/APLInfo.pm 文件中默认的源地址 http://download.proxmox.com 替换为 https://mirrors.ustc.edu.cn/proxmox

cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm

针对 /usr/share/perl5/PVE/APLInfo.pm 文件的修改,执行`systemctl restart pvedaemon`后生效    

三、

源更新了下一步安装温度监控并在管理页面中显示。

执行以下命令

apt-get install lm-sensors -y

成功后执行以下命令查看是否可以显示温度

sensors

网上找个脚本,比如我放在了 /root/sensors.sh

然后给它执行权限

chmod +x sensors.sh

然后执行

./sensors.sh

Shift+F5刷新浏览器就可以看到了。

如果你已经用别人的脚本之类的修改过页面,输入apt update && apt reinstall pve-manager回车,恢复官方设置,然后再使用本脚本!

另外:每次pve升级之后都需要执行一次脚本,因为升级后PVE会自己还原文件,

参考https://post.smzdm.com/p/a20lknkn/

https://www.bilibili.com/video/BV1PP411Q7UQ/


四、

设置SRIOV直通核显

安装git和dkms

apt install -y  build-* git   dkms

克隆代码

git clone https://github.com/strongtz/i915-sriov-dkms.git

复制刚才克隆的文件夹,注意如果/usr/src已经有的话需要强制覆盖不然可能编译成老版本的?

cp -r /root/i915-sriov-dkms/ /usr/src/i915-sriov-dkms-6.5
cd  /usr/src/i915-sriov-dkms-6.5

修改dkms.conf

将第一行@_PKGBASE@ 替换为i915-sriov-dkms

第二行@PKGVER@ 替换为6.5

更新headers

apt install pve-headers-$(uname -r)

也可以安装具体版本apt install -y   pve-headers-6.2.16-3-pve  pve-firmware

编译并安装驱动

dkms install -m i915-sriov-dkms -v 6.5

我会提示这个

Module version  for i915.ko

exactly matches what is already found in kernel 6.5.11-4-pve.

DKMS will not replace this module.

You may override by specifying --force.

depmod...

然后加上--force

dkms install --force -m i915-sriov-dkms -v 6.5

编译很快?感觉成功?已经自带了?

检查一下驱动安装情况

dkms status

在未使用--force安装后执行状态检查会有警告

如果有多行或者报错

dkms remove

修改/etc/default/grub文件的GRUB_CMDLINE_LINUX_DEFAULT项, 添加"quiet intel_iommu=on   i915.enable_guc=7"

增加虚拟化驱动,加载vifo系统模块

修改 /etc/modules 文件

添加以下内容

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

 更新 GRUB 与 initrramfs

update-grub && update-initramfs -u

安装sysfsutils 用来设置虚拟核显的数量(这一步只有宿主机需要执行!!!)

apt install sysfsutils

设置虚拟核显的数量

查找iGPU所在总线

lspci | grep VGA

我的为00:02.0

修改/etc/sysfs.conf

echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 3" > /etc/sysfs.conf

上面的数字代表数量

reboot重启

lspci | grep VGA

检查是否成功,成功的话应该会有多个,然而我没有成功!!


在pve8.0.2 的时候内核6.2.16-3  执行上面dkms install -m i915-sriov-dkms -v 6.2   会报错

error: implicit declaration of function ‘drm_dp_mst_hpd_irq_handle_event’ [-Werror=implicit-function-declaration]

 3888 |         drm_dp_mst_hpd_irq_handle_event(&intel_dp->mst_mgr, esi, ack, &handled);

error: implicit declaration of function ‘drm_dp_mst_hpd_irq_send_new_request’ [-Werror=implicit-function-declaration]

 3971 |                         drm_dp_mst_hpd_irq_send_new_request(&intel_dp->mst_mgr);

在github上找到了这么一段话

这句话的意思就是发现了一个函数的隐式声明,但是在代码的当前位置之前没有提供该函数的显式声明或定义

实际上就可以理解为dkms在编译这个新版本的仓库的时候发现了drm_dp_mst_hpd_irq_handle_event这个函数没有被定义,那么发现了问题我就去查询到了这个函数的定义来源于这个头文件

#include <drm/drm_dp_mst_helper.h>

那么通过find命令可以查询到这个头文件在

/usr/src/你编译仓库时的内核版本/include/drm/display/drm_dp_mst_helper.h

这里,直接vi进去搜索是否存在drm_dp_mst_hpd_irq_handle_event的定义,发现我使用的这个内核版本 6.2.16-3-pve 里面没有定义这个函数

同理我查询了我的debian上的其他几个内核中同样的文件内是否存在这个函数定义,这里包含5.15.104-1-pve/ 6.1.10-1-pve,这两个内核中同样没有定义这个函数,于是我直接安装了最新的6.5.11-6-pve内核,头文件中果然有了这个函数的定义

int drm_dp_mst_hpd_irq_handle_event(struct drm_dp_mst_topology_mgr *mgr, const u8 *esi, u8 *ack, bool *handled);

得出的结论就是其实还是和内核版本强依赖,如果你的内核版本报出了同样的错误,那么请安装比起你当前内核版本更新一点的内核头文件,然后去查看其中是否存在了这个函数的支持,如果没有发现,请继续安装更高版本的头文件,直到发现了合适的版本后

安装这个版本对应的内核,使用proxmox-boot-tool kernel pin工具固定新版本,同时编译命令设置为dkms install --force -m i915-sriov-dkms -v 6.2 -k 6.5.11-6-pve 使用-k来指定你要编译的dkms对应查找的内核版本,如果编译成功那么就没有问题了


于是折腾内核和headers 始终没成功,最后还是重装了8.1   安装完后内核是6.5  于是就有上面的执行步骤了。

查找内核和headers,参考https://foxi.buduanwang.vip/virtualization/pve/2203.html/

apt search pve-kernel|grep pve-kernel-
apt install pve-kernel-6.2.16-5-pve

apt search pve-headers|grep pve-headers-
apt install pve-headers-6.2.16-5-pve

又回购上面哪里有错,在上面github 库看到一句话

The SR-IOV enablement commandline is changed since commit #092d1cf. If you are updating from previous version, please modify i915.enable_guc=7 to i915.enable_guc=3 i915.max_vfs=7 in your kernel command line.

这一句英文还是看得懂,于是改了上面的/etc/default/grub文件的GRUB_CMDLINE_LINUX_DEFAULT项, 改为"quiet intel_iommu=on   i915.enable_guc=3 i915.max_vfs=7"

github上还有一句

Creating virtual functions

echo 2 > /sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs

我看上面我的步骤不是在/etc/sysfs.conf里吗,是一个意思? 那直接修改/sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs 我输入了数字3

然后更新下grub

update-grub && update-initramfs -u

重启reboot

重启后lspci看到8个VGA   这个增加的7个具体是哪设置的个数生效。额,我看/etc/sysfs.conf 变成7了  /sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs也变成7了。

添加自启脚本,这步好像不需要,可能上面的sysfsutils实现了

echo '#!/bin/bash' >>/etc/rc.local   sysfsutils
echo "echo 7 > /sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs" >>/etc/rc.local
chmod +x /etc/rc.local


五、


安装Windows

在选择机型时需要选Q35  BIOS 选UEFI

硬盘选SCSI, 网络选Virtio 半虚拟化,CPU类别选host

除了系统光驱外再添加一个光驱用来安装Virtio驱动

调整引导顺序

检查无误就可以开机了,开机按ESC  进BIOS 把安全启动关了,在安全启动那一项按空格,再返回Reset

在windows安装界面的时候需要加载驱动不然会找不到硬盘,选择新添加的那个光驱找到下图的路径

硬件  显示那一项先默认,装好SRIOV和驱动后再设置无,然后再打开远程桌面。    

添加SRIOV的时候选原始设备,上面映射的设备是空的。

驱动安装好后关机,将显示设置为无,并将添加的SRIOV勾选主GPU ,设置无后将无法在pve中看到画面,这时候正常是可以从远程桌面连接,但很不幸我连接后是个黑屏界面然后会被退出。如果显示设置为默认,可以进到界面但是核显无法驱动显示错误代码43。怀疑其实不远程连接之前在上面安装jellyfin  应该是可以启用核显的。

另一种方法在上面安装ToDesk软件,远程连接发现比较慢,去设备管理器中发现核显正常,任务管理器也显示GPU了。 设备管理器中只有核显,todesk软件全靠cpu虚拟画面?


凌晨测试显示设置为无、Sriov设置为主GPU    jellyfin 能发现有Intel QuickSync  但是无法使用。提示播放错误该客户端与媒体不兼容,服务器未发送兼容的媒体格式。

改为Video Acceleration API   实测为CPU解码, 任务管理器中能看到占用率很高,  PVE中看到CPU温度爆炸了。Video4Linux2 没有试,   FFmpeg 又是啥,我看网上有的硬件解码会调用这个?  那个Intel QuickSync应该是不管有没有GPU都能显示的,我的下面选项也能全部勾选。

1.14

怀疑是ffmpeg问题,发现10.8.13无法设置ffmpeg路径, 路径就是ffmpeg写死的无法更改,降级10.8.10后可以设置,而且重新安装不需要再进行初始化了?但设置自定义ffmpeg路径后还是该客户端与媒体不兼容,服务器未发送兼容的媒体格式。 

我又发现jellyfin安装目录有自带的ffmpeg  所以应该不是ffmpeg引起。


上一篇:个人代码全部开源

下一篇:centos stream 9部署strongswan


0 评论

查看所有评论

给个评论吧