#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 問題も稀に関連するのでカーネルログ全体の追跡も推奨

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS