必要なパッケージのインストール
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% |
---|
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
#!/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
#!/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
~
内容は以下の通り
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
~
内容は以下の通り
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
<?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
<!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編)
-
実は今回使用した録画データ保存用ドライブは一旦Ubuntuを入れて、ぶっ壊れた古いディスクからデータを救出しておいたので、フォーマット単体で実行したことがないため、詳しい手順は知らないのだ…。 ↩