背景:Redmineサーバーを実行しています。redmine DMSFプラグイン、xapianを使用して全文検索を提供します。 RedmineはPassengerで実行され、Nginxでホストされています。 Passengerプロセスは、ユーザー「redmine」とグループ「nginx」で実行されます。乗客の衣類とNginxが無効になっています。
Redmine ログには、xapian インデックスが見つからないというメッセージが表示されます。
REDMAIN_XAPIAN ERROR: Xapian database is not properly set, initiated or it's corrupted.
DatabaseOpeningError: Couldn't stat '/var/tmp/dmsf-index/english'
Running Passenger プロセスのトレースは次のようになります。
[pid 1013] stat("/var/tmp/dmsf-index/english", 0x7fa3bd112f00) = -1 ENOENT (No such file or directory)
[pid 1013] write(8, "REDMAIN_XAPIAN ERROR: Xapian dat"..., 88) = 88
[pid 1013] write(8, "DatabaseOpeningError: Couldn't s"..., 66) = 66
ルートとしてリストされたファイル:
775# ls -ahl /var/tmp/dmsf-index/english/
total 340K
drwxr-x--- 2 redmine nginx 4.0K Sep 5 13:04 .
drwxr-x--- 3 redmine nginx 4.0K Sep 5 13:04 ..
-rw-r----- 1 redmine nginx 0 Sep 5 14:00 flintlock
-rw-r----- 1 redmine nginx 28 Sep 5 13:04 iamchert
-rw-r----- 1 redmine nginx 13 Sep 5 13:04 position.baseA
-rw-r----- 1 redmine nginx 16 Sep 5 13:04 position.baseB
-rw-r----- 1 redmine nginx 80K Sep 5 13:04 position.DB
-rw-r----- 1 redmine nginx 13 Sep 5 13:04 postlist.baseA
-rw-r----- 1 redmine nginx 17 Sep 5 13:04 postlist.baseB
-rw-r----- 1 redmine nginx 176K Sep 5 13:04 postlist.DB
-rw-r----- 1 redmine nginx 13 Sep 5 13:04 record.baseA
-rw-r----- 1 redmine nginx 14 Sep 5 13:04 record.baseB
-rw-r----- 1 redmine nginx 8.0K Sep 5 13:04 record.DB
-rw-r----- 1 redmine nginx 13 Sep 5 13:04 termlist.baseA
-rw-r----- 1 redmine nginx 14 Sep 5 13:04 termlist.baseB
-rw-r----- 1 redmine nginx 32K Sep 5 13:04 termlist.DB
そして、sudo -iを介してユーザー「redmine」とグループ「nginx」で複数のコマンドを実行します。
redmine@redmine:/var/tmp/dmsf-index/english$ pwd
/var/tmp/dmsf-index/english
redmine@redmine:/var/tmp/dmsf-index/english$ file .
.: directory
redmine@redmine:/var/tmp/dmsf-index/english$ ls
flintlock iamchert position.baseA position.baseB position.DB postlist.baseA postlist.baseB postlist.DB record.baseA record.baseB record.DB termlist.baseA termlist.baseB termlist.DB
redmine@redmine:/var/tmp/dmsf-index/english$ file record.DB
record.DB: data
redmine@redmine:/var/tmp/dmsf-index/english$ whoami
redmine
redmine@redmine:/var/tmp/dmsf-index/english$
私が知っている限り、権限エラー(通常はEACCESとマークされています)はありません。 NFSまたはCIFSがあいまいな場合はENOENTを返す可能性があることを読みましたが、これは/にマウントされたローカルext4パーティションです。
dmsf-indexの権限を再帰的に777に設定しようとしましたが、同じエラーが発生しました。
だから私の質問はPassenger / Redmineがディレクトリを見つけることができませんが、同じユーザーとして実行されるシェルはなぜ見つけることができるのかということです。
ベストアンサー1
Kusalanandaがchrootで正しい道を進んでいることがわかりました。
このシステムのnginx systemdユニットファイル設定PrivateTmp=true
によると文書以下を行います。
ブールパラメータを使用します。 trueの場合は、実行プロセスの新しいファイルシステム名前空間を設定し、その中にプライベート/ tmpおよび/ var / tmpディレクトリをマウントします。このディレクトリは、名前空間外のプロセスと共有されません。これはプロセスの一時ファイルに安全にアクセスするのに役立ちますが、/ tmpまたは/ var / tmpを介したプロセス間の共有はできません。
このオプションをfalseに切り替えると問題が解決します。