Raspberry Pi 3(b+) で mirakurun (Ubuntu 20.04 Server編)
備忘録。
前提
ラズパイ一式
数年単位で死蔵してあった Raspberry Pi 3B (3B+?)。
放熱性の良さそうなケースに入れて、適当なUSB ACアダプタからmicroUSBを介して給電する。
尼のリンクを貼りつつも、今買うならRaspberry Pi 4以降を強くお勧め。(尼は高騰してたので各自お探しください)
チューナー
AliExpressで仕入れたVT20を使いました。S270(PLEX PX-S1UD V2.0)と中身は同じくさい?
正直、蟻で買っても尼で買っても、値段そんなに大きく違わないです。(独身の日とか狙うなら、蟻の方が安いかも‥?)
カードリーダー
NTTcomのアレ推奨。
こちらの怪しいカードリーダーでも難なく使えました。
(SIMスロットにminiB-CAS刺さります。きちんと認識します。)
ちなみに日立マクセルのやつは認識しませんでした。
セルフパワーUSBハブ
Raspberry Pi 3系(及びそれ以前)の環境では、セルフパワーHUBの利用を強く推奨する。(microUSB給電がボトルネックになり、素の状態でも電源がカツカツ。チューナー刺しただけで電源不足に陥り動作不安定になる)
↓私はコレ買いました。
Raspberry Pi 4系は給電方式がタイプCになっているので、ひょっとすると必要ないかもしれない。(ACアダプタの給電性能を遺憾なく発揮してくれる気もするが、4系を持ってないのでよく分からない)
外部ストレージ
microSDに録画するわけにもいかないので、HDDを外付けする。
ラズパイからの給電に頼らないものなら何でも良いと思う。
環境構築
OSインストール
flash起動を避けて、HDDからUSB bootしたかったけど、どう頑張っても安定せず諦めた。
代わりに、ちょっとお高めのmicroSDをチョイス↓
OSは Ubuntu 20.04 Server LTS (64bit)。公式でイメージの書き込みツールが出てるのでそれ使うのが楽。
外付けHDD
2.5インチ バスパワーはまず動かないと思った方が良い。運よく認識できても、次回うまく起動しない。(USB Bootが邪魔してsdカードですら起動できない。)
セルフパワー給電できる余りモノ3.5インチケースに、同じく余ってた3.5インチHDD(4TB)をセット。
ゴミパーティション(ZFS)の残骸
同じく余ってた3.5インチHDD(4TB)
ddでも消えないんだなぁこれが。見事にハマりました。
(新品のHDD使ってる人、ZFSの流用に心当たりがない人は無視しておk)
パーティションの作成
gdiskを起動、/dev/sda 等を選んだ後、d→w で削除→反映。
再度gdiskを立ち上げ、 /dev/sda を選んだ後、n→w で新規パーティション作成→反映。
パーティション作成後、/dev/sda1 にパーティションが見えるはずなので、
$ sudo mkfs.ext4 /dev/sda1
でパーティションをフォーマットする。
パーティションのマウント設定
起動時に自動マウントさせる為、対象パーティションを特定するUUIDを取得。
$ ll /dev/disk/by-uuid/
total 0
drwxr-xr-x 2 root root 100 Jan 18 04:21 ./
drwxr-xr-x 7 root root 140 Jan 1 1970 ../
lrwxrwxrwx 1 root root 15 Jan 10 04:56 5496-E6C8 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 15 Jan 18 04:14 675ba907-****-****-****-************ -> ../../mmcblk0p2
lrwxrwxrwx 1 root root 10 Jan 18 04:21 a6a79439-****-****-****-************ -> ../../sdb1
(あれ。今見たらsdbで認識されてるな。)
sudo vim /etc/fstab でマウント設定追加。
LABEL=writable / ext4 defaults 0 1
LABEL=system-boot /boot/firmware vfat defaults 0 1
UUID=a6a79439-****-****-****-************ /mnt/storage ext4 defaults 0 0
再起動後、所定の位置(上記の場合は /mnt/storage/)HDDがきちんとマウントされることを確認する。
mirakurun
大体こちらの通りに進める。神。
インストールが一通り終わったら、この時点で BonDriver_mirakurun でmirakurunの動作確認しておくと良いかも。
録画関係 (EPGStation)
公式のセットアップマニュアルをベースに進める。
【事前準備】
まずはnodeのバージョン確認。
ここは mirakurun のインストールが正常完了していれば問題ないはず。
# node --version
# curl -o - http://localhost:40772/api/version
続けてffmpeg。素の環境だと多分入ってないのでインストールしておく。
pythonも素の状態だとコマンド入ってないので、インストールしておく。
gccは入ってるかも。
# gcc --version
【ビルド準備】
ビルド中はメモリを大量に消費するので、作業に際してmirakurun (を管理するpm2) を落としておく。
sudo systemctl stop pm2-root
nodeの設定でメモリ消費を抑えるように仕込んでおく。
export NODE_OPTIONS="--max-old-space-size=1024"
できれば一時的にswap領域も増やしておく。
今回はswap用にUSBフラッシュを刺したが、HDDとかにswapfile作れるならそれでも良いと思う。
swapパーティション切る or DDで空ファイル作る→mkswap→swapn の流れ。
【ビルド&インストール】
事前準備はここまで。
EPGStationのインストール先に移動する。HDDのマウント先とかを選ぶと良いと思う。
# cd /mnt/storage/
リポジトリ上のソースをclone、チェックアウトする。
# git clone https://github.com/l3tnun/EPGStation.git
インストール。地味に時間がかかる。
# npm run all-install
# npm run build
インストールが終わったら、設定ファイルのテンプレートを展開する。
# 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
事前に停止した mirakurun を戻しておく。
# sudo systemctl start pm2-root
(初期設定)
設定ファイルをざっと確認する。多分ffmpegとかのパスがおかしいので訂正しておく。
vim config/config.yml