前回、luantiをraspberry-piで動かすようにした。とくに問題なく快適に動いている。ただ、よく考えるとrootファイルシステムはmicroSDなので、頻繁に書き込みが発生しそうなマイクラクローンのデータを置いておくのは良くないような気がしてきた。
なのでUSB接続のHDDをつけてるので、そこに移動しようとしてみたが、色々引っかかってペンディング中。
systemdのDynamicUser
[Service]
Restart=on-failure
DynamicUser=yes
ExecStart=/usr/libexec/luanti/luantiserver --config /etc/luanti/default.conf --logfile /var/log/luanti/default/server.log --gameid $LUANTI_GAMEID
Environment=MINETEST_USER_PATH=/var/lib/luanti/default
Environment=MINETEST_MOD_PATH=/usr/share/games/minetest/mods
Environment=LUANTI_GAMEID=minetest_game
EnvironmentFile=-/etc/luanti/default.env
StateDirectory=luanti/default
LogsDirectory=luanti/default
systemdのluantiのサービスは上記のようになっている。MINETEST_USER_PATHを/etc/luanti/default.envで変えればそれだけで変更できそうだと思ったが動かなかった。
何度やってもworldデータに書き込めない(Read Only Filesystem)みたいなエラーが出て起動できない。systemdから動かすとNGでrootで動かすとOK。 cp -aでコピーしたから権限は問題ないはず。。。と思ったのが間違い。
psをよく見ると存在しないluanti-serverみたいなユーザで動いていて、データファイルはnobodyユーザの持ち物になっている。どうやら上記DynamicUser=yesとなっている場合に、/var/lib/private以下のStateDirectoryで指定したパスを動的に作られたユーザ権限?で使う仕組みになっているようだった。
そういう状態なのに別の場所に置いているパスを指定してもそこはDynamicUserでは書き込み権限が無いという仕組みのようだ。
DynamicUserをやめるか、なんとかして/var/lib/private/luanti/default以下に見えるようにしなければ動かない。とりあえずbindマウントでなんとかなるようだった。
とりあえずこれで起動はうまく行った。
USB-HDD遅い
これで安心とおもったのもつかの間、実際動かしてみるとかなり遅い。microSDより遅いってのはどういうことだろう。
raspberry-piのUSBドライバの問題という話も見たが、まだ試してない。 hdparmの値を見る限りではそんなに遅いってこともなさそうな気がするが。。HDDだとSDに比べてランダムアクセスが遅いのでそこが致命的なんだろうか。
とりあえず今のところこれは未解決。