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-TrailとNT-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 => 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
にアクセスして画面の指示通りに設定を進めてください。
設定画面は非常に解り易く作られているので、説明を見ながらでも十分に設定可能です。
※今回、色々と試行錯誤したため、スクリーンショットは取り損ねました。以前のスクリーンショットをのせておくので、雰囲気だけでもつかんでください。
録画ファイル名の形式やその他の設定値について
個人的なメモです。『%YEAR%%MONTH%%DAY%_%HOUR%%MIN%_%TYPE%%CH%_%TITLE%』で運用してみます。
あと、ページに表示する番組表の長さは、Apacheの場合には8時間程度にしておかないと遅くて我慢できませんが、nginx+php7.0-fpmの場合には、24時間にしても十分に速い為、24時間にしました。
番組表更新の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}
参考にしたページ
下記のページを参考にさせていただきました。
- 適当な何かの別館
- MySQL5.6リファレンス(検索ページでから文字で更新エラーが出たので参考にしました)
最後に
今回、Ubuntu16.04はINTEL製のSSDへインストールし、録画領域には500GBの2.5inchのHDDを使用しております。UEFI BIOSとSSDの組み合わせは凄まじい速さで、再起動に10秒もかからないので、セットアップ中にストレスなく作業できました。ただ、SSDは書き込み回数が心配なので、DBのファイルやTS等、書き換えが多発する部分をHDDに振り分ける設定としました。
備忘。
MySQLの調査で使ったコマンド。
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
vi /etc/mysql/my.cnf
の所なのですが,16.04では14.04と違い.
[client]
default-character-set=utf8
などと付け加えることをができないようです.
また「適当な何かの別館」さんのパスワードである「****」ではもうDLできないようです.
>の所なのですが,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できないようです.
パスワードは伏字に変更させて頂きました。
先方でパスワードを設定している以上、申し訳ありませんが、こちらでは何もお答えできません。
lasasさん、初めまして。
PT2/3+epgrecの環境構築の時には毎回参考にさせていただいており、非常に助かっております。ありがとうございます。
今回、サーバ機リフレッシュのため、この記事の通りに構成し、local環境では無事に番組表を見れるまで出来ました。
ここからが質問なのですが、今回の環境で外部(wan)からこのサーバ機へアクセスして予約などをしたく、nginxの設定をやっていたのですが、番組表が見れない状態です。
nginxのsites-enable/defaultのservernameは、私が取得しているドメインに書き換えています。このドメインを使ったssh、htmlページへのアクセス、phpinfo()の表示、epgrecディレクトリ内に配置したファイルを用いたphpinfo()の表示は問題なく行えています。
しかし、epgrec/index.phpにアクセスするとレスポンスで200が返ってきているにもかかわらずページは真っ白で、エラーをlogに吐き出す設定を行ってもエラーが全く出ないといった状態で、恥ずかしながら悩んでおります。このような場合、どのようにすれば良いかわかりますでしょうか?
拙い説明で、かつ記事から離れた内容で申し訳ありませんが、もし何かわかればご指摘いただけないでしょうか。よろしくお願い致します。
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認証を適用しまして、不特定多数の人間が何もなしにアクセスはできない状態にして運用しようかと思っております。ただこれではセキュリティ的にはまだまだ甘いと思うので、暇を見つけて安全にしていこうと思います。
本導入記事と素早いお返事に、改めてお礼申し上げます。
ありがとうございました。
(このコメントが、同じ壁にぶち当たった方の助けになればいいのですが。)
動作報告ありがとうございます。同件で困っている人にはありがたい投稿になると思います。
現状、調べているだけの余裕が無いので、nginxとphp-fpmを連携させるにあたり、リバースプロキシを使っているのがいけないのかとも思いましたが、epgrecの設定の見直しを含めて、調査してみてもいいかもしれませんね。
一つ、提案ですが、OpenVPNをインストールして、VPN経由でのみアクセスできるようにしてはどうでしょうか?
ウェブ画面を直接公開しないだけでも、かなりセキュリティが上がると思いますよ。
install/step~を複数回動かすと、もしかしたらマスタデータが2重登録されるかもしれません。
番組検索時に同じカテゴリが2つ表示されたりですね。
対策完了後、一通りのページにアクセスし、デグ確してみることをお勧めします。
いつもお世話になっております。rhejrと申します。^^
いつも素晴らしい記事で勉強してます。
1つお願いがありますが現在pt3は生産終了になってますね。。
plex社のPX-Q3PE+Ubuntu16.04 LTS+epgrec unaの記事の予定はありますか?
もし可能でしたらお願いしたと思います。
お返事お願いできますか?^^
よろしくお願いします。
>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_ehdです。
https://github.com/knight-rider/ptx
上記のドライバーはどうでしょうか?
ご検討ください。
よろしくお願いします。
情報ありがとうございます。
内容を確認したところ、動きそうな気がしますね。
作者さんが精力的に開発してくださっているようですし。
空いているPCが無いので、余裕が出来たらサーバのリプレースにあわせて試してみます。
楽しみにしてます^^
よろしくお願いします^^
お世話になっております。
「recpt1の用意」の部分なのですが、新規導入の場合以下の記載も必要ではないでしょうか?ご検証の程よろしくお願いいたします。
cd /tmp
wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
unzip c44e16dbb0e2.zip
cd pt1-c44e16dbb0e2/arib25
make clean && make && make install
cd /tmp
wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
tar -jxvf tip.tar.bz2
cd /tmp/pt1-c8688d7d6382/recpt1
お世話になっております。
「適当な何かの別館」さまのページで
lasas様がご指摘している以下のコメント
lasas 2016/05/01 15:15 お世話になっております。
epgrecUNAの開発、ありがとうございます。
下記の環境でセットアップを行ったところ、『PHP Fatal error: Smarty error: [in programTable.html line 666]: syntax error: unidentified token ‘0x3f’』エラーが発生しました。
<セットアップした環境>
・Ubuntu16.04 LTS
・mysql 5.7
・php7.0
<暫定修正内容>
取り急ぎ、他の箇所も動かして動作確認をするのが目的だったため、下記の暫定修正で動かしてしまいましたが、後学の為、きちんとした修正の仕方を教えていただけないでしょうか?
programTable.htmlの修正箇所
666行目:{if $k_category != 15 || $k_sub_genre>=63 }
679行目: 曜日:{if $weekofday == 127}なし{else}{$wds_name}{/if}
また、MySQL5.7ですと、sql_modeのデフォルト設定変更に伴い、から文字をエラーとする設定がデフォルトとなっており、Recorder_keywordTblにtypeEX=”を入れようとすると『Incorrect integer value: ” for column ‘typeEX’ at row 1』が発生するようですね。
↑
これを実行しないと「番組検索」ができない状態となっておりました。
もし可能でしたら記事に反映していただけると嬉しいです。よろしくお願いします。
ご返信が遅れ申し訳ありません。
検索ページを開いた際に真っ白になるようでしたら、その際のウェブサーバの動作ログに何か出ていませんか?