*

epgrec UNAインストール手順(CentOS 7編)

  最終更新日:2016/12/14

How to install epgrec UNA on CentOS 7

 CentOS 7にepgrec UNAをインストールする手順を説明します。

 本記事は『録画サーバ構築の前準備(CentOS 7編)、Chinachu・epgrec UNAに対応』の内容を実行済みであることを前提にしています。前記事の内容を実行していない場合、先にそちらをご参照下さい。

 本記事で取り扱うTVチューナーボードはPT3 Rev.Aです。

 なお、実行ユーザーを区別するため、シェルのコマンド表記は以下の様にしています。

[user@centos]$ 一般ユーザーとして実行
[root@centos]# rootとして実行

スポンサーリンク

パッケージ

EPELレポジトリ設定

 epgrec UNAは、PHPが動作するWebサーバが必要になります。本記事ではApacheよりも処理性能が高いnginxをインストールします。しかし、CentOS 7ではデフォルトでnginxをインストールすることができません。

 そこで、nginxをインストールするため、エンタープライズLinux用の拡張パッケージであるEPELレポジトリを使えるように設定します。ちなみに、EPELはExtra Packages for Enterprise Linuxの略です。

[user@centos]$ su -
[root@centos]# yum -y install epel-release
[root@centos]# vi /etc/yum.repos.d/epel.repo

  変更前) 6行目
   enabled=1

  変更後) 一時利用に変更する
   enabled=0

パッケージインストール

 nginx、at、MariaDB、php-fpm等、必要なパッケージをインストールします。なお、epgrec UNAで使用するデーターベースは本来MySQLですが、CentOS 7の標準データベースがMariaDBに変わったため、こちらを使用します。MariaDBはMySQL互換のデータベースなので特に問題ありません。

[root@centos]# yum -y --enablerepo=epel install nginx
[root@centos]# yum -y install at mariadb-server php-cli php-fpm php-mbstring php-mysql php-process

設定

MaridDB

 MariaDBの起動後、初期設定を行います。ほぼ全てEnterキーを押下するだけで良いですが、rootのパスワードは設定を行う必要があります。

[root@centos]# systemctl enable mariadb
[root@centos]# systemctl start mariadb
[root@centos]# mysql_secure_installation 
Set root password? [Y/n] ← Enter
New password: ← rootのパスワード入力
Re-enter new password: ← 再度入力

上記以外は全てEnterキー押下。

 MariaDBの文字コード設定を追加して、サービスを再起動します。

[root@centos]# vi /etc/my.cnf.d/server.cnf

・文字コード設定、12行目付近、以下を追記します。
[mysqld]
character-set-server=utf8

[root@centos]# systemctl restart mariadb

 続いて、epgrec UNA用のデータベースを作成します。

[root@centos]# mysql -u root -p
  Enter password: ← 先ほど設定したMariaDBのrootユーザーのパスワードを入力

   データベース作成の前に文字コードの設定に問題がないか確認します。
   set_filesystemとsets_dir以外が全てutf8ならば問題ありません。

  MariaDB [(none)]> show variables like "char%";
  +--------------------------+----------------------------+
  | Variable_name            | Value                      |
  +--------------------------+----------------------------+
  | character_set_client     | utf8                       |
  | character_set_connection | utf8                       |
  | character_set_database   | utf8                       |
  | character_set_filesystem | binary                     |
  | character_set_results    | utf8                       |
  | character_set_server     | utf8                       |
  | character_set_system     | utf8                       |
  | character_sets_dir       | /usr/share/mysql/charsets/ |
  +--------------------------+----------------------------+
  8 rows in set (0.01 sec)

   下記の'パスワード'は半角英数で適当なものを入力して下さい。

  MariaDB [(none)]> create database epgrec;
  MariaDB [(none)]> grant all on epgrec.* to epgrec@localhost identified by 'パスワード';
  MariaDB [(none)]> quit;

