2015/02/15〜
Linux Mint 17.1 + PT2 + EPGrec で、地デジ録画サーバー構築  ( PT2 x 2 枚 = 4ch 同時録画 )
Ubuntu12.04 をアップグレードしたところシステムエラーが発生するようになってしまったため、 Linux Mint 17.1 に変更してみました。


Linux Mint Japan
Linux Mint 日本語支援サイト
有限会社アースソフト
録画予約システム EPGrec



目 次


 

録画サーバーの構築


1. ハードウェア


2. Linux Mint 17.1 の インストール



@ インストール



A 日本語化




B LVM領域の作成



3. EPGrec の インストール


4. B-CAS カードリーダーの インストール


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


6. recpt1 の インストール


7. LANP 環境の インストール


8. epgdump の インストール


9. 環境設定




@ www-data の設定




A at の インストール




B 受信チャンネルの設定



C 録画用スクリプトの設定



D EPGrec の初期設定



E getepg の自動化


10. miniDLNA の インストール


11. recbymail の インストール


12. EPGrec のカスタマイズ



 





radikorec の インストール


Ubuntu から Linux Mint への移行



 

 
■ ハードウェア
CPU Intel Core i3 2100T DTP=35W
MotherBoad ASUS P8H67-M LE PCI スロットx2本、 MicroATX
MEMORY NB PC3-8500 2GB x1枚
HDD WD30EZRX-00MMMB0 x1台
PT2 アースソフト PT2 Rev.A x2枚
ICカードリーダー  NTT-ME SCR3310-NTTCom  x1
分配器 マスプロ CSP4D-P x1
ケース Antec NSK2480 リビングにもマッチする静音ケース
電源 HuntKey AYAKAZE 300 80PLUS GOLD

アイドル時消費電力=37.3W
 
Linux Mint 17.1 の インストール
Linux Mint には様々なデスクトップがありますが、今回はシンプルな "MATE(マ テ)" を選びました。
linuxmint-17.1-mate-64bit.iso をダウンロード
 
@ インストール
iso ファイルから作成した DVD または USB メモリーからコンピュータを起動し、インストールを開始します。

 言語の選択
  ↓
 パーティションの設定
  手動で行います。
   /dev/sda1 を 20GB 確保し、 ext4 でフォーマットし、マウントポイントを "/" に指定
   /dev/sda2 を 4GB 確保し、 swap 領域に指定
   /dev/sda3 は 残り。後で lvm2 pv を作成し、 EPGrec 本体と録画データ用に使用
   
            LVM を使うと複 数の HDD で一つのボリュームを構成することができます。
  ↓
 タイムゾーンの選択
 キーボードの選択
 コンピュータ名、ユーザー名の入力
  ↓
 インストール続行

インストールが完了したら、システムを最新の状態にしておきましょう。
「アップデートマネージャ」 → アップデート実行
 
A 日本語化
次に、 Linux Mint Japan により日本語化された、追加パッケージをインストールします。
wget -q http://packages.linuxmint-jp.net/linuxmint-ja-archive-keyring.gpg -O- | sudo apt-key add -
sudo wget http://packages.linuxmint-jp.net/sources.list.d/linuxmint-ja.list -O /etc/apt/sources.list.d/linuxmint-ja.list
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install mint-gnome-ja --install-recommends
依存関係か? ibus が一緒にインストールされますが、無視します。
ibus を削除すると mint-gnome-ja も削除されてしまいます。
次に、 Linux Mint 日本語支援サイト リナックスミントをつかおう の解説に従って、インプットメソッドの Fcitx と IME の Mozc をインストールします。
「ソフトウェアマネージャ」から fcitx-mozc をインストールします。
「設定」→「Languages」で、 Fcitx を有効にし、 「Add support for Fcitx」 で、 Fcitx 用のツール類をインストールします。
しかし、fcitx-module-kimpanel は、Fcitx の「外観」の設定の邪魔をするので、
「ソフトウェアマネージャ」で削除します。
 また、fcitx-ui-qimpanel はパネルに Fcitx のアイコンを表示し続けるのでこれも「ソフトウェアマネージャ」で削除します。

