NEWS

[HowTo] Nodejs-Installation und Upgrades unter Debian


  • Most Active

    Teil 1: Installation und Update
    Teil 2: Installationen geradeziehen (siehe 3. 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:
    Die derzeitig empfohlene nodejs-Version ist Node 12 (Stand 25.07.2020)
    (Auch wenn in der Anleitung oft die 14 vorkommt, die hatte ich gerade zum Testen aktiv...)

    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) mit apt

    Für eine Node-Erstinstallation:

    Debian/RaspberryOS:

    curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash –
    sudo apt install nodejs
    

    Ubuntu:
    Bei Ubuntu (z. B. 20.04 / Focal) muss man etwas anders vorgehen:

    curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash
    sudo apt install nodejs
    sudo ln -s /usr/bin/node /usr/bin/nodejs
    

    Die gewünschte Version ggf. anpassen, also in

    setup_VV.x
    

    entsprechend VV durch die gewünschte Version ersetzen.
    Wobei das bei einem komplett frischen Debian nicht mal erforderlich ist, der iobroker-Installer installiert ohnehin eine Version von nodejs, wenn noch nicht vorhanden.

    Es ist übrigens hier nicht erforderlich, ein Paket 'node' 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 dist-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 Server kurz auf Eis.

    Die persönliche Abwandlung von mir bei Wechseln/Upgrades der nodejs-Version:
    Die oben vorgenommenen Schritte führen dazu, dass es eine Datei nodesource.list gibt, die das nodesource-Repository beinhaltet. Um die Version zu wechseln fügt man einfach eine passende Zeile ein. Ich habe da derzeitig 3 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:

    # node 10
    deb https://deb.nodesource.com/node_10.x buster main
    deb-src https://deb.nodesource.com/node_10.x buster main
    
    # node 12
    deb https://deb.nodesource.com/node_12.x buster main
    deb-src https://deb.nodesource.com/node_12.x buster main
    
    # node 14
    deb https://deb.nodesource.com/node_14.x buster main
    deb-src https://deb.nodesource.com/node_14.x buster main
    

    (Darauf achten, dass die letzte Zeile mit einem ‚ENTER‘ abgeschlossen wird. Sonst gibt es beim

    apt update
    

    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 14.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:

    pi@raspberrypi:~ $ apt policy nodejs
    nodejs:
      Installiert:           14.5.0-1nodesource1
      Installationskandidat: 14.5.0-1nodesource1
      Versionstabelle:
     *** 14.5.0-1nodesource1 500
            500 https://deb.nodesource.com/node_14.x buster/main armhf Packages
            100 /var/lib/dpkg/status
         12.18.2-1nodesource1 500
            500 https://deb.nodesource.com/node_12.x buster/main armhf Packages
         10.21.0-1nodesource1 500
            500 https://deb.nodesource.com/node_10.x buster/main armhf Packages
         10.21.0~dfsg-1~deb10u1+rpi1 500
            500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
    

    Per

    sudo apt install nodejs=12.18.2-1nodesource1
    

    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

    which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs
    

    die Ausgabe etwa so aussehen:

    pi@raspberrypi:~ $ which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs
    /usr/bin/nodejs
    v14.5.0
    /usr/bin/node
    v14.5.0
    /usr/bin/npm
    6.14.5
    nodejs:
      Installiert:           14.5.0-1nodesource1
      Installationskandidat: 14.5.0-1nodesource1
      Versionstabelle:
     *** 14.5.0-1nodesource1 500
            500 https://deb.nodesource.com/node_14.x buster/main armhf Packages
            100 /var/lib/dpkg/status
         12.18.2-1nodesource1 500
            500 https://deb.nodesource.com/node_12.x buster/main armhf Packages
         10.21.0~dfsg-1~deb10u1+rpi1 500
            500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
    

    Wichtig und richtig ist:

    nodejs liegt in /usr/bin
    node liegt in /usr/bin
    npm liegt in /usr/bin

    und die Versionsnummern von nodejs und node stimmen ü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.

    ========================================================================

    ABWEICHUNG 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:

    which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs
    

    Die dann deinstallieren:

    sudo apt remove node*
    

    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:

    wget https://unofficial-builds.nodejs.org/download/release/v12.18.3/node-v12.18.3-linux-armv6l.tar.xz 
    tar -xvf node-v12.18.3-linux-armv6l.tar.xz
    cd node-v12.18.3-linux-armv6l/
    sudo cp -R * /usr/local/
    sudo ln -s /usr/local/bin/node /usr/local/bin/nodejs
    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.



  • @Thomas-Braun

    Sehr gute Idee ... sollte man anpinnen !
    📍


  • Most Active

    Teil 2: Installationen geradeziehen

    Und was mache ich, wenn die Installation nicht so aussieht?

    Szenenario 1 / falsche Pfade

    Wenn der Test auf 'ordentliche' Installation über

    which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs
    

    andere Verzeichnisse als /usr/bin für eines der drei Elemente (nodejs, node oder npm) 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
    

    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.

    Szenenario 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 laufend um weitere Szenarien ergänzt)



  • @Thomas-Braun sagte:

    Falsch ist eine Installation in /usr/bin/local

    Node.js 6.x hatte sich in /usr/local/bin installiert.


  • Most Active

    @paul53

    Aber nicht die von nodesource gepackte Version:

    pi@raspberrypi:~ $ which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs
    /usr/bin/nodejs
    v8.17.0
    /usr/bin/node
    v8.17.0
    /usr/bin/npm
    6.13.4
    

    [Edit:] Hattest du nicht zuerst node8 geschrieben, @paul53 ? Die node 6 liegt aber bestimmt auch dort. Ist aber ja eh nicht mehr relevant, ebenso wie node 8.

    [Edit II:] Auch node6 liegt in /user/bin , wenn die Version von nodesource installiert wurde:

    pi@raspberrypi:~ $ which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs
    /usr/bin/nodejs
    v6.14.4
    /usr/bin/node
    v6.14.4
    /usr/bin/npm
    3.10.10
    


  • @Thomas-Braun Ist ja nett, dass du das so umfangreich beschreibst. Aber wozu? Es gibt ja schon ein offizielles HowTo. Aber als Ergänzung ganz interessant, für Noobs aber zu "hoch" fürchte ich.


  • Most Active

    @Dr-Bakterius sagte in [HowTo] Nodejs-Installation und Upgrades unter Debian:

    Aber wozu?

    a) Weil ich Lust hatte das mal niederzuschreiben

    b) Weil das offizielle HowTo mittlerweile für aktuelle Debian-Varianten nicht mehr ganz exakt ist. Und hier auch ein paar Hintergründe erläutert werden können. Sieh es als Ergänzung an. Part II kümmert sich dann um Problemlösungsstrategien. Kommt ja nicht gar so selten vor, dass Installationen trotz offiziellem HowTo in die Hose gehen. Warum auch immer...


  • Starter

    @Thomas-Braun Danke, ich habe schon lange drauf gewartet, dass Du mal ein paar Hintergründe aufhellst. Das hier ist für mich sehr, sehr sinnvoll und äußerst brauchbar!!!😀


  • Forum Testing Most Active Global Moderator Administrators

    @Dr-Bakterius sagte in [HowTo] Nodejs-Installation und Upgrades unter Debian:

    @Thomas-Braun Ist ja nett, dass du das so umfangreich beschreibst. Aber wozu? Es gibt ja schon ein offizielles HowTo. Aber als Ergänzung ganz interessant, für Noobs aber zu "hoch" fürchte ich.

    Ich fürchte -so paradox das klingen mag- dass für Noobs dass ganze sogar noch umfangreicher sein müsste.
    Ggf. Dann aber didaktisch anders aufgebaut.

    Ich finde die Hinweise sehr wichtig, die Vorgehensweise sehr gut beschrieben.
    Was allerdings für Noobs wahrscheinlich entscheidend sein wird, ist es verbogene Installationen wieder in die Spur zu bringen.
    Dazu hat Thomas ja schon einige Threads erfolgreich betreut.

    Mir kommen da ganz spontan Distros in den Sinn, die nodejs mitbringen und über die Standardanleitung nicht dazu zu bewegen sind sauber zu funktionieren.


  • Most Active

    @Homoran sagte in [HowTo] Nodejs-Installation und Upgrades unter Debian:

    Mir kommen da ganz spontan Distros in den Sinn, die nodejs mitbringen

    Welche sind das? Von Haus aus haben soweit ich das sehe die wenigsten Vanilla-Distros nodejs an Bord. Bei Debian und abgeleiteten Distros kommt mir keine in den Sinn.
    Anders schaut das halt ggf. bei vorgekochten Images aus.


  • Forum Testing Most Active Global Moderator Administrators

    @Thomas-Braun sagte in [HowTo] Nodejs-Installation und Upgrades unter Debian:

    Welche sind das?

    Ich hatte so etwas bereits bei Raspbian und Ubuntu.
    Ob das heute noch so ist weiss ich nicht.
    Auf jeden Fall könnten solche Systeme aus der jessie Ära immer noch laufen.

    @Thomas-Braun sagte in [HowTo] Nodejs-Installation und Upgrades unter Debian:

    Anders schaut das halt bei vorgekochten Images aus.

    Bei "meinen" iobroker Images ist immer alles nach aktuellem Stand installiert worden. Seit ewigen Zeiten bereits über nodesource.
    Oder was für vorgekochte Images meinst du?


  • Most Active

    @Homoran
    Jessie sollte man ohnehin endlich beerdigen. Da gibt es auch von nodesource glaube ich kein Repo mehr, weil Jessie ganz offiziell von niemandem mehr unterstützt wird. Selbst von debian LTS ist da nix mehr zu wollen.
    Man kann sich natürlich daran versuchen node aus den sourcen selber zu bauen. Aber empfehlen würde ich das nicht.

    Bei Images hatte ich gar keine konkreten im Sinn, aber es mag da in der großen weiten Welt ja das ein oder andere geben. Ab Werk kenne ich jedenfalls keine Distribution bei der nodejs in einer Standard-Installation dabei wäre. Das muss eigentlich immer nachträglich installiert werden.


  • Forum Testing Most Active Global Moderator Administrators

    @Thomas-Braun sagte in [HowTo] Nodejs-Installation und Upgrades unter Debian:

    Ab Werk kenne ich jedenfalls keine Distribution bei der nodejs in einer Standard-Installation dabei wäre. Das muss eigentlich immer nachträglich installiert werden.

    Das war definitiv nicht immer so.
    Wie gesagt bin ich da nicht mehr auf dem Laufenden, ob es noch vorkommt.

    Mit jessie wollte ich nur den Zeitrahmen eingrenzen, als ich Original Distros mit node hatte (bei Ubuntu hiess es natürlich anders)


  • Starter

    Nabend, kurze Frage.
    Ich müsste auch den js-controller updaten, gab es hier nicht mal eine Reihenfolge, wenn man nodejs und js-controller updaten muss ?

    Nodejs kann ich mit

    sudo apt update
    sudo apt upgrade
    

    da ich das schon mal so installiert hatte

    curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash –
    sudo apt install nodejs
    

    das hab ich so richtig verstanden ?


  • Most Active

    @D3ltoroxp Die Reihenfolge ist eigentlich wurscht. Ich würde aber vielleicht vor dem Update von node den ioBroker stoppen und node als erstes installieren. Dann legt sich das js-controller update gleich in die aktuelle node-Laufzeitumgebung rein.

    iobroker stop
    

    Der apt-Zweisatz spült dir (ggf. zusammen mit anderen Updates) auch die aktuelle Version von node12 auf das System.


  • Starter

    @Thomas-Braun hätte ich eh gestoppt, steht glaub auch in der Anleitung, oder habs zumindest gerade gelesen, grad läuft noch Backup von der VM. Dann kann ja nichts meh schief gehen. Dann mach ich erst node und dann den controller. Danke mal !!

    Und was ist mit dieser Anleitung ?

    Wird dort einfach Teil 2 automatisch gemacht mit

    curl -sL https://iobroker.net/fix.sh | bash -
    

    was man hier unter Teil 2 selber machen muss ?


  • Most Active

    @D3ltoroxp sagte in [HowTo] Nodejs-Installation und Upgrades unter Debian:

    curl -sL https://iobroker.net/fix.sh | bash -

    Hat nichts mit nodejs zu tun. Das repariert ggf. den ioBroker selber.
    Man sollte den Fixer aber nach einem node-Update mal laufen lassen, weil der auch alte, nicht mehr für ein aktualisiertes node gültige 'Rechte' (capabilities) anpasst.

    Mein 'Teil 2' gibt ein paar Hinweise wie man eine node-Installation wieder gerade rücken kann. Das fehlte mir ein wenig in der Anleitung von @Stabilostick .


  • Starter

    @Thomas-Braun Ich bin etwas verwirrt. Ich hatte den Node ja schon mal vor Monaten geupdated, nach der verlinken Anleitung. Deine hat noch einen weiteren Teil, ist das denn wichtig ? Oder ist die andere Anleitung veraltet ?


  • Most Active

    @D3ltoroxp
    Der Teil 2 bezieht sich auf eine 'falsche' Installation und wie man die wieder gerade rückt.

    Teil 2: Installationen geradeziehen
    Und was mache ich, wenn die Installation nicht so aussieht?


  • Starter

    @Thomas-Braun Ah sorry, mein Fehler, Teil 1.1 nicht Teil 2.
    Teil 1.0 ist klar, upgrade auf von z.b 10x auf 12x oder eben wenn man unter 12x ist auf die neuste 12x updaten. Aber Teil 1.1 hab ich noch nie gemacht.

    Wenn ich nur 12x updaten möchte interessiert nicht Teil 1.1 indem Fall nicht, da ich ja nicht auf z.b. 14x upgraden möchte. So jetzt hab ichs glaub.



Suggested Topics

1.8k
Online

29.8k
Users

36.9k
Topics

494.1k
Posts