php-fpm設定

 nginxからphpを実行できるように設定します。

[root@centos]# vi /etc/php-fpm.d/www.conf

  nginxからの接続をIPソケットから応答の速いUnixソケットに変更します。
  ついでに実行ユーザーも変更。

  変更前) 12行、40行目付近
   listen = 127.0.0.1:9000
   user = apache
   group = apache

  変更後)
   listen = /var/run/php-fpm/php-fpm.sock
   user = nginx
   group = nginx

[root@centos]# sed -i 's/;date.timezone =/date.timezone = Asia\/Tokyo/g' /etc/php.ini

[root@centos]# vi /lib/systemd/system/php-fpm.service

  変更前) 11行目
   PrivateTmp=true

  変更後)
   PrivateTmp=false

[root@centos]# systemctl enable php-fpm
[root@centos]# systemctl daemon-reload
[root@centos]# systemctl start php-fpm

nginx設定

 nginxを起動し、nginx上でPHPが動作することを確認します。

[root@centos]# vi /etc/nginx/nginx.conf

    server {
        (中略)
          最後に下記を挿入

        location ~ [^/]\.php {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        }
        ↑ここまで
    }

[root@centos]# systemctl enable nginx
[root@centos]# systemctl start nginx
[root@centos]# vi /usr/share/nginx/html/phpinfo.php
  下記の内容をコピペして保存。

<?php
phpinfo();
?>

 ブラウザから”http://録画サーバのIPアドレス/phpinfo.php”にアクセスします。以下の様な内容が表示されれば成功です。

phpinfo

phpinfo

at

 atコマンドを実行するにはシェルスクリプトを実行できるユーザーでなければなりません。本記事ではepgrec UNAを実行するユーザーとしてnginxを使用します。ユーザーnginxはシェルスクリプトを実行できないので実行可能にします(セキュリティ的には問題がありますが…)。

[root@centos]# vi /etc/at.deny

 本ファイルはatコマンドの実行不可ユーザーリストです。
 デフォルトでは空っぽのはずなので、その場合は特に何もしなくて良いです。
 もし"nginx"が含まれていれば削除します。

[root@centos]# usermod -s /bin/bash nginx

  設定を反映させるため録画サーバを再起動します。

[root@centos]# reboot

epgrec UNA

epgdumpのインストール

 適当な何かの別館からepgdumpのソースコードをダウンロードします。これはブラウザからしかダウンロードできないので、ダウンロード後は録画サーバに転送します。”~/src”の下に置いたものとして手順を説明します。

[user@centos]$ cd ~/src
[user@centos]$ tar xvzf epgdumpUNA141013.tar.gz
[user@centos]$ cd epgdump
[user@centos]$ make
[user@centos]$ su
[root@centos]# make install
[root@centos]# exit

epgrec UNAのインストール

 適当な何かの別館からepgrec UNAをダウンロードします。本記事投稿時点の最新バージョンは”epgrecUNA 人柱版 (2015/07/20)”です。

 ダウンロードにはパスワードが必要です。パスワードのヒントは同じページ内に書かれています。しかし、最近はヒントが分かりにくくなっていて、少し考えないと分からなくなっています。外国人対策らしいですが、導入の敷居を高くするだけなので何とかしてほしいところです。

 パスワードについては私から回答はできません。こちらのページのコメントを良く読んで考えて下さい。「全角」がヒントです。私から言えるのはこれだけです。

 epgdumpと同じく、ダウンロードしたファイルは”~/src”の下に置いたものとして手順を説明します。

