NEWS

  • 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 21.01.2021)
    (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 / ubuntu) 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

    sudo 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.16.0-1nodesource1
      Installationskandidat: 14.16.0-1nodesource1
      Versionstabelle:
     *** 14.16.0-1nodesource1 500
            500 https://deb.nodesource.com/node_14.x buster/main armhf Packages
            100 /var/lib/dpkg/status
         12.21.0-1nodesource1 500
            500 https://deb.nodesource.com/node_12.x buster/main armhf Packages
         10.24.0-1nodesource1 500
            500 https://deb.nodesource.com/node_10.x buster/main armhf Packages
         10.24.0~dfsg-1~deb10u1 500
            500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
    

    Per

    sudo apt install nodejs=VERSIONSNUMMER-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.16.0
    /usr/bin/node
    v14.16.0
    /usr/bin/npm
    6.14.11
    nodejs:
      Installiert:           14.16.0-1nodesource1
      Installationskandidat: 14.16.0-1nodesource1
      Versionstabelle:
     *** 14.16.0-1nodesource1 500
            500 https://deb.nodesource.com/node_14.x buster/main armhf Packages
            100 /var/lib/dpkg/status
         12.21.0-1nodesource1 500
            500 https://deb.nodesource.com/node_12.x buster/main armhf Packages
         10.24.0-1nodesource1 500
            500 https://deb.nodesource.com/node_10.x buster/main armhf Packages
         10.24.0~dfsg-1~deb10u1 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 (aktuellste Versionsnummer bitte selber herausfinden...):

    wget https://unofficial-builds.nodejs.org/download/release/v12.20.1/node-v12.20.1-linux-armv6l.tar.xz 
    tar -xvf node-v12.20.1-linux-armv6l.tar.xz
    cd node-v12.20.1-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.

  • Most Active

    Teil 2: Installationen geradeziehen

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

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

    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)

  • Forum Testing Most Active Global Moderator Administrators

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

    Bitte nur noch dort weitere Posts eröffnen!

Suggested Topics

1.9k
Online

36.8k
Users

42.5k
Topics

588.5k
Posts