Lean MPDで始めよう! 安心・ポータブル・ラズパイ・オーディオ生活!


さて、前回、唐突に紹介した、似非ディストリビューションである「Lean MPD」だけど(笑)、今回はその導入から初期設定までについてざっと手順を書いてみたいと思う。

なお、前回書いたように、このディストリビューションは、そもそもが「Raspberry Pi Zero Wでくみ上げたポータブル環境用のラズパイ・オーディオに最適なディストリビューションが無い」事から構築を始めたという経緯がある。

そのため、DACについては「SabreberryDAC ZERO」を推奨としているのと、Raspberry PiについてはそのBluetoothの利用を前提としており、「Raspberry pi zero W」一択となっている事をご注意願いたい。

あと、昨今のラズパイ・オーディオの流れで「ハンダ付け不要!Linuxコマンド不要!」みたいな流れもあるんだけど、ちょっとそれだと流石に面白い事はできないわけで、当然、このページもコマンドゴリゴリな点は容赦願いたい(笑)

いや、「そんなニッチなところ、どこにニーズがあるんだ!」なんて意見もあるかもしれないけど、ニッチだからこそ自分で準備しないといけないという事情があるんだよなあ(笑)

なお、前回記事をまだ読んでいない方は、前回からの続きとなりますのでまず前回記事から読んでみてください!





「Lean MPD」って何?どんな特徴があるの?



さて、前回記事で色々と「ポータブル用途向けのディストリビューションに必要な機能」について書いたのだけど、「Lean MPD」は前回記事の内容を体現した、「ポータブル・ラズパイ・オーディオ」の「試金石」的なディストリビューション(というかRaspbianの改変バージョン)と考えてもらって良いかと思う。

その特徴としては、前回、以下のような考慮するべきポイントを書いたのだけど、

1.突然のシャットダウンによりファイルシステムが破壊されるのを回避する
2.消費電力をなるべく低減する
3.プレーヤーのリモート操作方法
4.プレーヤー操作における機能の過不足と配置
5.上記を踏まえた上でより良い音質となるよう配慮


このポイントに対してそれぞれ、解決策を準備して、結果として以下のような特徴を持つディストリビューションとなっている。

1.AuFS+fsprotectによりシステムファイルを完全に保護。
2.不要サービスおよび不要な電源供給を停止し、低消費電力で駆動。
3.WiFi通信をBluetooth通信で代替する事による消費電力低減。
4.スマホ操作を前提としたympdの機能拡張
5.リアルタイムカーネル採用(+その他)によるmpd動作の改善。


Read-Onlyのファイルシステムを採用したシステムとしてはlightMPDなんかがあって、あちらはさらにとても洗練されたシステムにはなっているのだけど、どうしても有線LANとNAS利用が前提という設計思想上、ポータブル用途には向いていないように思う。

まあ、そういう意味ではスキマ産業的なディストリビューションを目指していると言えるのかもしれない(笑)

まあ、Bluetoothテザリング経由でラズパイ・オーディオ操作するってネタとかも実のところは英語圏も含めて他でやってる人もいない(2017年10月時点ではネタとしては世界初!?)ので、結構アグレッシブな提案を含んでいたりするんだけどね。


なお、おそらく、今後もちょっといじる事があると思うけど、通常のディストリビューションが機能の充実や音質の改善を目指すのに対して、この「Lean MPD」はちょっと変態変化球的な改善を心がけて発展させていきたいと思ってます(笑)

必要となる構成の確認


Lean MPDはポータブル向けの小さなラズパイ・オーディオに特化して、構築を行っています。そのため、以下の機器構成でのみ正常に動作する事を前提とします。

・I2S接続のDAC(Sabreberry DAC ZEROを推奨)
・Raspberry Pi Zero W
・4GB以上のMicroSDカード
・USB-有線LANアダプタ(※)
・Bluetoothによるテザリングが可能なスマホ(当方、Android6のみで確認)

※Debian Stretchベースのため、たかじんさんのサイトで紹介しているwpa_supplicant.confを/bootに配置して起動する方法が使える可能性が高いですが、未検証ですので本手順ではUSBの有線LANアダプタを使用する事を推奨します。

