2009年05月19日

foltia録画システムのセットアップ

テレビの録画を管理するのにfoltiaを使っている。夏場は特に放送時間が突然に前後するので、自動的に開始時刻を修正してくれるのはありがたい。 ここでは、HTML版のインストールガイドに書かれていない微妙なところを説明する。

SELinuxの誤爆

postgreSQLを設定する際に設定を間違えてしまった場合、乱暴なやり方だがデータディレクトリ/var/lib/pgsql/dataを消去すれば、真っ白な状態からやりなおすことができる。このときSELinuxをEnforceモードにしておくと、postgreサービスが立ち上がらなくなることがある。postgresql.confにアクセスできないと言われたらSELinuxが誤爆してる可能性が高い。一度Permissiveモードに変更して様子を見よう

文字コード

foltiaは扱う文字コードをEUC-JPに固定している。データベースもWebサービスもスクリプトも全部EUCである。CentOSを使う私としてはUTF-8で統一されたほうが便利なので、書き換えを試みた。
まず、スクリプトをUTF-8に書き換える。書き換えはnkfを使えば簡単だ。

$ nkf -Ew eucfile.txt > utf8file.txt

データベースもUTF-8化する。データベースをinitdbコマンドで初期化する際に文字コードをUTF-8に指定する。(CentOS/Fedoraなら何も指定しない場合はUTF-8になる)
データベースに書き込みを行うスクリプトperl/getxml2db.plは内部で文字コードの変換を行っている。Jcode::convert($str, 'euc')をJcode::convert($str, 'utf8')に置き換える。

PHPスクリプトもUTF-8化する。といってもmetaタグのlanguage指定をEUC-JPからUTF-8に変更するだけであるが。

apache/phpのコンパイル

外向きのWebサーバを運用しているのでfoltiaのWebサービスを設置できない・・・という場合は、foltia用にサーバを作ってしまえばいい。
apache(httpd)のビルド・インストール
例えば、/home/foltia/foltia_httpdにインストールする場合

[foltia]$ tar -zxvf httpd-2.2.11.tar.gz
[foltia]$ cd httpd-2.2.11
[foltia]$ ./configure --prefix=/home/foltia/foltia_httpd
[foltia]$ make && make install
phpのビルド・インストール
例えば、/home/foltia/foltia_phpにインストールする場合
[foltia]$ tar -zxvf php-5.2.9.tar.gz
[foltia]$ cd php-5.2.9
[foltia]$ ./configure --prefix=/home/foltia/foltia_php \
--with-apxs2=/home/foltia/foltia_httpd/bin/apxs \
--with-pgsql=/usr/bin
[foltia]$ make && make install
[foltia]$ vi /home/foltia/foltia_httpd/conf/httpd.conf

Ifmoduleセクション内に
AddType application/x-httpd-php .php .phtmlを追加
apacheの(正確には設定ツールの)置き場所とpgsqlのインストール場所を指定する必要がある。foltiaはphpファイルばかりで構成されている。必要に応じてDirectoryIndex index.php index.htmlも書き加えておくとよいかもしれない。

apacheの起動は/home/foltia/foltia_httpd/bin/apachectl startで行う。起動時に必ず起動するように/etc/init.dか/etc/rc.localに設定を作るのもよいだろう

トラブル

  • なぜかわからないが、一件も録画予約をしていない時に放映予定のページの表示がエラーメッセージだらけになる。in_arrayのメソッドに不正な値が入っているという。確かphpの配列を扱うメソッドが空の要素を認めないことが原因で出るメッセージ。アップデート前とapache/phpのバージョンは同じなのでpostgresqlの仕様変更のせい?
  • getxml2db.plを実行する際にDBD::Pg::db do failed: ERROR: invalid input syntax for integer: ""と表示される場合がある。これはpostgresqlの仕様変更によるものらしい。空文字とNULL要素を厳密に分けるようになったのだそうな。ちなみにこのエラーはDLしてきた番組表にfoltiaが知らないTVチャンネルが入っていた場合に起こる。局名→局ID(内部的なもの)の変換がうまくいかないため、SQL文に空文字が混じってしまう。

posted by yuji_at_radiance at 23:22| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。