割と変則的な構成でMirakurun + Chinachu環境を構築しました。

はじめに

mirakurunをラズパイで動かし、ChinachuをWindowsServerのWSLで動かします。経緯は以下。

  • 現状、ESXi上にWindowsServerのファイルサーバがいるので、そこに全部構築しようと挑戦
    • S270を直接認識させる方法が無いので、PCIeのUSBカード挿してPCIパススルーした
    • ESXiのPCIパススルーが安定せずS270がうまく動作しない。断念
  • ESXi上にUbuntu20.04を立てて、そこに全部構築しようと挑戦
    • やっぱりPCIパススルーが安定しない。断念
  • Raspberry Piに全部構築しようと挑戦
    • mirakurunは快適に動いたものの、なぜかChinachuのインストールがやたら遅くて心折れた
  • ラズパイでmirakurun、WSLでChinachu動かせばうまく行くのでは?->成功

使ったもの

  • ハードウェア
    • Mygica S270
    • Rocketek RT-SCR3
    • Raspberry Pi 3 Model B
  • ソフトウェア
    • Ubuntu Server 20.04.1
    • mirakurun
  • ソフトウェア(Chinachuサーバ)
    • VMWare ESXi 7.0上のWindows Server 2019 Standard
    • WSL Ubuntu 18.04
    • Chinachu

初期設定

  1. Ubuntu Server 20.04.1をmicroSDに書き込む
  2. ユーザー名:ubuntu パスワード:ubuntu でログインしパスワード変更
  3. sudo timedatectl set-timezone Asia/Tokyo
    • timedatectl statusで確認
  4. apt updateapt upgrade
  5. sudo apt purge snapdでsnap消しておく

スマートカードリーダの認識

あらかじめRocketek RT-SCR3を挿しておく。

# 認識されているか見る。AU9540 Smartcard Readerが出るはず
lsusb

# デーモンと周辺ツールを入れる
sudo apt install pcscd pcsc-tools

# 読み取ってみてJapanese Chijou Digital B-CAS Card (pay TV)が出たらCtrl+Cで止める
pcsc_scan

チューナーの認識

Mygica S270はなんか不調だと思ったら挿しなおす。

# S270を挿し、認識されているか見る
lsusb
ls /dev/dvb/

# ファームウェアの導入
sudo wget https://github.com/OpenELEC/dvb-firmware/raw/master/firmware/isdbt_rio.inp -O /lib/firmware/isdbt_rio.inp

# 録画用ツールインストール
sudo apt install dvb-tools

# dvbv5-zapの設定ファイルを保存しておく
sudo git clone https://github.com/Chinachu/dvbconf-for-isdb.git /usr/local/dvbconf

# スキャンしてみる。文字コードの関係でエラーが出るが、とりあえずSignalが反応しているか見る
# たぶん反応しないので一度S270を抜き差しする
sudo dvbv5-scan -C JP -a 0 /usr/local/dvbconf/conf/dvbv5_channels_isdbt.conf

mirakurun導入

このあたりを参考にインストール。 Mirakurun/Platforms.md at master · Chinachu/Mirakurun

# node.jsインストール
curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

# mirakurunインストール
sudo npm install pm2 -g
sudo npm install mirakurun -g --unsafe-perm --production

# その他いろいろ
sudo apt install build-essential libpcsclite-dev
sudo npm install arib-b25-stream-test -g --unsafe-perm

http://<IPaddress>:40772/ でWebGUIが開く。

mirakurun設定

# チューナー設定ファイルを開き次の設定を追加
sudo mirakurun config tuners
- name: S270
  types:
    - GR
  dvbDevicePath: /dev/dvb/adapter0/dvr0
  decoder: arib-b25-stream-test
  command: dvbv5-zap -a 0 -C JP -c /usr/local/dvbconf/conf/dvbv5_channels_isdbt.conf -r -P <channel>
  isDisabled: false
