Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。

以前にご紹介した地デジTVの録画用に仕立てたPi4は多くの方に読まれました。ありがとうございます。

今回、自宅のWi-Fi機器を変更したことや、外付けHDDを入れ替えたいため、少々面倒ですけど改めてイチからセットアップし直しました。

以前構築した時からRaspberry Pi OSもbookwormになったこともあり、前回とどれだけ違いがあるかも興味がありました。

公式OSにDockerで構築するのは変わりなく行いました。概ねは同じだったものの、ネットワーク周りや新たな気付きもあったので改めて記事にしました。

これまで順調に使っていたmicroSDカードを抜き、新たにイチから用意しました。ラズパイの特徴を活かし、抜いたmicroSDカードと外したHDDを元通りにすれば環境を戻せるからです。

結果的に上手く行ったため古いmicroSDカードは必要なくなりましたね。

今回の環境

ほぼ前回と同様で、OSのバージョンが違うことと、外付けHDDも容量を増やしたものに変更した程度です。

変更点を中心にまとめていますので、前回の記事も一緒にご覧いただくと分かりやすいかと思います。前回では細かく触れていない部分も補足していきます。

使用している機材も前回同様です。

前回の記事

基本構成

  • Raspberry Pi OS lite 64bit bookworm(Debian12)
  • l3tnun/docker-mirakurun-epgstation
  • microSDカード起動32GB
  • カードリーダー
  • B-CASカード
  • USB接続ドングル型地上デジタルTVチューナー
  • 外付けHDD(外部電源があれば何でも可)
  • 有線LANで接続(Wi-Fiはオフ)

有線LANケーブルを接続して、SSH経由でセットアップしていきます。 どうもWi-Fiだと今までも色々と不都合があったため、今回は最初から有線LANケーブルで進めました。もしもWi-Fiで運用するなら、後から設定してみた方が良いかも知れません。

そのため、Raspberry Pi ImagerでmicroSDカードを用意する際、Wi-Fiはオフにします。SSHは有効で鍵認証方式にしました。

この記事では例として、ホスト名やIPアドレスは以下にして説明していきます。

  • ホスト名:recpi
  • ユーザー名:raspida
  • IPアドレス:192.168.0.11(固定化したい)
  • 外付けHDDは/home/raspida/dataにマウント

利用しているのは次のデバイスです。これは1CH対応ですから録画中に視聴ができません。

2013年に購入して使わなくなったカードリーダーが活躍しました。

2021年頃に手掛けたので、今では1CHの新品はなかなか手に入らないみたい。4CHのはまだ新品の在庫はあるようです。

B-CASカードは使っていないテレビからの使い回しです。

初期セットアップ

Raspberry Pi OS liteの初期セットアップを済ませておきます。

sudo apt update
sudo apt full-upgrade

リポジトリでバージョン違いがまた出た。

N: Repository 'http://deb.debian.org/debian bookworm InRelease' changed its 'Version' value from '12.4' to '12.5'

その場合はオプション付きでした。

Raspbianのsudo apt-get updateが失敗したら試したい解決方法

sudo apt update --allow-releaseinfo-change

取りあえず、最低限はこれだけでOK。

固定IPアドレス化したい

EPGStationはホスト名でもWebUIにアクセスできるのですけど、前回も触れたようにMirakurunだけはIPアドレスでアクセスすることになります。だから、IPアドレスは固定化したいところです。

最初にip aコマンドで確認してみましょう。(今回は192.168.0.13が割り振られていました)

但し、今回はbookwormですから、以前のdhcocdが使えません。新しいNetworkManagerで使うnmcliコマンドなりで行います。

最初に確認したい

以下の場所に設定ファイルがありますか?

そもそもWi-Fiをオフにして書き込んだため、Wi-Fiの設定も書き込んでいないので何もありません。

/etc/NetworkManager/system-connections

あった場合は念のため別の場所に移動しておくのが良いそうです。

もう1つ。connection showコマンドで現在の状態を確認しておきます。

nmcli connection show

今回はこんな感じでした。

NAME                UUID                                  TYPE      DEVICE
Wired connection 1  08fdabaa-f32c-3451-8425-3b90dc54c160  ethernet  eth0
lo                  257265c0-5c2b-4684-b7bf-fb5b8899a1e9  loopback  lo

NAMEが英語の有線接続1になっていて、DEVICEがeth0です。

nmtuiでIPアドレスの固定化

