ubuntu13.10+pt3+STZ版epgrec+nginx+php5-fpmの環境構築


前回、Apache環境でepgrecをインストールしましたが、検索するのに待たされる時間短縮のために、nginx+php5-fpm環境にすることにしました。ウェブサーバ実行時のユーザーは変わらずwww-dataなので、要所要所の設定を間違わなければ、設定自体は簡単です。

現状、他にやっている人がいないようですが、『nginx php5-fpm wordpress』で検索すると、結構ヒットするので、そちらを参照してみて下さい。どちらかと言うと、速度以上に自己満足的な所が強く、『右肩上がりで採用実績が増えているnginxを家庭内サーバにも導入してみてほしい』と言う思いで書いています。

nginxの採用実績についてはマイナビのNginxシェア増やす、Netcraft 5月Webサーバ調査参照。Apacheに次いで2位にまで上り詰めているようです。

epgrec環境構築例(本家/STZ版/UNA版)

epgrecの環境構築例が当Blog内に数パターンある為、構成別にまとめました。参考にしてください。

投稿 構成 難易度 コメント
ubuntu+epgrec(UNA版)+pt3環境構築 epgrec(UNA版) + nginx + php5-fpm epgrec(UNA版)インストールの最小構成です。
USBbootするUbuntu-NAS① epgrec+pt3+minidlna+kvm環境を構築する epgrec(UNA版) + nginx + php5-fpm USBメモリ(SSD可)にUbuntuをインストールし、録画はRAID構成のHDDに行っています。単純にディスクの延命対策と低消費電力化するテクニックを使っているだけなので、USBメモリはSSDと読み替えてもらってOKです。②、③の記事まで実行するとminidlnaやsamba、KVMまでが同居する環境になります。
ubuntu13.10+epgrec(本家)+pt3+nginx+php5-fpm 環境構築 epgrec(本家) + Apache 本家です。安定して運用出来ます。開発が止まっているようです。
ubuntu13.10+pt3+STZ版epgrec+nginx+php5-fpmの環境構築 epgrec(STZ版) + nginx + php5-fpm STZ版はepgrecやrecpt1等をまとめて公開してくれているので、組合せによるトラブルが出にくいので、構築しやすいです。最近まではSTZ版をメインに利用していました。今はUNA版に移りつつあります。
ubuntu13.10+pt3+epgrecの環境構築 epgrec(STZ版) + Apache 上記のApache版。nginxとApacheを比べるとnginx上に構築した方がweb画面の遷移が速いが、Apacheの方がセットアップは楽なのでnginxで挫折した方向け
消費電力30W以下 Ubuntu13.04&PT2/PT3&epgrec サーバを作る epgrec(STZ版) + Apache PT2を最新カーネルでビルドする方法も一緒に書いています。
組み合わせを選ぶ基準として
epgrecは本家、STZ版、UNA版と色々な版を開発者の方が出して下さっていますが、開発が既に止まっているものもあります。現状で開発が活発なのはUNA版となります。3種ともに比較させて貰いましたが、構築が一番楽なのがSTZ版、便利に使えるのがUNA版、本家は安定運用実績が多い為、カスタマイズ(プログラム修正)したい場合に向くと言う感想を持っています。
コメント欄について
各記事のコメント欄で、コメントの最初に『【雑談】』と書いてもらえれば、情報交換の為に閲覧者間での雑談に使ってもらって構いません。メールアドレスは公開されないのでフリーのメアドでも使って下さい。誹謗中傷はしない方向でお願いします。

用語解説

名前 解説
nginx nginx(えんじんえっくす)は高負荷に耐えられるHTTPとメールのリバースプロキシサーバです。
php5-fpm PHPの実行環境。今までのApacheのmod-phpで行っていた事を置き換え可能。速いです。

速度比較

計測条件 Apache+mod_php nginx+php5-fpm
番組表TOP表示 1秒 0.5秒以下
CS番組表表示 2秒 0.5秒以下
『ニュース』を指定して300件表示される状態での検索 2秒弱 0.5秒以下
※ PRIMERGY TX100 S3環境での測定結果です。nginxの0.5秒以下の記載は、計測以前に表示が終わっているので、仕方なく0.5秒以下と記載しました。

メリット・デメリット

epgrec+nginx+php5-fpmでの動作の前例は、今のところgoogle検索ではヒットしない模様です。初物のようですので、『家庭内では何の目的で導入するかが解らなかったnginxをepgrecを動かすことを目的とし連休中等を利用して、nginxのノウハウをため込む事』が一番のメリットです。

観点 Apache+mod_php nginx+php5-fpm
速度
設定難易度
情報量
他のウェブアプリとの連携
passenger

リバースプロキシ
unicorn

ubuntu13.10+pt3+epgrec+nginx+php5-fpmの環境構築

