ラズパイ って何だべ~? 私設 基板実験室

地元東松島市のイベントや、パソコン・ラズベリーパイの実験報告しています

Raspberry Pi 3 に chinachu-γ + Mirakurun + Samba で超廉価なTV録画サーバーが出来た!!、追加ハードは外付HD、USB-TVチューナー、B-CAS読取機

f:id:masa19569810303:20181106144746j:plain

 

 はじめに

今度は、ラズパイ3で、地デジTV録画サーバーを作ってみました(上記写真)。
簡単な構成図は、以下の通りです。やってみたところ、個人用として十分過ぎる機能とTV画質がありました。かかった費用としては、ネットワークとTV受信アンテナ、B-CASカードが既に有る条件で、ラズパイ3とTVチューナ、外部HD、B-CAS読み取り機で、2万円でおつりが来ると思います。その概要と作成コマンドをご紹介します。オープンソース開発者と活用ブログ公開の先駆者の皆さんには敬意を表します。

f:id:masa19569810303:20181107153131p:plain

 

f:id:masa19569810303:20181107153145p:plain

実際のパソコン表示画面はこのようになります。

 ホーム

f:id:masa19569810303:20181107153319p:plain

 番組表

f:id:masa19569810303:20181107153337p:plain

 録画中のホーム

f:id:masa19569810303:20181107153354p:plain

 ルールで予約した録画タイトル

f:id:masa19569810303:20181107153423p:plain

 準備した機材

 

Chinachu(ちなちゅう)とは、

 Chinachuは、七森中録画研究会さんが開発したオープンソースのソフトです。ソフトの名前はアニメ「ゆるゆり」のキャラクターの名前が元になっているそうです。アニメに特化したソフトかと思いきや、普通の録画サーバソフトです。

Chinachuなら Raspberry PiのPCボードでも動かせます。

 事前にB-CASカードリーダドライバ、チューナードライバ、録画コマンドのrecdvb などのインストールが必要になりますが、専用のインストールスクリプトを実行すれば必要なソフトウェアが全てインストールされます。

Webサーバ機能、データベース機能も同梱されているので、細かい設定をする必要がありません。Linuxの基本知識(設定ファイルのnanao又はviでの編集する方法、階層、デバイスのマウント、ファイル権限の設定など)が必要ですが、少し注意点はありますが、インストールは簡単にできます。実際に動作しているかは、単独コマンドで少しずつ確認必要もあり、確認には少し時間がかかりました。

 番組表、録画予約、ルール指定、基本的な機能までは確認でき、リアルタイムでのストリーミング再生ができるはずなのでが、まだ確認しています。今のところ必要性がないので後回しにします。また、Chinachuを外部から接続できるようにする方法があるようですが、必要性がなく確認していません。(資料を見ると、Chinachu-Airというもので、外部から接続できるように計画しているように思えます。)チューナー制御部であるMirakurunは、Chinachu-Airの先行リリースとの事です。Mirakurunは、地デジ・BS/CSチューナーをLAN内で共有するためのソフトウェアとの事です。今後の開発に期待したいです。
なお、ChinachuのAndroidアプリがあり、これでは番組予約のみ可能です。 

実際のソフト導入方法


RASPBIANの導入
RASPBIAN OSをダウンロードしてSDカードへ書き込みました。要点は以下の通り。

