2016-03-09 19 views
6

Tôi đã cài đặt véc ni từ EPEL repo trên CentOS 6.7, và nó không thành công để bắt đầu với lỗi sau:Varnish thất bại trong việc bắt đầu với: thất bại trong việc lập bản đồ phân đoạn từ đối tượng chia sẻ: Hoạt động không được phép

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

Nếu tôi strace nhị phân varnishd, tôi nhận được dòng sau vào cuối

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

Vì vậy, tôi đã kiểm tra rằng quyền đã phải vào thư mục này (cộng với tôi đang chạy nó với root), tôi vô hiệu hóa SELinux, khởi động lại, cài đặt lại ... Đầu tiên nó xảy ra với véc ni 2.1.15, nhưng cùng là xảy ra với 4.0.3 (sử dụng repo varnish chính thức).

Bạn có biết điều gì đang xảy ra trên hệ thống của tôi không?

+0

Bạn có thể kiểm tra để đảm bảo rằng hệ thống tệp không được kết nối với 'noexec'? – Petesh

+0

Omg, đó là lý do ... Bạn có thể giải thích (trong một câu trả lời chủ đề) tại sao một tùy chọn noexec có tác động đến một hoạt động mở() cơ bản không? Từ những gì tôi hiểu, véc ni hiện đang cố gắng để xây dựng cấu hình vcl trong C để nó có thể được nạp vào bộ nhớ. Tôi không chắc nơi mà cái noexec ở đây đang can nhiễu. Cảm ơn sự giúp đỡ của bạn –

Trả lời

6

Là một phần của khởi động véc ni, nó tạo ra một thư viện có thể tải của configuration of it's behaviour. Điều này được biên dịch và tải vào thời gian chạy bởi varnishd. Đây là điều đang bị khiếu nại về lỗi này:

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

tức là cuộc gọi không thực hiện được là dlopen. Các phiên bản mới hơn có a slightly more obvious message nơi nó nói:

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

Trong trường hợp này, các thư mục mà các .so được đặt trong cư trú trên một hệ thống tập tin được gắn với các tùy chọn noexec, gây ra các dlopen thất bại.

Giải quyết vấn đề này yêu cầu đặt lại hệ thống tệp này với tùy chọn exec.

+0

Bạn có thể thực hiện việc này trên Ubuntu bằng cách thay đổi cấu hình/etc/fstab thành:/tmp \t \t ext4 \t \t mặc định, exec, nosuid, nodev –

Các vấn đề liên quan