NEWS
Update NodeJS best practise, supported 16 und 18!
-
Hi Community,
Jedes Jahr geht eine Node.js Version in den sogenannten EOL (End-Of-Live) Status, wodurch diese Version(en) nicht mehr weiterentwickelt werden.
Seht dies als ein Grundgerüst eures Systems, vergleichbar mit einem Windows XP was man nicht mehr benutzten sollteDa wir uns ständig darum bemühen euch die beste Stabilität, neuesten Features aber auch Sicherheit relevanten Updates zu garantieren, wird ab js-controller 5.x (release geplant 2tes Quartal 2023!) nur noch die folgenden Node.js Versionen unterstützt:
- Node.js 16.4.0 oder höher
- Node.js 18.x
Eine Übersicht der aktuellen (und geplanten) Versionen zu NodeJS findet ihr hier: https://github.com/nodejs/release#release-schedule
Wir empfehlen bezüglich NPM immer die Version zu benutzen, die mit der Node.js Version standardmäßig mitgeliefert, mit anderen Worten installiert, wird. Gesonderte npm pdates sind an sich nicht nötig.
Alle älteren Versionen werden nicht mehr unterstützt! Das heisst ein update auf js-controller 5.x wird nur möglich sein mit node 14.18.0 (oder höher!)
Wie aktualisiere ich meine Node.js Version ?
- Native Installation auf Linux, siehe dieses topic
- Docker: https://docs.buanet.de/de/iobroker-docker-image/docs/#wartung
- Windows: https://forum.iobroker.net/post/963711
1 Erstens immer ein Backup !
Wir ein bekanntes Sprichwort unter IT-Nerds: Ohne backup ... kein Mitleid. Sorgt also bitte immer dafür, bei derartigen großen Änderungen an euren System, das ihr ein aktuelles Backup habt und dieses auch extern erreichbar ist und sich nicht nur auf dem System selber befindet !
Hierfür eignet sich am besten der Adapter Backit-up, dieser bietet euch die Möglichkeit den kompletten ioBroker zu sichern inklusive euren Skripten, Adapter etc.
2 Erstmal alle ioBroker Dienste anhalten, ab hier benötigt ihr SSH Zugang zu eurem System
Bevor wir loslegen, sollte alle ioBroker relevanten Prozesse erstmal angehalten werden. Das geht am einfachsten durch:
- Einloggen auf der console per ssh, tip: Schaut euch mal MobaXtherm an ein tool womit man SSH Verbindungen sehr leicht managen kann
- Danach sollte diese Befehle ausreichend sein ioBroker an zu halten:
iob stop
Sollte diese Befehl nicht klappen, probiert es bitte mit:
cd /opt/iobroker iobroker stop
Alte NodeJS Version löschen
Mit diesem Befehl wird Node.js von euren System gelöscht werden
sudo apt purge --autoremove nodejs* npm node-*
Auf der console sollte dann ein vergleichbare Nachricht kommen die alle Pakete summiert die gelöscht werden, diese bestätigen wir mit y
sudo apt purge --autoremove nodejs npm Reading package lists... Done Building dependency tree... Done Reading state information... Done Package 'npm' is not installed, so not removed The following packages will be REMOVED: libpython2-dev* libpython2-stdlib* libpython2.7* libpython2.7-dev* libpython2.7-minimal* libpython2.7-stdlib* nodejs* python2* python2-dev* python2-minimal* python2.7* python2.7-dev* python2.7-minimal* 0 upgraded, 0 newly installed, 13 to remove and 72 not upgraded. After this operation, 161 MB disk space will be freed. Do you want to continue? [Y/n]
Glückwunsch, die jetzigen Node.js Version wurde vom System gelöscht
3 Das richtige Repository installieren
Jetzt müssen wir dafür sorgen das unser System versteht welche Node.js Version wir verwenden möchten. Der folgende Befehl lädt die entsprechende Node.js Repositories, beachtet dabei bitte die Versions Nummer.
Wir empfehlen die jetzige LTS Version 18.x, der Befehl dazu lautet:curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
Das Ergebnis sollte ungefähr so aussehen:
## Confirming "jammy" is supported... + curl -sLf -o /dev/null 'https://deb.nodesource.com/node_18.x/dists/jammy/Release' ## Adding the NodeSource signing key to your keyring... + curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | tee /usr/share/keyrings/nodesource.gpg >/dev/null ## Creating apt sources list file for the NodeSource Node.js 18.x repo... + echo 'deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x jammy main' > /etc/apt/sources.list.d/nodesource.list + echo 'deb-src [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x jammy main' >> /etc/apt/sources.list.d/nodesource.list ## Running `apt-get update` for you... + apt-get update Get:1 https://deb.nodesource.com/node_18.x jammy InRelease [4563 B] Get:2 https://deb.nodesource.com/node_18.x jammy/main amd64 Packages [776 B] Hit:3 http://archive.ubuntu.com/ubuntu jammy InRelease Hit:4 http://archive.ubuntu.com/ubuntu jammy-updates InRelease Hit:5 http://archive.ubuntu.com/ubuntu jammy-security InRelease Fetched 5339 B in 0s (11.9 kB/s) Reading package lists... Done ## Run `sudo apt-get install -y nodejs` to install Node.js 18.x and npm ## You may also need development tools to build native addons: sudo apt-get install gcc g++ make ## To install the Yarn package manager, run: curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update && sudo apt-get install yarn
Node.js wurde jetzt noch nicht installiert, nur vorbereitet. Beachte bitte diesen teil:
## Confirming "XXXXX" is supported...
Sollte dort stehen XXX (eure Linux version) not supported, ist euer System zu alt (z.b. Debian 8-Jessie oder 9-Stretch) und diese Node.js Version kann nicht installiert werden.In diesem Fall kann man eine ältere probieren, z.b. 16, aber niemals niedriger als 14.18 (da nicht supported!).
Es ist aber auch der Zeitpunkt mal drüber nach zu denken ob mein sein OS nicht updaten sollte, nur mal so als TippAls nächstes muss Node.js selber noch installiert werden (nur wenn der vorige Befehl erfolgreich war!), dazu geben wir die befehle:
sudo apt install -y nodejs
Eine erfolgreiche Installation sollte ungefähr so aussehen:
sudo apt-get install -y nodejs Reading package lists... Done Building dependency tree... Done Reading state information... Done The following NEW packages will be installed: nodejs 0 upgraded, 1 newly installed, 0 to remove and 99 not upgraded. Need to get 28.7 MB of archives. After this operation, 187 MB of additional disk space will be used. Get:1 https://deb.nodesource.com/node_18.x jammy/main amd64 nodejs amd64 18.15.0-deb-1nodesource1 [28.7 MB] Fetched 28.7 MB in 0s (76.9 MB/s) Selecting previously unselected package nodejs. (Reading database ... 34655 files and directories currently installed.) Preparing to unpack .../nodejs_18.15.0-deb-1nodesource1_amd64.deb ... Unpacking nodejs (18.15.0-deb-1nodesource1) ... Setting up nodejs (18.15.0-deb-1nodesource1) ... Processing triggers for man-db (2.10.2-1) ...
Zur Sicherheit überprüfen wir jetzt ob auch wirklich die richtige Version installiert wurde, das geht mit
sudo ln -s /usr/bin/node /usr/bin/nodejs &> /dev/null type -P nodejs node npm npx && nodejs -v && node -v && npm -v && npx -v
und ergibt eine Ausgabe wie
/usr/bin/nodejs /usr/bin/node /usr/bin/npm /usr/bin/npx v18.15.0 v18.15.0 9.50.0 9.50.0
Wichtig dabei ist:
- nodejs liegt in /usr/bin
- node liegt in /usr/bin
- npm liegt in /usr/bin
- npx liegt in /usr/bin
- 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
4 ioBroker für den ersten Start vorbereiten
Da ein Node.js update dafür sorgen kann das Berechtigungen neu gesetzt werden müssen. Dafür den Befehl
iob fix
eingeben,Probieren, das Ergebnis sollte so aussehen
iob fix library: loaded Library version=2022-12-09 ========================================================================== Welcome to the ioBroker installation fixer! Script version: 2022-12-22 ========================================================================== ========================================================================== Installing prerequisites (1/4) ========================================================================== Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease Hit:2 https://deb.nodesource.com/node_18.x jammy InRelease Hit:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease Hit:4 http://archive.ubuntu.com/ubuntu jammy-security InRelease Reading package lists... Done Installed gcc-c++ ========================================================================== Checking ioBroker user and directory permissions (2/4) ========================================================================== Created /etc/sudoers.d/iobroker Fixing directory permissions... ========================================================================== Database maintenance (3/4) ========================================================================== Checking for uncompressed JSONL databases... This might take a while! Compressing /opt/iobroker/iobroker-data/objects.jsonl Compressed 1 JSONL files. Done ========================================================================== Checking autostart (4/4) ========================================================================== Enabling autostart... Autostart enabled! ========================================================================== Your installation was fixed successfully Run iobroker start to start ioBroker again! ==========================================================================
5 ioBroker wieder Starten
Herzlichen Glückwunsch, euer System ist jetzt auf den neuesten Major-Stand bezüglich Node.js. Alle weiteren Updates die regelmäßig per "apt update" kommen sind dann problemlos.
In einem jahr kommen wir dann ggf zum nächsten Major Update !Jetzt nur noch ioBroker wieder starten:
iob start
Beim ersten Start kann es sein das einzelne Adapter erkannt werden, bei denen binäre Bestandteile neu erstellt werden müssen. Diese Adapter loggen ggf Fehler im Log und beenden sich beim ersten Start wieder. Dann werden diese versucht zu korrigieren, was einen Augenblick dauern kann. Falls ein Adapter auch nach 3 versuchen noch nicht wieder starte bitte im Log nach weiteren Anweisungen schauen und ggf im Diskussions-Thred melden.
Weitere Informationen sind auch im Vorgänger-Thread https://forum.iobroker.net/topic/44566/how-to-node-js-iobroker-richtig-updaten-2021-22-edition (Abschnitt "Erster ioBroker Neustart NACH Update") zu finden!
Troubleshooting
Da es fast unmöglich ist alle NodeJS relevanten update Fehler in einer FAQ fest zu legen, bitte diesen thread euer eventuelle Fragen beziehungsweise Troubleshooting verwenden. Ein oft verkommenes Thema ist das die jetzige Linux-Version zu alt ist, in diesem Fall ist es leider notwendig erst einmal euer System zu updaten.
Abhängig von der Performance ist ein update eventuell nicht effizient und würde eine neu Installation schneller verlaufen. Ein Backup/Restore eurer jetzigen Installation sollte mit Backit-up ausgeführt werden.