记录在 PVE8 虚拟化平台下安装 LXC 容器以实现 Jellyfin 的核显硬解,原则上适用于所有 12-13 代英特尔核显。
先决条件
具备实验环境
Proxmox VE 8.0
1 | proxmox-ve: 8.0.2 (running kernel: 6.2.16-14-pve) |
PVE 主机正常驱动核显,我使用的 CPU 为 12900 ES(QXQ3),核显为 UHD770。
1 | ╭─root@pve ~ |
开启 GUC 支持(PVE 主机)
编辑文件 /etc/modprobe.d/i915.conf
1 | nano /etc/modprobe.d/i915.conf |
添加以下内容
1 | options i915 enable_guc=3 |
重启 PVE 主机后生效,此时终端输入 dmesg | grep i915
查看到 guc 启用情况为 enable,且可以看到 dmc firmware
和 huc firmware
两个固件的信息。
下载并创建 LXC 容器
下载 CT 模板
在 PVE 的 web 界面,找到 local-CT模板-模板
,弹窗中搜索 debian
,选中 debian12 的模板下载。
新建 LXC 容器
下载完成后,右键节点,使用 debian12 的模板新建 LXC 容器,注意去除勾选 无特权容器
配置 LXC 容器
基础配置
创建完成后,先不启动,在 LXC 容器的配置文件中映射主机的核显设备
编辑配置文件 /etc/pve/lxc/218.conf
1 | nano /etc/pve/lxc/218.conf |
最下方添加以下内容
1 | lxc.cgroup2.devices.allow: c 226:0 rwm |
完成后启动 LXC 容器,在 PVE 控制台中登录,开启 ssh 远程登录权限。
1 | nano /etc/ssh/sshd_config #编辑sshd配置文件 |
对 LXC 容器进行换源、更新操作。
1 | nano /etc/apt/sources.list #编辑源文件 |
安装 intel_gpu_top,在命令行查看核显占用。
1 | apt install intel-gpu-tools |
终端输入 intel_gpu_top
看到如下信息,Ctrl+C 取消。
挂载 NFS
影音文件保存在 NAS 中,NAS 开启 NFS 分享,在 LXC 容器中挂载以供 Jellyfin 服务使用。
1 | apt install nfs-common -y #安装nfs-common |
挂载完成后查看文件是否存在,挂载得到的文件权限可以在 NFS 服务端做出配置。如无问题,则修改 /etc/fstab
文件开机自动挂载 NFS 目录。
安装 docker 版 Jellyfin
1 | apt install curl -y && curl -sSL https://get.docker.com/ | sh #安装docker |
配置 docker 在 NFS 挂载后启动
默认情况下 docker 和 NFS 挂载动作的执行是不区分先后顺序的,这会导致开机以后 docker 服务已经启动但 NFS 挂载点未就绪,于是在 docker 应用中就无法正常的看到存储池中的文件。
终端执行 systemctl list-units | grep mount
寻找与 fstab 中配置对应的信息,我的挂载任务为:mnt-share_nfs.mount
编辑 docker 服务配置,将上面找到的挂载任务设置为 After 项目以及 Wants 项目。
1 | nano /lib/systemd/system/docker.service #编辑配置文件 |
如有远程连接 docker 需求,可在下方的 ExecStart 中添加 -H tcp://0.0.0.0:2375
(上图为已添加)。
修改完成后执行 systemctl daemon-reload
重载系统服务。systemctl restart docker
重新启动 docker。
由于我的 NFS 存储服务由运行在虚拟机里的 Unraid 提供,需要设置 LXC 容器开机自启动时添加延时 180 秒,一般情况下需要重启主机,Unraid 虚拟机可以在 3 分钟内就绪。
配置 Jellyfin
开启核显硬解转码
由于使用的是 nyanmisaka
定制的镜像(镜像特点),只需在 控制台-播放
开启硬解即可。
安装插件
MetaShark 刮削插件(豆瓣)
进入 Jellyfin 控制台 > 插件 > 存储库,点击添加
输入存储库名称:MetaShark
MetaTube 刮削插件(成人)
进入 Jellyfin 控制台 > 插件 > 存储库,点击添加
输入存储库名称:MetaTube
输入存储库 URL:https://raw.githubusercontent.com/metatube-community/jellyfin-plugin-metatube/dist/manifest.json
MeiamSubtitles 字幕插件
进入 Jellyfin 控制台 > 插件 > 存储库,点击添加
输入存储库名称:MeiamSubtitles
输入存储库 URL:https://github.com/91270/MeiamSubtitles.Release/raw/main/Plugin/manifest-stable.json
SkinManager 主题美化插件
进入 Jellyfin 控制台 > 插件 > 存储库,点击添加
输入存储库名称:SkinManager
输入存储库 URL:https://raw.githubusercontent.com/danieladov/JellyfinPluginManifest/master/manifest.json
YouTubeMetaData 刮削插件
进入 Jellyfin 控制台 > 插件 > 存储库,点击添加
输入存储库名称:YoutubeMetadata
输入存储库 URL:https://raw.githubusercontent.com/ankenyr/jellyfin-plugin-repo/master/manifest.json
存储库设置完成后,在插件 Tab 页下找到 MetaTube
、Shooter Subtitles
、Thuner Subtitles
、SkinManager
、YoutubeMetadata
,依次点击安装,安装完成需要重启容器才能生效。
测试硬解
4k-120Mbps 转码,可以看出 GPU 占用如下:
此时的 CPU 占用处于较低的水准。则说明核显硬解配置成功。
-EOF
查看最新版,请访问本文链接:https://blog.onehat.cn/p/834f.html
原创作品,转载请保留出处。