BS1/BSプレミアム

NHK-BSがBS1/BS2/BS-hiからBS1/BSプレミアムに変更になりました。
BS-hiからBSプレミアムに変わった関係で、録画したtsを再生すると別番組が表示されることがあります。
これの対処ですが、過去の日記に書いた
id:tirol_choko:20100610
で対処可能です。対象の番組idを

にして、tsspliter_liteで録画後に不要データを削除することによって、後でtsファイルを見る際に目的の番組を見る事ができます。

LVM - iSCSIターゲットの設計

今回は以下整理を行ってシステムの設計ポリシーをまとめてみました。

対象データ データの重要性 データサイズ 失った場合の影響 リスク対策 共有の必要性
OS 重大 OSが起動しない ミラー構成/バックアップ なし
録画データ編集 編集データのロスト 再編集 あり

この情報を元に、LVMを利用してディスクの切り出しを行います。今回は物理4ディスクに空きがあったのでスライスを行い、PVを4個用意しました。ここから、OS用のディスクと録画データ編集用のディスクを切り出します。また、共有の必要性からIPによるACLの定義を考えます。今回はiSCSIのターゲットのソフトウェアはCentOSで標準で使えるtgtdを利用しました。

上記設計を元に作業を行います。

録画したtsファイルを編集するマシンを用意

PT2で録画したファイルがかなり溜まっています。そのため、マルチメディアコンテンツを扱いやすいWindows環境で録画データを編集することにします。また、編集した動画をエンコードする環境も用意します。エンコーディングを行っている最中でも録画データの編集が行えるように2ノードを用意します。
編集前のtsファイルは録画サーバからsambaを経由してsmbでファイル読み込みしますが、編集用のマシンとエンコーディングマシンとの間のデータのやり取りをどうするか考える必要があります。
今回は、上記のiSCSI bootを行うことを考えて録画データをiSCSIのディスクを経由してやりとりすることを考えます。ちょっとこのblogネタを書く前にWebを巡回したのですが、iSCSIに対して勘違いしている方がぽろぽろっといたので補足しておきます。

  • iSCSIはあくまでネットワーク経由でSCSIのディスクを接続するプロトコルです。
  • マシンAとマシンBで同時にSCSIディスクに接続できますが、共有ファイルシステムでない限り、書き込みファイルの内容は保証されません。一般的なファイルシステムには、ファイルキャッシュという機構があるためOS上でのディスクの書き込み=ディスクへの反映とはなりません。
  • 残念ながら、NTFSは共有ファイルシステムではありません。そのような利用用途はファイルロックを担保しているSMB(CIFS)やNFSなどのNASを利用ください。
  • SCSIには排他制御を行う機構があるのですが、Windows7君(多分XPなども)は「共有ディスクが使われている」と思っていなので排他制御を行いません。よってマシンAからもマシンBからも接続が可能になります。

Intel Gigabit CT Desktop Adapter iSCSI boot対応

Intelの廉価版NICに EXPI9301CT というのがあります。

インテル Gigabit CT Desktop Adapter EXPI9301CT

インテル Gigabit CT Desktop Adapter EXPI9301CT

実売4K円を切るこのNICが実はiSCSI bootをサポートしてます。
iSCSIというのは、ネットワーク経由でSCSIプロトコルで通信をする規格でして、Ethernet経由でiSCSIのディスク(ターゲットと呼ばれる)にアクセスすることができます。ですのでiSCSIからbootすることができれば、PCから記録メディアを排除し、ネットワークに接続したストレージサーバに集約することができます。

NHK BS1/2の視聴

セットアップした録画環境でしばらく運用していたのですが、いくつか問題が出ました。その際の対応作業についてのメモを記載します。

NHK BS1/2の再生がおかしい

何も考えずに 録画した NHK BS1/2 を再生しても本来録画した番組が見れません。google先生にお伺いしたところ、BS1とBS2はデータ混在の状態で録画されちゃうのでts分割をしないといけないらしいのです。さらに調べたところ、tsファイルから必要なチャンネルの情報を分割する、「tsspliter_lite」というソフトウェアを作成した方がいらっしゃいました。
http://hp.vector.co.jp/authors/VA038175/
これをmakeし、出来上がった tsspliter_liteバイナリを /usr/local/bin にコピーしておきます。

do-recode.sh のカスタマイズ

上記処理はNHK BS1NHK BS2のみに必要なので、分割も録画後に自動的二行うように以下のようにdo-recode.shをカスタマイズしました。

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

TMPDIR=/var/videoTemp*1
NOW=`/bin/date '+%Y%m%d%H%M%S'`
TMPFILE=${TMPDIR}/${NOW}_${TYPE}_${CHANNEL}.ts

