有馬総一郎のブログ

(彼氏の事情)

2022年01月17日 18:53:37 JST - 5 minute read - Comments - subsonic

Airsonic-Advancedに乗り換えてみる

サブスク全盛の今にあって、自宅サーバーで音楽ストリーミング配信して音楽を聴いてる人も少数派なんだろうが、私の中では音楽サーバーの利用が高まっている。

Airsonic-Advanced

というのも

  1. Spotify、Amazon Music Unlimitedは英語表記、日本語表記による揺れが存在する
  2. Spotify、Amazon Music UnlimitedのUIが使いにくい(アルバムが製作順に並んでないとか)
  3. 今もCD、ダウンロードファイルを購入している、ローカルの音楽資産が潤沢にある
  4. 楽天Unlimitedによって、データ通信量の制限がなくなり、モバイル通信での音楽再生に躊躇いがなくなった

やっぱり、 4 が大きいな。

Subsonic, Airsonic, Airsonic-Advancedの開発状況

数年前までは、永久ライセンスを持っていることもあり本家の Subsonicを使っていたけど、最新リリースが

Subsonic 6.1.6 - Nov 10, 2019

と、すっかり開発する意欲は無さそう。ということで、 SubsonicからJpsonicに乗り換えてみたりしたんだけど、 Jpsonicがスキャンしないファイルがあったりで、1年ぐらい Airsonicを使っている。

Apache Log4jの任意のコード実行の脆弱性(CVE-2021-44228)に関する注意喚起がされたとき、 Airsonicは大丈夫なのか心配したが

Is Airsonic affected by log4j 0day vulnerability : airsonic

We’re lucky, I don’t think any of the recent Airsonic/Airsonic-Advanced releases use log4j for logging, since the default for Spring Boot is Logback.

See https://spring.io/blog/2021/12/10/log4j2-vulnerability-and-spring-boot for more details.

ということで、自分の環境でも確認1したが、問題なかった。

しかし、やはり、またこうした脆弱性問題は起こりうる。開発、メンテナンスは頻繁に行われている方が好ましい。

Airsonic 11.0.0 Release Plan · Issue #1439 · airsonic/airsonic · GitHub。このトピックが引き金なのか良く分からないが、

Airsonic isn’t maintained anymore, you should migrate to airsonic-advanced instead.

Airsonic-Advancedという、より開発スピードの速い、モダンな機能強化されたプロジェクトが出来て、 Airsonicは、これ以上メンテナンスされないことになったようだ。

Airsonic-Advancedには安定版というのがあるが、ずっと Airsonicから枝分かれた時からバージョンアップされていない。更新されつづけているのに、全てをスナップショットとしてる。それが、 Advanced としての開発、リリーススタイルを表している。

どんどん、開発していくから、勝手に取り込んでくれ、と。

Airsonic-Advancedに移行してみる

Airsonic vs. Airsonic-Advanced : airsonic

Airsonic-Advanced snapshot releases are just as stable as Airsonic stable release

といってるから、最新版 Release Edge Release 11.0.0-SNAPSHOT.20220110133315 · airsonic-advanced/airsonic-advanced · GitHubを落としてきて、移行したら自分の環境ではものみごとに動かなかった。


追記 2022-01-26
次の記事に書いたが、Tomcatコンテナを使用せず、スタンドアロンアプリケーションとして起動させれば上手くいく。また、移行の場合は、サービス設定ファイルのSystemCallFilterを削除する必要がある。

追記ここまで


Airsonic-Advanced

手順としては、 war を置き換えただけだ。

2022-01-16 21:40:01.385  INFO --- o.a.p.u.LegacyHsqlMigrationUtil          : HSQLDB database backed up to /var/airsonic/db.backup.20220116214001
2022-01-16 21:40:01.476 ERROR --- o.s.boot.SpringApplication               : Application run failed

java.lang.RuntimeException: Failed to upgrade HSQLDB database
        at org.airsonic.player.util.LegacyHsqlMigrationUtil.upgradeFileHsqlDbIfNeeded(LegacyHsqlMigrationUtil.java:160) ~[classes/:11.0.0-SNAPSHOT]
        at org.airsonic.player.spring.StartupEventListener.onApplicationEvent(StartupEventListener.java:17) ~[classes/:11.0.0-SNAPSHOT]
        ・・・中略・・・
