Zainstaluj Node.js na karcie SD, aby działał na wszystkich modelach Pi

13

Pobieram ostatnią wersję raspbian (2016-05-27) na https://www.raspberrypi.org/downloads/raspbian/

Plik Node.js jest już zainstalowany w wersji 0.10.29, więc usunąłem go i ponownie go zainstalowałem

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

Ale chciałbym, aby moja karta SD działała na wszystkich modelach Raspberry Pi (Pi 1, 2, 3 i zero) Obecnie, kiedy robię

node -v

na Pi 1 lub na zero zero dostaję „nielegalną instrukcję”.

Moje pytanie brzmi: czy można zainstalować kopię Node.js na Pi, który działa na wszystkich modelach? A może v0.10.29 jest jedynym, który działa na wszystkich Pis?

4Taine
źródło
Jeśli pobierasz źródła z przypadkowych stron internetowych, musisz spodziewać się problemów. Co sprawia, że ​​uważasz, że wersja Node.js jest odpowiednia dla Raspberry Pi?
joan
To NIE jest przypadkowa strona internetowa, ale na którą wskazują oficjalne instrukcje instalacji nodejs. Zobacz moją odpowiedź.
Grmpfhmbl,

Odpowiedzi:

29

Powodem, dla którego to nie działa na twoim Raspberry Pi 1, jest to, że te pakiety są skompilowane dla niewłaściwego procesora - armhf (32-bitowy ARM hard-float, ARMv7 i nowsze: arm-linux-gnueabihf)

Więc pakiet powinien działać na twoim Pi2, ale nie na Pi1. Myślę, że nie ma szybkiego i łatwego sposobu na uzyskanie obrazu, który działa na obu. Jeśli chcesz zainstalować nowoczesny nodejs na swoim Pi1, pobierz poprawny plik tarball ze strony https://nodejs.org/dist/ Na przykład:

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

Ostatnie polecenie powinno zostać wydrukowane v6.2.1.

Teraz możesz skopiować go do / usr / local

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

Do testowania dodaj / usr / local / bin do swojej ścieżki

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

To powinno wydrukować 6.2.1i 3.9.3dla wersji nodejs i npm. Jeśli potrzebujesz innej wersji, po prostu wybierz tę, którą lubisz.

Nie zapomnij dodać ŚCIEŻKI do .bashrc, aby stała się trwała.

Aby znaleźć poprawną architekturę, możesz wpisać cat /proc/cpuinfoterminal, który powinien pokazywać coś podobnego

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

aktualizacja Właśnie zobaczyłem tę odpowiedź /raspberrypi//a/37976/34825, która zasadniczo robi to samo co ja, z wyjątkiem instalacji węzła w / opt / i tworzenia dowiązań symbolicznych w / usr / bin / .

Grmpfhmbl
źródło
dziękuję za odpowiedź, myślę, że zainstaluję 2 nodejs (jeden armv6 i jeden armv7) i dodam usługę do tworzenia przy uruchamianiu dowiązania symbolicznego na / usr / bin / node z odpowiednim węzłem (do / usr / local / bin / node_armv6 lub / usr / local / bin / node_armv7)
4
To działało, świetnie. udało mi się zainstalować Node 7.7.4 na moim Pi Zero W. Dzięki!
Kraig Walker,
Dla każdego, kto to czyta: Prawdopodobnie chcesz najnowszą wersję węzła zamiast wersji 6.2.1. Wystarczy zastąpić numer wersji we wszystkich powyższych poleceniach wybraną wersją z nodejs.org/dist
Camp bell
6

W jednym wierszu kodu, najnowsza wersja, dla dowolnego malinowego pi:

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

Kod źródłowy: https://github.com/audstanley/NodeJs-Raspberry-Pi/

Audstanley
źródło
Na pierwszy rzut oka wydaje się, że w skrypcie nie ma żadnych kontroli poczytalności. Byłbym bardzo ostrożny, aby uruchomić to jako root.
Grmpfhmbl
To rozwiązało mój problem dotyczący przestarzałych Nodejów w armv6 podczas instalacji zapt install
StefansArya
2

Podobało mi się powyższe rozwiązanie Audstanley, chociaż nie wyszło mi ono z pudełka.

Odkryłem, że muszę uruchomić skrypt z dostępem do konta root.

To działało dla mnie:

sudo bash
sudo wget -O - https://raw.githubusercontent.com/audstanley/NodeJs-Raspberry-Pi/master/Install-Node.sh | bash
exit
node -v
DanielMuhlig
źródło
1
Nie działało, ponieważ uruchamiasz „wget” jako root, a nie bash uruchamiający skrypt. Po prostu umieść „sudo” za fajką przed „bash”.
Grmpfhmbl
1

Miałem ten sam problem i zrobiłem kilka szybkich skryptów bash do instalowania węzłów v4, v5 i v6.3.1:

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

Są one przeznaczone dla Pi Zero, ale powinny działać dla wszystkich układów zgodnych z ARMv6 (1A 1B). W rzeczywistości powinno to nawet działać na układach ARMv7 (2B 3B), ponieważ są zadowolone ze starszych plików binarnych .

Mam nadzieję, że okażą się przydatne.

Steven de Salas
źródło
-1

Lub pobierz najnowszą wersję:

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