2016-03-09 22 views
6

ho installato vernice da EPEL pronti contro termine su una CentOS 6.7, e non riesce a iniziare con seguente errore:Varnish non si avvia con: non è riuscito a mappare segmento da oggetto condiviso: Operation not permitted

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

Se strace il binario varnishd, ottengo righe seguenti alla fine

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

Così ho controllato che i permessi erano proprio su questa directory (più sto correndo con root), ho disabilitato SELinux, riavviato, reinstallato ... Prima è successo con la vernice 2.1.15, ma lo stesso è accade con 4.0.3 (usando il repo di vernice ufficiale).

Avete idea di cosa sta succedendo sul mio sistema?

+0

È possibile verificare che il file system non sia montato con 'noexec'? – Petesh

+0

Omg, questa era la ragione ... Puoi spiegare (in una risposta argomento) perché un'opzione noexec ha un impatto su un'operazione di base open()? Da quello che ho capito, la vernice sta ora cercando di costruire la configurazione di vcl in C in modo che possa essere caricata in memoria. Non sono sicuro di dove il noexec stia interferendo. Grazie per il tuo aiuto –

risposta

6

Come parte dell'avvio di varnish, genera una libreria caricabile di configuration of it's behaviour. Questo viene compilato e caricato in fase di esecuzione da varnishd. Questa è la cosa che viene lamentato con l'errore:

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

vale a dire si tratta di un dlopen chiamata che sta fallendo. La versione più recente ha a slightly more obvious message in cui si dice:

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

In questo caso, la directory che il .so viene posto in risiede su un filesystem che viene montato con l'opzione noexec, che fa sì che il dlopen a fallire.

Per questo indirizzo è necessario rimontare questo file system con l'opzione exec.

+0

Puoi farlo su Ubuntu modificando la configurazione/etc/fstab in:/tmp \t \t ext4 \t \t valori predefiniti, exec, nosuid, nodev –