VNCを使い、サーバーを置いた部屋以外で設定作業を行いたいため、通常のRASPBIAN STRETCHを使用しました。

  1. 公式推奨の7zipを導入して解凍する。
  2. 公式推奨のWin32DiskImagerを使って書き込む。
  3. 一応、SSHも使えるようにSDカードのbootパーティションのルート直下にssh空ファイルを置く。
  4. SDカードと有線LAN(gitからのchinachuプログラムのコピーに時間がかかるので、Wi-Fiでも良いが、有線LAN使用をお勧めします。
  5. USB ストレージの接続、フォーマット。SDカードに録画データを保存するのは無理なので、USBに接続したハードディスク(最低でも2TB)を準備します。(フォーマット、マウントは後述で行っている。)


チューナーの導入


PX-S1UD firmware のインストール。ドライバは kernel に組み込まれていますが、別途 firmware が必要なので配置します。

sudo apt -y install unzip
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
sudo reboot now

再起動が終わったら、以下続き。

準備ができたところでUSBチューナを刺してみます。

/>#何も挿していない状態

pi@raspberrypi:~ $ ls /dev/dvb/
ls: cannot access '/dev/dvb/': No such file or directory

 

#1本目挿入

pi@raspberrypi:~ $ ls /dev/dvb/
adapter0

 (複数チャンネル同時録画の場合は、複数チューナーの挿入と設定の繰り返し)

 

mirakurun のインストール

まずはnode.jsを導入
# node.jsのリポジトリを追加

pi@raspberrypi:~ $ curl -sL http://deb.nodesource.com/setup_8.x | sudo bash -

 

# node.jsをインストール

pi@raspberrypi:~ $ sudo apt-get install -y nodejs

PM2のインストール。バージョンを指定(Mirakurunの動作要件は >=2.4.0 <3.0.0 )


#PM2 Ver 2.10.4 をインストール

pi@raspberrypi:~ $ sudo npm install pm2@2.10.4 -g
Mirakurunのインストール


#Mirakurun をインストール

pi@raspberrypi:~ $ sudo npm install mirakurun -g --unsafe --production

接触ICカードリーダーツールのインストールと動作確認

#ICカードツールのインストール

pi@raspberrypi:~ $ apt-get install pcscd libpcsclite-dev pcsc-tools

 

# ICカードの読み込みテスト

pi@raspberrypi:~ $ pcsc_scan
(略)
Japanese Chijou Digital B-CAS Card (pay TV)
Ctrl+C で停止


#dvb-toolsパッケージのインストール

pi@raspberrypi:~ $ sudo apt install -y dvb-tools

 

日本の地デジ放送に合わせた周波数設定ファイルをダウンロード

#gitを導入

pi@raspberrypi:~$ sudo apt install -y git

 

#周波数設定ファイルをダウンロード

pi@raspberrypi:~$ cd /usr/local
pi@raspberrypi:/usr/local/$ sudo git clone https://github.com/Chinachu/dvbconf-for-isdb.git
pi@raspberrypi:/usr/local/$ cat /usr/local/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf

 

 

実装参考用の decoder の インストール

#decoderのインストール

pi@raspberrypi:~ $ sudo npm install arib-b25-stream-test -g --unsafe


チューナーの設定
Mirakurunがインストールされると、/usr/local/etc/mirakurunに3つの設定ファイルが生成される。
設定が必要なのは、tuners.ymlとchannels.ymlの2つ。
tuners.ymlでは、チューナーの設定を行う。

とのことですので、設定追記。

$sudo nano /usr/local/etc/mirakurun/tuners.yml

#以下追加内容

- name: PX-S1UD-1
types:
- GR
command: recdvb --b25 --strip <channel> - -

追記が終わったら、再起動
#mirakurunの再起動

pi@raspberrypi:~ $ sudo mirakurun restart

チューナの設定が終わったらチャンネルをスキャンします

#チャンネルスキャンをmirakurunに指示
  局名出るまで、何度かmirakurunのインストールをトライする必要あり。

pi@raspberrypi:~ $ curl -X PUT "http://localhost:40772/api/config/channels/scan"
channel scanning... (type: "GR")
channel: "13" ...-> no signal. [Error: stream has closed before get network]
channel: "14" ...
(略)
channel: "52" ...-> no signal. [Error: stream has closed before get network]
-> total 12 channe ls found and 35 channels stored.
channel scan has completed and saved successfully.
**RESTART REQUIRED** to apply changes.


スキャン結果を確認、場合によっては不要なチャンネルを削除
#チャンネルスキャン結果を確認&編集

pi@raspberrypi:~ $ sudo mirakurun config channels  Viコマンドで編集
- name: NHKEテレ
type: GR
channel: '13'
- name: NHK総合
type: GR
channel: '17'
- name: TBCテレビ
type: GR
channel: '19'
- name: 仙台放送
type: GR
channel: '21'
- name: ミヤギテレビ
type: GR
channel: '24'
- name: 東日本放送
type: GR
channel: '28'

設定がおわったら再びmirakurunをリスタート


#mirakurunの再起動

pi@raspberrypi:~ $ sudo mirakurun restart


Chinachu γ(ガンマ)の導入

Gitリポジトリからクローン・インストール

#gitからクローン 

pi@raspberrypi:~ $ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu

#クローンされたディレクトリへ移動

pi@raspberrypi:~ $ cd ~/chinachu/

#インストーラーを実行

pi@raspberrypi:~/chinachu $ ./chinachu installer
# 1 の Auto を選択

 

 約1~2時間かかった(放置にしましょう!)

>curl: (22) The requested URL returned error: 404
が出るがそのまま、流す!!(そういう仕様らしい)

(中略)
chinachu@0.9.5-gamma.0 /home/pi/chinachu
??? swagger-client@2.1.13 (git://github.com/kanreisa/swagger-js.git#82abd4fe41dbee957bff51463fcd6167852b3494) done.
--2018-11-04 07:21:56-- http://johnvansickle.com/ffmpeg/releases/ffmpeg-release-32bit-static.tar.xz (中略)
`ffmpeg-release-32bit-static.tar.xz' ???? ffmpeg-release-32bi 100%[===================>] 16.66M 36.4KB/s in 7m 28s 2018-11-04 07:29:26 (38.1 KB/s) - `ffmpeg-release-32bit-static.tar.xz' ????? [17468728/17468728] ffmpeg-release-32bit-static.tar.xz (1/1)
100 % 16.7 MiB / 121.2 MiB = 0.137 9.0 MiB/s 0:13
ffmpeg-4.0.2-32bit-static/manpages/
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-protocols.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-scaler.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-formats.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-resampler.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-devices.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-protocols.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-all.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-utils.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-all.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-formats.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-devices.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-filters.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-codecs.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffprobe.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-resampler.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-filters.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-bitstream-filters.txt
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-scaler.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-utils.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-bitstream-filters.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffprobe.pdf
ffmpeg-4.0.2-32bit-static/manpages/ffmpeg-codecs.txt
ffmpeg-4.0.2-32bit-static/readme.txt
ffmpeg-4.0.2-32bit-static/ffprobe
ffmpeg-4.0.2-32bit-static/ffmpeg-10bit
ffmpeg-4.0.2-32bit-static/qt-faststart
ffmpeg-4.0.2-32bit-static/ffmpeg
ffmpeg-4.0.2-32bit-static/GPLv3.txt
'ffmpeg-release-32bit-static.tar' ???????
Creating libav aliases...
'/home/pi/chinachu/usr/bin/avconv' -> '/home/pi/chinachu/usr/bin/ffmpeg'
'/home/pi/chinachu/usr/bin/avprobe' -> '/home/pi/chinachu/usr/bin/ffprobe'
ffmpeg --> done.

ルールファイルの初期化とコンフィグファイルの編集

pi@raspberrypi:~/chinachu $ echo "[]" > rules.json
pi@raspberrypi:~/chinachu $ cp config.sample.json config.json
pi@raspberrypi:~/chinachu $ is

サンプルのコンフィグファイルの "uid" "recordedDir" "wuiHost" を変更します。

config.json
{
"uid": "pi",
"gid": "video",
"mirakurunPath": "http+unix://%2Fvar%2Frun%2Fmirakurun.sock/",
"recordedDir" : "/mnt/",
"vaapiEnabled": false,
"vaapiDevice": "/dev/dri/renderD128",
"excludeServices": [
3273701416,
3232728088,
3273901183,
3274201456,
3239123992,
3239123993,
3273601408
],"serviceOrder": [
3273601024,
3273601025,
3273701032,
3273701033,
3273701034
],"wuiUsers": [
"chinachu:yoshikawa"
],
"wuiAllowCountries": ["JP"],"wuiPort": null,
"wuiOpenHost": "0.0.0.0",
"wuiTlsKeyPath": null,
"wuiTlsCertPath": null,
"wuiTlsRequestCert": false,
"wuiTlsRejectUnauthorized": true,
"wuiTlsCaPath": null,
"wuiOpenServer": true,
"wuiOpenPort": 20772,
"wuiXFF": false,
"wuiDLNAServerEnabled": false,
"wuiMdnsAdvertisement": true,"recordedFormat": "[<date:yymmdd-HHMM>][<type><channel>][<channel-name>]<title>.m2ts",
"storageLowSpaceThresholdMB": 3000,
"storageLowSpaceAction": "remove",
"storageLowSpaceNotifyTo": null,
"storageLowSpaceCommand": ""
}

 

動作チェック、chinachuが問題なく起動し、EPGの取得できるか確認します。
※この手順を飛ばすと次のpm2 start がすぐに異常終了してしまうので、このチェックは必須です。

 

pi@raspberrypi:~/chinachu $ ./chinachu update
Client {
basePath: '/api',
priority: 0,
host: '',
port: 40772,
socketPath: '/var/run/mirakurun.sock',
userAgent: 'Chinachu/0.9.5-gamma.0 (scheduler)',
_userAgent: 'MirakurunClient/2.7.4 Node/v6.11.2 (linux)' }
5 Nov 00:03:55 - GETTING EPG from Mirakurun.
5 Nov 00:03:55 - Mirakurun is OK.
5 Nov 00:03:55 - Mirakurun -> services: 21
5 Nov 00:03:55 - Mirakurun -> services: 21 (excluded)
5 Nov 00:03:55 - Mirakurun -> sorted services: 0
5 Nov 00:03:56 - Mirakurun -> programs: 4556
5 Nov 00:03:56 - Mirakurun -> tuners: 1
5 Nov 00:03:57 - WRITE: /home/pi/chinachu/data/schedule.json
5 Nov 00:03:57 - RUNNING SCHEDULER.
5 Nov 00:03:57 - TUNERS: {"GR":1}
5 Nov 00:03:57 - MATCHES: 0
5 Nov 00:03:57 - DUPLICATES: 0
5 Nov 00:03:57 - CONFLICTS: 0
5 Nov 00:03:57 - SKIPS: 0
5 Nov 00:03:57 - RESERVES: 0
5 Nov 00:03:57 - WRITE: /home/pi/chinachu/data/reserves.json
pi@raspberrypi-c:~/chinachu $

 

# EPG取得テスト(エラーが出た場合は恐らく Mirakurun に接続できていません)


起動させます。また、自動起動の設定を行います。


#chinachuを実行

pi@raspberrypi:~/chinachu $ sudo pm2 start processes.json
[PM2][WARN] Applications chinachu-wui, chinachu-operator not running, starting...
[PM2] App [chinachu-wui] launched (1 instances)
[PM2] App [chinachu-operator] launched (1 instances)

  Name   mode  status    cpu   memory  
 chinachu-operator fork online 0 87% 11.4 MB
 chinachu-wui fork online 0 77% 11.5 MB
mirakurun-server fork online 0 8% 94.4 MB

Use `pm2 show <id|name>` to get more details about an app
#statusが onlineになっていればOK!!

#mirakurun と Chinachuが実行されている状態をセーブ

pi@raspberrypi:~/chinachu $ sudo pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2
 

#PM2をスタートアップに登録

pi@raspberrypi:~/chinachu $ sudo pm2 startup
[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target
[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill
[Install]
WantedBy=multi-user.target
Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save
[PM2] Remove init script via:
$ pm2 unstartup systemd

 

ここまででソフト導入は完了です。次に、クライアントのパソコンから実際に使用

http://(ラズパイのIPアドレス):20772/

へアクセスすることでChinachuが使えます。(有線LANのIPとWi-FiのIPがありますが、有線LANをお薦めします。)

動作確認は、同様にクライアントのパソコンからシステムステータス確認で行えます。

 

f:id:masa19569810303:20181114151628p:plain

また、ソフト更新は定期的に更新実行を行うと良いです。

pi@raspberrypi:~/chinachu $ ./chinachu installer
pi@raspberrypi:~/chinachu $ ./chinachu updater

でChinachuの更新が行えます

 

 

ログローテーションの設定
ログローテーションの設定を入れました。(必要に応じてで構いません。)


#ログローテートモジュールのインストール

pi@raspberrypi:~/chinachu $ sudo pm2 install pm2-logrotate

# mirakurun用ログローテーション設定の追加

pi@raspberrypi:~/chinachu $ sudo nano /etc/logrotate.d/mirakurun

毎日ログを圧縮して1週間分保存する設定、とのことです。

/usr/local/var/log/mirakurun.stdout.log
/usr/local/var/log/mirakurun.stderr.log
/{
daily
compress
rotate 7
missingok
notifempty
}
ssh@pi
# chinachu用ログローテーション設定の追加
pi@raspberrypi:~$ sudo nano /etc/logrotate.d/chinachu

毎週ログを圧縮して4週間分保存する設定、とのことです。

/usr/local/var/log/chinachu-operator.stderr.log
/usr/local/var/log/chinachu-operator.stdout.log
/usr/local/var/log/chinachu-wui.stderr.log
/usr/local/var/log/chinachu-wui.stdout.log
{
weekly
compress
rotate 4
missingok
notifempty
}

 

 外部ハードディスクへの変更

外部ハードディスクの正しい初期化方法が分かったのが、後になったので、

ソフトのインストール後に、さらに、Chinachuのホーム画面で設定変更を行っている

# sudo nano /home/pi/chinachu/config.json

6行目の"recordedDir"を変更したいディレクトリに変えます。ディレクトリ名の末尾は”/”
"recordedDir" : "./recorded/",
→"recordedDir" : "/mnt/hdd1/recorded/",

 

最初に、ハードディスクをアンマウントします。(マウント実行してある場合)

# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
pi@raspberrypi:~ $ df
?????? 1K-???? ?? ??? ??% ??????
/dev/root 7593848 6149268 1072628 86% /
devtmpfs 470116 0 470116 0% /dev
tmpfs 474724 0 474724 0% /dev/shm
tmpfs 474724 12388 462336 3% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 474724 0 474724 0% /sys/fs/cgroup
/dev/mmcblk0p1 43539 22502 21037 52% /boot
tmpfs 94944 0 94944 0% /run/user/1000
/dev/sda1 1921802500 77856 1824032584 1% /media/pi/e1e1258a-8143-49db-a87b-21b4a8b0c46b
17628 920356 2% /mnt/diskA
※ /sda1 がマウントされている</pr # umount /dev/sda1 ← /dev/sda1 をアンマウント
pi@raspberrypi:~ $ df
?????? 1K-???? ?? ??? ??% ??????
/dev/root 7593848 6149264 1072632 86% /
devtmpfs 470116 0 470116 0% /dev
tmpfs 474724 0 474724 0% /dev/shm
tmpfs 474724 12384 462340 3% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 474724 0 474724 0% /sys/fs/cgroup
/dev/mmcblk0p1 43539 22502 21037 52% /boot
tmpfs 94944 0 94944 0% /run/user/1000

※ /dev/sda1のマウントが解除され表示されなくなった # パーティションテーブルの設定を行います

sudo fdisk /dev/sda1

# d でパーティションを削除

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

# p で現在の状態を確認

Command (m for help): p
Disk /dev/sda1: 1.8 TiB, 2000397868544 bytes, 3907027087 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x19867eb5

# n でパーティションを作成 その後の設定で何も入力しない場合全てデフォルトとなる

pi@raspberrypi:~ $ sudo fdisk /dev/sda1
Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command. Device /dev/sda1 already contains a ext4 signature.
The signature will be removed by a write command. Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x19867eb5. Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-3907027086, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-3907027086, default 3907027086): Created a new partition 1 of type 'Linux' and of size 1.8 TiB.

 

# p で再度現在の状態を確認

Command (m for help): p
Disk /dev/sda1: 1.8 TiB, 2000397868544 bytes, 3907027087 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x19867eb5 Device Boot Start End Sectors Size Id Type
/dev/sda1p1 2048 3907027086 3907025039 1.8T 83 Linux

 

# w で変更を書き込みます

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.:無効な引数です
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

ext4でフォーマットする

sudo mkfs.ext4 /dev/sda1
pi@raspberrypi-c:~ $ sudo mkfs.ext4 /dev/sda1
mke2fs 1.43.4 (31-Jan-2017)
Found a dos partition table in /dev/sda1
Proceed anyway? (y,N) y
Creating filesystem with 488378385 4k blocks and 122101760 inodes
Filesystem UUID: e94a9fef-fc73-4b8c-ae9b-56f0ee10fce8
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848 Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

 

マウントする

/etc/fstabに、デバイスを登録することにより、起動時に自動マウントすることができます。 またデバイスのパスではなくUUIDを登録しておくことにより、デバイスのパスが変更されてもマウントすることが可能です。

マウントポイントを作成
必要に応じてマウントポイントを作成します。今回は/mnt/hdd1としました。

sudo mkdir /mnt/hdd1

UUIDを調べる
# ブロックデバイスの情報を表示する

pi@raspberrypi:~ $ sudo blkid /dev/sda1
/dev/sda1: UUID="e94a9fef-fc73-4b8c-ae9b-56f0ee10fce8" TYPE="ext4" PARTUUID="9bcc73b5-079a-4f69-a809-d0122aa289d1"

 

fstabを編集

# バックアップをとっておく

cd /etc
sudo cp fstab fstab.bak

# fstabを編集しマウント設定を追加

sudo nano fstab
# デバイス名 マウントポイント ファイルシステム オプション dump指定 fsck指定
UUID=e94a9fef-fc73-4b8c-ae9b-56f0ee10fce8 /mnt/hdd1 ext4 nofail 0 0

# 再起動

sudo reboot

確認
df

f | grep /mnt/hdd1
pi@raspberrypi:~ $ df | grep /mnt/hdd1
/dev/sda1 1921802500 77852 1824032588 1% /mnt/hdd1

所有者変更

さらに、chinachuの録画データの保存先を、外付けHDDにするには、所有者変更が必要でした。

 

フォルダ作成

$ cd /mnt/hdd1
$ sudo mkdir recorded

所有者変更
#デフォルトの保存先

$ ls -al ~/chinachu/
drwxr-xr-x 2 pi video 4096 Dec 30 12:55 recorded

#今回作成した保存先

$ ls -al /mnt/hdd1
drwxr-xr-x 2 root root 4096 Dec 30 13:10 recorded

変更

$ sudo chown pi recorded
$ sudo chown :video recorded


確認
デフォルトと所有者設定が同じになっていればOK

$ ls -al
drwxr-xr-x 2 pi video 4096 Dec 30 13:10 recorded
保存先を外付けに変更


ブラウザでChinachuを開き、設定画面で以下のように変更します。

"recordedDir" : "./recorded/",
→"recordedDir" : "/mnt/hdd1/recorded/",

これで保存先の変更は完了。

 

sambaのインストールと設定

録画フォルダをWindowsから読み出し、視聴できるようにします。

#sambaのインストール

pi@raspberrypi:~$ sudo apt install -y samba

設定ファイルに /mnt 以下を読み取り専用、ゲストアクセスOKで公開するよう設定を追加します。


#sambaの設定ファイルの編集

pi@raspberrypi:~$ sudo nano /etc/samba/smb.conf

/etc/samba/smb.conf
....
#ファイルの末尾に以下の行を追加

[recorded]
comment = Chinachu Recorded Folder
path = /mnt
browseable = yes
read only = yes
guest ok = yes

 

sambaを再起動して設定を有効にします。


#sambaの再起動

pi@raspberrypi:~$ sudo systemctl restart smbd nmbd

Windowsから ¥¥(録画サーバのIP)¥recorded  (¥は半角)にアクセスしてフォルダが見れれば成功です。

 

 これで、家庭内の各パソコンから、録画設定と、録画済(録画中)ファイルからTV視聴が自由にできるようになります。
現状、録画予約はブラウザから。視聴は、sambaの共用フォルダにアクセスして、録画ファイルをVLCで起動する手法です。

 

使用してみた感想

  • 冒頭にも書きましたが、MPEG2ファイルで録画するため、PCで見るツールとして申し分のない画質と、録画予約は簡単な操作でした。
  • ラズパイは、やはりサーバーに最適です。CPUが熱くならずに、ファンレスで音が静か。
  •  注意事項としては、今回のように、チューナー使用が1つの場合は、同時刻に複数のチャンネルを予約してしまうと、初めに予約した方がキャンセルされる仕様のようです。本当に予約されたか、ブラウザのホーム画面に戻って確認する事を忘れないことです。
  • 録画した番組は、Windowsパソコンで見る方が多いと思いますが、VLCのソフトで録画共用フォルダのファイルを アクセスして観る方法が、画質がベストです。録画ファイル名には、日付・題名が付いているので、特に困ることはないと思います。
  • 重要:放送番組に著作権がありますので、個人使用の範囲でお楽しみ下さい。

 

今後の予定

  • 現在、チューナーは1本のため、2局以上の同時録画は出来ない。チューナーを1本ずつ増設していけば、同時録画可能の局数が増えていく。最終的には、全チャンネル全番組の録画システムにバージョンアップして行きたい。
  • 現在の2TBの外部HDを使用しているが、何日で満杯になるか確認して置きたい。
  • 録画予約を外出先から可能にする仕組みも、オープンソースであるようなので追加して行きたい。また、開発中となっている Chinachu-Air にも期待したい。

 

 

 ・構築の参考にさせていただいたブログです。

qiita.com

 

qiita.com

 

qiita.com