Humanity

Edit the world by your favorite way

Subsonic に不満があったので OSS 版の Libresonic をインストールしてみた

ずっと Subsonic というストリーミングサーバーを使っていた。 1ドル /月 払えば Android アプリでも接続できるようになる。 概ね満足だったんだけどそれでもいくつか不満があった。

  1. flac ファイル特有の現象なのかは分からないが)flac ファイルを再生すると曲が終わっても次の曲に行ってくれない
    • 曲の時間が明らかに長かったりするので、終わりが正しく取得できてない?
  2. 音楽フォルダのスキャンが一日一回に限られている
    • 曲が追加されたら一定時間後に自動的にスキャンしてほしい
  3. 最近のバージョンのコードはクローズド(version 6.0-beta1 以降)

これらの問題点を解決するためにLibresonic という SubsonicOSS 版を試してみた。

ちなみに 2 に関しては解決しなかったが、スキャンを行う REST API はあるようなので、曲が追加されたら REST API 叩くスクリプトを書けば解決しそう。 *1 (追記 2017/8/27 0:30)勘違いでした。Subsonic にはありますが現在の Libresonic にはありません

Java 8+ のインストール

$ sudo yum install java-1.8.0-openjdk
$ java -version
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-b16)
OpenJDK 64-Bit Server VM (build 25.141-b16, mixed mode)

java-1.8.0-openjdk を入れれば自動的に Java 8 になってるはず。 なってなかったら alternatives コマンドで Java 8 を選ぶようにしてください。 以下は Java 7 と 8 が入ってる環境の図。

$ sudo alternatives --config java

2 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
   1           java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141-2.6.10.1.el7_3.x86_64/jre/bin/java)
*+ 2           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre/bin/java)

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

Standalone バージョンのインストール

WAR を持ってきて java -jar {war} すれば動くやつです。 それを systemd で動かすようにします。

まずユーザの作成。

$ sudo useradd --system libresonic
$ id libresonic
uid=994(libresonic) gid=992(libresonic) groups=992(libresonic)

次に必要なディレクトリを作りつつ WAR をダウンロードしてインストール。

$ sudo mkdir /opt/libresonic
$ curl -LO https://libresonic.org/release/libresonic-v6.2.war
$ sudo install -o root -g root -m 644 libresonic-v6.2.war /opt/libresonic/libresonic.war

$ sudo mkdir /var/libresonic/
$ sudo chown -R libresonic:libresonic /var/libresonic/

次に systemd の設定ファイルを作成。

$ vim /etc/default/libresonic
JAVA_HOME=/usr/lib/jvm/jre

$ vim /etc/systemd/system/libresonic.service
[Unit]
Description=Libresonic
After=network.target

[Service]
Type=simple
EnvironmentFile=-/etc/default/libresonic
ExecStart=/usr/bin/java -jar /opt/libresonic/libresonic.war
User=libresonic
Group=libresonic
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

設定ファイルをロード。

$ sudo systemctl daemon-reload

ffmpeg のインストール

qiita.com

インストールした後、以下の手順を実行

$ sudo mkdir /var/libresonic/transcode
$ cd /var/libresonic/transcode
$ ln -s /usr/bin/ffmpeg
$ ls -alh
lrwxrwxrwx 1 user user   15 mai    4 19:57 ffmpeg -> /usr/bin/ffmpeg

起動

いよいよ起動ですが、結構時間かかります。 HP ProLiant MicroServer (Gen8 ではない) で 74秒 ぐらい。

都度 sudo systemctl status -l libresonic するのもだるいので、 sudo systemctl start libresonic したら journalctl -ef -u libresonic で起動するまでログを眺めておくといいでしょう。

$ sudo systemctl start libresonic
$ journalctl -ef -u libresonic

初回は必要なファイル作成や DB の初期化などでだばーっとログが出ます。 起動したらこんなログが出ます。

2017-08-21 00:43:55.960  INFO --- o.l.player.boot.Application              : Started Application in 72.08 seconds (JVM running for 74.073)

起動後 /var/libresonic がこんな感じになってました。

$ ls -F /var/libresonic/
db/  libresonic.log  libresonic.properties  lucene2/  rollback.sql

Could not verify the provided CSRF token because your session was not found.

公式のインストール手順通りにインストールして java -jar libresonic.war と実行してみたのだが、Web UI でログイン後にこんなページに飛ばされてしまう。

f:id:tyru:20170821011158p:plain

ログファイル(/var/libresonic/libresonic.log)を見ても特にエラーは出ていなかった。

Tomcat のインストールしたら直った?

$ sudo yum install tomcat
$ sudo yum remove tomcat tomcat-lib

とかやってたら正常にログインできるようになってしまった。謎。

========================================================================================================================================================================================
 Package                                                 アーキテクチャー                    バージョン                                      リポジトリー                          容量
========================================================================================================================================================================================
インストール中:
 tomcat                                                  noarch                              7.0.69-12.el7_3                                 updates                               89 k
依存性関連でのインストールをします:
 apache-commons-collections                              noarch                              3.2.1-22.el7_2                                  base                                 509 k
 apache-commons-daemon                                   x86_64                              1.0.13-6.el7                                    base                                  54 k
 apache-commons-dbcp                                     noarch                              1.4-17.el7                                      base                                 167 k
 apache-commons-logging                                  noarch                              1.1.2-7.el7                                     base                                  78 k
 apache-commons-pool                                     noarch                              1.6-9.el7                                       base                                 113 k
 avalon-framework                                        noarch                              4.3-10.el7                                      base                                  88 k
 avalon-logkit                                           noarch                              2.1-14.el7                                      base                                  87 k
 ecj                                                     x86_64                              1:4.2.1-8.el7                                   base                                 1.4 M
 geronimo-jms                                            noarch                              1.1.1-19.el7                                    base                                  31 k
 geronimo-jta                                            noarch                              1.1.1-17.el7                                    base                                  20 k
 javamail                                                noarch                              1.4.6-8.el7                                     base                                 758 k
 log4j                                                   noarch                              1.2.17-15.el7                                   base                                 443 k
 tomcat-el-2.2-api                                       noarch                              7.0.69-12.el7_3                                 updates                               80 k
 tomcat-jsp-2.2-api                                      noarch                              7.0.69-12.el7_3                                 updates                               93 k
 tomcat-lib                                              noarch                              7.0.69-12.el7_3                                 updates                              3.8 M
 tomcat-servlet-3.0-api                                  noarch                              7.0.69-12.el7_3                                 updates                              211 k
 xalan-j2                                                noarch                              2.7.1-23.el7                                    base                                 1.9 M
 xerces-j2                                               noarch                              2.11.0-17.el7_0                                 base                                 1.1 M
 xml-commons-apis                                        noarch                              1.4.01-16.el7                                   base                                 227 k
 xml-commons-resolver                                    noarch                              1.2-15.el7                                      base                                 108 k

このうちのどれかが必要なパッケージだったのか?*2 今となっては謎。雑。

*1:でもどうせなら Libresonic 本体にそういう機能があってほしいのでいつか pull request 送りたい

*2:そもそも入るバージョンは Tomcat 7 だけど公式ドキュメントで説明されてるディレクトリ名が tomcat8 なので 8 のはず…(明確にどのバージョン使えとは書いてない…)