まあ、色々お好きな物をというところだけど、この辺りが売れている模様。ボクはPCでの活用も考えてロジテックのUSB3.0HUB+Gigabitイーサ兼用のLAN-GTJU3H3という製品を使っているけど、そこまではいらないかも。



OSイメージのダウンロードおよび書き込み


MicroSDカードとしては4GB以上あれば大丈夫かと。

以下のリンクよりイメージをダウンロードします。ダウンロード完了後に、7zipが解凍できる解凍ツールにて展開してください。

Lean MPD Ver.0.01
Lean MPD Ver.0.02 Beta
Lean MPD Ver.0.031 Beta
Lean MPD Ver.0.0.61 Beta
Lean MPD Ver.0.0.83 Beta
Lean MPD Ver.0.0.831 NosPiDAC(Tube-Man)暫定対応版
(New!じんそんさんより正式にスクリプト公開を許諾いただきました!)
Lean MPD Ver.0.0.8 日本語説明付き設定ファイル

(Ver.0.02 Betaでの変更点)

・再起動時にMPDのDBファイルを保持するように変更しました。
・ReadOnlyモードでは「赤の炎」アイコン、ReadWriteモードでは「緑の葉」アイコンが上部に表示されるように変更しました。
・Rebootボタンの仕様変更
・ファビコンを修正。

(Ver.0.031 Betaでの変更点)

Bootswatchで公開されているフリーテーマ「Darkly」を”やっつけ”適用しました。
・その他の軽微な修正&調整



(Ver.0.04 Experimentalでの変更点)

