CentOS 7 で Phusion Passenger の passenger-status を実行するとエラーとなる

知らなかった。

* CentOS Linux release 7.1.1503 (Core)
* Passenger 5.0.21

以下のように `passenger-status` を実行するとエラーとなる。

```
~# passenger-status 
ERROR: Phusion Passenger doesn't seem to be running. If you are sure that it is running,
then the causes of this problem could be:

1. You customized the instance registry directory using Apache's PassengerInstanceRegistryDir option,
Nginx's passenger_instance_registry_dir option, or Phusion Passenger Standalone's --instance-registry-dir
command line argument. If so, please set the environment variable PASSENGER_INSTANCE_REGISTRY_DIR to that
directory and run passenger-status again.
2. The instance directory has been removed by an operating system background service. Please set a different
instance registry directory using Apache's PassengerInstanceRegistryDir option, Nginx's
passenger_instance_registry_dir option, or Phusion Passenger Standalone's --instance-registry-dir
command line argument.
```

特に設定をいじったりしていない。Passenger のドキュメントを確認する。

https://www.phusionpassenger.com/library/config/apache/reference/#passengerinstanceregistrydir

> The default value for this option is as follows:
> 
> * If you are on Red Hat and CentOS, and installed Passenger through the RPMs provided by Phusion, then the default value is /var/run/passenger-instreg.
> * Otherwise, the default value is the value of the \$TMPDIR environment variable. Or, if \$TMPDIR is not set, /tmp.

`gem install passenger` したものなので上記の後者。
探してみるが関係していそうなものが無い。

```
~# echo $TMPDIR

~# ls /tmp
ks-script-tlgcPw  systemd-private-mBNl7v  yum.log
```

ここで強引に探してみる。それらしきものが見つかる。

```
~# find / -iname '*passenger*'
... 省略 ...
/tmp/systemd-private-mBNl7v/tmp/passenger.aFePViS
... 省略 ...
```

指定してみると `passenger-status` が動く。

```
~# PASSENGER_INSTANCE_REGISTRY_DIR=/tmp/systemd-private-mBNl7v/tmp passenger-status 
Version : 5.0.21
Date    : 2015-11-30 23:36:48 +0900
Instance: 2Wqc3QMb (Apache/2.4.6 (CentOS) Phusion_Passenger/5.0.21)

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

----------- Application groups -----------
/var/lib/redmine:
  App root: /var/lib/redmine
  Requests in queue: 0
  * PID: 2473    Sessions: 0       Processed: 1       Uptime: 5m 22s
    CPU: 0%      Memory  : 125M    Last used: 5m 22s ago
```

では systemd-private-xxxxxx とは何か。ググる。

http://stackoverflow.com/questions/30444914/php-has-its-own-tmp-in-tmp-systemd-private-nabcde-tmp-when-accessed-through-ng

> Because systemd is configured to give nginx a private /tmp. If you must use the system /tmp instead for some reason then you will need to modify the .service file to read "PrivateTmp=no".

http://0pointer.de/blog/projects/security.html

> Another very simple but powerful configuration switch is PrivateTmp=:

http://0pointer.de/public/systemd-man/systemd.exec.html#PrivateTmp=

> If true, sets up a new file system namespace for the executed processes and mounts private /tmp and /var/tmp directories inside it that is not shared by processes outside of the namespace.

Passenger は Apache HTTP Server (`yum` でインストールしたやつ) が使っている。
Apache の `PrivateTmp` の設定値を確認する。
設定ファイルは下記で分かった。

```
~# systemctl status httpd
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
... 省略 ...
```

下記のように `true` だった。

```
~# cat /usr/lib/systemd/system/httpd.service 
... 省略 ...
PrivateTmp=true
... 省略 ...
```

正直よくわからない。