Raspberry Piとvolumioで音楽サーバーを構築する

2021/5/5 ファイアウォールの設定を追加しました。

# 目次


- [Raspberry Pi4とvolumioで音楽サーバーを構築する](#raspberry-pi4とvolumioで音楽サーバーを構築する)
	- [目次](#目次)
	- [こんな人向け](#こんな人向け)
	- [今回の目的(やること)](#今回の目的やること)
	- [Raspberry Piの購入～組み立てまで](#raspberry-piの購入組み立てまで)
		- [購入](#購入)
		- [volumio構築](#volumio構築)
		- [volumio初期設定](#volumio初期設定)
	- [volumioの設定を変更する](#volumioの設定を変更する)
		- [volumioのIPアドレス固定](#volumioのipアドレス固定)
		- [SSH通信によるteratermでの接続を可能にする](#ssh通信によるteratermでの接続を可能にする)
		- [テキストエディタの導入](#テキストエディタの導入)
		- [volumioのPW変更](#volumioのpw変更)
		- [smb.confの設定（sambaにパスワードをかける)](#smbconfの設定sambaにパスワードをかける)
		- [ファイアウォールの起動](#ファイアウォールの起動)
	- [ファイル再生できることを確認](#ファイル再生できることを確認)
	- [今後について](#今後について)

# こんな人向け

* ラズベリーパイでなにかしたいけど何から始めればいいかわからない
* LAN上にファイルサーバーおいてみたい
* 勉強がてらなにか作ってみたい

# 今回の目的(やること)

* volumioと外付けHDDで音楽サーバーを構築する
* 構築した音楽サーバーに外部ネットワークからアクセスし、ファイル管理や音楽再生を行う。

# Raspberry Piの購入～構築

まずRaspberry PiとHDDを用意します。

Rasberry Piは、volumioの場合は以下のものがあれば十分です。

1. 必須
    1. Rasberry Pi本体
    2. micro SD(64GB)
    3. 電源ケーブル
    4. スピーカー
    5. HDDとつなぐUSBケーブル
    6. LANケーブル
    7. SDカードリーダー

2. あるとより良い
  8. ヒートシンク
  9. ハイレゾ機材
  10. ケース


判断に困ったらAmazonで各種セットが揃ってるものを買ってもいいです。
必須のもののうち、5~7以外とハイレゾ機材以外は揃います。

## volumio構築

初めに、SDカードのフォーマットをします。
SD card Formatter(<https://www.sdcard.org/ja/downloads-2/formatter-2/>)を使いましょう。

その後は、<https://volumio.org/get-started/>からvolumioのimgファイルを落とし、
balenaEtcher等でSDカードに書き込みを行います。


## volumio初期設定

ラズパイにLANケーブルを指し、電源をつけましょう。

その後volumio.localへとアクセスすると、下記のような初期設定画面が表示されます。
(画像はstep2です)

![v1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728667/0391c472-7d6d-ab45-aa7e-91c4ed42e0ac.png)

step1
言語設定

step2
volumioにアクセスする際のURLを設定します。
今回は初期設定のまま変えません。

step3

ラズパイのデジタル音声信号をアナログへと変換する際の設定です。
DACがある場合はそれらを選択。
機材がないならそのまま進みましょう。

step4

このままNextで次に進みます。

翻訳した文章は以下です。


```txt
ユーザーエクスペリエンスを調整しましょう

簡素化されたオプションセットのみを備えた
使いやすいシステムを好むのか、
それともすべての高度な機能を完全に制御したいのか

この設定は、後でシステム設定で変更できます

オプションのフルセットが欲しい
```

step5
ネットワークへの接続です。
無線LANを使っている場合、自分の使っているものを使用してください。

step6
自前のファイルサーバー等がある場合、ここから選択できます。

step7
volumioが気に入ったら寄付しましょう。

# volumioの設定を変更する

上記で最低限の設定は終了しました。

しかし、Raspberry Piはデフォルトの状態ではセキュリティが強固とは言えず、万が一侵入を許した場合データを盗み見られたり攻撃に使われる可能性もあります。
そのため、ファイルサーバーとしてのvolumioの設定をするのと並行で、
セキュリティ強化も行っていきます。

## volumioのIPアドレス固定

サーバーとして扱うため、IPアドレスは固定している方が望ましいです。
再生するだけならvolumio.localへとアクセスすれば良いですが、ネットワークからvolumioに音楽を入れるときにいちいちIPアドレスを調べてsambaにアクセスするのは面倒です。

volumio.localへとアクセスし、設定のネットワークから、自動IPをOFFにします。
固定IPアドレスに192.168.XX.YY
ゲートウェイに、ルータで使用しているIPアドレスを入れます。
XXにはルータで使用しているのと同じ数字を入れてください。
コマンドプロンプトからipconfigで出力されるデフォルトゲートウェイのところと同じです。
YYには2~254のうち、他のネットワークで使用されていない任意の数字を入れてください。

## SSH通信によるteratermでの接続を可能にする

このあと行う各種設定のために、まずはteratermからログインできるようにする必要があります。
ただし初期設定ではteratermによるSSHログインはできません。
<http://volumio.local/dev>
にアクセスして、sshをENABLEにしましょう。
teratermから入るときは、
ホスト：固定したIPアドレス
ユーザ名：volumio
パスフレーズ：volumio(あとで変更します。)


## テキストエディタの導入

次に、設定ファイルを編集するためのエディタを入れます。
apt-get update
apt-get install vim(vimのかわりにnanoでも可)


## volumioのPW変更

下記コマンドを実行して、デフォルトのパスワード(volumio)から新しいパスワードへと変更します。

```shell
sudo passwd volumio
```

## smb.confの設定（sambaにパスワードをかける)

teratermで以下のファイルを開きます・
sudo vi /etc/samba/smb.conf
各セクション([]で囲まれているやつ)のguest okをnoへと変更。
以下に例を示します。

```shell
[USB]
        comment = Volumio Internal Music Folder
        path = /mnt/USB
        read only = no
        guest ok = no #デフォだとyesのため、noへと変更する
```

その後、下記コマンドを実行して任意のユーザーにsambaにアクセスする権限

```shell
pdbedit -a USERNAME #入力後、sambaに入るためのパスワードを入力。
```

## ファイアウォールの起動
このままではWi-Fiに接続している人なら誰でもvolumio.localにアクセスできてしまいます。
特定のIPアドレスからの接続のみ許可しましょう。

```shell
sudo ufw status # 現在のファイアウォールの確認 inactiveと出力されるはず
sudo ufw enable # Filewallの起動
sudo ufw allow from 192.168.xx.xx # 接続を許可したいIPアドレス
```

ファイアウォールの初期設定では許可していないものは弾きます。


# ファイル再生できることを確認

volumio.localにアクセスし、ラズパイ（もしくはラズパイに接続したHDD)の音楽ファイルが再生できれば設定はひとまず終了です。

# ファンがうるさい
ファンがうるさかったので以下を実行しました。
1. CPU温度制限の追加
どうやらラズパイには特定の温度を超えるとCPU周波数を低減してくれる機能があるみたいです。
その基準温度は
```
vcgencmd get_config temp_limit
```
で取得可能。
ちなみに初期値はvolumio3だと0でした。
とりあえず以下のファイルに追記して65度に設定。
```/boot/config.txt
temp_limit=65
```

2.消費電力の低減
HDMIポートへの電源供給オフ
```
sudo /opt/vc/bin/tvservice -o
```

# 今後について

セキュリティはまだ完全ではありません。
今後設定するとすれば以下のものが考えられます。
用途に合わせてセキュリティを強固にしましょう。

* 公開鍵認証の設定
* ポート番号の変更