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

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

ラズパイ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万円でおつりが来ると思います。(※B-CASカードは余っているものを使用しましたので費用に入れていません。)その概要と作成コマンドをご紹介します。オープンソース開発者と活用ブログ公開の先駆者の皆さんには敬意を表します。

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

ここは参考、ソフト更新は定期的に更新実行方法 を行うと良いです。

 注意!! 12/15追記:ラズパイの場合、更新はやらない方が良いようです。
   私の環境の場合、この更新後にchinachuが動かなくなる確率が高いです。

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

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


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

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
}

  注意!! 12/25追記:週の初めにlogがコンソールに表示されない時がありました。ファイルもできていなかった様なので、録画していない時間に rebootで、とりあえず復旧しました。上記の圧縮操作の記述で悪さがあるかも知れません。(監視項目にします。)

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

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

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

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

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

 

最初に、ハードディスクをアンマウントします。(マウント実行してある場合)※補足:使用済みHDを使う時は、他のPC(WindowsLinux)で初期化をお薦めします。

# df
pi@raspberrypi:~ $ df

Filesystem 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
※ /sda1 でマウントされている例 # umount /dev/sda1 ← /dev/sda1 をアンマウント
pi@raspberrypi:~ $ df
Filesystem 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 | 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 mnt (確認のみ) 

#今回作成した保存先

$ 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/hdd1/recorded
browseable = yes
read only = yes
guest ok = yes

 

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


#sambaの再起動

pi@raspberrypi:~$ sudo systemctl restart smbd nmbd

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

 

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

 

f:id:masa19569810303:20181206190704p:plain

その後、視聴方法、別案でやってみました。よろしければ御覧ください。

www.m-miura.tech

使用してみた感想

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

 注意!! 12/15追記:chinachu更新のコマンドのところに書きましたが、
  ラズパイの場合、chinachu更新は行わない方が良いです。また、動作がおかしい場合は、正常に動いていた時のSDのバックアップデータで戻した方が速いです。ただし、予約ルール情報や録画済み情報も戻ってしまいますので、/home/pi/chinachu/dataにある4つの.jsonファイルを、一旦USBメモリにコピーしておき、SDのバックアップデータに戻した後に、同フォルダに上書きしてあげると最新になります。

 

2019年1/19 追記:困った現象が出ています。

 ルール番組予約で、特定の番組だけ??、予約済みにならない、現象を発見しました。その番組名は 秘密のケンミンSHOW!です。

1/30追記 秘密のケンミンSHOW、ルール番組予約で、予約したり、削除したり、何度もやっていたら予約済みに変わりました(原因不明)。番組表で番組の背景が赤になっていないと予約完了になってしていませんでした。予約済みになるまで時間がかかる番組もあるようです。(?)

 

今後の予定

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

 

 

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

qiita.com

 

qiita.com

 

qiita.com