ラズパイ４を使った地上波録画サーバーを作る　まとめ版

初版：2021/10/1
更新：2024/2/11 作業順番入れ替えました

[メンテ＆トラブルシューティング](1e439b7cc10822f5ef69)
　∟ [定時診断スクリプト](02a6ea83a1169cd00153)
[前編](614c3973cc7d1439865e)
　１．ラズパイとサーバーの概要
　２．録画に必要なものを集める、購入する
　３．OSのインストールとセットアップ
　４．NASの構築
[後編(docker-dvb版)](0d532fe0859779bb729c)
　５．チューナードライバの導入
　６．docker-mirakurun-epgstationの導入
[後編(docker-px4_drv版)](6805564d57860a93169a)
　５．チューナードライバの導入
　６．docker-mirakurun-epgstationの導入
[後編(非docker版)](3bf7e152fbf73c5ca25e)
　５．チューナーの導入、テスト録画
　６．運用のためのツール、mirakurun、epgstation
[運用実践編](dc099b2f1ab39dad07f7)
　７．録画管理方法
　８．エンコードと再生
　９．システムバックアップ
●まとめ版 now!
番外．[Mirakurunのチャンネル手動設定](28e360d8f678159059e8)
番外．[ラズパイ用ケース作成](237fedc55ac79c9d5723)

前編と後編およびdocker編では解説を交えて説明してきました。この記事は、SD等にOSをインストールの段階からのコマンドをひたすら記述してていくもの(docker版でお送りします)。どちらかといえば環境構築2回目以降の方向けです。も少し詳しい説明が欲しい方は前編後編docker編を見ておいた方がいいと思われます。

### 主な必要なもの
・ラズパイ４以降(3でもいいがやや力不足かも)
・TS抜きチューナー(USB接続)
・SDカードやUSB-HDD/SSD(システム)
・B-CASカードリーダー
・LANケーブル(Wifiを事前設定する場合は不要)

### 流れ
1.OSのインストール
2.各種設定とアップデート
＜場合によっては再起動＞
3.ディスクのマウント(必要な場合)
4.docker // Samba // ドライバ // (px4の録画コマンドrecpt1)
　↑順不同だが現状この順がスムーズ
＜再起動＞
5.docker-mirakurun-epgstation

### Win上でSSH？VNC上でコマンド？VNC上でbash一括？
インストールなどのコマンドは、Win上からTeratermなどのSSHツールを使って実行するか、VNCで遠隔でコマンド操作か、VNC上で事前作成したbashシェルスクリプトを使うか？
<b>SSH</b>→速い(レスポンスが早い、コピペがスムーズ)、初回起動時からできる。ただし、Winの電源を切れないためトイレやお風呂放置はいいが寝る前の放置には向かないか
<b>VNC</b>→Pi上で実行しているので放置が可能。SSHの方がスムーズなのは欠点。
<b>bash</b>→一括実行なので楽。ただし意味を知らずに脳死で実行すると何らかの理由でうまくいかなかったときにてこずるので、実は中上級者向け。

### Raspberry Pi OSをインストールする
Raspberry Pi ImagerやRufusなどを使いイメージファイルをSDに書き込む。ラズパイOSの場合2024年1月現在は64bitが前提かもしれない。バージョンは何ともだが最新のひとつ前(この時点だとbullseye)の方が無難かもだ。GUI一切不要の中上級者はLiteでいいが一般的にはVNCも考えwithdesktop推奨。
・imagerで事前設定した場合は特に何かは不要。
・imagerを使わずに事前設定するなら、ブートパーティションに「SSH」というフォルダ(中身は空でOK)を作成してSSHを可能にする。
・どちらにしても、もしSSD/HDD起動でディスク全域を使わない場合はPiに挿す前のこの段階で初回起動前の領域確保をしておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547444/b919329c-3618-738e-a3ad-ef476bbc1e9d.png)

ここまでWin上でディスク制作
－－－－－－－－－－－－－－－－－－－－－
ここから遠隔またはラズパイでの操作

### 起動、設定
```まずはSSHで接続.
ラズパイのIPアドレスが192.168.1.22の場合。
＜コマンドプロンプトやPowerShellなどを使う＞
デフォがDHCPでIPアドレス不明なので、順に試すかスキャンする。
ssh pi@192.168.1.22
またはpi@***.localを使ってもよい
ssh pi@raspberrypi.local
（パスワードのデフォはraspberry。↑もちろん.22だった場合）

なお、キーが受け付けられないと怒られた場合、
ssh-keygen -R 192.168.1.22

＜teratermなどのツールを使用する場合＞
考え方は基本的に上と同じ。省略。
pi@192.168.1.22
```

