as the Wind Blows ...

パソコン、プログラミング、車、写真、etc...

テレビ録画環境改善 (4) - docker-mirakurun-epgstation 運用状況と変更点

Docker + mirakurun + EPGStationに録画環境を移行してから約10日ほど経過しました。比較的安定して動作していますが、これまでに発生した問題と懸念点は残しておこうと思います。

(発生した問題点)

  • 録画が録画予定時刻から10分遅れで開始された
  • 番組の冒頭もしくは末尾数秒が切れることがあった

(懸念点)

  • 10以下のドロップがかなりの頻度で発生する。特にドロップ1が録画開始直後に発生することが多い。ただしドロップは映像データや音声データのストリームで発生するのではなく、動画の再生には特に影響がないと思われるストリームでのみ今のところ発生しているため実害は出ていない。ちなみに今までTVRockを使う場合にドロップが発生する頻度は数パーセント以下だった。

問題点1つ目の予定開始時刻から遅れて録画された件はログを調べたところ、EPGstationで有効にしてドロップチェックをしていたのですが、そのチェック中に発生している模様。似たような症状が発生した方もいるようで、録画する番組データにより発生するっぽい。とりあえずEPGStationでの録画と同時にドロップチェックをする機能はDisableしました。Disableしてからは一度も発生してません。懸念点で上げた現象も気になるのでドロップチェックしないのは不安なので、EPGStationのDockerコンテナイメージの中にtsselectを取り込み、録画終了時に実行するようにしているスクリプト内で録画完了後にドロップチェック、同じくEPGStationのコンテナイメージの中にmsmtpやs-nailを追加してドロップしていた場合はメールで通知するように変更しました。

問題点2つ目は録画予定時刻の前後多めに録画できるようにするパラメータがあることを知らなかったために起きていた問題でした。開始30秒前、終了後15秒余計に録画するように設定して今のところうまく動作しています。

 

懸念点のドロップについては今のところ解なしです。ドロップ対策でMirakurunのバッファサイズを増やす等あるようなので変更してみたものの特に効果はないですね。。

ただ映像や音声データのドロップがないので今のところ実害なしで放置していますがいずれ何とかしたいのですが原因がよくわからないので今のところ手が出せないです。時間が取れたらもう少し詳しく調べてみようと思います。

 

ちなみにこれまでもDockerコンテナ内でメールサーバー立てずにmsmtpでGmail経由でメールを送ることは行っていたのですが、なぜか今回エラーが発生しうまく送信できませんでした。実績があるDockerfileの設定を使っていたのでおかしいと思って調べたところ、s-nailで日本語(UTF8)本文のメールを送る際にエラーになっていたことがわかりました。今までは本文英語のメールしか送っていなかったので気が付かなかったです。メールのCharsetをオプションで指定できるので注意しましょう。

Amazon AWS 体験談 (2)

 

vonvon.hatenablog.com

 前回の続きです。

現在私はさくらのVPSでメモリ1GBプランを借りているのですが、もう一つ追加でVPSが必要になりました。要件としてはVPS Clientがインストールできること、ポート443にSSH接続が可能なことです。

たいていの場合、自宅内のサーバーをSSHコンソールからコマンドラインで操作するのに使っています。ごくまれにSSHポートフォワードを使って、自宅内のESXiのweb clientを操作したり、リモートデスクトップWindows PCにログインしたりしています。そのため高速なネットワークは不要です。

しかも、使うタイミングが職場に出社しているときか、自宅で会社VPNに接続しての仕事中に限定されます。今はこんなご時世なのでずっと自宅でテレワーク中のため、どんなに多く見積もっても平日に一日数時間しか使いません。ざっくり計算で1カ月に40~80時間使うことを想定しています。

最悪全く使わない月もあるのではないかくらいなので、なるべく安いVPSでないと数百円とは言え気分的にもったいないなぁという気分で選定します。

 

候補は2つ:

①WebARENA Indigo : メモリ1GBプラン 月額349円 or 0.55円/時間 (最低利用金額50円)

Amazon AWS EC2 :  t2.micro (メモリ1GB) 0.0116 USD/時間 + α

