読者です 読者をやめる 読者になる 読者になる

mimikakimemo

自分用メモ。

11ac 対応で GbE なルータ FFP-1200DHP を購入した

ルータ

これまでは、2年半ぐらい前に買った Buffalo のルータ WZR-HP-G302H を使っていた。

が、最近 WAN 側の接続が一日一回ぐらい切れるようになり、調子が悪かった。無線も 2.4GHz 帯のみだったり、11ac に対応していなかったりと、今どきの使い方だと少し不満も出てきたので、ここで買い替えることにした。

買ったのは Planex の FFP-1200DHP という機種。Amazon のタイムセールで見つけて、あまり考えずに選んだ。4,980円。この FFP-1200DHP は、下の MZK-1200DHP の包装を簡易にした(だけの)ものらしく、500円ぐらい安くなっている。

写真だと本体の色がグレーやアイボリーあたりにも見えるが、実物を見てみると薄い水色といった感じ。少し変わった色だが、とくに不満はない。これまでの WZR-HP-G302H は黒の鏡面仕上げで、ホコリが気になっていた。大きさもこちらの方がコンパクトで良い。現在、以下の機器が LAN 内にある。

デフォルトの設定画面は、かなりシンプルでわかりやすいデザインになっている。もちろん、詳細設定もできる。今回設定した部分は以下のとおり。

  • SSID を hogehoge_nomap にする
  • LAN 側の IP アドレスを 192.168.111.1 から 192.168.11.1 に変更(前の環境に合わせる)
  • DHCP を無効にする(LIVA で動かしている dnsmasq を使う)
  • 「ポートフォワード」で 5555/TCP, 500/UDP, 4500/UDP を LIVA に転送する(SoftEther VPN 用)

まだ使い始めだが、とりあえず良い感じ。

NTP の設定

chinachu liva ubuntu

Chinachu で録画開始のタイミングがズレると思ったら、そういえば NTP の設定をしていなかった。というわけで設定。

$ sudo apt-get install ntp

/etc/ntp.conf の同期先サーバーの設定を変更。

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp

ntpd を再起動。

$ sudo service ntp restart

低価格 SSD 「Crucial MX100」を買って LIVA のストレージにした

liva ssd

LIVA の内蔵ストレージ(eMMC)は32GBしかないため、地デジを録画するとたったの数時間分でいっぱいになってしまう。録画したファイルを貯めておけるような NAS は持っていないので、LIVA にストレージを外付けすることにした。

安くて大容量な HDD にしようかとも思ったが、今回は速くて静音な SSD にした。ちょうど先月 Crucial MX100 が発売され、コストパフォーマンスの良さが話題になっていたので、これの 256GB モデル CT256MX100SSD1 を選択。

Crucial MX100 2.5インチ内蔵型SSD 256GB SATAIII CT256MX100SSD1

Crucial MX100 2.5インチ内蔵型SSD 256GB SATAIII CT256MX100SSD1

そのころ(先月半ば)は品薄状態だったこともあり、結局 BUY MORE 秋葉原本店で並行輸入品を購入。並行輸入品の保証期間は10ヶ月だが、その分若干割安で税込10,980円だった。

一緒に、2.5インチ SSD/HDD 外付けケース「黒角MINI OWL-ESL25S/U3(B)」を購入。このケースはアルミ製でちゃちくなく、USB 3.0 に対応している。ヨドバシで1,990円。

このケースに SSD を入れ、LIVA の USB 3.0 ポートに繫いだ。が、LIVA の USB ポートの出力が足りないのか、それだけではうまく動かない。ケースに付属している電源補助ケーブル(2股になったUSB ケーブル)を使い、USB 3.0, USB 2.0 の両ポートに接続すると一応動くが、それでも転送速度がかなり遅くなる。面倒だったので詳しく調べなかったが、USB 2.0 の上限速度(480Mbps)程度になっていた。

これでは使い物にならないため、セルフパワーの USB 3.0 ハブを買ってきてここに外付けケースを接続することにした。セルフパワー USB 3.0 ハブはまだあまり選択肢がないようで、値段がちょっと高い。エレコムの U3H-T403SBK を2,590円で買った。