SSHで接続したら、

```ターミナルなどから設定ツールを起動。.
sudo raspi-config
ここで準必須なのはVNC (GUI使わないなら不要)
・VNCをオンにする(推奨)
残りは後からでも問題ないのでわからなければスルーでOK
・解像度を設定する
・無線LANの設定
・ロケールの設定でjpを追加
・タイムゾーン設定でtokyoに

なおVNC有効化は↓のコマンドでも可能。シェルスクリプト構築ならコマンドの方がよさそう。
sudo raspi-config nonint do_vnc 0
```

＊ここではエディタにnanoを使用していますが、他のエディタの場合nano部分を適宜読み替えてください

```dhcpcdなし環境のIPアドレス固定（再起動前ならどこでもOK。再起動後にIPが適用される）.
最新ラズパイOSのbookwormの場合。
dhcpcdが標準では無いっぽいのでこちらを使用
sudo nmtui
```

```dhcpcdあり環境のIPアドレス固定（再起動前ならどこでもOK。再起動後にIPが適用される）.
少なくともbullseyeまではこれで行けたはず
sudo nano /etc/dhcpcd.conf

--- dhcpd.confの内容－－－－－
# 無線の場合wlan0、有線はeth0にする。基本、どちらかに。
# ip_address：ラズパイのIP
# static routers、static domain_name_servers：ルーター
interface wlan0
interface eth0
static ip_address=192.168.1.11/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
－－－－－－－－－－－－－－
```

```swapを無効化。メモリ2GB↑モデルならしておいていいかと。.
パッケージ削除とswapファイル削除も。
sudo swapoff --all;sudo apt remove -y dphys-swapfile;sudo rm /var/swap
```

```HDD/SSDブートする場合にパーティションを分割してシステムとデータを分ける場合.
gpartedを入れておく。マネージャ(GUI必須)または
sudo apt install -y gparted
```

```【できるだけ早くGUIを使いたいorパーティションサイズ調節したい場合】はここで再起動。.
再起動後はIPアドレスは固定されていることに留意。
sudo reboot
```

USB接続のHDD/SSDがある場合にはマウント作業を行う。
HDD/SSD自体から起動している場合は不要。

```HDD等をマウントする.
HDD等のデバイス認識がsd1の場合。普通はsd1。
blkid /dev/sda1

UUIDが出てくる。そのUUIDをfstabに書き込む
sudo nano /etc/fstab

fstabの内容－－－－－
# 末尾に以下を追記する。末尾でなくてもいいが、末尾がわかりやすいため
# UUIDが8300c58c-0a67-4dd2-a34b-347c2ead8e58、マウント先パスが/home/pi/ssd、フォーマットがext4の場合
UUID=8300c58c-0a67-4dd2-a34b-347c2ead8e58 /home/pi/ssd ext4 defaults,nofail 0 0
－－－－－－－－－－－

書き込み権限緩和。
chmod 777 /home/pi/ssd
マウント先パスが/home/pi/ssdの場合。却下される場合はsudoをつけてみる。
```

```Raspberry Pi OSをアップデート.
＊なおここら辺から連続実行やろうと思えばできる。
sudo apt update;sudo apt upgrade -y

[必須ではない] ファームウェアのアップデートを行う場合
sudo apt install rpi-eeprom-update : 'コマンドが未インストールだった時'
sudo rpi-eeprom-update : 'アップデートが可能かを確認'
sudo apt full-upgrade

[必須ではない] 日本語入力IMEを導入。OnOff切り替えはCtrl+j
sudo apt-get install ibus-anthy
```

### dockerの導入
docker版。ここら辺ちょっと時間かかったはず

```dockerの設定.
dockerパッケージインストール、バージョンの確認
curl -sSL https://get.docker.com | sh;docker -v

権限の追加
sudo usermod -a -G docker $USER

python-pipおよび関連パッケージ導入
　(今後、composeバイナリなどの状況でここら辺は変わるかもしれない)
sudo apt install -y libffi-dev libssl-dev python3 python3-pip python3-dev

docker-composeパッケージインストール、バージョン確認
sudo pip3 install docker-compose;docker-compose -v
↑ -y はいらなかった...修正した

2024/1/7現在、docker関連でエラーが出るのをざんていしゅうせい
sudo pip install docker==6.1.3
```

### Sambaサーバーのインストール
LAN越しにファイルにアクセス。

