2015-10-27

Chinachu サーバの構築 その4 「Chinachu のインストール」

いよいよ、大本命、「Chinachu のインストール」です。

加えて、チューナのドライバや録画プログラムの準備もします。

# 今回は特に推測で書いていたり、実際にやったことを一部変更していることもあって、間違っている、うまくいかないところもある可能性が高いです。そこら辺は自力でどうにか対処してください。



ひとまず、作業フォルダに移動します。今回は、"/usr/local/src" で作業します。
(移動するのを忘れて、ややこしいことにならないように、念のため各作業の頭に同コマンドを書いてあります。)

# cd /usr/local/src



まず、カードリーダの準備。 (USB接続のカードリーダを使う場合に必要。)

必要なパッケージをインストール。

# yum install pcsc-lite pcsc-lite-devel pcsc-lite-libs

必要なパッケージを拾ってきます。
もし、リンク切れした場合には、pcsc-perlpcsc-tools のページに行き、生きているリンクを探してください。
ダウンロードが済んだら、ダウンロードしたファイルを解凍し、フォルダ内に移動、インストールをします。

# cd /usr/local/src
# wget http://ludovic.rousseau.free.fr/softwares/pcsc-perl/pcsc-perl-1.4.13.tar.bz2
# tar xf pcsc-perl-1.4.13.tar.bz2
# cd pcsc-perl-1.4.13
# make
# make install

# cd /usr/local/src
# wget http://ludovic.rousseau.free.fr/softwares/pcsc-tools/pcsc-tools-1.4.24.tar.gz
# tar xf pcsc-tools-pcsc-tools-1.4.24.tar.gz
# cd pcsc-tools-pcsc-tools-1.4.24
# make
# make install

起動、テストを実行してください。

# systemctl enable pcscd
# systemctl start pcscd
# pcsc_scan

加えて、放送波復号コマンド「arib25」も導入します。
(http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip のものは、v0.2.4 ぽかったので、GitHub に置かれているものを使用。)

# cd /usr/local/src
# git clone --depth 1 https://github.com/stz2012/libarib25.git
# cd libarib25
# make
# make install



チューナのドライバと録画用コマンドを導入してきます。
自身の必要なものだけ入れればいいです。

まず、PT3。

ドライバのインストール。

# cd /usr/local/src
# echo "blacklist earth-pt3" >> /etc/modprobe.d/blacklist.conf
# git clone --depth 1 https://github.com/m-tsudo/pt3.git
# cd pt3
# make
# make install
# modprobe pt3_drv
# reboot        # 再起動
# ls -la /dev/pt*        # 認識チェック

録画コマンド「pt1rec」のインストール。

# cd /usr/local/src
# git clone --depth 1 https://github.com/stz2012/recpt1.git
# cd recpt1/recpt1
# yum install autoconf
# ./autogen.sh
# ./configure --enable-b25
# make
# make install
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig


続いて、KTV-FSUSB2。

KTV-FSUSB2 が認識しているかをチェックするために、ユーティリティをインストール

# yum install usbutils

usbutils を実行して、それっぽいデバイスが出れば OK。

# usbutils
ID 0511:0029 N'Able (DataBook) Technologies, Inc.

まず、コンパイルするための準備。
Boost C++ Libraries の最新版はホームページから辿ってください。Boost C++ Libraries のインストールは結構時間がかかります。

# cd /usr/local/src
# yum install gcc-c++ boost-devel
# wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.bz2/download
# tar xvf boost_1_59_0.tar.bz2
# cd boost_1_59_0
# ./bootstrap.sh
# ./b2 install --prefix=/usr/local

今度こそ、ドライバのインストール。
[recfsusb2n] - 適当な何かの別館 (正確には、Axfc UpLoader) で公開されている、「recfsusb2n_http_patch2.zip」を拾ってきて、/usr/local/src ディレクトリに置いてあることを想定。

# cd /usr/local/src
# git clone --depth 1 https://github.com/sh0/recfsusb2n
# cd recfsusb2n
# unzip /usr/local/src/recfsusb2n_http_patch2.zip -d patch
# cp /patch/* ./src/
# vi Makefile

Makefile の編集点は、
  • LIBS をコメントアウトされているものと変えて
  • boost_thread-mt を boost_thread に
  • g++ のフラグに -std=c++11 (しなくてもいい?)
  • usbops.cpp に "#include <unistd.h>" を追記