# 書き終わったら再起動しておく
sudo mirakurun restart

# チャンネルスキャンしてもう一回再起動(スキャンは結構時間がかかる)
curl -X PUT "http://localhost:40772/api/config/channels/scan"
sudo mirakurun restart

以上でRaspberry Pi上の作業は終了。

Chinachuサーバ用WSL構築

ここからはWindowsServerで作業。

PowerShellで以下を実行

# Chinachu用のポートをFirewallで開けておく
New-NetFirewallRule -DisplayName "Chinachu Web GUI" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 20772 -Profile Domain,Private

# WSL導入。再起動を求められるので再起動
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
# Ubuntu 18.04導入
Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile Ubuntu.appx -UseBasicParsing
Rename-Item .\Ubuntu.appx .\Ubuntu.zip
Expand-Archive .\Ubuntu.zip .\Ubuntu
# Ubuntu起動してID・パスワード設定(今回はIDをubuntuとした)
.\Ubuntu\ubuntu1804.exe

Chinachu導入

ここからはWSL上で操作する。公式手順に沿っていい感じに。Gamma Installation V2 · Chinachu/Chinachu Wiki

sudo apt update
sudo apt upgrade

# node.jsインストール
curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install nodejs

# Chinachuインストールの準備
sudo apt-get install build-essential curl git-core vainfo
sudo npm install pm2 -g
sudo pm2 startup
git clone git://github.com/Chinachu/Chinachu.git ~/chinachu
cd ~/chinachu/
# Chinachuインストール(Autoを選択)
./chinachu installer

Chinachu設定

引き続きWSLで以下を実行

# サンプルコンフィグをコピーしてuid,mirakurunPath,recordedDirを設定
cp config.sample.json config.json
vi config.json
@@ -1,9 +1,9 @@
 {
-  "uid": null,
+  "uid": "ubuntu",
   "gid": "video",
-  "mirakurunPath": "http+unix://%2Fvar%2Frun%2Fmirakurun.sock/",
+  "mirakurunPath": "http://<mirakurun IP>:40772/",

-  "recordedDir" : "./recorded/",
+  "recordedDir" : "/mnt/e/path/to/Recorded/",

   "vaapiEnabled": false,
   "vaapiDevice": "/dev/dri/renderD128",
# 空のルールファイル作成
echo [] > rules.json

# EPG取得をテストしてみる
./chinachu update
# 試しに起動してhttp://<IPaddress>:20772/ を開いてみる
./chinachu service wui execute

# スタートアップ登録
sudo pm2 start processes.json # エラーが出たらもう一回叩いてみる
sudo pm2 save

Chinachu自動起動設定

OS起動に合わせてChinachuが起動するようにする。

# タスクスケジューラからの自動起動のためにパスワードなしでsudo pm2できるようにする
sudo visudo
# 以下を末尾に追記
%sudo ALL=NOPASSWD: /usr/bin/pm2

ここで一度サインアウトし、Chinachuが開けなくなる事を確認する。その後PowerShellからタスクスケジューラに登録

$trigger = New-ScheduledTaskTrigger -AtStartUp
$action = New-ScheduledTaskAction -Execute C:\Users\Administrator\Ubuntu\ubuntu1804.exe -Argument "run `"cd ~/chinachu/ && sudo pm2 start processes.json`""
$principal = New-ScheduledTaskPrincipal -UserId Administrator -LogonType S4U
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -ExecutionTimeLimit (New-TimeSpan)
Register-ScheduledTask -TaskName "StartChinachu" -Trigger $trigger -Action $action -Principal $principal -Settings $settings
Start-ScheduledTask -TaskName "StartChinachu" 

Chinachuが開けることを確認し、OS再起動しても開けることを確認する。

おわりに

  • とりあえず使う分には快適そう。
  • PowerShellからタスクスケジューラ登録するのは何故こんなにも面倒なのか。