Raspberry Pi4 地デジサーバ Chinachu＋mirakurun の Node.jsをアップデートしてみた

Raspberry Pi4で地デジサーバを Chinachu +mirakurun で稼働していますが、以下のようにmirakurunをv3.2.0にアップデートした後、chinachuもアップデートしたところ、動かなくなりました。

```
$ sudo npm install mirakurun -g --unsafe-perm --production  //mirakurunのアップデート

$ cd chinachu
$ ./chinachu updater  //chinachuのアップデート
```
アップデート後、ステータス($ sudo pm2 status)を確認したところ、erroredと表示されました。

#なぜ動かなくなったか
原因は、Node.js をアップデートする前に、mirakurun をアップデートしたためでした。
それで、Node.jsをv8.9.4からv10.16.3にアップデートしました。

#正しいアップデートの方法
##1.Chinachuのユーザー追加
まず、Chunachu は Raspberry Pi のデフォルトユーザーでは動かない（録画が乱れる）ようなのでユーザーを追加します。（Chinachuを使うためにユーザーをvideoグループに追加する。録画先のディレクトリ権限も変更。）

```
$ sudo adduser <追加ユーザ>
$ sudo gpasswd -a <追加ユーザ> sudo
$ sudo adduser <追加ユーザ> video
$ sudo chown <追加ユーザ>:video /mnt/hdd1
```
Sambaの設定も修正します。

```
$ sudo nano /etc/samba/smb.conf

[recorded]
   comment = Chinachu Recorded Folder
   path = /mnt/hdd1/recorded
   browsable = yes
   read only = no
   guest ok = yes
   force user = <追加ユーザ>

# sambaを再起動
$ sudo service smbd restart

# ディレクトリのオーナーを変更
$ sudo chown <追加ユーザ>:video /mnt/hdd1
```

##2.Node.jsとMirakurunのアップデート
Node.jsをv10.16.3にアップデートします。
また、Mirakurunも更新をします。

```
$ sudo apt-get install npm
$ sudo npm install -g n
$ sudo n 10.16.3
$ sudo npm install -g npm

$ sudo npm install pm2 -g
$ sudo npm install mirakurun -g --unsafe --production
```

##3.Chinachuのアップデート
その前に・・・Chinachu録画設定ファイルに追加ユーザなどを設定します。

```
$ cd chinachu
$ vi config.json
  "uid": "<追加ユーザ>"
  "recordedDir" : "/mnt/hdd1/recorded/",
  "temporaryDir" : "/mnt/hdd1/recordtmp/",
```

そして、Chinachuのアップデートをします。

```
~/chinachu $ ./chinachu updater

$ sudo pm2 status　//全部onlineになっているか確認！
$ sudo reboot
```

#奮闘記(参考までに・・・)
##1.Node.jsの調整

```
$ sudo apt remove nodejs
$ sudo apt autoremove
$ wget https://nodejs.org/dist/v10.22.0/node-v10.22.0-linux-armv7l.tar.xz
$ tar -xvf node-v10.22.0-linux-armv7l.tar.xz
$ cd node-v10.22.0-linux-armv7l
$ sudo rm /usr/local/bin/node  
$ sudo cp -R * /usr/local/
$ cd
```

今回は、Node.jsはv10.22.0にしましたが、v12やv14でも可能なようです。

ここで、以下の実行でエラーとなりました。

```
$ sudo apt-get install npm

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
　・・・
```

依存関係が壊れているようなので aptitude をインストールし、以下のコマンド実行することにしました。

```
$ sudo apt-get install aptitude
・・・
$ sudo aptitude install npm
・・・
以下のアクションでこれらの依存関係の問題は解決されます:

     以下のパッケージを現在のバージョンに一時固定する:
1)     libnode-dev [インストールされていません]       
2)     libnode64 [インストールされていません]         
3)     libssl-dev [インストールされていません]        
4)     node-gyp [インストールされていません]          
5)     npm [インストールされていません]               

この解決方法を受け入れますか? [Y/n/q/?]
```
Y を選択して先に進めます。
そして、次のコマンドを実行しましたがエラーになってしまいました。

```
$ sudo apt-get update
```

それで一旦最初からやり直すことにしました。

```
$ sudo apt remove --purge nodejs npm
$ sudo apt clean
$ sudo apt autoclean
$ sudo apt install -f
$ sudo apt autoremove
$ sudo apt install curl
$ cd ~
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
$ sudo apt-get install -y nodejs

$ curl -L https://www.npmjs.com/install.sh | sh
```

結局、以下の方法が良かったようです。

```
$ sudo npm install -g npm 
$ sudo npm install pm2 -g
$ sudo npm install arib-b25-stream-test -g --unsafe
$ sudo npm install mirakurun -g --unsafe --production
```

そして、ステータスの確認をします。

```
$ sudo pm2 status
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 2  │ chinachu-operator  │ fork     │ 3    │ stopped   │ 0%       │ 0b       │
│ 1  │ chinachu-wui       │ fork     │ 1    │ stopped   │ 0%       │ 0b       │
│ 0  │ mirakurun-server   │ fork     │ 0    │ online    │ 0.3%     │ 76.9mb   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
```
pm2 に登録して保存します。

```
$ sudo pm2 start processes.json
$ sudo pm2 save
```

また、gitの修正を元に戻しておきます。

```
$ git fetch origin
($ git reset --hard origin/masterでエラー)
```

試しで録画をし、確認してみたところ、ひどく映像が乱れているのでチューニングを行いました。

##2.Mirakurunのチューニング
バッファを増やします。

```
$ sudo mirakurun config server
#highWaterMark: 25165824 # integer (bytes)
#highWaterMark: 67108864 # 64MB
#highWaterMark: 134217728 # 128MB
highWaterMark: 268435456 # 256MB
```

次にヒープサイズを増やします。

```
$ sudo pm2 start mirakurun-server --node-args --max_old_space_size=1024
```

mirakurun config server で下記設定を追加。

```
disableIPv6: true
```

rocesses.jsonを修正してプロセスサイズの最大値も引き上げておく。

```
$ sudo vi /usr/lib/node_modules/mirakurun/processes.json
    :
      "node_args" : "--max_old_space_size=2048",
```
再度、mirakurunインストールをします。

```
$ sudo npm install mirakurun -g --unsafe --production
```
そして、以下を実行します。

```
$ export PATH=/home/pi/chinachu/.nave:$PATH 
$ cd /usr/lib/node_modules/npm
$ sudo npm install
```

ここまで試して、chinachuとmirakurunのステータスは online であるものの、録画が乱れたままでした。結局、前述の「1.Chinachuのユーザー追加」で解決しました。

#主な参考サイト
DIGITAL CASSIS SODA内の記事ー https://mimimopu.com/chinachu-errored/
東京工業大学デジタル創作同好会の記事ー https://trap.jp/post/1089/

#最後に
うれしいことに、Raspberry Pi4の発売により、地デジサーバを入れる人の人口が増えています。
今後、アップデートをする人も増えると思います。
少しでも、この記事が参考になれば幸いです。

また、Chinachuのこれからの改善や発展を期待しています！