Instale Node.js en una tarjeta SD para funcionar en todos los modelos Pi

13

Descargo la última versión de raspbian (2016-05-27) en https://www.raspberrypi.org/downloads/raspbian/

Node.js ya está instalado con la versión 0.10.29, así que lo eliminé y lo reinstalé con

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

Pero me gustaría que mi tarjeta SD funcione en todos los modelos de Raspberry Pi (Pi 1, 2, 3 y Zero) Actualmente, cuando hago un

node -v

en un Pi 1 o en un Pi cero, recibo una "instrucción ilegal".

Mi pregunta es: ¿es posible instalar una copia de Node.js en un Pi que funcione en todos los modelos? ¿O es v0.10.29 el único que funciona en todos los Pis?

4Taine
fuente
Si descarga fuentes de sitios web aleatorios, debe esperar problemas. ¿Qué te hace pensar que la versión de Node.js es adecuada para Raspberry Pi?
joan
Este NO es un sitio web aleatorio, pero donde las instrucciones oficiales de instalación de nodejs le indican. Descansa, mira mi respuesta.
Grmpfhmbl

Respuestas:

29

La razón por la cual esto no funciona en su Raspberry Pi 1 es que estos paquetes están compilados para la CPU incorrecta: armhf (ARM 32-bit hard-float, ARMv7 y superior: arm-linux-gnueabihf)

Por lo tanto, el paquete debería funcionar en su Pi2 pero no en el Pi1. Supongo que no hay una forma rápida y fácil de obtener una imagen que se ejecute en ambos. Si desea instalar un nodejs moderno en su Pi1, descargue el tarball correcto desde https://nodejs.org/dist/ Por ejemplo:

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

El último comando debería imprimir v6.2.1.

Ahora puede copiarlo a / usr / local

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

Para probar, agregue / usr / local / bin a su ruta

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

Esto debería imprimirse 6.2.1y 3.9.3para las versiones de nodejs y npm. Si necesita una versión diferente, simplemente elija la que le guste de las descargas.

No olvides agregar la RUTA a tu .bashrc para que sea permanente.

Para encontrar la arquitectura correcta, puede escribir cat /proc/cpuinfouna terminal y eso debería mostrar algo como

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

actualización Acabo de ver esta respuesta /raspberrypi//a/37976/34825 que básicamente hace lo mismo que yo, excepto instalar el nodo en / opt / y crear enlaces simbólicos en / usr / bin / .

Grmpfhmbl
fuente
gracias por su respuesta, creo que instalaré 2 nodejs (uno armv6 y otro armv7) y agregaré un servicio para crear en el arranque un enlace simbólico en / usr / bin / node con el nodo correcto (en / usr / local / bin / node_armv6 o / usr / local / bin / node_armv7)
4Taine
Eso funcionó, genial. logré instalar el Nodo 7.7.4 en mi Pi Zero W. ¡Gracias!
Kraig Walker
Para quien lea esto: Probablemente desee la versión de nodo más nueva en lugar de la versión 6.2.1. Simplemente reemplace el número de versión en todos los comandos anteriores con su versión elegida de nodejs.org/dist
Campana
6

En una línea de código, última versión, para cualquier raspberry pi:

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

Código fuente: https://github.com/audstanley/NodeJs-Raspberry-Pi/

Audstanley
fuente
A primera vista, parece que no hay controles de cordura en el guión. Tendría mucho cuidado de ejecutar esto como root.
Grmpfhmbl
Esto estaba resolviendo mi problema sobre los Nodejs obsoletos en armv6 cuando se instalaba conapt install
StefansArya
2

Me gustó la solución de Audstanley anterior, aunque no funcionó para mí de inmediato.

Descubrí que necesitaba ejecutar el script con acceso root.

Esto funcionó para mí:

sudo bash
sudo wget -O - https://raw.githubusercontent.com/audstanley/NodeJs-Raspberry-Pi/master/Install-Node.sh | bash
exit
node -v
DanielMuhlig
fuente
1
No funcionó porque ejecuta "wget" como root y no como el bash que ejecuta el script. Simplemente ponga el "sudo" después de la tubería frente a "bash".
Grmpfhmbl
-1

O obtenga la última versión:

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