Caused by: java.sql.SQLException: No suitable driver found for jdbc:hsqldb:file:/var/airsonic/db/airsonic;hsqldb.tx=mvcc;sql.enforce_size=false;sql.char_literal=false;sql.nulls_first=false;hsqldb.defrag_limit=50;shutdown=true
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702) ~[java.sql:na]
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:189) ~[java.sql:na]
        at org.airsonic.player.util.LegacyHsqlMigrationUtil.getHsqlDbConnection(LegacyHsqlMigrationUtil.java:45) ~[classes/:11.0.0-SNAPSHOT]
        at org.airsonic.player.util.LegacyHsqlMigrationUtil.performHsqlDbUpgrade(LegacyHsqlMigrationUtil.java:123) ~[classes/:11.0.0-SNAPSHOT]
        at org.airsonic.player.util.LegacyHsqlMigrationUtil.upgradeFileHsqlDbIfNeeded(LegacyHsqlMigrationUtil.java:157) ~[classes/:11.0.0-SNAPSHOT]
        ... 30 common frames omitted

新規に作り直しても駄目だった。

Airsonic-Advanced

javax.servlet.ServletException: javax.el.ELException: Unable to find ExpressionFactory of type: # Licensed to the Apache Software Foundation (ASF) under one or moreとエラーが出て、起動も出来ない。

しょうがないので安定版 Release Stable Release 10.6.0 · airsonic-advanced/airsonic-advanced · GitHubを使っての新規作成。

sudo systemctl stop tomcat8.service
sudo rm -rf /var/airsonic /var/lib/tomcat8/webapps/airsonic
sudo mkdir /var/airsonic
sudo mkdir /var/airsonic/playlists
sudo mkdir /var/airsonic/transcode
sudo ln -s /usr/bin/ffmpeg /var/airsonic/transcode/ffmpeg
sudo ln -s /usr/bin/lame /var/airsonic/transcode/lame
sudo chown -R tomcat8:tomcat8 /var/airsonic
mv airsonic.war /var/lib/tomcat8/webapps/airsonic.war
sudo chown -R tomcat8:tomcat8 /var/lib/tomcat8/webapps/airsonic.war
sudo systemctl start tomcat8.service

上手くいったので、 Airsonicのデータから移行してみた。こちらも成功。何故かハートマークが付いてる Release Edge Release 11.0.0-SNAPSHOT.20210807021031 · airsonic-advanced/airsonic-advanced · GitHubからの移行、新規作成、両方試したがやはり駄目。

なので、安定版の次にリリースされて、メジャーバージョンが 11 となった Release Edge Release 11.0.0-SNAPSHOT.20200424195308 · airsonic-advanced/airsonic-advanced · GitHubで、移行。こちらはめでたく成功した。

正直、 Jpsonic2みたいにスキャンできないファイルとかあるんじゃないかと思ったが、とりあえず、そんなことはなさそうだ。

Airsonic-Advancedは、まずパスワード管理が進化していて、 Airsonicから移行するとlegacyhex, legacyplaintextとなっている。ユーザー画面から普通に追加してパスワード設定すると、 bcryptとなる。

Airsonic-Advanced

一部クライアントアプリでログインできない、再生できない

これだとAndroidのSubsonicクライアントアプリ DSub for Subsonic - Google Play のアプリでログインすることが出来ない。

DSub

[Solved] Unable to log Dsub into Airsonic server · Issue #394 · airsonic-advanced/airsonic-advanced · GitHub

なので、この場合、Encoderを encrypted-AES-GCM にすることで解決する。

Airsonic-Advanced
Airsonic-Advanced

他のクライアントアプリを確認していく。

SubFire Mobile 2でログインできない…と思ったら、Chromeだと駄目で、Firefoxだと出来た。ううううん?つか、2、33があることを知らなかった。


追記 2022-01-26
次の記事に書いたが、http://経由だとログインできない。

追記ここまで


Strawberry Music Playerは、ログインは出来るが、再生しようとすると、どんな形式の音楽ファイルでもInternal data stream error.とのエラーが出る。 Sublime Musicだと問題なし。

Airsonic-Advanced

パスワード管理が進化している他にはトランスコーディングの初期設定が増えている。特にflacはハイレゾ対応となっている。

Airsonic-Advanced

やはり不安定な気がする。色々、懸念は残るが、DSubが使えて、パソコンでもWeb Playerとして使えればとりあえずOK。最新版にアップグレード出来ないか、ログイン・再生失敗したアプリも設定変更で対応できないか、調査していく予定だ。


  1. 実際に脆弱性をつつくツールを試したというわけではなく、 【12/31更新】Log4Jの使用や使用中バージョンの調べ方・確認方法 - IT入門書籍 スッキリシリーズといったjarファイルの確認を行っただけ。 ↩︎

  2. 本当は一番使いたいサーバーなのだけど、スキャン出来ないというのが痛すぎる。 ↩︎

  3. SubFire Suite Home ↩︎