同一サーバで複数のepgrecUNAを共存させ、予約情報を分離する方法


同一サーバに録画ソフトを共存させたいケースに出くわしたので、その際のメモ書きをアップしてます。当初はDBのカラム追加とプログラム修正でACL機能を追加して、ユーザー毎に予約情報を管理する事を検討しましたが、本家の修正に追随出来る方が好ましかった為、プログラム修正ではなく、epgrecを2つ、ないしは複数個動かすことで対応する事にしました。今回、この要件に至った理由は下記の通りです。

  • 他のユーザーに予約中の番組を知られたくない(何予約してんだよw
  • 他のユーザーが大量予約して、自分の予約とバッティングしやすいため、重要度の高い予約は別々に実施したい
  • 家族には言えない何かがある
  • 複数台の録画PCを用意すると消費電力が大変なので、1台に集約したい
  • epgrecをアップグレードしたい(本投稿はアップグレードでもあるので)

同一サーバにepgrecを共存させるための仕組み

大したことはやっていません。下記の通り、ただの組み合わせです。同一のrecpt1を複数のepgrecから利用しても良かったのですが、その場合、epgrecとrecpt1間で多くの番組を録画した際に残りチューナー個数の計算で問題が出そうだったので、わざとこのような方式にしました。

  • ウェブサーバはhttp://192.168.2.2/epgrec.1st/、http://192.168.2.2/epgrec.2nd/、・・・としてアクセスする
  • recpt1コンパイル時に使用するインターフェースをわざとずらす
  • recpt1のインストール先変更
  • データベースは個々に専用に作成する

推奨環境

PT3の推奨環境は以前からあまり変更はありませんが、念のため。

対象としているOSと前提環境

既に、epgrecの運用実績があるサーバを対象としています。当Blog内のPT3カテゴリ中にある何れかのPT3のセットアップを一度完遂している事(epgrecUNAのバージョンはその時点の最新版でOKです)が条件です。

上記を完了させている事としている理由は、arib25の導入や、ウェブサーバ、DBサーバの導入について、OS毎に何度も書き直したくなかった為です。なお、本投稿ではepgrecUNAに関する設定のみを取り上げているため、ディストリビューション毎の差異は無いはずなので、下記OSで設定可能だと思います。

  • Ubuntu14.04 LTS(検証したのはUbuntu)
  • CentOS7
  • 上記の派生ディストリビューション

免責事項

自己責任でやってください。

epgrec UNAのダウンロード

何時ものように適当な何かの別館さんから下記の5つのダウンロードさせてもらいます。ダウンロードしたファイルは全て/tmp/pt3_work以下に配置しておきます。

  • epgrecUNA 人柱版 (2014/11/25)
  • epgrecUNA 141125版用 fix1
  • epgrecUNA 141125版用 fix2
  • epgrecUNA用epgdump 141013版
  • recpt1 httpサーバ機能追加パッチ 新本家[c9b1d21c5035]以降対応版
mkdir /tmp/pt3_work
cd /tmp/pt3_work

# 上記で事前ダウンロードしておいたファイル5つをコピーしておくこと。

tar -zxvf epgrecUNA_141125.tar.gz
tar -zxvf epgrecUNA141125fix1.tar.gz
tar -zxvf epgrecUNA141125fix2.tar.gz

cd epgrec
vi config.php

この段階で、config.phpを編集し、視聴するチャンネル等を編集しておく事。主な設定は$GR_CHANNEL_MAP変数にセットされている局のうち、必要のあるものを有効にし、必要の無い物をコメントアウトするだけです。西日本の人や、TOKYO MXを見たい場合には編集必須です。

recpt1のインストール

既存で使っていたrecpt1はデフォルトのままインストールしていれば、/usr/local/bin/recpt1に入っているはずなので、2つ目のrecpt1はインストール先を/opt/recpt1/2ndにします。2つ目、3つ目の設定をしたければ、使用者名でも入れて、prefix=/opt/papa等としてインストールすれば良いと思います。

wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
tar -jxvf tip.tar.bz2
cd pt1-c8688d7d6382/recpt1

# recpt1-bug.diffは上記最新版ではすでに適用済みだった
# その為、パッチ適用しない。
# patch < ../../recpt1-bug.diff
patch < ../../recpt1-http.diff

cd ../
cp -R recpt1 recpt1_1st
cp -R recpt1 recpt1_2nd

当方の環境だと、PT2ばかりが刺さっていたサーバに対して、PT3を指したので、pt1をpt3に置換するだけで済みましたが、PT3を既に利用していた場合には、pt3video<数字>の<数字>の箇所を1つ目のepgrecが使うrecpt1とずらす必要がある為、epgrec毎にrecpt1をコンパイルします。

下記の手順では、PT3が2枚刺さっているとして、1枚目用、2枚目用のrecpt1を作成します。

1台目のpt1用

cd recpt1_1st
vi pt1_dev.h

pt1_dev.hの中身を下記のように修正する

char *bsdev[NUM_BSDEV] = {
    "/dev/pt3video1",
    "/dev/pt3video0",
};
char *isdb_t_dev[NUM_ISDB_T_DEV] = {
    "/dev/pt3video2",
    "/dev/pt3video3",
};

次に、1台目のrecpt1.hを修正して、チューナー台数を変更する。

vi recpt1.h

recpt1.hで、配列のサイズを修正する

#define NUM_BSDEV       2
#define NUM_ISDB_T_DEV  2

修正が終わったらインストール

./autogen.sh
sudo mkdir -p /opt/recpt1/1st/{bin,lib}
./configure --prefix=/opt/recpt1/1st --enable-b25 && make && sudo make install

2台目のpt3用

cd ../recpt1_2nd
vi pt1_dev.h

pt1_dev.hの中身を下記のように修正する

char *bsdev[NUM_BSDEV] = {
    "/dev/pt3video5",
    "/dev/pt3video4"
};
char *isdb_t_dev[NUM_ISDB_T_DEV] = {
    "/dev/pt3video6",
    "/dev/pt3video7"
};

次に、1台目のrecpt1.hを修正して、チューナー台数を変更する。

vi recpt1.h

recpt1.hで、配列のサイズを修正する

#define NUM_BSDEV       2
#define NUM_ISDB_T_DEV  2

修正が終わったらインストール

./autogen.sh
sudo mkdir -p /opt/recpt1/2nd/{bin,lib}
./configure --prefix=/opt/recpt1/2nd --enable-b25 && make && sudo make install

epgdumpのインストール

epgdumpはepgrecUNA専用にカスタマイズさせている為、他からダウンロードしたものを利用すると、TSからXMLを抜き出した際にファイルフォーマットが異なり、動かない為、epgrecUNA用のepgdumpを利用します。epgdumpは1台目、2台目のPT3と区別なく利用可能なので、インストール先の変更はしません。

cd /tmp/pt3_work
tar -zxvf epgdumpUNA141013.tar.gz
cd epgdump

# 念の為、昔のepgdumpをバックアップしておく
sudo cp /usr/local/bin/epgdump /usr/local/bin/epgdump.bak
make && sudo make install

データベースを用意する

2つ目のepgrec用に専用のDBを用意します。この情報は、epgrecの設定をウェブ画面から行う際に利用する為、ユーザー名、パスワードを覚えておいてください。下記の場合には、ユーザー名はepgrec_2nd、パスワードはyourpasswordです。

# 1台目のPT3用(パスワードは適宜変更してください)
mysql -uroot -p
create database epgrec_1st;
grant all on epgrec_1st.* to epgrec_1st@localhost identified by 'yourpassword';
flush privileges;

# 2台目のPT3用(パスワードは適宜変更してください)
mysql -uroot -p
create database epgrec_2nd;
grant all on epgrec_2nd.* to epgrec_2nd@localhost identified by 'yourpassword';
flush privileges;

epgrecのプログラムをコピーし、epgrecの設定を行う

cd /tmp/pt3_work
sudo cp -R epgrec /var/www/epgrec.1st
sudo cp -R epgrec /var/www/epgrec.2nd

chown -R www-data:www-data /var/www/epgrec.1st
chown -R www-data:www-data /var/www/epgrec.2nd

 

取りあえずは、下記の両方に対して、ウェブページから設定を行います。epgrec_2ndと図中にある箇所は、必要に応じて読み替えてください特に、図中の赤枠個所内では、複数のepgrecUNAを共存させるために、最後に番号を付けて、他のepgrecUNAと競合しないようにしている個所もあるので、注意して設定してください。

  • http://epgrecをインストールしたIPアドレス/epgrec.1st
  • http://epgrecをインストールしたIPアドレス/epgrec.2nd

epgrec_una10

次に、DBの設定を行います。

epgrec_una11

チューナーの設定を粉います。CSの録画有無は環境によっては、お好みで設定してください。録画ファイル名に関しては、『%YEAR%%MONTH%%DAY%_%HOUR%%MIN%_%CH%_%TITLE%』として設定しています。

epgrec_una13

最後に、EPGの受信を促されますが、最初はコマンドラインから番組表の更新をする為、下記の画面では何もしません。

epgrec_una16

epgrecの設定ファイルを書き換える

# 1台目のPT3を利用するepgrec用
cd /var/www/epgrec.1st
sudo mv do-record.sh.sample do-record.sh
sudo sed -i "s/\/usr\/local\/bin\/recpt1/\/opt\/recpt1\/1st\/bin\/recpt1/g" ./config.php
sudo sed -i "s/\/usr\/local\/bin\/recpt1/\/opt\/recpt1\/1st\/bin\/recpt1/g" ./do-record.sh

# 2台目のPT3を利用するepgrec用
cd /var/www/epgrec.2nd
sudo mv do-record.sh.sample do-record.sh
sudo sed -i "s/\/usr\/local\/bin\/recpt1/\/opt\/recpt1\/2nd\/bin\/recpt1/g" ./config.php
sudo sed -i "s/\/usr\/local\/bin\/recpt1/\/opt\/recpt1\/2nd\/bin\/recpt1/g" ./do-record.sh

cronによる番組表の定期アップデート設定

番組表の更新の為には、一時的に数分の番組を/tmp領域などに録画して、そのデータをもとにepgdumpでXMLを出力し、DB更新を行っています。ですので、複数のepgrecが同時に番組表の更新を行ってしまうと、HDD容量を圧迫する事になります。特に、Linux自体をUSBにインストールして、/tmpはtmpfsによるオンメモリの記憶領域になっている人(該当する投稿)は注意してください。一般的なHDD上に大量の/tmp領域を切ってある場合には、性能劣化以外は特に気にしなくても良いと思います。

# cronで実行されるphpのパスを修正する
# 各々のファイルはcronによる実行タイミングが全く同じなので、
# 実行時間を変更した方が良いかもしれません。
# 方方位のcron.d/shepherdの中身を参照して、
# 29 */2 * * *   www-data /var/www/epgrec.1st/shepherd.php
# を下記のように修正したり。
# 59 */2 * * *   www-data /var/www/epgrec.1st/shepherd.php
sudo sed -i "s/\/var\/www\/epgrec/\/var\/www\/epgrec.1st/g" /var/www/epgrec.1st/cron.d/shepherd
sudo sed -i "s/\/var\/www\/epgrec/\/var\/www\/epgrec.2nd/g" /var/www/epgrec.2nd/cron.d/shepherd

# cronへ登録する
sudo cp /var/www/epgrec.1st/cron.d/shepherd /etc/cron.d/shepherd.1st
sudo cp /var/www/epgrec.2nd/cron.d/shepherd /etc/cron.d/shepherd.2nd

epgrecをアップグレードした場合の後始末

本投稿では、既にepgrecを運用中である前提でセットアップを行っていました。当方の環境には、ここまでセットアップを進めた時点で、下記のepgrec環境3つが同一サーバに混在している事になっています。

  • http://epgrecのIPアドレス/epgrec
  • http://epgrecのIPアドレス/epgrec.1st
  • http://epgrecのIPアドレス/epgrec.2nd

セットアップ後、番組表の更新が上手くいき、予約録画等が正常に終了したら、自動キーワード予約の設定を新しいepgrecに移した後(昔の設定を眺めながら一つずつ手作業で予約する)、一番上のhttp://epgrecのIPアドレス/epgrecは削除したいと考えます。

普通に、考えると、/var/www/epgrec以下を全部削除すれば良いと考えると思いますが、それでは検討不足です。以前運用していた古いepgrecをアンインストールする為に必要な手順は下記の通りです。

  1. ウェブ画面上から自動キーワード予約を全部削除する
  2. ウェブ画面上から、手動予約していた予約を全部削除する
  3. 録画予約一覧に一つも予約が残っていない事を確認し、もしも残っていれば削除する
  4. cronに登録していた番組情報更新用のファイルを削除する(/etc/cron.d以下にある。インストール時期によってgetepgや、shepherd等のファイル名で存在するはず
  5. (これは、難易度が少し高いので、対応しなくても良いです。新しい方のepgrecで予約していると、何時までもatのJOBが見えてしまうので、その辺を解説するのも大変なので。。。)rootユーザーでatqコマンドを実行して、atによる予約情報が無ければOK。

※昔のepgrec用のDBと、/var/www/epgrecディレクトリに関しては、万が一の為にバックアップとして残しておきます。1週間程度運用して、新しい方が安定していると感じたら削除しても残しても、どちらでも良いです。

最後に

本投稿では、かなりイレギュラーな録画サーバを構築しました。おそらくはepgrec UNAの開発者さんもこのような使い方は想定していないと思われます。

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

コメントを残す

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