NASNEを自作してみた

# はじめに
録画したテレビ番組をスマホから見れたら便利だと思いますか？
私の妻はそう思うようで「NASNEが欲しい」と言われました。（私はそもそもあまりテレビを見ないのです。。）
NASNE とは？と思い調べてみると 「BUFFALOの製品で、テレビを録画できるNAS」 らしい。
※NAS｜Network Attached Storage → ネットワーク（インターネット）経由で使えるストレージ
<!--
（補足｜その後の調べで、最近のテレビレコーダーにはNASの機能が付いていることが分かった。→ 最新レコーダーでもいい？）
-->

便利かもしれないけど、ストレージ容量2TBのモデルだと3万円くらいする。最近のHDDは2TBで1万円もしないのを考えると「自作してもいいのでは？」という考えに至りました。


# やったこと
NASNE的なものを自作した。
↓（一般的な用語で言い換えると）
テレビを録画できるサーバー（= **録画サーバー**）を立てた。
- **録画サーバーでできること**
    - **スマホ**から番組表の確認、録画予約などができる
    - 録画した動画が**スマホ**で見れる（在宅時・**外出時**どちらでも）
    - **4番組**まで同時に録画できる！
    - 録画容量は**10TB**！

ここで注目したいのは**4番組同時録画**と**容量10TB**という点です。
ネットで調べてみると、テレビレコーダーは同時録画 2-3番組、容量 2TB程度のものが多いようです。超ハイスペックだと10TB / 8番組というものもありますが、コスパで考えると今回の自作NASNEはかなり良さそうです。


