Ошибка NodeJS при инициализации V8 на Gentoo AMD64

Мне удалось собрать двигатель V8 на машине, однако, когда я печатаю

$ узел

ФАТАЛЬНАЯ ОШИБКА: v8::Debug::SetDebugMessageDispatchHandler Ошибка инициализации V8

У меня V8 версии 3.6.6.11, консоль D8 работает нормально. Я пробовал portage версию nodejs 0.6.6, скомпилированная версия из github показывает ту же ошибку. Я думаю, что проблема с кучей распределения стека

$ ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31707
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31707
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Это виртуальная машина, которая может вызвать некоторые ограничения...

Linux 2.6.36-hardened-r9-guest-hardened-01 x86_64 QEMU Виртуальный процессор версия 0.13.0 AuthenticAMD GNU/Linux Есть идеи?

3 ответа

Решение

После debuggin nodejs с Вячеславом Егоровым мы выяснили, что mmap не удается выделить память (Operation not permitted) - это вызвано каким-то флагом безопасности Gentoo (для его изменения может потребоваться перекомпиляция ядра)

Наконец я использовал ветку узла v0.6 от github

./configure --without-snapshot
make
make install

а также

paxctl -m /usr/local/bin/node

который добавляет MPROTECT флаг

- PaX flags: -----m-x-e-- [/usr/local/bin/node]
        MPROTECT is disabled
        RANDEXEC is disabled
        EMUTRAMP is disabled

Примечание для себя:

при запуске приложения Rails на сервере config/boot.rb

ENV['EXECJS_RUNTIME'] = 'Node' if ENV['RAILS_ENV'] == 'production'

Я подозреваю, что это вызвано невозможностью выделить диапазон кода (он используется только в 64-разрядной версии V8). В deps/v8/src/heap.cc попробуйте изменить code_range_size_(512*MB), в code_rage_size_(32*MB), и перекомпилировать узел.

Это то, что я получаю от /var/log/kern.log при компиляции V8 для Android:

Dec 30 11:42:26 stormrage kernel: grsec: From 82.247.154.152: denied RWX mmap of <anonymous mapping> by /mnt/sdb/cyanogen/android/system/out/host/linux-x86/bin/mksnapshot[mksnapshot:32426] uid/euid:1014/1014 gid/egid:1014/1014, parent /usr/bin/gmake[make:28416] uid/euid:1014/1014 gid/egid:1014/1014

Я подозреваю, что ваша ошибка такая же, как моя (проблема GRSEC), и вы делаете

paxctl -m /mnt/sdb/cyanogen/android/system/out/host/linux-x86/bin/mksnapshot

работает для меня. Я нахожусь под Gentoo x64 Закаленный как гость VMWare ESXi. Благодарю.

Другие вопросы по тегам