nmcliコマンドでも設定できるのですけど、今回は初めてnmtuiコマンドを使いGUIライクに設定していきました。これ、便利ですね。

コマンドについてまとめたのはこちら

sudo nmtui

管理者権限で実行します。以下のようなエラーが出る場合は権限がないためです。(nmcliコマンドも同様)

ターミナル内で矢印キーとEnterキーで設定していけます。

Edit a connectionから、今回のWired connection 1(有線接続1)を選び、Editで次へ。

IPv4 CONFIGURATIONのAutomaticをManualに変え、Showします。

AddressesとGetaway、DNS serversの3箇所を入力します。

今回は192.168.0.11に固定し、ルーターの192.168.0.1を指定、DNSは同じくルーターにしています。

DNSアドレスは、よく見かけるGoogle Public DNSの8.8.8.8と8.8.4.4などでも良いでしょう。私は使いませんけど。

あとはRequire IPv4 addressing for this connectionにチェックを入れました。

最下部にある2つのチェックは最初から入っていると思います。

OKで抜け、最初画面まで戻ってQuitで抜けます。

設定を反映させる

SSH接続のまま設定を反映させるため、2つのコマンドを実行します。接続をUPさせるNAMEはそれぞれの環境で変更してください。

今回は Wired connection 1でしたから、スペース部分はエスケープした文字列になっています。

sudo nmcli connection reload
sudo nmcli connection up Wired\ connection\ 1

最後にip aコマンドでIPアドレスを確認してみると固定化したIPアドレスに変更されていることを確認しました。

今回は設定した192.168.0.11になっていたのでOKですね。

Dockerのインストール

これで基本設定は整ったので、Dockerをインストールしていきます。

非エンジニアとしては、Dockerもまた複雑怪奇の1つです。インストール導入する方法が3つほどあるのですか?!

この辺は本当によく分かりません。更にDocker CLIだから?なのか、docker-composeのインストールはなく、コマンドもdocker composeとなります。

他のサイトでもよく違いが分からずにエラーに遭遇して困惑します。

compose コマンドと docker-compose の互換性 — Docker-docs-ja 24.0 ドキュメント

この記事ではCLI環境のdocker composeコマンドで実行しています。

適当な場所に移動し、以下スクリプトをダウンロードして実行します。(例 ~/docker)

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh

今回のdockerバージョンは25.04でした。

docker -v

Docker version 25.0.4, build 1a576c5

とりあえずDocker自体はこれでOKです。

ユーザーをdockerグループに割り当てる

今回はraspidaで進めているユーザーをdockerグループに割り当てる作業です。コマンド自体は簡単です。

sudo usermod -aG docker raspida

ユーザーについて調べてると理解が深まります。

Raspberry Piでも使う主だったユーザー系のコマンドはこんな感じ。

whoami
users
groups
id -u raspida
id -g raspida
id raspida

idコマンドにユーザー名だけで、id番号(uid)が1000、グループ番号(gid)が1000と分かります。

uid=1000(raspida) gid=1000(raspida) groups=1000(raspida),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),102(input),105(render),106(netdev),995(spi),994(i2c),993(gpio)

dockerではこのユーザーIDやグループIDで指定することがありますから、事前に調べておくと良いでしょう。

dockerグループに入ると992(docker)となっているのが分かりますね。

uid=1000(raspida) gid=1000(raspida) groups=1000(raspida),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),102(input),105(render),106(netdev),995(spi),994(i2c),993(gpio),992(docker)

docker自体の導入は一先ずこれで終了です。

チューナーのドライバ

続いてMirakurunとEPGStationを入れたいところですが、その前にチューナーデバイスが認識されているか確認します。

lsusb

ドライバも導入していないのに、認識されているんですよね。

カードリーダーはドライバファイルは必要なく前回もそのままで良かった。ちょっと細かくは分かりませんでしたので、ドライバに含まれる.inpデータファイルを一応コピーしておきました。

前回同様です。

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/

■Pi 5は8GBモデルがオススメ

HDDのマウント

録画データファイル(.ts)はサイズが大きいため、外付けHDDに保存することになります。これも設定していかないと意味がありません。

最初に確認しておきます。先程の画像のようにUSB接続HDDが認識されています。まだマウントはされていません。

lsusb

ここでHDDのUUIDやPARTUUIDを調べておきます。

blkid -o list

マウントされたUSB接続HDDの例