[user@centos]$ cd ~/src
[user@centos]$ tar xvzf epgrecUNA_150720.tar.gz
[user@centos]$ su
[root@centos]# mkdir -p /var/www/
[root@centos]# mv epgrec/ /var/www/
[root@centos]# cd /var/www/epgrec/
[root@centos]# chown -R nginx:nginx ../
[root@centos]# chmod 777 templates_c video thumbs settings cache
[root@centos]# vi config.php

  変更前) 75、202、203行目
   define( 'TUNER_UNIT1', 0 );
   define( 'HTTPD_USER', 'www-data' );
   define( 'HTTPD_GROUP', 'www-data' );

  変更後)
   define( 'TUNER_UNIT1', 2 ); ← PT3を2枚挿しの場合は4
   define( 'HTTPD_USER', 'nginx' );
   define( 'HTTPD_GROUP', 'nginx' );

 config.php は上記の他に地上デジタルチャンネルマップの設定の必要があります(9行目以降)。デフォルトで有効になっているのは首都圏のものです。参考例として大阪地区、名古屋地区のものもコメントの状態で記述されています。適宜変更しましょう。マスプロの地上デジタル放送 チャンネル一覧表が参考になります。

 続いて、nginxの設定を変更し、nginxを再起動します。

[root@centos]# vi /etc/nginx/nginx.conf

  変更前)
    server {
        (中略)
        root         /usr/share/nginx/html;

  変更後)
    server {
        (中略)
        root         /var/www/epgrec;
        charset utf-8;
        index index.php index.html;

[root@centos]# systemctl restart nginx

 ブラウザから”http://録画サーバのIPアドレス/”にアクセスします。下の様な画面が表示されれば成功です。ディレクトリやファイルのパーミッションの確認で問題がなければ先に進めます。もしエラーがある場合、表示されている内容を確認して下さい。

epgrec UNA 設定開始

epgrec UNA 設定開始

 変更すべき設定項目を以下にまとめました。チューナー設定はPT3が1枚の時のものになります。

設定項目 デフォルト設定 変更後
MySQL接続ユーザー名 yourname epgrec
MySQL接続パスワード yourpass データベース作成時に設定したパスワード
使用データベース名 yourdbname epgrec
地デジチューナーの台数 1 2
BSチューナーの台数 0 2
CS録画の有無 行わない 行う
録画ファイル名の形式 %TYPE%%CH%_%ST%_%ET% %YEAR%%MONTH%%DAY%
_%HOUR%%MIN%_%TYPE%%CH%_%TITLE%

 もしepgrec UNAの設定を最初からやり直したい場合、settings/config.xmlファイルを削除して下さい。

 設定手順のページの抜粋を下記に掲載します。

epgrec UNA 設定(データベース)

epgrec UNA 設定(データベース)

epgrec UNA 設定(デジタルチューナー)

epgrec UNA 設定(デジタルチューナー)

epgrec UNA 設定(録画ファイル名と番組表表示)

epgrec UNA 設定(録画ファイル名と番組表表示)

 初期設定が完了すると最後に「このリンクをクリックするとEPGの初回受信を開始します。」と言うリンクが表示されます。クリックするとリンクの内容通りEPG更新が始まるので、しばらく待ってから録画サーバのIPアドレスに再アクセスして下さい。番組表が表示されれば基本設定は完了です。

 なお、「EPGの初回受信を行います。9分程度後にepgrecのトップページを開いてください。」のリンクから再アクセスするとlocalhostに接続してしまうので注意。

 最後に定期的にEPG更新するようにcronの設定を行います。初期設定の最後にファイルをコピーすれば簡単に設定できるように書かれていますが、CentOS 7では出来ないので下記の手順で設定します。

[root@centos]# vi /etc/crontab
下記を追記する。

29 */2  *  *  * nginx      /var/www/epgrec/shepherd.php

 これで2時間毎の29分にEPG更新が行われます。偶数時の29分頃に下記を実行して動作確認します。

[user@centos]$ ps ax | grep recpt
  recpt1のプロセスが表示されれば成功。

録画用ディレクトリの変更方法

 本記事通りに作業すると録画用ディレクトリは”/var/www/epgrec/video”になっています。例えば”/recorder”ディレクトリに変更したい場合、以下の様に実行します。

[user@centos]$ su
[root@centos]# cd /var/www/epgrec
[root@centos]# mv video _video
[root@centos]# ln -s /recorder video

  録画済みの場合、元のディレクトリからTSファイルの移動を忘れずに!
  /recorderディレクトリがフルアクセスになっていない場合、以下の実行も必要。

[root@centos]# chmod 777 /recorder

トランスコード機能の追加

 ここまで行ったらFFmpegを使用したトランスコード機能の追加まで行いましょう。本ブログで以下の記事をまとめました。ぜひ試してみてください。

外出先から録画予約する方法

 実現するのはかなり面倒なのですが、比較的安全に外部から接続する方法としてSoftEther VPNを使った方法を紹介します。

 録画サーバを外部から接続する方法としてまとめましたが、実際には外部から家のLANにアクセスする方法なので、LANに接続する機器全てにアクセス可能になります。

うまく動かない場合

 2016年12月11日追記)最近、初期設定画面から先に進まない、番組表が表示されない、EPGデータ取得がうまく行かない等のコメントが複数寄せられています。以前は予備のPT3を使用して原因調査も出来たのですが、現状その予備も使用しているため、最新のディストリビューションでどうなのかを実際に確かめることが出来ない状況です。

 と言うことで、困っている方のためにこの節を追加しました。この節の内容を試して、記事に問題があることが判明したら、コメント欄にて教えて頂けると助かります。

 原因として考えられるのは、nginxやphp-fpmの設定の不備です。以下のディレクトリ以下のログに何らかのエラーや不自然な動作が記録されていないか確認してみて下さい(念のためMariaDBのログも)。

  • /var/log/ngin/
  • /var/log/php-fpm/
  • /var/log/mariadb/

 エディタで確認するのも良いですが、まずはtailコマンドで最終ログ付近のみを重点的に確認するほうが良いです。また、ログが記録されているはずの時刻に記録がない場合もあるので、エラーがないから問題ないとは言い切れません。

 番組表が表示されない場合、まず番組検索を試してみて下さい。番組検索でも何も表示されない場合、データベースに何も登録されていない可能性が高いです。

 EPG更新は以下のコマンドを実行すれば手動更新も可能です。

