Histórico: Estou executando um servidor de redmine com o plug-in DMSF , que fornece pesquisa de texto completo usando o xapian. O Redmine está sendo executado no Passenger, hospedado pelo Nginx. O processo do Passenger está sendo executado como usuário "redmine" e group "nginx". Apparmor está desativado para passageiros e Nginx.
O log redmine indica que o índice xapian não pode ser encontrado:
REDMAIN_XAPIAN ERROR: Xapian database is not properly set, initiated or it's corrupted.
DatabaseOpeningError: Couldn't stat '/var/tmp/dmsf-index/english'
E um passo no processo do passageiro em exibição mostra o seguinte:
[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
Uma listagem de arquivos como raiz:
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
E vários comandos são executados como usuário "redmine" e grupo "nginx" via sudo -i:
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$
Tanto quanto eu posso dizer que não há erros de permissão (geralmente indicados com EACCES). Eu li que NFS ou CIFS podem retornar ENOENT sob circunstâncias obscuras, mas esta é uma partição ext4 local montada em /
Eu até tentei configurar as permissões para o dmsf-index recursivamente como 777, mas recebo o mesmo erro.
Então, minha pergunta é: por que o Passenger / Redmine não consegue encontrar o diretório, enquanto um shell rodando como o mesmo usuário pode?