Proxmox VEで仮想化/LXC使わない録画サーバ

ただdebianでdockerの録画サーバを建てただけ、そうです。


# 環境

* OS: Proxmox VE 8.2
* チューナー: PX-W3PE5
* ソフトウェア: epgstation, mirakurun

PVEクラスタを組んだとしてもHA先に録画用ハードを用意していないため、ただ複雑にしてしまって仮想化やLXCを使う旨味が少なく、素直にPVEにdockerを入れてしまおうと判断  
→ Q.なんでUbuntuじゃなくてPVE使うの A.他サーバの仮想化/LXC化のために自宅サーバを同居させたい

# 参考

1. [(全体の流れ)2023年8月版 45分で作れる自宅録画サーバー（Ubuntu 22.04.3LTS)](https://www.digital-den.jp/simplelife/archives/7655/2023%e5%b9%b48%e6%9c%88%e7%89%88-45%e5%88%86%e3%81%a7%e4%bd%9c%e3%82%8c%e3%82%8b%e8%87%aa%e5%ae%85%e9%8c%b2%e7%94%bb%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%ef%bc%88ubuntu-22-04-3lts/)
    * こちらのスクリプトをダウンロードして参考に改変しつつ実行していきます
1. [(バックアップとリストア)EPGStationのデータをバックアップ・リストアする](https://www.digital-den.jp/simplelife/archives/7161/epgstation%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%83%BB%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2%E3%81%99%E3%82%8B/)
    * 旧録画サーバから移行があれば
    * こちらもスクリプトを参考に同等の作業を実施
3. [チューナードライバのリポジトリ](https://github.com/tsukumijima/px4_drv)
    <!-- 開発されている神のリポジトリです。フロント、ドライバ、debパッケージまで、まさに神・・ -->
4. [libaribb25のリポジトリ](https://github.com/tsukumijima/libaribb25.git)

# さっそく

## 録画サーバのマシンにハードをインストールする

* チューナーPX-W3PE5を挿す
* カードリーダーをUSBポートに接続する
* カードリーダーにカードを挿す (しっかりいれることが本当にとても大切)


## PVEホストに必要なソフトウェアを入れる

`pve-headers-某` は環境に合わせる

```bash:root
$ apt upate
$ apt install pve-headers-6.1.10-1-pve dkms
$ apt install -y docker docker-compose
$ apt install -y libpcsclite-dev pcscd pcsc-tools libccid
```

## カードリーダーの動作を確認する

カードリーダーの動作に問題なければ以下の表示、プロンプトが帰ってこないので `^C` で止める
※このとき `Card state: Card removed,` →カード半挿し状態に気づいていたら、最後の視聴/録画できない状態にならなかった・・・

```bash:root
$ pcsc_scan
PC/SC device scanner
V 1.6.2 (c) 2001-2022, Ludovic Rousseau <ludovic.rousseau@free.fr>
Using reader plug'n play mechanism
Scanning present readers...
0: ACS ACR39U ICC Reader 00 00

Thu Jun 27 00:03:21 2024
 Reader 0: ACS ACR39U ICC Reader 00 00
  Event number: 0
  Card state: Card removed,
```

サービスを停止/自動起動無効化する

```bash:root
$ systemctl stop pcscd.socket
$ systemctl disable pcscd.socket
```


## チューナードライバを導入する

```bash:root
$ wget https://github.com/tsukumijima/px4_drv/releases/download/v0.4.4/px4-drv-dkms_0.4.4_all.deb
$ apt install -y ./px4-drv-dkms_0.4.4_all.deb
$ reboot
```

`PX-W3PE5` をマシンに挿した状態であれば `ls /dev/px*` で4本生えているのが見えるはず

```bash
# ls -1 /dev/px*
/dev/px4video0
/dev/px4video1
/dev/px4video2
/dev/px4video3
```

## 録画サーバをビルドする

[2023年8月版 45分で作れる自宅録画サーバー（Ubuntu 22.04.3LTS)](https://www.digital-den.jp/simplelife/archives/7655/2023%e5%b9%b48%e6%9c%88%e7%89%88-45%e5%88%86%e3%81%a7%e4%bd%9c%e3%82%8c%e3%82%8b%e8%87%aa%e5%ae%85%e9%8c%b2%e7%94%bb%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%ef%bc%88ubuntu-22-04-3lts/) よりzipを頂戴し、展開しておく

以下を順に実行する

```bash:root
# `2023temp/epg-plex/6-install-w.sh` を改変したものです
$ base_path=/path/to/docker用のファイルをまとめてるところ
$ scrpt_path=/path/to/zipを展開したフルパス (2023tempで終わる)
$ mkdir -p ${base_path}
$ cd ${base_path}
$ git clone https://github.com/l3tnun/docker-mirakurun-epgstation.git
$ cd docker-mirakurun-epgstation
$ cp docker-compose-sample.yml docker-compose.yml
$ cp epgstation/config/config.yml.template epgstation/config/config.yml
$ cp epgstation/config/enc.js.template epgstation/config/enc.js
$ cp epgstation/config/operatorLogConfig.sample.yml epgstation/config/operatorLogConfig.yml
$ cp epgstation/config/epgUpdaterLogConfig.sample.yml epgstation/config/epgUpdaterLogConfig.yml
$ cp epgstation/config/serviceLogConfig.sample.yml epgstation/config/serviceLogConfig.yml
$ git clone https://github.com/Chinachu/Mirakurun
$ cp ${scrpt_path}/epg-plex/data/new-MirakurunDockerfile ${base_path}/docker-mirakurun-epgstation/Mirakurun/docker/Dockerfile
$ cp ${scrpt_path}/epg-plex/data/tuners-w.yml ${base_path}/docker-mirakurun-epgstation/Mirakurun/config/tuners.yml
$ cp ${scrpt_path}/epg-plex/data/channels.yml ${base_path}/docker-mirakurun-epgstation/Mirakurun/config/channels.yml
$ cp ${scrpt_path}/epg-plex/data/new-docker-compose-w.yml ${base_path}/docker-mirakurun-epgstation/docker-compose.yml
```

`Mirakurun/docker/Dockerfile` を以下のように編集する

```diff:${base_path}/docker-mirakurun-epgstation/Mirakurun/docker/Dockerfile
(略)
         g++ \
         pkg-config \
         pcscd \
+        libpcsclite1 \
         libpcsclite-dev \
         libccid \
         libdvbv5-dev \
         pcsc-tools \
         dvb-tools \
         && \
(略)
     make install && \
     rm -rf /tmp/recpt1 && \
 \
+# arib-b25-stream-test
+\
+    cd /tmp/ && \
+    git clone https://github.com/tsukumijima/libaribb25.git && \
+    cd /tmp/libaribb25 && \
+    cmake -B build && \
+    cd build && \
+    make && \
+    make install && \
+\
 # mirakurun
 \
     apt-get -y remove $DEV && \
     apt-get autoremove -y && \
     apt-get clean && \
-    rm -rf /var/lib/apt/lists/*
+    rm -rf /var/lib/apt/lists/* && \
+    rm -rf /tmp
```

`Mirakurun/config/tuners.yml` のdecoder部分を4箇所変更する (フルパスじゃなくてもいいのかも)

```diff:config/tuners.yml
-  decoder: arib-b1-stream-test
+  decoder: /usr/local/bin/arib-b25-stream-test
```

録画サーバをビルドする (きままにまつ)

```bash:root
$ cd ${base_path}/docker-mirakurun-epgstation
$ docker-compose pull \
  && docker-compose build --no-cache
```

## 録画サーバを動かす

(UIDやオーナーの修正があればここで済ませてしまう)

```bash:root
$ cd ${base_path}/docker-mirakurun-epgstation
$ docker-compose up -d
```

## アクセスしてみる

* epgstation: http://(pve-IP-addr):8888
* Mirakurun: http://(pve-IP-addr):40772
    * 録画実施やリアルタイムの視聴でうまくいかない場合はこちらのLogsタブをチェック