1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ubuntu Desktop 18.10 に PT2 と epgrec UNA を使った録画サーバーを構築する(アプリケーション構築編)3 / 4

Last updated at Posted at 2018-11-12

必要なパッケージのインストール

apt install ntp at nginx php7.2-fpm php7.2-cli mysql-server php7.2-mysql php7.2-xml php-mbstring

各種インストール

at

録画予約に使用するatコマンドをwww-dataユーザーで実行できるように書き換えます。

sed -i".org" 's/www-data//g' /etc/at.deny

MySQL

MySQLの設定ファイルに設定を追記します。

vi /etc/mysql/mysql.conf.d/mysqld.cnf

👉[mysqld]セクションに以下を追加
character-set-server = utf8
sql_mode             = ''

👉MySQLを再起動
service mysql restart

epgrecUNA用のデータベースを作成します。

👉-u(ユーザーは)root。-p(パスワードは)root
mysql -uroot -proot

👉文字コード設定を確認
mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.02 sec)

👉epgrecという名前のデータベースを作成
mysql> create database epgrec;

👉epgrecというデータベースに、epgrecというユーザーがepgrecというパスワードで操作できるようにする
mysql> grant all on epgrec.* to epgrec@localhost identified by 'epgrec';

👉終了
mysql> exit

PHP

👉disable_functions設定を無効に、タイムゾーンを日本に変更する
sed -i".org" 's/^disable_functions/;disable_functions/g' /etc/php/7.2/fpm/php.ini
find /etc/php/7.2/ -name "php.ini" | xargs sudo sed -i".org" 's/^;date.timezone =/date.timezone = "Asia\/Tokyo"/g'

👉PHP-FPM再起動
service php7.2-fpm restart

nginx

epgrecUNA用の設定を追加します。

👉nginxのフォルダーに移動
cd /etc/nginx/

👉デフォルトのルーティング設定を削除
rm sites-enabled/default

👉epgrecUNA用のルーティング設定を追記
vi sites-available/epgrec

👉以下を記述して保存
server {
    listen 80 default_server;
    server_name localhost;

    root /var/www/epgrec;

    charset utf-8;
    index index.php index.html;

    location ~ [^/]\.php {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }
}

👉設定を有効化
cd sites-enabled/
ln -s ../sites-available/epgrec

👉nginx再起動
service nginx restart

epgdump

👉epgdumpフォルダーに移動
cd ~/work/epgdump

👉epgdumpをビルド&インストール
make && make install

epgrecUNA

👉epgrecフォルダーをコピー
cd ../
cp -a epgrec /var/www/

👉epgrecフォルダーの所有者と権限を変更
cd /var/www/epgrec/
chown -R www-data:www-data ../
chmod -R 755 *
chmod 777 templates_c thumbs settings cache

👉録画データを保存するvideoフォルダーは別ディスクにするので、一旦削除
rm -rf video/

録画データ保存用ドライブを接続する

ここまで設定できたら、一旦PCの電源を切り、録画データ保存用ドライブを接続します。
再びPCの電源を入れ、Ubuntuを立ち上げます。

録画データ保存用ドライブのフォーマット

UbuntuのGUIを使ってディスクをフォーマットします。詳しい手順は割愛。1

改めてマウント

マウント用の場所を作成します。

mkdir -p /mnt/share_video

録画データ保存用ドライブのパーティションを確認します。

fdisk -l
  ディスク /dev/sda: 2.7 TiB, 3000592982016 バイト, 5860533168 セクタ
  :
  デバイス   開始位置   最後から     セクタ サイズ タイプ
  /dev/sda1      2048    1050623    1048576   512M EFI システム
  /dev/sda2   1050624 5860532223 5859481600   2.7T Linux ファイルシステム

今回マウントするパーティションは/dev/sda2でした。sda1とかsda2とかは環境によって変わります。
パーティションが分かったら、マウントします。

mount /dev/sda2 /mnt/share_video

録画データを保存するフォルダーを作成します。

mkdir /mnt/share_video/video

録画データをepgrecUNAが保存できるよう所有者と権限を変更します。

chown -R www-data:www-data /mnt/share_video
chmod 777 /mnt/share_video/video

扱いやすいよう、epgrec内にvideoのシンボリックリンクを作ります。