外付けケース(SSD)―― USB 3.0 ハブ ―― LIVA USB 3.0 ポート という形になり、これでようやく快適に動くようになった。速度も十分出ている。

結局いろいろ買ってしまったが、安定して動いているのでとりあえず満足。

Chinachu + recfsusb2n で "can't send urb: No such file or directory" になってコケる問題

chinachu ubuntu fsusb2n tv

前回記事で LIVA に Chinachu を入れてみたところ、LIVA の起動直後はうまく動いていたが、しばらくすると EGP 取得や録画ができなくなった。Chinachu scheduler のログ(chinachu/log/scheduler)を見てみると、EPG 取得の途中で「recfsusb2n: can't send urb: No such file or directory」というエラーが現れている。

8 Jun 19:35:20 - [4] {"type":"GR","channel":"22","n":4}
8 Jun 19:35:20 - [4] LOCK: FSUSB2 (n=0)
8 Jun 19:35:20 - [4] SPAWN: recfsusb2n -b 22 - - (pid=20909)
8 Jun 19:35:20 - [4] STREAM: /tmp/chinachu-tmp-hw67srds.m2ts
8 Jun 19:35:20 - STATUS: { completed: 6, waiting: 5, worked: 5, running: 1 }
8 Jun 19:35:20 - [4] #recfsusb2n: recfsusb2n ver. 0.9.2 ISDB-T DTV Tuner FSUSB2N device: "/dev/bus/usb/001/005"
8 Jun 19:35:20 - STATUS: { completed: 6, waiting: 4, worked: 5, running: 1 }
8 Jun 19:35:20 - [4] #recfsusb2n: pid = 20909
8 Jun 19:35:21 - [4] #recfsusb2n: B25Decoder initialized.
8 Jun 19:36:20 - [4] UNLOCK: FSUSB2 (n=0)
8 Jun 19:36:20 - [4] EXEC: epgdump (pid=20972)
8 Jun 19:36:21 - UNLINK: /tmp/chinachu-tmp-hw67srds.m2ts
8 Jun 19:36:21 - [4] CHANNEL: GR-22 ... GR_1048 (sid=1048) (programs=214) - TBS1
8 Jun 19:36:21 - [4] CHANNEL: GR-22 ... GR_1049 (sid=1049) (programs=0) - TBS2
8 Jun 19:36:21 - [4] -- (ok)
8 Jun 19:36:22 - [5] {"type":"GR","channel":"23","n":5}
8 Jun 19:36:22 - [5] LOCK: FSUSB2 (n=0)
8 Jun 19:36:22 - [5] SPAWN: recfsusb2n -b 23 - - (pid=20974)
8 Jun 19:36:22 - [5] STREAM: /tmp/chinachu-tmp-hw67u2uw.m2ts
8 Jun 19:36:22 - STATUS: { completed: 7, waiting: 4, worked: 6, running: 1 }
8 Jun 19:36:22 - [5] #recfsusb2n: recfsusb2n ver. 0.9.2 ISDB-T DTV Tuner FSUSB2N device: "/dev/bus/usb/001/005"
8 Jun 19:36:22 - STATUS: { completed: 7, waiting: 3, worked: 6, running: 1 }
8 Jun 19:36:22 - [5] #recfsusb2n: pid = 20974
8 Jun 19:36:22 - [5] #recfsusb2n: B25Decoder initialized.
8 Jun 19:36:29 - [5] #recfsusb2n: recfsusb2n: can't send urb: No such file or directory
8 Jun 19:36:34 - [5] UNLOCK: FSUSB2 (n=0)
8 Jun 19:36:34 - [5] EXEC: epgdump (pid=20996)
8 Jun 19:36:34 - UNLINK: /tmp/chinachu-tmp-hw67u2uw.m2ts
8 Jun 19:36:34 - [5] EPG: データが空 (result.tv.channel is undefined)
8 Jun 19:36:34 - [5] -- (retrying, residue=2)
8 Jun 19:36:37 - [5] {"type":"GR","channel":"23","n":5}
8 Jun 19:36:37 - [5] LOCK: FSUSB2 (n=0)
8 Jun 19:36:37 - [5] SPAWN: recfsusb2n -b 23 - - (pid=20998)
8 Jun 19:36:37 - [5] STREAM: /tmp/chinachu-tmp-hw67uefr.m2ts
8 Jun 19:36:37 - [5] #recfsusb2n: recfsusb2n ver. 0.9.2 ISDB-T DTV Tuner FSUSB2N
8 Jun 19:36:37 - [5] #recfsusb2n: device: "/dev
8 Jun 19:36:37 - [5] #recfsusb2n: /bus/usb/001/005"
8 Jun 19:36:37 - [5] #recfsusb2n: pid = 20998
8 Jun 19:36:37 - [5] #recfsusb2n: B25Decoder initialized.
8 Jun 19:36:44 - [5] #recfsusb2n: recfsusb2n: can't send urb: No such file or directory
8 Jun 19:36:49 - [5] UNLOCK: FSUSB2 (n=0)
8 Jun 19:36:49 - [5] EXEC: epgdump (pid=21014)
8 Jun 19:36:49 - UNLINK: /tmp/chinachu-tmp-hw67uefr.m2ts
8 Jun 19:36:49 - [5] EPG: データが空 (result.tv.channel is undefined)
8 Jun 19:36:49 - [5] -- (retrying, residue=1)
8 Jun 19:36:52 - [5] {"type":"GR","channel":"23","n":5}
8 Jun 19:36:52 - [5] LOCK: FSUSB2 (n=0)
8 Jun 19:36:52 - [5] SPAWN: recfsusb2n -b 23 - - (pid=21016)
8 Jun 19:36:52 - [5] STREAM: /tmp/chinachu-tmp-hw67uq28.m2ts
8 Jun 19:36:52 - [5] #recfsusb2n: recfsusb2n ver. 0.9.2 ISDB-T DTV Tuner FSUSB2N
8 Jun 19:36:52 - [5] #recfsusb2n: device: "/dev/bus/usb/001/005"
8 Jun 19:36:52 - [5] #recfsusb2n: pid = 21016
8 Jun 19:36:52 - [5] #recfsusb2n: B25Decoder initialized.
8 Jun 19:36:59 - [5] #recfsusb2n: recfsusb2n: can't send urb: No such file or directory
8 Jun 19:37:04 - [5] UNLOCK: FSUSB2 (n=0)
8 Jun 19:37:04 - [5] EXEC: epgdump (pid=21033)
8 Jun 19:37:04 - UNLINK: /tmp/chinachu-tmp-hw67uq28.m2ts
8 Jun 19:37:04 - [5] EPG: データが空 (result.tv.channel is undefined)
8 Jun 19:37:04 - [5] -- (give up)

