抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)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配置文件

###ssh_config配置项修改 begin
PermitRootLogin yes
PasswordAuthentication yes
###ssh_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

存储库设置完成后,在插件Tab页下找到 MetaTubeShooter SubtitlesThuner SubtitlesSkinManager,依次点击安装,安装完成需要重启Jellyfin。

Snipaste_2023-10-09_21-03-17

测试硬解

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

Snipaste_2023-10-09_21-15-02

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

Snipaste_2023-10-09_21-16-50

评论