抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

记录在 PVE8 虚拟化平台下安装 LXC 容器以实现 Jellyfin 的核显硬解,原则上适用于所有 12-13 代英特尔核显。

先决条件

具备实验环境
Proxmox VE 8.0

1
2
proxmox-ve: 8.0.2 (running kernel: 6.2.16-14-pve)
qemu-server: 8.0.7

PVE 主机正常驱动核显,我使用的 CPU 为 12900 ES(QXQ3),核显为 UHD770。

1
2
3
╭─root@pve ~
╰─# ls /dev/dri
by-path card0 renderD128

开启 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 firmwarehuc firmware两个固件的信息。
Snipaste_2023-10-09_17-59-53.png

下载并创建 LXC 容器

下载 CT 模板

在 PVE 的 web 界面,找到 local-CT模板-模板,弹窗中搜索 debian,选中 debian12 的模板下载。
Snipaste_2023-10-09_18-09-49.png

新建 LXC 容器

下载完成后,右键节点,使用 debian12 的模板新建 LXC 容器,注意去除勾选 无特权容器
Snipaste_2023-10-09_18-34-13.png
Snipaste_2023-10-09_18-34-36.png

配置 LXC 容器

基础配置

创建完成后,先不启动,在 LXC 容器的配置文件中映射主机的核显设备
编辑配置文件 /etc/pve/lxc/218.conf

1
nano /etc/pve/lxc/218.conf

最下方添加以下内容

1
2
3
4
5
6
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
lxc.apparmor.profile: unconfined
lxc.cap.drop:

完成后启动 LXC 容器,在 PVE 控制台中登录,开启 ssh 远程登录权限。

1
2
3
4
5
6
7
8
nano /etc/ssh/sshd_config #编辑sshd配置文件

###sshd_config配置项修改 begin
PermitRootLogin yes
PasswordAuthentication yes
###sshd_config配置项修改 end

service ssh restart #重启sshd服务

对 LXC 容器进行换源、更新操作。

1
2
3
4
5
6
7
8
9
10
nano /etc/apt/sources.list #编辑源文件

###sources.list 源文件修改 begin
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://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
###sources.list 源文件修改 end

apt update && apt upgrade -y #更新

安装 intel_gpu_top,在命令行查看核显占用。

1
apt install intel-gpu-tools

终端输入 intel_gpu_top看到如下信息,Ctrl+C 取消。

Snipaste_2023-10-09_21-09-39

挂载 NFS

影音文件保存在 NAS 中,NAS 开启 NFS 分享,在 LXC 容器中挂载以供 Jellyfin 服务使用。

1
2
3
4
5
6
7
8
9
apt install nfs-common -y #安装nfs-common
apt install nfs-utils -y #高版本Ubuntu中,可安装nfs-utils
mount -t nfs 192.168.31.220:/mnt/disk2 /mnt/share_nfs #挂载NFS

nano /etc/fstab #编辑配置文件

#配置文件fstab begin
192.168.31.220:/mnt/disk2 /mnt/share_nfs nfs defaults 0 0
#配置文件fstab end

挂载完成后查看文件是否存在,挂载得到的文件权限可以在 NFS 服务端做出配置。如无问题,则修改 /etc/fstab文件开机自动挂载 NFS 目录。

安装 docker 版 Jellyfin

1
2
3
4
5
apt install curl -y && curl -sSL https://get.docker.com/ | sh #安装docker

#安装Jellyfin
docker run -d -p 8096:8096 -p 8920:8920 --volume jellyfin-config:/config --volume jellyfin-cache:/cache -v /mnt/share_nfs:/media --device=/dev/dri:/dev/dri --restart=always --name jellyfin nyanmisaka/jellyfin:latest

配置 docker 在 NFS 挂载后启动

默认情况下 docker 和 NFS 挂载动作的执行是不区分先后顺序的,这会导致开机以后 docker 服务已经启动但 NFS 挂载点未就绪,于是在 docker 应用中就无法正常的看到存储池中的文件。
终端执行 systemctl list-units | grep mount寻找与 fstab 中配置对应的信息,我的挂载任务为:mnt-share_nfs.mount

Snipaste_2023-10-09_20-30-28.png

编辑 docker 服务配置,将上面找到的挂载任务设置为 After 项目以及 Wants 项目。

1
nano /lib/systemd/system/docker.service #编辑配置文件

Snipaste_2023-10-09_20-47-11

如有远程连接 docker 需求,可在下方的 ExecStart 中添加 -H tcp://0.0.0.0:2375(上图为已添加)。

修改完成后执行 systemctl daemon-reload重载系统服务。systemctl restart docker重新启动 docker。

由于我的 NFS 存储服务由运行在虚拟机里的 Unraid 提供,需要设置 LXC 容器开机自启动时添加延时 180 秒,一般情况下需要重启主机,Unraid 虚拟机可以在 3 分钟内就绪。

Snipaste_2023-10-10_07-50-13

配置 Jellyfin

开启核显硬解转码

由于使用的是 nyanmisaka定制的镜像(镜像特点),只需在 控制台-播放开启硬解即可。

Snipaste_2023-10-09_20-53-18

Snipaste_2023-10-09_20-53-49

安装插件

MetaShark 刮削插件(豆瓣)

进入 Jellyfin 控制台 > 插件 > 存储库,点击添加

输入存储库名称:MetaShark

输入存储库 URL:https://ghproxy.com/https://github.com/cxfksword/jellyfin-plugin-metashark/releases/download/manifest/manifest_cn.json

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 页下找到 MetaTubeShooter SubtitlesThuner SubtitlesSkinManagerYoutubeMetadata ,依次点击安装,安装完成需要重启容器才能生效。

测试硬解

4k-120Mbps 转码,可以看出 GPU 占用如下:

Snipaste_2023-10-09_21-15-02

此时的 CPU 占用处于较低的水准。则说明核显硬解配置成功。

Snipaste_2023-10-09_21-16-50

-EOF

查看最新版,请访问本文链接:https://blog.onehat.cn/p/834f.html

原创作品,转载请保留出处。

评论