3

Я установил пакет 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 ответов5

3

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

$ 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
3

Оба ответа не являются полными решениями: как только вы запустите 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 для узла.

2

Я только столкнулся с этой проблемой в одной системе, в то время как другая система, которая должна быть идентичной, не имела проблемы.

Во время исследования я заметил, что yum resolvedep v8 resoldep 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 работает нормально.

0

Я думаю, что Джон прав насчет этой проблемы, но его решение не сработало для меня.

Я нашел правильный ответ для меня здесь

из этого поста:

Самый простой способ исправить это - удалить 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
0

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

# yum downgrade v8

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .