るいすときのこの物語

オタクエンジニアの雑記

Chinachu Beta + Mirakurun + Rivarun + TVTest on Ubuntu で Chinachu でも TVTest でも視聴する

Chinachu Air から Mirakurun を使用するみたいなので環境を構築してみた。 Mirakurun + Rivarun で Chinachu を動かし、TVTest を使用して Windows からも視聴できるようになります。

 

Mirakurun

kanreisa氏が作成した Nodejs で動いている Spinel とか BonDriverProxy みたいなもんです。 UnixSocket でも、TCPでも動かせます。

Mirakurun - github

 

Rivarun

こちらも kanreisa氏が作成した Mirakurun のクライアントです。 ちなみに、Chinachu Air 用ではないらしいです。

Rivarun - github

 

BonDriver_Mirakurun

h-mineta氏が作成した TVTest で動かすための BonDriver です。 ソースファイルしか上がっていないのでビルドする必要があります。 MITライセンスなのでビルド済みを配布しておきます。

Download - BonDriver_Mirakurun BonDriver_Mirakurun - github

 

構成

配信サーバー

OS IP チューナー 構成
Ubuntu 14.04 LTS 192.168.20.7 PT2 Mirakurun

 

Chinachu サーバー

OS IP 構成
Ubuntu 16.04 LTS 192.168.20.12 Chinachu + Rivarun

 

クライアント TVTest

OS IP 構成
Windows 10 x64 192.168.20.253 TVTest + BonDriver_Mirakurun

本当は 配信サーバーと、Chinachu サーバーは一緒が良かったんですけどどうも Chinachu を入れるのに失敗してしまい、VMに建てました。

 

 

配信サーバー

PT2 / PT3 ドライバーのインストールならびに、カードリーダー、recpt1 のインストールは他サイトを参考にしてください。

Mirakurun を構築するために Nodejs => 5.0.0 以上をインストールします。

 

nodejs と npm をインストール

npm を使うためにまずは最新ではないものをインストールします。

# apt-get install -y nodejs npm

 

n package をインストール

# npm cache clean
# npm install n -g

 

n package を使って nodejs をインストール

n package を使うと最新の nodejs をインストールすることができるらしいです。

# n stable
# ln -sf /usr/local/bin/node /usr/bin/node

 

最新版がインストールされたかを確認

# node -v
v6.2.0

# npm -v
3.8.9

ちなみに npm は Ubuntu 標準のレポジトリからインストールしたものですが普通に動いているので大丈夫だと多分。 よく分からないです。

 

PM2 のインストール

# npm install pm2 -g

 

arib-b25 のインストール

# npm install arib-b25-stream-test -g --unsafe

 

Mirakurun のインストール

# npm install mirakurun -g --unsafe --production

 

Mirakurun の設定

最初はサーバーの設定 終了時は Shift + ZZ で上書き保存します。

# mirakurun config server

path: /var/run/mirakurun.sock

port: 8888 ←リッスンポート
host: ~ ←全てのIPから受け付ける

logLevel: 2

 

次はチューナーの設定

# mirakurun config tuners

- name: PT2-S1
  types:
    - BS
    - CS
  isPT2: true
  command: recpt1 --device /dev/pt1video0 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PT2-S2
  types:
    - BS
    - CS
  isPT2: true
  command: recpt1 --device /dev/pt1video1 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PT2-T1
  types:
    - GR
  isPT2: true
  command: recpt1 --device /dev/pt1video2 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PT2-T2
  types:
    - GR
  isPT2: true
  command: recpt1 --device /dev/pt1video3 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

isPT2 isDisabled command name は各自設定してください。 見て分かる通り recpt1 のインストールが必要です。

 

チャンネルの設定

# mirakurun config channels

- name: MX
  type: GR
  channel: '16'

- name: CX
  type: GR
  channel: '21'

- name: TBS
  type: GR
  channel: '22'

- name: TX
  type: GR
  channel: '23'

- name: EX
  type: GR
  channel: '24'

- name: NTV
  type: GR
  channel: '25'

- name: NHK E
  type: GR
  channel: '26'

- name: NHK G
  type: GR
  channel: '27'

- name: NHK BS1
  type: BS
  channel: BS15_0
  serviceId: 101

