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 妄想エンジン
にならって、WindowsのVLCからアクセスしてみる。
メディア>ネットワークストリームを開く(Ctrl+N)
http://192.168.0.13:40772/api/channels/GR/21/services/1056/stream/
おぉ。できた。。すばらしい。。