「設定」→「Fcitx の設定」で、ホットキーなどの設定を行います。
「入力メソッド」→最上段に「キーボード・日本語」次に「Mozc」の2項目とします。
「全体の設定」→「ホットキー」
「入力メソッドのオンオフ」= [ Henkanmode ] [ Zenkakuhankaku ]
「外観」→「クラシックUI」
「フォントサイズ」=11
「フォント」及び「メニューのフォント」=Sans
「システムトレイアイコンを使う」=ON
「状態パネルを隠すモード」=「トレイアイコンが有効なときに隠す」、

「設定」→「Mozc の設定」で、キー設定の選択などを行います。
「一般」→「キー設定」→「キー設定の選択」=「ATOK」


また、リモートでも作業できる様に、 "ssh" をインストールしました。
sudo apt-get install ssh
 
B LVM 領域の作成
パーティショニングツール "GParted" をインストールして、 "LVM" パーティションを作成します。
sudo apt-get install gparted

「システム管理」 → 「GParted」
   GParted で、空き領域 (/dev/sda3) に lvm2 pv パーティションを作成します。
 
Volume Group を作成します。
sudo vgcreate vg0 /dev/sda3

   Logical Volume の作成では(サイズ)の指定が必要ですので、PE Size と Total PE を確認します。
sudo vgdisplay -v
   PE Size と Total PE の積(掛け算)が Logical Volume の(サイズ)になります。
 
Logical Volume を作成します。
    (サイズ)の単位はデフォルトで MB で、M を付けても、付けなくても OK です。
sudo lvcreate -L (サイズ) -n lv0 vg0

Logical Volume を ext4 でフォーマットします。
sudo mkfs.ext4 /dev/vg0/lv0


Logical Volume を /var/www にマウントし、読み書きを確認します。
sudo mkdir /var/www
sudo chmod 777 /var/www
sudo mount /dev/vg0/lv0 /var/www

マウントが確認できたら、 fstab に記述して、再起動します。
sudo vi /etc/fstab
   /dev/vg0/lv0 /var/www ext4 defaults 0 0

sudo reboot
 
■ EPGrec の インストール
EPGrec のインストールは、ダウンロードした圧縮ファイルを /var/www/epgrec に解凍/展開する作業です。
既に EPGrec を保有しているなら、それを移動またはコピーすれば OK です。

wget http://xreknishi.g1.xrea.com/epgrec/files/epgrec-20100322.tar.gz
tar xvzpf epgrec-20100322.tar.gz -C /var/www/
修正パッチ(epgrec-20100322fix1.tar.gz)
cd /var/www
wget http://xreknishi.g1.xrea.com/epgrec/files/epgrec-20100322fix1.tar.gz
tar -zxvf epgrec-20100322fix1.tar.gz
cd /var/www/epgrec
cat ../epgrec-20100322fix1.diff | patch -p1
cd ..
rm epgrec-20100322fix1.tar.gz epgrec-20100322fix1.diff readme.txt
修正パッチの修正パッチ(epgrec-20100322fix1fix.tar.gz)
cd /var/www
wget http://xreknishi.g1.xrea.com/epgrec/files/epgrec-20100322fix1fix.tar.gz
tar -zxvf epgrec-20100322fix1fix.tar.gz
cd /var/www/epgrec
cat ../epgrec-20100322fix1fix.diff | patch -p1
cd ..
rm epgrec-20100322fix1fix.tar.gz epgrec-20100322fix1fix.diff readme.txt
予約アルゴリズムの改善パッチ(Reservation.class_20110220kn.tar.gz)
cd /var/www
wget http://xreknishi.g1.xrea.com/epgrec/files/Reservation.class_20110220kn.tar.gz
tar -zxvf Reservation.class_20110220kn.tar.gz
cd /var/www/epgrec
cat ../Reservation.class_20110220kn.diff | patch -p1
cd ..
rm Reservation.class_20110220kn.tar.gz Reservation.class_20110220kn.diff readme.txt
 