でいいはず。 (私自身は、recfsusb2n-0.9.2.tar.gz という、GitHub 上のソースではなく、元のソースからやったため、完全に同じかは不明。)

Makefile を編集したら、コンパイルし、完成したコマンドを /usr/local/bin にコピーしておきます。

# make
# cp recfsusb2n /usr/local/bin

パーミッションルールを作ります。
アクセス可能なグループ (<group-name>) を作ります。ついでに、Chinachu 用のアカウント "chinachu" も作っちゃいます。

# useradd chinachu
# passwd chinachu        # 適当にパスワードを設定
# groupadd <group-name>
# gpasswd -a chinachu <group-name>
# udevadm control --reload-rules

ルールの設定ファイルを編集します。

# vi /lib/udev/rules.d/89-tuner.rules

追記する内容は、下記。

BUS=="usb" SYSFS{idVendor}=="0511", SYSFS{idProduct}=="0029", MODE="0666", GROUP="<group-name>"

recfsusb2n が正常に動作しているか、チェックしてみてください。

$ recfsusb2n -v 27 30 test.ts



いよいよ、「Chinachu のインストール」です。

必要なパッケージをインストールします。
公式だと libtool は CentOS の場合には必要だとは書かれていないが、自身の環境だと libtool も必要だった。 (より具体的には、libfdk-aac インストール時にエラーを吐いた。)

# yum install wget curl yasm libtool

あとは、「Installation · kanreisa/Chinachu Wiki · GitHub」を参考に導入すれば問題ないかと。 (Wiki の方にも書かれていますが、先ほど作成したユーザへのスイッチをお忘れなく。)

インストール後は、Chinachu WUI へのアクセスのため、ポートへのアクセスを許可します。
ここでは、デフォルトポートの 10772 と 20772 を許可します。

# firewall-cmd --add-port=10772/tcp --zone=public
# firewall-cmd --permanent --add-port=10772/tcp --zone=public
# firewall-cmd --reload
# firewall-cmd --list-all

# firewall-cmd --add-port=20772/tcp --zone=public
# firewall-cmd --permanent --add-port=20772/tcp --zone=public
# firewall-cmd --reload
# firewall-cmd --list-all

# systemctl restart firewalld

更に、認証ポート用に TLS キー (オレオレ証明書) を生成します。

$ cd ~/chinachu
$ openssl genrsa -aes256 2048 > chinachu.key       # 秘密鍵の生成。AES256 で暗号化するため、パスワードを求められる。
$ openssl req -new -key chinachu.key -out chinachu.csr        # 証明書署名要求 (CSR) の作成 (先ほどのパスワードが必要)
$ openssl x509 -days 3650 -req -signkey chinachu.key -in chinachu.csr -out chinachu.crt        # 証明書の生成。各種情報を入力させられる。
$ openssl rsa -in chinachu.key -out chinachu.key        # 秘密鍵からパスワードを除去

そうしたら、任意の Web ブラウザを使って、Chinachu WUI へアクセスします。

http://<hostname or ip-address>:10772

デフォルトの ID とパスワードは、akari、bakuhatsu です。

そうしたら、右上の「設定」から、config.json を弄くります。

録画先、録画ファイル名などは、こんな感じにしている。

  "recordedDir"   : "/home/shared/recorded",
  "temporaryDir"  : "/tmp/",
 
  "recordedFormat"  : "[<date:yymmdd-HHMM>][<type><channel>][<tuner>] <title> <subtitle> (<channel-name>).m2ts",

同じようにするなら、録画フォルダを作っておく必要あり。

$ mkdir /home/shared/recorded
$ chmod 777 /home/shared/recorded        # 不要なはずだけど一応

また、WUI の振る舞いはこんな感じ。先ほど作成した TLS キーなどもここで指定。
wuiOpenServer を有効化することで、ログイン時のユーザ名・パスワードの入力が不要になります。
が、LAN 内アクセス用とし、決して外部に開放しないように。また、このように設定すると、wuiPort 経由でのアクセス時には、https で接続する必要がありますので、ご注意を。

  "wuiUsers": [
    "akari:bakuhatsu"
  ],
 
  "wuiPort"            : 10772,
  "wuiHost"            : "::",
  "wuiTlsKeyPath"      : "./chinachu.key",
  "wuiTlsCertPath"     : "./chinachu.crt",
  "wuiOpenServer"      : true,
  "wuiOpenPort"        : 20772,
  "wuiPreviewer"       : true,
  "wuiStreamer"        : true,
  "wuiFiler"           : true,
  "wuiConfigurator"    : true,
  "wuiAllowCountries"  : [ "JP" ],

