地デジサーバーをCentOS 6.5にバージョンアップしました

Linux

そういえば書いてなかったのでアップします。先日HDDが壊れた地デジサーバーですが、再構築する機会に思い切ってOSバージョンアップをしました。その備忘録です。

きっかけはHDDの故障

元々、この地デジサーバーを構築したのがもう4年くらい前になります。2010年10月。当時はまだCentOS 6は出ていませんでした。そこでCentOS 5.5で構築して、運用を開始したわけです。地デジサーバーはとにかく安定的に録画を続けていくことが重要なため、バージョンアップ等の構成変更は極力しない形で、ずーっとそのまま運用していました。

その後、CentOS 6が出て、他のサーバーはすべてCentOS 6ベースに移行しましたが、地デジサーバーだけはそのまま。あまり困っていなかったというところはあります。ただ、CentOS 6はkernel 2.6.32のおかげか、高負荷でも安定して動いたり、NFS、ネットワーク周りが非常に速かったりと、地デジサーバーとして使う上でも魅力的な改善がいろいろと成されているのが分かってきました。いつかはやっぱりCentOS 6にしたいなぁ、と、思っていた。でもね、こういうベアメタルのサーバーって、環境再構築は結構手間なんです。

と、思っていたら・・・HDD壊れました。もう冗長化しないと、不安で夜も眠れない。そこで、今回、HDD周りのリフレッシュに合わせて、OSもアップデートしちゃえ、となったわけです。

以下、基本的な導入手順は、ググッて調べてやってみた結果です。数多先人の知恵がありますので、困ったときはググりましょう。

ハードの組み直しからOSインストールまで

マシンのスペックは以下です。今回、HDD以外は変えていません。地デジサーバーはファンレス省エネを考慮してATOMマシンです。

MB/CPUIntel ATOM D510 / D510MO
メモリ2GB
HDDWD30EZRX ×2
地デジカードPT2(PCI)
ICカードリーダーNTT-COMのやつ

まずはハードの組み換えから。元々、HDDは1TBのメインディスクと、今回壊れた退避領域の1.5TBのHDDという2台構成でした。これを、今回購入した、3TBのディスク2本に換装し、software raidでRAID1の冗長構成を組みます。このMBはATAポートが2個しかないので、2本とも交換です。

OSインストールはダウンロード容量が一番小さなCentOS-6.5-x86_64-minimal.isoをCD-Rに焼いて使いました。普通にインストーラでインストールしますが、ここで気にしたポイントは、パーティションテーブルとパーティションの開始位置。パーティションテーブルはHDDが3TBなので、MBRではなくGPTになります。またWDの大容量HDDはAFTを採用しているため、所謂アライメント調整を考えないといけません。結論から言うと、この辺は普通にインストーラ上でパーティション設定をしたらうまく行っていました。きちんとAFTも認識されています。

[root@astraea ~]# parted /dev/sda
GNU Parted 2.1
/dev/sda を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) u s
(parted) p
モデル: ATA WDC WD30EZRX-00D (scsi)
ディスク /dev/sda: 5860533168s
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt

番号  開始      終了         サイズ       ファイルシステム  名前  フラグ
 1    2048s     411647s      409600s      fat16                   boot
 2    411648s   1435647s     1024000s     ext4
 3    1435648s  5860532223s  5859096576s                          raid

(parted) q

2個目のパーティションは、良く分からないままにEFIをenableにした結果できたパーティションです。特に起動シーケンスなど、何か変わった雰囲気は無いですが・・・追加調査かな、と。

RAID構成は手で設定しても良かったのですが、今回はインストーラ上ですべて設定しました。物理パーティションをRAIDメンバーにして、RAID上にLVMを組んで、その中にrootボリューム以下を作ります。結構、パーティション編集のメニューの構成は分かりにくいところがありますが(RAIDやLVMの中身の編集の辺り。「編集」メニューでパーティションを追加するところがある)、やりたい構成は作れましたのでよしとします。

あとのインストールは適当ですが、いつもどおり、minimalでインストールして必要なパッケージを追加していく方法をとって、スッキリとしたサーバーの構築を目指します。

OSの基本設定から、ICカードリーダー接続まで

CentOSのインストールなんて数え切れないくらいやっているので、脊髄反射的に設定をしていきます。

  • yum update
  • selinuxを切る
  • /etc/sysconfig/initでtty起動数を3に減らす
  • /etc/sysconfig/networkでNOZEROCONF=yes

※そういえばgrub2になってる・・・ベアメタルなのでschedulerの変更やシリアルconsoleの設定など要らないから、bootオプション変えずに使ってるけど、grub2でのboot設定変更方法、あとで調べておこう・・・

pccard関連のパッケージその他のためにepelを有効化します。

yum install ftp://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum repolist
yum update

B-CASカードを使えるようにするため、PCCARD関連のrpmを放り込んでいきます。ついでにコンパイル環境も揃える。

yum install pcsc-lite pcsc-lite-devel pcsc-lite-libs
yum install ccid
yum install gcc-c++
yum install perl-Gtk2
yum install yum-priorities
yum install kernel-devel
yum install autoconf automake

