東京生まれHOUSE MUSIC育ち

悪そうな奴はだいたい友達なの?

録画サーバーの構築手順(2023年5月版)


スポンサードリンク

録画サーバーを再構築したので、改めて手順をまとめました。

1. 背景

Ubuntu22.04で録画サーバーを運用しています。ファイルを整理しようとしたら、間違えて/varを削除してしまったのです。もちろん、rmのオプションは-rfをつけて。

そしたら、今まで動いてものが動かなくなりました。cronで設定していたスケジュールは消えました。dockerも動きません。イメージのpullだけでなく、buildもできません。そんな感じで、どうにもできなくなりました。

重要なファイルは消しちゃだめです。反省。。。

ということで、Ubuntu22.04を再インストールすることにしました。

なお、過去の手順は以下で記録していました。

nomusicnolife.hatenablog.com

なので、この手順をトレースすればすぐに復旧するはずでした。しかし、さまざまなパッケージがアップデートされており、このバージョンの違いにハマりました。ビデオカード関連のパッケージのアップデートが鬼門でした。

また、過去に構築した際は試行錯誤しており、うまく動作したときのdockerイメージが残っていました。しかし、それが無くなったことによりクリーンインストール時に意図したdockerイメージが作成できなくて、ここでも今回試行錯誤することとなりました。

今回のようにOSから再インストールすることになっても、まっさらな状態からでも迅速に復旧できることを目指しました。

2. 現状の課題

2.1. 録画ルールの定期バックアップ

現段階でも課題というか、やることはあります。

再インストールで困ったのは録画ルールが消えてしまったことです。育ててきたので、これが消えてしまったのはショックでした。

バックアップしていたことはしていたのですが、構築当初に取得したバックアップしかなかったので、ほぼ1から作り直しました。これからは定期的にバックアップするような運用にしていこうと考えています。

2.2. Mirakurunのアップデート

現在使用しているのは、Mirakurun3.8.0です。今は3.9.0-rc.4がリリースされています。

機能的にも追随できるように、アップデート対応したいです。

3. 手順の基本的な考え方

3.1. Macのターミナルで操作

できるだけ、Macのターミナルで作業を行います。というのも、コマンドのコピペをしやすいからです。Macだとctrl+cのショートカットキーを使用できるのですが、UbuntuだとCtrl+Shift+Cなので、慣れていないのです。

また、以前はUbuntuが新鮮で楽しかったこともあり、リモートデスクトップするようにしていました。しかし、いつもリモートデスクトップを使えるというわけではないのです。UbuntuでHDMIケーブルを接続し、さらにディスプレイに接続していないとビデオカード側でデスクトップが起動せず、リモートデスクトップが使えないようなのです。どのみち、Ubuntuのデスクトップを使用する機会はなく、ターミナルで作業した方が早いので、ターミナルでの操作をします。

3.2. 資材はGitHubにアップ

資材はGitHubにアップしてます。GitHubにアップしておけば、更新もしやすいですし復旧も容易だと考えるためです。

リポジトリはprivateではなく、publicにします。privateにしておくと、GitHub用の秘密鍵を設定することが必要です。これだと手間がかかるので面倒なためです。

4. 手順

以下を実施すると、nvenc可能なEPGStationで録画できるようになります。

4.1. Ubuntu22.04のインストール

最小構成でインストールします。

使うものはその都度入れればいいですし、使わないものをインストールするとアップデート等で時間がかります。最小構成で十分です。

4.2. ホームディレクトリを英語に変更(Ubuntuデスクトップ)

ホームディレクトリの日本語表記を英語に変更します。

LANG=C xdg-user-dirs-gtk-update

4.3. gitとsshをインストール(Ubuntuデスクトップ)

gitとsshをインストールします。

sudo apt install -y git openssh-server 

4.4. リポジトリのpull(以降、ターミナル)

以下のリポジトリをpullします。

https://github.com/yamadatt/docker-mirakurun-epgstation

4.5. 環境設定用のシェルを動かす

環境設定用のシェルを2つ動かします。

