Установите Node.js на SD-карту, чтобы работать на всех моделях Pi

13

Я загружаю последнюю распбианскую версию (2016-05-27) на https://www.raspberrypi.org/downloads/raspbian/

Node.js уже установлен с версией 0.10.29, поэтому я удалил его и переустановил с

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

Но я бы хотел, чтобы моя SD-карта работала на всех моделях Raspberry Pi (Pi 1, 2, 3 и Zero). В настоящее время, когда я делаю

node -v

на Pi 1 или на Pi ноль я получаю «недопустимую инструкцию».

Мой вопрос: можно ли установить копию Node.js на Pi, который работает на всех моделях? Или v0.10.29 единственный, который работает на всех Pis?

4Taine
источник
Если вы загружаете источники со случайных веб-сайтов, вы должны ожидать проблем. С чего вы взяли, что версия Node.js подходит для Raspberry Pi?
Джоан
Это НЕ случайный сайт, но там, где указывают официальные инструкции по установке nodejs. Отдыхай посмотри мой ответ.
Grmpfhmbl

Ответы:

29

Причина, по которой это не работает на вашем Raspberry Pi 1, состоит в том, что эти пакеты скомпилированы для неправильного процессора - armhf (32-битный hard-float ARM, ARMv7 и выше: arm-linux-gnueabihf)

Таким образом, пакет должен работать на вашем Pi2, но не на Pi1. Я думаю, что нет быстрого и простого способа получить изображение, которое работает на обоих. Если вы хотите установить современный nodejs на свой Pi1, загрузите правильный tarball с https://nodejs.org/dist/ Например:

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

Последняя команда должна напечатать v6.2.1.

Теперь вы можете скопировать его в / usr / local

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

Для тестирования добавьте / usr / local / bin к вашему пути

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

Это должно печатать 6.2.1и 3.9.3для версий nodejs и npm. Если вам нужна другая версия, просто выберите ту, которая вам нравится, из загрузок.

Не забудьте добавить PATH в ваш .bashrc, чтобы сделать его постоянным.

Чтобы найти правильную архитектуру, вы можете набрать cat /proc/cpuinfoв терминале, и это должно показать что-то вроде

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

Обновление Только что увидел этот ответ /raspberrypi//a/37976/34825, который в основном делает то же самое, что и я, за исключением установки узла в / opt / и создания символических ссылок в / usr / bin / .

Grmpfhmbl
источник
спасибо за ваш ответ, я думаю, что я установлю 2 nodejs (один armv6 и один armv7) и добавлю сервис для создания при загрузке символической ссылки на / usr / bin / node с правильным узлом (в / usr / local / bin / node_armv6 или / usr / local / bin / node_armv7)
4
Это сработало, отлично. удалось установить Node 7.7.4 на мой Pi Zero W. Спасибо!
Крейг Уокер
Для тех, кто читает это: Вы, вероятно, хотите самую новую версию узла вместо версии 6.2.1. Просто замените номер версии во всех вышеприведенных командах на выбранную вами версию с nodejs.org/dist
Camp bell
6

В одной строке кода, последняя версия, для любого Raspberry Pi:

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

Исходный код: https://github.com/audstanley/NodeJs-Raspberry-Pi/

Audstanley
источник
На первый взгляд кажется, что в сценарии нет никаких проверок работоспособности. Я был бы очень осторожен, чтобы просто запустить это как root.
Grmpfhmbl
Это решало мою проблему с устаревшими Nodejs в armv6 при установке сapt install
StefansArya
2

Мне понравилось решение Audstanley выше, хотя оно не работало для меня из коробки.

Я обнаружил, что мне нужно запустить скрипт с правами root.

Это сработало для меня:

sudo bash
sudo wget -O - https://raw.githubusercontent.com/audstanley/NodeJs-Raspberry-Pi/master/Install-Node.sh | bash
exit
node -v
DanielMuhlig
источник
1
Это не сработало, потому что вы запускаете "wget" от имени пользователя root, а не bash, который запускает скрипт. Просто поместите "sudo" после трубы перед "bash".
Grmpfhmbl
1

У меня была та же проблема и я сделал несколько быстрых скриптов bash для установки узлов v4, v5 и v6.3.1:

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

Они предназначены для Pi Zero, но должны работать на всех чипах, совместимых с ARMv6 (1A 1B). На самом деле это должно работать даже на чипах ARMv7 (2B 3B), поскольку они удовлетворены старыми двоичными файлами .

Надеюсь, вы найдете их полезными.

Стивен де Салас
источник
-1

Или получите последнюю версию:

NODE="$(curl -sL https://nodejs.org/dist/latest | grep 'armv6l.tar.xz' | cut -d'"' -f2)"
wget https://nodejs.org/dist/latest/$NODE
Pepe
источник