MythTVがActive EIT Scanで非契約チャンネルに切り替えると、エラーと認識して動作しなくなってしまう。MythTVに無料番組だけ見るチャンネルを登録していると厄介だ。

syslog

Bad ret code[0x8902] in a ECM response.
Card I/O failed too many times.

FUSE_b25はエラーカウントが一定数(5)溜まると動作しなくなる仕様になっている。ECMのリターンコードがエラーでもエラーカウントを上げてしまう。そこで、ECMが非契約のリターンコードを返してもエラーカウントを上げないようにする。

非契約のリターンコード(地上デジタルテレビジョン放送運用規定(TR-B14) 第3分冊より

非契約 (Kwなし) A103
非契約 (契約外) 8901,8501,8301
非契約 (期限切れ) 8902,8502,8302
非契約 (視聴制限) 8903,8503,8303

bcas.cを変更して、非契約でもエラーカウントを上げないようにする。すべてのリターンコードをエラーに勘定しない場合は409行目を"goto through;"にして、399~406行を削除すればいい。

$ vi fuse_b25-0.4.8/src/bcas.c
   394    retcode = rbuf[4] << 8 | rbuf[5];
   395    if (retcode != CARD_RETCODE_GD_TIER &&
   396        retcode != CARD_RETCODE_GD_PREPPV &&
   397        retcode != CARD_RETCODE_GD_POSTPPV &&
   398        retcode != CARD_RETCODE_PV_PREPPV && retcode != CARD_RETCODE_PV_POSTPPV) {
   399      if (retcode == 0xa103 ||
   400          (retcode >= 0x8901 &&  retcode <= 0x8903) ||
   401          (retcode >= 0x8501 &&  retcode <= 0x8503) ||
   402          (retcode >= 0x8301 &&  retcode <= 0x8303)) {
   403        syslog (LOG_NOTICE,
   404            "Ret code[0x%04x] in a ECM response.\n", retcode);
   405        goto through;
   406      }
   407      syslog (LOG_NOTICE,
   408          "Bad ret code[0x%04x] in a ECM response.\n", retcode);
   409      goto failed;
   410    }

   441
   442  through:
   443    pthread_mutex_lock (&card->lock);
   444    kinfo->status = CMD_S_FAILED;
   445    pthread_mutex_unlock (&card->lock);
   446    return;
   447  }

パッチ

*** bcas.c.orig 2011-05-19 01:22:28.000000000 +0900
--- bcas.c      2012-08-04 17:21:55.558189838 +0900
***************
*** 396,401 ****
--- 396,409 ----
        retcode != CARD_RETCODE_GD_PREPPV &&
        retcode != CARD_RETCODE_GD_POSTPPV &&
        retcode != CARD_RETCODE_PV_PREPPV && retcode != CARD_RETCODE_PV_POSTPPV) {
+     if (retcode == 0xa103 ||
+         (retcode >= 0x8901 &&  retcode <= 0x8903) ||
+         (retcode >= 0x8501 &&  retcode <= 0x8503) ||
+         (retcode >= 0x8301 &&  retcode <= 0x8303)) {
+       syslog (LOG_NOTICE,
+           "Ret code[0x%04x] in a ECM response.\n", retcode);
+       goto through;
+     }
      syslog (LOG_NOTICE,
          "Bad ret code[0x%04x] in a ECM response.\n", retcode);
      goto failed;
***************
*** 430,435 ****
--- 438,449 ----
    }
    pthread_mutex_unlock (&card->lock);
    return;
+
+ through:
+   pthread_mutex_lock (&card->lock);
+   kinfo->status = CMD_S_FAILED;
+   pthread_mutex_unlock (&card->lock);
+   return;
  }

ダウンロード

パッチの当て方

$ patch fuse_b25-0.4.8/src/bcas.c < bcas_mythtv-patch/bcas_uncontracted.patch

ビルド・インストール

$ cd fuse_b25-0.4.8/
$ ./configure
$ make
$ sudo make install

8月 4th, 2012

Posted In: ソフトウェア

タグ: , , , , , ,

Leave a Comment

ウェブサーバーを作り直したのでメモ。

パッケージのインストール

$sudo aptitude install apache2 libapache2-mod-php5 mysql-server php5-mysql

mysqlのrootパスワードが聞かれるので入力。

Apacheの設定

セキュリティの設定とPHPの有効化の設定。

コメントをはずして、デフォルトで全てのディレクトリにローカル以外からアクセスを禁止しておく。

$sudo vi /etc/apache2/conf.d/security

 8 <Directory />
 9	AllowOverride None
10	Order Deny,Allow
11	Deny from all
12	Allow from 192.168.0.0/24 #LANのネットワーク
13 </Directory>

余計な情報をヘッダーに出力させない。

29 ServerTokens Prod

ServerSignatureをOff

40 ServerSignature Off
41 #ServerSignature On

ユーザーディレクトリでPHPが無効になっているので有効にする。

$sudo vi /etc/apache2/mods-available/php5.conf

 8 # To re-enable php in user directories comment the following lines
 9 # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
10 # prevents .htaccess files from disabling it.
11 #<IfModule mod_userdir.c>
12 #	<Directory /home/*/public_html>
13 #		php_admin_value engine Off
14 #	</Directory>
15 #</IfModule>

Onにはするな、と書いてあるようなので素直にコメントアウト。コンテンツをuserdirで動かしていたのでPHPが全部動かなくなった。これに気付かず今回サーバーを作り直した。

必要なモジュールの有効化

$sudo a2enmod <モジュール名>

無効化

$sudo a2dismod <モジュール名>

Apacheの再起動

$sudo /etc/init.d/apache2 restart (さらに…)

2月 18th, 2011

Posted In: ソフトウェア

タグ: , , , , , , ,

Leave a Comment

PHPScriptでどうやって投稿されたか判断させようか迷ってた。簡単なことだった。判断用にフォーム変数を用意するだけ。これで解決できる。

<input type="hidden" name="submit" value="true" />

うは、クイック投稿機能とかWordpress気が利いてる。

追記:
こんなことわざわざするより送信するとき必ずある送信ボタンを使えばいい。

<input type=”submit” name=”submit” value=”送信” />

何か入ってる時点でPHP的にはtrueになる。送信されるボタンはsubmitだけだった。

1月 10th, 2009

Posted In: プログラミング

タグ: , ,

Leave a Comment