この記事は、最近のBS/CS放送に対応した機能拡張もしてくださっているSTZ版epgrecを利用しています。Ubuntu13.10で利用する上での不都合にもインストール途中で適宜対処し、利用開始できる所までの覚書となります。

最初に、事前に用意するべきハードウェアは次の通りです。

また、『Ubuntu13.10 serverのインストールと初期設定(スクリーンショット有り)』を参考にUbuntu13.10が既にインストール済で必要な開発系ライブラリ等もインストール済みである事とします。既にUbuntu13.10をインストール済みであっても、画像つきで記載していますので、数分で済みますので、簡単に流し読みしてみて下さい。

PT3のドライバやカードリーダ、recpt1等のインストール

カードリーダの設定

 sudo apt-get install pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools
 pcsc_scan | grep "Japanese Chijou Digital"

BCASカードが認識されていることを確認。

 Japanese Chijou Digital B-CAS Card (pay TV)

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

sudo su -
echo "blacklist earth-pt1" >> /etc/modprobe.d/blacklist.conf
git clone https://github.com/m-tsudo/pt3.git
cd pt3/
make clean && make
sudo make install
sudo reboot

再起動後にpt3video*がある事を確認

ls -la /dev/pt3*
crw-rw-rw- 1 root video 248, 0 10月 20 20:50 /dev/pt3video0
crw-rw-rw- 1 root video 248, 1 10月 20 20:50 /dev/pt3video1
crw-rw-rw- 1 root video 248, 2 10月 20 20:50 /dev/pt3video2
crw-rw-rw- 1 root video 248, 3 10月 20 20:50 /dev/pt3video3

arib25のインストール

mkdir ~/tmpcd ~/tmp
wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
unzip c44e16dbb0e2.zip
cd pt1-c44e16dbb0e2/arib25
make && sudo make install

recpt1(stz版)のインストール

cd ~/tmp
git clone https://github.com/stz2012/recpt1.git stz_recpt1
cd stz_recpt1/recpt1
./autogen.sh
./configure --enable-b25
make
sudo make install

録画テスト

ここまでで、一度録画テストを行っておきましょう。エラーが出た場合には、TVケーブルの接続やカードリーダを見直してください。それでも直らなければ、コピペでやってきた場所でエラーが出ていないかを見直してみます。

recpt1 --b25 --strip 27 20 test.ts

epgdumpのインストール

cd ~/tmp
git clone https://github.com/stz2012/epgdump.git stz_epgdump
cd stz_epgdump/
make
sudo make install

epgrecの設定

epgrecではmysql、atを使いますので、それらの設定を済ませます。

atコマンドが使えるようにする。

sudo vi /etc/at.deny

at.denyにnginxとphp5-fpmの実行ユーザー名(www-data)が書かれていると、録画予約に失敗しますので、以下の行を削除します。

www-data

nginx、Mysql、PHP等のインストール

apacheで環境構築するのが普通ですが、今回はApacheを使いません。かわりに軽量のHTTPとリバースプロキシのサーバを兼ねたnginxを使います。更にnginxでリバースプロキシの設定を行い、epgrecはphp5-fpmで動かすことにします。

sudo apt-get install nginx php5-fpm  php5-cli mysql-server mysql-client php5-mysql
sudo apt-get clean

MySQLの設定

別にutf-8を明示的に指定しなくてもいいのですが、後々の為にutf-8にしておきます。
MySQL5.5から多少設定に変更があり、utf-8を使う場合の指定方法は下記のように変わっているようです。

sudo vi /etc/mysql/my.cnf

/etc/mysql/my.cnfの中の[client]と[mysqld]の下に下記の設定を付け加えます。

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8

 

sudo service mysql restart

MySQLのDBを作成します。

mysql -uroot -p
create database epgrec;
grant all on epgrec.* to epgrec@localhost identified by 'yourpassword';
flush privileges;

epgrecのインストール

下記の様に実施します。

cd /var/www
sudo git clone https://github.com/stz2012/epgrec.git epgrec
sudo chown -R www-data:www-data ./epgrec
cd epgrec

sudo cp do-record.sh.pt1 ./do-record.sh
sudo chmod 777 cache templates_c video thumbs settings
sudo chmod 666 thumbs/index.html video/index.html
sudo chmod 755 do-record.sh
sudo chown www-data:www-data do-record.sh
sudo mv config.php.sample config.php
sudo vi config.php

sudo chown -R www-data:www-data /var/www/epgrec

番組表更新のcronジョブを登録します。

sudo cp cron.d/getepg  /etc/cron.d/

/etc/php5/cli/php.ini を編集する。

上記までの設定で番組表を取得しようとした場合、次のようなエラーが発生します。
(他にも、タイムゾーンのエラー等も発生しますので、その対策も一緒にやります。)

