KonomiTV を最新版(2022-08-31)にする(FreeBSD と qjail で)

***** 注 意 ***** 作者の方も指摘している通り、まだいろいろ作業中で、重大な変更があるかもしれません。 また、FreeBSD をサーバに使うのは推奨環境ではありません。 くれぐれも作者の方に文句を言わないこと。

足元が濡れていて滑ります。ころんでも泣かない人だけどうぞ。

ということで、入院中もテレビを見るのに大活躍してくれたKonomiTVですが、 最新版の master はいろいろと機能が追加されていて、面白そうだったので最新にアップデートしてみることにしました。 そのうえで、いろいろ試してみて気が付いた点などを書いていきます。

例によって例のごとく、サーバは FreeBSD で qjail で環境を作ります。 FreeBSD は推奨環境ではありませんが、どうにかこうにか動かすことはできます。 また、最新の KonomiTV は https 化必須なので、事前に自ドメインのワイルドカード証明書を取ってあるものとします。

はまりポイントは3つです。

  1. lo0 に 127.0.0.77 を割り当てる
  2. Letsencrypt で dns 認証で証明書を取っておく。独自ドメインを持っていることが前提。
  3. python3 で pip がみつからない問題の解決。

以下に順を追って説明します。example.org は自ドメインに置き換えてください。

まずは qjail で環境をつくります。

>sudo qjail create -n em0 -4 192.168.xxx.xxxx konomitv
で、最新版の KonomiTV では 127.0.0.77 を使いますので、その準備をします。
>sudoedit /usr/local/etc/qjail.config/konomitv ip4.addr = 192.168.xxx.xxx
となっているところを
ip4.addr = 192.168.xxx.xxx,lo0|127.0.0.77
に修正して保存します。

あとは jail の中で作業します。

> sudo qjail console konomitv
まずは必要なパッケージを入れます。
> pkg update > pkg install python310 py310-sqlite3 git gmake rust freetype2 openjpeg ffmpeg
python310 で pip が存在しないとエラーになるので、入れます。
> python3.10 -m ensurepip
linux と windows ではサードパーティーライブラリをダウンロードしてきて展開すればいいのですが、 FreeBSD に対応しているバイナリがないのでどうにかこうにかします。

tereadex は放送波をいろいろ都合よくアレしてくれる便利なやつです。

> git clone https://github.com/xtne6f/tsreadex > cd tsreadex > gmake > cd ..
akebi-https-server は http/2化してくれるプロキシ。golang が必要です。
> git clone https://github.com/tsukumijima/Akebi > cd Akebi > gmake build-https-server > cd ..
ここまで入れたらあとは本番です。
> git clone https://github.com/tsukumijima/KonomiTV > cd KonomiTV > cd server >env PIPENV_VENV_IN_PROJECT="true" pipenv sync
するとごとごとと裏でいろいろ動いて、必要なライブラリが入ります。この際に rust が 必要なので事前に pkg で入れてあります。結構時間がかかります。もしここで、エラーが 出たら足りないものを入れていってください。

また、上記のようにサードバーティーライブラリが存在しないので、適当にでっち上げて あげます。ないものはとりあえず touch しておきます。

> cd .. > mkdir -p server/thirdparty/Akebi > mkdir -p server/thirdparty/FFmpeg > mkdir -p server/thirdparty/QSVEncC > mkdir -p server/thirdparty/NVEncC > mkdir -p server/thirdparty/tsreadex > mkdir -p server/thirdparty/VCEEncC > > ln -s ~/Akebi/akebi-https-server server/thirdparty/Akebi/akebi-https-server.elf > ln -s ~/tsreadex/tsreadex server/thirdparty/tsreadex/tsreadex.elf > ln -s /usr/local/bin/ffmpeg server/thirdparty/FFmpeg/ffmpeg.elf > ln -s /usr/local/bin/ffprove server/thirdparty/FFmpeg/ffprove.elf > > touch server/thirdpaty/QSVEncC/QSVEncC.elf > touch server/thirdpaty/NVEncC/NVEncC.elf > touch server/thirdpaty/VCEEncC/VCEEncC.elf
上記以外になにか足りなければ、あとでエラーメッセージを見つつ修正します。

インストールの説明ではデータベースの設定を行うことになってますが、先に config.yaml を 書き換えておかないと謎のエラーがでますので、まずはそちらから。

> cd .. > > cp config.example.yaml config.yaml.orig > diff -p 1 < config.diff
config.diff の内容は以下の通り
--- config.yaml.orig 2022-08-31 15:14:41.419678000 +0900 +++ config.yaml 2022-08-31 16:18:59.697698000 +0900 @@ -5,7 +5,7 @@
     # 利用するバックエンド
     # EDCB・Mirakurun のいずれかを選択してください。
  •    'backend': 'EDCB',
    
  •    'backend': 'Mirakurun',
    
       # EDCB (EpgTimerNW) の TCP API の URL
       # バックエンドに EDCB を選択したときに利用されます。
    