pcsc-toolsがCentOSのリポジトリには無いので、Fedora13から持ってきます。もっと新しいバージョンが動かないかと、いくつかバージョン試しましたが、Fedora13のモジュールじゃないと依存関係からインストールできませんでした。

yum install http://ftp.kddlabs.co.jp/033/Linux/packages/fedora.archive/releases/13/Everything/x86_64/os/Packages/pcsc-perl-1.4.8-2.fc13.x86_64.rpm
yum install http://ftp.kddlabs.co.jp/033/Linux/packages/fedora.archive/releases/13/Everything/x86_64/os/Packages/pcsc-tools-1.4.16-1.fc13.x86_64.rpm

ここまで来ると、ICカードリーダーの動作確認ができます。これが一つのハードル。pcscdを起動することになるんですが、依存関係から、messagebusとhaldaemonが動いていないと起動できません。

/etc/init.d/messagebus start
/etc/init.d/haldaemon start
/etc/init.d/pcscd start

pcsc_scanコマンドで、ICカードリーダからデータが読めれば、OKです。

# pcsc_scan
Japanese Chijou Digital B-CAS Card (pay TV)

この辺で、心を落ち着けるため・・・というか、ドライバ類の起動設定を確認するために、リブートしましょう。chkconfig –listで上記サービス群が起動状態になっていることを確認して、リブート、起動時にきちんとサービスが上がってくるのを確認します。

PT2ドライバ導入

ここから本丸、PT2ドライバ、関連ツールの導入に入ります。recpt1コマンドが動く状態が目標です。

b25コマンドとライブラリをダウンロードしてコンパイルします。

$ wget https://github.com/stz2012/libarib25/archive/master.zip
$ unzip master
$ cd libarib25-master/src/
$ make
$ sudo make install

続いてPT2のドライバ。CentOS 6が元々持っているpt1ドライバを外して、最新ドライバと差し替えます。まずはearth_pt1ドライバを無効化します。

$ vi /etc/modprobe.d/blacklist.conf
+ blacklist earth_pt1
$ sudo reboot

再起動したら、lsmod等でearth_pt1が読まれていないことを確認し、最新ドライバをインストールします。

$ wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
$ tar -xvlf tip.tar.bz2
$ cd pt1-c8688d7d6382/driver
$ make
$ make install
$ modprobe pt1_drv

※ドライバのディレクトはバージョンによって異なるかもしれません。

うまく行けば、エラーも出ず、カーネルメッセージにPT2の稼働状態メッセージが出てくるはずです。

$ dmesg
...
PT1:ISDB-S Sleep
PT1:ISDB-S Sleep
PT1:ISDB-T Sleep
PT1:ISDB-T Sleep
PT1:device[0]=(null)
PT1:card_number = 0
PT1:card_number = 0
PT1:card_number = 0
PT1:card_number = 0
pt1_thread run

続いてrecpt1コマンドの導入です。ドライバと同じようにmakeします。

$ cd pt1-c8688d7d6382/recpt1
$ ./autogen.sh
$ ./configure -enable-b25
$ make
$ sudo make install

普通にコンパイルは通ると思いますが、libarib25が無いと言われると思いますので、そんな時は慌てず騒がず、ライブラリパスに追加します。

# ldd /usr/local/bin/recpt1
        linux-vdso.so.1 =>  (0x00007fffd33ff000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc322689000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fc322405000)
        libarib25.so.0 => not found
        libc.so.6 => /lib64/libc.so.6 (0x00007fc322070000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fc3228ad000)
# echo "/usr/local/lib" >> /etc/ld.so.conf.d/local.conf
# ldconfig
# ldd /usr/local/bin/recpt1
        linux-vdso.so.1 =>  (0x00007fff6b2d9000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f396db8a000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f396d906000)
        libarib25.so.0 => /usr/local/lib/libarib25.so.0 (0x00007f396d6fd000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f396d369000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f396ddae000)
        libpcsclite.so.1 => /usr/lib64/libpcsclite.so.1 (0x00007f396d15d000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f396ce56000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f396cc40000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f396ca3c000)

ここまで来たら、試験録画です。

$ recpt1 --strip --b25 20 20 aaa.ts

※チャンネルは各地域で正しい放送チャンネルを指定してください。

できたaaa.tsをローカルのPCに持ってくるなりして、VLC等、tsファイルの再生に対応したプログラムで再生してみます。問題なく録画できていればOKです。これで地デジサーバーとしての録画機能は構築完了です。

epgrecの導入

epgrecをインストールします。epgrecは基本的には、LAMP環境で動くrecpt1のフロントエンドプログラムですので、LAMP環境を作っていくことになります。まずはhttpd(apache)とphp、そしてapcを導入します。

# yum install httpd php php-mbstring
# yum install php-pecl-apc

phpのパラメータを調整します。timezoneは書いておかないとWarningがパラパラ出ることがありますので、明示します。あとはepgrecの奨励値を反映します。

