以前、 Airsonic 10.6.2から最新版1 11.0.0-SNAPSHOT.20220119073733に乗り換えようとしたとき、失敗に終わったことを書いた。
あれから、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
。
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 も展開されない。
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 Subsonic、
Sublime 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ファイルの曲の長さが-1
7だったりしたのが、最新版だと表示されるようになっている気がする。
特にAdvancedにして、良かったということもないが、とりあえず、日々進化しつづけるAdvancedの最新版に追従していくことができそうなので、3ヶ月に一回ぐらいのペースで、更新していきたいと思う。
-
Works with JDK17
ということで、 17 でも動く。Java 17 は長期サポート(LTS)版として2026年までの5年のメンテナンスとサポートが提供される。追加料金による+3年して8年間サポートが受けることもできる。-XX:+UseConcMarkSweepGC
、-XX:MaxPermSize
といったオプションがUnrecognized VM option
となったので、オプションには注意、変更が必要かも。 ↩︎ -
AirsonicでもSpring Bootフレームワークを使っているようだけど、Advancedのどこかのバージョンで埋め込みTomcatを強制されるようになったのかな?よく分からん。 ↩︎
-
今後も安定してAirsonic-Advancedが動けばAirsonicに戻さず、
sudo apt remove --purge tomcat8
などして削除する。 ↩︎ -
moraで購入したAAC(mp4)はStrawberry Music PlayerからSubsonic経由よる検索・再生ができないに記載したが、 moraで購入したmp4ファイルはiTunesで購入したAAC形式ファイルと扱いが微妙に異なる。 ↩︎