@@ -14,7 +14,7 @@

     # Mirakurun の HTTP API の URL
     # バックエンドに Mirakurun を選択したときに利用されます。
  •    'mirakurun_url': 'http://192.168.1.11:40772/',
    
  •    'mirakurun_url': 'http://192.168.xxx.yyy:40772/',
    
       # 番組情報の更新間隔 (分)
       # 番組情報を EDCB または Mirakurun から取得する間隔を設定します。デフォルトは 15 (分) です。
    

@@ -45,8 +45,8 @@ # カスタム HTTPS 証明書を有効化すると、https://192-168-x-xx.local.konomi.tv:7000/ の URL では KonomiTV にアクセスできなくなります。 # カスタム HTTPS 証明書を有効化するには、custom_https_certificate と custom_https_private_key の両方に設定が必要です。 # 基本的に変更する必要はありません。HTTPS 証明書について詳細に理解している方のみ設定してください。

  •    'custom_https_certificate': null,
    
  •    'custom_https_private_key': null,
    
  •    'custom_https_certificate': '/usr/local/etc/letsencrypt/live/example.org/fullchain.pem',
    
  •    'custom_https_private_key': '/usr/local/etc/letsencrypt/live/example.org/privkey.pem',
    

    },

    テレビのライブストリーミングの設定

@@ -59,7 +59,7 @@ # Intel Graphics 搭載の Intel CPU をお使いなら、QSVEncC が使えます。 # Geforce などの NVIDIA GPU をお使いなら、NVEncC が使えます。 # Radeon などの AMD GPU をお使いなら、VCEEncC が使えます。

  •    'encoder': 'QSVEncC',
    
  •    'encoder': 'FFmpeg',
    
       # 誰も見ていないチャンネルのエンコードタスクを何秒まで維持するか
       # 10 秒に設定したなら、10 秒間誰も見ていない状態が継続したらエンコードタスク(エンコーダー)を終了します。
    

@@ -80,7 +80,7 @@ # クライアントの [キャプチャの保存先] 設定で [KonomiTV サーバーにアップロード] または # [ブラウザでのダウンロードと、KonomiTV サーバーへのアップロードを両方行う] を選択したときに利用されます。 # Docker でインストールした場合も、ホストマシン側のフォルダの絶対パスを指定してください。

  •    'upload_folder': 'E:\TV-Capture',
    
  •    'upload_folder': '../TV-Capture',
    

    },

    Twitter 連携の設定

@@ -94,4 +94,4 @@ ‘consumer_key’: null, ‘consumer_secret’: null, } -} \ No newline at end of file +}

SSLの証明書は事前に取得して、適切なフォルダに入れておきます。

あとはキャプチャ用のディレクトリも掘っておきます。

> mkdir TV-Capture
ここまでやったらデータベースを設定します。
> cd server > pipenv run aerich upgrade
さて、すべての準備が完了しました。 サービスを起動しましょう。
> pipenv run serve
問題がなければ
[2022/08/31 17:27:01] INFO: Started server process [87012] [2022/08/31 17:27:01] INFO: Waiting for application startup. [2022/08/31 17:27:01] INFO: Channels updating... [2022/08/31 17:27:02] INFO: Channels update complete. (0.071 sec) [2022/08/31 17:27:02] INFO: Programs updating... [2022/08/31 17:27:05] INFO: Programs update complete. (3.398 sec) [2022/08/31 17:27:05] INFO: Application startup complete. [2022/08/31 17:27:05] INFO: Uvicorn running on http://127.0.0.77:7010 (Press CTRL+C to quit) [2022/08/31 17:27:12] INFO: 127.0.0.78:43748 - "GET /api/channels HTTP/1.1" 200 OK
のように表示されて、動きだします。何か問題があればエラーメッセージが詳しく出ますので、それを見て対応しましょう。 ここまでは jail 内部の問題。あとは jail を出て、親環境でサーバを dns に登録します。 たとえば、konomitv.example.org でアクセスできるように dns に登録します。

あとはブラウザから https://konomitv.example.org:7000/ にアクセスすれば、最新の KonomiTV にアクセスできます。 帯域を絞ればテザリング経由の VPN でも問題なくテレビが見えますので、世界中どこからでもテレビをコメント付きで 楽しむことができます。

いくつかはまったところ。 以前の release バージョンから DB をアップデートしたところ、アカウントの作成でエラーが出ました。 いったん DB を消してから作り直してあげるとうまくいきました。 事前に lo0 に 127.0.0.77 を割り当てていますが、これ、linux 版とか docker 版は事前に割り当てなくても 大丈夫なのかな?未確認なので謎。なんか docker は行けそうな気がする。 あとは自ドメインで SSLのワイルドカード証明書を取っておくといろいろと使いまわしが効くので便利ということかな。 自ドメイン持っていないと難しいけど。普通あるよねw

最後になりましたが便利なプログラムを公開してくれてありがとうございます。

タグ: FreeBSD KonomiTV PT3 TS抜き Ffmpeg Jail Mirakurun