cd /var/www/epgrec/
ln -s /mnt/share_video/video video

👉シンボリックリンクの所有者をwww-dataに変更
chown -h www-data:www-data video

このままだと、再起動すると録画データ保存用ドライブのマウントが解除されてしまうので、自動でマウントするように設定します。

👉録画データ保存用ドライブのUUIDを確認
blkid
  /dev/loop0: TYPE="squashfs"
  :
  /dev/sda2: UUID="英数字の羅列" TYPE="ext4" PARTUUID="英数字の羅列"

👉UUIDの部分を控えておき、設定ファイルの一番下に以下を追記する
vi /etc/fstab

  UUID=上で控えておいたUUIDの文字列。ダブルコーテーションはいらない。 /mnt/share_video ext4 defaults 0 0

👉一旦再起動して本当に自動マウントされているか確認する
reboot

👉再起動後、以下のようになっていればOK
ls -la /mnt/share_video/
  drwxrwxrwx 2 www-data www-data  4096 11月 10 21:59 video

epgrecUNAのセットアップ

後はhttp://localhostにアクセスし、epgrecの設定を進めていきます。
変更が必要な項目を以下に記載します。

MySQLデータベース設定

MySQLホスト名 localhost
MySQL接続ユーザー名 epgrec
MySQL接続パスワード epgrec
使用データベース名 epgrec
テーブル接頭辞 Recorder_

デジタルチューナー設定

地デジチューナーの台数 2
BSチューナーの台数 2
CS録画の有無 行わない

録画関連設定[^2]

録画ファイル名の形式 %TITLE%_%YEAR%%MONTH%%DAY%%HOUR%
[^2]: ここはお好みで

EPGの初回受信中はカードリーダーのアクセスランプが点滅していること、受信終了後に改めてhttp://localhostにアクセスすると、番組表が表示されることを確認します。

もし番組表が正しく表示されない場合は、受信に失敗しているので以下の項目をチェックしましょう。

  • デバイスが認識されていない
ls -la /dev/pt1*
  ls: '/dev/pt1*' にアクセスできません: そのようなファイルやディレクトリはありません

 → 一旦PT2を抜いて起動、もう一回PT2をしっかり挿して起動してみよう。

modprobe pt1_drv

 → ドライバーを読み込んで再起動してみよう。
  それでもだめなら、地獄の始まりだ・・・。

  • チューナーが反応しない
checksignal --device /dev/pt1video0 --lnb 15 211
  Cannot tune to the specified channel

checksignal --device /dev/pt1video1 --lnb 15 211
  Cannot tune to the specified channel

checksignal --device /dev/pt1video2 16
  Cannot tune to the specified channel

checksignal --device /dev/pt1video3 16
  Cannot tune to the specified channel

 → 再起動してみよう。それでもだめなら、地獄の始まりだ・・・。

これまでの手順を実施していればハードウェアの異常以外で正常動作しなかったことがないので、イレギュラーが発生したら地獄の始まりですね・・・。

cron.dに登録

👉定期的に番組表を更新するためのcron設定をコピー
cp -a /var/www/epgrec/cron.d/shepherd /etc/cron.d/

👉必要性は分からないが他と合わせるために所有者と権限を変更
cd /etc/cron.d/
chown root:root shepherd
chmod 644 shepherd

👉どの頻度で番組表を更新するか設定
  私は1日1回でいいと思うので、無難な時間(13:00)に実施するようにしています。
vi shepherd
  0 13 * * *   www-data   /var/www/epgrec/shepherd.php

👉定期的に再起動する設定を追加
  なぜか私の環境では暫くするとチューナーが反応しなくなるので、1日1回OSを再起動するようにしています。
cp -a shepherd reboot
vi reboot
  0 14 * * *   root       reboot

2020/4/26追記 録画に失敗することが度々あったため試行錯誤の末

毎クール必ず1・2回録画に失敗することがあり、どうにかならないか試行錯誤しました。(最終回の録画に失敗したときはお腹が痛くなりますよね)
色々試した結果、2020年冬アニメを乗り切り、2020年春アニメも今の所録画に失敗していないので方法を記載します。
※1日2本録画する程度の使い方での結果なので、ヘビーに使うと結局録画失敗するのかもしれませんが、私の環境では今の所有効かも?という方法です。

概要