[user@centos]$ su -
[root@centos]# sudo -u nginx /var/www/epgrec/shepherd.php

 ここまで適切に設定されていれば、このコマンドがcronで偶数時間の29分に実行されているはずです。以下の様なログが記録されているか、/var/log/syslogファイルで確認しましょう。

例) Dec 11 08:29:01 --- CROND[14583]: (nginx) CMD (     /var/www/epgrec/shepherd.php)

 MariaDBのデータベースの中身を確認する場合は以下を試してみて下さい。

[user@centos]$ mysql -u epgrec -p
  Enter password: ← 初期設定画面で登録したepgrecユーザーのパスワードを入力

MariaDB> use epgrec;

MariaDB> show tables;

※ epgrec用のテーブル一覧を表示、以下の内容であれば問題なし

+-------------------------+
| Tables_in_epgrec        |
+-------------------------+
| Recorder_categoryTbl    |
| Recorder_channelTbl     |
| Recorder_keywordTbl     |
| Recorder_logTbl         |
| Recorder_programTbl     |
| Recorder_reserveTbl     |
| Recorder_transcodeTbl   |
| Recorder_transexpandTbl |
+-------------------------+
8 rows in set (0.00 sec)

MariaDB> select * from Recorder_logTbl;

※ EPG更新動作などのログを確認

 ここまでで原因究明出来ているか分かりませんが、調査を続ける場合、epgrec UNAが全体としてどのように動作しているか考えると闇雲に調査をするはめにはならないと思います。

  • nginxはWebサーバ、ブラウザとの送受信を担当
  • nginxはphp-fpmを経由してPHPを実行
  • PHPからMariaDBにアクセス
  • MariaDBのデータベースにEPG、番組、録画情報等を格納
  • EPG更新はcronによりPHPコマンドを定期実行