これ以降は、EPG 取得をしても録画をしても(さらに手動で recfdusb2n を起動しても)、同じエラーが出て失敗してしまう。マシンを再起動すれば一旦は直るが、いずれにせよ scheduler を実行しているうちに同じエラーになり、動かなくなる。

Chinachu の問題なのか recfsusb2n の問題なのか、あるいは KTV-FSUSB2 の問題なのか LIVA の問題なのか、いろいろ調べても知識不足でさっぱりわからなかったが、最終的には、chinachu/app-scheduler.js の SIGKILL を SIGTERM に変更したら良さげな感じ。

diff --git a/app-scheduler.js b/app-scheduler.js
index 59d77be..38843cf 100644
--- a/app-scheduler.js
+++ b/app-scheduler.js
@@ -935,7 +935,7 @@ function getEpg() {
 
                                // プロセスタイムアウト
                                execRecCmd(function() {
-                                       recProc.kill('SIGKILL');
+                                       recProc.kill('SIGTERM');
                                }, 1000 * (config.schedulerEpgRecordTime || 60), '[' + i + '] KILLWAIT');
 
                                // キャンセル時
@@ -943,7 +943,7 @@ function getEpg() {
                                var onCancel = function () {
 
                                        isCancelled = true;
-                                       recProc.kill('SIGKILL');
+                                       recProc.kill('SIGTERM');
                                };
 
                                removeListeners = function () {

とりあえず、しばらくこれで様子を見てみたい。

KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

LIVA に Chinachu を導入して録画サーバーにする

liva ubuntu fsusb2n tv chinachu

今までは、鼻毛鯖に epgrec を入れて録画サーバーにしていた。先日、超小型の低価格 PC である ECS LIVA を買ったので、以前から気になっていた録画予約システム Chinachu を入れてみる。環境は以下のとおり。

マシン ECS LIVA-B3-2G-32G
OS Ubuntu 14.04 Desktop 日本語Remix 64bit
チューナー 恵安 KTV-FSUSB2
録画コマンド recfsusb2n for linux v0.9.2(パッチ適用済み)

recfsusb2n の導入については前回の記事を参照。

KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

Chinachu のインストール

以下、公式ドキュメントの指示に従ってインストールしていく。

依存パッケージのインストール

$ sudo apt-get install build-essential curl git-core libssl-dev yasm libtool autoconf libboost-all-dev

Chinachu 本体のインストール

GitHub 上のリポジトリをクローンし、インストーラを実行する。

$ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
$ cd ~/chinachu/
$ ./chinachu installer
Chinachu Installer Menu:
[!] These are installed under all /home/*****/chinachu/...
[!] Recommend the Auto installation. 
1) Auto (full)            5) Node.js Modules       9) libfdk-aac
2) Auto (fast)            6) epgdump              10) libogg
3) submodule              7) libx264              11) libvorbis
4) Node.js Environment    8) libvpx               12) libav
what do you install? > 1

