2016-03-09 3 views
6

I Lack aus EPEL Repo auf einem CentOS installiert 6.7, und es schlägt mit folgenden Fehlern zu starten:Lack nicht mit beginnen: failed aus dem gemeinsamen Objekt abzubilden Segment: Operation nicht zulässig

Compiled VCL program failed to load: 
    ./vcl.1P9zoqAU.so: failed to map segment from shared object: Operation not permitted 
VCL compilation failed 

Wenn ich strace die varnishd binär, erhalte ich folgende Zeilen am Ende

chdir("/var/lib/varnish/myserver.foo.bar") = 0 
open("./vcl.1P9zoqAU.c", O_RDWR|O_CREAT|O_EXCL, 0600) = 3 

So überprüfte ich, dass die Berechtigungen direkt auf dieses Verzeichnis waren (plus ich bin es mit root läuft), I deaktiviert SELinux, neu gestartet, neu installiert ... Zuerst ist es mit Lack 2.1.15 geschehen, aber dasselbe ist passiert mit 4.0.3 (mit offiziellen Lack Repo).

Haben Sie eine Idee, was auf meinem System vor sich geht?

+0

Können Sie überprüfen, dass das Dateisystem nicht mit 'noexec' gemountet ist? – Petesh

+0

Omg, das war der Grund ... Können Sie (in einer Topic-Antwort) erklären, warum eine noexec-Option Auswirkungen auf eine grundlegende open() -Operation hat? Von was ich verstehe, versucht Lack jetzt, vcl-Konfiguration in C zu erstellen, damit es in Arbeitsspeicher geladen werden kann. Ich bin mir nicht sicher, wo der Noexec hier störte. Vielen Dank für Ihre Hilfe –

Antwort

6

Im Rahmen der Inbetriebnahme von Lack erzeugt es eine ladbare Bibliothek der configuration of it's behaviour. Diese wird zur Laufzeit von lacked kompiliert und geladen. Das ist die Sache, die mit dem Fehler beschwerten sich über wird:

Compiled VCL program failed to load: 
    ./vcl.1P9zoqAU.so: failed to map segment from shared object: Operation not permitted 
VCL compilation failed 

das heißt, es ist ein dlopen Anruf, hat versagt. Die neuere Version hat a slightly more obvious message, wo es heißt:

dlopen(vcl_boot/vgc.so) = failed to map segment from shared object: Operation not permitted 

In diesem Fall wird das Verzeichnis, das die .so in befindet sich auf einem Dateisystem platziert ist, die mit der noexec Option montiert, die die dlopen scheitern verursacht.

Für die Adressierung muss das Dateisystem erneut mit der Option exec installiert werden.

+0

Sie können diese Wechsel auf Ubuntu tun, indem Sie die Datei/etc/fstab-Konfiguration:/tmp \t \t ext4 \t \t defaults, exec, nosuid, nodev –

Verwandte Themen