Raspberry PiにMPDサーバを構築するAnsible Playbookを公開した

FAQ タイトルの件のPlaybookはどこ?→ https://github.com/toshia/RPi-tools

自宅で音楽を聴くための良いプレイヤーソフトを決め兼ねていたのですが、最近はMPDで安定しています。ベッドに寝転がった状態でiPhoneAndroidからプレイリストを選んで曲を再生するとか、cronで毎朝目覚まし代わりに音楽再生とか、いろいろやってます。

MPDはせっかくクライアントサーバシステムになってるから、なんとなく別のマシンで常にMPDを動かしておきたいなあと思ったので、余っていたRaspberry Piを一台使ってMPDサーバにしました。 今回はAnsibleのPlaybookを作成して、ゼロから同じ環境をセットアップできるようにしました。 要するに、簡単に誰でも同じ環境を構築できるということです。

この記事でやってること

記事を書いていると、今回の主役である「MPDが動いてる音楽再生用のRaspberry Pi」の名前がないと不便なことに気がついたので、この記事では略して「MPD Pi」と呼ぶことにします。

  • MPD Piをつくる
    • 構築してから何年も経つとどうやったか忘れるので、Ansibleで完全に構築が完了するようにする
  • MPDとかの布教

MPD Pi(MPDサーバの構築)

早速MPD Piを構築しますが、たんなるMPDサーバなので、実は検索すると同じような話はいくらでも出てきます。別にRaspberry Piである必要はないですし、しまいにはVolumioをRaspberry Piに入れるといった上位互換みたいな記事もあります。

ではこの記事の意味は何なのかというと、私が書いたAnsible Playbookの使い方を説明することと、MPDの布教にあります。あとは強いて言うなら、オーディオの話になると凝った環境の話が多いですが、この記事では適当にサウンドを再生するだけなので、私のようにあまりこだわりのない人間には丁度よいです。

とは

MPD

Music Player Daemon の略で、クライアントとサーバに分かれている音楽再生ソフトです。

サーバの方は基本的にMPDが使われているので、この記事でもMPDを使います。

一方クライアントのほうは、MPDプロトコルで通信できればいいだけなので、多くのクライアントソフトが開発されています。ただの音楽プレイヤーのような見た目で、サーバのプレイリストを管理したり、再生する楽曲を選択したりできます。再生した音楽は サーバ側で鳴る ので、「オフィス等の共有スペースのBGMを流したい」とか「ノートPCやスマフォで操作しつつ、自宅の良いスピーカーで音楽を聴きたい」といった用途に使えそうです。 私は単純に、寝ようと思って横になった時に音楽を再生しっぱなしだったことに気づいてまた立ち上がるということがしばしばあって、寝たままスマフォで停止したいという理由で使い始めました。一人暮らしなうえ音質にも拘ってません。

Ansible

構成管理ツールの一種です。似たようなソフトで有名なものにChefなどがあります。

Playbookと呼ばれる、「mpdとsambaをaptで導入してー、音楽ディレクトリの場所かえてー、そこをsambaで公開してー…」といった一連の設定手順を用意しておくと、手元のAnsibleが勝手に指定したホストマシンにsshで入っていい感じにセットアップしてくれるというものです。多数のマシンを同時にセットアップするのに向いていますが、YAMLなのでgitで構築手順を管理できたり、今私がやっているようにgithubに公開すれば他の人がPlaybookを利用して同じ環境を構築できるなど、一台だけセットアップするときにもメリットがあります。

Raspberry Piのイメージをそのまま圧縮して公開している人もいますが、サイズが大きかったり、そもそも何が入っているかわからないので怖いという問題があります。AnsibleのPlaybookであれば、どういったセットアップ手順なのか明確にわかりますし、独自に手順を削ったり追加したりできます。

Raspberry Piの準備

最低限用意すべきは

  • Raspberry Pi(B, 2B, 3Bで確認済)
  • Micro SD
  • Micro USBケーブル
  • スピーカー

