jail(iocage)で、録画サーバその3

その2で、jail recorderでffmpeg+vaapiが動くようにしたのはおいといて、別jailでmirakurunを動かしてみた。
下の参考文献ほぼそのままだけど、現時点 mirakurun 3.3.1 の導入ログとして。

iocage

新規に作る。実は試行錯誤で作ったり壊したりしてるんですが省略。

# iocage create -n mirakurun -r 12.1-RELEASE
mirakurun successfully created!
# iocage set devfs_ruleset=6 mirakurun
devfs_ruleset: 4 -> 6
# iocage set ip4_addr="em0|192.168.0.13" mirakurun
ip4_addr: none -> em0|192.168.23.13
# iocage start mirakurun
* Starting mirakurun
  + Started OK
  + Using devfs_ruleset: 1002 (cloned from devfs_ruleset 6)
  + Using IP options: ip4.addr=em0|192.168.0.13 ip4.saddrsel=1 ip4=new ip6.saddrsel=1 ip6=new
  + Starting services OK
  + Executing poststart OK
#

devfs_ruleset=6はあらかじめ作っておいたもの。dri/drmは不要で、ptxを追加。

[devfsrules_ptx=6]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path zfs unhide
add path 'ptx*' unhide
recpt1

ホスト側で,、
FreeBSDでrecpt1を使う [努力したWiki]
freebsd-019-recpt1_20190127.tar.gz をありがたくいただいてビルド。enable-b25もしとく。

できた一式を、jailの/usr/local/bin、/usr/local/libに配置。

pkg

jailの中で作業。現行pkgのnode(v14)とnpmでやったら、npmの実行でv14に対応してないとエラーはくので、v12でやり直した。

root@mirakurun:~ # pkg install bash node12 npm-node12
root@mirakurun:~ # ln -s /usr/local/bin/bash /bin/bash

最後のsymlinkは、これがないとmirakurunスクリプトの実行がこける。

pm2
root@mirakurun:~ # npm install pm2 -g
(なんかちらほらWARN出てるけど、完了)
+ pm2@4.4.1
added 186 packages from 191 contributors in 7.477s
mirakurun

githubから持ってきてbuildする。jail環境にgitを入れるのが面倒なので、ホスト環境で取得したものをjail環境にコピーした。

$ git clone https://github.com/Chinachu/Mirakurun.git

$ git log -1
commit 113a10da5e6401a312dd08bd4224b4d4dd33e9a9 (HEAD -> master, tag: 3.3.1, origin/master, origin/HEAD)
Author: kanreisa <re@pixely.jp>
Date:   Sat Aug 8 01:51:28 2020 +0900

    @3.3.1

$ vi Mirakurun/package,json
(最後のほうにあるosに、"freebsd", を追加。)

$ (jail環境の /root/Mirakurun にコピー。手順は省略)

ここからまたjail内で。

root@mirakurun:~/Mirakurun # npm install
root@mirakurun:~/Mirakurun # npm run build
root@mirakurun:~/Mirakurun # npm install . -g --unsafe --production

設定ファイルをコピー

root@mirakurun:~/Mirakurun # mkdir /usr/local/etc/mirakurun
root@mirakurun:~/Mirakurun # cp -v config/* /usr/local/etc/mirakurun
root@mirakurun:~/Mirakurun # rm -v /usr/local/etc/mirakurun/*win32*

設定

root@mirakurun:~/Mirakurun # mirakurun config server
(変更せずに、確認だけ)

root@mirakurun:~/Mirakurun # mirakurun config tuners
(コマンドを、command: recpt1 --b25 --device /dev/ptx0.s0 <channel> - -
 のように変更。デバイス名は s0/s1/t0/t1 で適宜)

root@mirakurun:~/Mirakurun # mirakurun config channels
(MXを16->20に。TVKを18で追加)

起動。なぜかエラーになる。

root@mirakurun:~/Mirakurun # mirakurun start
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2][ERROR] Script not found: /root/Mirakurun/mirakurun-server

