Ubuntu16.04 LTS上へepgrecUNA環境を構築する


epgrecUNAをUbuntu16.04へインストールした際の備忘録です。まだ動作確認中のステータスかつ、試行錯誤した結果をまとめただけですので、自己責任にてお願いします。

構築条件

  • Ubuntu16.04 LTS
  • HDDは500G以上を推奨(500Gだと最高画質の30分4Gで計算すると50時間強)。
  • epgrecUNA版+ pt2/pt3の計2枚
  • nginxを利用(Apacheは使っていないので注意)
  • mysql5.7
  • php7.0

必要なハードウェア

OSがwindowsではなくLinuxなので、純粋に必要なハードウェア代金のみ。PT3は生産中止なので、Amazonではプレミアがついてしまっています。PT4?の登場に期待ですね。

  • サーバ本体(格安サーバか、80plus gold以上の電源で構築。メモリは最低2Gbyte。個人的にはBay-TrailNT-ITX/PW120Plusで作りたい。)
  • pt3
  • カードリーダ
  • 低消費電力HDD(運用して気づきましたが、1TB以上が無難です。低容量だとすぐにHDDがあふれてしまうので。)
  • H.264エンコードもするなら、Pentium以上のCPUを推奨

BSも見れると番組の幅が広がります。セルフで工事する分には最安6000円でBSを映せるはずです。BS/CSの環境整備については衛星放送(BS/CS) 録画/視聴のまとめを参照。

Ubuntuのインストール

Ubuntu16.04 LTSのインストールと初期設定』を参照してインストールを済ませておいてください。特記事項は特にありません。IPアドレスは固定IPにしておいた方が良いと思います。

ntpのインストール

sudo apt-get install ntp

MySQL、nginx、PHP等のインストール

apacheで環境構築するのが普通ですが、今回はApacheを使いません。かわりに軽量のHTTPとリバースプロキシのサーバを兼ねたnginxを使います。更にnginxでリバースプロキシの設定を行い、epgrecはphp7.0-fpmで動かすことにします。

sudo apt-get install nginx php7.0-fpm php7.0-cli mysql-server mysql-client php7.0-mysql mercurial php7.0-xml php7.0-mbstring

at.denyの修正

at.denyが設定されていると予約が出来ないので、/etc/at.denyを修正します。面倒なのでsedコマンドで。

# 以降、rootユーザーでの作業となるので、rootになっておく。
sudo su -
sed -i 's/www-data//g' /etc/at.deny

php.iniの修正

はまりやすい箇所のようなので、書き方を工夫しました。/etc/php5以下のphp.iniは全部修正してください。

# php.iniのすべてに対して、disable_functionsのコメントアウトと、date.timezoneの設定を行う。
# findでphp.iniを検索して、他にも該当ファイルがあればそれらも修正してください。
find /etc/php/7.0 -name php.ini

cp /etc/php/7.0/fpm/php.ini /etc/php/7.0/fpm/php.ini.bak
sed -i 's/disable_functions/;disable_functions/g' /etc/php/7.0/fpm/php.ini
sed -i 's/;date.timezone =/date.timezone = "Asia\/Tokyo"/g' /etc/php/7.0/fpm/php.ini

diff /etc/php/7.0/fpm/php.ini /etc/php/7.0/fpm/php.ini.bak

cp /etc/php/7.0/cli/php.ini /etc/php/7.0/cli/php.ini.bak
sed -i 's/disable_functions/;disable_functions/g' /etc/php/7.0/cli/php.ini
sed -i 's/;date.timezone =/date.timezone = "Asia\/Tokyo"/g' /etc/php/7.0/cli/php.ini

diff /etc/php/7.0/cli/php.ini /etc/php/7.0/cli/php.ini.bak

MySQLのインストールと設定

MySQL5.7は結構はまりました。apt-getでインストールした後に、ロケール設定をutf-8に切り替えるだけだと、デフォルト値設定のある列にから文字を入れようとして『Incorrect integer value: ” for column ‘typeEX’ at row 1』が発生してしまうので、sql_modeの設定変更も必要です。

vi /etc/mysql/my.cnf

