Installieren Sie Node.js auf einer SD-Karte, um auf allen Pi-Modellen zu funktionieren

13

Ich lade die letzte Raspbian-Version (27.05.2016) auf https://www.raspberrypi.org/downloads/raspbian/ herunter

Node.js ist bereits mit der Version 0.10.29 installiert, daher habe ich diese entfernt und neu installiert

apt-get remove nodered
apt-get remove nodejs nodejs-legacy
curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -
sudo apt-get install -y build-essential python-rpi.gpio nodejs

Ich möchte jedoch, dass meine SD-Karte auf allen Raspberry Pi-Modellen (Pi 1, 2, 3 und Zero) funktioniert

node -v

Auf einem Pi 1 oder auf einem Pi 0 erhalte ich eine "illegale Anweisung".

Meine Frage ist: Ist es möglich, eine Kopie von Node.js auf einem Pi zu installieren, der auf allen Modellen funktioniert? Oder ist v0.10.29 die einzige, die auf allen Pis funktioniert?

4Taine
quelle
Wenn Sie Quellen von zufälligen Websites herunterladen, müssen Sie mit Problemen rechnen. Was lässt Sie denken, dass die Version von Node.js für den Raspberry Pi geeignet ist?
Joan
Dies ist keine zufällige Website, aber wo die offiziellen NodeJS-Installationsanweisungen Sie verweisen. Rest siehe meine Antwort.
Grmpfhmbl

Antworten:

29

Der Grund, warum dies auf Ihrem Raspberry Pi 1 nicht funktioniert, ist, dass diese Pakete für die falsche CPU kompiliert wurden - armhf (ARM 32-Bit-Hard-Float, ARMv7 und höher: arm-linux-gnueabihf)

Das Paket sollte also auf Ihrem Pi2 funktionieren, aber nicht auf dem Pi1. Ich denke, es gibt keinen schnellen und einfachen Weg, um ein Bild zu erhalten, das auf beiden läuft. Wenn Sie einen modernen NodeJS auf Ihrem Pi1 installieren möchten, laden Sie den richtigen Tarball von https://nodejs.org/dist/ herunter. Beispiel:

cd ~
wget https://nodejs.org/dist/v6.2.1/node-v6.2.1-linux-armv6l.tar.gz
tar -xzf node-v6.2.1-linux-armv6l.tar.gz
node-v6.2.1-linux-armv6l/bin/node -v

Der letzte Befehl sollte gedruckt werden v6.2.1.

Jetzt können Sie es nach / usr / local kopieren

cd node-v6.2.1-linux-armv6l/
sudo cp -R * /usr/local/

Zum Testen fügen Sie Ihrem Pfad / usr / local / bin hinzu

export PATH=$PATH:/usr/local/bin
node -v
npm -v

Dies sollte 6.2.1und 3.9.3für die Versionen von nodejs und npm gedruckt werden. Wenn Sie eine andere Version benötigen, wählen Sie einfach die gewünschte aus den Downloads aus.

Vergessen Sie nicht, den PATH zu Ihrem .bashrc hinzuzufügen , um ihn dauerhaft zu machen.

Um die richtige Architektur zu finden, können Sie cat /proc/cpuinfoein Terminal eingeben, das ungefähr so ​​aussehen sollte

pi@raspberrypi:~ $ cat /proc/cpuinfo
processor   : 0
model name  : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS    : 697.95
Features    : half thumb fastmult vfp edsp java tls 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xb76
CPU revision    : 7

update Ich habe gerade diese Antwort gesehen: /raspberrypi//a/37976/34825. Sie verhält sich im Grunde genauso wie ich, außer dass der Knoten in / opt / installiert und Symlinks in / usr / bin / erstellt werden .

Grmpfhmbl
quelle
Vielen Dank für Ihre Antwort. Ich denke, ich werde 2 NodeJS (einen ArmV6 und einen ArmV7) installieren und einen Dienst hinzufügen, um beim Booten einen Symlink auf / usr / bin / node mit dem richtigen Node (in / usr / local / bin /) zu erstellen. node_armv6 oder / usr / local / bin / node_armv7)
4Taine
Das hat funktioniert, toll. konnte Node 7.7.4 auf meinem Pi Zero W installieren. Danke!
Kraig Walker
Für alle, die dies lesen: Sie möchten wahrscheinlich die neueste Knotenversion anstelle von Version 6.2.1. Ersetzen Sie einfach die Versionsnummer in allen Befehlen oben durch die von Ihnen gewählte Version von nodejs.org/dist
Camp bell
6

In einer Codezeile, neueste Version, für jeden Himbeer-Pi:

wget -O - https://raw.githubusercontent.com/audstanley/NodeJs-Raspberry-Pi/master/Install-Node.sh | sudo bash;
node -v;

Quellcode: https://github.com/audstanley/NodeJs-Raspberry-Pi/

Audstanley
quelle
Auf den ersten Blick scheint das Skript keine Überprüfung der geistigen Gesundheit zu enthalten. Ich würde sehr vorsichtig sein, dies nur als root auszuführen.
Grmpfhmbl
Dies löste mein Problem mit den veralteten Nodejs in armv6, als ich sie mitapt install
StefansArya
2

Die obige Lösung von Audstanley hat mir gefallen, obwohl sie bei mir nicht sofort funktioniert hat.

Ich stellte fest, dass ich das Skript mit Root-Zugriff ausführen musste.

Das hat bei mir funktioniert:

sudo bash
sudo wget -O - https://raw.githubusercontent.com/audstanley/NodeJs-Raspberry-Pi/master/Install-Node.sh | bash
exit
node -v
Daniel Muhlig
quelle
1
Es hat nicht funktioniert, weil Sie "wget" als root ausführen und nicht die Bash, die das Skript ausführt. Setzen Sie einfach das "sudo" nach der Pipe vor "bash".
Grmpfhmbl
1

Ich hatte das gleiche Problem und habe einige schnelle Bash-Skripte für die Installation von Knoten v4, v5 und v6.3.1 erstellt:

https://github.com/sdesalas/node-pi-zero

Sie sind für den Pi Zero, sollten aber für alle ARMv6-kompatiblen Chips (1A 1B) funktionieren. Tatsächlich sollte dies sogar auf den ARMv7-Chips (2B, 3B) funktionieren, da sie mit den älteren Binärdateien zufrieden sind .

Ich hoffe, Sie finden sie nützlich.

Steven de Salas
quelle
-1

Oder holen Sie sich die neueste Version:

NODE="$(curl -sL https://nodejs.org/dist/latest | grep 'armv6l.tar.xz' | cut -d'"' -f2)"
wget https://nodejs.org/dist/latest/$NODE
Pepe
quelle