- 追加された行はこの色です。
- 削除された行はこの色です。
- HomeTV5 へ行く。
#author("2025-11-12T01:16:33+00:00","","")
#contents()
** サーバー環境更新(PT3 ドライバー変更) [#q47ef6a1]
*** Ubuntu 24.04 Server [#e47ab5b1]
-- [[IPv6 無効化:https://qiita.com/nouernet/items/c7a514921bc040b8e816]] ← npm がデフォルトで IPv6 接続を試みてエラーになる問題への対処
-- [[chrony:]] 設定(タイムソースを nict に変更 → /etc/chrony/chrony.conf)
[KGB2] munakata:~$ chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? ntp-k1.nict.jp 1 6 3 2 -158us[ -158us] +/- 8769us
^? ntp-a2.nict.go.jp 1 6 3 2 +142us[ +142us] +/- 4416us
^? ntp-a3.nict.go.jp 1 6 3 1 -280us[ -280us] +/- 4205us
^? ntp-b2.nict.go.jp 1 6 3 2 -28us[ -28us] +/- 3986us
*** PT3 Upstreamドライバー [#a961a64c]
- 何もドライバーを追加ンストールしなくても &color(red){PT3がDVB デバイスとして認識}; されている
-- デバイス名が異なるので設定ファイルは変更する必要がある
[KGB2] munakata:~$ ls -l /dev/dvb/
合計 0
drwxr-xr-x 2 root root 100 7月 30 12:54 adapter0
drwxr-xr-x 2 root root 100 7月 30 12:54 adapter1
drwxr-xr-x 2 root root 100 7月 30 12:54 adapter2
drwxr-xr-x 2 root root 100 7月 30 12:54 adapter3
drwxr-xr-x 2 root root 100 7月 30 12:54 adapter4
drwxr-xr-x 2 root root 100 7月 30 12:54 adapter5
drwxr-xr-x 2 root root 100 7月 30 12:54 adapter6
drwxr-xr-x 2 root root 100 7月 30 12:54 adapter7
- &color(red){DVB デバイスを使って録画する};(従来の recpt1 は使わない)
-- B-Casカードによる復調に対応していないのでソフトCAS(=arib-b25-stream-test)を使う
-- &ref(ARIBSTD-B1_ARIB STD-B25 ライブラリ.pdf);
--- libaribb25 の Debian パッケージをインストールすると、arib-b25-stream-test もインストールされます!
--- npm の arib-b25-stream-test は6年以上前の相当古い libarib25 がベースで一切更新されていないので、個人的にはこちらがおすすめです。
-- [[libaribb25 (github):https://github.com/tsukumijima/libaribb25]]
[KGB2] munakata:~$ sudo apt install cmake libpcsclite1 libpcsclite-dev pkg-config
[KGB2] munakata:~$ cmake -B build
[KGB2] munakata:~$ cd build
[KGB2] munakata:~$ make
[KGB2] munakata:~$ sudo make install
** [[Mirakurun:https://github.com/Chinachu/Mirakurun]] [#z9b94649]
*** (重要) mirakurun は &color(red){root}; としてインストールする [#h31f5a4e]
- channel 設定ファイル [#y7843082]
-- /usr/local/etc/mirakurun/channels.yml
-- &ref(channels.yml);
-- 参考URI
--- [[Mirakurunのチューナー設定(DVBデバイスを使う場合):https://nyanonon.hatenablog.com/entry/20190909/1568040000]]
** [[EPGStation:https://github.com/l3tnun/EPGStation.git]] [#sa899dbc]
*** (重要) mirakurun は &color(red){一般ユーザー}; としてインストールする [#q7a32ad5]
- 公式のインストール手順に従う
[KGB2] munakata:~/git$$ git clone https://github.com/l3tnun/EPGStation.git
[KGB2] munakata:~/git$ cd EPGStation
[KGB2] munakata:~/git/EPGStation$ npm run all-install
[KGB2] munakata:~/git/EPGStation$ npm run build
- config.yml
-- &ref(config.yml);
- 初回起動(npm 直接、pm2 利用)
-- npm 版
[KGB2] munakata:~/git/EPGStation$ $ npm start
[KGB2] munakata:~/git/EPGStation$ $ npm stop
-- pm2 利用版(pm2 を利用して自動起動設定が可能です)
初回のみ以下の起動設定が必要です
[KGB2] munakata:~/git/EPGStation$ sudo npm install pm2 -g
[KGB2] munakata:~/git/EPGStation$ sudo pm2 startup ubuntu
[KGB2] munakata:~/git/EPGStation$ pm2 start dist/index.js --name "epgstation"
[KGB2] munakata:~/git/EPGStation$ pm2 save
[KGB2] munakata:~/git/EPGStation$ pm2 stop epgstation(自動起動した EPGStation を終了)
[KGB2] munakata:~/git/EPGStation$ pm2 status
-&ref(pm2_epgstation.png);
*** サーバー設定(今回変更) [#f2c60dfc]
- ルールファイルが勝手に?変更され、録画済みのファイルが消える問題を解析していた仮定で、&color(red){リバースプロキシー経由で外部からアクセスされている懸念}; が浮上
- 以下のアクセス情報の変更を実施後に症状が改善された。→ ということは?
- %%ポート= &color(red){8987}; ← 8888 から変更 (20240813 更新)%%
- ポート= &color(red){8986}; ← 8987 から変更 (20241205 更新)以下のエラー(原因は不明だが)の対策として
[2024-12-04T20:15:43.708] [FATAL] system - uncaughtException: Error: listen EADDRINUSE: address already in use 0.0.0.0:8987
-- 待ち受けポートの変更は apache2 の設定ファイル変更と、epgstation の config.yaml の修正が必要
- アクセス情報
--- user = munakata
--- pass = frex7785TVR (20240813 更新)
*** 「設定ダウンロードに失敗しました」 エラーへの対処 [#v15ac144]
- 発生時のログ( ~/git/EPGStation/logs/Service/system.log
[2024-12-28T12:01:10.563] [INFO] system - config.yml read success
[2024-12-28T12:01:10.755] [INFO] system - SocketIO Server has started.
[2024-12-28T12:01:10.759] [FATAL] system - uncaughtException: Error: listen EADDRINUSE: address already in use 0.0.0.0:8986
[2024-12-28T12:01:21.817] [FATAL] system - uncaughtException: Error [ERR_IPC_CHANNEL_CLOSED]: Channel closed
- lsof で該当ポート(8986)を利用しているプロセスを確認する
- ポートが利用中というエラーだがゾンビプロセスとなった apach2 がポートを開放していない
[KGB2] munakata:~/git/EPGStation/logs$ sudo lsof -i :8986
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 2590 root 19u IPv6 19756 0t0 TCP *:8986 (LISTEN)
apache2 6740 www-data 18u IPv4 56285 0t0 TCP kgb2:59178->kgb2:8986 (CLOSE_WAIT)
apache2 6742 www-data 18u IPv4 45800 0t0 TCP kgb2:59220->kgb2:8986 (CLOSE_WAIT)
apache2 6743 www-data 18u IPv4 61566 0t0 TCP kgb2:59174->kgb2:8986 (CLOSE_WAIT)
apache2 6764 www-data 18u IPv4 53031 0t0 TCP kgb2:59228->kgb2:8986 (CLOSE_WAIT)
apache2 7049 www-data 18u IPv4 60770 0t0 TCP kgb2:59180->kgb2:8986 (CLOSE_WAIT)
apache2 8728 www-data 18u IPv4 56621 0t0 TCP kgb2:59196->kgb2:8986 (CLOSE_WAIT)
apache2 8729 www-data 18u IPv4 56288 0t0 TCP kgb2:59224->kgb2:8986 (CLOSE_WAIT)
apache2 8731 www-data 18u IPv4 53028 0t0 TCP kgb2:59210->kgb2:8986 (CLOSE_WAIT)
** 「設定ダウンロードに失敗しました」 エラーへの対処(決定版)ChatGPTが全部教えてくれた [#ee5d3fb1]
*** リバースプロキシ設定の見直し [#sf8c4395]
- keepalive=On を disablereuse=on に変更した
# Reverse Proxy setting (for remote EPGStation access)
ProxyRequests off
#ProxyPass / http://192.168.11.20:8986/
#ProxyPass / http://192.168.11.20:8986/ connectiontimeout=5 timeout=30 keepalive=On
ProxyPass / http://192.168.11.20:8986/ connectiontimeout=5 timeout=30 disablereuse=on
ProxyPassReverse / http://192.168.11.20:8986/
*** EPGStation の停止 [#u3ef48d6]
[KGB2] munakata:~$ sudo pm2 stop epgstation
[PM2] Applying action stopProcessId on app [epgstation](ids: [ 1 ])
[PM2] [epgstation](1) ✓
┌────┬──────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼──────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 1 │ epgstation │ default │ 2.10.0 │ fork │ 0 │ 0 │ 2 │ stopped │ 0% │ 0b │ root │ disabled │
└────┴──────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Module
┌────┬──────────────────────────────┬───────────────┬──────────┬──────────┬──────┬──────────┬──────────┬──────────┐
│ id │ module │ version │ pid │ status │ ↺ │ cpu │ mem │ user │
├────┼──────────────────────────────┼───────────────┼──────────┼──────────┼──────┼──────────┼──────────┼──────────┤
│ 0 │ pm2-logrotate │ 2.7.0 │ 60454 │ online │ 0 │ 0% │ 67.7mb │ root │
└────┴──────────────────────────────┴───────────────┴──────────┴──────────┴──────┴──────────┴──────────┴──────────┘
*** 8986番ポートの開放 [#sd13a099]
[KGB2] munakata:~$ sudo lsof -i :8986
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 60654 root 19u IPv6 317072 0t0 TCP *:8986 (LISTEN)
[KGB2] munakata:~$ sudo kill -9 60654
[KGB2] munakata:~$ sudo lsof -i :8986
*** EPGStation の再起動 [#se156d69]
[KGB2] munakata:~$ sudo pm2 start epgstation
[PM2] Applying action restartProcessId on app [epgstation](ids: [ 1 ])
[PM2] [epgstation](1) ✓
[PM2] Process successfully started
┌────┬──────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼──────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 1 │ epgstation │ default │ 2.10.0 │ fork │ 82603 │ 0s │ 2 │ online │ 0% │ 16.6mb │ root │ disabled │
└────┴──────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Module
┌────┬──────────────────────────────┬───────────────┬──────────┬──────────┬──────┬──────────┬──────────┬──────────┐
│ id │ module │ version │ pid │ status │ ↺ │ cpu │ mem │ user │
├────┼──────────────────────────────┼───────────────┼──────────┼──────────┼──────┼──────────┼──────────┼──────────┤
│ 0 │ pm2-logrotate │ 2.7.0 │ 60454 │ online │ 0 │ 0% │ 68.5mb │ root │
└────┴──────────────────────────────┴───────────────┴──────────┴──────────┴──────┴──────────┴──────────┴──────────┘
*** 自動リカバリースクリプト [#d3ae7ee9]
- &ref(epgstation-recover.sh,center,/usr/local/bin/epgstation-recover.sh);
sudo chmod +x /usr/local/bin/epgstation-recover.sh
sudo crontab -e
- crontab の設定内容
*/5 * * * * /usr/local/bin/epgstation-recover.sh
*** Mirakurun の Docker 化 [#w386b415]
- Mirakurun が pm2 サポートを終了し、Docker コンテナ実行だけをサポートするようになった。
- Docker 化された Mirakurun と pm2 起動の Epgstation を組み合わせて実行することは何も問題ない
- [[起動方法(Start / Stop / Restart):https://github.com/Chinachu/Mirakurun/blob/master/doc/Platforms.md#start--stop--restart]]
Start / Stop / Restart
cd ~/mirakurun/
# Start
docker compose up -d
# Stop
docker compose down
# Restart
docker compose up -d --force-recreate
- [[設定方法(Installation / Uninstallation / Update):https://github.com/Chinachu/Mirakurun/blob/master/doc/Platforms.md#installation--uninstallation--update]]
# Create: /opt/mirakurun/
sudo mv -vf /usr/local/mirakurun /opt/mirakurun
sudo mkdir -p /opt/mirakurun/run /opt/mirakurun/opt /opt/mirakurun/config /opt/mirakurun/data
# Installation
mkdir ~/mirakurun/
cd ~/mirakurun/
wget https://raw.githubusercontent.com/Chinachu/Mirakurun/refs/heads/release/4.0.0/docker/docker-compose.yml
docker compose pull
docker compose run --rm -e SETUP=true mirakurun
docker compose up -d
# Uninstallation
cd ~/mirakurun/
docker compose down --rmi all
# Update
cd ~/mirakurun/
docker compose down --rmi all
docker compose pull
docker compose up -d
- mirakurun の自動起動設定(systemd のサービスに登録)
-- &ref(mirakurun.service,center,設定ファイル); ---> /etc/systemd/system/mirakurun.service
[Unit]
Description=Mirakurun Docker Compose Service
After=network-online.target docker.service
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=true
WorkingDirectory=/raid_vol/home/munakata/mirakurun
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
-- サービスの登録と有効化
--- systemdに認識させる
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
--- 自動起動を有効化
sudo systemctl enable mirakurun.service
--- テスト起動(念のため)
sudo systemctl start mirakurun.service
--- ステータス確認
sudo systemctl status mirakurun.service
*** サーバー全体の挙動不安定に起因する録画サーバーの不動作の解析 [#uc5f1fce]
- systemd-journald の状態異常
これはファイルシステムよりも、/run または journald が使用する Unix domain socket の破損・リソース枯渇・名前空間の問題である可能性が高いです。
-- /run は tmpfs 上なので、リブートで揮発するデータに依存
-- journald のデータベースファイル (/var/log/journal/...) 破損の可能性も考慮すべき
-- &color(red){systemd-journald が Watchdog 通知を送信できないまま長時間動作しているのは明らかに異常};
- 対策
-- ① journald のログ格納先をバックアップ・削除
sudo mv /var/log/journal /var/log/journal.bak
sudo mkdir /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
-- ② 再起動時の fsck を強制的に実行
sudo touch /forcefsck
sudo reboot
-- この対応によりサーバーの異常が解消され、録画エラーも解決したように見えている
- 問題の背景(systemd の cgroup/scopes が壊れている)
-- &color(red){Ubuntu 22.04 + Docker + systemd で以下のような悪循環が発生している};
--- /run や cgroup2 namespace が破損 → journald のユニット制御不能
--- journald → systemd に状態通知不可(WATCHDOG=1 送れない)
--- systemd → Docker scope 割り当て失敗
--- &color(red){すべてのサービス操作が 25秒タイムアウトで詰まる};
-- このパターンは 再起動で回復することがあるが、&color(red){fsck や systemd の再整備をしないと再発する}; という非常にやっかいな状態です。
- 長期的対策(このような状況が定期的に再発するようであれば)
-- journald → rsyslog 等への切り替え検討
-- カーネルバージョン(6.8.0-60)と systemd バージョンの互換性も疑ってみる価値あり
-- また、NVMeのコントローラドライバ不整合や udev 問題も稀に関連するのでカーネルログ全体の追跡も推奨