RECORDER=/usr/local/bin/recpt1
TSSPLTITER=/usr/local/bin/tssplitter_lite
NICE=/bin/nice
IONICE=/usr/bin/ionice

case $CHANNEL in
101|102)
	$RECORDER --b25 --strip $CHANNEL $DURATION ${TMPFILE} >/dev/null
	$NICE $IONICE -n 5 $TSSPLTITER ${TMPFILE} ${OUTPUT} ${CHANNEL} >/dev/null
break
	;;
	*) 
	$RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} >/dev/null
	;;
esac

*1:一時ディスク領域です。一旦このディレクトリにファイルを作成するので必要に応じてLVMからディスクを切り出し/割り当てを行ってください。

epgrecのセットアップ

録画予約のフロントエンドとしてepgrecを利用します。
epgrec 自体は phpで記載してあるので、ApachePHPの用意が必要です。また、番組や録画情報はMySQLのDBで管理しているため、そちらのセットアップも必要になります。rpmを確認し、もし入っていないのであれば必要なrpmを追加する必要があります。
私の環境では、epgrecの導入以外に、録画したtsファイルを格納するためのストレージをrecVGから切り出す作業もありましたのでそちらの手順も記載しておきます。

録画データ置き場のファイルシステム

録画データを置く領域は、OSのファイルシステムのような「小さなファイルが大量」にあるのではなく、大規模なサイズのファイルが大量に置くことにになります。そのため、ex3fsではなく、そのほかのファイルシステムを利用することを検討しました。その結果、

  1. オンラインでのファイルサイズ拡張が容易
  2. 技術的に十分枯れている

という理由でxfsを利用することにしました。

xfsのインストール

yum を利用して、xfsのパッケージをインストールします。

以下、私の環境の情報。

$ rpm -aq | grep xfs
kmod-xfs-0.4-2
xorg-x11-xfs-1.0.2-4*1
xfsdump-2.2.46-1.el5.centos
xfsprogs-2.9.4-1.el5.centos
xfsprogs-devel-2.9.4-1.el5.centos

mkfs.xfsコマンドを利用してxfsファイルシステムを作成します。

$ mkfs.xfs /dev/recVG/videoLV
$ mkdir /var/www/epgrec/video
$ mount -t xfs /dev/recVG/videoLV /var/www/epgrec/video
$ mkdir /var/www/epgrec/video
$ chown apache:apache /var/www/epgrec/video
$ echo "/dev/recVG/videoLV	/var/www/epgrec/video	xfs	defaults	1 2" >> /etc/fstab

/etc/fstabにエントリを記載し、起動時に自動マウントが行われるよう設定を行います。

$ cat /etc/fstab | grep xfs
/dev/recVG/videoLV	/var/www/epgrec/video	xfs	defaults	1 2

php設定

epgrecでは、内部でいくつかのphp拡張パッケージを利用しています。そのため、以下パッケージを yum経由でインストールします。

mysql設定

mysqlデータファイルのlvミラー実施

mysqlのデータの耐障害性を高めるためにLVミラーを実施しておきます。

