Fire TV Stickを活用して省電力ファイルサーバーを作ろう!
先日Fire TV Stick 4K MAX 第二世代を購入しました。我が家にはファイルサーバーがなく、PCをサーバー化すると電気代が高いなどの問題がある。そのため、省電力なFire TV Stickでファイルサーバーを自作できないか試行錯誤の結果、成功したので忘備録として残します。
Amazon Fire TV Stick 4K Max(マックス) | Fire TV Stick史上最もパワフル | ストリーミングメディアプレイヤー(Amazonで見る)
消費電力が非常に低いので、サーバー化に最適です!(ただし通常の使用法ではありません。)
写真は筆者のFire TV Stickです。
準備:TermuxのFire TVへのインストール&準備すべき機器
PCを利用したインストールは記事がネットに既出ですので割愛しますが、簡単に説明しますと、①PCへのadbコマンド環境インストール②Fire TVで開発者オプションを表示しデバッグ有効化③TermuxのAPKを入手する④adbコマンドでインストールする、になります。
iPhoneを利用した簡単なインストール方法は当方の記事があります(下記)。
Termuxをインストールしたらとりあえず起動してパッケージのアップデートをしておきます。
apt update && apt upgrade
他にUSBハードディスクやSSDを接続するためのOTGケーブルは有ったほうが良いです。
実際に使用して動作しましたが、安いので当たり外れがあるようです。だからといって、高いから必ず動作するわけではありませんし、安い商品を筆者は試しました!
※写真は筆者のOTGケーブルです
コマンドを打ちやすくするためのBluetoothキーボードはあったほうが良いです。OTGケーブルで有線接続も可能ですが、何度も抜き差しするのは面倒&接続部の故障リスクがありそうです。

筆者が愛用しているApple Wireless Keyboard。ただし現在は販売終了しています。
USBハードディスクが常に稼働してしまうため、スリープ機能があるならUSBへの電気信号をオンオフできるスイッチャーがあると省電力にできます。
USBスイッチ付きコネクター データ転送/充電用 節電ECOコネクター(Amazonで見る)
電源オン・オフできる商品の中でも、データ転送も対応していることが重要です。対応していないと、ハードディスクとFire TV間でデータのやりとりができなくなります!
※写真は筆者のUSBスイッチ付きコネクターです
また、Fire TVはFAT32フォーマットしか認識しません。当方の検証ではフリーソフトで2TBまでならFAT32フォーマット可能でした(Fat32Formatterの詳細情報 : Vector ソフトを探す!)。