料金がわかりやすい①WebARENA Indigoの月額349円を基準にこれよりも安いものがあるかどうかを調べて、可能性があるのはAWSかなぁという結論に至りました。

 

結局より安いAWSを使うことにしたのですが、WebARENAの問題点を書いておきます。

WebARENAはその他のVPSと比べると圧倒的に価格が安く、時間単価も安いので良さそうと思ったのですが詳しく調べるとインスタンスを停止している状態でも課金されるということがわかりました。コストを抑えるにはSSH接続のたびにインスタンスを作成し、VPN Clientをインストール、使い終わったらインスタンスを削除だと使えるようになるまでに最低5分はかかりそうなので使い勝手が悪いです。であれば実質インスタンスは最初に作ったらそのまま壊さずに使い続けることになるため、月に80時間インスタンスを使っても、実質1日24時間ずっと課金されるため最終的には月額349円です。これでも十分安いんですけどね。

 

一方でAmazon AWS EC2の料金は正直わかりにくいです。

料金をかけようと思えばいくらでもオプション追加できますが、個人利用だと下記の料金が発生すると思います。

  • インスタンスの使用料金 0.0116 USD/時間 (t2.micro), 0.0058 USD /時間(t2.nano)
  • ディスクの使用料金 0.12 USD/GB (EBS gp2)
  • ネットワーク転送料金 0.114 USB/GB (data out to internet, ~10TBまで)
  • 固定IPアドレスの利用料金 0.005 USB/時間 (Elastic IP), インスタンス停止中に課金

これを1カ月にt2.microを80時間使用、ディスクは8GBをプロビジョニング、ネットワークは外部へ最大3GB転送、IPアドレスの固定はしないでざっくり計算すると、

0.0116 x 80 (hour) + 0.12 x 8 (GB) + 0.114 x 3(GB) = 2.23 USD = 234円 (1$=105円)

 

あまり使用せず使用時間が40時間、ネットワーク転送量が1GB以内に収まった場合、

0.0116 x 40 (hour) + 0.12 x 8 (GB) + 0.114 x 0(GB) =1.424 USD = 150円 (1$=105円)

 

今回AWS最初の1年間無料条件にあるt2.microで見積もっていますが、t2.nanoでも十分かなと思うので、t2.nanoにすればどちらのケースでも月額100円台に収まりそうです。1年無料の条件にも当てはまっているので1年間はほぼ料金は発生しない可能性が高いです。

 

使いたいときにiPhone アプリからインスタンスを起動、10数秒後に表示されるIPアドレスSSH接続するだけなので、今までよりもひと手間増えていますが許容範囲内なのでこれで運用してみたいと思います。

 

一方で、AWSを24時間稼働のVPSとして使おうとするとかなりお高くなるので、頻度高くスケールアップするとか構成を変えるとか複雑なことを想定していない限り、AWSでなく普通のVPSを借りたほうが安く済みます。

やはりAWSは個人向けには使いずらいかなと思いますが、一方で短時間だけ超高性能なサーバー上で何か動かしたいとか、時間限定で何かをしたいような用途があれば個人でも使うメリットはありそうですね。

Amazon AWS 体験談 (1)

 最近遅ればせながらAmazon AWSとはどんなものか、料金はどうなのか調べるきっかけがあったので内容をメモしておこうと思います。

 

きっかけはこのブログでも書いたことがある自宅のネットワーク構成に変更を入れたことでした。自宅はグローバルIPがもらえないマンションのネットワークを使っているため自宅サーバーを公開するのに外部のVPSを借り、VPS上に作ったVPN接続して外部からアクセスできるようにしています。

vonvon.hatenablog.com

自宅ネットワーク内では複数のサービスを外部からアクセスできるようにしていて、HTTP系のサービスが3つ(Emby, EPGStation, Wordpress)、Linux メインサーバーへアクセスするための踏み台 SSHサーバー1つを公開しています。SSHサーバーへのアクセスは、Proxyにより使用可能ポートが制限された環境にある私の職場ネットワークからもアクセスできるようにポート443を使っていました。HTTP系のサービスはすべて使用するポートが異なっていたので、それぞれポートを開放して使っていました。

 

