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

    • Update NodeJS best practise, supported 14, 16 und 18!

    • Bestätigt/Acknowledged-Flag Bedeutung - ein Mysterium ;-)

    • Update js-controller 4.0.24 (Stable)

    [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

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

      HINWEIS: ACHTUNG BEIM UPGRADE AUF NODE.js 16!!!

      Ein Upgrade von Vorversionen auf die Version 16 / npm 8 (oder höhere Versionen) erfordert im Vorfeld einen sauberen 'npm tree'!!!.
      Diesen kann man mit dem Kommando

      cd /opt/iobroker
      npm ls | grep -E 'github|ERR'
      

      prüfen. Im Idealfall wird nichts zurückgeliefert und der 'tree' schaut etwa so aus:

      echad@chet:/opt/iobroker $ npm ls
      iobroker.inst@3.0.0 /opt/iobroker
      ├── iobroker.admin@6.2.3
      ├── iobroker.alexa2@3.18.2
      ├── iobroker.alias-manager@1.2.6
      ├── iobroker.backitup@2.4.10
      ├── iobroker.ble@0.13.0
      ├── iobroker.echarts@1.0.12
      ├── iobroker.followthesun@0.3.9
      ├── iobroker.history@2.1.7
      ├── iobroker.ical@1.13.1
      ├── iobroker.info@1.9.19
      ├── iobroker.iot@1.11.8
      ├── iobroker.javascript@6.0.0
      ├── iobroker.js-controller@4.0.23
      ├── iobroker.mihome-vacuum@3.6.0
      ├── iobroker.mihome@1.4.0
      ├── iobroker.miio@0.0.13
      ├── iobroker.nina@0.0.25
      ├── iobroker.nuki-extended@2.6.5
      ├── iobroker.parcel@0.0.20
      ├── iobroker.pi-hole@1.3.4
      ├── iobroker.rpi2@1.3.2
      ├── iobroker.sainlogic@0.9.0
      ├── iobroker.simple-api@2.7.0
      ├── iobroker.socketio@6.1.8
      ├── iobroker.tado@0.3.15
      ├── iobroker.tankerkoenig@2.1.1
      ├── iobroker.tr-064@4.2.16
      ├── iobroker.tradfri@3.1.3
      ├── iobroker.trashschedule@2.0.3
      ├── iobroker.web@5.2.4
      ├── iobroker.whatsapp-cmb@0.2.2
      ├── iobroker.ws@2.1.3
      └── iobroker.zigbee@1.7.5
      

      Falls Adapter als aus github stammend markiert sind sollte man diese auf die letzte Version aus dem verwendeten Repository (stable oder beta) bringen. Adapter, die ausschließlich über github verfügbar sind temprorär ganz zu deinstallieren und erst nach erfolgtem node-Upgrade wieder aus github zuangeln.
      Fehlermeldungen, in denen was von 'extraneous' steht können übergangen werden oder mit

      cd /opt/iobroker && npm prune
      

      bereinigt werden.

      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*
      

      Dann das nodesource-Repository anlegen lassen:

      curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash
      sudo apt install nodejs
      sudo ln -s /usr/bin/node /usr/bin/nodejs &> /dev/null
      

      Die gewünschte Version ggfls. anpassen, also statt

      setup_18.x
      

      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 könnte dann etwa so aussehen (hier für das bullseye-Release, bei anderen Releases oder Distributionen kann da auch was anderes auftauchen):

      #node 16
      deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x bullseye main
      deb-src [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x bullseye main
      
      #node 18
      deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x bullseye main
      deb-src [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x bullseye 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

      sudo ln -s /usr/bin/node /usr/bin/nodejs &> /dev/null
      uname -m && type -P nodejs node npm npx && nodejs -v && node -v && npm -v && npx -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
      v18.15.0
      v18.15.0
      9.50.0
      9.50.0
      4.0.23
      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: 16.17.0-deb-1nodesource1
        Candidate: 16.17.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

      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 26
      • 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 && nodejs -v && node -v && npm -v && npx -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 vier Elemente (nodejs, node, npm oder npx) zeigt, dann ist da meist 'irgendwas' manuell von 'irgendwoher' installiert worden. Ich habe bis dato leider noch nicht nachvollziehen können, was genau da immer angestellt wurde.
        In der Regel kann man diese Dateien dann von Hand löschen.

        sudo rm /pfad/zu/der/falschen/datei
        

        Auch ein Eintrag namens 'corepack' im falschen Pfad muss gelöscht werden.

        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 5
        • 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 0
          • First post
            Last post

          Support us

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

          628
          Online

          29.0k
          Users

          63.1k
          Topics

          964.0k
          Posts

          apt debian how-to howto node update raspberry
          6
          3
          49599
          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-2021
          logo