接続例です。
Fire TV StickにOTGケーブルを接続します。
OTGケーブルにMicro USBを繋いで給電します。
OTGケーブルにUSB Type-Aを繋いでハードディスクを接続します。
adbコマンドやサーバー化はメーカーの想定外の使い方ですので、自己責任でお願いします。何か生じても当方は責任を一切負いかねます。
プロトコル別の導入方法
セキュアな観点ではSSH > Samba(SMB) > WebDAVの順が良いと思っています。ただ、Fire TV Stickでは若いポート番号が使えないため、ポート指定やプロトコル等クライアントの対応状況で柔軟に選択するとよいです。また、DLNAサーバーも解説します。
例えば、WebDAVはセキュリティ面が心配ですが使い勝手は良いです。しかし、SSHトンネルを利用すればWebDAVでもセキュアに外部からアクセスできます。これについても解説します。
SSHサーバー
一般的にはNASと呼ばれませんが、SCPに対応したクライアントアプリを用いればNASライクなファイルサーバーになります。
opensshをインストールします。
apt install openssh
ユーザー名の確認と、パスワードの設定を行います。
whoami
passwd
sshサーバーを起動します。デフォルトの22番ポートは使えないため8022を指定します。
sshd -p 8022
あとはクライアントからアクセスするだけです。
WindowsであればWinSCP、iPhoneであればDocuments by ReaddleがSCPに対応していますので、一般的なファイラーの感覚でアクセスできます。
.bashrcに記載すればFire TV Stick再起動後もTermux起動で自動実行されるので便利です。
nano .bashrc
SMBサーバー
sambaをインストールします。
apt install samba
設定ファイルの例があるので、ホームフォルダにコピーします。
cp $PREFIX/share/doc/samba/smb.conf.example ~/smb.conf
whoamiで確認したユーザー名を登録してパスワードも設定します(u0_a***がユーザー名)。
smbpasswd -L -c ~/smb.conf -a u0_a***
設定ファイルを編集します。
nano smb.conf
smb.conf中にsmb portsの記載があるため、ポート番号を4445に変更します。
smb ports = 4445
[internal]セクションは自由に設定してください。下記は例です。pathはFire TV Stickの内蔵ストレージにしています。
[internal]
comment = Internal storage
path = /storage/emulated/0
vfs objects = aio_pthread
aio_pthread:aio open = yes
read only = no
browseable = yes
writable = yes
guest ok = no
\\サーバー名\internal で内部ストレージにアクセス可能/内部ストレージのファイルを読み書き可能/認証が必要でゲストアクセスは拒否/高速なファイル操作を実現するため非同期I/O(aio_pthread)を有効化
sambaサーバーを起動します。
smbd -D -s ~/smb.conf
これで、クライアントからアクセスできます。上記の場合はsmb://Fire TVのIPアドレス:4445/internal/でFire TV内蔵ストレージにアクセスできます。pathを変えればOTGケーブルで接続したハードディスク等もアクセスできます。
WebDAVサーバー
まずはpythonをインストールします
apt install python
次にpipをインストールします
apt install python-pip
WsgiDAVをインストールします
pip install wsgidav cheroot
WebDAVサーバーを起動します
wsgidav --host=0.0.0.0 --port=8080 --root=/storage/emulated/0/ --auth anonymous
ポートは8080/rootは内蔵ストレージ/anonymous(誰でも)アクセス許可
http://Fire TVのIPアドレス:8080でアクセスできます。iPhoneで有料アプリですがComicGlassでアクセスが当方では可能でした(wsgidav.yamlでパスワード認証有効化するとzipは読めなくなりましたので認証無しで下記SSHトンネルを利用しています)。rootを変更すればOTGケーブルに接続したハードディスク等にもアクセスできます。
動作が問題なければnohupを付けて.bashrcに記載すればFire TV Stick再起動後もTermux起動させれば自動実行されるので便利です
nano .bashrc
nohup wsgidav --host=0.0.0.0 --port=8080 --root=/storage/emulated/0/ --auth anonymous
このままではパスワード認証がないので、ポート開放して外出先から直接アクセスするのは危険です。SSHのポートだけ開けて、SSHトンネルを利用すると安全性が向上します。iPhoneのiSH shellを利用します。
ssh -p 8022 -C -c aes128-ctr -L 8080:1
92.168.*.*:8080 u0_a***@グローバルIPアドレス
192.168.*.*にはFire TVのIPアドレスを入力します。-L 8080:1
92.168.*.*:8080はローカルのポート8080をリモートサーバー経由で192.168.*.*:8080に転送/-p 8022はSSH接続先のポート番号8022指定/u0_a***@グローバルIPアドレスは接続先ユーザー名@ホストアドレス/-Cは圧縮/-c aes128-ctrは暗号化を軽量化
これでhttp://localhost:8080にアクセスすれば、http://Fire TVのIPアドレス:8080に接続されます。圧縮オプションと暗号化を軽量化することで大きなサイズのデータのやりとりの効率化を計ります。
SSHトンネルを持続させるためには、iSH shellをバックグラウンドで動作させ続けるようにします。
cat /dev/location > /dev/null &
この後、GPSの使用を常に許可し、その後SSHトンネルの開通コマンドを打てば、バックグラウンドでトンネルを開通させたままにできます。
または、wsgidav.yamlを作成することでパスワード認証など設定できます(公式:https://wsgidav.readthedocs.io/en/latest/user_guide_configure.html)。
サンプルのSample wsgidav.yaml
をベースに、必要箇所を編集すると良いでしょう。例えば、
Fire TVの内蔵ストレージを指定
provider_mapping:
'/': '/storage/emulated/0'
ユーザー、パスワードの設定
simple_dc:
user_mapping:
‘*’:
‘ユーザー名’:
password: ‘パスワード’
その後wsgidavとコマンドを打てばwsgidav.yaml
設定を読み取り起動するはずです。
DLNAサーバー
minidlnaをインストールします
apt install minidlna
設定ファイルを編集します。
nano $PREFIX/etc/minidlna.conf
公開するディレクトリを設定します。例えばFire TV内蔵ストレージの画像&動画ファイルを公開したい場合、
media_dir=PV,/storage/emulated/0
Pは画像、Vは動画です。/storage以降はOTGケーブル説明のハードディスク等も指定できます。
inotifyでファイルの変更が定期的に反映されます。デフォルトは900秒(15分)です。
inotify=yes
notify_interval=900
DLNAサーバーを起動します。
minidlnad -R
これでDLNAクライアントから見えるようになるはずです(iPhoneではVLCなど)。
実際の使用感と、消費電力について
筆者はsshサーバーと、wsgidavサーバーを主に使用しています。筆者の環境ではスリープ状態でもこれらのサーバーが機能しており、非常に省電力です。

ポータブル電源で、消費電力を測定するとスリープ状態で0~1ワットでした。写真は0ワットですがサーバーが動作しており、ssh接続、WebDAVサーバーへのアクセスも可能でしたので、非常に省電力です。また、Fire TV Stickは、かなり小型のため、設置場所にも困りませんでした。
iPhoneで撮影した4K動画をハードディスクにDocuments by Readdleで転送し、Fire TVのVLCやKODIで閲覧したり、ハードディスクに本を入れてiPhoneのComicGlassで読んだり(WebDAVサーバー)、とても便利になりました!
まとめ
- Fire TV StickのNASサーバー化は、低コストで構築できる!
- スリープ状態でもサーバーは動作するので、省電力!*1
- 小型のため、設置スペースに困らない!
*1:スリープ状態で動作するのは筆者の環境であり、全ての環境で動作するかは不明です。
ぜひ、試してみてください!
コメント