最近環境の変化で、自宅外からHTTP系のサービスにアクセスする機会が以前より増えたのですが、その際にアクセスに使うブラウザのアドレス欄に表示される「安全でないサイト」の警告が気になってしょうがなくなってきました。そこで格安のSSL証明書を購入し、HTTP系のサービスをすべてSSL対応してHTTPS化しました。そのためこれまでSSH用に使っていたポート443がHTTPSで埋まってしまうという事態が発生しています。

 

VPS側にDockerのnginxコンテナをリバースプロキシとして動作させ、自宅内のサービスに割り振っています。そのためSSL対応しているのはクライアントーVPS間だけです。nginxを調べてみると、ポート443にHTTPSSSHを共存させ、SSL通信の場合はHTTPS、non-SSLの場合はSSHのような動作をすることが可能で、試してみる限り問題なく動作したのですが、proxy protocolを有効にしないと自宅サーバー内でアクセス元のIPアドレスが参照できないという事態が発生しました。Apache等それぞれのサービスを個々にproxy protocolに対応させればReal-IPは参照できるのですが、proxy protocol に対応していないサービスには適用できず、使用を泣く泣く断念することになってしまいました。

 

となるとポート443はうちではSSHには使えません。残るはポート80ですがポート80をSSHに使うのは技術的にはなんの問題もなく、不自由なくつかえるものの頻繁に外部からアクセスが来る可能性が高いポート80でSSHを使うのは気持ちが悪く辞めました。

 

そのため外部にもう一つ踏み台となるVPSを借りようという結論になり、VPSや同等のサービスについて調べ始めたというのがきっかけです。

 

テレビ録画環境改善 (3) - docker-mirakurun-epgstation とAmatsukazeの連動

私は録画したTSファイルをAmatsukazeを使って処理しています。理由はCMカットやCM解析処理が非常に使いやすいためです。

 

残念ながらAmatsukazeはLinuxでは動作しないのでWindows上で動かすしかないので、今回録画環境をLinuxに移行するに伴い、Windows上で動作するAmatsukazeと連動させる必要があります。

 

AmatsukazeにはAmatsukazeAddTask.exeというツールがあり、これを使うとリモートのマシンからAmatsukazeサーバーが動いている本体にキューを追加することができます。このAmatsukazeAddTaskはLinux上でmonoを経由して実行できるように修正されているためこれを使用することにします。

 

EPGstationはファイル録画後に任意のコマンドを実行するようにカスタム可能なため、録画完了後に自動的にmono コマンド経由でWindows上で動作するAmatsukazeにキュー追加のコマンドを実行します。

当然ですが、EPGStationのデフォルトイメージにはmonoコマンドはインストールされていません。monoの公式HPの手順に従いイメージを追加します。

epgstation/Dockerfileに必要なパッケージを追加します。2020/11/24現在はepgstationのイメージはDebian10を使っていますので、公式HPにあるDebian10向け手順を参照します。

...

# Install mono
RUN apt update && apt install -y apt-transport-https dirmngr gnupg ca-certificates && \
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF && \
echo "deb https://download.mono-project.com/repo/debian stable-buster main" | tee /etc/apt/sources.list.d/mono-official-stable.list && \
apt update && \
apt install -y mono-devel && \
mkdir /exe_files && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

....

 

これでmonoコマンドがepgstation上で使えるようになりました

 

1点AmatsukazeAddTask.exe側で修正したのが、このツールで追加するとタスク上では自動追加と表記されてCM解析とエンコードがすべて実施されます。私の場合、特定の条件化ではエンコードは実施せず、CM解析のみ実施したい理由が個人的にあります。

そのため、ツールのソースコードをダウンロードし、https://github.com/nekopanda/Amatsukaze/blob/master/AmatsukazeAddTask/AddTaskMain.cs の一部を変更し、CM解析のみでキュー追加するように変更、コンパイルを行ったうえでexeをコンテナ上に追加しています。

 

 

テレビ録画環境改善 (2) - docker-mirakurun-epgstation セットアップ