■ B-CAS カードリーダーの インストール
IC カードリーダーを接続し、B-CAS カードを挿入します。
IC カードリーダーのドライバをインストールします。
sudo apt-get install libpcsclite1 libpcsclite-dev libccid pcscd pcsc-tools

B-CAS カードが認識されているか確認します。
pcsc_scan

   Japanese Chijou Digital B-CAS Card (pay TV)  の様に表示されれば OK です。

arib25(デジタル放送復号化プログラム)をインストールします。
wget http://hg.honeyplanet.jp/pt1/archive/ec7c87854f2f.zip
unzip ec7c87854f2f.zip
cd pt1-ec7c87854f2f/arib25/src/
make
sudo make install
 
■ PT2 ドライバの インストール
DVB 版ドライバの無効化
インストールするドライバとバッティングするので、OS 内臓のドライバを無効にします。
sudo echo "blacklist earth-pt1" >> /etc/modprobe.d/blacklist.conf
chardev 版ドライバの インストール
wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
tar jxf tip.tar.bz2
cd `ls -tr | tail -1`/driver
make
sudo make install
sudo reboot
再起動後、ドライバがインストールできているか確認します。
ls -lart /dev/ |grep pt1
   crw-rw-rw- 1 root video 250, 3 2011-05-01 17:36 pt1video3
   crw-rw-rw- 1 root video 250, 2 2011-05-01 17:36 pt1video2
   crw-rw-rw- 1 root video 250, 1 2011-05-01 17:36 pt1video1
   crw-rw-rw- 1 root video 250, 0 2011-05-01 17:36 pt1video0
   crw-rw-rw- 1 root video 249, 3 2011-05-01 17:36 pt1video7
   crw-rw-rw- 1 root video 249, 2 2011-05-01 17:36 pt1video6
   crw-rw-rw- 1 root video 249, 1 2011-05-01 17:36 pt1video5
   crw-rw-rw- 1 root video 249, 0 2011-05-01 17:36 pt1video4
    の様に表示されれば OK です。
 
■ recpt1 の インストール
 recpt1 は、デジタル放送録画プログラムです。
wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
tar jxf tip.tar.bz2
cd `ls -tr | tail -1`
/recpt1
./autogen.sh
./configure --enable-b25
make
sudo make install
 
■ LAMP 環境の インストール
LANP = LAN , Apache2 , MySQL , PHP5

Apeache2 と PHP5 の インストール
EPGrec は、 http サーバー Apache2 でインターフェースを行い、 PHP で動作するプログラムです。
sudo apt-get install apache2 php5 libapache2-mod-php5 php5-cli
Apache2 のドキュメントのルートディレクトリを変更します。
sudo vi /etc/apache2/sites-available/000-default.conf
   DocumentRoot /var/www/html   →  
DocumentRoot /var/www/epgrec
Apache2 に IP フィルタを設定します。
sudo vi /etc/apache2/apache2.conf
   ↓== この区間に
   <Directory /var/www/>
      Options Indexes FollowSymLinks
      AllowOverride None
      Require all granted

      order deny,allow           この3行を追加し、
      deny from all
      allow from 192.xxx.xxx.0/24      アクセスを許可する IP アドレスまたはその範囲を記述します。

   </Directory>
  ↑==

変更した設定を有効にするために、 Apache2 を再起動します。
sudo service apache2 restart

MySQL の インストール
EPGrec は、MySQL データベースで情報を管理します。
sudo apt-get install mysql-server php5-mysql
mysql -u root -p
Enter password:
mysql> create database epgrec;
mysql> grant all privileges on *.* to epgrec@localhost identified by 'epgrec';
mysql> quit
sudo reboot
 
■ epgdump の インストール
epgdump は、電子番組表(EPG)を取得するプログラムです。
wget http://xreknishi.g1.xrea.com/epgrec/files/epgdumpr2-utf8.tar.gz
tar -zxvf epgdumpr2-utf8.tar.gz
cd epgdumpr2
make
sudo cp epgdump /usr/local/bin
 
