Xulrunner falha ao executar com usuário desprivilegiado

1

Eu uso o SlimerJs como um navegador sem cabeçalho em um servidor. Como o servidor não tem o xserver, usei o xvfb para executá-lo.

O comando é algo assim:

xvfb-run --server-args="-screen 0, 1024x768x24" slimerjs-0.10.0pre/slimerjs \
script.js --debug=yes "/tmp/file986Iww" "/tmp/file28bAEv" "pdf"

O arquivo script.js usa um nome de arquivo para entrada, um nome de arquivo para saída e um formato para o qual converter, usando a capacidade de impressora do Slimer.

Meu problema é que, quando executado como root, funciona bem. Mas quando eu deixo o apache fazer o trabalho ele falha e fica tonto.

O Apache é executado com www-data user e group. Esta é a saída do comando anterior:

slimerjs-0.10.0pre/xulrunner/xulrunner -app slimerjs-0.10.0pre/application.ini --profile /tmp/slimerjs.gRAJJar6 -no-remote script.js --debug=yes /tmp/file986Iww /tmp/file28bAEv pdf
Xlib:  extension "RANDR" missing on display ":99".
JavaScript warning: resource://slimerjs/slUtils.jsm, line 154: JavaScript 1.7's let blocks are deprecated
JavaScript error: jar:file:///var/www/project/slimerjs-0.10.0pre/xulrunner/omni.ja!/components/XULStore.js, line 66: NS_ERROR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIProperties.get]
** stuck forever here **

A linha 66 de XULStore.js é:

65. Services.obs.addObserver(this, "profile-before-change", true);
66. this._storeFile = Services.dirsvc.get("ProfD", Ci.nsIFile);
67. this._storeFile.append(STOREDB_FILENAME);

Tentando ver o que está errado com strace, mostre-me que ele está preso em algum tipo de loop ...

Não vejo motivos para este usuário não poder rodar este binário.
Como depurar qual permissão está faltando ou o que está errado com o xulrunner?

Eu não postei o strace porque é muito pesado, sinta-se à vontade para perguntar se acha que pode conter informações relevantes.

$ uname -a
Linux *host* 3.10-0.bpo.2-amd64 #1 SMP Debian 3.10.5-1~bpo70+1 (2013-08-11) x86_64 GNU/Linux
    
por Cyrbil 21.07.2015 / 11:39

1 resposta

2

Você pode não ter permissões para acessar ou gravar no diretório do perfil que está tentando recuperar.

Embora você esteja (presumivelmente) tentando definir o diretório do perfil por meio de --profile /tmp/slimerjs.gRAJJar6 , a documentação do SlimerJS indica isso deve ser -profile (traço único)

Por padrão, se você omitir a opção de perfil, como parece que você está fazendo devido ao traço duplo versus traço único, "SlimerJS [criará um perfil temporário sempre que você o iniciar" criando um novo diretório em "$ HOME / .innophi / slimerjs /"

Como você está tentando executar isso como www-data verifique seu diretório inicial e verifique se é possível criar e acessar arquivos no caminho do diretório padrão SlimerJS ou usar -profile em vez de --profile e verificar se é possível criar e acessar arquivos na pasta especificada.

    
por 28.07.2015 / 02:41