[LXD] 如何安裝 Jellyfin 並啟用 VAAPI 硬體解/編碼

接續著把各種東西裝進 LXD 的實驗,這一回我打算完整的把家庭影音串流伺服器 —— Jellyfin 塞進去!並且啟用 GPU 轉碼加速的機能!

新增一個支援 VAAPI 的設定檔

複製以下的文字,並存成 vaapi.profile 檔案(下載):

config:
description: VAAPI acclerated headless profile
devices:
  mygpu:
    type: gpu
    gid: 109
name: vaapi

注:這裡的 gid: 109 是將容器中顯示卡(/dev/dri/*)的擁有者群組,指定為 render(109)

讀取剛才的 profile 檔案,建立 vaapi 設定檔:

# 建立新的設定檔
lxc profile create vaapi

# 從文字匯入設定檔內容
cat vaapi.profile | lxc profile edit vaapi

以剛才的 Profile 新增容器:

lxc init ubuntu:20.04 --profile default --profile vaapi Jellyfin

允許 LXD 存取媒體檔案

允許 LXD 以目前使用者(uid=1000, gid=1000)的身份存取檔案:

echo "root:1000:1" | sudo tee -a /etc/subuid
echo "root:1000:1" | sudo tee -a /etc/subgid

重新啟動 LXD:

sudo snap restart lxd

允許 Jellyfin 容器以唯讀(readonly)方式存取 /mnt/data/Video

lxc config device add Jellyfin videos disk path=/mnt source=/mnt/data/Video readonly=True

為了允許容器中的 Jellyfin 存取媒體檔案,設定 idmap 將容器內的 jellyfin(112) 使用者,對應到自己 (1000)

lxc config set Jellyfin raw.idmap 'uid 1000 112'

注:有時 jellyfin 會使用不同的 gid,可以在 Jellyfin 安裝完成之後,使用以下指令確認:

cat /etc/passwd | grep jellyfin

安裝 Jellyfin

允許外部存取 Port:8096:

lxc config device add Jellyfin my8096 proxy listen=tcp:0.0.0.0:8096 connect=tcp:127.0.0.1:8096

接下來的設定鬥會在 Jellyfin 容器中進行,首先我們先啟動它:

# 啟動容器
lxc start Jellyfin

# 進入容器(初始化可能會花點時間,請多試幾次)
lxc exec Jellyfin -- su --login ubuntu

安裝 Jellyfin(官方說明):

sudo add-apt-repository universe
sudo apt install apt-transport-https
wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo apt-key add -
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release ) $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
sudo apt update
sudo apt install jellyfin

允許 jellyfin 使用顯示卡:

# 把 jellyfin 加入 render 群組
sudo adduser jellyfin render
# 重新啟動 jellyfin 服務
sudo systemctl restart jellyfin.service
# 安裝 VAAPI 需要的套件
sudo apt install va-driver-all

輸入網址 http://localhost:8096/

▲ 設定的部份請依照自己的喜好輸入(記得:東西都在 /mnt

▲ 按下左上的 符號,並點選 Dashboard 進入控制台

▲ 點選 Playback 進入播放選項

下拉選單選擇 Video Accleration API(VAAPI),並勾選自己的硬體能支援的選項(參考

▲ 記得 Save 儲存設定

故障排除

如果你需要確認權限,可以使用以下指令指定 shell 登入:

sudo su -s /bin/bash jellyfin

這個指令可以給你更多 Jellyfin 服務的訊息:

sudo journalctl -u jellyfin.service

關於轉碼(Transcode)的紀錄,可以在 /var/log/jellyfin/ 找到:

$ ls /var/log/jellyfin/
FFmpeg.Transcode-2021-09-21_17-41-11_1180315c16001df9f441a2ad689a800b_0ff245a6.log
FFmpeg.Transcode-2021-09-21_17-45-00_1180315c16001df9f441a2ad689a800b_b86d4307.log
FFmpeg.Transcode-2021-09-21_17-41-11_1180315c16001df9f441a2ad689a800b_65485f9c.log
FFmpeg.Transcode-2021-09-21_17-45-00_1180315c16001df9f441a2ad689a800b_f3ea011a.log
FFmpeg.Transcode-2021-09-21_17-41-11_1180315c16001df9f441a2ad689a800b_986021c2.log
FFmpeg.Transcode-2021-09-21_17-47-15_7c15651832666cd7ccf6245dcd49aad2_66d3c585.log

...略...

jellyfin20210921.log

如果你使用的圖形應用程式,或者經常性的使用不同使用者,也可以試試下面的 Profile(下載):

config:
  user.user-data: |
    #cloud-config
    runcmd:
      - 'sed -i "s/scripts-user/[scripts-user, always]/g" /etc/cloud/cloud.cfg'
    packages:
      - acl
      - x11-apps
      - mesa-utils
      - libvulkan1
      - mesa-vulkan-drivers
      - vulkan-utils
    write_files:
    - content: |
        setfacl -m "g:video:rw-" /dev/dri/*
        setfacl -m "g:render:rw-" /dev/dri/*
      path: /var/lib/cloud/scripts/per-boot/gpu_permission.sh
description: GPU acclerated profile with vulkan
devices:
  mygpu:
    type: gpu
name: gpu

延伸閱讀

這篇文章總有一天會過期,但只要知道如何找到更多訊息,相信各位一定能搭建自己的 Jellyfin Server!

注:Jellyfin 的圖樣屬於該開源專案,本文基於描述需要合理使用。
(Note: Usage of Jellyfin banner logo here is for the purpose of describing only.)

發表迴響