2016-03-09 2 views
6

Я установил лак от Epel репо на CentOS 6.7, и она не запускается с ошибкой при слежении:Лак не заводится с: не удалось отобразить сегмент от общего объекта: Операция не допускается

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

Если я Strace varnishd двоичная, я получаю следующие строки к концу

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

Так что я проверил, что разрешения были правы в этом каталоге (плюс я бегаю его с корнем), я отключил SELinux, перезагружается, переустановил ... Сначала это произошло с лаком 2.1.15, но это же происходит с 4.0.3 (с использованием официального репо-лака).

У вас есть идеи, что происходит с моей системой?

+0

Можете ли вы проверить, чтобы файловая система не смонтирована с помощью 'noexec'? – Petesh

+0

Omg, вот почему ... Можете ли вы объяснить (в ответ на вопрос), почему опция noexec влияет на базовую операцию open()? Из того, что я понимаю, лак теперь пытается построить конфигурацию vcl в C, чтобы он мог быть загружен в память. Я не знаю, где здесь помешал noexec. Благодарим за помощь –

ответ

6

В качестве части запуска лака он создает загружаемую библиотеку configuration of it's behaviour. Это компилируется и загружается во время выполнения с помощью varnishd. Это вещь, которая обжалуется с ошибкой:

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

т.е. это dlopen вызова, который не удается. Новая версия имеет a slightly more obvious message, где он говорит:

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

В этом случае каталог, в котором .so помещается в располагающийся на файловой системе, которая установлена ​​с noexec вариант, который вызывает dlopen на провал.

Для этого необходимо переустановить эту файловую систему с помощью опции exec.

+0

Вы можете сделать это на Ubuntu, изменив конфигурацию/etc/fstab на:/tmp \t \t ext4 \t \t defaults, exec, nosuid, nodev –

Смежные вопросы