4.6. チューナーまでの設定

01_common.shでチューナーまでのインストールです。

これで入れて以下のコマンドで期待どおりに動いているかを確認します。px4_drvから始まる行が表示されれば、カーネルモジュールが正常にロードされています。

lsmod | grep -e ^px4_drv
px4_drv                81920  0

何も表示されない場合は、下記のコマンドを実行してから、再度上記のコマンドを実行して確認します。実際に、何度か表示されないことがあったので、この確認は必須です。

  modprobe px4_drv

次にデバイスが存在することを確認します。

ls /dev/pxmlt8video*
/dev/pxmlt8video0  /dev/pxmlt8video3  /dev/pxmlt8video6
/dev/pxmlt8video1  /dev/pxmlt8video4  /dev/pxmlt8video7
/dev/pxmlt8video2  /dev/pxmlt8video5

4.7. ビデオカードの設定

02_GPU.shでビデオカードを使用できるようにします。これでビデオカードのドライバーCUDAまで

ビデオカード関連はCUDAを入れます。以前はドライバーを入れて、CUDAを入れてました。しかし、組み合わせがマッチしないと動かないようで、CUDAだけ入れたらドライバーも入ったのでこれで良しとしています。

OSから直接nvidia-smi、dockerからnvidia-smiを確認します。

なお、nvidia-smiは以下のように表示されます。Driver Version: 530.30.02CUDA Version: 12.1の表記を確認できます。

  nvidia-smi
  Fri May  5 19:58:03 2023       
  +---------------------------------------------------------------------------------------+
  | NVIDIA-SMI 530.30.02              Driver Version: 530.30.02    CUDA Version: 12.1     |
  |-----------------------------------------+----------------------+----------------------+
  | GPU  Name                  Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
  | Fan  Temp  Perf            Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
  |                                         |                      |               MIG M. |
  |=========================================+======================+======================|
  |   0  NVIDIA GeForce GTX 1650         On | 00000000:01:00.0 Off |                  N/A |
  | 30%   32C    P8                5W /  75W|    443MiB /  4096MiB |      0%      Default |
  |                                         |                      |                  N/A |
  +-----------------------------------------+----------------------+----------------------+

  +---------------------------------------------------------------------------------------+
  | Processes:                                                                            |
  |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
  |        ID   ID                                                             Usage      |
  |=======================================================================================|
  |    0   N/A  N/A     33908      G   /usr/lib/xorg/Xorg                          341MiB |
  |    0   N/A  N/A     34011      G   ...libexec/gnome-remote-desktop-daemon        1MiB |
  |    0   N/A  N/A     34049      G   /usr/bin/gnome-shell                         12MiB |
  |    0   N/A  N/A     39320      G   ...irefox/1232/usr/lib/firefox/firefox       44MiB |
  |    0   N/A  N/A     46132      G   ...28432312,6163812547549432193,262144       39MiB |
  +---------------------------------------------------------------------------------------+

dockerは以下のコマンドを使用します。

  docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi
  Fri May  5 11:04:07 2023       
  +---------------------------------------------------------------------------------------+
  | NVIDIA-SMI 530.30.02              Driver Version: 530.30.02    CUDA Version: 12.1     |
  |-----------------------------------------+----------------------+----------------------+
  | GPU  Name                  Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
  | Fan  Temp  Perf            Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
  |                                         |                      |               MIG M. |
  |=========================================+======================+======================|
  |   0  NVIDIA GeForce GTX 1650         On | 00000000:01:00.0 Off |                  N/A |
  | 30%   32C    P8                5W /  75W|    408MiB /  4096MiB |      0%      Default |
  |                                         |                      |                  N/A |
  +-----------------------------------------+----------------------+----------------------+

  +---------------------------------------------------------------------------------------+
  | Processes:                                                                            |
  |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
  |        ID   ID                                                             Usage      |
  |=======================================================================================|
  +---------------------------------------------------------------------------------------+

4.8. 録画ルールのリストア

EPGStationのdockerコンテナーのIDを調査します。

docker exec -itのbashでコンテナーにアタッチします。