# cp -p /etc/php.ini /etc/php.ini.orig
# vi /etc/php.ini
+ post_max_size = 20M
+ upload_max_filesize = 16M
+ date.timezone = Asia/Tokyo

httpdの最低限の設定を行います。hostsに自ホストの外部アドレスを設定しておくのがコツかなと思います。

# vi /etc/httpd/conf/httpd.conf
+ ServerName astraea:80

Webアクセスが可能なよう、iptables(firewall)の設定を変更します。フィルタ設定の見通しが利きやすいので、私はいつもiptables-save/restoreを使います。

# iptables-save> a
# vi a
+ -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# iptables-restore< a
# /etc/init.d/iptables save

ここまで来るとhttpd/phpの基本的な動作環境ができましたので、確認します。

# /etc/init.d/httpd start
# cd /var/www/html/
# cp /usr/share/php-pecl-apc/apc.php  .
# cat > phpinfo.php
<?php
phpinfo()
?>

サーバーにブラウザでアクセスして、基本的な動きを確認します。我が家の場合、http://astraea/phpinfo.php、およびhttp://astraea/apc.phpにアクセスして、モジュールの読み込み状態、apcの動作状態を確認します。php.iniで設定したパラメータが反映されていること、apcが有効化されていること、コンテンツキャッシュが動作していること、あたりを確認します。

続いてmysqlです。追加で足りないパッケージも追加。

# yum install mysql-server php-mysql php-process php-ldap php-pear

mysqlは必要最低限の設定(DB設定、ユーザー設定)をしておきます。

# /usr/bin/mysqladmin -u root password (rootのパスワード)
# /usr/bin/mysqladmin -u root -h astraea password (rootのパスワード)
# mysql -u root -p(rootのパスワード)
mysql> create database epgrec;
mysql> grant all privileges on epgrec.* to epgrec@localhost identified by 'epgrec';
# mysql -u epgrec -pepgrec -h localhost

epgrecユーザーでログインできればOKです。

epgdumpr2_20111001.tar.gzをダウンロードして、コンパイルしてインストールします。これはmake install一発で入りますので割愛。

続いてepgrec_20111001.tar.gzをダウンロードして、/var/www/html配下に展開し、権限を調整します。

# cd /var/www/html
# tar zxvf /tmp/epgrec_20111001.tar.gz
# chown -R apache:apache epgrec

epgrecのURLにアクセスして、初期設定(主にはDB接続関連)を実施すれば、設定完了です。我が家の場合、http://astraea/epgrec/です。EPGの初期受信が開始され、終わると番組表が見えるようになります。

最後に、apacheユーザーで録画プロセスが実行できるようにユーザー権限を調整します。CentOSをminimalインストールしていると、タイマー録画に必要となるatコマンド(atd)やcrondすらインストールされていないので、注意しましょう(実はここではまった・・・)。EPG受信プログラムを自動実行できるよう、apacheのログインシェルを修正し、cronが使えるユーザーにします。

# usermod -s /bin/bash apache
# apache:x:48:48:Apache:/var/www:/bin/bash

crontabに、EPG受信プログラムを設定します。初回は、すぐに分かるタイミングで実行して、結果を確認することをオススメします。

# vi /etc/crontab
+ 31 21,5,7,9,11,13,15,17,19 * * * apache /var/www/html/epgrec/getepg.php

このEPG受信時刻については、録画がなるべく行われていない時間を選んでいるつもりです。EPGの受信自体で、結局録画動作をすることになるためです。

あとは適宜試験録画などして、動作確認できれば完了です。

epgrecの設定調整

最後にepgrec関連の設定調整を行います。

  • 録画データは/var/www/html/epgrec/videoフォルダに保存されます。これを大容量のパーティション等へのシンボリックリンクにしておくことで、保存先を変更できます(権限に注意。apache権限で書き込みされます)
  • 環境設定でファイル名形式を適宜変更します。私は「%YEAR%%MONTH%%DAY%%HOUR%%MIN%%SEC%-%DOW%-%TYPE%%CH%_%TITLE%」 と設定しています。ファイル名で録画時間と番組名、チャンネルまで識別できるようにして、あとで重複録画されたもの(別チャンネル別時間で録画したもの)を整理できるようにしています。これは1回目の録画タイミングで録画失敗したときのための保険です。

これでepgrecも完成です。

おわりに

以上、HDD増設から初めて、環境構築完了まで、午前中から初めて夜までかかっちゃいました。いろいろ確認しながらやってますからね。minimalインストールでモジュールが足りてなくて何度か彷徨った以外は、特に引っかかるポイントはありませんでした。かなり情報も豊富ですので、手順さえ間違えなければ難しい作業ではないです。

既に稼働から1ヶ月くらい経っていますが、今のところ安定して動いています。HDDの容量も増えたのでデータ管理も楽になりました。HDDも冗長化されて、耐障害性も上がったので、精神的にも楽になりました。やっぱり冗長化は大事ですね。

残った作業はmediatombを入れてメディアサーバーにすることですが、それはまた後でやろうかと。

コメント

タイトルとURLをコピーしました