セットアップの基本は下記

 

1. GitHubから必要なファイルをダウンロード

    git clone https://github.com/l3tnun/docker-mirakurun-epgstation

2. mirakurun/conf やepgstation/configの中の設定を自環境に合わせ修正

3. GitHubのインストラクションに従いイメージのビルドと起動

   docker-compose pull

   docker-compose build

   docker-compose up -d

 

PT3を使用する場合、比較的新しいカーネルを使用している場合はInboxドライバでPT3が認識できるため、configを必要に応じ変更するだけで基本動作はできるようになります。PT3でなく、PX-Q3PE4を使いたい場合や、MirakurunやEPGstation側のイメージに何か追加したい場合はDockerfileの修正が必要になります。

 

docker-mirakurun-epgstationデフォルトのdocker-compose.yml構成ではEPGstationはDockerfileから直接ビルドを行います。ffmpegのビルドもビルドの過程で実施されます。一方でmirakurunについては、デフォルトはchinachu/mirakurunのコンテナイメージをそのまま利用します。

docker pullで引っ張ってくる"最新の"chinachu/mirakurunのイメージの中に自分が必要なツール類がすべて入っていればそのまま使えますが、それ以外の場合は自分でイメージをビルドする必要があります。

 

必要なファイルはdocker-mirakurun-epgstationフォルダの中で、下記コマンドで必要ファイルをダウンロードします

git clone https://github.com/Chinachu/Mirakurun

docker-compose.ymlもdocker-compose buildのコマンドでMirakurunのビルドが行われるように赤字コードを追加します

...

mirakurun:
  build:
   context: Mirakurun
   dockerfile: docker/Dockerfile
  image: chinachu/mirakurun

.....

 

PT3以外のチューナーを使用する場合はmirakurun/conf/tuner.ymlの内容を修正します。

ここで指定するデコーダーがmirakurunイメージの中に入っていないと動きません。recpt1等を指定する場合はMirakurun/Dockerfileの中でインストールしてください。

 

PX-Q3PE4の場合、私は下記を追加しました。

$ cd ~/src
$ wget http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
$ tar xvjf tip.tar.bz2
$ cd pt1-17b4f7b5dccb/recpt1/
$ sed -i".org" 's/pt1video/pt3video/g' pt1_dev.h
$ ./autogen.sh
$ ./configure --enable-b25
$ make
# sudo make install

 

PT3を使用する場合、重要な点としてMirakurun/config/dvbconf-for-isdbの下にconfファイルが必要です。デフォルトでは何も入っていません。何も入っていない状態でビルドをした場合、エラーなく最後まで完了しますがイメージを起動するとMirakurunがチューナーでサービス確認をするコマンドが正常に実行されず番組表が取得できず、録画もできないという状況になり困ります。Mirakurun/configの中でgit clone https://github.com/Chinachu/dvbconf-for-isdb.gitで最新のconfを取得すれば動作するイメージがビルドできます。

 