/etc/mysql/my.cnfの中の[client]の下に下記の設定を付け加えます。

[client]
default-character-set=utf8

/etc/mysql/mysql.conf.d/mysqld.cnfの中の[mysqld]の下に下記の設定を付け加えます。

vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
character-set-server=utf8
sql-mode = ''
service mysql restart

# 念の為、MySQLが起動している事を確認しておく
ps aux | grep mysql

DBを作成します。

mysql -uroot -p
create database epgrec;
grant all on epgrec.* to epgrec@localhost identified by 'yourpassword';
flush privileges;

PT3とepgrecの下準備

epgrecのセットアップ前にPT2/PT3のドライバをインストールして、USBカードリーダを使えるようにしておきます。

# 共通して必要なソフトのインストール
sudo apt-get install pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools git build-essential autoconf unzip pkg-config

pcsc_scan | grep "Japanese Chijou Digital"

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

sudo su -
cd /tmp
echo "blacklist earth_pt3" >> /etc/modprobe.d/blacklist.conf
git clone https://github.com/m-tsudo/pt3.git
cd pt3/
make clean && make && sudo make install
reboot

# 再起動後に、/dev/pt3video0~3がある事を確認する。
ls -la /dev/pt*video*

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

PT3のみの人は無視してください。最近、PT2用のドライバは改変なしでカーネル3.8.0以上に対応できるようです。コミットログにもそのようにコメントがありましたので。

sudo su -
cd /tmp
rmmod earth_pt1
echo "blacklist earth-pt1" >> /etc/modprobe.d/blacklist.conf

hg clone http://hg.honeyplanet.jp/pt1.oyama/ pt2
vi pt2/driver/pt1_pci.c

## pt1_pci.cのincludeが並んでいる箇所に下記を追加する。
#include <linux/vmalloc.h>
make clean && make && sudo make install
reboot

# 再起動後に、/dev/pt1video0~3がある事を確認する。
ls -la /dev/pt*video*

recpt1の用意

新本家の最新版にrecpt1 httpサーバ機能追加パッチを適用します。パッチは『適当な何かの別館』さんより事前にダウンロードさせて頂き、sambaなりscpなりで、Linuxサーバ上の/tmpに格納しておいてください。

cd /tmp
wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
tar -jxvf tip.tar.bz2
tar -zxvf recpt1-http-rev4.tar.gz

patch -p2 -d pt1-c8688d7d6382/recpt1/ < recpt1-http-rev4/recpt1-http.diff

cd /tmp/pt1-c8688d7d6382/recpt1/
wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2

cd /tmp/pt1-c8688d7d6382/recpt1

# PT2/3混在環境の場合にはpt1_dev.hの/dev/pt1video**を
# 必要個数、pt3video**のようにPT3用に書き換えます。
# PT1/PT2のみの場合には、pt1_dev.hの書き換えの必要はありません。

# pt3のみの環境の場合には、sedで一括置換でOKです。
sed -i 's/pt1video/pt3video/g' pt1_dev.h

./autogen.sh
./configure --enable-b25; make ; sudo make install
recpt1 -version

# 下記のように出力されればOK。

# recpt1 1.2.0
# recorder command for PT1/2 digital tuner.

# 序に録画テストも行っておく
cd /tmp
recpt1 --b25 --strip 27 20 test.ts

UNA版の必要ソフトウェアのダウンロード

作者さんが公開してくださっているので、適当な何かの別館このページから次の3ファイルをダウンロードし、サーバの/tmpにコピー(Linuxホストからはscp、windowsからならwinscpを利用)して下さい。ダウンロード時にパスワードが必要ですが、作者さんのサイト適当な何かの別館をきちんと見ればわかります(気付くのに1時間ぐらいかかりましたが)。

  • epgrecUNA_151114.tar.gz
  • epgrecUNA151114Fix1.tar.gz
  • epgrecUNA151114Fix2.tar.gz
  • epgdumpUNA160127.tar.gz

epgdump(UNA版)のインストール

epgdump、epgrecはwinscp等で予め/tmpディレクトリに上記をアップロードしておき、Fix1、Fix2をオリジナルの該当ファイルと差し替えておいてください(ファイルの差し替えは単純作業なので、特に解説しません)。


