Ошибка 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. Благодарю.