・起動スクリプトをSystemd経由で起動するように修正。それに伴い、「/boot/leanmpd.conf」で起動サービスのON/OFFを制御できるようにしました。
・たかじんさんのサイトを参考にAPモードを実装しました。(SSID:lmpd-AP PASS:raspberry。接続後は「http://192.168.81.1」にアクセスください。)
・Shairport-Syncを導入し、AirPlayが動作するようにしました。(未調整。使用しない場合はleanmpd.confで”enable_airplay”を"no"にしてください。)
・(実験)ajentiを導入しました。(試したい場合はleanmpd.confで”launch_ajenti”を"yes"にして、再起動後、「https://URL:8000」にアクセスしてください。その後「Username:root Password:admin」でログインできます。なお、Chromeの場合はオレオレ証明書の関係でちょっとアクセスの仕方がわかりにくい、IEだと更新時にAjentiがクラッシュする(笑)などあるので、今後も実装を続ける予定があれば何か書きますね。)
・(実験)「http://URL/games/hextris/」にアクセスするとHextrisが遊べます、、、いや、オーディオの音質ばっかり追求し始めると疲れるんで「戦略的ユルディストリ化」の実験を(笑)

(Ver.0.0.5 Betaでの変更点)
「/boot/leanmpd.conf」でAuto Setupモードを指定する事で、APモードと自宅モードのスイッチやHWボタン使用有無、無線LANおよびNASの簡易自動設定などを制御できるようにしました。(現時点では検証不足です。そろそろ形が決まってきたのでマニュアル作らないと、、、)
・Ajentiの使い途が結局なかったので削除しました。(笑)
・iPadでの画面崩れをやっつけ対応し、ボタン配置を全体的に見直しました。(0.0.53)

(Ver.0.0.6 Betaでの変更点)
・日本語説明付きの「leanmpd_JP.conf」を用意しました。こちらのファイルで設定パラメータを調整し、leanmpd.confに上書きください。
・HomeモードでMPDの再生が途切れる事があったのでパラメータ調整しました。
・SDカードの読み込み性能を改善。
・固定IPをセットした場合に初期化スクリプトが正常に動作しない問題に対処。
・その他、音質などの微調整。

(Ver.0.0.8 Betaでの変更点)
・開発のベースを2017-11-29公開版のRaspbian Stretch Liteに変更。(容量ギリギリ。2GBに収めるのは諦めるかも、、、)
・理想とする「自宅起動時に自宅WiFiに接続して音楽ファイルをNASから同期後に、APモードにスイッチ」を実現するために、かなり簡易な自宅WiFiへの接続とNASマウント、および自動同期機能を試験的に実装。(設定方法は上記の日本語説明付き設定ファイルを参照ください。かなり起動が遅くなる可能性があります。詳細はまた別途記事化する予定。)
・BTペアリング後、設定ファイルにMACアドレスを記述しておけば起動時に自動接続されるように修正。
・画面遷移を修正。

※展開後のサイズは2GB程度になります。空き容量に注意してください。
※あくまでイメージは個人が楽しむために作成した物になります。本イメージを使用した事による損害等が発生した場合でも、本サイトは責任を負いません。
※本サイトではサポートなどをしませんのであくまで自己責任で活用ください。
※何かバグとか個人情報ダダ漏れだった場合は早めに連絡ください(笑)

展開したファイル(.imgファイル)をWin32 Disk ImagerやDDWin、その他のツールを使用してMicroSDカードの書き込みを行います。

Lean MPDの起動、およびSSH接続


Raspberry Pi Zero WにSDカードを挿入し、有線LANアダプタを装着後に電源を投入します。

Read-Onlyのファイルシステムを採用しているためなのか、現時点では高速起動、とまではいきません。それでも30秒程度待てば起動しますのでしばらく待ちます。

SSHクライアントにて以下の通り設定を行い、SSHで接続を行います。

ホスト名:「leanmpd.local」
ポート番号:「22」
ユーザー名:「pi」
パスワード:「raspberry」 ←ログイン後に変更しておいた方が吉
※なお、接続できない場合はNetEnum等のツールを使ってIPアドレスを調べてください。


ログインが完了すると、以下のロゴが表示されます。


Read-Writeモードへの変更


AuFS+fsprotectで実現するRead-Onlyシステムの実装上、このままファイル更新を行うと恐ろしい事に「書き込めないのでは無く、更新も正常に完了するが、変更したと思っている変更内容が再起動後にすべて消える」という状況にでくわす事になります。

AuFS+fsprotectのファイルシステムではこの点、今がROモードなのかRWモードなのかは常に意識する必要があります。

ちなみにROモードなのかどうかは以下の通り、「/」がnoneにマウントされているかで判断が可能です。noneにマウントされた状態がROモードです。

pi@leanmpd:~ $ mount | grep none
none on /fsprotect/tmp type tmpfs (rw,relatime,size=524288k,mode=755)
none on / type aufs (rw,noatime,si=3759aadd)
pi@leanmpd:~ $


Read-Writeモードへ移行する場合は、以下の通り、「remountrw.sh」を実行してください。

pi@leanmpd:~ $ remountrw.sh

しばらくすると再起動するので再度接続を行います。念のためRWモードで起動していることを以下の結果が0件である事で確認します。

pi@leanmpd:~ $ mount |grep none
pi@leanmpd:~ $

これで改変が可能な状態になりました。

Bluetoothネットワークの確立のための準備①


次に、自身の所有しているBluetoothテザリング可能な機器において、Bluetoothテザリングを有効化します。

有効化した後に、「sudo bluetoothctl」と実行する事で、Bluetooth操作モードに切り替わるので、以下の通り、順番にコマンドを実行します。

しばらく待っていると端末名(この場合はNexus5)と共に、XX:XX:XX:XX:XX:XXといった形式でMACアドレスが表示されます。

pi@leanmpd:~ $ sudo bluetoothctl
[NEW] Controller YY:YY:YY:YY:YY:YY leanmpd [default]
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# scan on
Discovery started
[CHG] Controller YY:YY:YY:YY:YY:YY Discovering: yes
[NEW] Device XX:XX:XX:XX:XX:XX Nexus 5

[bluetooth]#



この状態で、端末のMACアドレスが分かったので、これをペアリング設定します。以下の通り実行します。なお、アドレスは自身の端末に変更します。

[bluetooth]# pair XX:XX:XX:XX:XX:XX


上記を実行後、端末側で「leanmpdをペア設定しますか?」といった風に聞かれるので設定ボタンを押すとペアが確立されます。


その後、以下の通り実行して、信頼する端末に追加しておきます。

[bluetooth]# trust XX:XX:XX:XX:XX:XX



最後は「exit」を実行する事で、Bluetooth操作モードから抜けます。

Bluetoothネットワークの確立のための準備②


次に、先ほど、端末のMACアドレスが「XX:XX:XX:XX:XX:XX」だとわかったので、端末の起動時とボタンの操作時にbt-panのスクリプトが実行され、端末への接続が行われるように修正します。

まずは/etc/rc.localから。以下の行を追加して、起動時に自動実行されるようにします。

pi@leanmpd:~ $ sudo vi /etc/rc.local

/usr/bin/bt-pan client XX:XX:XX:XX:XX:XX  ←この行を途中に追加



次に、/home/pi/scripts/mpd_ctrl_zero.pyを改変し、PREVの長押し時に無線のオフと共にbt-panが実行されるように修正します。

既に以下のような記述があるので、コメントアウトを外して、「XX:XX:XX:XX:XX:XX」部分を先ほど調べた自身の端末のMACアドレスに設定します。

pi@leanmpd:~ $ vi /home/pi/scripts/mpd_ctrl_zero.py

(修正前)

#            retval = commands.getoutput('/usr/bin/bt-pan client XX:XX:XX:XX:XX:XX')
#            print '##bt-pan client your device'


(修正後)

            retval = commands.getoutput('/usr/bin/bt-pan client XX:XX:XX:XX:XX:XX')
            print '##bt-pan client your device'



Ver.0.0.8から設定ファイルにMACアドレスを追記して、機能をONにしておけば動作するようになりました。

pi@leanmpd:~ $ sudo vi /boot/leanmpd.conf

enable_bt=no → "yes"に変更
bt_mac=XX:XX:XX:XX:XX:XX →自身のスマートフォンのMACアドレスに変更



以上でBluetooth関連の設定は終わりです。これで、起動時に端末側でBluetoothテザリングをONにしておけば自動で接続されるようになります。

固定アドレスの設定(オプション)

※(2018/1/7)Ver.0.08時点ではIPアドレスの扱いがまだプアのため、固定IPアドレス設定は多少怪しいかも。

そのままでもDHCPサーバが動いているので自動でIPは拾いますが、時々IPアドレスがわからなくなるのと、dhcpdを停止する目的も兼ねて固定アドレスの設定を行います。
(Ver.0.0.8 Betaから修正方法が変わりました。以下は192.168.0.xのネットワークの場合の設定方法となります。)

pi@leanmpd:~ $ sudo vi /etc/network/interfaces.d/eth0

(以下を追加)

allow-hotplug eth0
iface eth0 inet static
address 192.168.0.81
netmask 255.255.255.0
gateway 192.168.0.1

(以下はコメントアウトもしくは削除)

#auto eth0
#iface eth0 inet dhcp


pi@leanmpd:~ $ sudo vi /etc/network/interfaces.d/wlan0

(以下を追加)

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.0.82
netmask 255.255.255.0
gateway 192.168.0.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

(以下はコメントアウトもしくは削除)

#allow-hotplug wlan0
#iface wlan0 inet dhcp
#wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp



なお、Debian StretchからIPアドレスの設定方法が変わっていて、いまいち挙動が不明なのですが、例えばeth0はDHCPでBluetoothネットワーク用のbnep0は固定にしようと以下の設定のうち、bnep0だけ設定すると何故かeth0がIPが取れなくなるなど、よくわからない動きをします。

eth0の部分は自宅のネットワーク構成に併せて変更ください。最後の「81」は「パイ」という事ですね(笑)


一度再起動して、固定アドレス化ができているのを確認してから、以下の通り実行して、dhcpdサービスの自動実行を停止します。


pi@leanmpd:~ $ sudo systemctl disable dhcpcd



以上で、ネットワーク周りの設定は終了です。

なお、AndroidのBluetoothテザリングでは「192.168.44.x」のアドレス帯がRaspberry Pi Zero Wに振られているようなので上記の設定としているけど、iPhone等ではどうなのか(接続できるのか)全く検証ができていない&こちらでは検証ができないので各自で試して、適宜変更が必要であれば変更してほしい。

「mnt/sd/music」の拡張およびROモードへの変更


まず、「/boot/cmdline.txt」の起動オプションをROモードに変更するために以下のスクリプトを実行します。(再起動するまではRWモードで動いています)

pi@leanmpd:~ $ switch2ro.sh


その他の必要な作業は以下の「raspi-config」を実行する前に完了させます。ROモードに戻す前に以下を実行しておくとスッキリして気持ちいいかも(笑)

ROモードに戻す前の掃除(オプション)

・ログのクリア
pi@leanmpd:~ $ sudo find /var/log/ -type f -name \* -exec cp -f /dev/null {} \;

・MPDのDBクリア
pi@leanmpd:~ $ sudo systemctl stop mpd
pi@leanmpd:~ $ sudo rm -rf /var/lib/mpd/tag_cache

・操作履歴のクリア
pi@leanmpd:~ $ history -c
pi@leanmpd:~ $ sudo > ~/.bash_history


全ての作業の完了後、「raspi-config」を実行し、「A1 Expand FileSystem」を実行して音楽格納用の領域をSDカード一杯まで拡張します。

pi@leanmpd:~ $ sudo raspi-config


拡張作業自体は通常の操作と同じですので割愛します。


ちゃんと反映されたかを確認するには以下のコマンドを実行します。

pi@leanmpd:~ $ sudo fdisk -l /dev/mmcblk0

(実行前)
Device         Boot   Start     End Sectors  Size Id Type
/dev/mmcblk0p1         8192   93813   85622 41.8M  c W95 FAT32 (LBA)
/dev/mmcblk0p2        94208 3676159 3581952  1.7G 83 Linux
/dev/mmcblk0p3      3676160 3807231  131072   64M 83 Linux

(実行&再起動後)
Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1         8192    93813    85622 41.8M  c W95 FAT32 (LBA)
/dev/mmcblk0p2        94208  3676159  3581952  1.7G 83 Linux
/dev/mmcblk0p3      3676160 15759359 12083200  5.8G 83 Linux



再起動後にちゃんと「ROモード」で動作している事を確認しておきます。

pi@leanmpd:~ $ mount | grep none
none on /fsprotect/tmp type tmpfs (rw,relatime,size=524288k,mode=755)
none on / type aufs (rw,noatime,si=3759aadd)
pi@leanmpd:~ $


以上で作業は終了です。大変お疲れさまでした(笑)

その他もろもろについて


さて、以上で再起動後には、以下の機能を持ったディストリビューションが利用可能な状態となっているだろう。

・「AuFS+fsprotect」でRead-Onlyを実現しているのでいつでも電源断可能。
・Bluetoothネットワークを介したスマホからの操作が可能。
・RTカーネル(Fully Preemptible Kernel)を採用したキビキビとした動作(?)
・Debian StretchベースのRaspbianを採用で自由な改変が可能。

曲追加についても、WinSCP等を使ってSCP経由で常にRWな/mnt/sd/music配下に配置してあげれば特に問題なく動作する事かと思う。

固定アドレスを設定した場合は、スマホのブラウザにて「http://192.168.44.81」にアクセスすればympdの画面が開くので他のディストリビューション同様に操作も可能かと思う。


なお、難点としては「/var/lib/mpd/tag_cache」がRead-Onlyの領域に配置されているため再起動後にはDBが空になってしまう点だけど、これはSDカードの保護のためにわざとそうしているわけで、気になる方はROモードでも書き込み可能な「/mnt/sd/music」配下に配置するよう、自由に設定変更してほしい。

その他、Symphonic-MPD等でも採用されているような高音質化手法はおそらくシングルコアプロセッサのRaspberry Pi Zero Wでも何かと有効だと思われるので色々自由に試すのも良いだろう。

最後にもう一度、ROモードとRWモードのどちらの状態で操作しているかは常に気にしていないと「全ての設定変更が消えるという悲惨な結末」を迎える結果となるので十分ご注意を(笑)


しかし、色々やろうとするとどうしてもコマンドの世界になるんだよなあ。しかも最新の情報だと既にボクも追いついていない事を実感していたり、、、。

ラズパイ・オーディオやるのなら、一度、最新の書籍でLinuxについて勉強してみるのも良いと思うんだよね。ボクも復習をば、、、。



スポンサーリンク
スポンサーリンク