# 用意したもの
<!--#### 家にあったもの-->
| 家にあったもの | 用途 | 備考 |
|:-----------|:------------|:------------|
|USBメモリ|インストールメディア|2GB|
|USBハブ|USBハブ|4分岐|
|BCASカード|地デジ信号の受信|これがないとTVが見れないようになっている。（詳細は[こちら](https://www.b-cas.co.jp/support/faq/category05/faq022.html)をどうぞ）|

<!--
|ノートPC|サーバー本体|10年前のDynabook。たまにしか使わない。|
|USBメモリ|Linuxのストレージ|8GB|
-->

<!--#### 買ったもの-->
| 買ったもの | 値段 | 用途 | 備考 |
|:-----------|------------:|:------------|:------------|
|ノートPC|4,180|サーバー本体|ハードオフで買ったジャンク品を修理したため格安で入手できた|
|カードリーダー|2,098|BCASカードの読み取り||
|TVチューナー|12,500|地デジ信号の受信|4ch同時視聴可能|
|HDD (10TB)|18,736|録画データの保存|Western Digitalというメーカー|
<!-- 合計金額¥33,334 -->

<!--（↑一式のいい感じの写真が撮れたら載せる）-->


# 作業概要
※ 本記事は概略に絞って読みものとし、詳細手順は別記事にしたいと思います。（記事末尾参照）

<!--（最終的な構成のイラストを載せる）-->

<!--
- サーバー構築（PCをLinuxとして使えるようにセットアップする部分）
- ファイル共有機能の構築（NASとして使えるようにする部分←結局あまり使っていないが）
- 録画機能の構築
- セキュリティ対策（iptablesの設定くらいだけど）
- 外出先から接続できるようにする（WiFiルーターの設定を変更してインターネット経由で接続できるようにする）
テスト

インフラ環境構築｜OSの導入
ミドルウェア導入｜nodejs, mysql
周辺機器の動作確認｜bcasカード、HDD
録画サーバー用ソフトの導入｜mirukurun, egpstation
NAS用ソフト（Samba）の導入｜samba
セキュリティ対策｜iptables,本来的にはユーザー、ファイル権限等の設定もした方がいい
微調整、カスタマイズ？｜録画画質の設定とか、HDDのスリープ設定とか
-->

### Arch Linuxの導入
「サーバーといえばLinux！」という先入観と、Windowsはごちゃごちゃしてて使いづらいという印象によって、今回はOSとしてLinuxを選びました。またPCをサーバーとして使用するため、できるだけ軽量に動作するLinuxがいいなと思い探したところ、Arch Linuxというものにたどり着きました。
Arch Linuxは導入がやや難しいとのことでしたが、普段仕事でLinuxに触っていることもあり、Tryしてみました。
なんとか導入→運用できましたが、導入作業は思いの他大変でした。（おかげでLinuxへの理解は深まりました。）


### HDDのセットアップ
今回は10TBの外付けHDDに録画データを保存したいので、OS導入後 HDDを接続する作業を行いました。
知っている人からすればなんてことない、「パーティションを切って → マウントして → fstabに設定して」という流れです。


### sambaの導入
NASNEは録画機能だけでなくNASとしての機能も持っているため、自作NASNEを謳う以上NASの機能実装が必要です。
今回はsambaというWindowsとの互換性を持ったファイル共有システムを使いました。sambaを入れることで、WindowsPCからはもちろん スマホからもアプリを使って共有ファイルにアクセスできます。
NAS(= Network Attached Storage) なので 家の外からインターネット経由でも使えるため、さしずめ自宅クラウドストレージといったところでしょうか。（※家の外から接続するには別途Wifiルーターの設定が必要です。セキュリティの話があるのでちゃんと調べて考えるか、覚悟して使いましょう。）


### 録画サーバー構築
ここが本丸です。作業概要は以下の通りです。ここまで終わると自宅内ではNASNEが使える状態になります。
1. BCASカードという地デジを見るのに必要なカードのセットアップ、動作確認をします。（ここでカードリーダーを使います。）
2. mirakurun（テレビ信号を処理するチューナー機能のソフトウェア）を導入します。今回は奮発して4番組同時視聴できるチューナー（物理）を買ったのでmirakurunで4番組を同時に処理できます。
3. 諸々必要なパッケージの導入をします。nodejs、mysqlその他諸々です。
4. EPGStationが使うデータベースの作成とユーザー設定を行います。どうやら番組情報や録画予約の情報などがこのDBに記録される様です。録画したデータは普通のファイルで保管されてました。
5. EPGStation（録画管理用のソフトウェア）を導入します。導入が完了するとWebブラウザ経由でテレビを見たり、録画、録画の視聴ができる様になります。録画する際の画質は設定ファイルを編集することで調整できます。

<!--
1. BCASカードのセットアップ、動作確認
2. mirakurunの導入
3. 諸々必要なパッケージの導入
    - nodejs→バージョン共存問題
4. MySQLの導入
5. EPGStationの導入
-->


### ファイアーウォールの設定(iptables)
セキュリティ的に不要なOSのポートは閉じておくことが望ましいので、その設定をします。
今回導入したarchlinuxではデフォルト状態では全開なので、後段のインターネット経由で接続できる様にする前に使わないポートは閉じておきます。


### インターネット経由での接続設定
外出中も自作NASNEに接続したい場合の設定です（家の中で使えれば十分ということであれば不要です）。やることは大きく2つあります。
- ルーターの設定
これは`家の外からインターネット経由で自宅内の録画サーバーに接続する`ための道を整備する様な作業です。設定によっては誰でも接続可能な状態になってしまうので自己責任で行いましょう。

- DDNSの設定
これはDynamic Domain Name System のことで、今回はフリーで使える[no-ip](https://www.noip.com/)というものを使いました。これを使うとインターネット経由で自宅ルーターに接続する際にIPアドレスを直に指定する必要がなく、`http://mynasne.com`みたいにドメイン名で接続できる様になります。プロバイダーに依るかとも思いますが、家庭用ルーターに割り当てられているグローバルIPアドレスは定期的に変わる様です。そのためDDNSを設定しておくことでグローバルIPの変更にシームレスに対応できる算段です。




# 余談

　実はこの自作NASNEですが、元々はラズパイで構築しようと思っていました。（ググると`やってみた記事`が結構あります。）しかし、私が持っていたのが`raspberry pi zero wh`（メモリ`512MB`）というもので、スペック不足で諸々のモジュールのインストールができずに断念しました。。


　仕方がないので、自宅にあったWindowsノートPCをサーバー代わりに使うことを考えました。ただPCのデータは消したくないので、USBメモリにOSを導入するという手段を取りました。一旦はうまく動いていたのですが、運用開始2週間程度でサーバーダウン！原因を探るとUSBメモリが使えなくなっていました。。（USBメモリには読み書き回数的な寿命があり、年季の入ったUSBを使っていたため、すぐに寿命が来たのかも知れません。稼働中OSが頻繁に読み書きしたんでしょう。。）

　ということで復旧作業！といっても再度USBメモリに入れるのは違うなと思い、中古PCを安く用意して導入し直しました。（今回はPC内蔵のHDDに導入しました。安いのでSSDではなくHDDなんです。。）今のところ動いていますが、スペック不足なのか同時に複数番組を再生するとちょっとカクつく様な。。CPUは初めに使っていたPCの方が断然いいので、結局USB接続のSSDなり寿命の長いストレージにOSを導入して、最初の構成に逆戻りかな。。とか考えているところです。


# おわりに
我が家では「録画機能」がメインで使われていますが、「録画サーバーを作ってみたい！」方はもちろん、「自宅クラウド的なストレージシステムが欲しい！」という方のご参考になれば幸いです。


ここまで読んでくださり ありがとうございました。


# 関連記事
- [archlinuxを構築してみた](https://qiita.com/hirmr/items/1241b9da8f73f9202849)
- [archlinuxにHDDを接続する](https://qiita.com/hirmr/items/374f9683a3433adb0b56)
- [archlinuxにSAMBAを導入してみた](https://qiita.com/hirmr/items/2691be414a8815c5158b)
- [archlinuxに録画サーバーを構築してみた](https://qiita.com/hirmr/items/b5726c580710266f370f)
    - [archlinuxに異なるバージョンのパッケージを同居させたい](https://qiita.com/hirmr/items/f37b0b1b954682e5329b)
    - [EPGStation config.ymlのカスタマイズ（自己流）](https://qiita.com/hirmr/items/9c69a6118df0ea497767)
- [録画サーバーのファイアーウォール設定](https://qiita.com/hirmr/items/1f472e707947bfa969ec)
- [archlinuxを定期的に再起動する（録画中ならやめる）](https://qiita.com/hirmr/items/9c63bc7672032c5bf050)