です。また、むき出しで設置するのが嫌ならケースとかが現実的には必要ですね。

Raspberry Piは基本的にPimoroniで購入しています。別にどこで買っても条件を満たすハードならなんでも良いです。

今回の用途であれば、ネットワークアクセス可能でイヤホンジャックでサウンドを出力できればなんでも構いません。私は初代Raspberry PiのModel Bが余っていたのでそれを使い、新規購入はしませんでした。

Micro SDの容量ですが、楽曲ファイルを保存するため、一応32GBのものを使いました。そんなに曲はないので16GBでも足りるんですが。

スピーカーから音を出す必要があるので、スピーカーを準備する必要があります。持ってるスピーカーについていたミキサ機能がついに役立つ時が来たかと思ったんですが、知らないうちにPS4に奪われていたので、適当にかっこいいケーブルを買いました。

こういう微生物いますよね。しっぽで泳ぐやつ。

AnsibleのインストールとPlaybookのダウンロード

Ansibleは、手元のマシンにインストールして、Raspberry Piなどのホストマシンにリモート接続してセットアップしてくれるやつなので、とりあえず作業用マシンのほうにAnsibleをインストールします。OSも、MacでもLinuxでも使ったことがあります。インストール方法はOSによって違ってくるので割愛します。

$ ansible-playbook --version
ansible-playbook 2.2.1.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

インストールしたら上記のコマンドで確認。入ってますね。

Playbook実行環境を整える最低限の設定を手動でやる

Raspberry Piについては有益な情報が溢れていて書くメリットがないので、どういう設定をしたかを簡単に書いておくだけにします。

イメージを入れて、Raspbianのインストール完了まで

Raspberry Piが手に入ったら、Ansibleがコントロールできる状態までは手動でセットアップしてやる必要があります。 Micro SDにRaspbian Jessie LITEを入れて、Raspberry Piを起動しましょう。 今回の用途にはDesktopは使わず、Lite(GUIなし)を使いました。結局AnsibleでセットアップするのでXが入っていようがいまいが一緒だと思います。

ホスト名

Playbookのhostsファイルに書くので、いい感じに設定しておきます。

SSHでログインできるようにしよう

標準だとsshdが入っているのに、SSHリモートアクセスができないようになっています。Ansibleを使うにはそのマシンにSSHアクセスできないといけないので、気合で有効にしましょう。

公開鍵を登録する

作業マシンで ssh-keygen コマンドを使って秘密鍵と公開鍵のペアを作成し、パスワードなしで作業マシンからMPD Piにアクセスできるようにしましょう。

Playbookの入手・実行

早速私の作ったPlaybookを作業マシンでダウンロードしましょう。

github.com

Akkiesoft さんが、自分の作ったRaspberry PiのPlaybookを公開しているものをフォークして、MPD Pi等のレシピを混ぜたものです。なので温度計を作るレシピとかが入ってますが、今回使うのは私が作ったmpdというレシピだけです。

gitとかで作業マシンにcloneして、 ansible/ ディレクトリに移動して、 hosts というファイルを作り、以下のような内容にします。

[all]
mpdpi.local ANSIBLE_SSH_USER=pi 

mpdpi.local の部分に、MPD Piのホスト名又はIPアドレスを書きます。Ansibleがsshで繋ぐ時に使います。

そしたらあとは、以下のコマンドでPlaybookを実行。

$ ansible-playbook -i hosts mpd.yml

必要なパッケージが入ってなかったらインストールするなどいろいろやるので、わりと時間がかかるかもしれません。

MPDを使ってみる

成功すると、早速MPD Piとして稼働しているはずなので、イヤホンジャックにスピーカーなどを繋いで、サウンドを再生する準備をしましょう。

音楽ファイルを入れる

