Node.js von yum auf Fedora startet nicht mit einem v8-Symbolfehler

3

Ich habe das nodejs-Paket auf Fedora 16 folgendermaßen installiert:

# yum install nodejs

Aber es stürzte beim Start ab, wenn es ohne Argumente ausgeführt wurde:

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

Und auch mit einer leeren Datei:

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

Wie kann ich Node.js unter Fedora mit yum installieren und es beim Start nicht zum Absturz bringen?

John Zwinck
quelle

Antworten:

3

Beide Antworten sind keine vollständigen Lösungen: Sobald Sie ausführen yum updateoder yum upgradev8 wird erneut aktualisiert. Die vollständige Lösung lautet wie folgt:

Entfernen Sie zuerst v8 und fügen Sie das nodejs-stable-Repository zu yum hinzu, genau wie ftrotter sagte:

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

Jetzt sollten Sie herausfinden, welche Repos v8 bereitstellen:

$ yum info v8

Auf meinem System gab es 2 Repos, die Version 8 bereitstellten: updatesund nodejs-stable. Wir wollen nur v8 von nodejs-stable, also sollten wir v8 von allen anderen Repos ausschließen. Wir können ein Paket mit den Repo-Konfigurationsdateien ausschließen. Diese Dateien befinden sich in /etc/yum.repos.d/. Die Konfigurationsdatei für das updatesRepo ist fedora-updates.repo. Öffnen Sie diese Datei und fügen Sie exclude=v8*sie dem [updates]Abschnitt dieser Datei hinzu. Schließlich können Sie v8, node und npm neu installieren:

$ sudo yum install npm

V8 wird nicht mehr aus dem updatesRepository heruntergeladen , sondern nur noch aus dem nodejs-stableRepository. Daher wird yum immer die richtige v8-Version für node herunterladen.

Tiddo
quelle
3

Wenn der oben angegebene Fehler auftritt, beenden Sie den Vorgang und führen Sie die folgenden Schritte aus:

$ 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
jdrefahl
quelle
Diese Antwort scheint die gleiche zu sein, die ftrotter vor einiger Zeit gepostet hat.
John Zwinck
2

Ich bin gerade auf einem System auf dieses Problem gestoßen, während ein anderes System, das identisch sein sollte, das Problem nicht hatte.

Während der Untersuchung bemerkte ich, yum resolvedep v8dass dies 1:v8-3.13.7.5-1.el6.x86_64auf beiden Systemen yum info v8zutrifft , zeigte jedoch nicht, dass v8 auf dem funktionierenden System installiert ist.

Ich bin ahnungslos yum remove v8auf das kaputte System gelaufen , das entfernt 1:v8-3.13.7.5-1.el6.x86_64 und nodejs-0.6.18-1.el6.x86_64 .

Dann habe ich yum install nodejsdie installiert nur nodejs-0.6.18-1.el6.x86_64 , und jetzt das NodeJS funktioniert gut.

Tim Bunce
quelle
Dies funktionierte für mich auf einer Amazon EC2 CentOS-Instanz.
brendan
0

Der zweite Fehler ist ein guter Hinweis darauf, dass das Problem kein Codefehler in Node.js ist, sondern ein binäres Inkompatibilitätsproblem zwischen C ++ - Komponenten. Das Symbol in C ++ ist v8::V8::AdjustAmountOfExternalAllocatedMemory(int). Probieren wir also eine andere Version von v8 aus:

# yum downgrade v8

Auf meinem Fedora 16-System dauerte dies v8 von 3.10 auf 3.6. Und jetzt funktioniert nodejs!

John Zwinck
quelle
0

Ich denke John hat Recht mit diesem Problem, aber seine Lösung hat bei mir nicht funktioniert.

Ich habe hier die richtige Antwort für mich gefunden

von diesem Beitrag:

Der einfachste Weg, dies zu beheben, besteht darin, v8 und seine Abhängigkeiten zu entfernen und sie nur mit dem nodejs-stable-Repository neu zu installieren:

$ 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
ftrotter
quelle
Genau wie die andere hier erwähnte Lösung funktioniert dies nur teilweise: Wenn Sie yum upgradev8 ausführen, wird erneut auf eine neuere Version aktualisiert. Wissen Sie, ob es eine Möglichkeit gibt, yum zu zwingen, v8 nur vom nodejs-stable-Repo aus zu aktualisieren?
Tiddo