- name: NHK BS1 (Sub)
  type: BS
  channel: BS15_0
  serviceId: 102

- name: NHK BS Premium
  type: BS
  channel: BS15_1
  serviceId: 103

- name: NHK BS Premium (Sub)
  type: BS
  channel: BS15_1
  serviceId: 104

- name: BS Nippon
  type: BS
  channel: BS13_0
  serviceId: 141

- name: BS Nippon (Sub)
  type: BS
  channel: BS13_0
  serviceId: 142

- name: BS Asahi
  type: BS
  channel: BS01_0
  serviceId: 151

- name: BS Asahi (Sub)
  type: BS
  channel: BS01_0
  serviceId: 152

- name: BS-TBS
  type: BS
  channel: BS01_1
  serviceId: 161

  isDisabled: false

- name: AT-X
  type: CS
  channel: CS16
  serviceId: 333
  isDisabled: false

- name: BS SPTV
  type: SKY
  channel: CH585
  serviceId: 33353
  satelite: JCSAT3A
  isDisabled: false

- name: AT-X HD
  type: SKY
  channel: ATXHD
  serviceId: 33435
  satelite: JCSAT3A
  isDisabled: false

- name: AXN HD
  type: SKY
  channel: AXNHD
  serviceId: 33418
  satelite: JCSAT4A
  isDisabled: false

ちなみに 場所によっては isDisabled があるので使用するものは false とする必要があります。

 

Mirakurun を起動する

# mirakurun start

[PM2] Applying action restartProcessId on app [mirakurun-server](ids: 0)
[PM2] [mirakurun-server](0) ✓
┌──────────────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name         │ id │ mode │ pid   │ status │ restart │ uptime │ memory      │ watching │
├──────────────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ mirakurun-server │ 0  │ fork │ 10577 │ online │ 6       │ 0s     │ 17.703 MB   │ disabled │
└──────────────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

きちんと起動しているかは少し時間が経った後に

# lsof -i:8888

COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
Mirakurun 10577 root   12u  IPv4  44941      0t0  TCP pen4.luis.local:8888 (LISTEN)
Mirakurun 10577 root   13u  IPv4  44942      0t0  TCP localhost:8888 (LISTEN)
Mirakurun 10577 root   15u  IPv4  45022      0t0  TCP pen4.luis.local:8888->192.168.20.253:53171 (ESTABLISHED)

とすれば確認できます。便利ですよ lsof

 

 

Chinachu サーバーの設定

Chinachu のインストールは Github を見て下さい。 Installation - Github

 

Rivarun のインストール

前準備として Nodejs => 5.0.0 が必要なので上を見てインストールしてください。

# npm install rivarun -g

 

Chinachu の設定

# vim /home/chinachu/chinachu/config.json