■ 環境設定
www-data の設定
EPGrec では、ユーザー "ww-data" がシェルを実行して録画を行うので、
ユーザー "www-data" がシェルを使えるように設定しておきます。
sudo vi /etc/passwd
www-data:x:33:33:www-data:/var/www:/usr/sbin/nolohin  → www-data:x:33:33:www-data:/var/www:/bin/bash
 
at の インストール
at は、指定した時刻にコマンドを実行するデーモンです。
EPGrec は、 at に recpt1 を登録し、予約録画を行います。

sudo apt-get install at
ユーザー "www-data" が at を使えるように設定しておきます。
sudo vi /etc/at.deny
   www-data   を削除します。
 
受信チャンネルの設定
自分の地域に合わせて、受信するチャンネルを設定するために、 config.php ファイルを編集します。
受信できないチャンネルを設定してしまうと、EPGrec が PEG の取得に失敗して、正常に動作しないので注意が必要です。
cp -p /var/www/epgrec/config.php.sample /var/www/epgrec/config.php
vi /var/www/epgrec/config.php
// 識別子 => チャンネル番号
$GR_CHANNEL_MAP = array(

ここに自分の環境に合わせて、"CH設定名" => "ch番号" の様に設定します。
ch番号はマスプロのチャンネル一覧等を参考にしてください。


 (例)
  "GR37" => "37",  // NHK
  "GR39" => "39"  // 教育

);
 
録画用スクリプトの設定
do-record.sh は、 recpt1 に条件を渡して動作させるためのスクリプトです。
cp --archive /var/www/epgrec/do-record.sh.pt1 /var/www/epgrec/do-record.sh
 
EPGrec の初期設定
設定では、最後に電子番組表データ (EPG) の受信を行いますので、設定は、テレビの放送時間帯に行ってくださ い。
本 家 EPGrec の解説を参考に実施してください。