コンテナーにアタッチしたら、/appディレクトリに録画ルールのファイルを配置します。パス指定ができないようなので、/appに配置することが大事です。

配置したら、以下のコマンドです。

npm run restore 20230505_rule_backup.json 

そうすると、以下のように出力さればリストしたことになります。

  > epgstation@2.6.20 restore
  > node dist/DBTools.js -m restore -o "20230505_rule_backup.json"

  [2023-05-05T20:13:59.469] [INFO] system - config.yml read success
  [2023-05-05T20:13:59.474] [INFO] system - --- run ---
  [2023-05-05T20:13:59.474] [INFO] system - check db
  [2023-05-05T20:13:59.528] [INFO] system - --- start restore ---
  [2023-05-05T20:13:59.528] [INFO] system - --- read backup file ---
  [2023-05-05T20:13:59.536] [INFO] system - --- restore ---
  [2023-05-05T20:13:59.536] [INFO] system - rule
  [2023-05-05T20:13:59.671] [INFO] system - reserve
  [2023-05-05T20:13:59.844] [INFO] system - drop log file
  [2023-05-05T20:13:59.848] [INFO] system - recorded
  [2023-05-05T20:13:59.866] [INFO] system - thumbnail file
  [2023-05-05T20:13:59.873] [INFO] system - video file
  [2023-05-05T20:13:59.889] [INFO] system - recorded history
  [2023-05-05T20:13:59.894] [INFO] system - recorded tag
  [2023-05-05T20:13:59.896] [INFO] system - --- finish ---

4.9. 起動

docker-composeで起動します。

5. その他の設定

録画サーバーとは直接関係ないですが、使いやすくなる便利な以下を設定します。

5.1. sambaによるファイル共有

リポジトリにあるsmb.conf/etc/samba/smb.confに上書きます。

その後、以下のコマンドでsambaを再起動します。

sudo systemctl restart smbd.service 

sambaのユーザを以下で追加します。

sudo pdbedit -a ユーザー名

5.2. GitHubの秘密鍵設定

~/.ssh/に秘密鍵のgithub_rsaを配置する。

これはMacでも使用している秘密鍵。

vim ~/.ssh/configで以下を記述。インストールしたばかりは、configフィアルそのものがないので作ること。

Host github github.com
      HostName github.com
      User git
      IdentityFile ~/.ssh/github_rsa

ssh -T github.comで以下が表示されることを確認する。

Hi yamadatt! You've successfully authenticated, but GitHub does not provide shell access.

よくあるのは、パーミッションエラー。755のように権限がありすぎてもNGなので、600を設定すること。

sudo chmod 600 ~/.ssh/github_rsa

5.3. hugoの導入

2023年5月5日の最新版は0.111.3。

wget https://github.com/gohugoio/hugo/releases/download/v0.111.3/hugo_extended_0.111.3_linux-amd64.deb

インストールする。

sudo dpkg -i hugo_extended_0.111.3_linux-amd64.deb

バージョンを確認する。

hugo version

5.4. golangの導入

sudo apt install -y golang-go

バージョン確認。2023年5月5日にインストールできるのは以下のバージョン。

go version
go version go1.18.1 linux/amd64

5.5. チャンネルのスキャン-

以下で地上波のチャンネルスキャンができます。

curl -X PUT "http://192.168.1.49:40772/api/config/channels/scan?type=GR&setDisabledOnAdd=false&refresh=true"

6. 参考

以下を参考にさせていただきました。

6.1. EPGStation

l3tnun/EPGStation: Mirakurun を使用した録画管理ソフト

6.2. nvencを使用するEPGStation

kazuki0824/EPGStation-nvenc-docker

6.3. PLEX社の非公式ドライバー

nns779/px4_drv: Unofficial Linux driver for PLEX PX4/PX5/PX-MLT series ISDB-T/S receivers (not V4L-DVB)

6.4. シェルスクリプトのお手本

EPGStation-PLEX tuner-Ubuntu 22.04-自宅録画サーバー - Simple Life in the digital age