#author("2024-06-16T08:18:21+09:00","","")
#contents
* HW 環境 [#b0d05f02]
- 現在稼働中の TV 録画サーバー(Ubutu16.04-LTS, PT3 x2, EPGREC) が陳腐化、特に OS のバージョンが古くなりすぎた
- この機会に現在((購入/導入)可能)で/(メンテナンスされている)ものを組み合わせてシステムを更新する
- ''三鷹用サーバーとして使用していたハードをそのまま活用し、新規に PLEX 製チューナーカードを使って録画サーバーを構築''
- ''その後、横浜からメインサーバーを三鷹に移設したので、本機はバックアップ用に降格し常時通電も中止した''
- TV 録画機能はインストールしたままなので、再起動すれば稼働可能な状況

** Ubuntu バージョン更新(to Ubuntu 22.04 LTS) [#td13c7e1]
- ''do-release-upgrade'' コマンドを利用して段階的にローリングアップデート
- 既存の環境設定(SSH、Samba、Network 設定などを引き継げるので)
- 但し、この方法を使った場合 ''以前のバージョンに戻ることはできない'' 点には覚悟が必要

** チューナーボード( PLEX 8ch 同時録画 ) [#h0bd793e]
- [[PLEX MLT8PE:http://www.plex-net.co.jp/product/px-mlt8pe/]]
-- PCIx x1 (電源供給用)
-- USB オンボードヘッダー(データ用、USB2.0 でも OK)
-- カードリーダー内蔵

|Function|Decice|h
|USB Bridge|ITE IT9305E|
|ISDB-T/S Demodulator|Sony CXD2856ER (x3)|
|Terrestrial/Satellite Tuner|Sony CXD2858ER (x3)|

-- &ref(px-mlt8pe_1.jpg); 
-- &ref(px-mlt8pe_3.jpg);

*** ボード認識(PCI デバイスではなく、USB として認識される) [#k8706298]
- 以下では PLEX のボードと カードリーダーが認識されている
 [MUMIT] munakata:~$ lsusb
 Bus 002 Device 002: ID 152d:9561 JMicron Technology Corp. / JMicron USA Technology Corp. JMS56x Series
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
 Bus 001 Device 004: ID 04e6:5116 SCM Microsystems, Inc. SCR331-LC1 / SCR3310 SmartCard Reader
 Bus 001 Device 003: ID 0511:0252 N'Able (DataBook) Technologies, Inc. PXML͔8PE
 Bus 001 Device 002: ID 0511:0253 N'Able (DataBook) Technologies, Inc. PXML͔8PE
 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


* SW 環境 [#pf12f915]
** Ubuntu 22.04-LTS Desktop 版を利用 [#p50e0963]
*** インストール ディレクトリ [#g2de9156]
- KGB2
-- ''/home/munakata/git'' 以下
 [KGB2] munakata:~$ ls -l ./git
 合計 36
 drwxrwxr-x  3 munakata munakata 4096  3月 15  2023 479b7da80063e39d1ca2cf467e40e290
 drwxrwxr-x 16 munakata munakata 4096  1月 20 11:10 EPGStation
 drwxrwxr-x  6 munakata munakata 4096  2月  8  2023 OLD_mod-authn-otp
 drwxrwxr-x  3 munakata munakata 4096  3月 15  2023 epgdump
 drwxrwxr-x  7 munakata munakata 4096  2月  2  2023 libarib25
 drwxrwxr-x  2 munakata munakata 4096  3月 15  2023 mirakurun_channel_set
 drwxrwxr-x  6 munakata munakata 4096  2月 22  2023 mod-authn-otp
 drwxrwxr-x  5 munakata munakata 4096  2月  2  2023 pt3
 drwxrwxr-x  4 munakata munakata 4096  3月 15  2023 recdvb

- MUMIT
-- ''/home/munakata/git'' 以下
 [MUMIT] munakata:~$ ls -l git
 合計 12
 drwxrwxr-x 17 munakata munakata 4096  3月 21  2023 EPGStation
 drwxrwxr-x  7 munakata munakata 4096  3月 21  2023 libarib25
 drwxrwxr-x  9 munakata munakata 4096  3月 21  2023 px4_drv

*** 開発環境 [#w753a330]
- autoconf build-essential cmake curl git libssl-dev libtool libboost-all-dev pkg-config yasm dkms
 $sudo apt-get install autoconf build-essential cmake curl git libssl-dev libtool libboost-all-dev pkg-config yasm dkms

*** アプリ [#ha738395]
- chrony (時刻合わせ) 
- samba

*** ARIB ライブラリー (libarib25) [#b6e0dc4e]
- ソースから ARIB ライブラリー関数をビルドしてインストール
 $ mkdir ~/git_work_arib
 $ cd ~/git_work_arib
 $ git clone https://github.com/stz2012/libarib25.git
 $ cd libarib25/
 $ cmake .    <--- '.'を忘れずに!!
 $ make
 # sudo make install
 # sudo /sbin/ldconfig

-- cmake で ''Could NOT find PCSC (missing: PCSC_LIBRARIES)''エラーになる場合( Ubuntu-server で発生する )
 munakata@mumit:~/git/libarib25$ munakata@mumit:~/git/libarib25$ cmake .
 CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
   Could NOT find PCSC (missing: PCSC_LIBRARIES)
 Call Stack (most recent call first):
   /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
   cmake/FindPCSC.cmake:29 (find_package_handle_standard_args)
   CMakeLists.txt:30 (find_package)

以下の2つのパッケージをインストールする

 munakata@mumit:~/git/libarib25$ sudo apt-get install libpcsclite-dev
 munakata@mumit:~/git/libarib25$  sudo apt-get install gengetopt




- ライブラリーが認識されていることを確認
 [MUMIT] munakata:~$ ldconfig -p | grep arib
         libarib25.so.0 (libc6,x86-64) => /usr/local/lib/libarib25.so.0
         libarib25.so (libc6,x86-64) => /usr/local/lib/libarib25.so
         libaribb24.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libaribb24.so.0


*** B-CASカード認識 [#n00955c1]
- B-CAS カードの購入
- カードリーダーの購入(ボード上のカードリーダーを PCSC で認識させる方法が不明だった)
-- 利用するコミュニティドライバーの説明には ''ボード上のカードリーダーをサポートしていない''と書かれていた
 このドライバは、各種対応デバイスに内蔵されているカードリーダーやリモコンの操作には対応していません
- PCSC のインストール
 $sudo apt-get install pcscd pcsc-tools libpcsclite-dev
 $sudo systemctl enable pcscd.service 

- B-CAS カードの面に注意( &color(red){赤い面が下}; になる)
-- &ref(BS_card.jpg);
 [MUMIT] munakata:~$ pcsc_scan
 Using reader plug'n play mechanism
 Scanning present readers...
 0: SCM Microsystems Inc. SCR 3310 [CCID Interface] (53312218261543) 00 00
 
 Sat Jan 28 11:52:57 2023
  Reader 0: SCM Microsystems Inc. SCR 3310 [CCID Interface] (53312218261543) 00 00
   Event number: 2
   Card state: Card inserted,
   ATR: 3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99
 
 ATR: 3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99
 + TS = 3B --> Direct Convention
 + T0 = F0, Y(1): 1111, K: 0 (historical bytes)
   TA(1) = 12 --> Fi=372, Di=2, 186 cycles/ETU
     21505 bits/s at 4 MHz, fMax for Fi = 5 MHz => 26881 bits/s
   TB(1) = 00 --> VPP is not electrically connected
   TC(1) = FF --> Extra guard time: 255 (special value)
   TD(1) = 91 --> Y(i+1) = 1001, Protocol T = 1
 -----
   TA(2) = 81 --> Protocol to be used in spec mode: T=1 - Unable to change - defined by interface bytes
   TD(2) = B1 --> Y(i+1) = 1011, Protocol T = 1
 -----
   TA(3) = 7C --> IFSC: 124
   TB(3) = 45 --> Block Waiting Integer: 4 - Character Waiting Integer: 5
   TD(3) = 1F --> Y(i+1) = 0001, Protocol T = 15 - Global interface bytes following
 -----
   TA(4) = 03 --> Clock stop: not supported - Class accepted by the card: (3G) A 5V B 3V
 + Historical bytes:
 + TCK = 99 (correct checksum)
 
 Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
 3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99
         Japanese Chijou Digital B-CAS Card (pay TV)

- pcsc_scan が失敗( ''SCardEstablishContext: Service not available'' )する場合
-- pcsd startが実行されていない( /var/run/pcscd/pcscd.comm が存在しない)のが原因
-- pcscd を再起動する
 $sudo systemctl restart pcscd.socket
 $ls /var/run/pcscd/pcscd.comm
  /var/run/pcscd/pcscd.comm



** チューナーカードのドライバー [#q0135174]
- github  上の ''nns779''  [[コミュニティ(通称 非公式)ページ:https://github.com/nns779/px4_drv]] からソース一式を clone
 $ git clone https://github.com/nns779/px4_drv


- [[PLEX サイト:http://www.plex-net.co.jp/download/]] で配布されている公式ドライバーからファームウエアを wget で入手し unzip で解凍
- ''fwtool'' コマンドを使って ''PXW3U4.sys'' ファイルから ''it930x-firmware.bin'' という名前でファームウエアを分離
-  Linux ホスト上の ''/lib/firmware'' ディレクトリーに配置(直接ボードに書き込む訳ではなく、ドライバー初期化時にロードする仕組み)

 $ cd px4_drv/fwtool/
 $ make
 $ wget http://plex-net.co.jp/plex/pxw3u4/pxw3u4_BDA_ver1x64.zip
 $ unzip pxw3u4_BDA_ver1x64.zip
 $ sudo ./fwtool pxw3u4_BDA_ver1x64/PXW3U4.sys it930x-firmware.bin
 $ sudo cp -p it930x-firmware.bin /lib/firmware/
 $ cd ..


- dkms の仕組みを利用して kernel バージョンに合わせたドライバーをビルド、インストール
-- 非公式ドライバーを展開した場所にある ''dkms.conf'' と同じディレクトリに、以下の内容が書かれた ''dkms.install'' ファイルを作成する
 . ./dkms.conf
 cp -a `pwd` /usr/src/$PACKAGE_NAME-$PACKAGE_VERSION
 dkms add -m $PACKAGE_NAME -v $PACKAGE_VERSION
 dkms build -m $PACKAGE_NAME -v $PACKAGE_VERSION
 dkms install -m $PACKAGE_NAME -v $PACKAGE_VERSION

-- 上で作成した dkms のインストールスクリプトを実行
 $ sudo bash dkms.install

-- カーネルロードモジュールの確認
 [MUMIT] munakata:$ lsmod | grep -e ^px4_drv
 px4_drv               172032  0

-- マシンの再起動で ''/dev/pxmlt8videoN'' というドライバーがロードされていることを確認
 [MUMIT] munakata:~$ ls -l /dev/px*
 crw-rw-r-- 1 root video 511, 0  1月 26 11:26 /dev/pxmlt8video0
 crw-rw-r-- 1 root video 511, 1  1月 26 11:26 /dev/pxmlt8video1
 crw-rw-r-- 1 root video 511, 2  1月 26 11:26 /dev/pxmlt8video2
 crw-rw-r-- 1 root video 511, 3  1月 26 11:26 /dev/pxmlt8video3
 crw-rw-r-- 1 root video 511, 4  1月 26 11:26 /dev/pxmlt8video4
 crw-rw-r-- 1 root video 511, 5  1月 26 11:26 /dev/pxmlt8video5
 crw-rw-r-- 1 root video 511, 6  1月 26 11:26 /dev/pxmlt8video6
 crw-rw-r-- 1 root video 511, 7  1月 26 11:26 /dev/pxmlt8video7

-- dkms を使ったドライバーアンインストール用のスクリプト ''dkms.uninstall'' を作成
 . ./dkms.conf
 dkms remove -m $PACKAGE_NAME -v $PACKAGE_VERSION --all
 rm -vrf /usr/src/$PACKAGE_NAME-$PACKAGE_VERSION

-- ドライバーのアップデート
 $ git pull
 $ sudo bash dkms.uninstall
 $ sudo bash dkms.install

** 録画コマンド ''recpt1'' のビルドと録画テスト [#g61b315b]
- 録画コマンドは、PLEX 公式ドライバ付属の recpt1 を利用する
 $ wget http://plex-net.co.jp/download/linux/Linux_Driver.zip
 $ unzip Linux_Driver.zip
 $ cd Linux_Driver/MyRecpt1/MyRecpt1/recpt1

- デバイス名を公式ドライバの記述から非公式のものに置き換するためにヘッダファイル ''pt1_dev.h'' を編集
 $ sed -i".org" 's/-DTV/video/g' pt1_dev.h
- ''疑問:'' 
-- 上記の sed コマンドは ''/dev/px4ーDTV0'' となっているデバイス名を ''/dev/px4-video0'' に書き換えるもの
-- 今回のカードのドライバー名は ''/dev/px4-video0'' ではなく ''/dev/pxmlt8video0'' である
-- 実際に存在するデバイス名を記載しなければ実行時にカードを見つけられないのでは
-- 更に実際に存在しないカード(pt1/2/3 とか)をヘッダーから削除してしまっても良いのでは
-- このファイルは 地デジ と BS/CS にチャンネルを明示的に割り振っている(ように見える)が、このカードに割り振りの制約は無い

- 実際に使った ''pt1_dev.h'' ファイル(先頭部分)
 [MUMIT] munakata:~/plex/Linux_Driver/MyRecpt1/MyRecpt1/recpt1$ cat pt1_dev.h
 /* -*- tab-width: 4; indent-tabs-mode: nil -*- */
 #ifndef _PT1_DEV_H_
 #define _PT1_DEV_H_
 
 //****************************************************
 //*********** Jacky Han Modification Start ***********
 //****************************************************
 
 char *bsdev[NUM_BSDEV] = {
    "/dev/pxmlt8video0",
    "/dev/pxmlt8video1",
    "/dev/pxmlt8video4",
    "/dev/pxmlt8video5",
    "/dev/pxmlt8video8",
    "/dev/pxmlt8video9",
    "/dev/pxmlt8video12",
    "/dev/pxmlt8video13",
    "/dev/pxmlt8video16",
    "/dev/pxmlt8video17",
    "/dev/pxmlt8video20",
    "/dev/pxmlt8video21",
    "/dev/pxmlt8video24",
    "/dev/pxmlt8video25",
    "/dev/pxmlt8video28",
    "/dev/pxmlt8video29"
 
 };
 char *isdb_t_dev[NUM_ISDB_T_DEV] = {
    "/dev/pxmlt8video2",
    "/dev/pxmlt8video3",
    "/dev/pxmlt8video6",
    "/dev/pxmlt8video7",
    "/dev/pxmlt8video10",
    "/dev/pxmlt8video11",
    "/dev/pxmlt8video14",
    "/dev/pxmlt8video15",
    "/dev/pxmlt8video18",
    "/dev/pxmlt8video19",
    "/dev/pxmlt8video22",
    "/dev/pxmlt8video23",
    "/dev/pxmlt8video26",
    "/dev/pxmlt8video27",
    "/dev/pxmlt8video30",
    "/dev/pxmlt8video31"
 };
 
 
 //****************************************************
 //************ Jacky Han Modification End ************
 //****************************************************
 (以下、変更なし)


- pt1/2/3 系のコマンドを区別できるように ''Makefile.in'' を編集してコマンド名を recpt1_px4 に変更
 $ vi Makefile.in
 
 変更前) ※7行目以降
 TARGET = recpt1
 TARGET2 = recpt1ctl
 TARGET3 = checksignal
  
 変更後)
 TARGET = recpt1_px4
 TARGET2 = recpt1ctl_px4
 TARGET3 = checksignal_px4

- recpt1_px4 のビルド
 [MUMIT] munakata:~/plex/offcial/Linux_Driver/MyRecpt1/MyRecpt1/recpt1$ make clean
 gcc -MM recpt1.c decoder.c mkpath.c tssplitter_lite.c recpt1core.c asicen_dtv.c recpt1ctl.c recpt1core.c asicen_dtv.c -I../driver -Wall - D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 > .deps
 rm -f recpt1.o decoder.o mkpath.o tssplitter_lite.o recpt1core.o asicen_dtv.o recpt1ctl.o recpt1core.o  asicen_dtv.o checksignal.o 
 recpt1core.o  asicen_dtv.o recpt1 recpt1ctl checksignal .deps version.h
 
 [MUMIT] munakata:~/plex/offcial/Linux_Driver/MyRecpt1/MyRecpt1/recpt1$ sh ./configure --enable-b25
 checking for gcc... gcc
 checking for C compiler default output file name... a.out
 checking whether the C compiler works... yes
 checking whether we are cross compiling... no
 checking for suffix of executables...
 checking for suffix of object files... o
 checking whether we are using the GNU C compiler... yes
 checking whether gcc accepts -g... yes
 checking for gcc option to accept ISO C89... none needed
 checking for create_arib_std_b25 in -larib25... yes
 checking for log10 in -lm... yes
 checking for pthread_kill in -lpthread... yes
 configure: creating ./config.status
 config.status: creating Makefile
 config.status: creating config.h
 
 [MUMIT] munakata:~/plex/offcial/Linux_Driver/MyRecpt1/MyRecpt1/recpt1$ make

-- make を実行すると多数のワーニング ''warning: braces around scalar initializer'' が出る
--- make の結果 ---> &ref(make_log.txt);

- ワーニングなのでコマンド自体は出来上がり、インストールも可能だった
 [MUMIT] munakata:~/plex/offcial/Linux_Driver/MyRecpt1/MyRecpt1/recpt1$ sudo make install
 install -m 755 recpt1_px4 recpt1ctl_px4 checksignal_px4 /usr/local/bin

- 受信テスト
 [MUMIT] munakata:$ recpt1_px4 --b25 --strip 27 30 ~/test.ts
 [MUMIT] munakata:$ recpt1_px4 --b25 --strip BS15_0 30 ~/test2.ts

* Runtime 関係 [#bbaea76e]
** [[Mirakurun:https://github.com/Chinachu/Mirakurun]] [#k2eca623]
- [[Remarks for Platform Support:https://github.com/Chinachu/Mirakurun/blob/master/doc/Platforms.md]]
-- ''Node.js ^14.17.0 || ^16 needed'' 

*** node 16.x インストール [#hc10e2dc]
 [MUMIT] munakata:~$ curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
 
 ## Installing the NodeSource Node.js 16.x repo...
 ## Populating apt-get cache...

 [MUMIT] munakata:~$ sudo apt-get install -y nodejs
 
 [MUMIT] munakata:~$ node -v
 v16.19.0

*** Mirakurunのインストール [#c7d78dfd]
- Mirakurun はデバイスを触るサービスなので root でインストールする必要がある
- # PM2 (Process Manager)
 [MUMIT] munakata:~$ sudo npm install pm2 -g

- Mirakurun インストール 
 [MUMIT] munakata:~$ sudo npm install mirakurun -g --unsafe-perm --foreground-scripts --production
 [MUMIT] munakata:~$ sudo npm install rivarun -g
 [MUMIT] munakata:~$ sudo npm install arib-b25-stream-test -g --unsafe

-- &ref(launched.jpg);
*** Tuner 設定 [#b14b28f1]
- &color(red){''Tuner 設定[PT3 x2]''};(デフォルトは PT3 になっている)
-- ''BS/CS = channel 0/1/4/5''
-- ''GR(地デジ) = channel 2/3/6/7''
-- &ref(tuners.yml);
 [KGB2] munakata:~$ cat tuners.yml
 - name: PT3-S1
   types:
     - BS
     - CS
   command: recpt1 --device /dev/pt3video0 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PT3-S2
   types:
     - BS
     - CS
   command: recpt1 --device /dev/pt3video1 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PT3-S3
   types:
     - BS
     - CS
   command: recpt1 --device /dev/pt3video4 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PT3-S4
   types:
     - BS
     - CS
   command: recpt1 --device /dev/pt3video5 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PT3-T1
   types:
     - GR
   command: recpt1 --device /dev/pt3video2 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
  
 - name: PT3-T2
   types:
     - GR
   command: recpt1 --device /dev/pt3video3 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PT3-T4
   types:
     - GR
   command: recpt1 --device /dev/pt3videoi6 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PT3-T4
   types:
     - GR
   command: recpt1 --device /dev/pt3video7 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: TBS6922
   types:
     - SKY
   command: szap-s2j -c /usr/local/etc/szap-s2j.conf -l <satellite> -S 1 -p -r -M 5 -C 35 <channel>
   dvbDevicePath: /dev/dvb/adapter0/dvr0
   decoder: arib-b1-stream-test
   isDisabled: true

- &color(red){''Tuner 設定[PLEX MLT8PE]''};(デフォルトは PT3 になっている)
-- BS/CS = channel 0/1/4/5 (たぶん PLEX はどのチャンネルでも BS/CS も GR も受信できのだろうが)
-- GR = channel 2/3/6/7
-- &ref(tuners_plex.yml);
 [MUMIT] munakata:~/plex$ sudo mirakurun config tuners
 - name: PXMLT8-S1
   types:
     - BS
     - CS
   command: recpt1_px4 --device /dev/pxmlt8video0 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PXMLT-S2
   types:
     - BS
     - CS
   command: recpt1_px4 --device /dev/pxmlt8video1 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PXMLT8-S3
   types:
     - BS
     - CS
   command: recpt1_px4 --device /dev/pxmlt8video4 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PXMLT-S4
   types:
     - BS
     - CS
   command: recpt1_px4 --device /dev/pxmlt8video5 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PXMLT-T1
   types:
     - GR
   command: recpt1_px4 --device /dev/pxmlt8video2 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PXMLT-T2
   types:
     - GR
   command: recpt1_px4 --device /dev/pxmlt8video3 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PXMLT-T3
   types:
     - GR
   command: recpt1_px4 --device /dev/pxmlt8video6 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: PXMLT-T4
   types:
     - GR
   command: recpt1_px4 --device /dev/pxmlt8video7 <channel> - -
   decoder: arib-b25-stream-test
   isDisabled: false
 
 - name: TBS6922
   types:
     - SKY
   command: szap-s2j -c /usr/local/etc/szap-s2j.conf -l <satellite> -S 1 -p -r -M 5 -C 35 <channel>
   dvbDevicePath: /dev/dvb/adapter0/dvr0
   decoder: arib-b1-stream-test
   isDisabled: false


*** チャンネル設定 [#w032d3a0]
- Mirakurun 3.9-rc2 では GR/BS ともに自動登録できるようだが、[[チャンネル登録スクリプト:https://www.jifu-labo.net/2019/02/mirakurn_channels_config/]] を使った設定を行った
-- &ref(channels.yml);


*** mirakurun-server の再始動 [#kd50a43c]
 [MUMIT] munakata:~/plex$ sudo pm2 stop mirakurun-server
 [MUMIT] munakata:~/plex$ sudo pm2 start mirakurun-server

- log rotation の設定
 [MUMIT] munakata:~/git/EPGStation$ sudo pm2 install pm2-logrotate
 
 [MUMIT] munakata:~/git/EPGStation$ sudo pm2 list 
- &ref(all_active.jpg);

-- log_rotation 設定ファイル ( etc/logrotate.d/mirakurun )
 /usr/local/var/log/mirakurun.stdout.log
 /usr/local/var/log/mirakurun.stderr.log
 /{
   daily
   compress
   rotate 7
   missingok
   notifempty
 }

- channel の設定
-- コマンド
 [KGB2] munakata:~$ sudo mirakurun config channels
-- ファイルの場所 
 [KGB2] munakata:~$ ls -l /usr/local/etc/mirakurun/channels.yml
 -rw-r--r-- 1 root root 2394  3月 14 06:11 /usr/local/etc/mirakurun/channels.yml
-- %%''&color(red){TVK (GR 17) が取得できない、テレビでは見えているのに};''%% → チャンネル取得スクリプトで正常に取得できた

** [[EPGStation:https://github.com/l3tnun/EPGStation]] [#n6765809]
- [[Linux / macOS 用セットアップマニュアル:https://github.com/l3tnun/EPGStation/blob/master/doc/linux-setup.md]]
- インストール要件の確認

 [MUMIT] munakata:~$ node --version
 v16.19.0
 
 [MUMIT] munakata:~$ curl -o - http://localhost:40772/api/version
 {"current":"3.9.0-rc.2","latest":"3.9.0-rc.2"} 
 
 [MUMIT] munakata:~$ python --version
 Python 2.7.18
 
 [MUMIT] munakata:~$ gcc --version
 gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
 
 [MUMIT] munakata:~$ ffmpeg -version
 ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
 built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
 configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu -- incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable- libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx 
 --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable- libx264 --enable-shared
 libavutil      56. 70.100 / 56. 70.100
 libavcodec     58.134.100 / 58.134.100
 libavformat    58. 76.100 / 58. 76.100
 libavdevice    58. 13.100 / 58. 13.100
 libavfilter     7.110.100 /  7.110.100
 libswscale      5.  9.100 /  5.  9.100
 libswresample   3.  9.100 /  3.  9.100
 libpostproc    55.  9.100 / 55.  9.100

 [MUMIT] munakata:$ cd git
 [MUMIT] munakata:/git$ git clone https://github.com/l3tnun/EPGStation.git
 [MUMIT] munakata:~/git$ cd EPGStation/
 [MUMIT] munakata:~/git/EPGStation$ npm run all-install
 [MUMIT] munakata:~/git/EPGStation$ npm run build


- snap は /home 以外の名前のディレクトリで実行するとエラーになるので、snap 経由のインストールでは無く apt で Ubuntu からインストールする必要があった。

- [[詳細設定:https://github.com/l3tnun/EPGStation/blob/master/doc/conf-manual.md]]

//- 起動時に EPGSTATION が起動していない場合には
// $ pm2 start dist/index.js --name "epgstation" 

- 設定ファイルの作成
 $ cp config/config.yml.template config/config.yml
 $ cp config/operatorLogConfig.sample.yml config/operatorLogConfig.yml
 $ cp config/epgUpdaterLogConfig.sample.yml config/epgUpdaterLogConfig.yml
 $ cp config/serviceLogConfig.sample.yml config/serviceLogConfig.yml
 $ cp config/enc.js.template config/enc.js
-- FFmpeg/FFprobe についてデフォルトでは ''/usr/local/bin/'' にインストールされていると想定しています。違う場所にインストールされている場合は ''config.yml'' を修正してください
-- Ubuntu では ''/usr/bin'' に ffmpeg/ffprobe があるので、この変更をしないとエンコードできない


- 起動時に EPGSTATION が自動起動しない理由を解析した結果、root 権限で pm2 で起動されるアプリと競合していることが原因のようなので、epgstation を root 権限で起動し、save することで問題が解決した。なのでインストール時に

 $ sudo pm2 start dist/index.js --name "epgstation" 
 $ sudo pm2 save 


* 運用 [#l713f224]
** node program manager (pm2) [#qaf17b54]

** 管理画面(Web インターフェース) [#ff090014]
|サービス|機能|アドレス|確認ポイント|h
|mirakurun|録画チューナーサーバー|https://<インストール対象サーバIP>:40772/|ログ|
|~|~|~|チューナー登録状況|
|epgstation|ユーザーインターフェース|http://<インストール対象サーバIP>:8888/|番組表が見えているか|
|~|~|~|予約録画出来るか|
|~|~|~|チューナー数分録画出来るか|
|~|~|~|キーワード予約録画出来るか|

** アップデート [#pbb9575b]
*** EPGStatrion のアップデート [#w96739e4]
- EPGStatrion は github 上で開発されており、git pull でコンポーネントを更新するだけでバージョンアップが可能
- バージョンアップ実施時には Mirakurun を一時停止し、アップデート後に再始動する

 [MUMIT] munakata:~/git/EPGStation$ sudo pm2 stop epgatation
-&ref(EPG_update_stop.png);

 [MUMIT] munakata:~/git/EPGStation$ git pull
-&ref(EPG_update_git.png);

 [MUMIT] munakata:~/git/EPGStation$ sudo pm2 start epgstation
-&ref(EPG_update_start.png);

*** mirakurun のアップデート [#k67cc9e9]
- npm コマンドを使ってパッケージを更新する

 [MUMIT] munakata:~/git/EPGStation$ sudo pm2 start mirakurun-server

 [MUMIT] munakata:~/git/EPGStation$ sudo npm install mirakurun -g --unsafe-perm --foreground-scripts --production
-&ref(mrakurun_update_npm.png);

 [MUMIT] munakata:~/git/EPGStation$ sudo pm2 start mirakurun-server

*** node js パッケージのインストール [#hc850956]
- ncu コマンド(更新確認)
 [KGB2] munakata:~/git/EPGStation$ ncu
 Checking /raid_vol/home/munakata/git/EPGStation/package.json
 [====================] 47/47 100%
 
  @types/lodash                      4.17.0  →   4.17.5
  @types/multer                       1.4.9  →   1.4.11
  @types/node                       18.11.9  →  20.14.2
  @typescript-eslint/eslint-plugin    7.8.0  →   7.13.0
  @typescript-eslint/parser           7.8.0  →   7.13.0
  axios                               1.6.8  →    1.7.2
  eslint                             8.57.0  →    9.5.0
  eslint-config-prettier             8.10.0  →    9.1.0
  file-type                          16.5.4  →   19.0.0
  prettier                            3.2.5  →    3.3.2
  swagger-ui-dist                    5.17.2  →  5.17.14
  url-join                            4.0.1  →    5.0.0
 
 Run ncu -u to upgrade package.json

- ncu -u (アップデート)
 [KGB2] munakata:~/git/EPGStation$ ncu -u
 Upgrading /raid_vol/home/munakata/git/EPGStation/package.json
 [====================] 47/47 100%
 
  @types/lodash                      4.17.0  →   4.17.5
  @types/multer                       1.4.9  →   1.4.11
  @types/node                       18.11.9  →  20.14.2
  @typescript-eslint/eslint-plugin    7.8.0  →   7.13.0
  @typescript-eslint/parser           7.8.0  →   7.13.0
  axios                               1.6.8  →    1.7.2
  eslint                             8.57.0  →    9.5.0
  eslint-config-prettier             8.10.0  →    9.1.0
  file-type                          16.5.4  →   19.0.0
  prettier                            3.2.5  →    3.3.2
  swagger-ui-dist                    5.17.2  →  5.17.14
  url-join                            4.0.1  →    5.0.0 
 
 Run npm install to install new versions.

- npm install (更新版のインストール)
 [KGB2] munakata:~/git/EPGStation$ npm install
 npm notice
 npm notice New major version of npm available! 8.19.4 -> 10.8.1
 npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.8.1
 npm notice Run npm install -g npm@10.8.1 to update!
 npm notice
 npm ERR! code ERESOLVE
 npm ERR! ERESOLVE unable to resolve dependency tree
 npm ERR!
 npm ERR! While resolving: epgstation@2.9.1
 npm ERR! Found: eslint@9.5.0
 npm ERR! node_modules/eslint
 npm ERR!   dev eslint@"9.5.0" from the root project
 npm ERR!
 npm ERR! Could not resolve dependency:
 npm ERR! peer eslint@"^8.56.0" from @typescript-eslint/parser@7.13.0
 npm ERR! node_modules/@typescript-eslint/parser
 npm ERR!   dev @typescript-eslint/parser@"7.13.0" from the root project
 npm ERR!   peer @typescript-eslint/parser@"^7.0.0" from @typescript-eslint/eslint-plugin@7.13.0
 npm ERR!   node_modules/@typescript-eslint/eslint-plugin
 npm ERR!     dev @typescript-eslint/eslint-plugin@"7.13.0" from the root project
 npm ERR!
 npm ERR! Fix the upstream dependency conflict, or retry
 npm ERR! this command with --force, or --legacy-peer-deps
 npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
 npm ERR!
 npm ERR! See /raid_vol/home/munakata/.npm/eresolve-report.txt for a full report.
 
 npm ERR! A complete log of this run can be found in:
 npm ERR!     /raid_vol/home/munakata/.npm/_logs/2024-06-15T22_16_49_045Z-debug-0.log

- 上記エラーは n を使って node を最新の LTS バージョンに更新したら出なくなった

 [KGB2] munakata:~/git/EPGStation$ sudo npm install n -g
 
 [KGB2] munakata:~/git/EPGStation$ sudo n lts
 
 [KGB2] munakata:~/git/EPGStation$ node -v
 v20.14.0
 
* 障害解析 [#s9471eb6]
*** 録画に失敗する問題 ⇒ Mirakurun とのソケット通信に失敗している [#vfe0cd7e]
- EPGStation/logs/Service$ sudo ''vi stream.log''
 [2024-06-16T06:11:25.984] [INFO] stream - start stream: 0
 [2024-06-16T06:11:25.984] [INFO] stream - get mirakurun service stream: 3273901048
 [2024-06-16T06:11:40.987] [ERROR] stream - start stream error
 [2024-06-16T06:11:40.987] [ERROR] stream - Error: socket hang up
     at connResetException (node:internal/errors:705:14)
     at Socket.socketOnEnd (node:_http_client:518:23)
     at Socket.emit (node:events:525:35)
     at endReadableNT (node:internal/streams/readable:1358:12)
     at processTicksAndRejections (node:internal/process/task_queues:83:21) {
   code: 'ECONNRESET'
 }
 [2024-06-16T06:11:40.988] [INFO] stream - stop stream 0


* 参考 URL [#qefc32f9]
- [[PLEX社製TVチューナーの非公式Linuxドライバインストール方法 (ベース):https://www.jifu-labo.net/2019/01/unofficial_plex_driver/]]
- [[Mirakurunのインストール手順(Ubuntu・Debian・CentOS):https://www.jifu-labo.net/2016/05/mirakurun/]]

- [[Ubuntu22.04とPLEX社製チューナーで構築するMirakurun最新版+epgstation環境:https://eco.senritu.net/ubuntu2204_plex_tunner_mirakurun_epgstation/]]

- [[EPGStation-PLEX tuner-Ubuntu 22.04-自宅録画サーバー:https://www.digital-den.jp/simplelife/archives/6850/plex-tv%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC%E3%81%A8ubuntu-22-04%E3%81%A7%E4%BD%9C%E3%82%8B%E8%87%AA%E5%AE%85%E9%8C%B2%E7%94%BB%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC2022%E5%B9%B45%E6%9C%88/]]
- [[PX-W3PE4チューナー+非公式版ドライバー (20.04 ベース):http://kazu99.web.fc2.com/memo/px-w3pe4.html]]
- [[LinuxでPX-W3U4を使う(2019年1月版) (18.04 ベース):http://blog.lwlv.net/archives/1143]]
- [[WinUSB版px4_drvの使い方:https://enctools.com/px4-drv-winusb/]]
- [[【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4):https://komone-life.com/2021/03/07/how-to-install-epgstation-docker-bcas-3/5/#channelsyml]]
- [[Mirakurunを手動でチャンネル設定:https://qiita.com/yuriyuriyuriyuri/items/28e360d8f678159059e8]]
- [[地上波(GR)のチャンネルスキャンを追加:https://horaku.shonanwalker.com/post-3125/]]
- [[チャンネルスキャンの実行方法。(MirakurunxEPGStation):https://note.com/gk2hk/n/n824351a00118]]

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