毎日ubuntuのアップデートと再起動を行い、dkmsの再設定を行います。

スクリプトを格納するフォルダーを作成

# 面倒なので私はworkフォルダーに放り込んでいます
mkdir -m 777 work
cd work/

Ubuntuのアップデートを行うスクリプトを作成

vi update.sh
~
内容は以下の通り
~
chmod 777 update.sh
update.sh
#!/bin/bash

nowdt=$(date)
echo "------------------------"
echo "update開始 - ${nowdt}"
apt update
apt upgrade -y
apt autoremove -y
echo "終了 - ${nowdt}"
reboot

modproveを再設定するスクリプトを作成

vi modprove.sh
~
内容は以下の通り
~
chmod 777 modprove.sh
modprove.sh
#!/bin/bash

nowdt=$(date)
echo "dkms再インストール開始 - ${nowdt}"
dkms remove -m pt1 -v 17b4f7b5dccb --all
dkms status
dkms add -m pt1 -v 17b4f7b5dccb
/usr/lib/dkms/dkms_autoinstaller start
dkms status
modprobe pt1_drv
lsmod | grep pt1_drv
ls -la /dev/pt1*
recpt1 --b25 --strip 103 10 /tmp/test.ts --device /dev/pt1video0
recpt1 --b25 --strip 103 10 /tmp/test.ts --device /dev/pt1video1
recpt1 --b25 --strip 16 10 /tmp/test.ts --device /dev/pt1video2
recpt1 --b25 --strip 16 10 /tmp/test.ts --device /dev/pt1video3
echo "終了 - ${nowdt}"

cron.dに設定

cd /etc/cron.d
vi update
~
内容は以下の通り
update
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 15 * * *   root       /bin/bash       /root/work/update.sh >> /var/log/work/update.log 2>&1
cd /etc/cron.d
vi modprove
~
内容は以下の通り
modprove
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

15 15 * * *   root      /bin/bash       /root/work/modprove.sh >> /var/log/work/update.log 2>&1

何してるの?

どうもubuntuのカーネルバージョンが変わった場合、dkmsのpt1設定に新しいカーネルのバージョンが追加されるのですが、古い設定はそのままになるようです。この状態になるとエラーが発生するようになったので、常に新しいカーネルのバージョン設定のみになるようにしています。

また、

ls -la /dev/pt1*
  ls: '/dev/pt1*' にアクセスできません: そのようなファイルやディレクトリはありません

となっても、 modprobe pt1_drv を実行すると認識されることがあったため、cronで常にmodprobeを実行するようにしています。

(追記終わり)

Ex.アップデートログを確認できるようにする

アップデートログを表示するPHPを作ります。

cd epgrecのフォルダーパス
vi update_log.php
~
内容は以下の通り
~
chown www-data:www-data update_log.php
chmod 777 update_log.php
update_log.php
<?php
include('config.php');
include_once( INSTALL_PATH . '/Smarty/Smarty.class.php' );

$smarty = new Smarty();

// 4000バイト分表示します
$offset  = 4000;
$logPath = '/var/log/work/update.log';

// ファイルの内容が4000バイトに満たない場合は最初から表示します
if (filesize($logPath) < $offset) {
    $offset = 0;
} else {
    $offset = $offset * -1;
}

$t = file_get_contents($logPath, false, null, $offset);
$smarty->assign( 'log' , $t);
$smarty->display( 'updateLog.html' );
?>
cd templates/
vi updateLog.html
~
内容は以下の通り
~
chown www-data:www-data updateLog.html
chmod 777 updateLog.html
updateLog.html
<!DOCTYPE html>
<meta charset="utf-8">
<title>アップデートログ</title>

<pre>{$log}</pre>

これで録画環境が整いました。
次はWindowsマシンから録画した番組を見られるよう、共有設定を行っていきます。

次: Ubuntu Desktop 18.10 に PT2 と epgrec UNA を使った録画サーバーを構築する(共有設定編)4 / 4

参考文献

epgrec UNAインストール手順(Ubuntu・Debian編)

  1. 実は今回使用した録画データ保存用ドライブは一旦Ubuntuを入れて、ぶっ壊れた古いディスクからデータを救出しておいたので、フォーマット単体で実行したことがないため、詳しい手順は知らないのだ…。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?