チューナは接続しているデバイスに応じて、追加する。

  "tuners": [
    {
      "name"    : "PT3-S1",
      "isScrambling": false,
      "types"   : [ "BS", "CS" ],
      "command"  : "recpt1 --device /dev/pt3video0 --b25 --strip --sid <sid> <channel> - -"
    },
    {
      "name"    : "PT3-S2",
      "isScrambling": false,
      "types"   : [ "BS", "CS" ],
      "command"  : "recpt1 --device /dev/pt3video1 --b25 --strip --sid <sid> <channel> - -"
    },
    {
      "name"    : "PT3-T1",
      "isScrambling": false,
      "types"   : [ "GR" ],
      "command"  : "recpt1 --device /dev/pt3video2 --b25 --strip --sid <sid> <channel> - -"
    },
    {
     "name"    : "PT3-T2",
      "isScrambling": false,
      "types"   : [ "GR" ],
      "command"  : "recpt1 --device /dev/pt3video3 --b25 --strip --sid <sid> <channel> - -"
    },
    {
      "name"        : "FSUSB2N",
      "isScrambling": false,
      "types"       : [ "GR" ],
      "command"     : "recfsusb2n --b25 <channel> - -"
    }
  ],

チャンネルも、必要に応じて。 (地上波は東京での例。他の地域の場合、「地上デジタル放送 チャンネル一覧表 - マスプロ電工|MASPRO」を参考にするとよいかと。BS/CS は自身では使っていないので、正しいかは不明。)
# 受信できないものまで並べると、正常に動作しませんので、ご注意を。

  "channels": [
    { "type": "GR", "channel": "27", "_ch_name": "NHK 総合・東京" },
    { "type": "GR", "channel": "26", "_ch_name": "NHK Eテレ・東京" },
    { "type": "GR", "channel": "25", "_ch_name": "日テレ" },
    { "type": "GR", "channel": "24", "_ch_name": "テレビ朝日" },
    { "type": "GR", "channel": "22", "_ch_name": "TBS" },
    { "type": "GR", "channel": "23", "_ch_name": "テレビ東京" },
    { "type": "GR", "channel": "21", "_ch_name": "フジテレビ" },
    { "type": "GR", "channel": "16", "_ch_name": "TOKYO MX" },

    { "type": "BS", "channel": "101", "_ch_name": "NHK BS1" },
    { "type": "BS", "channel": "102", "_ch_name": "NHK BS1臨時" },
    { "type": "BS", "channel": "103", "_ch_name": "NHK BSプレミアム" },
    { "type": "BS", "channel": "141", "_ch_name": "BS日テレ" },
    { "type": "BS", "channel": "142", "_ch_name": "BS日テレ" },
    { "type": "BS", "channel": "151", "_ch_name": "BS朝日" },
    { "type": "BS", "channel": "161", "_ch_name": "BS-TBS" },
    { "type": "BS", "channel": "171", "_ch_name": "BSジャパン" },
    { "type": "BS", "channel": "181", "_ch_name": "BSフジ" },
    { "type": "BS", "channel": "191", "_ch_name": "WOWOWプライム" },
    { "type": "BS", "channel": "192", "_ch_name": "WOWOWライブ" },
    { "type": "BS", "channel": "193", "_ch_name": "WOWOWシネマ" },
    { "type": "BS", "channel": "200", "_ch_name": "スター・チャンネル1" },
    { "type": "BS", "channel": "201", "_ch_name": "スター・チャンネル2" },
    { "type": "BS", "channel": "202", "_ch_name": "スター・チャンネル3" },
    { "type": "BS", "channel": "211", "_ch_name": "BS11" },
    { "type": "BS", "channel": "222", "_ch_name": "TwellV" },
    { "type": "BS", "channel": "231", "_ch_name": "放送大学 BS1" },
    { "type": "BS", "channel": "232", "_ch_name": "放送大学 BS2" },
    { "type": "BS", "channel": "233", "_ch_name": "放送大学 BS3" },
    { "type": "BS", "channel": "234", "_ch_name": "グリーンチャンネル" },
    { "type": "BS", "channel": "236", "_ch_name": "BSアニマックス" },
    { "type": "BS", "channel": "238", "_ch_name": "FOX bs238" },
    { "type": "BS", "channel": "241", "_ch_name": "BSスカパー!" },
    { "type": "BS", "channel": "242", "_ch_name": "J SPORTS 1" },
    { "type": "BS", "channel": "243", "_ch_name": "J SPORTS 2" },
    { "type": "BS", "channel": "244", "_ch_name": "J SPORTS 3" },
    { "type": "BS", "channel": "245", "_ch_name": "J SPORTS 4" },
    { "type": "BS", "channel": "251", "_ch_name": "BS釣りビジョン" },
    { "type": "BS", "channel": "252", "_ch_name": "IMAGICA BS" },
    { "type": "BS", "channel": "255", "_ch_name": "日本映画専門チャンネル" },
    { "type": "BS", "channel": "256", "_ch_name": "ディズニー・チャンネル" },
    { "type": "BS", "channel": "258", "_ch_name": "D-Life" },

    { "type": "CS", "channel": "CS8", "sid": "55", "_ch_name": "ショップチャンネル" },
    { "type": "CS", "channel": "CS4", "sid": "100", "_ch_name": "スカパー!プロモ" },
    { "type": "CS", "channel": "CS22", "sid": "161", "_ch_name": "QVC" },
    { "type": "CS", "channel": "CS8", "sid": "218", "_ch_name": "東映チャンネル" },
    { "type": "CS", "channel": "CS8", "sid": "219", "_ch_name": "衛星劇場" },
    { "type": "CS", "channel": "CS4", "sid": "223", "_ch_name": "チャンネルNECO" },
    { "type": "CS", "channel": "CS4", "sid": "227", "_ch_name": "ザ・シネマ" },
    { "type": "CS", "channel": "CS24", "sid": "229", "_ch_name": "FOXムービー" },
    { "type": "CS", "channel": "CS18", "sid": "240", "_ch_name": "ムービープラスHD" },
    { "type": "CS", "channel": "CS4", "sid": "250", "_ch_name": "sky・Aスポーツ+" },
    { "type": "CS", "channel": "CS12", "sid": "254", "_ch_name": "GAORA" },
    { "type": "CS", "channel": "CS24", "sid": "257", "_ch_name": "日テレG+ HD" },
    { "type": "CS", "channel": "CS18", "sid": "262", "_ch_name": "ゴルフネットHD" },
    { "type": "CS", "channel": "CS16", "sid": "290", "_ch_name": "SKY STAGE" },
    { "type": "CS", "channel": "CS14", "sid": "292", "_ch_name": "時代劇専門ch HD" },
    { "type": "CS", "channel": "CS14", "sid": "293", "_ch_name": "ファミリー劇場HD" },
    { "type": "CS", "channel": "CS6", "sid": "294", "_ch_name": "ホームドラマCH" },
    { "type": "CS", "channel": "CS2", "sid": "296", "_ch_name": "TBSチャンネル1" },
    { "type": "CS", "channel": "CS22", "sid": "297", "_ch_name": "TBSチャンネル2" },
    { "type": "CS", "channel": "CS2", "sid": "298", "_ch_name": "テレ朝チャンネル1" },
    { "type": "CS", "channel": "CS2", "sid": "299", "_ch_name": "テレ朝チャンネル2" },
    { "type": "CS", "channel": "CS24", "sid": "300", "_ch_name": "日テレプラス" },
    { "type": "CS", "channel": "CS16", "sid": "305", "_ch_name": "チャンネル銀河" },
    { "type": "CS", "channel": "CS20", "sid": "307", "_ch_name": "フジテレビONE" },
    { "type": "CS", "channel": "CS20", "sid": "308", "_ch_name": "フジテレビTWO" },
    { "type": "CS", "channel": "CS20", "sid": "309", "_ch_name": "フジテレビNEXT" },
    { "type": "CS", "channel": "CS14", "sid": "310", "_ch_name": "スーパー!ドラマHD" },
    { "type": "CS", "channel": "CS16", "sid": "311", "_ch_name": "AXN 海外ドラマ" },
    { "type": "CS", "channel": "CS22", "sid": "312", "_ch_name": "FOX" },
    { "type": "CS", "channel": "CS18", "sid": "314", "_ch_name": "女性ch/LaLa" },
    { "type": "CS", "channel": "CS24", "sid": "321", "_ch_name": "スペシャプラス" },
    { "type": "CS", "channel": "CS22", "sid": "322", "_ch_name": "スペースシャワーTV" },
    { "type": "CS", "channel": "CS6", "sid": "323", "_ch_name": "MTV HD" },
    { "type": "CS", "channel": "CS12", "sid": "325", "_ch_name": "エムオン!HD" },
    { "type": "CS", "channel": "CS8", "sid": "326", "_ch_name": "ミュージック・エア" },
    { "type": "CS", "channel": "CS6", "sid": "329", "_ch_name": "歌謡ポップス" },
    { "type": "CS", "channel": "CS12", "sid": "330", "_ch_name": "キッズステーション" },
    { "type": "CS", "channel": "CS22", "sid": "331", "_ch_name": "カートゥーン" },
    { "type": "CS", "channel": "CS16", "sid": "333", "_ch_name": "AT-X" },
    { "type": "CS", "channel": "CS8", "sid": "339", "_ch_name": "ディズニージュニア" },
    { "type": "CS", "channel": "CS6", "sid": "340", "_ch_name": "ディスカバリー" },
    { "type": "CS", "channel": "CS6", "sid": "341", "_ch_name": "アニマルプラネット" },
    { "type": "CS", "channel": "CS4", "sid": "342", "_ch_name": "ヒストリーチャンネル" },
    { "type": "CS", "channel": "CS16", "sid": "343", "_ch_name": "ナショジオチャンネル" },
    { "type": "CS", "channel": "CS8", "sid": "349", "_ch_name": "日テレNEWS24" },
    { "type": "CS", "channel": "CS22", "sid": "351", "_ch_name": "TBSニュースバード" },
    { "type": "CS", "channel": "CS16", "sid": "353", "_ch_name": "BBcワールド" },
    { "type": "CS", "channel": "CS6", "sid": "354", "_ch_name": "CNNj" },
    { "type": "CS", "channel": "CS24", "sid": "362", "_ch_name": "旅チャンネル" },
    { "type": "CS", "channel": "CS4", "sid": "363", "_ch_name": "囲碁・将棋チャンネル" },
    { "type": "CS", "channel": "CS10", "sid": "800", "_ch_name": "スカチャン0" },
    { "type": "CS", "channel": "CS10", "sid": "801", "_ch_name": "スカチャン1" },
    { "type": "CS", "channel": "CS10", "sid": "802", "_ch_name": "スカチャン2" },
    { "type": "CS", "channel": "CS10", "sid": "805", "_ch_name": "スカチャン3" }
  ]