cd /tmp

tar -zxvf epgdumpUNA160127.tar.gz

cd /tmp/epgdump
make && sudo make install

cd /tmp
# recpt1のテストで出力したTSファイルから番組表が取得できるか確認する。
epgdump  27 test.ts test.xml -xml

# xmlファイルが出来ている事を確認しておく。
cat test.xml

epgrec(UNA版)のインストール

/tmp以下でFix1、Fix2をあてた状態にしてある前提で話を進めます。

mv epgrec /var/www/html/

chown -R www-data:www-data /var/www/html/epgrec
cd /var/www/html/epgrec

chmod 777 /var/www/html/epgrec/templates_c
chmod 777 /var/www/html/epgrec/video
chmod 777 /var/www/html/epgrec/thumbs
chmod 777 /var/www/html/epgrec/settings
chmod 777 /var/www/html/epgrec/cache
vi config.php

config.phpは設定方法がきちんと書かれているので、コメントを読みながら調整します。今回は下記のようにしました。

define( 'TUNER_UNIT1', 2 );  // 0 =&gt; 2に変更。PT3が2枚なら4。

nginxの設定を行う

下記の設定を追記。デフォルトで他の設定があったらコメントアウトでOK。

vi /etc/nginx/sites-enabled/default

変更した後の設定は下記のとおり。

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        index index.html index.htm index.php;
        server_name _;
        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
}

 

service nginx restart

ブラウザから設定を行う

http://ipアドレス/epgrec

にアクセスして画面の指示通りに設定を進めてください。

設定画面は非常に解り易く作られているので、説明を見ながらでも十分に設定可能です。

※今回、色々と試行錯誤したため、スクリーンショットは取り損ねました。以前のスクリーンショットをのせておくので、雰囲気だけでもつかんでください。

usblinux_with_epgrec_UNA10

録画ファイル名の形式やその他の設定値について

個人的なメモです。『%YEAR%%MONTH%%DAY%_%HOUR%%MIN%_%TYPE%%CH%_%TITLE%』で運用してみます。

あと、ページに表示する番組表の長さは、Apacheの場合には8時間程度にしておかないと遅くて我慢できませんが、nginx+php7.0-fpmの場合には、24時間にしても十分に速い為、24時間にしました。

usblinux_with_epgrec_UNA11

番組表更新のgetepgをcronに登録する

sudo cp /var/www/html/epgrec/cron.d/shepherd /etc/cron.d/
sudo vi /etc/cron.d/shepherd

# getepgの実行時間は適宜変更します。
# デフォルトだと、2時間おきに○時29分になったら番組表の更新処理がされるみたいです。
# 作者さんのデフォルトの指定がベストチョイスだったのでそのままにしました。
# あと、/var/www/htmlのところのパスは、epgrecインストール先のパスとあっていることを確認してください。
29 */2 * * *   www-data /var/www/html/epgrec/shepherd.php

番組検索画面での検索エラー対策について

/var/www/html/epgrec/templates/programTable.htmlを下記のように修正して、暫定的に動くようにしました。PHPは殆ど触ったことが無いので、カンで『とりあえず動く状態』にはしてみましたが、直し方があっているかは分かりません。作者様の対応を待ちます 作者様より、下記の修正でOKとの事でした。

diff programTable.html programTable.html.bak
666c666
< {if $k_category != 15 || $k_sub_genre>=63 }
---
> {if $k_category != 15 || $k_sub_genre>=0x3f }
679c679
<   <b> 曜日:</b>{if $weekofday == 127}なし{else}{$wds_name}{/if}
---
>   <b> 曜日:</b>{if $weekofday == 0x7f}なし{else}{$wds_name}{/if}

参考にしたページ

下記のページを参考にさせていただきました。

最後に

今回、Ubuntu16.04はINTEL製のSSDへインストールし、録画領域には500GBの2.5inchのHDDを使用しております。UEFI BIOSとSSDの組み合わせは凄まじい速さで、再起動に10秒もかからないので、セットアップ中にストレスなく作業できました。ただ、SSDは書き込み回数が心配なので、DBのファイルやTS等、書き換えが多発する部分をHDDに振り分ける設定としました。