こうならできたが、実行がforegroundなので停止はCtrl+C。

root@mirakurun:~/Mirakurun # npm run start

> mirakurun@3.3.1 start /root/Mirakurun
> node -r source-map-support/register --max_old_space_size=512 lib/server.js

2020-09-22T15:31:32.318+09:00 info: load server config `/usr/local/etc/mirakurun/server.yml`
2020-09-22T15:31:32.321+09:00 info: load channels config `/usr/local/etc/mirakurun/channels.yml`
2020-09-22T15:31:32.326+09:00 info: load tuners config `/usr/local/etc/mirakurun/tuners.yml`
2020-09-22T15:31:32.328+09:00 info: 4 of 5 tuners loaded
2020-09-22T15:31:32.329+09:00 info: load db `/usr/local/var/db/mirakurun/services.json` w/ integrity (NzG9o3GEy8Ga5hbYBPGcTbscZVvZSATtawVp8O5W/HM=)
2020-09-22T15:31:32.329+09:00 info: db `/usr/local/var/db/mirakurun/services.json` is not exists
2020-09-22T15:31:32.330+09:00 info: load db `/usr/local/var/db/mirakurun/programs.json` w/ integrity (NzG9o3GEy8Ga5hbYBPGcTbscZVvZSATtawVp8O5W/HM=)
2020-09-22T15:31:32.330+09:00 info: db `/usr/local/var/db/mirakurun/programs.json` is not exists
2020-09-22T15:31:33.110+09:00 info: ChannelItem#'BS:BS15_0' serviceId=101 check has started
2020-09-22T15:31:33.111+09:00 info: TSFilter has created (serviceId=null, eventId=null)
2020-09-22T15:31:33.125+09:00 info: TunerDevice#0 process has spawned by command `recpt1 --b25 --device /dev/ptx0.s0 BS15_0 - -` (pid=8080)
2020-09-22T15:31:33.126+09:00 info: listening on http+unix://%2Fvar%2Frun%2Fmirakurun.sock
2020-09-22T15:31:33.127+09:00 info: listening on http://192.168.0.13:40772
Error: listen EADDRINUSE: address already in use 127.0.0.1:40772
    at Server.setupListenHandle [as _listen2] (net.js:1313:16)
    at listenInCluster (net.js:1361:12)
    at doListen (net.js:1498:7)
    at processTicksAndRejections (internal/process/task_queues.js:85:21)
Error: listen EPROTONOSUPPORT: protocol not supported ::1:40772
    at Server.setupListenHandle [as _listen2] (net.js:1296:21)
    at listenInCluster (net.js:1361:12)
    at doListen (net.js:1498:7)
    at processTicksAndRejections (internal/process/task_queues.js:85:21)
2020-09-22T15:31:33.142+09:00 info: TunerDevice#0 streaming to user `Mirakurun:getServices()` (priority=-1)
2020-09-22T15:31:44.691+09:00 info: TSFilter has closed (serviceId=null, eventId=null)

後からぐぐって分かったけど、こうらしい。

root@mirakurun:~ # cd /usr/local/lib/node_modules/mirakurun/
root@mirakurun:/usr/local/lib/node_modules/mirakurun # pm2 start processes.json
[PM2][WARN] Applications mirakurun-server not running, starting...
[PM2][WARN] Folder does not exist: /usr/local/var/log
[PM2] Creating folder: /usr/local/var/log
[PM2][WARN] Folder does not exist: /usr/local/var/log
[PM2] Creating folder: /usr/local/var/log
[PM2][WARN] Folder does not exist: /usr/local/var/run
[PM2] Creating folder: /usr/local/var/run
[PM2] App [mirakurun-server] launched (1 instances)
テスト

mirakurun を使って VLC でテレビを視聴する。 | 妄想日記 by 妄想エンジン
にならって、WindowsVLCからアクセスしてみる。

メディア>ネットワークストリームを開く(Ctrl+N)
http://192.168.0.13:40772/api/channels/GR/21/services/1056/stream/

おぉ。できた。。すばらしい。。