1 の Auto (full) を選べば、必要なものをすべて自動でインストールしてくれる。いろいろコンパイルするので、LIVA では10分強かかった。

設定

設定ファイル config.json の編集

設定ファイルのサンプル config.sample.json が chinachu のルート直下にあるので、これをコピーして使う。

$ cp config.sample.json config.json

config.json の内容は以下のようにした。

{
  "recordedDir" : "./recorded/",
  "temporaryDir": "/tmp/",

  "wuiUsers": [
    "akari:bakuhatsu"
  ],

  "wuiPort"        : 10772,
  "wuiHost"        : "::",
  "wuiTlsKeyPath"  : null,
  "wuiTlsCertPath" : null,
  "wuiOpenServer"  : false,
  "wuiOpenPort"    : 20772,
  "wuiPreviewer"   : true,
  "wuiStreamer"    : true,
  "wuiFiler"       : true,
  "wuiConfigurator": true,

  "recordedFormat": "<date:yymmdd-HHMM>_<type><channel>_<title>.m2ts",

  "tuners": [
    {
      "name"        : "FSUSB2",
      "isScrambling": false,
      "types"       : [ "GR" ],
      "command"     : "recfsusb2n -b <channel> - -"
    }
  ],

  "channels": [
    { "type": "GR", "channel": "27" },
    { "type": "GR", "channel": "26" },
    { "type": "GR", "channel": "25" },
    { "type": "GR", "channel": "24" },
    { "type": "GR", "channel": "22" },
    { "type": "GR", "channel": "23" },
    { "type": "GR", "channel": "21" },
    { "type": "GR", "channel": "20" },
    { "type": "GR", "channel": "28" }
  ]
}

サンプルには tuners に PT3 の設定も入っているが、今回は FSUSB2 だけなので消しておく。channels には、受信したい物理チャンネルを列挙する。

Chinachu の番組表におけるチャンネルの並び順は、この channels に書かれた順序になる。

なお、valid な JSON になっていないと、Chinachu を動かしたときにエラーが出る。コメントや末尾のカンマは許容されないので注意。

空の録画予約ルールの作成

$ echo "[]" > rules.json

動作チェック

Web UI の動作確認

$ ./chinachu service wui execute

ブラウザで http://localhost:10772/ が開けるか確認。config.json の wuiUsers で指定したユーザー名/パスワード(初期設定では akari/bakuhatsu)を入力して中に入る。

この段階ではまだ EPG のデータを取得していないので、番組表は表示されない。WUI がちゃんと起動できていたら Ctrl+\ で終了させる。

EPG の取得テスト

EPG(番組表のデータ)を取得してみる。1チャンネルにつき1分程度要した。

$ ./chinachu update -f

