mimikakimemo

自分用メモ。

Ubuntu 11.10 へ録画予約システム epgrec を導入

KTV-FSUSB2 と recfsusb2n の導入により地デジの録画ができるようになったが、これだけでは実用性に乏しい。そこで、録画予約システムである epgrec を導入する。

LAMP環境の構築

LAMP環境が必要なので、構築する。

$ sudo apt-get install apache2 php5 libapache2-mod-php5 php5-cli mysql-server php5-mysql

Apache を再起動。

$ sudo /etc/init.d/apache2 restart

/etc/mysql/my.cnf を編集して MySQL文字コードUTF-8 にする。

[mysqld]
default-character-set = utf8  # 追加

[mysql]
default-character-set = utf8  # 追加

MySQL で epgrec 用DBを作り、ユーザー epgrec(ユーザー名は何でもよい)が使えるようにする。

$ mysql -u root -p
Enter password:
mysql> create database epgrec;
mysql> grant all privileges on *.* to epgrec@localhost identified by 'ユーザー epgrec のパスワード';
mysql> exit

インストール前の準備

epgdumpr2 のインストール

まず epgdump が必要らしいので、これをインストールする。これでTSファイルから番組表を抽出するらしい。ソースはDTV関係ツールのアップローダで配布されているが、見たところパッチがいろいろあっていまいちよくわからない。幸いにして、foltiaリポジトリにパッチ適用済みのソースがまとめられているようなので、これを使うことにした。

foltia の trunk の中にある epgdumpr2 を利用する。これを make すると、

$ make
gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c epgdump.c
gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c aribstr.c
gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c eit.c
eit.c: 関数 ‘conv_title_subtitle’ 内:
eit.c:295:31: エラー: 配列の添字が配列の境界を上回っています [-Werror=array-bounds]
cc1: すべての警告はエラーとして取り扱われます

make: *** [eit.o] エラー 1

とエラーが出て止まってしまうので、ここを参考に eit.c を修正。

--- eit.c_orig  2009-11-18 12:23:01.000000000 +0900
+++ eit.c       2011-08-27 15:50:35.000000000 +0900
@@ -292,13 +292,15 @@
        char    *ptr2 ;
        char    *newsubtitle ;
 
-       for(lp = 0 ; subtitle_cnv_str[lp] != NULL ; lp++){
+       while( subtitle_cnv_str[lp] != NULL ){
                ptr = strstr(eitptr->title, subtitle_cnv_str[lp]);
                if(ptr == NULL){
+                       lp++;
                        continue ;
                }
                // タイトルがなくならないように
                if(ptr == eitptr->title){
+                       lp++;
                        continue ;
                }
                ptr2 = ptr ;

これだけだともう一つエラーが出るので、

$ make
gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c eit.c
gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c ts.c
gcc -std=c99 -O2 -Wall -g -Werror -Wno-return-type -c util.c
util.c: 関数 ‘parseOTHERdesc’ 内:
util.c:78:6: エラー: 変数 ‘descriptor_tag’ が設定されましたが使用されていません [-Werror=unused-but-set-variable]
cc1: すべての警告はエラーとして取り扱われます

make: *** [util.o] エラー 1
--- util.c_orig	2009-11-18 12:23:01.000000000 +0900
+++ util.c	2011-08-28 17:06:52.000000000 +0900
@@ -75,10 +75,10 @@
 
 int parseOTHERdesc(unsigned char *data) {
 	int boff = 0;
-	int descriptor_tag;
+	//int descriptor_tag;
 	int descriptor_length;
 
-	descriptor_tag = getBit(data, &boff, 8);
+	(void)getBit(data, &boff, 8);
 	descriptor_length = getBit(data, &boff, 8);
 
 	/* printf("other desc_tag:0x%x\n", descriptor_tag); */

util.c も修正する。これで改めて make するとうまくいく。できた epgdump を /usr/local/bin にコピー。

$ sudo cp epgdump /usr/local/bin

at の確認と設定

Ubuntu 11.10 desktop 版にはデフォルトで at がインストールされていた。/etc/at.deny を開き、www-data を削除。

/etc/passwd の確認

Ubuntu 11.10 desktop 版ではそのままでOK。

epgrec のインストールと設定

インストール

下のページから最新のアーカイブをダウンロードする。現在、epgrec_20111001.tar.gz が最新。

ダウンロードしたアーカイブを httpd のドキュメントルートに展開。

$ sudo tar xvzpf epgrec_20111001.tar.gz -C /var/www/

config.php.sample を config.php にリネームして編集。

$ sudo mv /var/www/epgrec/config.php.sample /var/www/epgrec/config.php
$ sudo gedit /var/www/epgrec/config.php

16行目の MX TV のコメントアウトを外し、19行目のテレ玉をコメントアウト。

チューナーは KTV-FSUSB2 を利用するので、do-record.sh は以下のようにした。

#!/bin/sh
echo "CHANNEL : $CHANNEL"
echo "DURATION: $DURATION"
echo "OUTPUT  : $OUTPUT"
echo "TUNER : $TUNER"
echo "TYPE : $TYPE"
echo "MODE : $MODE"

RECORDER=/usr/local/bin/recfsusb2n
#B25=/usr/local/bin/b25_bcas

$RECORDER --b25 $CHANNEL $DURATION ${OUTPUT} >/dev/null

最後に、

$ OUTPUT=test.ts CHANNEL=27 DURATION=30 TUNER=0 MODE=0 TYPE=GR /var/www/epgrec/do-record.sh

などとしてカレントディレクトリにちゃんと録画されるかテスト。

初期設定

ブラウザで http://localhost/epgrec/ にアクセスすると初期設定画面が出るので指示に従う。最初のパーミッションのチェックで /var/www/epgrec/ 内の templates_c, video, thumbs, settings, cache を777にしろと言われた。

次のページの MySQL 接続ユーザー名・MySQL 接続パスワード・使用データベース名は MySQL で設定した値を入れる。その他はとりあえずデフォルトにした。そのまた次のページもそのまま。

「初期設定が完了しました…」と出るので、「このリンクをクリックするとEPGの初回受信が始まります」をクリックして初回受信をする。20~50分程度かかるらしい。

これで http://localhost/epgrec/ にアクセスすると番組表が表示されるはずだが、このときはなぜだか番組表が空になっていた。ログ(左上の 環境設定 > 動作ログを見る)を見てみると、

getepg:: 正常な/tmp/__temp.xml_gr26が作成されなかった模様(放送間帯でないなら問題ありません)

のような警告がチャンネルの数だけ表示されている。原因はよくわからなかったが、手動で

$ /var/www/epgrec/getepg.php

として再生成したらちゃんと表示された。最後に、

$ sudo cp /var/www/epgrec/cron.d/getepg /etc/cron.d/

として番組表の更新を cron に登録。デフォルトでは2時間おきになっている。

録画

これであとは予約すれば録画してくれる……と思ったら、録画に失敗していた。/var/www/epgrec/ が root のものになっていたのがいけなかったようだ。というわけで、

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

で www-data に変更。……でもダメで、recfsusb2n を動かす video グループにユーザー www-data を追加していないのが原因だった。

$ sudo gpasswd -a www-data video