タグ付けされた , , , . ブックマークする へのパーマリンク.

15 Responses to Ubuntu16.04 LTS上へepgrecUNA環境を構築する

  1. lasas 曰く:

    備忘。

    MySQLの調査で使ったコマンド。
    SELECT @@GLOBAL.sql_mode;
    SELECT @@SESSION.sql_mode;

  2. massa 曰く:

    vi /etc/mysql/my.cnf
    の所なのですが,16.04では14.04と違い.
    [client]
    default-character-set=utf8
    などと付け加えることをができないようです.

    また「適当な何かの別館」さんのパスワードである「****」ではもうDLできないようです.

    • lasas 曰く:

      >の所なのですが,16.04では14.04と違い.
      最近のディストリビューションでは、includeで設定を読み込むのが主流のようで、includedirの先のファイルに記載してもいいとは思いますが、わかりやすいようにmy.cnfに追記しています。
      下記のようにして正常に起動できることを確認していますが、出来ませんでしたか?
      !includedir /etc/mysql/conf.d/
      !includedir /etc/mysql/mysql.conf.d/
      [client]
      default-character-set=utf8

      >また「適当な何かの別館」さんのパスワードである「****」ではもうDLできないようです.
      パスワードは伏字に変更させて頂きました。
      先方でパスワードを設定している以上、申し訳ありませんが、こちらでは何もお答えできません。

  3. さつき 曰く:

    lasasさん、初めまして。
    PT2/3+epgrecの環境構築の時には毎回参考にさせていただいており、非常に助かっております。ありがとうございます。
    今回、サーバ機リフレッシュのため、この記事の通りに構成し、local環境では無事に番組表を見れるまで出来ました。

    ここからが質問なのですが、今回の環境で外部(wan)からこのサーバ機へアクセスして予約などをしたく、nginxの設定をやっていたのですが、番組表が見れない状態です。
    nginxのsites-enable/defaultのservernameは、私が取得しているドメインに書き換えています。このドメインを使ったssh、htmlページへのアクセス、phpinfo()の表示、epgrecディレクトリ内に配置したファイルを用いたphpinfo()の表示は問題なく行えています。
    しかし、epgrec/index.phpにアクセスするとレスポンスで200が返ってきているにもかかわらずページは真っ白で、エラーをlogに吐き出す設定を行ってもエラーが全く出ないといった状態で、恥ずかしながら悩んでおります。このような場合、どのようにすれば良いかわかりますでしょうか?

    拙い説明で、かつ記事から離れた内容で申し訳ありませんが、もし何かわかればご指摘いただけないでしょうか。よろしくお願い致します。

    • lasas 曰く:

      1.ローカルPCからのアクセスでは、hostsを書き換えた状態で、取得したドメインあてにアクセスした場合は、上手く表示されますか?
      <ローカルPCのhosts設定例>
      192.168.1.200 yourdomain.com.sample

      2.WAN側からDNSをひいてアクセスした場合のアクセス時のアクセスログ、エラーログは上記1.と比べて違う点はありますか?
      <nginxのデフォルトのログ出力先>
      /var/log/nginx

      3.epgrecの設定で、外部アクセス時のURLを設定する箇所があったと記憶しています。
        その設定はあっていますか?
        http://xxx.xxx.xxx.xxx/epgrec/install/step2.php <最初にアクセスするのは、step1.phpで次ページがstep2.php。

        なお、設定すると、/var/www/html/epgrec/settings/config.xmlに内容が反映されたと思います。

      • さつき 曰く:

        lasasさん、早速のお返事ありがとうございました。
        質問した後、Desktop版でやったのがよくなかったのかと思い16.04LTSのserver版で再セットアップしておりました。

        しかしながら状況は変わらず、頂いたコメントも実践してみましたが外部接続とLAN接続でlogに変化もなく、どうしたもんかと。

        こんな時はコードだ、と思いソースコードを眺めておりましたらこのような記述を発見しました。

        config.phpの最後の方です。
        “グローバルIPからのアクセスにHTTP認証が設定されていません”
        どうやら不正アクセス対策で、WAN側からの接続(グローバルIPアクセス)にはHTTP認証を必須としていたようです。
        UNA作者様のUNA紹介ページ → http://d.hatena.ne.jp/katauna/20200101
        早速NginxにHTTPBasic認証を設定しましたが、設定の仕方がよくなかったのか、うまくBasic認証が通っていることをUNA側が認識できず。結局自分がもがいた限りではそのままではWAN接続不可という結果でした。

        一応、応急措置としてUNA側のHTTP認証チェック部をコメントアウト&NginxのconfにHTTP Basic認証を適用しまして、不特定多数の人間が何もなしにアクセスはできない状態にして運用しようかと思っております。ただこれではセキュリティ的にはまだまだ甘いと思うので、暇を見つけて安全にしていこうと思います。

        本導入記事と素早いお返事に、改めてお礼申し上げます。
        ありがとうございました。

        (このコメントが、同じ壁にぶち当たった方の助けになればいいのですが。)

        • lasas 曰く:

          動作報告ありがとうございます。同件で困っている人にはありがたい投稿になると思います。
          現状、調べているだけの余裕が無いので、nginxとphp-fpmを連携させるにあたり、リバースプロキシを使っているのがいけないのかとも思いましたが、epgrecの設定の見直しを含めて、調査してみてもいいかもしれませんね。

          一つ、提案ですが、OpenVPNをインストールして、VPN経由でのみアクセスできるようにしてはどうでしょうか?
          ウェブ画面を直接公開しないだけでも、かなりセキュリティが上がると思いますよ。

  4. lasas 曰く:

    install/step~を複数回動かすと、もしかしたらマスタデータが2重登録されるかもしれません。

    番組検索時に同じカテゴリが2つ表示されたりですね。
    対策完了後、一通りのページにアクセスし、デグ確してみることをお勧めします。

  5. rhejr 曰く:

    いつもお世話になっております。rhejrと申します。^^

    いつも素晴らしい記事で勉強してます。

    1つお願いがありますが現在pt3は生産終了になってますね。。

    plex社のPX-Q3PE+Ubuntu16.04 LTS+epgrec unaの記事の予定はありますか?

    もし可能でしたらお願いしたと思います。

    お返事お願いできますか?^^

    よろしくお願いします。

    • lasas 曰く:

      >plex社のPX-Q3PE+Ubuntu16.04 LTS+epgrec unaの記事の予定はありますか?
      ドライバのソースコードが公開されていない為、出来ません。

      もう少し書くと、PX-Q3PEのドライバは公開はされていますが、CentOS6.xでしか使えないんですよね。
      ですので、Ubuntuでは難しいと思います。
      # もし、ソースコードがどこかに公開されていたら教えてください。

      ちなみに、ドライバのダウンロード先は下記です。
      http://plex-net.co.jp/plex/px-w3pe/PX-W3PE_ver.1.0.7.zip

      • rhejr 曰く:

        お世話になっております。rhejr_ehdです。
        https://github.com/knight-rider/ptx
        上記のドライバーはどうでしょうか?
        ご検討ください。
        よろしくお願いします。

        • lasas 曰く:

          情報ありがとうございます。

          内容を確認したところ、動きそうな気がしますね。
          作者さんが精力的に開発してくださっているようですし。

          空いているPCが無いので、余裕が出来たらサーバのリプレースにあわせて試してみます。

          • rhejr 曰く:

            楽しみにしてます^^

            よろしくお願いします^^

  6. torennto 曰く:

    16.10で構築する時にお世話になりました、pt2での運用ですが何故か番組検索だけが表示されませんUNAに関しては記述どおりにインストールしたはずなんですが、他はスムーズに動いておりまして録画にかんしてもできております。nginxの設定でハマったのでそこかもしれませんがよくわかりません、番組検索画面での検索エラー対策については修正されているようです、真っ白い表示にしかなりません他は正常に動いてるようです。

    • lasas 曰く:

      ご返信が遅れ申し訳ありません。
      検索ページを開いた際に真っ白になるようでしたら、その際のウェブサーバの動作ログに何か出ていませんか?

コメントを残す

メールアドレスが公開されることはありません。