archlinuxに録画サーバーを構築してみた

# はじめに
この記事はarchlinuxに録画サーバーを構築する手順紹介（備忘録）です。MirakurunとEPGStationを使って構築しました。
※元作業の関係上、基本的にルートユーザーで作業を行っています。

# 録画サーバー構築
## 必要ライブラリのインストール
`pacman`でインストールするライブラリを先に一括でインストールしておきます。
```sh
pacman -S --noconfirm ffmpeg pcsc-tools cmake autoconf autoconf ccid opensc v4l-utils libdvbpsi unzip pacman-contrib fzf mysql
pacman -S --needed --noconfirm base-devel
```


## B_CASカードの動作確認
B_CASカードをPCに接続する。
```sh
# pcscd.serviceの起動、有効化（カードリーダーを使うサービスっぽい）
systemctl enable pcscd
systemctl start pcscd
systemctl status pcscd

# B_CASカードの動作確認
pcsc_scan
一番下に以下のメッセージが出ていればOK
Japanese Chijou Digital B-CAS Card (pay TV)
（確認ができたら ctrl + cで抜ける）
```

## mirukurunのインストール
※このタイミングでテレビTVチューナーをPCに接続しておきます。
```sh
# 必要なモジュール（pm2やmirukurun）をインストールする
npm install pm2 -g
npm install mirakurun -g --unsafe-perm --production
npm install arib-b25-stream-test -g --unsafe-perm

# 今回使った PX-S1UD/PX-Q1UD （チューナー）はLinuxの標準ドライバで動作するため、Mirakurunが自動でチューナーの認識を行うため、yamlファイルを削除する（念の為リネームにしているが、tuners.yml が存在するとうまく動かないため要注意）
# 他のチューナーを使う場合は設定が必要かも知れない
mv /usr/local/etc/mirakurun/tuners.yml /usr/local/etc/mirakurun/tuners.yml.org

# 再起動
mirakurun restart

# 接続確認（作業用PCのウェブブラウザから接続する）
http://192.168.XXX.XXX:40772
画面が表示されればOK
```