PT2 にアンテナを接続してください。
Web ブラウザに録画サーバーのアドレス (http://xxx.xxx.xxx.xxx) を入力します。

初回アクセス時には、初期設定ページが開きます。
  * EPGrec のページが表示されない場合は、 Apache2 などのデーモンをデフォルトの状態から一つ一つ動作確認していきましょう。
   ・Apache2のデフォルトページが表示される場合は、 Apache2 の DocumentRoot の変更ができていません。
   ・サーバーに接続できない場合は、 Apache2 が動作していません。
   ・ページが Not Found の場合は、 DocumentRoot の場所に表示できるファイルがありません。
   ・初回以降、設定ページは、(http://xxx.xxx.xxx.xx/install/step1.php)で開けます。

初期設定ページが表示されたら、指示に従って設定を実行すればインストールは完了です。
設定が完了したら、電子番組表データ(EPG)の初回受信を実行してください。
  ・EPG データの取得には20分くらいの時間が必要です。
  ・手動で 番組表データ(EPG)を更新/取得する場合は、ユーザー "www-data" で "/var/www/epgrec/getepg.php" を実行してください。

EPG データの取得が終わったら、ブラウザのページをリロードすると、番組表が表示されます。
  ・番組表が正常に表示されない場合は、受信チャンネルの設定を確認しましょう。

設定が終わったら番組を録画して、動作を確認しましょう。
 
getepg の自動化
cron を使って、 電子番組表データ(EPG)の取得/更新を自動化します。
cron とは、コマンドの実行をスケジュール化するデーモンです。

cron の設定ファイルを必要に応じて編集します。
vi /var/www/epgrec/cron.d/getepg
   29 */2 * * * www-data /var/www/epgrec/getepg.php
          ↓
   29
6-22/2 * * * www-data /var/www/epgrec/getepg.php    <==時間を変更しました。
cron に登録します。
sudo cp /var/www/epgrec/cron.d/getepg /etc/cron.d/
chmod 644 /etc/cron.d/getepg
 

 
TS ファイル再生環境の構築
 
■ miniDLNA の インストール
DLNA 対応のテレビ (BRAVIA) で再生できるようにします。
   ・ワンセグがデフォルトになってしまったファイルは表示されません。
   ・ DTCP-IP のみ対応のテレビ (Wooo) では、再生できません。
   ・ DLNA で再生できないファイルは VLC などの動画プレイヤーで再生しています。


sudo add-apt-repository ppa:djart/minidlna
sudo apt-get update
sudo apt-get install minidlna

sudo vi /etc/minidlna.conf
   media_dir=V,/var/www/epgrec/video

   friendly_name=EPGrec   <== 表示名は任意です。
 

 
■ メールで録画予約
※ 2022/05/30から Google がセキュリティを強化したため、この方法は使用できなくなりました。
メールで録画を予約できるソフト "recbymail" を作りました。
 recbymail のページを 参考にインストール等を行ってください。

Linux Mint サーバーがメールの送受信をできるようにするには、下記パッケージをインストールしてください。

sudo apt-get install php-pear
sudo pear channel-update pear.php.net
sudo pear install Auth_SASL
sudo pear install Net_POP3
sudo pear install Net_SMTP
sudo pear install Mail
sudo pear install Mail_Mime
 

 
EPGrec の カスタマイズ
EPGrec の表示のカスタマイズ (epgrec-templates_ken.tar.gz)
diff -urN old/templates/index.html new/templates/index.html
--- old/templates/index.html 2010-03-19 23:41:45.000000000 +0900
+++ new/templates/index.html 2011-10-02 14:55:46.000000000 +0900
@@ -552,7 +552,7 @@

<body>

-<h2>{$sitetitle}</h2>
+{$sitetitle}  | <a href="logViewer.php">EPGrec動作ロ グ</a> | <a href="keywordTable.php">自動録画キーワード管理へ</a> |


<div id="float_titles" style="width: {math equation="x + 80" x=$chs_width }px;height:120px;">
diff -urN old/templates/keywordTable.html new/templates/keywordTable.html
--- old/templates/keywordTable.html 2010-03-16 22:39:13.000000000 +0900
+++ new/templates/keywordTable.html 2011-10-02 20:14:29.000000000 +0900
@@ -28,7 +28,7 @@
a {text-decoration:none;}

table#reservation_table {
- width: 800px;
+ width: 990px;
border: 1px #BBB solid;
border-collapse: collapse;
border-spacing: 0;
@@ -71,11 +71,7 @@

<body>

-<h2>{$sitetitle}</h2>
-
-
-<div><a href="programTable.php">番組検索へ</a>/<a href="reservationTable.php">予約一覧へ</a></div>
-
+<div>{$sitetitle}  | <a href="programTable.php">番組検索へ</a> | <a href="reservationTable.php">予約一覧へ</a> |</div>

{if count($keywords)}
<table id="reservation_table">
diff -urN old/templates/logTable.html new/templates/logTable.html
--- old/templates/logTable.html 2011-11-20 09:55:37.395895488 +0900
+++ new/templates/logTable.html 2011-10-02 20:15:35.000000000 +0900
@@ -14,7 +14,7 @@
a {text-decoration:none;}

table#log_table {
- width: 800px;
+ width: 990px;
border: 1px #BBB solid;
border-collapse: collapse;
border-spacing: 0;
@@ -27,13 +27,13 @@
background: #BBB;
font-weight: bold;
line-height: 120%;
- text-align: center;
+ text-align: left;
}
table#log_table td {
padding: 5px;
border: 1px #BBB solid;
border-width: 0 0 1px 1px;
- text-align: center;
+ text-align: left;
}

table#log_table td.errorlevel0 {background-color: #FFFFFF;}
@@ -48,27 +48,25 @@

<body>

-<h2>{$sitetitle}</h2>
-
-<div><a href="index.php">番組表に戻る</a></div>
+<div>{$sitetitle}  | <a href="index.php">番組表に戻る</a> |</div>

<table id="log_table">
<tr>
- <th>レベル</th>
- <th>日時</th>
- <th>内容</th>
+ <th nowrap>レベル</th>
+ <th nowrap>日時</th>
+ <th nowrap>内容</th>
</tr>

