なにこれ
最近録画環境を建てる機会が何度かあったので,その時の四苦八苦をメモした.
サマリ
conf見ての通りで非特権で立てる.
Mirakurunは直接建てる,EPGStationはdocker-composeで動かしてる.
USBやPCIeのパススルーが面倒なだけ.基本的にドライバはホスト側(便宜上,以降は母艦側と書く)に入れてあればOK.
あと,udev周りよく分かってなかったので,これを機に勉強した.
root@rec:~# uname -a Linux rec 6.5.11-8-pve #1 SMP PREEMPT_DYNAMIC PMX 6.5.11-8 (2024-01-30T12:27Z) x86_64 x86_64 x86_64 GNU/Linux
環境(PLEX PX4の場合)
パススルーでusbデバイスの適用時には対象をディレクトリではなく,明示的に指定してファイルとして読み込まることで上手く動作する場合がある.
変更後はLXCを再起動すると読み込む.
cat /etc/udev/rules.d/99-px4video.rules KERNEL=="px4video*", GROUP="video", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="08e6", ATTRS{idProduct}=="3437", GROUP="video", MODE="0666"
以下は追記を抜粋
cat /etc/pve/lxc/XXX.conf unprivileged: 1 lxc.cgroup.devices.allow: c 240:* rwm lxc.cgroup.devices.allow: c 189:* rwm #lxc.mount.entry: /dev/bus/usb/001 dev/bus/usb/001 none bind,create=dir,mode=0666 lxc.mount.entry: /dev/bus/usb/001/003 dev/bus/usb/001/003 none bind,create=file,mode=0666 lxc.mount.entry: /dev/px4video0 dev/px4video0 none bind,optional,create=file lxc.mount.entry: /dev/px4video1 dev/px4video1 none bind,optional,create=file lxc.mount.entry: /dev/px4video2 dev/px4video2 none bind,optional,create=file lxc.mount.entry: /dev/px4video3 dev/px4video3 none bind,optional,create=file
環境(MyGica S270の場合)
cat /etc/udev/rules.d/99-s270video.rules # MyGica S270 SUBSYSTEM=="dvb", ATTRS{idVendor}=="187f", ATTRS{idProduct}=="0600", GROUP="video", MODE="0666" # REALTECK_reader SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="0169", GROUP="video", MODE="0666"
cat /etc/pve/lxc/XXX.conf #lxc.mount.entry%3A /dev/dvb/adapter0/frontend0 dev/dvb/adapter0/frontend0 none bind,create=file,mode=0666 #lxc.mount.entry%3A /dev/dvb/adapter0/demux0 dev/dvb/adapter0/demux0 none bind,create=file,mode=0666 #lxc.mount.entry%3A /dev/dvb/adapter0/dvr0 dev/dvb/adapter0/dvr0 none bind,create=file,mode=0666 unprivileged: 1 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 dev/dvb none bind,create=dir,mode=0666
CT周りの話
lxc.mount.entry
の書き方について- LXCでのマウント先指定では
dev/bus/usb/001
のようにする.先頭に/
は不要 - ど~しても読み込まない場合は
create=dir
ではなくcreate=file
でデバイスファイルを指定する.
- LXCでのマウント先指定では
CTID.conf
変更後に読み込ませるには再起動が必要
Mirakurun チューナーオプションについて
MyGica S270のオプション忘れそうなのでここにも書いておく.
dvbv5-zap -a 0 -c /usr/local/dvbconf/conf/dvbv5_channels_isdbt.conf -r -P <channel> -o -
いい感じのsystemdについて
どちらの環境でも使ってる.
up -d だとダメ.up まででよい.-d オプションは不要.
あとは journalctl
で良しなに動作を見ておく.
vim /etc/systemd/system/epgstation.service
[Unit] Description=EPGStation with docker-compose After=network.target [Service] Type=simple User=XXXXXXXXXXXXXXXXXXXX WorkingDirectory=/var/lib/docker-mirakurun-epgstation ExecStartPre=-/usr/bin/docker compose down --volumes ExecStart=/usr/bin/docker compose up ExecStop=/usr/bin/docker compose down Restart=always [Install] WantedBy=multi-user.target
curl -X PUT "http://localhost:40772/api/config/channels/scan?type=GR&setDisabledOnAdd=false&refresh=true"
今後
mirac というMirakurun相当の機能を持つRust製ソフトがあるっぽい.
置き換えできるか試す.もしかすると全部docker-composeに詰め込めるかも?
LXCへのNFSマウント周りについても書く予定.非特権では直接マウントできないので,母艦にマウントしたものをパススルーすることで実現可能.