私のもともとの環境では、bcas-perl.plをLinux上で実行してBCASカードをWindowsと共有していた(リモートデスクトップ接続でスマートカードが見えなくなる対策)のですが、今後も引き続きWindows上からもBCASカードにアクセスできるようにbcas-perl.pl (https://github.com/walkure/bcs-perl)をLinux上で実行しておきます。接続したSMARTカードリーダーはLinuxホストではなく、Mirakurunコンテナ上で管理されているためbcas-perl.plもMirakurunコンテナ上に追加し、起動時に実行するように変更することでWindowsとBCASカードを共有します。

 

 

テレビ録画環境改善 (1) - モチベーション

今回も自分へのメモ代わりに作業内容を残しておきます。

まず背景:

 

ここ10年ほど、PCでテレビ録画をしていて Friioから始まり、PV3→PT3とハードウェアは移行してきました。PT3に移行するタイミングで同時に仮想化環境へ移行していますが、録画環境は基本的にWindows OS上でここ10年ほどずっとTV Rockを使っていました。

 

TV Rockは非常に使いやすい安定したソフトであると思いますが、かなり以前に作られたもので更新もされておらず、インターフェースは古く、スマートフォンでの操作も、できないことはないがかなり不自由という状況でした。

 

安定性は抜群だが個人的に以下の不満があり、常々どうにかしたいなぁと思っていました。以下は不満が大きい順に並べています。

  • PT3とTV Rockの再セットアップがかなり手間で、手軽にWindows OSの再インストールができない(できればしたくない)
  • Windows OS上で別の作業中、バックグラウンドでテレビ録画が行われているため気軽にOSの再起動ができない。再起動が必要な作業は録画終了まで待つ必要がある
  • TV Rockの番組表の応答が非常に遅い(10秒以上かかる)ケースがある
  • スマホでTV Rockの番組表を見たときに操作しにくい
  • スマホ上からテレビや録画番組のリアルタイム視聴ができない(代替手段はあるが・・)

 

特に上から2つ目までが大きな不満です。仮想化しているのだから手軽に環境を作り変えたいケースがありますが、安定した録画環境を壊したくないから手軽にできない。PT3をPCIパススルーしているからスナップショットも取れず効率が悪く何のための仮想化なのか意味不明。再起動のタイミングも妨げられるので、作業効率が落ちる等々。

仮想環境なのだから録画専用のVMを新たに立ち上げればいいじゃんというのはもちろん考えたのですが、WindowsVMはそれなりにリソースを食うためこれ以上増やしたくない、管理したくないという背景がありした。

 

いずれ改善しよう、しようと思い続けて数年たっているのですが、サーバーPCを新調したタイミングで環境を大幅変更しました。遅ればせながら、ちょうど本業の仕事でLinuxのdocker コンテナを触っていて便利すぎて感動していたこともあり、PT3 + Windows + TV Rockの環境をPT3 + Linux + docker-Mirakurun-epgstationに移行しました。

すでに移行は完了していて現在安定動作確認中ですが、動きが怪しい部分は残っているもの致命的なエラーはなく動いています。今までの不満も下記のように改善しました。

 

  • PT3とTV Rockの再セットアップがかなり手間で、手軽にWindows OSの再インストールができない(できればしたくない)→ 録画はLinuxWindowsは通常作業専用と環境が分離できたため、OSの再インストールは気軽に実施できる。Linuxの録画環境もdockerを導入したことで、OSの再インストール→docker環境のセットアップ→録画用docker イメージビルド→コンテナ起動で環境構築が終わるため1時間以内には録画環境がリストアできるようになった。

 

  • Windows OS上で別の作業中、バックグラウンドでテレビ録画が行われているため気軽にOSの再起動ができない。再起動が必要な作業は録画終了まで待つ必要がある→録画環境と分離したため、Window再起動のタイミングは録画ステータスに縛られない

 

  • TV Rockの番組表の応答が非常に遅い(10秒以上かかる)ケースがある→ EPGstationの番組表検索や予約追加は遅延なく即座に実施できる

 

 

  • スマホ上からテレビや録画番組のリアルタイム視聴ができない(代替手段はあるが・・)→スマホ上から数クリックでブラウザ上でリアルタイムにテレビ視聴が可能

 

PT3 + Linux + docker-Mirakurun-epgstationのセットアップの方法詳細は様々なサイトで解説されていてググればわかるので省略します。今回はPT3およびPX-Q3PE4両方で動作確認したため、はまった点、修正した点を中心にメモを残します。

ASUS TUF GAMING B460-PLUSでのESXi GPUパススルー

 自宅サーバー買い替えのため、マザーボードも当然変更しESXiをインストール、さらにGPUパススルーをしようとしたのですが、ちょっとはまって焦ったので備忘録として残しておきます。

結論から言えば、ASUS TUF GAMING B460-PLUSでも問題なくESXiでGPUパススルーは可能です。

vonvon.hatenablog.com

まず最初のはまりポイントは、ESXi 6.7 & 7.0どちらをインストールしようとしても "No Network Adopters"のエラーが出てインストールできない。これはよくある話なので、ググってみるとB460-PLUSのLANコントローラはインテル製ですが、I219-Vでカスタマイズしないとインストールできないという記事はたくさん見つかります。特に多いのがDevice ID=0x15bcのI219-Vコントローラに対するカスタマイズ記事で、私も最初は先人が残してくれた記事通り実施すれば問題なくインストールできると信じてましたが、何度やってもうまくいきません。

 

もしやと思い、ESXiではなくUbuntuをインストールし、lspciのコマンドでDevice IDを確認します。予想通り、15bcではありません。B460-PLUSにのっているI219-VはDevID=0x0d55でした。VMwareのサイトでこのIDを調べてみると公式にはサポートされていません。

さらに調べていくと、第10世代のインテル NUCに同じコントローラがのっており下記のページが見つかります。

www.virtuallyghetto.com

一口にI219-Vといっても、下記の種類のDevice IDがあることがわかりました。

  • 8086:0d4e - Ethernet Connection (10) I219-LM
  • 8086:0d4f - Ethernet Connection (10) I219-V
  • 8086:0d4c - Ethernet Connection (11) I219-LM
  • 8086:0d4d - Ethernet Connection (11) I219-V
  • 8086:0d53 - Ethernet Connection (12) I219-LM
  • 8086:0d55 - Ethernet Connection (12) I219-V
  • 8086:15fb - Ethernet Connection (13) I219-LM
  • 8086:15fc - Ethernet Connection (13) I219-V
  • 8086:15f9 - Ethernet Connection (14) I219-LM
  • 8086:15fa - Ethernet Connection (14) I219-V
  • 8086:15f4 - Ethernet Connection (15) I219-LM
  • 8086:15f5 - Ethernet Connection (15) I219-V
  • 8086:1a1e - Ethernet Connection (16) I219-LM
  • 8086:1a1f - Ethernet Connection (16) I219-V
  • 8086:1a1c - Ethernet Connection (17) I219-LM
  • 8086:1a1d - Ethernet Connection (17) I219-V

 さらに、VMwareのcomunitiyにてne1000 VIBのoffline bundleを配布していることもわかりました。

https://download3.vmware.com/software/vmw-tools/Intel-NUC-ne1000_0.8.4-3vmw.670.0.0.8169922-offline_bundle-16654787.zip

 

これがわかれば後は簡単で、上記ドライバを組み込んだカスタムISOファイルを作りインストールするだけです。

 

方法の詳細は別のサイトで解説あるため省略しますが、簡単には下記となります

1. VMWareのサイトから対象のESXiのOfflie Bundleをダウンロード。例えばESXi 6.7 U3ならupdate-from-esxi6.7-6.7_update03.zip

2. ESXi-Customizer-PS.ps1 をGit Hubからダウンロード

3. VMware Power CLIをインストール

4. 適用するドライバをvibsフォルダの下に入れて、下記コマンドを実行

 .\ESXi-Customizer-PS.ps1 -izip .\update-from-esxi6.7-6.7_update03.zip -pkgdir vibs

 

ローカルのoffline bundleをダウンロードしなくても、izipのオプションなしでインターネット経由で自動ダウンロードする方法もありますが、途中TLS1.2対応などのエラーが発生する可能性があるので、ここでは確実なローカルで完結する方法をとっています。

 

これで無事にESXiをインストールできたのですが、次のはまりポイントとして、GPUパススルーするためにiGPUをdisableしたいのだが、BIOSに該当メニューがない・・

 

これまで使っていたASUSマザボBIOSにはSystem Agantの下にiGPU Multi Monitorの項目があり、そこでdisableを設定することでiGPUをdisableすることができました。逆にこれを設定しないとGPUパススルーができません。

 

ところが購入直後のB460-PLUSのBIOSメニューには該当のメニューがありません。まさかZ490チップセットだけに会ってB460には存在しないのかと頭を抱えましたが、ダメもとでBIOSアップデートしたところメニューが追加されました!

 

初期のBIOSバージョンを控えるのを忘れたのですが、少なくとも2020/8/12リリースのversion 1401であればiGPU Multi Monitorの設定項目は存在し、ここでdisableを設定することで問題なくGPUパススルーは可能です。