Node.js из yum на Fedora не запускается с ошибкой символа v8

3692
John Zwinck

Я установил пакет 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, и не дать ему сбоить при запуске?

3

5 ответов на вопрос

3
Tiddo

Оба ответа не являются полными решениями: как только вы запустите yum updateили yum upgradev8 будет обновлен снова. Полное решение выглядит следующим образом:

Сначала удалите 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 для узла.

3
jdrefahl

Если вы получаете ошибку, указанную выше, остановитесь и сделайте следующее:

$ 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 
Этот ответ выглядит так же, как тот, который был опубликован в ftrotter некоторое время назад. John Zwinck 11 лет назад 0
2
Tim Bunce

I just ran into this problem on one system, while another system that should be identical didn't have the problem.

While investigating I noticed that yum resolvedep v8 said 1:v8-3.13.7.5-1.el6.x86_64 on both systems, but yum info v8 didn't show v8 as installed on the system that was working.

On a hunch I ran yum remove v8 on the broken system, which removed 1:v8-3.13.7.5-1.el6.x86_64 and nodejs-0.6.18-1.el6.x86_64.

Then I did yum install nodejs which installed only nodejs-0.6.18-1.el6.x86_64, and now the nodejs works fine.

Это сработало для меня на экземпляре Amazon EC2 CentOS. brendan 11 лет назад 0
0
John Zwinck

Вторая ошибка - хороший признак того, что проблема не в кодовой ошибке в Node.js, а в проблеме двоичной несовместимости между компонентами C ++. Этот символ в C ++ есть v8::V8::AdjustAmountOfExternalAllocatedMemory(int). Итак, давайте попробуем другую версию v8, например:

# yum downgrade v8 

На моей системе Fedora 16 это заняло v8 с 3.10 до 3.6. И теперь nodejs работает!

0
ftrotter

I think John is right about this problem, but his solution did not work for me.

I found the right answer for me here

from that post:

The easiest way to fix it is to remove v8 and it's dependencies and reinstall them using only the nodejs-stable repository:

$ 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 
Как и другое решение, упомянутое здесь, это работает только частично: когда вы запускаете `yum upgrade`, v8 снова обновляется до более новой версии. Вы знаете, есть ли способ заставить yum обновлять v8 только из репозитория nodejs-stable? Tiddo 12 лет назад 0