画像は既にマウントした状態です。まだの場合は(not mounted)になっていると思います。

今回は事前にExt4フォーマットしました。

フォーマットするならmkfsコマンド(例:/dev/sda)

sudo mkfs -t ext4 /dev/sda

UUIDとPARTUUIDの違いはGPTテーブルでパーティショニングがあるかどうかだと考えてください。

この例ではUUIDで進めました。1つのドライブをそのまま割り当てた感じですね。

dfコマンドで空き容量を確認して、/dev/sdaや/dev/sda1、/dev/sdbなどを特定できます。

df -h

/dev/sda        2.7T  1.8G  2.6T   1% /home/raspida/data

ザックリとた説明で申し訳ありませんが、PARTUUIDが表示されているなら、それを使用すると良いでしょう。HDDの構成によりますけどね。

あと、HDDにパーティションを切ったりできるfdsklでも確認してみてください。

fdisk -l

Disk /dev/sda: 2.73 TiB, 3000592982016 bytes, 5860533168 sectors
Disk model: External HDD
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

マウントしてみる

Windowsユーザーで分かりにくいのがマウント作業です。Windowsなどでは自動マウントされていると考えてみてください。USBで接続してもマウントされていないと利用できないのです。

今回は分かりやすいように、ユーザールートにdataディレクトリを作成してマウントしました。一般的には/mntディレクトリ以下にマウントさせます。

sudo mount /dev/sda/ ~/data

このままだとファイル所有権がrootになってしまいますので、所有者を自分のユーザーにしておきます。(ここではraspida)

sudo chown -R 1000:1000 ~/data

チェックするのはls -alコマンドで。

こんな感じになっていればOKです。

drwxr-xr-x 3 raspida raspida   4096 Mar 12 12:15 data

自動マウント

再起動しても自動マウントするようにfstabに記載します。先程調べたUUIDまたはPARTUUIDを使うことになります。

sudo nano /etc/fstab

追記する書式は、次の通りUUID(またはPARTUUID)、マウントするディレクトリパス、フォーマット形式と続き、細かい説明は省きますが、特に何もなければdefaults,nofailに0と0と記載します。項目の間はスペースまたはTABで空けます。(例では半角スペース4つ)

UUID=13978c50-3c10-49ea-825e-9f591fa48f2b  /home/raspida/data   ext4   defaults,nofail        0       0

ここで一旦再起動しておきます。

sudo reboot

docker-mirakurun-epgstationのインストール

v3.9.0-rc4、v2.7.3

mirakurunやepgstationの導入は他にもありますが、今回もセットになっているl3tnun/docker-mirakurun-epgstationを使いました。

記事執筆時点ではMirakurun v3.9.0-rc4、EPGStation v2.7.3でした。

curl -sf https://raw.githubusercontent.com/l3tnun/docker-mirakurun-epgstation/v2/setup.sh | sh -s
cd docker-mirakurun-epgstation

今回の環境だとsh: 11: docker-compose: not foundと出ますけど、そのまま続けます。

これは、shファイルの中身にあるコマンドdocker-composeが実行できなくて、docker composeで実行する環境だからです。

docker-compose run --rm -e SETUP=true mirakurun #これがエラーになった

mirakurunのセットアップが完了したら実行後にコンテナを削除する?ってことみたい。このまま放置して続けました。

docker-compose.ymlの編集

dockerで起動する前に、docker-compose.ymlを少し編集します。

user箇所がコメントアウトされているので、それを外します。インデントに気を付けてください。

nano docker-compose.yml

63行目から続くuser箇所。

        user: "1000:1000"
        devices:
            - /dev/dri:/dev/dri
        restart: always

uid、gidは自分のユーザーに合わせます。デフォルトユーザーなら恐らく1000:1000でしょう。

もう1箇所は、録画したファイルの保存場所です。

54行目にあるVolumesにあるrecordの箇所です。左側がホスト側なので、そこをHDDをマウントしたdataディレクトリを指定しています。

            - /home/raspida/data:/app/recorded

dockerでコンテナの起動

準備が整ったらコンテナを起動し、MirakurunとEPGStasionのWebUI画面で確認します。

docker compose up -d

実行後、コンテナを確認してみると、3つ表示されていますね。

docker container ls