```Sambaのインストールおよび設定.
インストール。samba-common-binは無くてもできそうだが。
sudo apt install samba samba-common-bin -y

設定（適用は後でも可能なようなので後でもOKかもしれない）
sudo nano /etc/samba/smb.conf

---smb.confの内容。一番後ろにでも追記.－－－－－
# Windows等からアクセスするとまずshareが見える。マウント先ディレクトリ(例：docker-mirakurun-epgstationの標準保存先)は事前に作っておく。
[share]
comment = Share
path = /home/pi/docker-mirakurun-epgstation/recorded
public = yes
guest ok = yes
read only = no
force user = pi

[sharehome]
comment = Share
path = /home/pi
public = yes
guest ok = yes
read only = no
force user = pi
－－－－－－－－－－－－－－－－－－－－－－－－
```

### チューナーのドライバ [dvb/px4_drv(非公式ドライバ) with docker]

```ドライバのインストール(PX-S1UD/Q1UD)<font color=orange><b>[dvb]</b></font>.
ダウンロード
wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip
解凍
unzip PX-S1UD_driver_Ver.1.0.1.zip
ファームウェアのフォルダにコピー
sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/
```

```ドライバとファームウェア、recpt1etcのインストール<font color=orange><b>[px4_drv]</b></font>.
git clone https://github.com/nns779/px4_drv;cd px4_drv/fwtool/;make
(現在px4_drv/fwtoolディレクトリ)公式ドライバからファームを抽出する
curl -O http://plex-net.co.jp/plex/pxw3u4/pxw3u4_BDA_ver1x64.zip;unzip -oj pxw3u4_BDA_ver1x64.zip pxw3u4_BDA_ver1x64/PXW3U4.sys;./fwtool PXW3U4.sys it930x-firmware.bin;sudo mkdir -p /lib/firmware;sudo cp it930x-firmware.bin /lib/firmware/;cd ../
(現在px4_drvディレクトリ)
sudo apt -y install raspberrypi-kernel-headers;cd driver;make;sudo make install;sudo modprobe px4_drv;ls /dev;cd ~
インストール完了。modprobeで読み込ませる

recpt1のインストール
sudo apt install -y autoconf automake;git clone https://github.com/stz2012/recpt1.git
cd recpt1/recpt1/;./autogen.sh;./configure --enable-b25;make;sudo make install;cd ~
```

### 再起動
sudo reboot またはGUIから。
docker-mirakurun-epgstation導入の前には再起動しておく必要があるようだ。

### mirakurunとepgstationの導入
TSチューナーが接続されている(電源が入っている)ことは確認しましょう。

```mirakurun-epgstation-dockerの導入<font color=orange><b>[dvb]</b></font>.
px4の場合は下の方を参照。

[基本不要]git必須...だが少なくともラズパイOSは標準で入っている
sudo apt install -y git

インストールスクリプト
curl -sf https://raw.githubusercontent.com/l3tnun/docker-mirakurun-epgstation/v2/setup.sh | sh -s

ディレクトリ移動してから起動。初回は時間がかかるので注意。
cd docker-mirakurun-epgstation;sudo docker-compose up -d;cd ~

チューナーやチャンネル設定を初回起動前に行えるかどうかはまだ検証していない。
OS起動時のスタートアップ設定は特に行う必要はない。
```

```mirakurun-epgstation-dockerの導入<font color=orange><b>[px4_drv]</b></font>.
[基本不要]git必須...だが少なくともラズパイOSは標準で入っている
sudo apt install -y git

px4の場合、まずclone、編集してからインストールする。
git clone https://github.com/l3tnun/docker-mirakurun-epgstation -b v2 docker-mirakurun-epgstation

cd docker-mirakurun-epgstation
cp docker-compose-sample.yml docker-compose.yml
cp epgstation/config/enc.js.template epgstation/config/enc.js
cp epgstation/config/config.yml.template epgstation/config/config.yml
cp epgstation/config/operatorLogConfig.sample.yml epgstation/config/operatorLogConfig.yml
cp epgstation/config/epgUpdaterLogConfig.sample.yml epgstation/config/epgUpdaterLogConfig.yml
cp epgstation/config/serviceLogConfig.sample.yml epgstation/config/serviceLogConfig.yml
mkdir mirakurun/run
mkdir mirakurun/opt
mkdir mirakurun/opt/bin
cp -p /usr/local/bin/checksignal mirakurun/opt/bin/
cp -p /usr/local/bin/recpt1* mirakurun/opt/bin/
ls -la mirakurun/opt/bin/
※checksignal、recpt1、recpt1ctlがあることを確認する

nano docker-compose.ymlを編集する。
右クリック等でテキストエディタで編集してもよい
■ volumesについて、
        volumes:
            - ./mirakurun/conf:/app-config
            - ./mirakurun/data:/app-data
の下に、
            - ./mirakurun/run:/var/run/
            - ./mirakurun/opt:/opt/
を加える
■ deviesについて、
        devices:
の下に、MLT5の場合これ↓を加える
            - /dev/pxmlt5video0:/dev/pxmlt5video0
            - /dev/pxmlt5video1:/dev/pxmlt5video1
            - /dev/pxmlt5video2:/dev/pxmlt5video2
            - /dev/pxmlt5video3:/dev/pxmlt5video3
            - /dev/pxmlt5video4:/dev/pxmlt5video4
dvbのチューナーをつないでいない場合(両方積んでいる人は稀か)は削除orコメント化
            - /dev/dvb:/dev/dvb

```

