録画サーバ構築 foltia+PX-Q3PE 仮想サーバ編

長い事ハードウェア・エンコードの検証をやり過ぎて本来の目的を忘れていた。エンコーディングがNVENCに決まって、もう全部終わったーと勘違いしていたほどw いい加減、録画サーバを構築すると言う本題に立ち返って次の作業に取りかかる。NVENCにはNVIDIAのビデオカードが必要なので、物理環境との依存関係が出来てしまう。無理に仮想環境やコンテナは使わず、大人しく物理サーバ上で処理させるつもり。物理サーバは最新のOSを使いたいので、CentOS6に限定される録画サーバは必然的に仮想サーバとなる(PX-Q3PEのドライバ的に)。録画機能に物理サーバ2台も用意するのはちょっと大げさだしね。という訳で、今回はCentOS7のホストにCentOS6のゲストを作って、そこで録画機能が正しく動作するかを試す。ハイパーバイザーはCentOS標準のKVMを利用する。

地上波デジタル・BS・CS 8チャンネル同時録画テレビチューナボード PX-Q3PE
価格 : 21,581円(税込、送料無料)
by Yahoo! ショッピング

仮想サーバに対してOSをインストールするには本来virt-installを使う。いろいろと試してみたが、virt-installでfoltiaのメディアを起動させる事は出来なかった。どうもメディアブートに必要なファイルを読みにいってくれない感じ。qemu-kvmを使ってinitrdやvmlinuzを直接指定するとメディアブート出来たのだが、それらを指定する余地のないvirt-installではよい方法を思い付かなかった。spiceでGUIが使えるなら他にも方法はあるかもしれないが、自分はどうにかCLIで作業を進めたかった。少なくともinitrdとvmlinuzを指定すれば起動するのだから、KVMとしてインストール済みのCentOS6でdirect kernel bootを使ってのメディアブートなら行けそうな予感。先に素のCentOS6をvirt-installで構築してしまう。

インストールの際に録画に必要なPX-Q3PEとスマートカードリーダーをゲスト側にデバイス・パススルーする必要があるので、ホスト側の起動パラメータとしてintel_iommuを有効化しておく。

vi /etc/default/grub
    :
GRUB_CMDLINE_LINUX="intel_iommu=on crashkernel=auto rhgb quiet"

grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

続いて、virt-installする際にPX-Q3PEとスマートカードリーダーを–host-deviceオプションを使ってゲスト側に引き渡す。PX-Q3PEはlspciで左側に表示されるチャネル番号を、スマートカードリーダーはlsusbで表示されるBusとDeviceの番号を指定する。参考までに自分が実行したコマンドは以下。

lspci
    :
06:00.0 Multimedia video controller: Device 188b:5220 (rev 01)

lsusb
    :
Bus 002 Device 003: ID 0bda:0161 Realtek Semiconductor Corp. Mass Storage Device

virt-install \
  --name rec1 \
  --hvm \
  --virt-type kvm \
  --ram 2048 \
  --vcpus 2 \
  --arch x86_64 \
  --os-type linux \
  --os-variant rhel6 \
  --boot hd \
  --disk path=/var/lib/libvirt/images/rec1.img,size=20,device=disk,bus=virtio,format=raw \
  --network bridge=br0,model=virtio \
  --graphics none \
  --serial pty \
  --console pty \
  --host-device 06:00.0 \
  --host-device 002.003 \
  --location http://home.domain.local/repo/6/os/ \
  --extra-args "ks=http://home.domain.local/ks/rec1.cfg console=ttyS0,115200"

標準のCentOS6がインストール出来たらVMは停止させておく。どうせfoltiaのイメージで上書きされてしまうので、いじっても仕方がない。公式からfoltiaのisoをダウンロードして/var/lib/libvirt/imagesに配置。このisoをマウントしてDVD中isolinuxディレクトリ配下のisolinux.cfgを確認。この内容を参考にしてKVMの起動設定を変更。同ディレクトリにあるvmlinuz0とinitrd0.imgを/var/lib/libvirt/imagesにコピー。自分の環境では以下のように設定になった。編集が終わったらvirshコマンドでVMを起動する。

wget -O /var/lib/libvirt/images http://download.foltia.com/evaluation/foltia_ANIME_LOCKER-install-R21-DVD-4012.iso
mkdir /mnt/foltia
mount -o loop /var/lib/libvirt/images/foltia_ANIME_LOCKER-install-R21-DVD-4012.iso /mnt/foltia
cp /mnt/foltila/isolinux/vmlinuz0 /var/lib/libvirt/images
cp /mnt/foltila/isolinux/initrd0.img /var/lib/libvirt/images
virsh edit rec1
    :
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <kernel>/var/lib/libvirt/images/vmlinuz0</kernel>
    <initrd>/var/lib/libvirt/images/initrd0.img</initrd>
    <cmdline>root=live:CDLABEL=foltia-install-R21-DVD-4012 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 console=ttyS0,115200</cmdline>
    <boot dev='cdrom'/>
  </os>
     :
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/var/lib/libvirt/images/foltia_ANIME_LOCKER-install-R21-DVD-4012.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    :
virsh start --console rec1

これでVMの仮想コンソールにfoltiaをメディアブートさせたときと同じ画面が表示されているはず。rootでログインしてIPアドレスを確認。いずれかのブラウザでそのIPアドレスを入力すれば、いつも通りのfoltiaの設定画面が表示される。VMを作る際の注意点としてはディスクサイズをケチり過ぎると怒られるので20GBくらいはあげた方がいいかも。うちでは録画データ領域としてglusterfsをマウントするので、VM用のディスク領域は最小限。ブラウザでのインストール・ウィザードが終わってセットアップが完了したらVMを停止させて最後の微調整。もともと物理サーバで動作する設定になっているので、いくつか設定を変えておかないと仮想サーバとして起動できない。

まず、ディスクデバイスが/dev/sdaではなく/dev/vdaなので、/boot/device.mapを修正しておいた。また、grub.confでfoltia-splash.xpm.gzを読み込まれるとテキストコンソールが止まってしまうのでコメントアウト。多分あの女の子が抱き合っている画像だねw virsh edit rec1でさきほど加えたdirect kernel bootの設定も消してディスクブートに戻しておく。以上の作業を終わらせてVMを起動すれば、仮想サーバ上でfoltiaを利用することが出来た。今回はあくまで検証なので、リアルタイム視聴と録画、再生くらいしか動かしていないけど普通に動作した。次回は仮想サーバ上に自前で録画環境を構築します。やっとw

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)