VMware ESXi6.5とPT3で録画サーバを作る。

# はじめに

ESXi6.5で録画サーバを作ったので情報をまとめました。
ESX6からHostClientが導入された事でOSXユーザでも苦もなくESXiが操作できるようになりました。Windowsが不要になったのは良いですね。

# 前提条件

- ESXi6.5をインストール済み
- VT-D対応の基盤を組んでいる
- PT3も設置済み

# ESXiの設定
## VT-Dを有効化する

対応CPUと対応マザーボードを利用していれば、UEFIで設定ができる。
自分が利用している [ASUS H87PRO](https://www.asus.com/jp/Motherboards/H87PRO/HelpDesk_Manual/)なら、アドバンスドメニューのシステムエージェント設定の中に、VT-DのOFF/ON設定があるのでONにする。

## ESXi6.5でパススルー設定を行う。

VT-Dを有効にしないと、VMware Host Clientからパススルー設定ができない。
具体的には下記のようにHostClientからみると、VT-Dを無効化した状態では画面のようにパススルー設定が「不可」となり行えない。
<img width="1478" alt="cap01.png" src="https://qiita-image-store.s3.amazonaws.com/0/125552/9609d01c-efbe-de5f-c400-9c7031dbd076.png">

不可と表示されて、愕然としている人はまずVMwareのドキュメントセンターやKBを見る前にVT-D対応の基盤を組んでいるか確認しましょう。

チェックを押して、パススルーの切り替えをおした後に、設定反映のためにESXiホストを再起動する。

### 参考情報
パススルー設定をいれると、esx.confには下記のように設定が入るようだ。

```shell-session:esx.conf
# grep "00000:007:00.0" /etc/vmware/esx.conf 
/device/00000:007:00.0/owner = "passthru"
/device/00000:007:00.0/device = "4c15"
/device/00000:007:00.0/vendor = "1172"
```

passthru.mapには変更は見受けられなかった。

```shell-session:passthru.map
[root@localhost:/etc/vmware] cat passthru.map 
# passthrough attributes for devices
# file format: vendor-id device-id resetMethod fptShareable
# vendor/device id: xxxx (in hex) (ffff can be used for wildchar match)
# reset methods: flr, d3d0, link, bridge, default
# fptShareable: true/default, false

# Intel 82579LM Gig NIC can be reset with d3d0
8086  1502  d3d0     default
# Intel 82598 10Gig cards can be reset with d3d0
8086  10b6  d3d0     default
8086  10c6  d3d0     default
8086  10c7  d3d0     default
8086  10c8  d3d0     default
8086  10dd  d3d0     default
# Broadcom 57710/57711/57712 10Gig cards are not shareable
14e4  164e  default  false
14e4  164f  default  false
14e4  1650  default  false
14e4  1662  link     false
# Qlogic 8Gb FC card can not be shared
1077  2532  default  false
# QLogic QL45604 cards need to be reset with "link" and cannot be shared
1077  1634  link     false
1077  1629  link     false
1077  1636  link     false
1077  1656  link     false
1077  1644  link     false
1077  1654  link     false
# LSILogic 1068 based SAS controllers
1000  0056  d3d0     default	
1000  0058  d3d0     default
# NVIDIA
10de  ffff  bridge   false
```

## PT3とUSBカードリーダーの設定
仮想マシン作成時にPT3とUSBカードリーダーを追加してあげれば認識する。
<img width="799" alt="usb.png" src="https://qiita-image-store.s3.amazonaws.com/0/125552/1a3fc74c-76d3-4b89-1a71-cc7c3508c0b6.png">

# PT3用サーバを作成する。

今回は[yokiさんのサイト](http://www.jifu-labo.net/)の記事に従い、Mirakurun/chinachuΓを導入した。
本当にこのサイトは情報がまとまっていて助かります。

- [録画サーバ構築の前準備（Ubuntu・Debian編）、Chinachu・epgrec UNA対応](http://www.jifu-labo.net/2015/09/ubuntu_pre/)
- [Mirakurunのインストール手順（Ubuntu・Debian・CentOS）](http://www.jifu-labo.net/2016/05/mirakurun/)
- [Chinachu γ(ガンマ) インストール手順（Ubuntu・Debian編）](http://www.jifu-labo.net/2017/01/chinachu_gd/)
- [MPEG2-TS用のFFmpeg H.264エンコードスクリプトを作りました](http://www.jifu-labo.net/2017/02/h264_encode/)

## mirakurun 補足
自動起動しないので、自動起動するように仕込むか、起動時に下記コマンドを実行する。

### 手動
````shell-session:bash
$ sudo mirakurun start
$ sudo mirakurun status
````

### 自動
```shell-session:/etc/systemd/system/mirakurun.service 
[Unit]
Description=mirakurun

[Service]
Type=simple
ExecStart=/usr/local/bin/mirakurun start
ExecStop=/usr/local/bin/mirakurun stop
ExecReload=/usr/local/bin/mirakurun restart
User=root

[Install]
WantedBy=multi-user.target
```

```shell-session:bash
# systemctl enable mirakurun.service 
# systemctl start mirakurun.service

root@otosuke:/etc/systemd/system# systemctl status mirakurun.service
● mirakurun.service - mirakurun
   Loaded: loaded (/etc/systemd/system/mirakurun.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 土 2017-04-01 10:34:36 JST; 1s ago
  Process: 4832 ExecStop=/usr/local/bin/mirakurun stop (code=exited, status=0/SUCCESS)
  Process: 4782 ExecStart=/usr/local/bin/mirakurun start (code=exited, status=0/SUCCESS)
 Main PID: 4782 (code=exited, status=0/SUCCESS)

 4月 01 10:34:35 otosuke mirakurun[4782]: │ mirakurun-server │ 0  │ fork │ 4821 │ online │ 0       │ 0s     │ 0%  │ 22.0 MB   │ disabled │
 4月 01 10:34:35 otosuke mirakurun[4782]: └──────────────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘
 4月 01 10:34:35 otosuke mirakurun[4782]:  Use `pm2 show <id|name>` to get more details about an app
 4月 01 10:34:36 otosuke mirakurun[4832]: [PM2] [mirakurun-server](0) ✓
 4月 01 10:34:36 otosuke mirakurun[4832]: ┌──────────────────┬────┬──────┬─────┬─────────┬─────────┬────────┬─────┬────────┬──────────┐
 4月 01 10:34:36 otosuke mirakurun[4832]: │ App name         │ id │ mode │ pid │ status  │ restart │ uptime │ cpu │ mem    │ watching │
 4月 01 10:34:36 otosuke mirakurun[4832]: ├──────────────────┼────┼──────┼─────┼─────────┼─────────┼────────┼─────┼────────┼──────────┤
 4月 01 10:34:36 otosuke mirakurun[4832]: │ mirakurun-server │ 0  │ fork │ 0   │ stopped │ 0       │ 0      │ 0%  │ 0 B    │ disabled │
 4月 01 10:34:36 otosuke mirakurun[4832]: └──────────────────┴────┴──────┴─────┴─────────┴─────────┴────────┴─────┴────────┴──────────┘
 4月 01 10:34:36 otosuke mirakurun[4832]:  Use `pm2 show <id|name>` to get more details about an app

```