PHP Warning:  pcntl_fork() has been disabled for security reasons in /var/www/epgrec/getepg.php on line 21
PHP Warning:  pcntl_fork() has been disabled for security reasons in /var/www/epgrec/getepg.php on line 24
PHP Warning:  pcntl_signal() has been disabled for security reasons in /var/www/epgrec/getepg.php on line 26

pcntl_forkとpcntl_signalがdisable_functionsに設定されていることが原因ですので、そららをコメントアウトしておきます。

sudo vi /etc/php5/cli/php.ini

下記のdisable_functionsをコメントアウト

; disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

# タイムゾーンの設定箇所を検索して、下記のように設定。
date.timezone = "Asia/Tokyo"

php5-fpmを使う場合には、/etc/php5/fpm/php.iniにも設定する必要があった(結果論として解っただけ)。

sudo vi /etc/php5/fpm/php.ini

# タイムゾーンの設定箇所を検索して、下記のように設定。

date.timezone = "Asia/Tokyo"
; disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

サービスの再起動と起動時に自動起動する設定

nginxのリバースプロキシを設定して、epgrecが表示されるようにします。


sudo vi /etc/nginx/nginx.conf

httpセクションの直下にcharset UTF-8;を追記します。

http {
charset UTF-8;

リバースプロキシの設定


sudo vi /etc/nginx/sites-available/default

下記の設定を追記。デフォルトで他の設定があったらコメントアウトでOK。


server {
listen 80 default_server;
root /var/nginx;
index index.html index.htm index.php;
server_name localhost;
location / {
try_files $uri $uri/ /index.html;
}

location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}

 

sudo service php5-fpm restart
sudo service nginx restart
sudo sysv-rc-conf php5-fpm on
sudo sysv-rc-conf nginx on

後は、普通にウェブの設定を行います。
<h2>ウェブ画面よりのepgrecの初期設定</h2>
http://epgrecserver/epgrec
にアクセスして設定を済ませます。画面は下記の通り。

1ページ目

2ページ目

3ページ目

4ページ目

番組表の取得
ウェブ上からやってもいいのですが、初回はエラーが出た場合に対処しやすいようにコマンドラインから実行します。

sudo su -
su www-data -
/var/www/epgrec/getepg.php

$ ps aux | grep recpt1
# 次のように出ていたら、番組表の取得を始めているので、OKです。
www-data 9163 5.2 0.0 137760 2268 ? Sl 23:33 0:07 /usr/local/bin/recpt1 --b25 --strip --sid epg BS09_0 180 /tmp/__temp.ts.bs

BSは5分もあれば番組表が出てくるので、5分ぐらいしたら、ブラウザでアクセスします。地デジの方は、(録画時間:60秒+epgdumpとDB登録の処理時間)×局数分なので、15分も待てば番組表が出ていると思います。
CSは・・・非常に長いですw
<h2>録画時に番組タイトル等にスペースが入っている場合に、ファイル名が切れる問題の対策</h2>
これは、運用していて気付いたのですが、『do-record.sh』の${OUTPUT}がダブルクォートでくくられていないので、録画ファイル名によっては、*.tsとはならずに、中途半端なファイル名で録画されてしまう事がありました。
その対策を行っておきます。

vi /var/www/epgrec/do-record.sh

次のように修正しておきます。

if [ ${MODE} = 0 ]; then
# MODE=0では必ず無加工のTSを吐き出すこと
$RECORDER --b25 --strip --sid epg $CHANNEL $DURATION <span style="color: #ff0000;">"${OUTPUT}"</span> >/dev/null
elif [ ${MODE} = 1 ]; then
# 目的のSIDのみ残す
$RECORDER --b25 --strip --sid $SID $CHANNEL $DURATION <span style="color: #ff0000;">"${OUTPUT}"</span> >/dev/null

以上で、Ubuntu13.10でのpt3+epgrec(STZ版)の設定は完了です。
もしも、上記の記事に不都合等がありましたら、連絡フォームよりお問い合わせ下さい。
『設定てきた!』や『設定方法に詰まった』等のコメントも頂けると幸いです。

タグ付けされた , . ブックマークする へのパーマリンク.

One Response to ubuntu13.10+pt3+STZ版epgrec+nginx+php5-fpmの環境構築

  1. 匿名 曰く:

    一点聞きたいのですが、pt3のドライバインストール時にblacklist登録するエントリはearth_pt1ではなくearth_pt3だったりしませんか?
    当方でlspciするとAlteraのなんちゃら(PT3に搭載しているFPGA)は現れるけれど、pt3_drvも入っているのにls /dev/pt3*でなにも出ないかったので、変更したら動きました。
    ご確認お願いします。

コメントを残す

メールアドレスが公開されることはありません。