Raspiでネットワークオーディオプレーヤー
- 公開日: 2021/01/19(火) 22:52[JST]
- 更新日: 2022/08/27(土) 15:10[JST]
昨年実家の方でアナログレコードを処分したいとのことで、自分で買ったものも含め何枚か持って帰った。ただ家にはレコードプレーヤーは無かったので新たに購入することになった。
オールイン型のレコードプレーヤーを第一候補にしていたのだが、ネットでの評判や置き場所の制限などもあって、プレーヤー、プリメインアンプ、スピーカーを個別に購入して組むことに。オーディオコンポのセットアップって実家にいた時以来の数10年ぶりのことだったので「スピーカーとプレーヤーの間にアンプが必要なんだった」「スピーカーってより線がむき出しでアンプに圧接するんだった」とかすっかり忘れていた。
で、せっかく組んだのにレコード専門というのもなんかもったいないのでラジオやデジタル音源にも対応できるようにしたいと思った次第。検索してみると、Raspberry PiとVolumio 2[1]の組み合わせがよさそう。(「ITmedia NEWS ラズパイでハイレゾオーディオや「Spotify」を楽しむ」「NaoSoft別館blog『Volumio2のプラグインでradikoを聴く。』)
ということで、ITmediaの記事にあったコイズミ無線からキット一式(HifiBerry DAC+Lightセット)を購入。
1. セットアップ
まずは付属のマニュアル通りに組み立てし、念の為キーボードとモニタをつないで起動してみる。
が、起動した気配がない。確認してみると付属のマイクロSDカードに、入っているはずのOSが入っていなかった。ということでVolumio公式サイトからイメージをダウンロードしてSDメモリに書き出して再挑戦。今度はちゃんとモニタにログイン画面が表示された。
デフォルトではRasPiがWiFiアクセスポイントとなる(ホットスポット)ため、ノートPCからVolumioをアクセスポイントに指定して http://volumio.local/ に接続すると初期設定ができる(有線LANにつないでいる場合はDHCPでIPアドレスが割り当てられるのでモニタで ifconfig してIPアドレスを確認してそのIPアドレスでブラウザからアクセスしてもOK)。ちなみにHifiBerry DAC+Lightの場合は、"Select your i2s DAC"のところで"HifiBerry DAC"を指定する("Hifiberry DAC Plus"ではないことに注意)。
有線LANもつないでいるとDNLAサーバにアクセスできるので、とりあえず適当な音楽を流して動作チェックする。
Volumio2のSDカードはボリュームを3つ作り、3番目のボリュームをoverlayファイルシステム経由でルートディレクトリとしてマウントする仕様になっているようだが、どういうわけかRAMディスクがルートディレクトリのままとなっており容量が260MBほどしかないことがある。 df -h コマンドでルートディレクトリの確認してから次のステップに進んだ方がよさそう。
2. パッケージの設定
デフォルトの状態ではviが入っていないとか不便なのでまずapt環境を整える。Configure APT Proxy on Debian 10 Busterを参考に、 /etc/apt/apt.conf.d/02proxy をnanoで編集して以下の2行を書き込む。
Acquire::http::Proxy "http://プロキシサーバのIPアドレス:プロキシサーバのポート"; Acquire::https::Proxy "https://プロキシサーバのIPアドレス:プロキシサーバのポート";
プロキシの設定をした後、パッケージリストの更新を行い、次いでvimのインストール。
$ sudo apt-get update $ sudo apt-get install vim-nox
3. SSHの設定
まずは http://volumio.local/dev/ にアクセスしてSSHを有効にする。そしてSSHログイン。パスワードを変更したくなるが、変更するとプラグインをインストールできなくなるようなのでそのままにしておく。
、 ~/.ssh ディレクトリを作成。でもってLinuxマシンなりMacなりから scp で公開鍵を ~/.ssh/authorized_keys にコピーする。これで公開鍵でログインできるようになった。
そして /etc/ssh/sshd_config に PasswordAuthentication no を追加して sudo /etc/init.d ssh restart を実行して公開鍵ログインのみに限定する。
(2022/8/27追記)
気づいたらVolumioにSSHで繋げなくなっていた。-Tvオプションをつけて出力を見ると、 debug1: send_pubkey_test: no mutual signature algorithm というメッセージが出ていた。ぐぐってみると、現行のUbuntu22.04LTSで採用されているOpenSSHクライアントはVolumioで採用しているOpenSSHサーバの方式にデフォルトで対応しないようになったためのようだ。
対応策は、 -o PubkeyAcceptedKeyTypes=+ssh-rsa オプションを入れてsshコマンドを実行する。
参考: ezlo community: [SOLVED] Passwordless (key based) ssh authentication <https://community.ezlo.com/t/solved-passwordless-key-based-ssh-authentication/218892>
(追記おわり)
4. ネットワークの設定
Note
(2021/6/19追記)無線LANが1〜2時間おきに切れるという状態が頻発したので有線LANで運用することにした。FreeBSDにLogitech Media ServerをインストールしてRaspiからSqueezeliteでアクセス(参考: Qiitaの@barippi氏による「LinuxサーバーとRaspberry Pi 3B+を使ってSqueezeBoxを作った話」)や、HifiBerryOS、Max2Playなども試してみたが、FreeBSD12ではLogitech Media Serverがうまく動かなかったり、無線LANがうまく設定できなかったりしたため、結局有線LAN+Volumioに落ち着いた(無線LANが切れること以外についてはVolumio2は申し分ないため)。現在VolumioのBuster版が開発中だがまだまともに動くものではなさそうだ。
ちなみに、一度HifiBerryOSをインストールしてVolumio2と同じIPアドレスを設定し、しかる後にVolumio2に戻したところ、Android端末(Volumioアプリ/ブラウザ共)から繋がらなくなった。ブラウザのキャッシュをクリアし、Volumioアプリを再インストールしたところ解消された。
まず、ブラウザから設定画面を開きホットスポットをオフにしておく。
基本的には「Raspberry Pi 3B+でWPA2-EAP認証」と同じ。Raspberry Pi 3B+の時と違い特に問題なくセットアップできた。ただし、ブラウザの画面から設定を変えると wpa_supplicant.conf も書き換わってしまうので注意。
Volumio 2自体はプロキシに対応していないっぽいので、ファイアウォールの例外に設定することにした。この時点で海外のインターネットラジオなどは聞けることを確認した。
(2021/3/28追記)
しばらく使っているといつの間にかVolumioやSSHにアクセスできなくなることがあり、調べたところ無線LANへのIPアドレス割り当てが消えていることが分かった(有線LANをつなぐとアクセスできる)。以下の方法で回避することにした。
(1) 再起動スクリプトの作成
Qiitaの@gzock氏の「Raspberry PiでWi-Fi切断時、自動的に再接続されるようにする方法」を参考にこんな感じのスクリプト( ~/scripts/wlan_reboot.sh )を作成。
#!/bin/sh
ping -c 1 [サーバ等常時動いていてpingに反応する機器のIPアドレス]
RETURN=$?
DATE=`date '+%Y/%m/%d %H:%M UTC'`
test $RETURN -ne 0 && echo 'Reboot at ${DATE}' >> /home/volumio/Reboot_dates
test $RETURN -ne 0 && sudo /sbin/reboot
pingで反応しなければホームディレクトリの Reboot_dates に日時を追記して再起動するというもの。ネットワークのみ再起動する方法もやってみたけどうまく動かないのでシステム全体をリブートする方針で。(2021/4/3追記: 当初は test $RETURN -eq 1
で ping -c 1
が正常に実行されたかを判断していたが、反応が無かった場合の終了ステータスは必ずしも1にならないので test $RETURN -ne 0
に変更)
(2) cronのインストール
R-Y-O の IT 備忘録 Ver.2.0「[Volumio 2] cron のインストール」によれば、Volumio2にはcronが入っていないとのことで、同記事を参考にインストール。
(3) crontabの設定
とりあえず30分おきチェックすればいいかと思い以下の行を /etc/crontab に追加する
10,40 4-23 * * * volumio /home/volumio/scripts/wlan_reboot.sh >/dev/null 2>&1
(追記終わり)
5. Radikoの設定
「チラシのすきま『Volumio(LMS)を通してradikoを聴く』」に記載されているとおりに設定した。何故か福岡の放送しか聞けないのだが、どうやらradiko.jpが地域判定をミスっていることが原因らしい。とりあえず、radikoに修正を依頼してみた。