Xulrunner stürzt ab, wenn es mit einem unterprivilegierten Benutzer ausgeführt wird

Xulrunner stürzt ab, wenn es mit einem unterprivilegierten Benutzer ausgeführt wird

Ich verwende SlimerJs als Headless-Browser auf einem Server. Da der Server keinen XServer hat, habe ich xvfb zum Ausführen verwendet.

Der Befehl lautet ungefähr so:

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

Die Datei script.jsbenötigt einen Dateinamen für die Eingabe, einen Dateinamen für die Ausgabe und ein Format zur Konvertierung unter Verwendung der Druckerfunktion von Slimer.

Mein Problem ist, dass es einwandfrei funktioniert, wenn ich es als Root ausführe. Aber wenn ich Apache die Arbeit machen lasse, schlägt es fehl und bleibt hängen.

Apache läuft unter www-dataBenutzer und Gruppe. Dies ist die Ausgabe des vorherigen Befehls:

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 **

Die Zeile 66 lautet 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);

Beim Versuch herauszufinden, was mit strace nicht stimmt, zeigt es mir, dass es in einer Art Schleife feststeckt ...

Ich sehe keinen Grund, warum dieser Benutzer diese Binärdatei nicht ausführen kann.
Wie kann ich debuggen, welche Berechtigung fehlt oder was mit xulrunner schief läuft?

Ich habe den Strace nicht gepostet, weil er ziemlich groß ist. Fragen Sie ruhig danach, wenn Sie meinen, dass er relevante Informationen enthalten könnte.

$ 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

Antwort1

Möglicherweise verfügen Sie nicht über die Berechtigung, auf das Profilverzeichnis, das Sie abrufen möchten, zuzugreifen oder darin zu schreiben.

Obwohl Sie (vermutlich) versuchen, das Profilverzeichnis über --profile /tmp/slimerjs.gRAJJar6dasSlimerJS-Dokumentationgibt an, dass dies sein sollte -profile(einzelner Strich)

Wenn Sie die Profiloption standardmäßig weglassen, was Sie anscheinend aufgrund des doppelten Bindestrichs im Vergleich zum einzelnen Bindestrich tun, dann „erstellt SlimerJS bei jedem Start ein temporäres Profil“, indem ein neues Verzeichnis in „$HOME/.innophi/slimerjs/“ erstellt wird.

Da Sie versuchen, dies als auszuführen, www-dataüberprüfen Sie deren Home-Verzeichnis und vergewissern Sie sich, dass Sie Dateien im SlimerJS-Standardverzeichnispfad erstellen und darauf zugreifen können, oder verwenden Sie -profilestattdessen --profileund vergewissern Sie sich, dass Sie Dateien im angegebenen Ordner erstellen und darauf zugreifen können.

verwandte Informationen