{
  "recordedDir" : "./recorded/",
  "temporaryDir": "/tmp/",
  
  "wuiUsers": [
    ":"
  ],
  "wuiAllowCountries": ["JP"],
  
  "wuiPort"        : 10772,
  "wuiHost"        : "::",
  "wuiTlsKeyPath"  : null,
  "wuiTlsCertPath" : null,
  "wuiOpenServer"  : false,
  "wuiOpenPort"    : 20772,
  "wuiXFF"         : false,
  "wuiPreviewer"   : true,
  "wuiStreamer"    : true,
  "wuiFiler"       : true,
  "wuiConfigurator": true,

  "recordedFormat": "[<date:yymmdd-HHMM>][<type><channel>][<tuner>]<title>.m2ts",
  
  "tuners": [
    {
      "name"        : "PT2-S1",
      "isScrambling": false,
      "types"       : [ "BS", "CS" ],
      "command"     : "/usr/local/bin/rivarun --mirakurun 192.168.20.7:8888 --b25 --priority 1 --sid <channel> - -",
      "noEpg"       : false
    },
    {
      "name"        : "PT2-S2",
      "isScrambling": false,
      "types"       : [ "BS", "CS" ],
      "command"     : "/usr/local/bin/rivarun --mirakurun 192.168.20.7:8888 --b25 --priority 1 --sid <channel> - -",
      "noEpg"       : false
    },
    {
      "name"        : "PT2-T1",
      "isScrambling": false,
      "types"       : [ "GR" ],
      "command"     : "/usr/local/bin/rivarun --mirakurun 192.168.20.7:8888 --b25 --priority 1 --sid <sid> --ch GR/<channel> - -",
      "noEpg"       : false
    },
    {
      "name"        : "PT2-T2",
      "isScrambling": false,
      "types"       : [ "GR" ],
      "command"     : "/usr/local/bin/rivarun --mirakurun 192.168.20.7:8888 --b25 --priority 1 --sid <sid> --ch GR/<channel> - -",
      "noEpg"       : false
    }
  ],
  
  "channels": [
    { "type": "GR", "channel": "16" },
    { "type": "GR", "channel": "21" },
    { "type": "GR", "channel": "22" },
    { "type": "GR", "channel": "23" },
    { "type": "GR", "channel": "24" },
    { "type": "GR", "channel": "25" },
    { "type": "GR", "channel": "26" },
    { "type": "GR", "channel": "27" },
    
    { "type": "BS", "channel": "101" },
    { "type": "BS", "channel": "102" },
    { "type": "BS", "channel": "103" },
    { "type": "BS", "channel": "141" },
    { "type": "BS", "channel": "151" },
    { "type": "BS", "channel": "161" },
    { "type": "BS", "channel": "171" },
    { "type": "BS", "channel": "181" },
    { "type": "BS", "channel": "191" },
    { "type": "BS", "channel": "192" },
    { "type": "BS", "channel": "193" },
    { "type": "BS", "channel": "200" },
    { "type": "BS", "channel": "211" },
    { "type": "BS", "channel": "222" },
    
    { "type": "CS", "channel": "CS4",  "sid": "100" },
    { "type": "CS", "channel": "CS16", "sid": "333" }
  ]
}

BS / CS のコマンドは /usr/local/bin/rivarun --mirakurun 192.168.20.7:8888 --b25 --priority 1 --sid <channel> - - GR のコマンドは /usr/local/bin/rivarun --mirakurun 192.168.20.7:8888 --b25 --priority 1 --sid <sid> --ch GR/<channel> - - と若干違います。また、IPアドレスは Mirakurun サーバーのIPアドレス、ポートは指定したポートを設定してください。

あとは ./chinachu update -f とかして正常に動作するか確認してください。

 

 

TVTest の設定

BonDriver_Mirakurun のビルド済みをダウンロードし、TVTest と同じディレクトリに保存してください。 各チューナーの設定ファイルを弄って下さい。

[GLOBAL]
SERVER_HOST="pen4.luis.local" ←Mirakurun サーバーIP
SERVER_PORT=8888 ←Mirakurun サーバーのポート

あとはTVTest を起動して、チャンネルスキャンとかやれば視聴できると思います。 もし見れない場合は ファイアーウォールの設定だったり色々確認してみてください。

Chinachuのアクセスログから不審なIPを検知する「wuilog」アップデート

[note] Chinachuのアクセスログから不審なIPを検知してみる [/note] Chinachuのアップデートしたらログの書式が変わってたみたいでうまく動作してなかった。 ということでそれに対応したって話だけです。

rluisr/wuilog - github

Chinachuのアクセスログから不審なIPを検知してみる

夏バテかなって感じる。

 

録画サーバーに @kanreisa さんが作った「Chinachu」を使っていますがそのChinachuが ロシアの有名P2P放流者によってクラックされたらしい。

私の場合インターネットに公開しちゃってるしただのBASIC認証だし(TLS云々が面倒)なので とりあえずアクセスログ見て不審なIPを通知するようなのを作った。

wuilog - github

脳震盪起こしながら書いたので適当さは見逃して下さい。 ホワイトリストを自分で書いて、リスト外IPがあったらツイートされます。

twitteroauthを使うようにして下さい。

 

でこれを使ってIPアドレスを表示して不審なIPのwhoisを見ると

SnapCrab_NoName_2015-6-22_19-16-10_No-00

シンガポールからアクセスがあったり。(このIPは知り合いのだった)

重複処理はしてないので不審なIPがあったらiptablesとかufwでrejectするようにしないと実行される度に通知されるので 何とかしてください。 あとwhoisコマンドでdescrを取得するのでwhoisコマンド使えるようにしておいて下さい。 descr: So-netとかDocomoとか組織の名前 わざわざwhois見に行く手間が省けますよね(?)

iptablesとかなら

