«前の日記(2011-07-18) 最新 次の日記(2011-07-22)» 編集

ぱぱネット(仮)


2011-07-20 ワンセグ野郎Linuxその2 [長年日記]

_ [雑記] 安定性への道のり

24時間録画する機械であれば、そこそこ安定していてほしいと思うのが人情。 「安定している」という機器の条件を挙げると以下のようなものでは。

  1. リセットまたは次回電源ON時に復帰する
  2. 未受信状態になっても復帰する
  3. バグ等で不意に停止してしまっても自動的に復帰する
  4. 電波状況が断続的に悪化しても続きから記録される

「こんなのあたりまえだろう」 って思うよね?みんな。 しかしネットの下馬評を見る限り、ARecX6もガラポンも1.以外は未だに 達成できていないように思えます。一応売り物であるにも関わらず。

要するに監視を強化すればよいのです。死んだチャンネルを見つけてリセット、 ファイルの状態を監視してリセット、プロセスが死んだら再起動する、 この程度で良いはず。

cronで監視用バッチを動かしたりするのがUNIX流なのですが、 ここはさらに1歩進めてDJB daemontoolsを使ってみました(Windowsの仮想CDソフトのことではない、念のため)。

_ [Linux][ワンセグ野郎] daemontoolsのインストール

Debian GNU/Linuxの場合はapt-getコマンドでインストール可能です。

# apt-get install daemontools

但し、ソースからコンパイルした場合と異なり、サービスディレクトリは/etc/serviceに なりますので注意。詳しい使い方は daemontools howtoを参照してもらえればと思います。

_ [Linux][ワンセグ野郎] ファイルの配置

実際に録画機を作るつもりでファイル配置を考えます。

基本的にdaemontoolsは、

 /etc
  /service
   /hogeserver (※自分で決めたサービス名)
    /run (※メインシェルスクリプト)
    /log
     /run(※ログ用シェルスクリプト)

という縛りで2つシェルスクリプトを置いておくと、superviseという常駐プロセスが 何がなんでもrunを実行し続ける ものです(やや語弊あり)。cronというよりinitdとinittabに近いか。 しかし、/etc/serviceに直接ディレクトリを掘ると管理が難しいので、全体的には/mnt以下に hogeserverのようなサービスに相当するディレクトリを掘って、そこから/etc/serviceにシンボリックリンクを張るようにします。

また、シェルスクリプトが動作するためには様々なパスや環境変数の設定が必要ですが、 daemontoolsにごちゃごちゃした設定ファイルはない(DJBの流儀ですね)ので、 自前で環境変数等を設定する必要があります。なので、 /mnt/conf.shを用意しておきます(のちに説明する変数類も入っていますがとりえあずこれで)。 daemontoolsのrunスクリプトなどは冒頭でconf.shをロードすることにしておけば、 いろいろ捗るというわけ。

作業用ディレクトリも掘っておきましょう。

# mkdir -p /mnt/dictv (Webサーバで露出させたくないスクリプト用)
# mkdir -p /mnt/spool/session (セッション保存用)
# mkdir -p /mnt/log (daemontoolsのログ)
# mkdir -p /mnt/admin (Webサーバで露出させたくない管理ファイル用)
# mkdir -p /mnt/ts (録画TSを記録するディレクトリ)
# mkdir -p /mnt/windex (データベース用)
# mkdir -p /mnt/oneseg24 (Webトップページ)

前置きが長いねこりゃ。すみません全然終わりそうにないです。

今日はチューナーサービスを開発するので/mnt/tunerというディレクトリを掘っておきましょう。

# mkdir -p /mnt/tuner

_ [Linux][ワンセグ野郎] 「監視」について考える

拙作LOG-J200ドライバではDVB toolsのdvbstremをそのまま使います。チューナー番号を環境変数num, 設定周波数を環境変数FREQにはいっていると仮定したコマンドは、こんな感じ。

dvbstream -c $num -f $FREQ 8192 -o | (標準出力のパイプ)

電波状況が悪くなった場合dvbstreamは終了する。 UNIXではパイプの前段のプロセスが終わると(シェルが)後段のプロセスを回収してくれるので、全体も終了することになる。これで課題2.はOK。スクリプト全体は /mnt/tuner/dvbstream.shとして保存しておきます。

しかし....ここで後段にくるのは 先日更新したdumpeitなのですね...... 例えばチューナー検波はずっとまともでTSストリームも出てくるが、 なにかの拍子にdumpeitのバグでTSファイルが作られない ことは容易に想像つくわけです。3.を満たすためにスクリプトで工夫することにします。

ここは単純に、「受信できていれば、現在時刻の/mnt/ts/YYMMDD/YYMMDDhh_ChXX.tsというファイルが作られるはずだ!」という仮定に従って、これをシェルスクリプト /mnt/tuner/runに記述します。ポイントはこの部分、

       if [ -f $DVBPID ] ; then ※プロセスいきてる?
           if [ -f $TSFILE ] ; then ※TSファイルがある?
             echo "FOUND: I: " $i " CH:" $ch " TS:" $TSFILE
           else
             echo "FREEZE?: I: " $i " CH:" $ch " TS:" $TSFILE
             kill -TERM `cat $DVBPID`
             sleep 15
             /mnt/tuner/dvbstream.sh $i $ch &
           fi
       else
           echo "DEAD?: I: " $i " CH:" $ch " TS:" $TSFILE
           /mnt/tuner/dvbstream.sh $i $ch &
       fi

以上。しかしこれには盲点があって、「PCのシステム時計が常に正しい」ことを想定しているので色々アレかもしれません(^^;

_ [Linux][ワンセグ野郎] チャンネル設定

チャンネル設定にデータベースなど使いたくない、CGIで適当に書いたファイルを参照してほしい、という理由で/mnt/tuner/chというディレクトリに「26」みたいなファイルを置いておくだけの仕様にします。

# mkdir -p /mnt/tuner/ch
# touch /mnt/tuner/ch/26
# touch /mnt/tuner/ch/27
# chown -R www-data.www-data /mnt/tuner/ch

以上で。しかし...まだ全体の1/20くらいだぞ。これ終わるのか?

_ [雑記] そういや「4.電波状況が断続的に悪化しても続きから記録される」はどうした?

ワンセグ野郎の場合、idxファイルと言う絶対時刻(TOT)とファイルオフセットからなるシークインデックスがあるため、TSファイルがどう壊れようが少なくともシークだけはできます。つまり4.は自動的に達成できる。モバイルハッカーズさんの設計の勝利ですな。

ガラポンとかMP4を内部で作るらしいから、ちょっと失敗するとガラガラポンと壊れるらしいですな。まあいずれ直るでしょうが....


2001|04|
2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|03|04|05|10|

[BANNER]
このサーバーをもう12年も維持しているかと思うとめまいがしますよ。
ツッコミ機能は、ハンドル名が完全日本語じゃないと登録できません。
また、本文にURLが含まれていても登録できません。
いずれもSPAM対策です。
[Panda Papanda]
2011年
7月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

[Papanda]  [Kuma]  [Tomorin]  [Iron]  [Eiza]  [Dokkin]  [Honya]  [Zyou]  [Tsuyo]  [Bike]  [KoeBBS]  [Chukei]  [portal]  [tvmatome]  [KaoPaku] 

訪問者数:(+2560143)