Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [HowTo] Nodejs-Installation und Upgrades unter Debian

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    [HowTo] Nodejs-Installation und Upgrades unter Debian

    This topic has been deleted. Only users with topic management privileges can see it.
    • Thomas Braun
      Thomas Braun Most Active last edited by Thomas Braun

      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 mit

      sudo 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 mit

      sudo 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 mit

      iobroker 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 beherzten

      iobroker 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/
      
      paul53 Dr. Bakterius 2 Replies Last reply Reply Quote 28
      • Thomas Braun
        Thomas Braun Most Active last edited by Thomas Braun

        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 oder nvm 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 per

        uname -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)

        Homoran 1 Reply Last reply Reply Quote 4
        • Homoran
          Homoran Global Moderator Administrators @Thomas Braun last edited by

          MOD-EDIT: Diskussion wurde abgespalten und nach hier verschoben!

          Bitte nur noch dort weitere Posts eröffnen!

          1 Reply Last reply Reply Quote -1
          • M
            MichaelD 0 last edited by

            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

            Thomas Braun 1 Reply Last reply Reply Quote 0
            • Thomas Braun
              Thomas Braun Most Active @MichaelD 0 last edited by

              @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.

              1 Reply Last reply Reply Quote 1
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate
              FAQ Cloud / IOT
              HowTo: Node.js-Update
              HowTo: Backup/Restore
              Downloads
              BLOG

              498
              Online

              31.6k
              Users

              79.4k
              Topics

              1.3m
              Posts

              apt debian how-to howto node update raspberry
              4
              5
              94194
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo