Mar 19, 2016

QNAP - Upgrade Node.js

QNAP App Center可以安裝Node.js,方便撰寫server-side JavaScript程式。但是QNAP似乎支援跟新版很慢 (可能是要等Linux Station完善吧),目前還是version 0.8.22-2。

QNAP支援實在太舊了,手動升級Node.js。https://nodejs.org/download/release/latest/可以下載最新release版本。但是該選哪個版本?QNAP硬體是ARM或x86 (現在應該都是64-bit)。
https://nodejs.org/download/release/latest/
set | grep "HOSTTYPE" 可以看出硬體是64-bit。

uname也顯示硬體是64-bit,但是OS卻是unknown。

先用Optware以 "ipkg install file" 指令安裝file,以 "file /sbin/init" 檢查。因為QNAP是簡易版Linux,用BusyBox在單一的執行檔中提供精簡的Unix工具集。BusyBox (1996年) 是希望在一張軟碟上能放入一個開機系統,以作為急救盤和安裝盤;如同在Windows使用的DOS開機磁片或USB碟。
BusyBox is used by several operating systems running on embedded systems.
改以 "file ../bin/busybox" 檢查,確認QNAP是32-bit OS。所以確定安裝:https://nodejs.org/download/release/latest/node-v5.9.0-linux-x86.tar.gz

升級安裝指令如下:

#!/bin/sh

#URL="https://nodejs.org/download/release/v5.8.0/node-v5.8.0-linux-x64.tar.gz"
#URL="https://nodejs.org/download/release/v5.8.0/node-v5.8.0-linux-x86.tar.gz"
URL="https://nodejs.org/download/release/latest/node-v5.9.0-linux-x86.tar.gz"

#[[ $URL =~ (node-v5\.8\.0-.*)\.tar\.gz$ ]] && TARFile=${BASH_REMATCH[0]} && DirName=${BASH_REMATCH[1]}
[[ $URL =~ (node-v5\.9\.0-.*)\.tar\.gz$ ]] && TARFile=${BASH_REMATCH[0]} && DirName=${BASH_REMATCH[1]}
[[ $TARFile == "" ]] && echo "url is wrong" && exit
NodeJSPath=$(/sbin/getcfg nodejs Install_Path -f /etc/config/qpkg.conf)
echo $TARFile
echo $DirName
echo $NodeJSPath

wget --no-check-certificate $URL
tar zxf $TARFile -C $NodeJSPath
rm -r $NodeJSPath/node
#rm $TARFile
ln -s $NodeJSPath/$DirName $NodeJSPath/node

uidscript=$NodeJSPath/$DirName/lib/node_modules/npm/node_modules/uid-number/uid-number.js
script="$(cat $uidscript)"
echo "${script/", uidSupport = process.getuid && process.setuid"/, uidSupport = false}" > $uidscript

#OLDVer=$(cat /etc/config/qpkg.conf | grep "0.8.22-2" | wc -l)
#[ $OLDVer == 1 ] && sed 's/0.8.22-2/5.8.0/g' -i /etc/config/qpkg.conf
OLDVer=$(cat /etc/config/qpkg.conf | grep "5.8.0" | wc -l)
[ $OLDVer == 1 ] && sed 's/5.8.0/5.9.0/g' -i /etc/config/qpkg.conf

URL設定要下載之網址。用bash-regex分解檔名作為安裝檔名和路徑名稱,並由qpkg.conf取得安裝路徑。因此,務必先安裝QNAP Node.js 0.8.22 App。之後,由wget下載,解壓縮並更改原node.js路徑之內容,以新版替換。Line 21-23,安裝後參考 QNAP – NODE.JS INSTALLATION 修正錯誤。最後 (Line 27-28) 則以sed替換字串的方式,直接更改qpkg.conf內的版本號。我由0.8.22 --> 5.8.0 --> 5.9.0過程改版,因此有些程式碼加了註解#。
 







檢查npm版本資訊,可以得知很多node.js都可以支援了。
npm version
試看看執行程式碼:

開瀏覽器連到QNAP所屬IP:888即可看到結果。

No comments :

Post a Comment