Ubuntu16.04 EPGStation のインストール

・Mirakurun のインストール
http://d.hatena.ne.jp/kt_hiro/20180121/1471144786

MySQLのインストールと設定(EPGStation で MySQL を使う場合)

# apt install mysql-server

# mysql -u root -p

mysql> CREATE DATABASE epgstation CHARACTER SET utf8;
※epgstationという名前のDBを作る

mysql> GRANT ALL ON epgstation.* TO epgstation@localhost IDENTIFIED BY 'epgstation';
※ユーザ名:epgstation、パスワード:epgstation のユーザを作り、DB:epgstation の操作権限を与える

mysql> quit

・EPGStation のインストール
公式ドキュメント:https://github.com/l3tnun/EPGStation

・デフォルトでは recorded フォルダに録画ファイルが格納されるので、必要に応じて変更すること
・TSを変換して視聴する場合は ffmpeg をインストールしてパスを指定すること

自動起動設定

# pm2 start dist/server/index.js --name=EPGStation
# pm2 save

Node.js バージョン管理

・npm のバージョンアップ

# npm install -g npm 

・n (Node.js バージョン管理ソフト) のインストール

# npm install -g n

・特定バージョンの Node.js のインストール

# n list
※インストールできる Node.js バージョンを確認

# n 8.8.1
※バージョン 8.8.1 をインストール

# node -v
※バージョン確認

Ubuntu16.04 recpt1/recdvb + Mirakurun + Chinachu Gamma のインストール

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

# apt install autoconf build-essential curl git-core libccid libpcsc-perl libpcsclite-dev libpcsclite1 libssl-dev libtool linux-headers-`uname -r` mercurial pcsc-tools pcscd pkg-config yasm

・カードリーダの動作確認

# pcsc_scan

・arib25(放送波のデコード)のインストール

# cd /usr/local/src/
# wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
# unzip c44e16dbb0e2.zip
# cd pt1-c44e16dbb0e2/arib25
# make
# make install

・ドライバと録画プログラムのインストール

PT3 を使う場合
1. PT3専用ドライバ、recpt1
2. DVBドライバ(Linux標準ドライバ)、recdvb をインストールする

PX-S1UD を使う場合
3. PX-S1UDファームウェア、recdvb をインストールする

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

# cd /usr/local/src/
# git clone https://github.com/m-tsudo/pt3.git
# cd pt3/
# make
# make install

# echo "blacklist earth-pt3" >> /etc/modprobe.d/blacklist.conf
# modprobe pt3_drv
# reboot

# ls /dev/ | grep pt3
※デバイスが存在することを確認

PX-S1UDファームウェアのインストール

# cd /usr/local/src/
# wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip
# unzip PX-S1UD_driver_Ver.1.0.1.zip
# cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/

recpt1 のインストール

# cd /usr/local/src/
# git clone https://github.com/stz2012/recpt1.git
# cd recpt1/recpt1
# ./autogen.sh
# ./configure --enable-b25
# make
# make install

# adduser  video
※videoグループに追加しておかないとPT3を使用できない

# recpt1 --b25 --strip 22 10 test.ts --device /dev/pt3video2
※録画できることを確認
 デバイス:video0/1:衛星放送
      video2/3:地上デジタル
 チャネル:22ch
 録画時間:10秒

recdvb のインストール

# cd /usr/local/src/
# wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.1.tgz
# tar xvzf recdvb-1.3.1.tgz
# cd recdvb-1.3.1
# ./autogen.sh
# ./configure --enable-b25
# make
# make install

# adduser <recdvbコマンドを使いたいユーザ> video
※videoグループに追加しておかないとPX-S1UDを使用できない

# recdvb --b25 --strip 22 10 test.ts
※録画できることを確認

・Mirakurun のインストール
事前準備として node.js、npm をインストールする
https://github.com/Chinachu/Chinachu/wiki/Gamma-Installation-V2

公式ドキュメントに従い Mirakurun をインストールする
https://github.com/Chinachu/Mirakurun/blob/master/README.md

Mirakurunでスクランブル解除する場合は arib-b25-stream-test をインストール
※録画コマンドで --b25 オプションを使う場合は不要

# npm install arib-b25-stream-test -g --unsafe

PT3 で recpt1 を使う場合には下記を変更

# mirakurun config tuners
- name: PT3-S1
  recpt1 --b25 --device /dev/pt3video0 <channel> - -
  isDisabled: false

※BS/CSアンテナへの給電が不要であれば、recpt1コマンドの --lnb 15 オプションは削除する
※recpt1コマンドでスクランブル解除する場合は --b25 オプションを追加、decoder行を削除
※isDisabled を false に変更
※PT3-S2、PT3-T1、PT3-T2 についても同様に変更

PX-S1UD を使う場合には下記を追記

# mirakurun config tuners
- name: PX-S1UD-1
  types:
  - GR
  command: recdvb --b25 --strip <channel> - -
  isDisabled: false

・チャンネル設定

# mirakurun config channels
※受信地域に合わせてチャンネル設定を修正する
http://www.maspro.co.jp/contact/bro/bro_ch.html

# mirakurun restart
※EPG受信するので、10分ほど待つ

# rivarun --list | sed 's/},/},\n/g'
※チャンネル情報が表示されることを確認
※要Rivarun

・Rivarun のインストール(任意)
公式ドキュメント:https://github.com/Chinachu/Rivarun

・動作確認
# rivarun --ch GR/27 10 test.m2ts

・Chinachu のインストール
公式ドキュメントに従いインストールする
https://github.com/Chinachu/Chinachu/wiki