なお、最初は下のようなエラーが出たが、これは config.json の command にタイポがあった(recfsusb2n が .recfsusb2n になっていた)というだけだった。

8 Jun 00:44:50 - GETTING EPG.
8 Jun 00:44:50 - [0] {"type":"GR","channel":"20","n":0}
8 Jun 00:44:50 - [0] LOCK: FSUSB2 (n=0)
8 Jun 00:44:50 - [0] SPAWN: .recfsusb2n -b 27 - - (pid=22521)
8 Jun 00:44:50 - [0] STREAM: /tmp/chinachu-tmp-hw53ex34.m2ts
8 Jun 00:44:50 - STATUS: { completed: 0, waiting: 9, worked: 1, running: 1 }

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn ENOENT
    at errnoException (child_process.js:988:11)
    at Process.ChildProcess._handle.onexit (child_process.js:779:34)

サービスの登録

Chinachu のサービス(chinachu-operator と chinachu-wui)が自動的に起動するよう、システムに登録する。

まず、起動スクリプトを /etc/init.d/ に追加する。

$ ./chinachu service operator initscript > /tmp/chinachu-operator
$ ./chinachu service wui initscript > /tmp/chinachu-wui
$ sudo chown root:root /tmp/chinachu-operator /tmp/chinachu-wui
$ sudo chmod +x /tmp/chinachu-operator /tmp/chinachu-wui
$ sudo mv /tmp/chinachu-operator /tmp/chinachu-wui /etc/init.d/

次に、insserv でサービスを登録する。ただし、Ubuntu のデフォルトの状態では、

$ sudo insserv chinachu-operator
sudo: insserv: command not found

となって使えない。insserv は /usr/lib/insserv/ に入っているので、シンボリックリンクを張ってから実行する。

$ sudo ln -s /usr/lib/insserv/insserv /sbin/insserv
$ sudo insserv chinachu-operator
$ sudo insserv chinachu-wui

サービスの開始

$ sudo service chinachu-operator start
$ sudo service chinachu-wui start

これで Chinachu が起動する。先ほどと同様、http://localhost:10772/ にアクセスすれば WUI が動いているはず。

Chinachu のログは chinachu/log/ 以下に保存されるので、うまく動いていない場合にはこれを参照する。WUI の ダッシュボード > ログ からでも閲覧可能(しかも自動的に表示を更新してくれる)。

なお、最初は(chinachu/log/operator に)以下のようなエラーが出て、うまく録画できなかった。

uncaughtException: Error: spawn ENOENT
    at errnoException (child_process.js:988:11)
    at Process.ChildProcess._handle.onexit (child_process.js:779:34)
8 Jun 03:04:55 - #recfsusb2n: execvp(): No such file or directory

どうやら、.zshrc で追加した PATH の中に recfsusb2n を入れていたため、./chinachu update -f などを手動で実行することはできても、Chinachu のサービスが recfsusb2n を動かそうとしたときには見つけられず、エラーになっていたっぽい。recfsusb2n を /usr/local/bin/ に移動したら解消された。

WUI からの設定の変更

Chinachu 設定ファイル config.json は、WUI が動いていれば右上の「+設定」から編集することができる。ハイライトや文法チェックもリアルタイムで行なってくれる。編集内容によっては、保存後に

$ sudo service chinachu-operator restart

(あるいは chinachu-wui)でサービスを再起動しないと反映されない。

まとめ

というわけで、LIVA への Chinachu の導入をひととおり行なった。鼻毛鯖に epgrec を入れたときには、MySQLパーミッションの設定などいろいろ面倒だったような記憶があるが、Chinachu はわりと簡単にできた。まだ使い始めたばかりだけども、UI も作りこまれていて使いやすそう。epgrec の開発が止まっていることもあり、夏アニメが始まる頃までには Chinachu に乗り換えていきたい。

エンコードとなると LIVA では厳しいかもしれないが、普通に Chinachu を動かす分には十分な感じだった。あとは TS ファイルの保存先をどうしようか。それほど録り溜めるつもりはないものの、LIVA に組み込まれているストレージ(eMMC)は 32GB だけなので、なにか考える必要がある。

次回は LAN 内の他の PC から録画・視聴ができるよう、環境を整備していきたい。