O Node.js do yum no Fedora não inicia com o erro de símbolo v8

3

Eu instalei o pacote nodejs no Fedora 16 desta maneira:

# yum install nodejs

Mas ele caiu na inicialização quando executado sem argumentos:

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

E também com um arquivo vazio:

$ nodejs /dev/null
nodejs: symbol lookup error: nodejs: undefined symbol: 
    _ZN2v82V837AdjustAmountOfExternalAllocatedMemoryEi

Como posso instalar o Node.js no Fedora usando o yum e não travá-lo quando ele é iniciado?

    
por John Zwinck 03.08.2012 / 10:18

5 respostas

0

O segundo erro é uma pista decente de que o problema não é um erro de código no Node.js, mas um problema de incompatibilidade binária entre os componentes do C ++. Esse símbolo em C ++ é v8::V8::AdjustAmountOfExternalAllocatedMemory(int) . Então vamos tentar uma versão diferente da v8, assim:

# yum downgrade v8

No meu sistema Fedora 16, isso levou a v8 de 3.10 para 3.6. E agora o nodejs funciona!

    
por 03.08.2012 / 10:18
3

Ambas as respostas dadas não são soluções completas: assim que você executar yum update ou yum upgrade v8 será atualizado novamente. A solução completa é a seguinte:

Primeiro remova a v8 e adicione o repositório nodejs-stable ao yum, assim como ftrotter disse:

$ sudo yum -y remove v8
$ sudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/fedora/nodejs-stable-release.noarch.rpm

Agora você deve descobrir quais repositórios fornecem a v8:

$ yum info v8

No meu sistema, havia dois repos fornecendo v8: updates e nodejs-stable . Nós só queremos a v8 do nodejs-stable, então devemos excluir o v8 de todos os outros repos. Podemos excluir um pacote usando os arquivos de configuração do repo. Esses arquivos podem ser encontrados em /etc/yum.repos.d/ . O arquivo de configuração para o updates repo é fedora-updates.repo . Abra esse arquivo e adicione exclude=v8* à seção [updates] desse arquivo. Finalmente você pode reinstalar v8, nó e npm:

$ sudo yum install npm

O V8 não será mais baixado do repositório updates , mas apenas do repositório nodejs-stable . Portanto, o yum sempre fará o download da versão v8 correta para o nó.

    
por 21.08.2012 / 13:20
3

Se você está recebendo o erro indicado acima, pare e faça o seguinte:

$ 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
    
por 04.11.2012 / 09:35
2

Acabei de me deparar com este problema num sistema, enquanto outro sistema que deveria ser idêntico não tem o problema.

Durante a investigação, notei que yum resolvedep v8 disse 1:v8-3.13.7.5-1.el6.x86_64 em ambos os sistemas, mas yum info v8 não mostrou a v8 como instalada no sistema que estava funcionando.

Em um palpite, corri yum remove v8 no sistema quebrado, que removeu 1:v8-3.13.7.5-1.el6.x86_64 e nodejs-0.6.18-1.el6.x86_64 .

Então eu fiz yum install nodejs , que instalou somente nodejs-0.6.18-1.el6.x86_64 , e agora o nodejs funciona bem.

    
por 30.01.2013 / 11:47
0

Acho que John está certo sobre esse problema, mas a solução dele não funcionou para mim.

Encontrei a resposta certa para mim aqui

desse post:

A maneira mais fácil de corrigir isso é remover a v8 e suas dependências e reinstalá-las usando apenas o repositório 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
    
por 14.08.2012 / 09:11