Mono Works

チラシのすきま

Raspberry PiとVolumioで作る音楽サーバ(その1)

まあ、あれです。できるだけお金をかけずに自宅オーディオ環境を作ろうとRaspberry Pi使って構築してみたよ。でも実際やってみたら想像してたよりは金かかりそうだけど、本気な人たちのお金のかけ方が途方もないので、それでも格安感に包まれるという麻痺っぷり。(十分にコスパは良いし、構築過程が楽しめれば実質無料)

最終的な構成はこんな感じを目指している。

USBメモリ or USB SSD
    |
Raspberry Pi - I2S DAC - ステレオパワーアンプ - スピーカー
    |
HOME NW ┬ Windows PC
    |   └ 無線AP - Android/iOS
ルーター
    |
Spotifyなど(2019/6/10に導入)
)

Raspberry PiのMPD(Music Player Daemon)パッケージには、Raspbianをベースにして音楽再生機能に特化させたVolumioをチョイス。Volumioは、オープンソースで開発がおこなわれており、無料で使うことができる。最新版では、そのイメージをフラッシュしたmicroSDカードでRaspberry Piを起動するだけで、Raspberry Piとつながった様々な音楽リソースをまとめて再生できるようになる。他にも有名なMPDパッケージとしてmoOde audioなどがある。両方を使った人によると出力される音に違いがあるそうなので、そのうちmoOde audioも試してみるかもしれない。

更新履歴

2019/03/07:設定変更時のconfig.txtのに関する記述を変更

最初に用意したもの

  • Raspberry Pi 3 model B+
  • ACアダプタ 5V 3A
  • microSD TOSHIBA 8GB Class4

microSDについては、Helpに、最低4GB、推奨8GBと書かれていたので、手持ちの中から8GBをチョイス。Class4(読み書き時の速度が最低4MB/sec)というところに不安を感じるが、Raspberry PiのmicroSDカードリーダーが20MB/sec程度で頭打ちらしいので、たぶん問題ないと思う。

ちなみに、2GBのmicroSDカードで書き込みしてみたら「512byteで5734400セクタ必要だけど3970048セクタしかないよ。それでも書き込むか?」と警告出たので、たぶん3GBあればいける。

Volumioのセットアップ

ダウンロードサイトに書かれている手順に従ってセットアップ。以下、Windwos PCでの作業記録。

  1. ダウンロードサイトからRaspberry Pi用のイメージをPCにダウンロードして解凍(リリース版の更新履歴はフォーラム内のこちらを参照)

  2. Win32DiskImagerをPCにダウンロードしてインストール

  3. Volumioのイメージを書き込むmicroSDカードをPCにセット(間違えてフォーマットしてしまわないように、その他の接続機器は外しておいた方がいい)

  4. Win32DiskImagerを起動して、Image FileにVolumioのイメージを選択、DeviceにmicroSDカードのドライブを指定して、Writeをクリックすると、約4分で書き込み完了

  5. VolumioをフラッシュしたmicroSDカードをRaspberry Piにセット

  6. Raspberry PiのEternetポートにLANケーブルを接続し、micro USBポートに電源ケーブルを接続

  7. 電源を入れてから、Volumioが完全に起動するまで2分ほど待つ

    ※ Raspberry Piとは別に電源をとっている機器(USB HDDやDACなど)を接続している場合は、Raspberry Piの電源を入れる前に、他の機器の電源を入れておくこと。また、バスパワーのUSB HDDを使う場合、Yottchanさんのサイト に書かれているように注意が必要だ。

    参考サイト:ラズパイのUSBポートの出力電流 | Ys Homepage

Volumio初回起動時の設定ウィザード

