有馬総一郎のブログ

(彼氏の事情)

2022年01月26日 00:13:00 JST - 5 minute read - Comments - subsonic

最新版Airsonic-Advancedに乗り換えてみる(`Licensed to the Apache Software Foundation (ASF) under one or more`解決)

以前Airsonic 10.6.2から最新版1 11.0.0-SNAPSHOT.20220119073733に乗り換えようとしたとき、失敗に終わったことを書いた。

Airsonic-Advanced

あれから、Java 11から172にアップグレードしたり、Tomcat8から9にアップグレードしたけど、駄目だった。

なので、 Tomcatコンテナを使用した環境ではなく、 スタンドアロンアプリケーションで実行することにした。

以下、その手順。

sudo useradd airsonic
sudo mkdir /var/airsonic
sudo chown -R airsonic:airsonic /var/airsonic
sudo wget https://github.com/airsonic-advanced/airsonic-advanced/releases/download/11.0.0-SNAPSHOT.20220119073733/airsonic.war --output-document=/var/airsonic/airsonic.war
sudo wget https://raw.githubusercontent.com/airsonic/airsonic/master/contrib/airsonic.service -O /etc/systemd/system/airsonic.service
sudo systemctl daemon-reload
sudo systemctl restart airsonic.service
sudo systemctl enable airsonic.service
sudo wget https://raw.githubusercontent.com/airsonic/airsonic/master/contrib/airsonic-systemd-env -O /etc/default/airsonic

すると無事、成功した。起動後、ログを見て知ったが、

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.48.jar!/:na]

Advanced3では埋め込みTomcatを使っている。だからTomcatコンテナを使ってwarをデプロイした時、javax.servlet.ServletException: javax.el.ELException: Unable to find ExpressionFactory of type: # Licensed to the Apache Software Foundation (ASF) under one or moreとエラーが出たのかな?。

$ /usr/share/tomcat9/bin/version.sh 
Using CATALINA_BASE:   /usr/share/tomcat9
Using CATALINA_HOME:   /usr/share/tomcat9
Using CATALINA_TMPDIR: /usr/share/tomcat9/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/share/tomcat9/bin/bootstrap.jar:/usr/share/tomcat9/bin/tomcat-juli.jar
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
Server version: Apache Tomcat/9.0.16 (Ubuntu)
Server built:   Sep 11 2019 19:47:51 UTC
Server number:  9.0.16.0
OS Name:        Linux
OS Version:     4.15.0-166-generic
Architecture:   amd64
JVM Version:    17.0.1+12-Ubuntu-118.04
JVM Vendor:     Private Build

なるほど、別途インストールしたバージョンが 9.0.16.0 なのに、ログやAbout画面では 9.0.48 となっている。

知ってしまえば、その通りのエラーメッセージなのだけど。ReadMe.mdとかに書いてくれよぉ…てか、Spring BootってTomcatが埋め込み(内包)されてるんだぁ、ふーん、マジで知らんかった。やべぇ。浦島太郎4だ。

ということで、Javaを使ってのWebアプリケーションはAirsonicだけなので、別途Tomcatをインストール必要はないので、

sudo systemctl disable tomcat8.service
sudo systemctl disable tomcat.service

と起動しなくした5

ということで、新規作成で上手く行ったので、 Airsonic 10.6.2からいきなり最新版1 11.0.0-SNAPSHOT.20220119073733に移行してみる。

だが、これは失敗してしまう。起動して、アクセスしてみると504 Getway Time-out

