Skip to content

Commit 9eda384

Browse files
committed
update script to default to node 22, and include node 24
and add notes re armv6 EOL.
1 parent 23cc2ed commit 9eda384

File tree

1 file changed

+83
-41
lines changed

1 file changed

+83
-41
lines changed

deb/update-nodejs-and-nodered

Lines changed: 83 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
#
3-
# Copyright 2016,2025 JS Foundation and other contributors, https://js.foundation/
3+
# Copyright 2016,2026 JS Foundation and other contributors, https://js.foundation/
44
# Copyright 2015,2016 IBM Corp.
55
#
66
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,7 +15,7 @@
1515
# See the License for the specific language governing permissions and
1616
# limitations under the License.
1717

18-
# Node-RED Installer for DEB based systems
18+
# Node-RED Installer for Debian based systems
1919

2020
umask 0022
2121
tgta12=12.22.12 # need armv6l latest from https://unofficial-builds.nodejs.org/download/release/
@@ -26,9 +26,9 @@ tgta16=16.20.2 # need armv6l latest from https://unofficial-builds.nodejs.org/
2626
tgtl16=16.20.2 # need x86 latest from https://unofficial-builds.nodejs.org/download/release/
2727
tgta18=18.20.8 # need armv6l latest from https://unofficial-builds.nodejs.org/download/release/
2828
tgtl18=18.20.8 # need x86 latest from https://unofficial-builds.nodejs.org/download/release/
29-
tgta20=20.19.6 # need armv6l latest from https://unofficial-builds.nodejs.org/download/release/
30-
tgtl20=20.19.6 # need x86 latest from https://unofficial-builds.nodejs.org/download/release/
31-
tgta22=22.21.1 # need armv6l latest from https://unofficial-builds.nodejs.org/download/release/
29+
tgta20=20.20.0 # need armv6l latest from https://unofficial-builds.nodejs.org/download/release/
30+
tgtl20=20.20.0 # need x86 latest from https://unofficial-builds.nodejs.org/download/release/
31+
tgta22=22.22.0 # need armv6l latest from https://unofficial-builds.nodejs.org/download/release/
3232
tgtl22=None
3333
tgta24=None
3434
tgtl24=None
@@ -54,7 +54,8 @@ Options:
5454
--node18 if set, forces install of major version of nodejs 18 LTS
5555
--node20 if set, forces install of major version of nodejs 20 LTS
5656
--node22 if set, forces install of major version of nodejs 22 LTS
57-
if none set, install nodejs 20 LTS if nodejs version is less than 18,
57+
--node24 if set, forces install of major version of nodejs 24 LTS
58+
if none set, install nodejs 22 LTS if nodejs version is less than 20,
5859
otherwise leave current install
5960
6061
Note: if you use allow-low-ports it may affect the node modules paths - see https://stackoverflow.com/a/65560687
@@ -264,24 +265,52 @@ if [[ "$(uname -m)" =~ "i686" ]] || [[ "$(uname -m)" =~ "x86_64" && "$(getconf L
264265
echo " "
265266
echo "************************************************************"
266267
echo " "
267-
echo " Warning : Nodejs v20 goes EOL in April 2026."
268-
echo " There are no known later Nodejs builds for 32 bit systems."
269-
echo " "
270-
echo "************************************************************"
268+
if [[ "$NODE_VERSION" == "24" ]]; then
269+
echo " STOP ! "
270+
echo " There are no known Nodejs v24 builds for 32 bit systems. "
271+
echo " "
272+
echo "************************************************************"
273+
exit 1
274+
fi
275+
if [[ "$NODE_VERSION" == "22" ]]; then
276+
echo " STOP ! "
277+
echo " There are no known Nodejs v22 builds for 32 bit systems. "
278+
echo " "
279+
echo "************************************************************"
280+
exit 1
281+
fi
271282
elif uname -m | grep -q armv6l ; then
272283
echo " "
273284
echo "************************************************************"
274285
echo " "
275-
echo " Warning : Nodejs v22 goes EOL in April 2027."
276-
echo " There are no known later Nodejs builds for Arm v6 systems."
277-
echo " "
278-
echo "************************************************************"
286+
if [[ "$NODE_VERSION" == "20" ]]; then
287+
echo " Warning : "
288+
echo " Nodejs v20 goes EOL in April 2026. "
289+
echo " Nodejs v22 goes EOL in April 2027. "
290+
echo " There is no v24 or later builds for Arm v6 systems. "
291+
echo " "
292+
echo "************************************************************"
293+
sleep 10
294+
elif [[ "$NODE_VERSION" == "22" ]]; then
295+
echo " Warning : "
296+
echo " Nodejs v22 goes EOL in April 2027. "
297+
echo " There is no v24 or later builds for Arm v6 systems. "
298+
echo " "
299+
echo "************************************************************"
300+
sleep 10
301+
elif [[ "$NODE_VERSION" == "24" ]]; then
302+
echo " STOP ! "
303+
echo " There are no known Nodejs v24 builds for Arm v6. "
304+
echo " "
305+
echo "************************************************************"
306+
exit 1
307+
fi
279308
fi
280309
echo " "
281310
echo Node-RED update script for : $NODERED_USER@`hostname`
282311
echo " "
283312
echo "This script checks the version of node.js installed is 16 or greater. It will try to"
284-
echo "install node 20 if none is found. It can optionally install node 18 or 20 LTS for you."
313+
echo "install node 22 if none is found. It can optionally install node 18, 20 or 24 LTS for you."
285314
echo " "
286315
echo "If necessary it will then remove the old core of Node-RED, before then installing the latest"
287316
echo "version. You can also optionally specify the version required."
@@ -330,7 +359,8 @@ case $yn in
330359

331360
nv=0
332361
# nv2=""
333-
nv2=`dpkg -s nodejs 2>/dev/null | grep Version | cut -d ' ' -f 2`
362+
# nv2=`dpkg -s nodejs 2>/dev/null | grep Version | cut -d ' ' -f 2`
363+
nv2=`node -v 2>/dev/null`
334364
nrv=`echo $NODERED_VERSION | cut -d "." -f1`
335365

336366
if [[ "$APTOK" == "false" ]]; then
@@ -367,20 +397,20 @@ case $yn in
367397
NODE_VERSION="12"
368398
fi
369399

370-
if [[ "$nv" -lt 18 && "$nv" -ne 0 && "$nrv" != 1 ]]; then
400+
if [[ "$nv" -lt 20 && "$nv" -ne 0 && "$nrv" != 1 ]]; then
371401
if [[ "$NODE_VERSION" == "" ]]; then
372402
echo "Nodejs $nv too old and new version not specified - exiting" | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
373-
echo "Node-RED v3.x no longer supports Nodejs $nv "
403+
echo "Node-RED v4.x no longer supports Nodejs $nv "
374404
# echo " Node-RED v2 no longer supports Nodejs $nv. Please update."
375405
# echo " "
376406
# echo " You can use the old v1 branch by specifying --nodered-version=1.*"
377407
echo " "
378-
echo " You can force an install of node 18 or 20 by adding --node18 or --node20 to the end of the command line above."
408+
echo " You can force an install of node 20, 22, 24 by adding --node20, --node22 or --node24 to the end of the command line above."
379409
echo " However doing so may break some nodes that may need re-installing manually."
380410
echo " Generally it is recommended to update all nodes to their latest versions before upgrading."
381411
echo " "
382-
echo " If you wish to stay on nodejs $nv you can update to the latest Node-RED 1.x or 2.x version by adding"
383-
echo ' --nodered-version="1.3.7" or --nodered-version="2.2.2" to that install command. If in doubt this is the safer option.'
412+
echo " If you wish to stay on nodejs $nv you can update to the latest Node-RED 1.x, 2.x or 3.x version by adding"
413+
echo ' --nodered-version="1.3.7", --nodered-version="2.2.3", or --nodered-version="3.1.15" to that install command. If in doubt this is the safer option.'
384414
if [[ "$npv" != "" ]]; then
385415
echo "Checking for outdated nodes in $PWD"
386416
npm --silent outdated
@@ -443,7 +473,7 @@ case $yn in
443473
echo -ne " Leave existing Node.js :"
444474
elif [[ "$NODE_VERSION" == "" && "$nv" -ne 0 ]]; then
445475
CHAR="-"
446-
echo -ne " Node option not specified : --node18, --node20 or --node22\n"
476+
echo -ne " Node option not specified : --node20, --node22 or --node24\n"
447477
echo -ne " Leave existing Node.js :"
448478
else
449479
if [[ "$NODE_VERSION" == "12" ]]; then
@@ -468,9 +498,9 @@ case $yn in
468498
tgtl=$tgtl24
469499
tgta=$tgta24
470500
else
471-
tgtl=$tgtl20
472-
tgta=$tgta20
473-
NODE_VERSION="20"
501+
tgtl=$tgtl22
502+
tgta=$tgta22
503+
NODE_VERSION="22"
474504
fi
475505
# maybe remove Node.js - or upgrade if nodesource.list exists
476506
if [[ -d $NODERED_HOME/.nvm ]]; then
@@ -524,34 +554,46 @@ case $yn in
524554
echo -ne " Install Node.js for Armv6 \r"
525555
# f=$(curl -sL https://nodejs.org/download/release/latest-dubnium/ | grep "armv6l.tar.gz" | cut -d '"' -f 2)
526556
# curl -sL -o node.tgz https://nodejs.org/download/release/latest-dubnium/$f 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
527-
curl -sSL -o /tmp/node.tgz https://unofficial-builds.nodejs.org/download/release/v$tgta/node-v$tgta-linux-armv6l.tar.gz 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
557+
curl -sSL -o $NODERED_HOME/node.tgz https://unofficial-builds.nodejs.org/download/release/v$tgta/node-v$tgta-linux-armv6l.tar.gz 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
528558
# unpack it into the correct places
529-
hd=$(head -c 6 /tmp/node.tgz)
559+
hd=$(head -c 6 $NODERED_HOME/node.tgz)
530560
if [ "$hd" == "<!DOCT" ] || [ "$hd" == "<html>" ]; then
531561
CHAR="$CROSS File $f not downloaded";
532562
else
533563
if [[ -d /tmp/nodejs ]]; then
534564
$SUDO rm -rf /tmp/nodejs
535565
fi
536566
mkdir -p /tmp/nodejs
537-
$SUDO tar -zxof /tmp/node.tgz --strip-components=1 -C /tmp/nodejs
567+
$SUDO tar -zxof $NODERED_HOME/node.tgz --strip-components=1 -C /tmp/nodejs
538568
$SUDO chown -R 0:0 /tmp/nodejs 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
539569
if $SUDO cp -PR /tmp/nodejs/* /usr/ 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; then CHAR=$TICK; else CHAR=$CROSS; fi
540570
$SUDO rm -rf /tmp/nodejs 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
541571
fi
542572
# remove the tgz file to save space
543-
rm /tmp/node.tgz 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
573+
rm $NODERED_HOME/node.tgz 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
544574
echo -ne " Install Node.js for Armv6 $CHAR"
545575
else
546576
echo -ne " Nodejs "$tgta" for Armv6 does not exist $CROSS"
577+
echo " "
578+
echo "************************************************************"
579+
echo " "
580+
echo " Nodejs "$tgta" for Armv6 does not exist"
581+
echo " so cannot be installed."
582+
echo " There are no known later Nodejs builds for 32 bit systems."
583+
echo " "
584+
echo " Node-RED may still work with nodejs v22."
585+
echo " "
586+
echo "************************************************************"
587+
exit 1
547588
fi
548589
else
549590
echo "Installing nodejs $NODE_VERSION" | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
550591
# clean out old nodejs stuff
551592
npv=$(npm -v 2>/dev/null | head -n 1 | cut -d "." -f1)
552593
$SUDO apt remove -y nodejs nodejs-legacy npm 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
553-
$SUDO dpkg -r nodejs 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
554-
$SUDO dpkg -r node 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
594+
$SUDO dpkg -rq nodejs 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
595+
$SUDO dpkg -rq node 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
596+
$SUDO dpkg -rq nsolid 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
555597
$SUDO rm -rf /opt/nodejs 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
556598
$SUDO rm -rf /usr/local/lib/nodejs* 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
557599
$SUDO rm -f /usr/local/bin/node* 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
@@ -578,9 +620,9 @@ case $yn in
578620
# curl -sSL https://deb.nodesource.com/setup_$NODE_VERSION.x | $SUDOE bash - 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
579621
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | $SUDOE tee -a /etc/apt/sources.list.d/nodesource.list >>/dev/null
580622
$SUDO apt-get update 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
581-
if $SUDO apt install -y nodejs/nodistro 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; then CHAR=$TICK; else CHAR=$CROSS; fi
582-
nov2=$(dpkg -s nodejs | grep Version | cut -d ' ' -f 2)
583-
echo -ne " Install Node $nov2 $CHAR"
623+
if $SUDO apt install -y --reinstall nodejs/nodistro 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; then CHAR=$TICK; else CHAR=$CROSS; fi
624+
nov2=$(node -v)
625+
echo -ne " Install Node $nov2 $CHAR"
584626
# echo -ne " Install Node.js $NODE_VERSION LTS $CHAR"
585627
fi
586628
fi
@@ -600,7 +642,6 @@ case $yn in
600642
echo -ne "\b$CROSS Bad install: Node.js $nov Npm $npv - Exit\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"
601643
exit 2
602644
fi
603-
if [ "$EUID" == "0" ]; then npm config set unsafe-perm true &>/dev/null; fi
604645

605646
# clean up the npm cache and node-gyp
606647
if [[ "$NUPG" == "$TICK" ]]; then
@@ -624,10 +665,10 @@ case $yn in
624665
fi
625666

626667
if [[ "$GLOBAL" == "true" ]]; then
627-
$SUDO npm i -g --unsafe-perm --no-progress --no-update-notifier --no-audit --no-fund --loglevel=error node-red@"$NODERED_VERSION_SELECTION" 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; nri=${PIPESTATUS[0]}
668+
$SUDO npm i -g --no-progress --no-update-notifier --no-audit --no-fund --loglevel=error node-red@"$NODERED_VERSION_SELECTION" 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; nri=${PIPESTATUS[0]}
628669
if [[ $nri -eq 0 ]]; then CHAR=$TICK; else CHAR=$CROSS; fi
629670
else
630-
npm i -g --unsafe-perm --no-progress --no-update-notifier --no-audit --no-fund --loglevel=error node-red@"$NODERED_VERSION_SELECTION" 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; nri=${PIPESTATUS[0]}
671+
npm i -g --no-progress --no-update-notifier --no-audit --no-fund --loglevel=error node-red@"$NODERED_VERSION_SELECTION" 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; nri=${PIPESTATUS[0]}
631672
if [[ $nri -eq 0 ]]; then CHAR=$TICK; else CHAR=$CROSS; fi
632673
fi
633674
nrv=$(npm -g --no-progress --no-update-notifier --no-audit --no-fund --loglevel=error ls node-red | grep node-red | cut -d '@' -f 2 | $SUDO tee -a /var/log/nodered-install.log) >>/dev/null 2>&1
@@ -656,7 +697,7 @@ case $yn in
656697
fi
657698
CHAR="-"
658699
if [[ $GLOBALNODES != " " ]]; then
659-
if npm i --unsafe-perm --save --no-progress --no-update-notifier --no-audit --no-fund $GLOBALNODES 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; then CHAR=$TICK; else CHAR=$CROSS; fi
700+
if npm i --save --no-progress --no-update-notifier --no-audit --no-fund $GLOBALNODES 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; then CHAR=$TICK; else CHAR=$CROSS; fi
660701
fi
661702
echo -ne " Move global nodes to local $CHAR\r\n"
662703

@@ -680,7 +721,7 @@ case $yn in
680721
CHAR="-"
681722
if [[ ! -z $EXTRANODES ]]; then
682723
echo "Installing extra nodes: $EXTRANODES :" | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
683-
if npm i --unsafe-perm --save --no-progress --no-update-notifier --no-audit --no-fund $EXTRANODES 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; then CHAR=$TICK; else CHAR=$CROSS; fi
724+
if npm i --save --no-progress --no-update-notifier --no-audit --no-fund $EXTRANODES 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null; then CHAR=$TICK; else CHAR=$CROSS; fi
684725
fi
685726
echo -ne " Install extra Pi nodes $CHAR\r\n"
686727

@@ -786,8 +827,9 @@ case $yn in
786827
if [ $ISS -gt 11 ] && [ "$DIETPI" != "y" ]; then
787828
echo "Replace old rpi.gpio with lgpio" | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
788829
$SUDO apt purge -y python3-rpi.gpio 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
789-
$SUDO apt install -y python3-pip 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
790-
$SUDO pip3 install --break-system-packages rpi-lgpio 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
830+
# $SUDO apt install -y python3-pip 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
831+
# $SUDO pip3 install --break-system-packages rpi-lgpio 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
832+
$SUDO apt install -y python3-rpi-lgpio 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
791833
else
792834
echo "Leaving old rpi.gpio" | $SUDO tee -a /var/log/nodered-install.log >>/dev/null
793835
$SUDO apt install -y python3-rpi.gpio 2>&1 | $SUDO tee -a /var/log/nodered-install.log >>/dev/null

0 commit comments

Comments
 (0)