passenger-status コマンドが使えない

Passenger を Ubuntu にインストールして passenger コマンドを使おうとしたらこんなエラーが
# passenger-status
... 
/phusion_passenger/admin_tools/instance.rb:94:in `initialize': 
too long unix socket path (116bytes given but 108bytes max) (ArgumentError) 
なんでだろう?と思ったら、tmp ファイルの中のディレクトリ名が長すぎるとのこと。
# cd /tmp
# ls -la
...
drwx------  3 root        root        4096  9月 24 17:35 systemd-private-2564dd8c0ded4ef6a37876fd7232108f-apache2.service-S1DBLi/
これは systemd の設定の中で PrivateTmp という機能が効いているときに発生します。
# cat /lib/systemd/system/apache2.service
  
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=https://httpd.apache.org/docs/2.4/

[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl graceful
PrivateTmp=true  ← これ
Restart=on-abort

[Install]
WantedBy=multi-user.target  
じゃあこれをオフにすればいいじゃない?と思いますがこの機能は結構大事な機能なのでできればONにしておきたいです。

なんで大事なのか?
/tmp ディレクトリに pid ファイルとかがそのまま置いてあると、他のプロセスがアクセスしようと思えばできてしまいます。
そういういたずらを防ぐためにとても大事な機能なんですね。
下記の蝶野まこさんのブログがとてもわかり易いので読んでみてください。

/tmp/systemd-private-* の意味について | 晴耕雨読
https://tex2e.github.io/blog/linux/tmp-systemd-private

で最初に戻りますが、 passenger-status コマンドでエラーが出たらどうすればよいのか?

https://github.com/square/debug_socket/issues/4#issuecomment-250213414
  # GOTCHA: if the Rails.root.join("tmp", "sidekiq-debug-#{Process.pid}.sock")
  # path is too long, this will fail. The max on Linux is 108 characters, MacOS
  # is 104. If the path is too long, try using a relative path or /tmp/<blah>.
しょうがないのでシンボリックリンクを作成して対処します。 今のところはこんな力技しかありません。 シンボリックリンクは用事が終わったら削除してください。
# cd /tmp
# ls -la
...
drwx------  3 root        root        4096  9月 24 17:35 systemd-private-2564dd8c0ded4ef6a37876fd7232108f-apache2.service-S1DBLi/

# ln -s systemd-private-2564dd8c0ded4ef6a37876fd7232108f-apache2.service-S1DBLi tmpass

# PASSENGER_INSTANCE_REGISTRY_DIR=/tmp/tmpass/tmp passenger-status
Version : 6.0.15
Date    : 2022-09-25 17:38:57 +0900
Instance: 5X4gTYWE (Apache/2.4.41 (Ubuntu) SVN/1.13.0 OpenSSL/1.1.1j Phusion_Passenger/6.0.15)

----------- General information -----------
Max pool size : 6
App groups    : 1
Processes     : 1
Requests in top-level queue : 0

----------- Application groups -----------
/var/lib/redmine (production):
  App root: /var/lib/redmine
  Requests in queue: 0
  * PID: 72465   Sessions: 0       Processed: 5       Uptime: 2m 25s
    CPU: 0%      Memory  : 65M     Last used: 1m 20s ago

# rm /tmp/tmpass
なんかスッキリしませんね。
でもいいのです。
蝶野まこさんのブログが紹介できたので、これを読んで PrivateTmp の大事さがわかってくれる人が増えてくれれば。

コメント

人気の投稿