Node.js из yum на Fedora не запускается с ошибкой символа v8
Я установил пакет nodejs на Fedora 16 следующим образом:
# yum install nodejs
Но он запускался при запуске без аргументов:
$ nodejs
nodejs: ../src/handle_wrap.cc:65: static v8::Handle<v8::Value>
node::HandleWrap::Unref(const v8::Arguments&): Assertion
`args.Holder()->InternalFieldCount() > 0' failed.
Aborted (core dumped)
А также с пустым файлом:
$ nodejs /dev/null
nodejs: symbol lookup error: nodejs: undefined symbol:
_ZN2v82V837AdjustAmountOfExternalAllocatedMemoryEi
Как я могу установить Node.js на Fedora, используя yum, и не дать ему сбоить при запуске?
5 ответов
Вторая ошибка - хороший признак того, что проблема не в кодовой ошибке в Node.js, а в проблеме двоичной несовместимости между компонентами C++. Этот символ в C++ v8::V8::AdjustAmountOfExternalAllocatedMemory(int)
, Итак, давайте попробуем другую версию v8, например:
# yum downgrade v8
На моей системе Fedora 16 это заняло v8 с 3.10 до 3.6. И теперь nodejs работает!
Если вы получаете ошибку, указанную выше, остановитесь и сделайте следующее:
$ sudo yum -y remove v8
$ sudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/fedora/nodejs-stable-release.noarch.rpm # You probably already have this repo installed, may be skipped.
# Next line will reinstall older version of V8 and working NPM -
$ sudo yum --disablerepo=* --enablerepo=nodejs-stable install nodejs-compat-symlinks npm
Оба ответа не являются полными решениями: как только вы выполните yum update
или же yum upgrade
v8 будет обновлен снова. Полное решение выглядит следующим образом:
Сначала удалите v8 и добавьте репозиторий nodejs-stable в yum, как сказал ftrotter:
$ sudo yum -y remove v8
$ sudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/fedora/nodejs-stable-release.noarch.rpm
Теперь вы должны выяснить, какие репозитории предоставляют v8:
$ yum info v8
На моей системе было 2 репозитория с v8: updates
а также nodejs-stable
, Мы хотим только v8 от nodejs-stable, поэтому мы должны исключить v8 из всех остальных репозиториев. Мы можем исключить пакет, используя конфигурационные файлы репо. Эти файлы можно найти в /etc/yum.repos.d/
, Файл конфигурации для updates
репо fedora-updates.repo
, Откройте этот файл и добавьте exclude=v8*
к [updates]
раздел этого файла. Наконец, вы можете переустановить v8, node и npm:
$ sudo yum install npm
V8 не будет загружен с updates
хранилище больше, но только из nodejs-stable
репозиторий. Поэтому yum всегда будет загружать правильную версию v8 для узла.
Я только столкнулся с этой проблемой в одной системе, в то время как другая система, которая должна быть идентичной, не имела проблемы.
Во время расследования я заметил, что yum resolvedep v8
сказал 1:v8-3.13.7.5-1.el6.x86_64
в обеих системах, но yum info v8
не показывал v8 как установленный в работающей системе.
По догадке я побежал yum remove v8
на сломанной системе, которая удалена 1:v8-3.13.7.5-1.el6.x86_64
а также nodejs-0.6.18-1.el6.x86_64
,
Тогда я сделал yum install nodejs
который установлен только nodejs-0.6.18-1.el6.x86_64
и теперь nodejs работает нормально.
Я думаю, что Джон прав насчет этой проблемы, но его решение не сработало для меня.
Я нашел правильный ответ для меня здесь
из этого поста:
Самый простой способ исправить это - удалить v8 и его зависимости и переустановить их, используя только репозиторий nodejs-stable:
$ sudo yum -y remove v8
$ sudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/fedora/nodejs-stable-release.noarch.rpm # You probably already have this repo installed
$ sudo yum --disablerepo=* --enablerepo=nodejs-stable install nodejs-compat-symlinks npm