## mysqlのセットアップ
EPGStationがMySQLを使用するためセットアップします。今回は[archlinux wiki](https://wiki.archlinux.jp/index.php/MariaDB)を参考にセットアップしました。

```sh
mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
systemctl enable mysql
systemctl start mysql
systemctl status mysql
```
##### データベースの作成

```sh
# EPGStationに必要なDBを作成
mysql -uroot
>>> SQL操作 >>>
# 現在のデータベース一覧
show databases;
# DB作成
create database epgstation;
# ユーザー追加
# identified by の後ろはパスワードなので、任意のものを設定する
create user 'epgstation'@'localhost' identified by 'epgstationpassword';
# ユーザーの権限確認
show grants for epgstation@localhost;
# ユーザーに権限追加
grant all on epgstation.* to epgstation@localhost;
# ユーザーの権限確認
show grants for epgstation@localhost;
# mysqlから抜ける
quit;
<<< SQL操作 <<<

# epgstationユーザーでの接続確認
# -p続文字列はパスワードなので、上で設定したものを入力する
mysql -u epgstation -pepgstationpassword

>>> SQL操作 >>>
# db確認 epgstation があるはず
show databases;
# epgstationに接続
use epgstation;
# テーブル一覧（まだ何もない）
show tables;
# mysqlから抜ける
quit;
<<< SQL操作 <<<
```

##### MysQLの設定変更（HDDを使うようにする）
今回は録画データ類は全て外付けのHDDに保存したいので、DBのストレージ領域もHDDに変更します。
```sh
# 現在の設定値を確認する
mysql -u epgstation -pepgstationpassword
>>> SQL操作 >>>
# 現在のdatadirの値を確認する
select @@datadir;
> /var/lib/mysql/
quit;
<<< SQL操作 <<<

# mysqlの停止
systemctl stop mysql
systemctl status mysql

# 起動時に読み込まれる設定ファイルを書き換える
cp -p /etc/my.cnf /etc/my.cnf.bkup
vim /etc/my.cnf
>>>
# 以下を追記
[mysqld]
datadir='/nas/mysql'
<<<
# 現在のデータをコピーする（ディレクトリごとコピー）
cp -rp /var/lib/mysql /nas/mysql
# 元のディレクトリをリネームする
mv /var/lib/mysql /var/lib/mysql_old

# mysqlの再起動
systemctl start mysql
systemctl status mysql
# 接続・動作確認
mysql -u epgstation -pepgstationpassword
>>> SQL操作 >>>
# datadirの値を確認する
select @@datadir;
> /nas/mysql/
quit;
<<< SQL操作 <<<
```


## EPGStationのインストール
```sh
# 作業用ディレクトリの作成
mkdir -p /root/work

# gitclone
cd /root/work
git clone https://github.com/l3tnun/EPGStation.git

# ビルド作業を行う（少し時間がかかる）
cd EPGStation
npm run all-install
npm run build

# 設定ファイルのコピー
cp config/config.yml.template config/config.yml
cp config/operatorLogConfig.sample.yml config/operatorLogConfig.yml
cp config/epgUpdaterLogConfig.sample.yml config/epgUpdaterLogConfig.yml
cp config/serviceLogConfig.sample.yml config/serviceLogConfig.yml 
cp config/enc.js.template config/enc.js
```


##### EPGStationの初期設定
接続URL、使用DBの設定などを行います。
```sh
# EPGStationの設定変更
vim /root/work/EPGStation/config/config.yml
>>>
# mirakurunPathを以下に変更
mirakurunPath: http://localhost:40772

# 以下をコメントアウト
dbtype: sqlite
 sqlite:
   extensions:
     - '/hoge/regexp.dylib'
   regexp: true
# 以下のコメントアウトを外し、設定する
dbtype: mysql
mysql:
    host: localhost
    port: 3306
    user: epgstation
    password: epgstationpassword
    database: epgstation
    charset: utf8mb4

# 以下に変更（環境で which ffmpeg 等を実行し、パスを確認する）
ffmpeg: /usr/bin/ffmpeg
ffprobe: /usr/bin/ffprobe
<<<
```

##### EPGStationの録画保存先をHDDにする
今回は録画データ類を外付けのHDDに保存したいので、そのための設定を行います。

```sh
# 録画データ類保存用のディレクトリの作成
mkdir -p /nas/nasne/recorded
mkdir -p /nas/nasne/streamfiles
mkdir -p /nas/nasne/thumbnail

# 設定の変更（再度 config.yml を編集）
vim /root/work/EPGStation/config/config.yml
<<<
# 録画データの保存先
# recorded: 配下のpathを変更する
recorded:
    - name: recorded
      path: '/nas/nasne/recorded'
# 一時ファイルの保存先はPCのHDDにする
# recorded: と同列に追加する
streamFilePath: '/tmp/nasne/streamfiles'

# サムネイルが画像の保存先も変更する
thumbnail: '/nas/nasne/thumbnail'
>>>
```


##### EPGStationの起動
起動して動作確認をします。うまく構築できていればテレビ番組の視聴、録画ができるはずです！
```sh
# EPGStationの起動
cd /root/work/EPGStation
pm2 startup
pm2 start dist/index.js --name "epgstation"
pm2 save
# 動作確認（作業PCのウェブブラウザから以下にアクセス）
http://192.168.XXX.XXX:8888
```

**うまく起動できないときは、手動実行をしてPDする**
```sh
# 自動起動したものを停止する場合のコマンド
pm2 stop epgstation
# 手動実行の操作
cd /root/work/EPGStation
npm start
# ログの確認
view /root/work/EPGStation/logs/Service/system.log
tail -f /root/work/EPGStation/logs/Service/system.log
```


以上

# 関連記事
- [NASNEを自作してみた](https://qiita.com/hirmr/items/cde0baf51d82ca9de791)