設定後は、Chinachu のサービスを再起動して、設定を反映する必要あり。

# service chinachu-operator restart
# service chinachu-wui restart



最後に、自動スリープ移行スクリプトを導入しておきます。
不要な人は、入れなければそれでいいです。

gcch/Chinachu-Sleep-Scripts」の説明を読みながらやれば問題ないはず。

Chinachu URL には、

http://<hostname or ip-address>:20772

を指定してください。それだけです。



更にダメ押しのおまけで、Wake on LAN (WoL) の設定も。

まず、BIOS の SETUP を開き、それっぽい設定があれば有効化しておきます。

そして、LAN カードの Mac アドレスとインターフェース名 ("lo" ではなく、有線ポートなら "enp0s25" みたいなやつ) をチェックします。

# ip addr

有効化します。

# ethtool -s <interface> wol g

常時有効化するために、上のコマンドをそのまま /etc/rc.local に書き込んでおきます。 (下のコマンドでは、コメント文も書き込むようになっています。)

# echo -e "# Enable Wake on LAN\nethtool -s <interface> wol g" >> /etc/rc.local

以上で完了。うまく動作しない PC も中にはあるので、その時は諦めで。
マジックパケットを送信できるクライアントを使用して、Mac アドレスは先程調べたものを、IP アドレスには、ホスト部をすべて 1 にした IP アドレス、つまりPC の IP が 192.168.1.123/24 (/24 = サブネットマスクが 255.255.255.0) なら、192.168.1.255 (ブロードキャストアドレス) 目掛けてパケットを送ってみてください。
Android からであれば「Wake On Lan」がオススメ。



というわけで、こんなところで終了。
まとめてみると、思った以上に長かった…… 疲れた。



参考サイト (再掲含む)



「Chinachu サーバの構築」シリーズ一覧


0 件のコメント :

コメントを投稿