[shell] vim /etc/sysconfig/iptables

-I INPUT -s IP -j DROP service iptables restart [/shell]

とかで行けます。

 

再発は防げるかもしれませんが一発目は防げないし串とか通されたら無理ですけどね^^ 今回のクラック方法が解明されてないけどそれが分かるといいですね。

Chinachu でサーバーの監視をしてみる【Munin】

Chinachu のダッシュボードに新たにサーバー監視を出来るように自分で追加してみる。 線形代数死ね

 

Muninとは

サーバのさまざまな情報をグラフ化して表示するソフトです。 同じようなものにcactiとかZabbixとかがありますが、Muninはとても手軽。 温度監視は出来ませんがlm-sensorsとプラグインを使うことで可能になる。

 

 

Muninとlm-sensorsをインストールする

【Debian系】

[source]

apt-get install munin

apt-get install lm-sensors

[/source]

【RedHat系】

[source]

yum install munin

yum install lm_sensors

[/source]

【共通】

[source] //lm sensorsの設定

sensors-detect //全部Enterでいい

//プラグインを有効にする

ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_fan

ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_volt

ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_temp

//自動起動をonにする

chkconfig munin-node on //Debian系は忘れた。

//muninのグラフ画像を保存するディレクトリを作る

mkdir ~/chinachu/web/munin

[/source]

 

muninのグラフ画像をコピーするスクリプトをcronで5分おきに設定

[bash]

!/bin/bash

LANG=C PNGDIR=/var/cache/munin/www/localdomain/localhost.localdomain WEBDIR=$HOME/chinachu/web

cp -f ${PNGDIR}/*-day.png ${WEBDIR}/munin/

exit 0 [/bash]

これをどっかに保存してcronで設定して実行権限を

[source] chmod u+x munin.sh [/source]

[source]

crontab -e

0-59/5 * * * * /home/chinachu/chinachu/web/munin/munin.sh [/source]

Chinachuのstatus.jsを書き換える

[php]

vi ~/chinachu/web/page/dashboard/status.js

if (global.chinachu.status.operator.alive === true) { new sakura.ui.Alert({ title : 'Munin', type : 'green', body : '<br clear="all" /><div style="float: left;margin: 5px 0px 0px 5px;"><img src="../munin/cpu-day.png" /></div><div style="float: left;margin: 5px 0px 0px 5px;"><img src="../munin/memory-day.png" /></div><div style="float: left;margin: 5px 0px 0px 5px;"><img src="../munin/sensors_temp-day.png" /></div><br clear="all" />', disableClose: true }).render(this.view.content);

service chinachu-operator restart

service chinachu-wui restart //こっちだけでいいと思う

[/php]

こんな感じにすると

 

SnapCrab_NoName_2015-1-24_21-37-14_No-00

こんな感じになる。

Chinachuでroot権限が必要なディレクトリに録画する方法

PT2を購入して Ubuntu と Chinachu で録画サーバーみたいのを構築したんですけど 外部のFTP鯖なりに録画したかった。

 

FTPS鯖に録画するためにconfig,jasonを書き換えてみたが

curlftpfsを使用してFTPS鯖をマウントし、config.jsonを書き換えて録画してみたが Permission Deniedと言われるので諦める。

 

適当にスクリプトを作ってroot権限で実行してみた

git

今日も今日とてPHPで書きました。 シェルスクリプトの書き方覚えるのもあれだし...(だるかった)

適当に書いたので批判は受け付けません。 moveRecFile - GitHub

 

使い方

CUI環境でPHPが使える環境でお願いします。 PHP 5.5で動作確認済みです。

[source]

php chinachu.php

[/source]

なんちゃって対話式です・・・。 指示にしたがってもらえれば分かると思います。

絶対パスを指定するときに

[source]

/foo/bar のように最後に「/」をつけないでください

[/source]

最初の実行でファイルは移動されず、移動元の録画ファイルが増えたら移動されます。 適当にテキストファイルがいくつか作られますが消さないでください。 もし、消しちゃった場合はもう一度実行してください。

一度実行してもらえれば、後はcronなりで定期的に実行してください。 録画時間と重なってるとどんな動作するかわからないので重ならない時間にしてください。

system();って最後の1行しか読み取れないの知らなくて1時間ぐらい悩んでた。