Proxmox上に録画サーバーを立ててみた2023
前書き
初版の事情で録画サーバーの再構築が必要になったので手順をメモ。
未完で終わっている前の記事の続編でもある。
TVerとかがあるのにまだ録画が必要なのかは割と微妙なところになりつつある。
使用機器
- DeskMini H110
- Proxmox 7.3
- Gemalt カードリーダー
- MyGica S270
目標
- LXCコンテナ上に録画環境を作る。
- Unprivilleged (デフォルト)
ホスト上での作業
LXCコンテナで作ると言っているのに、いきなりホスト上で作業とは…?
となるが、権限周りの理由によりホスト上での作業を行わないとどうにもできないところがある。
とりあえず、LXCコンテナは先に作っておく。(中身の設定はしていなくてよい)
ひとつは、デバイスをLXCコンテナに見せる際に、ホスト上のグループとLXCコンテナ上のグループが一致しない(lxc.idmapでどうにか出来るのかもしれないが試していない)ので、権限を緩める必要があること。
2つ目は、LXCコンテナの設定で、ProxmoxのGUIからはできない設定を入れることの2つ。
順に記述していく。
デバイスのアクセス権限設定
チューナーデバイスは、/dev/dvb/adapterN
にマップされている。(ディレクトリであり、配下に demux0,frontend0,dvr0 のようなファイルを持つ)
PCカードリーダーは、/dev/bus/usb/XXX/YYY
である。XXXとYYYは lsusb
コマンドの出力の先頭にかかれている Bus XXX Device YYY から取得できる。
Bus 001 Device 004: ID 08e6:3437 Gemalto (was Gemplus) GemPC Twin SmartCard Reader
udevルールの作成
以下の内容のファイルを /etc/udev/rules.d/99-custom.rules
という名前で保存する。
udevは、デバイスが接続されたときにいい感じにデバイスファイルを作成してくれるデーモンである。
# smartcard reader
# Gemalt
SUBSYSTEM=="usb", ATTRS{idVendor}=="08e6", ATTRS{idProduct}=="3437", GROUP="video", MODE="0666"
# NTT SCR3310
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e6", ATTRS{idProduct}=="511a", GROUP="video", MODE="0666"
# MyGica S270 (siano chip)
SUBSYSTEM=="dvb", ATTRS{idVendor}=="187f", ATTRS{idProduct}=="0600", GROUP="video", MODE="0666"
内容は、idVendro idProductはモノによって異なるので、lsusb
で調べてほしい。
兎にも角にも、アクセス権を 666 で作ってくれ。ということをお願いしている。
※ PT3の場合は、lspci
を使えばわかるかもしれないが、所有していないので不明
作成後は、以下のコマンドで適用できる。再起動しても良い。
udevadm control --reload
udevadm trigger
udevルールが適用されたか確認
適用されたか確認する。 先頭部分が crw-rw-rw-
であればOK
ls -l /dev/bus/usb/001/004
crw-rw-rw- 1 root root 189, 3 Apr 23 17:45 /dev/bus/usb/001/004
ls -l /dev/dvb/adapter0
crw-rw-rw- 1 root video 212, 0 Apr 23 17:43 demux0
crw-rw-rw- 1 root video 212, 1 Apr 23 17:43 dvr0
crw-rw-rw- 1 root video 212, 2 Apr 23 17:43 frontend0
LXCコンテナの設定
あとは、LXCコンテナにデバイスを見せるような設定を追加するだけ。
/etc/pve/lxc/CTID.conf
に以下の行を追加する。 CTIDはProxmoxに表示されている 102 みたいな数字。
lxc.cgroup.devices.allow: c 189:* rwm
lxc.cgroup.devices.allow: c 212:* rwm
lxc.mount.entry: /dev/bus/usb/001 dev/bus/usb/001 none bind,create=dir,mode=0666
lxc.mount.entry: /dev/dvb/adapter0 dev/dvb/adapter0 none bind,create=dir,mode=0666
lxc.mount.entry: /dev/dvb/adapter1 dev/dvb/adapter1 none bind,create=dir,mode=0666
lxc.cgroup.devices.allow
はデバイスへのアクセス許可をするもの。先程の確認時に ls -l
した際に表示された数値を入れる。
lxc.mount.entry
はホスト上のファイルをLXCコンテナ上のどこにマップするかという設定。
蛇足:
-
/dev/dvb
以下を全部マップしても良いかもしれない。 -
mode=0666
は多分不要 - 動いたら怖くて触りたくないのが本音
LXCコンテナ上の設定
設定は以下の方針とした。
- コンテナはdebian 11
- Mirakurun は直接入れる
- EPGStationはdockerを使う
基本的な色々を入れる
- docker https://docs.docker.com/engine/install/debian/
- Node.js 18 https://github.com/nodesource/distributions#using-debian-as-root-2
- デコーダ https://github.com/tsukumijima/libaribb25
- ↑のデコーダは本家と違い
pcscd
が動いている必要があるので注意
Mirakurunを入れる
- https://github.com/Chinachu/Mirakurun/blob/master/doc/Platforms.md#linux
sudo apt install dvb-tools
チャンネルの設定は省略。チャンネルスキャンがあるのでどうにかなるはず
- name: MYGICA_S270_0
types:
- GR
command: "dvbv5-zap -a 0 -c /work/epgstation/mirakurun/dvbv5_channels_isdbt.conf -r -P <channel> -o -"
decoder: "arib-b25-stream-test"
isDisabled: false
EPGStation
docker-composeで動かすので省略。docker-compose.ymlは以下の通り。
config等はよしなに行ってほしい。
蛇足
Mirakurunがdockerコンテナではない理由
pullした際に以下のように怒られる為。これが解決できるならMirakurunもコンテナで動かせる。
failed to register layer: ApplyLayer exit status 1 stdout: stderr: failed to Lchown "/app/node_modules/statuses/HISTORY.md" for UID 1516583083, GID 0 (try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid): lchown /app/node_modules/statuses/HISTORY.md: invalid argument
Discussion