```ymlファイル関連（オプション）.
チューナー設定やチャンネル設定について。
compose前にチューナーやチャンネルの設定を行っておけば、長い初回起動を放置できる。
今まで使っていたファイルがあるなどの場合はお勧め。(もちろん起動後も可能だが)
バックアップしたchannels.yml server.yml tuners.ymlを使う場合は
パミッション設定したのちsambaや何らかのUSB等からコピー。
（パミッションを変更するとwin上からsamba経由で上書きコピー可）
sudo chmod 666 docker-mirakurun-epgstation/mirakurun/conf/*.yml

チューナー設定については、docker版では基本自動的に設定してくれるはずだが、
いじる必要があるならmirakurunのuiから、もしくはtuners.ymlを編集する。
sudo nano docker-mirakurun-epgstation/mirakurun/conf/tuners.yml

チャンネル設定については、スキャンする方法と手動で設定する方法がある。
個人的には、できるなら手動で設定した方が早く確実だと思ってしまう。
sudo nano docker-mirakurun-epgstation/mirakurun/conf/channels.yml
```

```細かな設定（オプション）.
録画したファイルの保存場所を編集(GUIでテキストエディタで開いて編集してもよい)
nano docker-mirakurun-epgstation/docker-compose.yml
編集する場所は、epgstation>volumes>recordedの部分について、
- ＜録画ファイルを置くフルパス＞:/app/recorded　にする。
例：　- /home/pi/録画:/app/recorded
なお、理由不明だが _ から始まるフォルダ名を指定して録画できない現象が発生した。
変更を適用するにはdockerかPi自体の再起動。

デフォルトの保存ファイル名、他各種設定(GUIでテキストエディタで開いて編集してもよい)
nano docker-mirakurun-epgstation/epgstation/config/config.yml
書き換える場所は、recordedformat:の部分。まぁこれは見てわかるでしょう。
```

```設定が済んだら構築と初回起動.
docker-mirakurun-epgstationを構築、起動して完了。
ここは初回時間かかる上に、後は放置すれば番組表も取得してくれるのでVNC上で実行がお勧め。
cd docker-mirakurun-epgstation;sudo docker-compose pull;sudo docker-compose up -d;cd ~
```

```dockerの停止や再起動.
dockerを再起動するには
cd docker-mirakurun-epgstation; sudo docker-compose restart; cd ~
停止したい場合。どちらもディレクトリ移動してから。
cd docker-mirakurun-epgstation;sudo docker-compose down;cd ~
```

安定性は高いので必須ではないが、定期的に再起動するのも悪くはない
ただし少なくともQ1UDは補助電源挿したままだとPiの起動ができないので、Pi自体再起動するには例により
・再起動時に補助電源を抜き、起動したら挿す
・セルフパワーハブを経由させる
・逆流防止のダイオードを間にかませる
などの対策が必要になることは注意。dockerだけ再起動なら不要。

```スクリプトなどを使いepgstationなどのapiをたたく場合はjqコマンドがあった方がよい.
sudo apt -y install jq
```

```cronを使い、定期的に再起動.
crontab -e

dockerのみ毎日早朝3時57分に再起動するには
57  3 * * * cd docker-mirakurun-epgstation; sudo docker-compose restart; cd ~

Pi自体を月曜と金曜早朝3時57分に再起動するには(外部電源と電力逆流の件には注意して)
57  3 * * 1,5 sudo /sbin/reboot

もしくは再起動用スクリプトを使用することで録画されない事故を防ぐ

再起動直後にhdmi出力を無効にするには
@reboot /opt/vc/bin/tvservice --off
```
録画の予約を行うには、
http://192.168.1.11:8888/ (PiのIPが11の場合)に接続。
Mirakurunの稼働状況を確認するには、
http://192.168.1.11:40772/ (PiのIPが11の場合)に接続。

録画されたデータをWindows上で参照するのであれば
\\\192.168.1.11\share\ (PiのIPが11の場合)を参照する。
ここでは\で表記されていると思うが実際は例により￥です。

＊ 作成が終わってからのメンテ：
[トラブルシューティング](1e439b7cc10822f5ef69)とかを参照願います。