PT3、PLEXチューナーProxmox録画鯖

## 前提
自分用の手順書・詰まったポイントの備忘録です
理解せず先人の設定内容をそのまま使っているだけの箇所もあるのであくまでご参考程度に
（特にコンテナの設定ファイルでデバイスを許可する内容）

## 経緯
EsxiからProxmoxに移行
PLEXチューナーをUSBパススルー接続するもドロップ多発
LXCコンテナという存在を知り、構築

## 環境

-チューナー：PX-MLT8PE、PT3
-ホストOS：Proxmox VE 8.2
-ゲストOS：Ubuntu22.04

## 参考
1. [LXCで録画鯖 [1]PVEホストマシンでの準備【PX-W3PE5/px4_drv】](https://blog.yakijake.net/lxc-dtv-px4_drv-1/)
2. [Proxmox VE上にコンテナをデプロイする](https://qiita.com/ohtsuka-shota/items/a46b79af31a44a236704)
3. [chinachu立て直し](https://soryumi.liliso.com/archives/3688)
4. [Proxmox上に録画サーバーを立ててみた2023](https://zenn.dev/yakumo/articles/4d9adb8a4a338e)
5. [【2023年10月】Ubuntu + Mirakurun + EDCB-Wine + KonomiTV (px4_drv + recisdb + ISDBScanner) でパパッと Linux 録画鯖構築の手引き](https://blog.tsukumijima.net/article/ubuntu-edcb-konomitv-dtv-server/#toc5)
6. [Docker公式インストール方法](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository)

## 手順

### Proxmox上でコンテナ作成

local→CTテンプレートを選択
上部ボタンのテンプレートを押下し、ubuntu-22.04-standardを選択してダウンロードを押下。
テンプレートがダウンロードされる。

最上部のCTを作成ボタンを押下

#### 全般
CT ID、ホスト名、パスワードを入力
非特権コンテナのチェックを外す

#### テンプレート
先ほどダウンロードしたubuntu-22.04を選択

#### ディスク
ディスクサイズを変更

#### ネットワーク
IPv4 DHCPに変更

#### DNS
DNSドメイン：8.8.8.8
DNSサーバ：8.8.8.8
を入力

#### 確認
完了を押下


### Proxmoxホストにドライバインストール
#### px4_drvインストール
詰まったポイント1
~~~
sudo apt install pve-headers-$(uname -r)
wget https://github.com/tsukumijima/px4_drv/releases/download/v0.5.2/px4-drv-dkms_0.5.2_all.deb
apt install ./px4-drv-dkms_0.5.2_all.deb
sudo dkms build -m px4_drv -v 0.5.2
sudo dkms install -m px4_drv -v 0.5.2
sudo modprobe px4_drv

#動作確認
dmesg | grep px4_drv
~~~

### チューナー・カードリーダーをLXCで使用するための設定
#### PT3のudevファイル作成・権限変更
~~~
nano /etc/udev/rules.d/99-pt3.rules
~~~
~~~
# PT3
KERNEL=="dvb*" GROUP="video",MODE="0666"
~~~
udev作成後、一回リブートしておく。

#### PLEXチューナーの権限変更（念の為）
```diff
nano /etc/udev/rules.d/99-px4video.rules
-  KERNEL=="pxmlt8video*", GROUP="video", MODE="0664"
+  KERNEL=="pxmlt8video*", GROUP="video", MODE="0666"

#udev再読み込み
udevadm control --reload
udevadm trigger

#動作確認
ls -l /dev/px*
```
crw-rw-rwになっている。

#### カードリーダーの接続先を確認
~~~
lsusb
~~~
~~~
Bus 001 Device 004: ID 04e6:511a SCM Microsystems, Inc. SCR3310-NTTCom USB SmartCard Reader
~~~
Busの後の数字をメモ
今回で言えばBus **001**

#### コンテナ設定を変更し、チューナーを使えるようにする
LXCの設定ファイル( {録画鯖LXCのコンテナID}.conf )を書き換える。
~~~
nano /etc/pve/lxc/110.conf
~~~
~~~
lxc.cgroup2.devices.allow: c 189:* rwm
// /dev/bus/usb/{さっきメモったBusの後の数字}
lxc.mount.entry: /dev/bus/usb/001 dev/bus/usb/001 none bind,create=dir,mode=0666

lxc.cgroup2.devices.allow: c 238:* rwm
// ls -l /dev/px*で表示されるチューナーを記載
lxc.mount.entry: /dev/pxmlt8video0 dev/pxmlt8video0 none bind,optional,create=file
lxc.mount.entry: /dev/pxmlt8video1 dev/pxmlt8video1 none bind,optional,create=file
lxc.mount.entry: /dev/pxmlt8video2 dev/pxmlt8video2 none bind,optional,create=file
lxc.mount.entry: /dev/pxmlt8video3 dev/pxmlt8video3 none bind,optional,create=file
lxc.mount.entry: /dev/pxmlt8video4 dev/pxmlt8video4 none bind,optional,create=file
lxc.mount.entry: /dev/pxmlt8video5 dev/pxmlt8video5 none bind,optional,create=file
lxc.mount.entry: /dev/pxmlt8video6 dev/pxmlt8video6 none bind,optional,create=file
lxc.mount.entry: /dev/pxmlt8video7 dev/pxmlt8video7 none bind,optional,create=file

lxc.cgroup2.devices.allow: c 212:* rwm
lxc.mount.entry: /dev/dvb/adapter0 dev/dvb/adapter0 none bind,optional,create=dir
lxc.mount.entry: /dev/dvb/adapter1 dev/dvb/adapter1 none bind,optional,create=dir
lxc.mount.entry: /dev/dvb/adapter2 dev/dvb/adapter2 none bind,optional,create=dir
lxc.mount.entry: /dev/dvb/adapter3 dev/dvb/adapter3 none bind,optional,create=dir

// AppArmor無効化
lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
~~~

### LXC構築
以下コマンドでコンテナ起動・ログイン
~~~
pct start 110(コンテナID)
pct exec 110(コンテナID) -- bash
~~~

#### チューナー・カードリーダーの認識確認
~~~
ls /dev/px*
sudo apt install pcscd pcsc-tools
pcsc_scan
~~~

#### 環境設定
詰まったポイント2（ISDBScannerが異常終了する）
~~~
echo 'export PYTHONUTF8=1' >> ~/.bashrc
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
source ~/.bashrc
sudo locale-gen en_US.UTF-8
~~~

#### node.jsインストール
~~~
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
apt-get install nsolid -y
node -v
~~~

#### dockerインストール（公式）
~~~
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
~~~

#### recisdb、ISDBScanner、Mirakurun、EDCB-Wine のインストールと設定

後は以下リンク先の手順を実施すれば行けるはず。
[【2023年10月】Ubuntu + Mirakurun + EDCB-Wine + KonomiTV (px4_drv + recisdb + ISDBScanner) でパパッと Linux 録画鯖構築の手引き](https://blog.tsukumijima.net/article/ubuntu-edcb-konomitv-dtv-server/#toc5)