NO IMAGE

無料の音楽ストリーミング環境を構築する(SuperSonic on CentOS7)

音楽ファイルが多いので今まではiTunesMatchを使ってたんですが、1年間の契約が切れる時期が近づいてきたので、これを期に自宅サーバーで音楽ストリーミングを始めてみました。
デザインや操作面はiPhone純正のMusicアプリの方が断然良いですが、毎年¥3,980もお布施しなくて済みますし、やる価値はあると思います。

さて、サーバーでの音楽ストリーミングというとSubSonicが有名ですが、これ実は有料なのですね。試用期間が過ぎると1年¥1,200からの契約が必要になります。
なので今回は、SubSonicのクローンであるSuperSonicを構築したいと思います。こちらはいくら使っても無料なので。

さくらのVPSでストリーミングミュージックライフを充実させてみる
を参考にしながらインストールします。
というかほぼそのままです。…が、エラーを吐いた部分がありましたので備忘録を兼ねて。

まずはリポジトリを追加します。

[shell] rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
[/shell]

こちらから最新のものを探して追加して下さい。
http://pkgs.repoforge.org/rpmforge-release/

リポジトリが足りなかったので下記も追加

[shell] yum -y install http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
[/shell]

こちらから最新のものを探して追加して下さい。
http://li.nux.ro/download/nux/dextop/el7/x86_64/

次にjavaや必要なライブラリ群をインストールします。

[shell] yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
yum -y install ffmpeg flac faad2 lame vorbis-tools rpmlint
[/shell]

続いてSuperSonicを取得。

[shell] mkdir /usr/local/src/supersonic
cd /usr/local/src/supersonic
yum -y install git #gitがインストールされてない場合のみ
git clone https://github.com/Mach5/supersonic.git
[/shell]

Apache Mavenも取得して、展開します。

[shell] cd /usr/local/src/supersonic
wget http://ftp.jaist.ac.jp/pub/apache/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz
tar zxvf apache-maven-3.3.3-bin.tar.gz
[/shell]

ここから、Supersonicのデプロイをしていきます。

[shell] cd supersonic
export PATH=$PATH:/usr/local/src/supersonic/apache-maven-3.3.3/bin
mvn -P full -pl subsonic-booter -am install
mvn -P full -pl subsonic-main -am install
mvn -P full -pl subsonic-installer-rpm -am install
[/shell]

すると、最後の[ mvn -P full -pl subsonic-installer-rpm -am install ]でエラーが発生。

[shell] [INFO] ————————————————————————
[INFO] Reactor Summary:
[INFO] [INFO] Supersonic ………………………………….. SUCCESS [ 0.779 s] [INFO] Supersonic Installer for RPM ………………….. FAILURE [ 0.696 s] [INFO] ————————————————————————
[INFO] BUILD FAILURE
[INFO] ————————————————————————
[INFO] Total time: 1.673 s
[INFO] Finished at: 2015-07-29T17:09:24+09:00
[INFO] Final Memory: 10M/24M
[INFO] ————————————————————————
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run (rpm) on project supersonic-installer-rpm: An Ant BuildException has occured: Execute failed: java.io.IOException: Cannot run program "rpmbuild" (in directory "/usr/local/src/supersonic/supersonic/subsonic-installer-rpm"): java.io.IOException: error=2, No such file or directory -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR] [ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :supersonic-installer-rpm
[/shell]

Cannot run program “rpmbuild” (in directory “/usr/local/src/supersonic/supersonic/subsonic-installer-rpm”): java.io.IOException: error=2, No such file or directory -> [Help 1]

とかなんとか言ってるので確認してみると、rpm-buildが無いのが原因だった模様。

[shell] yum -y install rpm-build
[/shell]

してから再度実行すると、問題なく処理が通りました。
 
最後にインストールと自動起動の設定をして、終了です。
[shell] cd subsonic-installer-rpm/target
rpm -ivh supersonic-4.7.beta1.rpm
/sbin/chkconfig supersonic on
[/shell]

 

 

このままローカル環境で http://localhost:4040/ へアクセスするとSuperSonicが見れますが、WANから接続できるようにVirtualHostでリバースプロキシをかけます。
HTTPアクセスさせたくないので、SSL(HTTPS)を使います。
[shell] # supersonic.yourdomain.com
ServerName supersonic.yourdomain.com
Redirect permanent / https://supersonic.yourdomain.com
ProxyRequests on

Order deny,allow
Allow from All
ServerName supersonic.yourdomain.com

SSLEngine on
SSLCertificateFile /etc/CA/your.crt
SSLCertificateKeyFile /etc/CA/your.key

SSLProxyEngine on
ProxyPass / http://localhost:4040/ retry=0 timeout=5
ProxyPassReverse / http://localhost:4040/

ErrorLog /var/log/sslvirtual_error_log_supersonic
CustomLog /var/log/sslvirtual_access_log_supersonic combined env=!no_log
[/shell]  

ところが、外部から接続出来ず。
ここでVirtualHostの設定やら何やら色々ひっくり返しながら2日間くらい格闘しましたが、たった1行で解決出来ました。
[shell] setsebool -P httpd_can_network_connect 1
[/shell]

SELinuxについてはもっと勉強しないといけないですね。