Jellyfin免费的媒体中心
2022-05-30OverLord
OverLord
如果简单一点去阐述这个系统化组合,就是以PVE作为虚拟机底层系统,再用它支撑Jellyfin媒体中心的功能,这样的配置无疑更加灵活方便,而且在使用的时候也更简单,更稳定。以往使用PVE做底层系统的时候,我们都是在其上安装虚拟机,这固然可以将电脑的硬件资源和虚拟环境分隔开,但传统虚拟机还是会占用被指定分配的硬件。而本次则是使用更为轻便的Docker来实现,所谓的Docker其实是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的电脑上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口(图1)。而且它对硬件资源的使用方式是“随用随取”,不像虚拟机一样需要提前分配好硬件资源,无疑这样的灵活性大大增加。
什么是PVE虚拟机?
PVE的全称是Proxmox Vir tual Environment(官方网站:https://www.proxmox.com/),或称之为Proxmox VE(图2),是一款开源的虚拟化方案。其软件和社区支持都是免费的(基于Debian Linux和KVM的虚拟化平台),企业用户则可以通过订阅制获得付费商业支持。PVE不仅仅是免费开源这么简单(当然非常重要),而是PVE具备极低的硬件资源要求、配置极为简单,且兼容性非常出色。
硬件配置要求不高
PVE的一大优势就是对电脑的系统性能要求不高(资源占用低),但是需要一定的Linux基础。而且它有一个硬件需求的必备项——要使用支持虚拟化的处理器。当然,这个要求对时下的电脑来说一点都不高,目前绝大部分处理器能够支持虚拟化技术,无论是英特尔还是AMD的都是如此。当然,处理器的性能越高越好,这对任何应用需求都是如此。在我们的PVE+Jellyfin组合方案下,一个10年以内的电脑,只要不是使用特殊的低端CPU(如Atom),都完全可以胜任。
要想知道自己的电脑处理器是否支持虚拟化,下载Securable这个小软件就型。下载(下载地址:https://www.grc.com/securable.htm)后运行唯一的执行文件,在最后一项“Hardware Virtualization”显示为“Yes”(图3),则表示处理器支持虚拟化功能。
点击“Click for more”可以看到具体的虚拟化技术信息(图4)。就PVE+Jellyfin的实际性能需求来看,笔者建议最好处理器的核心数量不少于2个——这意味着即便是赛扬处理器也可以胜任,当然,如果可能自然是核心、线程数量越多越好。
当然了,如果处理器不支持,则S e c u r a b l e 中“H a r d w a r eVirtualization”项会显示“No”(图5)。
确定处理器支持后,还需要重启进入电脑的BIOS(F1或者Del),找到BIOS中相关的CPU虚拟化功能界面,确认或将其设置为“Enabled”启用该功能(图6)。
另外要特别提示一点,我们以PVE+Jellyfin的组合方式实现媒体中心,最重要的就是要具备视频编解码能力,这也意味着你必须使用一个带有核显的处理器。而且如果可能的话,处理器不要低于英特尔第六代酷睿。这样可以提供对4K HEVC视频内容的硬件编解码。
除了这些,笔者推荐至少要拥有8G B 的内存容量(图7)——PV E自身的内存占用一般在2GB~4GB内,再分配给Jellyfin大约4GB内存刚刚好。当然,如果你对虚拟机还有其他需求,那么内存最好达到16GB,好在现在DDR3、DDR4内存的价格都很便宜,即便扩展起来成本费用也不会很贵。
最后在存储部分,笔者强烈建议使用一块固态硬盘(图8),哪怕是SATA接口的固态硬盘。除了传输速度优势,最重要的地方在于响应时间、多任务读写,固态硬盘都有着传统机械硬盘不可比拟的技术优势,即便是SATA规格的固态硬盘也不例外。
安装PVE从USB闪存盘开始
首先要下载得到PVE的ISO安装文件(下载地址:https://www.proxmox.com/en/downloads),此外還需要Ru f u s工具用于制做引导安装USB闪存盘(下载地址:https://rufus.ie/)。准备一个8GB容量的USB闪存盘即可。准备就绪(图9)之后,将其插入电脑背部I/O部分的USB接口,注意最好不要插到电脑的前置USB接口,部分机箱的USB插针扩展接口会有供电问题。
解压缩Rufus后双击执行文件运行,点击引导类型处的“选择”项,加载下载PVE ISO安装文件的路径,选中ISO文件,然后按照默认设置(可以选择纯UEFI启动,前提要确保主板支持并正确在BIOS中设置为UEFI启动),再点击“开始”运行(图10)。
注意,在这里Rufus会提示选择镜像使用的模式,这和普通的Linux、Windows安装启动盘略有区别,在这里要选择“以DD镜像模式写入”而不是“以ISO镜像模式写入(推荐)”(图11),如果选择了后者USB闪存盘引导后将无法正确引导安装PVE,这是和普通启动盘制作时最大的区别。
接下来分别提示两次警告,内容分别是格式化(图12)、多分区提示(图13),依次点击默认的“确定”即可,不需要更改设置内容。
USB闪存盘写入完成从电脑上拔出,将其转移到即将安装PVE的电脑上插入,并且开机使用该USB闪存盘引导(不同电脑的引导菜单选项不同,强烈建议进入BIOS后设置启动顺序,将USB闪存盘设置为优先引导),在PVE的引导选单上选择第一项,即“Install Proxmox VE”(图14)。
经过PVE引导自检,系统来到欢迎界面,读取协议,点击右下的“I agree”继续(图15)。
在接下来的界面中,主要是设置安装的硬盘位置,默认提供一个硬盘位置,如果是多个硬盘,点击该处选择需要安装的硬盘即可。如果要在该硬盘上分区安装,在选择正确的硬盘设备后,点击后面的“Options”设置即可,这里笔者以整盘默认分区方式安装,点击“Next”继续(图16)。
对于需要硬盘分区的用户,在“Options”选项设置中点击进入磁盘分区页面(图17),找到上方的“Filesystem”设置磁盘分区格式,推荐使用默认的EXT4分区方式(Linux下的一种分区格式,Ext4文件系统有更好的设计,更好的性能以及稳定性)。hdsize处是设置总存储空间容量的地方。
不同于Windows使用NTFS分区格式,Linux还需要使用到交换分区,在下方的swapsize处设置交换分区容量,注意交换分区的容量大小不是随意设置,一般情况下只要将其设置为与本机内存容量相当即可,例如电脑拥有8GB内存,那么这里也设置成8GB交换分区容量就够了。
除此之外,maxroot项是用于保存PVE操作系统镜像的独立空间,不能分配给虚拟机硬盘使用,酌情设置就可以(例如预留20GB的安装镜像容量值,可以充分满足多个系统的安装镜像保存);接下来是minfree,这个minfree是用于保存虚拟机快照的,推荐设置为内存容量的两倍大小为宜,例如8GB内存的电脑设置为16GB,16GB内存的电脑设置为32GB,当然这还要根据自己硬盘容量大小来权衡。最后就是maxvz,这个是用来数据保存的空间,可以设置更大一些。但是这一切容量之和不能超过hdsize的设置容量。
设置完点击“Next”到下一步设置服务器的国家、时区及键盘布局(图18),国家处填写“China”,其他选项保持默认设置即可。
之后就是系统的管理员账号和密码以及邮箱(图19),注意这是PVE的最高权限Root用户,设置密码最好是复杂的字符+字母+数字+大小写乱序生成,以确保系统安全性。
继续安装设置,在网络管理界面(图20),注意第一个“Management Interface”是管理口设置,所谓管理口是无论电脑中含有几个有线网络接口,只有一个具备管理能力,即可以连接到PVE设置后台进行设置调整,如果是多网卡的电脑,务必确认使用的是哪一个网卡;“Hostname(FQDN)”则是主机名称,根据自己喜好设置即可;其他分别是IP地址、子网掩码、网关以及DNS服务器地址,根据实际情况填写即可。
一切设置完毕PVE就开始安装了,根据电脑的性能安装时间一般在5分钟至10分钟左右,安装完毕重启电脑即可。重启后注意要选择硬盘启动,PVE的引导菜单下(图21),默认项引导即可(无人工干预自动进入)。
引导完毕,界面将变成纯字符界面,提示也极为简单——只有IP地址和登录输入(图22),这时候我们就可以换到别的电脑来进行操作了。
在其他电脑上,输入服务器IP地址,注意格式必须要完整,包括https://以及端口号8006,例如https://192.168.1.2:8006,否则是无法正确访问的。在登录界面,首先可以将语言设置为“Chinese(Simplified)”即中文(图23)。
然后输入用户名和密码(图24),即可登录到PVE的主界面了。
登录后,PVE会提示“没有有效订阅”,点击确定即可忽略(图25),这个订阅是针对专业级、企业级用户的,普通用户无需理会。
登录成功后,我们就可以看到P V E的基础操作界面了(图26)。
安装Jellyfin
此時,我们将要开始创建Jelly f in。在PVE主界面点击右上方的创建CT,注意不是创建虚拟机,我们要创建的是LXC容器。在这里要特别留意,取消下方勾选的“无特权的容器”,这样我们才能让Jelly f in的Docker具备访问硬件的权限。此外,在CTID项中要记住当前的ID数字,如本例中的103(图27),后面会用到。
在下一步的模板中,存储保持默认的Local即可,在模板处则点击右侧下拉箭头找到ubuntu-18.04-standard_18.04.1(图28)。
在接下来的CPU部分,笔者推荐设置两个核心供Jelly fin使用,内存部分最少设置不小于2GB,即2048MB(图29),推荐4GB~8GB,这个也要根据当前安装PVE电脑的内存而定。
接下来是网络部分的设置,设置好对应的局域网内IP地址(笔者建议使用静态IP,不要使用DHCP),但是特别留意在IP地址后要加上netmask,即/24(图30)。
配置完成后启动该容器,然后在容器中,我们将安装Jellyfin——首先分别输入命令apt update、apt upgrade,这两个命令是更新源,注意每输入一条指令都要回车执行一下才可以。接下来将分别输入每一条执行,注意也是每输入一条命令就要回车执行一下,并且确保执行完本条命令后再输入下一条:
sudo apt install apt-transport-https software-properties-common
sudo add-apt-repository universe
wget -O - https://repo.jellyfin.org/ubuntu/jellyfin_team.gpg.key | sudo apt-key add -
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/ubuntu $( lsb_release -c -s )main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
sudo apt update
sudo apt install jellyfin
逐条执行命令后,jellyfin的Docker应该就可以正常运行了,我们可以通过输入命令service jellyfin status来查看执行状态。如果看到绿色的“active(running)”字样(图31),说明jellyfin已经在运行了。
接下来,回到PVE主界面,打开Shell功能,依次输入三个命令,apt update、apt install i965-va-driver vainfo、vainfo,即更新源、安装显卡驱动和检测、执行检测。在依次执行完前两条命令后,最后执行vainfo,如果出现以下信息,就意味着正确安装驱动,并能显示当前显卡支持的编解码。如果执行vainfo命令报错则意味着安装错误:
root@pve:~# vainfo
error: can't connect to X server!
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function \_\_vaDriverInit_1_4
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.4 (libva 2.4.0)
vainfo: Driver version: 英特爾 i965 driver for 英特尔(R) Coffee Lake - 2.3.0
vainfo: Supported profile and entrypoints
为了让Jellyfin能够调用显卡的硬件编码功能,我们还需要进一步执行操作,此时在Shell窗口内输入ls -l /etc/dri,列出当前显卡信息,如下:
root@pve:~# ls -l /dev/dri/
total 0
drwxr-xr-x 2 root root 80 Oct 13 12:39 by-path
crw-rw---- 1 root video 226, 0 Oct 13 12:39 card0
c r w-r w---- 1 ro ot render 2 2 6, 128 Oct 13 12:3 9renderD128
其中,在第二行信息中,card0的设备号可以看到是“226,0”,然后再看第三行renderD128,设备号为“226,128”记住这两条内容。这是笔者的处理器核显设备号,具体到自己使用的电脑核显可能会出现不一样,但是方法一致。
在PVE的目录/etc/pve/lxc中有容器配置文件存放地,找到自己对应容器ID的配置文件,如103.conf,此时使用nano命令编辑这个103.conf文件,此时在Shell中输入命令“nano /etc/pve/lxc/103.conf”。打开103.conf后一直向下拉倒末尾,添加如下命令:
lxc.cgroup.devices.allow: c 226:0 rwm
lxc.cgroup.devices.allow: c 226:128 rwm
lxc.cgroup.devices.allow: c 29:0 rwm
lxc.autodev: 1
lxc.hook.autodev: /var/lib/lxc/103/mount_hook.sh
注意,这里是添加命令,不是执行命令,依次填写即可。这里面的“226,0”、“226,128”就是之前记录的显卡设备号,103即本容器的ID,具体要根据自己电脑的实际情况调整。
接下来我们继续使用nano命令创建一个名为mount_hook.sh的文件,即在Shell中输入命令“nano /var/lib/lxc/103/mount_hook.sh”回车执行。然后添加如下命令到mount_hook.sh中好让容器有访问显卡设备的权限:
m k d i r - p $ { L X C _ R O OT F S _MOUNT}/dev/dri
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/card0 c 226 0
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/renderD128 c 226 128
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/fb0 c 29 0
一切配置完畢,我们就可以使用IP地址+端口号8096来访问jellyfin进行设置了。特别注意的是,我们要启动之前配置的显卡硬解功能,依次进入控制台—播放,在硬件选项中选择VAAPI,然后勾选“启用硬件编码”,保存设置即可(图32)。
简言之,Jellyfin具备海报墙功能,而且可以分类保存视频内容,并通过局域网推送播放——因为我们配置了硬件编解码功能,即便你的观看端设备不能支持部分编解码的视频文件,Jellyfin也能自动将其转码推送到观看端设备上播放,非常人性化。当然,它还有更多的功能,有兴趣的朋友可以自己探索。这套媒体中心系统最重要的特性就是免费,而且易用性、功能性一点不输于收费系统。