再生する音楽が必要です。そしてそれをMPD Piに転送する必要がありますが、Sambaで音楽ディレクトリが「music」という名前で共有されているので、適当にmp3などのファイルを突っ込みます。 \\MPDPI\MUSIC みたいな感じで。このPlaybookで構成すると、デフォルトでは匿名でアクセスして書き込みもできるようになっています。

ディレクトリを再帰的に辿って音楽ファイルを探してくれるので、私はアルバムごとにディレクトリが分かれているMusicフォルダを丸ごと入れました。

自分のメインマシン(Linux)からコントロール

MPDを操作するクライアントは色々ありますが、とりあえず人気の高いクライアントの一つとされているSonataをインストールしてみましょう。

設定で、MPDサーバとしてMPD Piのホスト名またはIPアドレスを入れると、先ほど入れた楽曲がちゃんと見えているはずです。操作方法は割愛しますが、作業用マシンのSonataを操作したらMPD Piにつながってるスピーカーから音が鳴るわけです。

f:id:toshi_a:20170302201233p:plain

以上で構築は終了です。お疲れ様でした。ここからは話を逸していきます。

普通の音楽再生ソフトは、UIが気に入らないだけで乗り換えるということがありますが、MPDの場合はクライアントを変えるだけなので、移行コストは有って無いようなものです。私はSonataを使ってましたが、最近Cantataに乗り換えつつあります。

f:id:toshi_a:20170302202915p:plain

クライアントだけを乗り換えたり、併用したりできるのもMPDを推す理由です。自分でMPDクライアントを作るのも楽しそうです。

Androidクライアント

せっかくなので、スマートフォンから操作してみましょう。

iOSの場合はMPoDというのがついこの間まで使えたのですが、現在はストアでは公開されていないようです。有料のものを使うか、次の節で紹介するWebクライアントを利用しましょう。

Androidの場合は選択肢が多いですが、MPDroidというやつを使っています。再生ボタンなどのコントロールウィジェットとして配置できたり、通知領域に再生情報などを表示してくれるなど、いろんな機能があります。

f:id:toshi_a:20170302204526p:plain

Webクライアント(ympd)

Webインターフェイスを使えば、ブラウザからmpdの操作ができます。これもかなり数があるのですが、ひとまずympdを使ってみました。ympdというplaybookを作っておいたので、mpdを入れたのと同じマシンに簡単にセットアップできます。

$ ansible-playbook -i hosts ympd.yml

http://raspberrypi.local:8080/ みたいな感じでブラウザからアクセスすると、Web上からプレイリストの操作などができます。使う予定がないなら入れる必要はないですが、mpdクライアントがない環境でもコントロールできるようになるのでお薦めです。

f:id:toshi_a:20170302193918p:plain

Vivaldi は、サイドバーにWebページを入れることができます。ympdはレスポンシブデザインなので、サイドバーでも全く問題ないですね。

f:id:toshi_a:20170302194901j:plain

PS Vitaのブラウザです。ゲーム中に操作できるのは便利かも。

Pocket C.H.I.P. のWebブラウザで。画面サイズは如何ともしがたい。

その他のクライアント

mpd.wikia.com

上記ページにまとまっています。コマンドラインインターフェースのmpcや、リッチなCUIのクライアントもあります。Emacsで操作したかったので調べたところ、Emacs 24あたりからバンドルされているようです。自分が普段使っている意外なソフトにMPDクライアントのエクステンションがあるかもしれません。

MPD Piまとめ

MPDを紹介して、MPD Piを作成するPlaybookの使い方を紹介しました。Playbookがやっていることは、MPDの設定とSambaの設定がほとんどです。Sambaが特にそうですが、LAN内ならなんでも書き込めるようになっているなど、状況によってはそのまま使えない環境もあると思います。このPlaybookはカスタマイズしやすいようにできるだけ余計なことはしないようにしているので、外付けHDDに音楽ファイルを置くとか、Sambaを外してNASの音楽ディレクトリをマウントするとか、思いつくだけでもいろいろと応用できそうです。