注意
- 個人名などが入っている項目は書き換えている部分もあるので、ご自分の環境に合わせて適宜読み替えてください。
- ここに書かれていることを信用したせいで何が起こっても私は知りません。
構成
- CentOS 6.4 i386
- Intel Atom CPU N270 @ 1.60GHz * 2
- 2GB/1TB
- 筐体はこれ。2年ぐらい使ってみたけど、熱で不安定になることもあるので、正直ファンレスはやめといたほうがいい。
参考サイト
CentOS インストール
CPU が hoge なので i386 を選択。通常のインストール
- Install or upgrade an existing system
- Basic Server
の設定を使いました。
初期設定
まずは eth0 を起動時に起動させるようにする。また、ルーターの DMZ を使うために IP を固定する。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 - ONBOOT=no + ONBOOT=yes - BOOTPROTO=dhcp + BOOTPROTO=static + IPADDR=192.168.11.10 + NETMASK=255.255.255.0 + GATEWAY=192.168.11.1 # service network restart
ユーザーを追加して ssh で接続できるようにする。Basic Server でインストールしているので ssh サーバーは既に稼働している。
2016-07-16 追記:公開鍵を貼り付ける作業は、クライアント側で ssh-copy-id
コマンドを利用するとパーミッションも含めてよしなに行ってくれるらしい。下の $ mkdir ~/.ssh
から $ chmod 600 .ssh/authorized_keys
まではこれで一発でやったほうが楽かと。
# useradd hoge # passwd hoge # su hoge $ mkdir ~/.ssh $ chmod 700 .ssh $ vi ~/.ssh/authorized_keys 公開鍵を貼り付ける $ chmod 600 .ssh/authorized_keys $ exit # vi /etc/ssh/sshd_config PermitRootLogin を no に変更 PasswordAuthentication を no に変更 # service sshd restart # usermod -G wheel hoge # visudo %wheel ALL=(ALL) ALL の行のコメントアウトを解除 # su hoge $ vi ~/.bash_profile 次のパスを追加 PATH=$PATH:/sbin PATH=$PATH:/usr/sbin PATH=$PATH:/usr/local/sbin .bash_profile を読み込むために再ログインする
システムをアップデートする。
$ sudo yum update
epel リポジトリを利用可能にする。まずは ここ にアクセスして Packages の下にあるリンクを取得。それをコマンドに利用する。
$ sudo rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm $ yum repolist | grep epel # to check if epel is installed correctly.
tmux をインストールする
$ sudo yum install tmux
PT2 をセットアップ
CentOS6.1にアースソフトPT2をセットアップ を見ながら行う。kernel-devel に関しては ここ を参照。autoconf, automake は recpt1 のインストール時に必要。
$ sudo yum install pcsc-lite pcsc-lite-devel pcsc-lite-libs $ sudo yum install ccid $ sudo yum install gcc-c++ $ sudo yum install perl-Gtk2 $ sudo yum install yum-priorities $ sudo yum install kernel-devel $ sudo yum install autoconf automake
pcsc-perl, pcsc-tools は fedora のリポジトリから持ってくる必要があるらしい。最新版を使ったほうが良いかとも思ったが、依存関係とか面倒だったら嫌なので元記事にあるように Fedora13のものを利用。動けば良かろうなのだ。
$ wget ftp://ftp.kddlabs.co.jp/033/Linux/packages/fedora.archive/releases/13/Everything/i386/os/Packages/pcsc-perl-1.4.8-2.fc13.i686.rpm $ wget ftp://ftp.kddlabs.co.jp/033/Linux/packages/fedora.archive/releases/13/Everything/i386/os/Packages/pcsc-tools-1.4.16-1.fc13.i686.rpm $ sudo rpm -ivh pcsc-perl-1.4.8-2.fc13.i686.rpm $ sudo rpm -ivh pcsc-tools-1.4.16-1.fc13.i686.rpm $ sudo service pcscd start $ chkconfig pcscd on # messagebus, haldaemon との起動順の設定が面倒だと書かれているが、とりあえずこれでいいのでは? $ pcsc_scan
Your card is not present in the database. というエラーメッセージが出た。 $ vi /usr/share/pcsc/smartcard_list.txt してみると、
3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99 Japanese Chijou Digital B-CAS Card (pay TV)
と書いてあるが、私のカードは
ATR: 3B F0 12 00 FF 91 81 B1 7C 45 1F 01 9B
である。BonCasLinkのサーバーをLinuxに立ててB-CASカードを共有する によればこれは B-CAS カードの種類の相違だろうということなのでとりあえずはほっておく。
次に復号ツール b25 のインストールを行う。元記事の方法ではなく、github から最新版をダウンロードしてくる。
$ wget https://github.com/stz2012/libarib25/archive/master.zip
$ unzip master
$ cd libarib25-master/src/
$ make
$ sudo make install
続いて PT2 ドライバのインストールを行う。まずはデフォルトのものを無効化してから最新版をダウンロードしてインストール。
$ sudoedit /etc/modprobe.d/blacklist.conf + blacklist earth_pt1 $ sudo reboot $ wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2 $ tar -xvlf tip.tar.bz2 $ cd pt1-hogehoge/driver $ make $ sudo make install $ sudo modprobe pt1_drv $ ls /etc/udev/rules.d/ # 99-pt1.rules があることを確認。 $ ls -l /dev/pt1* # pt1video[0-3] があることを確認。
yum update でカーネルのバージョンが上がるとこのドライバを再インストールする必要がある。その時は make install と modprove pt1_drv を繰り返せば良い。
最後に recpt1 をインストールする。
$ cd pt1-hogehoge/recpt1 $ ./autogen.sh $ ./configure -enable-b25 $ make $ sudo make install $ sudo su - # 次のコマンドは root として発行しないとダメ。 # echo "/usr/local/lib" > /etc/ld.so.conf.d/recpt1.conf # exit $ sudo ldconfig
録画テスト。ts ファイルが作成されて、それを再生することができることを確認。 (2013-10-17: デバイス名を指定しない場合に加えて、video[0-3] の全てについて録画テストを追加)
$ recpt1 --strip --b25 27 10 test.ts $ recpt1 --strip --b25 101 10 test-video0.ts --device /dev/pt1video0 $ recpt1 --strip --b25 101 10 test-video1.ts --device /dev/pt1video1 $ recpt1 --strip --b25 27 10 test-video2.ts --device /dev/pt1video2 $ recpt1 --strip --b25 27 10 test-video3.ts --device /dev/pt1video3
ネットワーク配信テスト。
$ recpt1 --udp --addr IP_TO_BROADCAST --port 1234 --strip --b25 27 - /dev/null
VLC を開いて、ネットワークストリーム udp://@:1234/ を再生して確認。配信は Ctrl-C で終了する。
LAMP 環境の導入
CentOS6.0でLAMP環境①webサーバ構築(Apache), CentOS6.0でLAMP環境②データベースサーバ構築(MySQL) を見ながら行う。
$ sudo yum install httpd php php-mbstring $ sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org $ sudoedit /etc/httpd/conf/httpd.conf + ServerTokens Off + UseCanonicalName Off # 元記事では On にしているが、Indexes を表示させたいときに困る。 + KeepAlive On + MaxKeepAliveRequests 500 + ServerName www.サーバのホスト名.ドメイン名:80 <Directory /> Options FollowSymLinks AllowOverride None + Order Deny,Allow + Deny from all </Directory> + Options FollowSymLinks + ServerSignature Off + AddHandler cgi-script .cgi .pl $ httpd -t # syntax check $ sudo cp -p /etc/php.ini /etc/php.ini.org $ sudoedit /etc/php.ini + post_max_size = 20M + upload_max_filesize = 16M $ sudo service https start $ sudo chkconfig httpd on $ sudo iptables -L --line-number
Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 2 ACCEPT icmp -- anywhere anywhere 3 ACCEPT all -- anywhere anywhere 4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh 5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination
5行目で REJECT されているので、その直前に http への許可を入れる。
$ sudo iptables -I INPUT 5 -p tcp --dport http -j ACCEPT $ sudo iptables -I INPUT 5 -p tcp --dport https -j ACCEPT $ sudo iptables -L --line-number # check $ sudo service iptables save
$ sudo yum install mysql-server $ sudo service mysqld start $ sudo chkconfig mysqld on $ mysqladmin -u root password PASSWORD $ sudo yum install php-mysql php-process php-ldap php-pear
ここで同時に php 関係の必要なものをインストールした。このへん を参考にした。 ついでに /etc/php.ini を更新しておく。
$ sudoedit /etc/php.ini - ;date.timezone = + date.timezone = Asia/Tokyo
epgrec の導入
CentOS6.2+PT2にepgrecをインストール を見ながら行う。必要なファイルなどは、SourceForge のリポジトリ から最新版を DL してきたほうがよさそうだ。
$ tar xvzf epgdumpr2_20111001.tar.gz $ cd epgdumpr2 $ make clean $ make $ sudo cp epgdump /usr/local/bin $ sudoedit /etc/passwd - apache:x:48:48:Apache:/var/www:/sbin/nologin + apache:x:48:48:Apache:/var/www:/bin/bash $ wget "http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fepgrec%2F53387%2Fepgrec_20111001.tar.gz" $ sudo tar xvzpf epgrec_20111001.tar.gz -C /var/www/html/ $ sudo chown hoge:hoge /var/www/html/epgrec/ $ cp /var/www/html/epgrec/config.php.sample /var/www/html/epgrec/config.php $ vi /var/www/html/epgrec/config.php + "GR20" => "20", // MX TV + // "GR30" => "30", // 千葉 (コメントアウト) + define( "BS_EPG_CHANNEL", "101" ); // BS:受信状態が悪かったので。 $ cp /var/www/html/epgrec/do-record.sh.pt1 /var/www/html/epgrec/do-record.sh $ vi /var/www/html/epgrec/do-record.sh
元記事を参考に、 elif [ ${MODE} = 1 ]; then 以下の場合分けを以下のように変更。
elif [ ${MODE} = 1 ]; then if [ ${CHANNEL} = "24" ] || [ ${CHANNEL} = "23" ]; then # テレビ朝日とテレビ東京はFullTS $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} >/dev/null else # 目的のSIDのみ残す $RECORDER --b25 --strip --sid $SID $CHANNEL $DURATION ${OUTPUT} >/dev/null fi
$ sudoedit /etc/httpd/conf.d/epgrec.conf + AddType video/mpeg .ts <Directory /var/www/html/epgrec> Options Indexes FollowSymLinks Order deny,allow Allow from all </Directory> $ sudo service httpd restart
$ sudo mkdir /home/share $ sudo chmod 777 /home/share/ $ sudo mkdir /home/share/video $ sudo chmod 777 /home/share/video $ sudo rm -r /var/www/html/epgrec/video $ sudo ln -s /home/share/video /var/www/html/epgrec/video
mysql にデータベースとユーザーを作成する。
$ mysql -u root -p mysql> grant all privileges on PT2.* to USERNAME@localhost identified by 'PASSWORD'; mysql> exit $ mysql -u USERNAME -p mysql> create database PT2; mysql> exit
http://ipaddress/epgrec/ にアクセスし、初期設定。言われる通りにパーミッションを整える。
$ sudo chmod 777 /var/www/html/epgrec/templates_c $ sudo chmod 777 /var/www/html/epgrec/thumbs $ sudo chmod 777 /var/www/html/epgrec/settings $ sudo chmod 777 /var/www/html/epgrec/cache
ファイル文字列はこれを利用した。ビミョーに ISO 8601 からずれているのは Windows におけるファイル名の制約(コロン使用不可)のため。
%YEAR%-%MONTH%-%DAY%T%HOUR%%MIN%%SEC%_%TYPE%%CH%_%TITLE%
$ sudo cp /var/www/html/epgrec/cron.d/getepg /etc/cron.d/ $ sudo chmod 644 /etc/cron.d/getepg $ sudoedit /etc/cron.d/getepg 29 */3 * * * apache /var/www/html/epgrec/getepg.php # 3時間おきの実行に変更、www-data を apache に変更
http://hostname/epgrec/logViewer.php からログが見られるので確認。 手動で番組表を取得したい場合は /var/www/html/epgrec/getepg.php を実行。時間がかかる(20分ほど)ので別窓でやること。
SELinux を無効化しないと Web 予約からの録画が失敗するので無効化しましょう。
$ sudo setenforce permissive $ sudoedit /etc/sysconfig/selinux - SELINUX=enforcing + SELINUX=disabled
Web から録画してみてできるかどうか確認。
あとは時間を合わせるために ntp の設定。
$ sudo yum install ntp $ sudo service ntpd start $ sudo chkconfig ntpd on $ ntpq -p # syncing to the server with * mark, takes about 10 min. to sync.
sftp でアクセスしたときに素早く video ディレクトリに移動できるように、user directory にシンボリックリンクを張る。
$ ln -s /home/share/video ~/video
外から繋げるようにするために ddns を自動アップデートするようにする。 ieserver 公式のスクリプト を使う。
$ wget http://ieserver.net/ddns-update.txt $ mv ddns-update.txt ddns-update.pl $ vi ddns-update.pl # configure $ chmod 775 ddns-update.pl $ sudo mkdir /usr/local/ddns $ sudo mv ddns-update.pl /usr/local/ddns/ $ sudo su - # crontab -e 3,23,43 * * * * /usr/local/ddns/ddns-update.pl # exit
Digest 認証の導入
epgrec に Digest 認証をかける を参考に。LAN からはパスワード無しで、外からはパスワードありで epgrec を使えるようにする。
$ cd /etc/httpd/ $ sudo htdigest -c .htdigest_epgrec 'epgrec' USERNAME $ sudoedit /etc/httpd/conf.d/epgrec.conf AddType video/mpeg .ts <Directory /var/www/html/epgrec> Options Indexes FollowSymLinks AuthType Digest AuthName "epgrec" AuthDigestDomain /epgrec/ AuthUserFile /etc/httpd/.htdigest_epgrec Require valid-user Order deny,allow Deny from all Allow from 192.168.11.0/24 127.0.0.1 Satisfy Any </Directory>
mediatomb の導入
とかすると DLNA で未来を感じることができて楽しいのでしょうけれども、体力がないのでこのへんで。追記するかもしれません。
追記:メンテナンス
ちょっとおかしいな? と思ったら、epgrec の「環境設定」から「動作ログを見る」に飛んで、なにか変なエラーが出ていないか確認しましょう。
2013-06-12 追記:epgrec UNA
epgrec UNA という、epgrec に機能拡張がされている版があるので、次回インストール時にはこちらを試してみてもいいかもしれない。
2013-06-25 追記:データベースの初期化
そろそろ期が変わるので、いままでの録画ファイルをストレージ用のディスクに移行しようと思う。ファイルは普通に mv
すればいいのだが、epgrec の録画済み情報をすべて削除しなければならない。
公式 にあるように、$ /var/www/epgrec/initdb.php
を実行してやれば データベースが初期化されるのでこれで問題ないと思われる。このあとに $ /var/www/epgrec/getepg.php
を実行(30分ぐらいかかる)してやれば番組表も取得される。
でもこれっておそらく録画予約情報も消えてしまうよね。前期から継続で録画したい番組もあるので、できれば録画済み情報のみを消したいのだけれど。でも手動でSQL叩いて変になられても困るしなぁ。情報をお持ちの方はぜひコメントください!
2013-09-06 追記:この問題に対して 先人の知恵 がある。次の構文で 2012-02 分の項目を消せるらしい。後日テストしてみる予定。
mysql> delete from Recorder_reserveTbl where starttime like '2012-02%';
2013-07-01 追記:デフォルトで「録画ファイルも削除する」にチェック
こちらのサイト を参考に、epgrec/templates/recordedTable.html の21行目(録画ファイルも削除する の行)に checked="checked"
を追加。
2013-10-17 追記:/dev/pt1video2
のみで録画できなくなった
$ recpt1 --b25 --strip 27 5 test-video2.ts --device /dev/pt1video2 ... Cannot tune to the specified channel: /dev/pt1video2
となってしまって録画できない。配線・デバイス接続などを確認してみたのだが原因不明。Reboot したら直った。
2013-10-17 追記:Chinachu
EPGREC の代替として、Chinachu なるソフトが存在する。次回はこれの導入を検討してみるのもいいかもしれない。何より名前が気に入った。
2014-02-13 追記:ntpd のモニタ機能の無効化
ntpd の monlist 機能を使った DDoS 攻撃に関する注意喚起 などにあるように、ntpd が DDoS 攻撃の踏み台に使われる脆弱性を持っているようだ。これを回避するために、/etc/ntp.conf
の最終行に disable monitor
を追加して ntpd を再起動する。
2015-03-31 追記:番組タイトルに半角スペースがあるとファイルが正常に作成されない問題への対策
EPGrec 予約録画失敗 の謎の奇病 の原因特定? 2 にあるように、番組タイトルに半角スペースが入っていると、作成されるファイル名がそこで切られてしまって、ストリーミング再生などに支障が出る。これを回避するために、リンク先にある対策を施す。
Reservation.class.php
// あると面倒くさそうな文字を全部_に
//$filename = preg_replace("/[ \.\/\*:<>\?\\|()\'\"&]/u","_", trim($filename) );
+ mb_regex_encoding ('UTF-8');
// preg_replaceがUTF-8に対応できない環境があるようなのでmb_ereg_replaceに戻す
$filename = mb_ereg_replace("[ \./\*:<>\?\\|()\'\"&]","_", trim($filename) );
2015-04-08 追記:ニュースを定期的に録画して、いつでも最新のニュースを観られるようにする。
知人から「常識がなさすぎる、テレビぐらい観ろ」とたいへん有難いご示教をいただいたので、毎日のニュースを自動で録画して LAN から見られるようにした。
19時から30分間録画する(cron は秒単位で正確というわけではないので、1分前から始めて31分間=1860秒間録画する)。
ほんとは /dev/null
に捨てるのはよくないので cronlog
とかを使うべきなのだと思うが、まぁ今のところは捨ておく。
$ crontab -e
59 18 * * * /usr/local/bin/recpt1 --strip --b25 27 1860 /home/share/video/news.ts >/dev/null 2>&1
クライアント側では、http://SERVER_IP_ADDR/epgrec/video/nhknews7.ts
を VLC で開いて、すぐに停止。表示されている項目をプレイリストからメディアライブラリに D&D すれば次回起動時からはそれを再生するだけで最新のニュースを観ることができる。
2015-09-10 追記:yum update
実行後に録画可能かをチェックする。
yum update をしたあとは、録画可能かを確認。いったん reboot してから確認するとよい(reboot すると /dev/pt1*
が消えたりするため)。
$ sudo reboot $ recpt1 --b25 --strip 27 5 test-video2.ts --device /dev/pt1video2 ... Cannot open tuner device: /dev/pt1video2
問題がある場合は以下を実行する。
$ cd pt1-hogehoge/driver $ make $ sudo make install $ sudo modprobe pt1_drv $ ls /etc/udev/rules.d/ # 99-pt1.rules があることを確認。 $ ls -l /dev/pt1* # pt1video[0-3] があることを確認。