good-arrow’s blog

https://good-arrow.net/

Debian/Ubuntu の Tomcat9 でのファイルアクセス権エラーについて

Debian/Ubuntu の Tomcat9 は systemd によってサンドボックス化されている

下記は、無料のグループウェア「GroupSession」を Ubuntu 20.04 で動かした時のエラー。

java.lang.Exception: Unable to configure AvalonLogSystem : java.io.FileNotFoundException: /var/lib/tomcat9/velocity.log (Read-only file system)

/var/lib/tomcat9/velocity.log に書き込み権限がないと怒られた。
原因は Tomcat9 をサンドボックス内で動作させているためらしい。
アクセス権限まわりを変えても動かないので原因特定に苦労した。

厳密に言うと Debian/Ubuntu の apt で取得した tomcat9 の話ですが、
Ubuntu × apt × tomcat9 の掛け合わせで検索したので特定が難しかった。

さらに言い訳ですが、ローカルVMUbuntu Server 20.04.2 LTS ではエラーが出なくて、
GCPUbuntu 20.04 minimal でエラーが出たので余計に手間が掛かった気がする。

Debian ならたどり着くのがもっと早かった説。



対処方法

debian/README.Debian · master · Debian Java Maintainers / tomcat9 · GitLab
Debian公式の記載がありました。
UbuntuDebian の派生ディストリビューションなので、同じ apt の tomcat9 になる。

ディレクト/etc/systemd/system/tomcat9.service.d/ を作成し、
その中にファイル override.conf を作成します。

mkdir /etc/systemd/system/tomcat9.service.d
touch override.conf
  • [override.conf] の内容を記述する
[Service]
ReadWritePaths=/path/to/the/directory/

GroupSessionではとりあえず

[Service]
ReadWritePaths=/var/lib/tomcat9/

としてみました。
ログ出力だけなら WritePaths=/var/lib/tomcat9/ でよい気もします。

最後にサービスの再起動をします。

systemctl daemon-reload
systemctl restart tomcat9