・ログローテート設定(任意だが、そのままだとログが肥大化するので実施推奨)

# pm2 install pm2-logrotate
※PM2のログローテート

# vi /etc/logrotate.d/mirakurun
/usr/local/var/log/mirakurun.stdout.log
/usr/local/var/log/mirakurun.stderr.log
{
  daily
  compress
  rotate 7
  missingok
  notifempty
}

# vi /etc/logrotate.d/chinachu
/usr/local/var/log/chinachu-operator.stderr.log
/usr/local/var/log/chinachu-operator.stdout.log
/usr/local/var/log/chinachu-wui.stderr.log
/usr/local/var/log/chinachu-wui.stdout.log
{
  weekly
  compress
  rotate 4
  missingok
  notifempty
}

・録画ファイルの2バイト記号の削除(任意)
ファイル名に2バイト記号が含まれているとOSがファイル名を正しく取得できない場合があるため、「_」に置換するようにする。

# vi chinachu/common/lib/chinachu-common.js
※220行目あたり
         a = a.replace(/\//g, '/').replace(/\\/g, '\').replace(/:/g, ':').replace(/\*/g, '*').replace(/\?/g, '?');
         a = a.replace(/"/g, '”').replace(/</g, '<').replace(/>/g, '>').replace(/\|/g, '|').replace(/≫/g, '>>');
         a = a.replace(/\r\n/g, ' ').replace(/\n/g, ' ').replace(/\r/g, ' ');
この行を追加 → a = a.replace(/〜/g, '_').replace(/−/g, '_').replace(/×/g, '_');

Linux OpenVPN 高速化チューニング

OpenVPNで通信速度に影響する下記設定について検証。
udp or tcp
・comp-lzo の有無
tcp-nodelay の有無(tcpのみ)
・mssfix、fragment のチューニング

mssfix … カプセル化されるTCPパケットのサイズ制限(デフォルト値:1450)
fragment UDPで接続するときのカプセル化されるパケットのサイズ制限
tun-mtu … tunデバイスを使用する場合のMTUサイズの制限(デフォルト値:1500)
※tun-mtuも変更可能だが、1500以下にすると「mssfix、fragmentを指定する場合はtun-mtuは1500にしろ」という
 ワーニングが接続時に出るので、そのままとした

※各パラメータについて:https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
※パケットサイズのチューニングは下記が参考になる
https://wiki.archlinux.jp/index.php/OpenVPN#Fragment_.E3.81.A8_MSS_.E3.81.AB.E3.82.88.E3.82.8B_MTU_.E3.81.AE.E8.A8.AD.E5.AE.9A

検証1 ローカル接続

・通信経路
 ノートPC <-> (無線LAN OpenVPN接続)
  <-> OpenVPN仮想サーバ <-> (KVM ブリッジ接続)
   <-> Web仮想サーバ
・ダウンロードするファイル
 158MB の 映像ファイルのHTTPダウンロードにかかった時間を5回測定して中央値を採用
接続オプション ダウンロード時間(中央値)
直接ダウンロード 15秒
tcp接続 オプションなし 18秒
tcp接続 comp-lzo 19秒
tcp接続 tcp-nodelay 22秒
tcp接続 mssfix:1280 19秒
tcp接続 comp-lzo mssfix:1280 tcp-nodelay 25秒
udp接続 オプションなし 16秒
udp接続 comp-lzo 16秒
udp接続 mssfix:1280 fragment:1280 17秒
udp接続 comp-lzo mssfix:1280 fragment:1280 16秒
udpの方が速く、直接ダウンロードと比べてもほとんどオーバーヘッドが無い
・tcp-nodelay が無い方がなぜか速い
・comp-lzo は速度にあまり影響しない(映像ファイルなので圧縮の余地がないから?)
・tun-mtu等は速度にあまり影響しない(ローカル接続だから?)

検証2 インターネット接続

測定タイミングによって速度が変わるため、定量的な測定ができなかった。

CentOS7 WAF(ModSecurity)のインストール

apacheのインストール

# yum install httpd

・ModSecurityのインストール

# yum install mod_security mod_security_crs

・設定

# cp -p /etc/httpd/conf.d/mod_security.conf /etc/httpd/conf.d/mod_security.conf.org

# vi /etc/httpd/conf.d/mod_security.conf
 # Default recommended configuration
 # SecRuleEngine On ←コメントアウト
 SecRuleEngine DetectionOnly ←検知はするが、遮断はしない

apacheの再起動

# systemctl restart apache

・ログ確認

# less /var/log/httpd/modsec_audit.log

・ルールの場所

# cd /etc/httpd/modsecurity.d/

KVM VMの自動起動/自動シャットダウン設定

・ホスト側の設定

# vi /etc/sysconfig/libvirt-guests
START_DELAY=30
ON_SHUTDOWN=shutdown
SHUTDOWN_TIMEOUT=180

# virsh autostart <自動起動したいVM名>
# ls /etc/libvirt/qemu/autostart

解除する場合は下記
# virsh autostart --disable <自動起動したいVM名>
# ls /etc/libvirt/qemu/autostart

・ゲスト側の設定
ホストのシャットダウン命令を受け付けるようにする

# yum -y install acpid
# systemctl start acpid
# systemctl enable acpid

KVM libvirt で cdrom をマウントする

# virus edit vm_name

<controller type='ide' index='0'>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>

<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source file='/mnt/storage-1/application_installer/ISO/virtio-win-0.1.139.iso'/>
  <target dev='hdb' bus='ide'/>
  <readonly/>
  <address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>