NEWS
[HowTo] Nodejs-Installation und Upgrades unter Debian
-
Die nachfolgende Anleitung steht nur noch aus historischen Gründen hier. Mittlerweile führt man am besten einen Wechsel der Version per
iob nodejs-update
durch. Gegebenfalls zuvor per
iob fix
den Befehl noch bekannt machen.Teil 1: Installation und Update
Teil 2: Installationen geradeziehen (siehe 2. Posting im Thread)Vorwort:
Bis auf Ausnahmefälle (z. B. bei Docker auf einer Synology) wird ein auf Debian basierendes System seit Jahren NICHT mehr per direktem root-login administriert, sondern als normaler user mittels 'sudo'. Solche login prompts sind also unnötig und 'gefährlich':root@raspberrypi:~#
Nicht machen!
HINWEIS:
Das derzeitig empfohlene nodeJS-Paket ist Node 18 inklusive npm 9 (Stand 30.08.2023)Niemals ungerade Versionsnummern bei nodeJS verwenden, das sind ausschließlich Versionen für Entwickler und haben in einem stabilen System nichts zu suchen.
Für alte Raspberrys, die auf der armv6 Prozessor-Architektur basieren (Zero // Zero W / WH // 1 Mod. A // 1 Mod. A+ // 1 Mod. B // 1 Mod. B+) muss man etwas unschön selber Hand anlegen, da gibt es keinen offiziellen Support mehr. Siehe hier am Ende dieses Eintrags.
Nun zum Thema
TEIL 1 Installation und Update von nodejs
Node Installation bzw. Update unter Linux / Debian (und artverwandtem wie z. B. Raspbian / Rasberry OS / ubuntu) mit apt
Für eine Node-Erstinstallation:
Alt-Installationen entfernen:
Debian/RaspberryOS/Ubuntu und artverwandtes:
Alt- und Vorinstallationen (z. B. die dfsg-Version von nodejs) entfernen.sudo apt purge --autoremove nodejs* npm node-* libnode*
Achtung, bei nodesource hat sich nun (31.08.2023) einiges geändert und bereits bestehende Setups müssen geändert werden.
Dazu löscht man die bestehenden Dinge und legt alles frisch neu an.Altlasten rauswerfen:
sudo rm `sudo find / -name nodesource.gpg` sudo rm `sudo find / -name nodesource.key` sudo rm /etc/apt/sources.list.d/nodesource.list
Dann das nodesource-Repository wieder anlegen lassen:
NODE_MAJOR=18 sudo apt update sudo apt install -y ca-certificates curl gnupg sudo mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_MAJOR}.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list sudo apt update sudo apt install nodejs
Die gewünschte Version ggfls. anpassen, also statt
NODE_MAJOR=18
entsprechend 18 durch den gewünschten Versionszweig (z.B. 16) ersetzen.
Wobei das bei einem komplett frischen Debian nicht mal erforderlich ist, der iobroker-Installer installiert ohnehin eine passende Version von nodejs, wenn noch nicht vorhanden.Es ist übrigens hier nicht erforderlich, ein Paket 'node' oder 'npm' separat zu installieren, das ist schon im Paket 'nodejs' enthalten. Das gilt dann natürlich im weiteren auch für Upgrades/Updates von node.
Node-Update:
Wenn bereits eine Version von nodejs über den obigen Weg installiert wurde kann man Updates innerhalb der jeweiligen Version von nodejs mitsudo apt update sudo apt upgrade
vornehmen. In einem wird dann auch der Rest vom System aktualisiert.
Wenn neue, zusätzliche Pakete für die Installation erforderlich sind (passiert seltener, meist bei Kernel-Updates) muss man ggf. alternativ mitsudo apt full-upgrade
arbeiten. Das System meckert in dem Fall aber, wenn man zuerst mit apt upgrade versucht hat. Der Einfachheit halber am besten nach dem System-Upgrade mal per
sudo reboot
neustarten. Insbesondere bei 'mitgefangenen' Kernel-Updates sollte man das tun.
Teil 1.1 Node-Upgrade/ Wechsel der nodejs-Version:
Vor dem Wechsel der node-Version legen wir mitiobroker stop
den iobroker kurz auf Eis.
Die persönliche Abwandlung von mir bei Wechseln/Upgrades der nodejs-Version:
Die oben vorgenommenen Schritte (auch per iobroker-Installer) führen dazu, dass es eine Datei nodesource.list gibt, die das nodesource-Repository beinhaltet. Um die Version zu wechseln fügt man dort einfach eine passende Zeile ein. Ich habe da derzeitig 2 Quellen drin. Mit dem Editor nano kann man das recht einfach anpassen:sudo nano /etc/apt/sources.list.d/nodesource.list
Die Datei wird dann etwa so aussehen:
#node 16 deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x nodistro main #node 18 deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main
(Darauf achten, dass die letzte Zeile mit einem ‚ENTER‘ abgeschlossen wird. Sonst gibt es beim üblichen Update-Zweisatz
sudo apt update sudo apt full-upgrade
eine Fehlermeldung, dass am Ende ein Zeilensprung fehlen würde. So sinngemäß jedenfalls...
Jetzt hat man mehrere Möglichkeiten die gewünschte node-Version zu ändern.
Der Paketmanager apt wird in diesem Setup bei einem normalen Update immer die höchste Versionsnummer installieren, hier also eine 18.x
Man kann aber auch die Quelle temporär ausschalten, dazu einfach ein # vor die entsprechende Zeile setzen, dann wird die bei einem apt update übergangen und nur als Kommentar verstanden.Eine recht freie Auswahl bei den node-Versionen hat man, wenn man per
apt policy nodejs
schaut, was in den einzelnen Repos zur Verfügung steht. Kann dann z. B. so aussehen:
echad@chet:/opt/iobroker $ apt policy nodejs nodejs: Installed: 16.15.1-deb-1nodesource1 Candidate: 16.15.1-deb-1nodesource1 Version table: *** 16.15.1-deb-1nodesource1 500 500 https://deb.nodesource.com/node_16.x bullseye/main arm64 Packages 100 /var/lib/dpkg/status 14.19.3-deb-1nodesource1 500 500 https://deb.nodesource.com/node_14.x bullseye/main arm64 Packages 12.22.5~dfsg-2~11u1 500 500 http://deb.debian.org/debian bullseye/main arm64 Packages 500 http://security.debian.org/debian-security bullseye-security/main arm64 Packages
Per
sudo apt install nodejs=VERSIONSNUMMER-deb-1nodesource1
(Die 500 ist nicht Bestandteil der Versionsnummer!)
kann man eine exakte Version dann installieren. Achtung, wenn das Repo mit einer höheren Version nicht deaktiviert wird kommt beim nächsten apt update / apt upgrade natürlich die höhere Version mit. (Könnte man per Pinning auch noch feiner einstellen, führt aber hier zuweit...)
Eine künftige Version von nodejs würde ich z. B. bei Bedarf dann einfach durch simples Ersetzen einer der nicht mehr benötigten Versionsnummern oder durch hinzufügen einer entsprechenden neuen Zeile für diese Version in der nodesource.list heranziehen.
Check:
Wenn alles sauber gelaufen ist sollte bei
uname -m && type -P nodejs node npm npx corepack && nodejs -v && node -v && npm -v && npx -v && corepack -v && iob -v && whoami && groups && echo $XDG_SESSION_TYPE && pwd && sudo apt update &> /dev/null && sudo apt update && apt policy nodejs
die Ausgabe etwa so aussehen:
pi@mysterium:~ $ uname -m && type -P nodejs node npm && nodejs -v && node -v && npm -v && iob -v && whoami && groups && pwd && sudo apt-get update &> /dev/null && sudo apt-get update && apt-cache policy nodejs armv7l Kein Docker /usr/bin/nodejs /usr/bin/node /usr/bin/npm /usr/bin/npx /usr/bin/corepack v18.15.0 v18.15.0 9.6.0 9.6.0 0.19.0 pi pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi iobroker wmbusmeters tty /home/pi Hit:1 http://deb.debian.org/debian unstable InRelease Hit:2 http://raspbian.raspberrypi.org/raspbian bullseye InRelease Hit:3 http://phoscon.de/apt/deconz bullseye InRelease Hit:4 http://archive.raspberrypi.org/debian bullseye InRelease Hit:5 https://deb.nodesource.com/node_16.x bullseye InRelease Hit:6 https://deb.nodesource.com/node_18.x bullseye InRelease Hit:7 https://packagecloud.io/ookla/speedtest-cli/debian bullseye InRelease Fetched 5,545 B in 3s (1,693 B/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. nodejs: Installed: 18.15.0-deb-1nodesource1 Candidate: 18.15.0-deb-1nodesource1 Version table: *** 18.15.0-deb-1nodesource1 500 500 https://deb.nodesource.com/node_18.x bullseye/main armhf Packages 100 /var/lib/dpkg/status 16.20.0-deb-1nodesource1 500 500 https://deb.nodesource.com/node_16.x bullseye/main armhf Packages 12.22.12~dfsg-1~deb11u1 500 500 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf Packages pi@mysterium:~ $
Falls zu nodejs nichts gemeldet wird oder Teile der obigen Ausgabe nicht erscheinen bitte noch nodejs und node verlinken:
sudo ln -s /usr/bin/node /usr/bin/nodejs
Wichtig und richtig ist:
nodejs liegt in /usr/bin
node liegt in /usr/bin
npm liegt in /usr/bin
npx liegt in /usr/bin
corepack liegt in /usr/bin
und die Versionsnummern von nodejs und node sowie von npm und npx stimmen jeweils überein.Falsch ist eine Installation in /usr/local/bin oder irgendwelchen anderen Verzeichnissen als /usr/bin
Final lassen wir den
iobroker fix
noch laufen, damit ggf. die sogenannten capabilities auf die nun laufende node-Version angepasst werden.
Mit einem beherzteniobroker start
rufen wir den Broker ins Leben zurück.
---- ENDE ---- ENDE ---- ENDE ---- ENDE
*** SONDERFALL ***
für linux-x64-musl / linux-x86 / linux-armv6l / Unofficial node-Builds
Z. B. alte Raspberry Pi müssen händisch gepflegt werden.
Das kann man dann so machen:Zunächst schauen, ob andere Versionen installiert sind:
type -P nodejs node npm && nodejs -v && node -v && npm -v && apt policy nodejs
Die dann deinstallieren:
sudo apt purge --autoremove nodejs* npm node-* libnode*
bzw. wenn die nicht per apt remove zu entfernen sind und irgendwo anders im Pfad liegen per
sudo rm /pfad/zu/nodejs sudo rm /pfad/zu/node sudo rm /pfad/zu/npm
Aktuelle node-VERSION in das System setzen (aktuellste vVERSION-Nummer bitte selber herausfinden...):
wget https://unofficial-builds.nodejs.org/download/release/vVERSION/node-vVERSION-linux-armv6l.tar.xz tar -xvf node-vVERSION-linux-armv6l.tar.xz cd node-vVERSION-linux-armv6l/ sudo cp -R * /usr/local/ sudo ln -s /usr/local/bin/node /usr/local/bin/nodejs sudo apt update sudo apt full-upgrade sudo apt autoremove sudo reboot
Nachteil der Vorgehensweise ist, dass Updates nicht vom Paketmanager wahrgenommen werden und man selber bei Bedarf diese Schritte mit der jeweiligen Version jedesmal durchlaufen muss.
Die Version von node liegt dann auch in /usr/local/bin, das ist in dem Fall entgegen meiner obigen Aussage dann in Ordnung bei alten Raspberry.NOTFALL - INSTALLATION (nicht empfohlen! / Versionen/Pfade sind anzupassen!)
iobroker stop sudo killall node cd ~ && mkdir nodejsinstall && cd nodejsinstall wget https://nodejs.org/dist/v18.5.0/node-v18.5.0-linux-arm64.tar.xz tar -xf node-v18.5.0-linux-arm64.tar.xz cd node-v18.5.0-linux-arm64/ sudo cp -r * /usr/
-
Teil 2: Installationen geradeziehen
Nach upgrade auf nodeJS16 / npm 8 können keine Adapter mehr installiert werden und bei einer Installation mit aktivierter --debug Option werden diverse Verzeichnisse zum umbenennen vorgeschlagen
Diese Verzeichnisse können gelöscht werden. Am schnellsten geht das per folgendem Einzeiler:
for i in $(find /opt/iobroker/node_modules -type d -iname ".*-????????" ! -iname ".local-chromium"); do rm -rf ${i%/}; done
Und was mache ich, wenn die Installation nicht so aussieht?
Auf nodejs -v erfolgt keine Ausgabe oder eine Fehlermeldung
Bitte diese Verlinkung noch nachtragen:sudo ln -s /usr/bin/node /usr/bin/nodejs
Szenario 1 / falsche Pfade
Wenn der Test auf 'ordentliche' Installation über
uname -m && type -P nodejs node npm npx corepack && nodejs -v && node -v && npm -v && npx -v && corepack -v && iob -v && whoami && groups && echo $XDG_SESSION_TYPE && pwd && sudo apt-get update &> /dev/null && sudo apt-get update && apt-cache policy nodejs
andere Verzeichnisse als /usr/bin für eines der fünf Elemente (nodejs, node, npm, npx oder corepack) zeigt, dann ist da meist 'irgendwas' manuell von 'irgendwoher' installiert worden, sei es per
n
odernvm
oder einem sonstigen Tool.
Diese Dateien dann von Hand löschen.sudo rm /pfad/zu/der/falschen/datei
Wenn die Datei dann beim Aufruf des Test (kann man übrigens mit der 'Pfeil nach Oben'-Taste im Terminal flugs wieder aufrufen, man muss das also nicht wiederholt alles neutippen, Linuxer sind ja faul) nicht mehr angezeigt wird kann man 'nodejs' dann wie im ersten Posting installieren, man sollte jedoch in diesem Fall ein 'reinstall' über apt durchführen:
sudo apt install nodejs --reinstall
Es ist möglich, dass die frisch korrekt installierte Version noch nicht im sogenannten $PATH für die user auftaucht. Da einfach ganz pragmatisch mal neustarten, dann wird der $PATH für alle user neu eingelesen.
Falls man jemals über eine solche Meldung in der Konsole stolpern sollte:
╭───────────────────────────────────────────────────────────────╮ │ │ │ New major version of npm available! 6.14.11 → 7.6.1 │ │ Changelog: https://github.com/npm/cli/releases/tag/v7.6.1 │ │ Run npm install -g npm to update! │ │ │ ╰───────────────────────────────────────────────────────────────╯
Finger weg und ignorieren! npm wird am besten nur wie üblich via apt (ist im Paket nodejs enthalten) aktuell gehalten. Dann passt die Version auch zum Rest.
Szenario 2 / eine aktuelle Version wird nicht zur Installation angeboten
Wenn nach den ordnungsgemäßen Einstellungen aus Posting 1 wider Erwarten keine aktuelle Version über die Paketverwaltung 'apt' angeboten wird kann es sein, dass ein System auf einer alten Prozessorarchitektur (i386 oder armv6l) und/oder einer steinalten Linux/Debian-Version läuft.
Kann man peruname -a
und
lsb_release -a
herausfinden. Meist ist es da allerhöchste Zeit das Gesamtsystem in die Hand zu nehmen. 32bit (i386) wird nur noch von wenigen darauf spezialisierten Distributionen in aktueller Form unterstützt, nodesource baut seit node10 nicht mehr dafür. Bevor man da riesige Klimmzüge macht (ein Wechsel der Prozessor-Architektur ist nicht per simplem Upgrade möglich) ist es in der Regel wesentlich einfacher ein Backup des iobrokers zu ziehen (z. B. über den Backitup-Adapter), das System neuaufzubauen und dann das Backup in einen leeren ioBroker wieder einzuspielen.
Oder man versucht sein Glück mit einem Unofficial Build für linux-x64-musl / linux-x86 / linux-armv6l:
https://github.com/nodejs/unofficial-builds/Wird dann sinngemäß wie am Ende des ersten Postings durchgeführt. Empfehlen kann ich das Vorgehen allerdings nicht.
(Wird bei Bedarf laufend um weitere Szenarien ergänzt)
-
MOD-EDIT: Diskussion wurde abgespalten und nach hier verschoben!
Bitte nur noch dort weitere Posts eröffnen!
-
Guten Abend,
ich bin kein Experte und beim update auf nodejs-update über "iob nodejs-update" endet das reproduzierbar mit dem Fehler, dass der IOB nicht mehr startet:
node: /lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by node)Hat jemand eine Idee, was ich falsche mache?
Vielen Dank für die Hilfe
Michael -
@michaeld-0 sagte in [HowTo] Nodejs-Installation und Upgrades unter Debian:
Hat jemand eine Idee, was ich falsche mache?
Ja. Du verwendest ein geraume Zeit abgekündigtes Betriebssystem.
iob nodejs-update 18
Dann alles beim ioBroker auf Stand bringen, davon ein Backup ziehen und damit in ein NEUINSTALLIERTES aktuelles RaspberryOS 12 'Bookworm' umziehen.