録画サーバーを再構築したので、改めて手順をまとめました。
1. 背景
Ubuntu22.04で録画サーバーを運用しています。ファイルを整理しようとしたら、間違えて/var
を削除してしまったのです。もちろん、rm
のオプションは-rf
をつけて。
そしたら、今まで動いてものが動かなくなりました。cronで設定していたスケジュールは消えました。dockerも動きません。イメージのpullだけでなく、buildもできません。そんな感じで、どうにもできなくなりました。
重要なファイルは消しちゃだめです。反省。。。
ということで、Ubuntu22.04を再インストールすることにしました。
なお、過去の手順は以下で記録していました。
なので、この手順をトレースすればすぐに復旧するはずでした。しかし、さまざまなパッケージがアップデートされており、このバージョンの違いにハマりました。ビデオカード関連のパッケージのアップデートが鬼門でした。
また、過去に構築した際は試行錯誤しており、うまく動作したときの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.02
とCUDA 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社の非公式ドライバー
6.4. シェルスクリプトのお手本
EPGStation-PLEX tuner-Ubuntu 22.04-自宅録画サーバー - Simple Life in the digital age