$ lvcreate -m 1 -L 10G -n mysqlVL rootVG
$ mke2fs -j /dev/rootVG/mysqlLV
$ mount /dev/rootVG/mysqlLV /mnt
$ cp -pr /var/lib/mysql/* /mnt
$ mv /var/lib/mysql /var/lib/mysql.org
$ mkdir /var/lib/mysql
$ umount /mnt
$ mount /dev/rootVG/mysqlLV /var/lib/mysql
$ echo "/dev/rootVG/mysqlLV     /var/lib/mysql          ext3    defaults        1 2" >> /etc/fstab

以下、私の環境の確認結果

$cat /etc/fstab | grep mysql
/dev/rootVG/mysqlLV     /var/lib/mysql          ext3    defaults        1 2
$ mount | grep mysql
/dev/mapper/rootVG-mysqlLV on /var/lib/mysql type ext3 (rw)
databaseの追加作成

http://tadachi.txt-nifty.com/blog/2010/01/centos54epgepgr.html
の手順に従ってDB作成を行いました。

apache設定

httpd.confに 以下の設定を追加しておきました。


    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from xxx.xxx.xxx localhost
    DirectoryIndex index.html index.html.var index.php

epgrecソフトウェアセットアップ

epgrecの配布ページ
http://www.mda.or.jp/epgrec/index.php/%E3%83%88%E3%83%83%E3%83%97%E3%83%9A%E3%83%BC%E3%82%B8
のドキュメントに従って作業を行っていきます。

  1. config.phpの編集
  2. 初回起動セットアップ
  3. do-recorde.shのセットアップ

PT2用のサンプルを do-record.sh にコピーします。

  1. getepgのcron.d登録

/etc/cron.d にgetepgをコピーします。コピー後、念のため cron.dのリロードを行います。
 /var/log/messagesを見て、もしパーミッション関連のメッセージが出ていれば修正を行います。

ntpdセットアップ

epgrecでは、予約録画の実行をatコマンドを利用して実行しています。そのため、PCの時計がずれていると録画開始時間がずれてしまいます。PCの時計を正確な時間に合わせるため、ntpdのセットアップを必ず行っておきましょう。

次の日記d:id:tirol_choko:20100610に続く

*1:xorg-x11-xfs はX-windowのフォントサーバなのでファイルシステムの xfsとは関係ありません。

PT2ドライバのインストール

PT2ドライバのセットアップは
http://tadachi.txt-nifty.com/blog/2010/01/centos54pt2-627.html
を参考に作業を行いました。しかし、CentOS5.5 だと若干手順が異なっていたり、録画ソフトの recpt1 のmake手順が異なりますので補足を記載します。

Mercurialの導入

PT2のドライバはwikipedia:Mercurialを利用しています。残念ながら、 2010/05/30 現在、CentOS5.5 の正規のレポジトリに Mercurialは存在しません。
そこでd:id:radio-keios:20080521
に記載されている手順でyum のレポジトリに rpmforgeを追加し、Mercurialの導入を行いましょう。
以下、yumMercurialを検索した結果。

$ yum search mercurial
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: www.ftp.ne.jp
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Warning: No matches found for: mercurial
No Matches found
$ yum --enablerepo=rpmforge search mercurial
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: www.ftp.ne.jp
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * rpmforge: apt.sw.be
 * updates: www.ftp.ne.jp
rpmforge                                                 | 1.1 kB     00:00     
============================== Matched: mercurial ==============================
mercurial.x86_64 : Fast lightweight source control management system
mercurial-hgk.x86_64 : hgk GUI for mercurial
tailor.noarch : Translate changesets between version control systems

PT2ドライバのインストール

http://tadachi.txt-nifty.com/blog/2010/01/centos54pt2-627.html
の手順に従って pt1_drv.ko を導入します。

以下、私の環境の確認情報。

$ lsmod | grep pt1
pt1_drv                66988  0 

カードリーダーのセットアップ

pcs系のrpmはすべて正規のCentOSレポジトリに存在するので、perl-Gtk2のみrpmforgeからインストールを行います。
以下、私の環境の確認情報。

$ yum --enablerepo=rpmforge search perl-Gtk2
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: rsync.atworks.co.jp
 * base: rsync.atworks.co.jp
 * extras: rsync.atworks.co.jp
 * rpmforge: ftp-stud.fht-esslingen.de
 * updates: rsync.atworks.co.jp
============================== Matched: perl-Gtk2 ==============================
perl-Gtk2.x86_64 : Perl interface to the 2.x series of the Gimp Toolkit library
perl-Gtk2-Ex-Carp.noarch : Perl module implements GTK+ friendly die() and warn()
                         : functions
perl-Gtk2-Ex-FormFactory.noarch : Framework for Gtk2 perl applications
perl-Gtk2-Ex-PodViewer.noarch : Perl module that implements a Gtk2 widget for
                              : displaying Plain old Documentation (POD)
perl-Gtk2-Ex-Simple-List.noarch : Perl module with bindings to Gtk2's complex
                                : MVC list widget
perl-Gtk2-Ex-Utils.noarch : Perl module that implements extra Gtk2 Utilities for
                          : working with Gnome2/Gtk2
perl-Gtk2-GladeXML.x86_64 : Perl module to create user interfaces directly from
                          : Glade XML files
perl-Gtk2-ImageView.x86_64 : Perl bindings for the GtkImageView widget
perl-Gtk2-Notify.x86_64 : Perl interface to libnotify
perl-Gtk2-Sexy.x86_64 : Gtk2-Sexy module for perl
perl-Gtk2-Spell.x86_64 : Perl module with bindings for GtkSpell with Gtk2
perl-Gtk2-TrayIcon.x86_64 : Interface to the EggTrayIcon library
$ rpm -qa | grep perl-Gtk2
perl-Gtk2-1.162-1.el5.rf

録画ソフトウェア(recpt1)のインストール

手順では、r73のrecpt1を利用するに記載されていますが、その場合だと最新ドライバでBS/CSを録画する場合に問題が発生します。よって、最新のドライバに付属の recpt1 を導入します。
以下に、作業手順を手順メモを記載します。

  • arib25ライブラリのインストール
$ hg clone http://hg.honeyplanet.jp/pt1/ PT2_old -r 73
$ cd PT2_old/arib25
$ make
$ make install
  • recpt1のインストール

autoconf を利用するので必要に応じてrpmをインストールしてください。

$ cd ../../PT2/recpt2
$ ./configure --enable-b25
$ make
$ make install