CONTAINER ID   IMAGE                                    COMMAND                  CREATED        STATUS        PORTS                                                                                      NAMES
5e701caf0e46   docker-mirakurun-epgstation-epgstation   "npm start"              15 hours ago   Up 15 hours   0.0.0.0:8888-8889->8888-8889/tcp, :::8888-8889->8888-8889/tcp                              docker-mirakurun-epgstation-epgstation-1
5cc1f83a9b88   mariadb:10.5                             "docker-entrypoint.s…"   15 hours ago   Up 15 hours   3306/tcp                                                                                   docker-mirakurun-epgstation-mysql-1
76946f05f094   chinachu/mirakurun                       "docker-entrypoint.s…"   15 hours ago   Up 15 hours   0.0.0.0:9229->9229/tcp, :::9229->9229/tcp, 0.0.0.0:40772->40772/tcp, :::40772->40772/tcp   docker-mirakurun-epgstation-mirakurun-1

WebUI画面は、同ネットワーク内のPCのWebブラウザで、URL欄にIPアドレスにポート番号を付ければ表示されます。

#EPGStation
http://192.168.0.11:8888

#Mirakurun
http://192.168.0.11:40772

チャンネルの自動スキャン

最初、チャンネルの自動スキャンを実施してみます。ホスト側のターミナルで次のコマンドです。

curl -X PUT "http://localhost:40772/api/config/channels/scan"

他のPCからストリーム受信させる

これも前回の記事で触れました。PCやMacでストリーミング受信するのに便利なのが、MirakurunのAPI利用です。

VLCを例にしています。この1行をデフォルトに登録しておけば、VLCを単独で起動する度に登録してあるテレビ番号が一覧されてチャンネル切替をしながら視聴が可能になります。便利ですよ。

http://192.168.0.11:40772/api/iptv/playlist

VLCの設定画面

こんな感じで一覧として表示されます。

録画したデータの再生や共有

録画したデータは、変換しなければ無圧縮の.tsファイルです。

これはMacだとSafariで再生できません。ストリームのプロトコルがないからです。

h264に変換したデータはそのままブラウザで再生できますから、毎回変換作業をさせるかです。でも、とても時間はかかります。実録時間の倍?

URLスキームの新規作成

解決手段として、1つは再生できるようにURLスキームを作成することです。面倒ですがね。

URLスキーム

今回使った作者のやり方はこちら(Mac)

GitHub

https://github.com/l3tnun/EPGStation/blob/master/doc/mac-url-scheme.md Mirakurun を使用した録画管理ソフト. Contribute to l3tnun/EPGStation development by creating an account on GitHub.

こちらはWindows

GitHub

https://github.com/l3tnun/EPGStation/blob/master/doc/windows-url-scheme.md Mirakurun を使用した録画管理ソフト. Contribute to l3tnun/EPGStation development by creating an account on GitHub.

samba共有

もう1つは、samba共有させて直接ファイルを再生させるかになります。

こちらはラズパイではお馴染みですね。共有するディレクトリパスを、マウントしたHDDの/dataにすればOKです。

sudo apt install samba

例えば、既存ユーザー(ここではraspida)をsambaユーザーに登録し、smb.confにdataを追加。

sudo smbpasswd -aU raspida

/etc/samba/smb.confの例

[rokuga]
;   comment = recpi
   path = /home/raspida/data
   guest ok = no
   browseable = yes
   read only = no
   create mask = 0777
   directory mask = 0777

sambaについては次の記事を参考にしてください。

bookwormでも同じに快適

gitで公開してくれているl3tnun/docker-mirakurun-epgstationは、数年前も2024年も同じようにセットアップできました。助かります。

この記事を上から順番に追っていけば、同じようにセットアップできるかと思います。実際に自分も自分の記事を読んでやっています。多少、それぞれの環境が異なる部分はご容赦ください。

間違いや勘違いの記述はあると思います。フォーラムの方でご指摘いただける場所も設けてあります。ご利用ください。

今回も1CHのみのデバイスでしたから、同時に視聴や録画ができません。番組が被る場合が多いなら4CHがオススメです。但し、少しだけ設定が異なるかも知れません。

HDDも3TBに変えたため、これで2024年も大谷翔平を追っかけられそうです。

今年はドジャースですが、シーズン中の放送があっても朝方でしょう。録画して堪能したいと思っています。録画予約が簡単なのが嬉しいですよね。検索したり、キーワードで自動的に予約できたり、機能が豊富なのも魅力的なアプリケーションです。

2024年版、ラズパイで地デジ録画システムの構築でした。