Airsonic-Advanced
arimasou16@ubuntu:~$ sudo systemctl status airsonic.service
● airsonic.service - Airsonic Media Server
   Loaded: loaded (/etc/systemd/system/airsonic.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Mon 2022-01-24 00:39:31 JST; 1s ago
  Process: 29391 ExecStart=/usr/bin/java $JAVA_OPTS -Dairsonic.home=${AIRSONIC_HOME} -Dserver.servlet.co
 Main PID: 29391 (code=exited, status=0/SUCCESS)

 1月 24 00:39:22 ubuntu systemd[1]: Started Airsonic Media Server.
 1月 24 00:39:30 ubuntu java[29391]:            _                       _
 1月 24 00:39:30 ubuntu java[29391]:      /\   (_)                     (_)
 1月 24 00:39:30 ubuntu java[29391]:     /  \   _ _ __  ___  ___  _ __  _  ___
 1月 24 00:39:30 ubuntu java[29391]:    / /\ \ | | '__|/ __|/ _ \| '_ \| |/ __|
 1月 24 00:39:30 ubuntu java[29391]:   / ____ \| | |   \__ \ (_) | | | | | (__
 1月 24 00:39:30 ubuntu java[29391]:  /_/    \_\_|_|   |___/\___/|_| |_|_|\___|
 1月 24 00:39:30 ubuntu java[29391]:
 1月 24 00:39:30 ubuntu java[29391]:                         11.0.0-SNAPSHOT
 1月 24 00:39:31 ubuntu java[29391]: 2022-01-24 00:39:31.434  INFO --- o.a.p.u.LegacyHsqlMigrationUtil

ステータスみると、止まっている。そりゃ5046にもなるさ。しかし、メモリをJAVA_OPTS=-Xmx2048mと増やしても、何度restartしてもログはLegacyHsqlMigrationUtilで止まるし、/var/airsoni/配下の airsonic.war も展開されない。

Airsonic edge 11.0.0-SNAPSHOT.20210908073208 fails to start when upgrading from 10.6 · Issue #617 · airsonic-advanced/airsonic-advanced · GitHubをみると、

The issue came from using the suggested systemd unit file to start airsonic. The list of system calls allowed does not include fchown (which is call 93 on amd64) and that was causing the signal. I have worked around by removing the restriction on system calls.

とある。初め読んでも意味が分からなかったが、

/etc/systemd/system/airsonic.service

SystemCallFilter=~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap

が原因っぽいので @fchownを追記してみたが駄目。なのでremovingとしてるから

#SystemCallFilter=~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap @fchown

とコメントアウトして

sudo systemctl daemon-reload
sudo systemctl restart airsonic.service

したところ、今度はLegacyHsqlMigrationUtilで止まることなく、最後まで移行処理が実行されて、そのまま起動状態になった。

こうしてめでたく移行作業が完了した。

で、クライアントアプリの動作確認をしたところ、結果は前回とほぼ同じ。

AndroidのSubsonicクライアントアプリ DSub for SubsonicSublime Musicは問題なし。ただし、 Strawberry Music Playerは、ログインは出来るが、再生しようとすると、どんな形式の音楽ファイルでもInternal data stream error.とのエラーが出る。

SubFire Mobile 2は、Chromeだと駄目で、Firefoxだと出来た、と書いたが嘘だった。Chromeの場合、 Secure/PWA https://からでのログインなら問題なしで、Normal http://だとログインできない。拡張機能 SubFire Mini Player for Subsonicも駄目。

これまた勘違いだったら申し訳ないが、 11.0.0-SNAPSHOT.20200424195308だと moraで購入したmp4ファイルの曲の長さが-17だったりしたのが、最新版だと表示されるようになっている気がする。

特にAdvancedにして、良かったということもないが、とりあえず、日々進化しつづけるAdvancedの最新版に追従していくことができそうなので、3ヶ月に一回ぐらいのペースで、更新していきたいと思う。


  1. 既に最新版でなくなっている。 ↩︎

  2. Works with JDK17ということで、 17 でも動く。Java 17 は長期サポート(LTS)版として2026年までの5年のメンテナンスとサポートが提供される。追加料金による+3年して8年間サポートが受けることもできる。-XX:+UseConcMarkSweepGC-XX:MaxPermSizeといったオプションがUnrecognized VM optionとなったので、オプションには注意、変更が必要かも。 ↩︎

  3. AirsonicでもSpring Bootフレームワークを使っているようだけど、Advancedのどこかのバージョンで埋め込みTomcatを強制されるようになったのかな?よく分からん。 ↩︎

  4. そのうちAdvancedでも、Spring Webfluxになって Nettyが使われるようになるのだろうか… ↩︎

  5. 今後も安定してAirsonic-Advancedが動けばAirsonicに戻さず、sudo apt remove --purge tomcat8などして削除する。 ↩︎

  6. 504 Gateway Timeout - HTTP | MDN ↩︎

  7. moraで購入したAAC(mp4)はStrawberry Music PlayerからSubsonic経由よる検索・再生ができないに記載したが、 moraで購入したmp4ファイルはiTunesで購入したAAC形式ファイルと扱いが微妙に異なる。 ↩︎