it-swarm-ja.com

Fedora上のyumからのNode.jsがv8シンボルエラーで起動に失敗する

NodejsパッケージをFedora16に次のようにインストールしました。

# 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

Yumを使用してNode.jsをFedoraにインストールし、起動時にクラッシュしないようにするにはどうすればよいですか?

3
John Zwinck

2番目のエラーは、問題がNode.jsのコードエラーではなく、C++コンポーネント間のバイナリの非互換性の問題であるというまともな手がかりです。 C++のその記号はv8::V8::AdjustAmountOfExternalAllocatedMemory(int)です。それでは、次のような別のバージョンのv8を試してみましょう。

# yum downgrade v8

私のFedora16システムでは、これはv8を3.10から3.6に変更しました。そして今、nodejsが機能します!

0
John Zwinck

上記のエラーが発生した場合は、停止して次の手順を実行してください。

$ 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
John Drefahl

与えられた両方の答えは完全な解決策ではありません。yum updateまたはyum upgradeを実行するとすぐに、v8が再びアップグレードされます。完全なソリューションは次のとおりです。

Ftrotterが言ったように、最初にv8を削除し、nodejs-stableリポジトリをyumに追加します。

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

ここで、どのリポジトリがv8を提供するかを確認する必要があります。

$ yum info v8

私のシステムには、v8を提供する2つのリポジトリがありました:updatesnodejs-stable。 nodejs-stableからv8のみが必要なので、他のすべてのリポジトリからv8を除外する必要があります。 repoconfigファイルを使用してパッケージを除外できます。これらのファイルは/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
Tiddo

あるシステムでこの問題が発生しましたが、同じであるはずの別のシステムでは問題が発生しませんでした。

調査中に、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は正常に動作します。

2
Tim Bunce

ジョンはこの問題について正しいと思いますが、彼の解決策は私にはうまくいきませんでした。

私は私にとって正しい答えを見つけました ここ

その投稿から:

これを修正する最も簡単な方法は、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
ftrotter