Volumioが起動するのを待って、同じネットワークに接続したWindows PCやAndroid、iOSのブラウザから作業をおこなう。

  1. ブラウザからhttp://volumio.localにアクセス(Androidは、IPアドレスじゃないとアクセスできなかった)すると初回設定ウィザードが始まる

  2. 言語選択画面で好みの言語を選択してNext

  3. デバイス名(デフォルトはVolumio)を入力してNext(ここで名称をHogeHogeとした場合、次回起動後からhttp://hogehoge.localにアクセス)

  4. まだDACは接続していないので、そのままNext(DACを接続していても、ここで設定せずに後からでも設定可能)

  5. Raspberry Piの無線(Wi-Fi)は利用せず有線のみ使うので、そのままNext(スマホから操作する場合は別に設置したAP経由でアクセス)

  6. ネットワークドライブは利用しないので、そのままNext

  7. このプロジェクトに賛同するなら、ぜひDonateを押して寄付してほしい(PayPalの画面に遷移)

    PayPalの日本アカウントで寄付しようとしたら、「PayPalでは、現在JPの買い手からの寄付支払いはサポートされません。」と表示されたので、PayPal上でカード払いを選択して、支払いをおこなった。

  8. 最後にDoneで基本セットアップ完了

ネットワークの基本設定

  1. Volumioの画面右上の歯車アイコンをクリックして、メニューを表示
  2. ネットワークの設定を開き、Raspberry Piのネットワークは有線のみを使用するため、以下の変更をおこなった
  • 有線ネットワークのIPアドレスを固定(別途、ルータに静的アドレスの割り当てをおこなう)
  • 無線ネットワークをオフに
  • ホットスポットの設定をオフに

上記設定をおこなうとリセットがかかったような状態になったが、しばらく待っても再接続できなくなったので、Raspberry Piの電源を抜き挿しして、しばらくしたら再接続できた。

Volumioの有線ネットワークのIPアドレスを固定した後は、Gemini PDAで作業をおこなった。

パスワードの変更

パスワードの変更など、Web画面から設定できない項目は、VolumioにSSHでログインして設定を変更する。

  1. ブラウザからhttp://volumio.local/devにアクセス(Androidの場合はVolumioのIPアドレス/dev
  2. SSHEnableをクリック(何の反応もないけど大丈夫)
  3. SSHでログイン

写真の端末は Gemini PDA

Volumioの初期設定

  • ホスト名:VolumioのIPアドレス
  • ログインID:volumio
  • パスワード:volumio
  • ポート:22
  • rootのパスワード:volumio

VolumioにSSHでログイン後、パスワードを変更する。

volumio@volumio:~$ sudo passwd volumio
[sudo] password for volumio: # ←現在のパスワードを入力
Enter new UNIX password:    # ←新しいパスワードを入力
Retype new UNIX password:   # ←新しいパスワードを入力
passwd: password updated successfully

SSHのログインを公開鍵認証方式に変更

大まかな作業の流れは、こちらに書いているとおり。

まず、Gemini PDAで作成した公開鍵をVolumioに送信。

scp [送信する公開鍵ファイル] [ユーザーID]@[VolumioのIPアドレス]:
# 具体的にはこんな感じに
scp ~/.ssh/id_ecdsa.pub volumio@192.168.xxx.xxx:[コピー先のファイル名(省略可)]

VolumioにSSHログインして、以下の作業をおこなう。

# .sshディレクトリの作成
volumio@volumio:~$ mkdir .ssh
# 公開鍵の中身をauthorized_keysに書き出し
volumio@volumio:~$ cat id_ecdsa.pub >> .ssh/authorized_keys
# パーミッションの変更
volumio@volumio:~$ chmod 600 .ssh/authorized_keys
volumio@volumio:~$ chmod 700 .ssh
# 公開鍵を削除
volumio@volumio:~$ rm id_ecdsa.pub
# sshサーバの設定ファイルを変更
volumio@volumio:~$ sudo nano /etc/ssh/sshd_config

sshサーバの設定ファイルの変更箇所。ポート番号とパスワード認証を無効にする設定をおこなった。

# Port 22
Port xxxx   # ←ポート番号の変更
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
PasswordAuthentication no   # ←パスワード認証を無効にする設定を追加

configの変更後、Ctrl+O -> Enterで保存、Ctrl+Xで編集終了。sshの再起動をおこなう。

# sshサーバの再起動
volumio@volumio:~$ sudo /etc/init.d/ssh restart

これで、パスワード認証によるSSH接続ができなくなり、公開鍵によるSSH接続だけが有効になった。

参考サイト:SSHを利用してrsyncでファイル同期 - Mono Works

SSH接続先サーバの情報(known_hosts)の設定をリセット

Volumioを再構築するなど、いったん設定した公開鍵が無効になった場合、エラーが出て接続ができなくなる。その場合、クライアント側の接続先サーバの情報(known_hosts)をリセットすることで接続できるようになる。そのコマンドは、以下のとおり。

ssh-keygen -f "~/.ssh/known_hosts" -R [ホスト名 or IPアドレス]:ポート番号

タイムゾーンをJSTに変更

volumio@volumio:~$ sudo dpkg-reconfigure tzdata
  # Asiaを選択
  # Tokyoを選択
volumio@volumio:~$ date  # ←時間を確認

LEDの消灯、HDMI/Wi-Fi/Bluetoothの停止

volumio@volumio:~$ sudo nano /boot/config.txt

以下、config.txtに追加。

# アクセスLEDが点灯するアクションを無しにする
dtparam=act_led_trigger=none
# 電源LEDが点灯するアクションを無しにする
dtparam=pwr_led_trigger=none
# Wi-Fi/Bluetoothの停止
dtoverlay=pi3-disable-wifi
dtoverlay=pi3-disable-bt

なお、config.txtに書き込んだ設定は、VolumioのWeb上から設定を変更した場合、ファイル全体が上書きされる。後で、I2S DACなど追加してプレイバックオプションを変更したりすると、その後、上記設定を追加し直す必要がある。

<追記:2019/03/07>ver.2.555(2019/2/18)のVolumioだと、VolumioのWeb上から設定を変更して、config.txtに設定が追加されましたが、あらかじめ追加していた設定が消えることはなかった。

続いて、起動時に毎回設定が必要な項目をrc.localに書き込む。

volumio@volumio:~$ sudo nano /etc/rc.local

以下、rc.localのexit 0の上に追加。

# 電源LEDの明るさを0に設定
echo 0 | sudo tee /sys/class/leds/led1/brightness
# HDMIの停止
sudo /opt/vc/bin/tvservice -o

参考サイト:Volumio2(version: 2.348)設定まとめ

今後の予定

今回は、Volumioを運用する上で基本となる設定をおこなった。今後は、以下の内容をこなしていく予定。

  • USBメモリまたはSSDをRaspberry Piに接続して、そこにWindows PCでリッピングした楽曲をプールする。
  • I2S DACをRaspberry Piに追加して、設定をおこなう。
  • ステレオパワーアンプとスピーカーを接続する。
  • スマートフォンのリモコンアプリの設定

コメント

コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)
執筆者
"ぽぽろんち" @pporoch
pporoch120
Mono Worksの中の人。好きなことをつらつらと書き留めてます。
ギターを始めてから 練習動画をYouTubeにアップしてます。ご笑納ください。
"DQX@ぬここ(UD487-754)、コツメ(NO078-818)"
採用案内