{foreach from=$logs item=log}
<tr>
- <td class="errorlevel{$log->level}">
+ <td nowrap class="errorlevel{$log->level}">
{if $log->level == 0}情報
{elseif $log->level == 1}警告
{elseif $log->level == 2}エラー
{/if}
</td>
- <td>{$log->logtime}</td>
- <td>{$log->message|escape}</td>
+ <td nowrap>{$log->logtime}</td>
+ <td nowrap>{$log->message|escape}</td>
</tr>
{/foreach}
</body>
diff -urN old/templates/programTable.html new/templates/programTable.html
--- old/templates/programTable.html 2010-03-16 22:39:13.000000000 +0900
+++ new/templates/programTable.html 2011-10-03 21:33:54.000000000 +0900
@@ -101,7 +101,7 @@
a {text-decoration:none;}

table#reservation_table {
- width: 800px;
+ width: 990px;
border: 1px #BBB solid;
border-collapse: collapse;
border-spacing: 0;
@@ -150,11 +150,8 @@

<body>

-<h2>{$sitetitle}</h2>

-
-
-<div><a href="index.php">番組表に戻る</a>/<a href="keywordTable.php">自動録画キーワード管理へ</a></div>
+<div>{$sitetitle}  | <a href="index.php">番組表に戻る</a> | <a href="keywordTable.php">自動録画キーワード管理へ</a> | <a href="reservationTable.php">録画予約一覧</a> | <a href="recordedTable.php">録画済一覧</a> |</div>

<div>
絞り込み:
diff -urN old/templates/recordedTable.html new/templates/recordedTable.html
--- old/templates/recordedTable.html 2010-03-16 22:39:13.000000000 +0900
+++ new/templates/recordedTable.html 2011-10-03 21:41:43.000000000 +0900
@@ -18,7 +18,7 @@
dialog:function(id, title){
$('#floatBox4Dialog').dialog({title:'削除',width:500});
var str = '<div class="prg_title">' + title + 'を削除します</div>';
- str += '<form><div style="text-align:center;">録画ファイルも削除する<input type="checkbox" id="delete_file" name="delete_file" value="1" /></div></form>';
+ str += '<form><div style="text-align:center;">録画ファイルも削除する<input type="checkbox" id="delete_file" name="delete_file" checked value="1" /></div></form>';
str +='<div style="margin:2em 0 1em 0;text-align:center;"><a href="javascript:PRG.rec(' + id + ')" class="ui-state-default ui-corner-all ui-dialog-buttonpane button">この録画を本当に削除する</a></div>';
$('#floatBox4Dialog').html(str);
$('#floatBox4Dialog').dialog('open', 'center');
@@ -92,7 +92,7 @@
a img {border:none; }

table#reservation_table {
- width: 960px;
+ width: 1000px;
border: 1px #BBB solid;
border-collapse: collapse;
border-spacing: 0;
@@ -140,9 +140,7 @@

<body>

-<h2>{$sitetitle}</h2>
-
-<p><a href="index.php">番組表に戻る</a></p>
+<div>{$sitetitle}  | <a href="index.php">番組表に戻る</a> | <a href="programTable.php">番組検索</a> | <a href="keywordTable.php">自動録画キーワード管理へ</a> | <a href="reservationTable.php">録画予約一覧</a> |</div>

<div>
絞り込み:
diff -urN old/templates/reservationTable.html new/templates/reservationTable.html
--- old/templates/reservationTable.html 2010-03-16 22:39:13.000000000 +0900
+++ new/templates/reservationTable.html 2011-10-03 21:41:23.000000000 +0900
@@ -69,7 +69,7 @@
a {text-decoration:none;}

table#reservation_table {
- width: 800px;
+ width: 990px;
border: 1px #BBB solid;
border-collapse: collapse;
border-spacing: 0;
@@ -116,9 +116,7 @@

<body>

-<h2>{$sitetitle}</h2>
-
-<div><a href="index.php">番組表に戻る</a></div>
+<div>{$sitetitle}  | <a href="index.php">番組表に戻る</a> | <a href="programTable.php">番組検索</a> | <a href="keywordTable.php">自動録画キーワード管理へ</a> | <a href="recordedTable.php">録画済一覧</a> |</div>

{if count($reservations)}
<table id="reservation_table">