NOTE: This post refers to Node v0.6.19. For new v0.8.0 please visit this.
On Node.js website I read:
Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
Awesome! Now I want to install Node on my Fox Board G20, my preferred ARM based SBC!
To do this I want the latest version of Node, but from Acmesystems website I can download only an older version. No problem: if you want as me the latest Node on your Fox Board G20, read below and you can.
-
Step 1: enable swap
By default Fox Board has his swap disabled, but to complete all tasks to install node.js it must be enabled; open your terminal and type:
debarm:~$ nano /etc/fstab
#Mount the fat16 partition where is located #the Kernel image /dev/mmcblk0p1 /media/mmc_p1 vfat noatime 0 1 #Mount the rootfs partition /dev/mmcblk0p2 / ext4 noatime 0 1 #Mount the data partition /dev/mmcblk0p3 /media/data ext4 noatime 0 1 #Enable the swap memory #/dev/mmcblk0p4 none swap sw 0 0 proc /proc proc none 0 0
uncomment the line #12:
#Mount the fat16 partition where is located #the Kernel image /dev/mmcblk0p1 /media/mmc_p1 vfat noatime 0 1 #Mount the rootfs partition /dev/mmcblk0p2 / ext4 noatime 0 1 #Mount the data partition /dev/mmcblk0p3 /media/data ext4 noatime 0 1 #Enable the swap memory /dev/mmcblk0p4 none swap sw 0 0 proc /proc proc none 0 0[/sourcecode]
save and exit and reboot your Fox Board.
-
Step 2: install prerequisites
To install all prerequisites simply type:
debarm:~$ aptitude update debarm:~$ aptitude install git-core curl build-essential openssl libssl-dev python libcurl4-openssl-dev
-
Step 3: install nvm
The most simple method to install latest Node is using nvm (Node Version Manager) hosted on Github.
Get nvm from Github:debarm:~$ git clone git://github.com/creationix/nvm.git ~/nvm
-
Step 4: customize nvm
Unfortunately using the default nvm isn’t possible to compile Node due to ARM type used on Fox Board. Typing:
debarm:~$ cat /proc/cpuinfo
you see:
Processor : ARM926EJ-S rev 5 (v5l) BogoMIPS : 197.83 Features : swp half thumb fastmult edsp java CPU implementer : 0x41 CPU architecture: 5TEJ CPU variant : 0x0 CPU part : 0x926 CPU revision : 5 Hardware : Acme Systems srl FOX Board G20 Revision : 0000 Serial : 0000000000000000
therefore gcc must be use right CPU architecture and vfp feature isn’t present. To avoid this problem you must customize nvm script:
debarm:~$ nano ~/nvm/nvm.sh
case $1 in "help" ) echo echo "Node Version Manager" echo echo "Usage:" echo " nvm help Show this message" echo " nvm install [-s] <version> Download and install a <version>" echo " nvm uninstall <version> Uninstall a version" echo " nvm use <version> Modify PATH to use <version>" echo " nvm run <version> [<args>] Run <version> with <args> as arguments" echo " nvm ls List installed versions" echo " nvm ls <version> List versions matching a given description" echo " nvm ls-remote List remote versions available for install" echo " nvm deactivate Undo effects of NVM on current shell" echo " nvm alias [<pattern>] Show all aliases beginning with <pattern>" echo " nvm alias <name> <version> Set an alias named <name> pointing to <version>" echo " nvm unalias <name> Deletes the alias named <name>" echo " nvm copy-packages <version> Install global NPM packages contained in <version> to current version" echo echo "Example:" echo " nvm install v0.4.12 Install a specific version number" echo " nvm use 0.2 Use the latest available 0.2.x release" echo " nvm run 0.4.12 myApp.js Run myApp.js using node v0.4.12" echo " nvm alias default 0.4 Auto use the latest installed v0.4.x version" echo ;; "install" ) # initialize local variables if [ ! `which curl` ]; then echo 'NVM Needs curl to proceed.' >&2; fi
Edit code as below:
case $1 in "help" ) echo echo "Node Version Manager" echo echo "Usage:" echo " nvm help Show this message" echo " nvm download <version> Download only a <version>" echo " nvm foxinstall <version> Install a <version> in Fox Board G20" echo " nvm install <version> Download and install a <version>" echo " nvm uninstall <version> Uninstall a version" echo " nvm use <version> Modify PATH to use <version>" echo " nvm run <version> [<args>] Run <version> with <args> as arguments" echo " nvm ls List installed versions" echo " nvm ls <version> List versions matching a given description" echo " nvm deactivate Undo effects of NVM on current shell" echo " nvm alias [<pattern>] Show all aliases beginning with <pattern>" echo " nvm alias <name> <version> Set an alias named <name> pointing to <version>" echo " nvm unalias <name> Deletes the alias named <name>" echo " nvm copy-packages <version> Install global NPM packages contained in <version> to current version" echo echo "Example:" echo " nvm install v0.4.12 Install a specific version number" echo " nvm use 0.2 Use the latest available 0.2.x release" echo " nvm run 0.4.12 myApp.js Run myApp.js using node v0.4.12" echo " nvm alias default 0.4 Auto use the latest installed v0.4.x version" echo ;; "download" ) if [ ! `which curl` ]; then echo 'NVM Needs curl to proceed.' >&2; fi if [ $# -ne 2 ]; then nvm help return fi VERSION=`nvm_version $2` [ -d "$NVM_DIR/$VERSION" ] && echo "$VERSION is already installed." && return tarball='' if [ "`curl -Is "http://nodejs.org/dist/$VERSION/node-$VERSION.tar.gz" | grep '200 OK'`" != '' ]; then tarball="http://nodejs.org/dist/$VERSION/node-$VERSION.tar.gz" elif [ "`curl -Is "http://nodejs.org/dist/node-$VERSION.tar.gz" | grep '200 OK'`" != '' ]; then tarball="http://nodejs.org/dist/node-$VERSION.tar.gz" fi if ( [ ! -z $tarball ] && \ mkdir -p "$NVM_DIR/src" && \ cd "$NVM_DIR/src" && \ curl -C - --progress-bar $tarball -o "node-$VERSION.tar.gz" && \ tar -xzf "node-$VERSION.tar.gz" && \ cd "node-$VERSION" ) then echo "nvm: please customize $NVM_DIR/src/node-$VERSION/deps/v8/SConstruct" else echo "nvm: download $VERSION failed!" fi ;; "foxinstall" ) if [ $# -ne 2 ]; then nvm help return fi VERSION=`nvm_version $2` [ -d "$NVM_DIR/$VERSION" ] && echo "$VERSION is already installed." && return if ( cd "$NVM_DIR/src/node-$VERSION" && \ ./configure --prefix="$NVM_DIR/$VERSION" && \ make && \ rm -f "$NVM_DIR/$VERSION" 2>/dev/null && \ make install ) then nvm use $VERSION if ! which npm ; then echo "Installing npm..." if [[ "`expr match $VERSION '\(^v0\.1\.\)'`" != '' ]]; then echo "npm requires node v0.2.3 or higher" elif [[ "`expr match $VERSION '\(^v0\.2\.\)'`" != '' ]]; then if [[ "`expr match $VERSION '\(^v0\.2\.[0-2]$\)'`" != '' ]]; then echo "npm requires node v0.2.3 or higher" else curl http://npmjs.org/install.sh | clean=yes npm_install=0.2.19 sh fi else curl http://npmjs.org/install.sh | clean=yes sh fi fi else echo "nvm: install $VERSION failed!" fi ;; "install" ) if [ ! `which curl` ]; then echo 'NVM Needs curl to proceed.' >&2; fi
Save nvm.sh file and activate your nvm:
debarm:~$ . ~/nvm/nvm.sh
-
Step 5: download Node source code
To download Node source code simply use customized nvm:
debarm:~$ nvm download v0.6.19
-
Step 6: customize SConstruct file
After a while you have the Node source code and you must customize the v8 script:
debarm:~$ nano ~/nvm/src/node-v0.6.19/deps/v8/SConstruct
'gcc': { 'all': { 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS'], 'CXXFLAGS': ['-fno-rtti', '-fno-exceptions'], }, 'visibility:hidden': { # Use visibility=default to disable this. 'CXXFLAGS': ['-fvisibility=hidden'] },
and modify as follow:
'gcc': { 'all': { 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS', '-march=armv5te'], 'CXXFLAGS': ['-fno-rtti', '-fno-exceptions', '-march=armv5te'], }, 'visibility:hidden': { # Use visibility=default to disable this. 'CXXFLAGS': ['-fvisibility=hidden'] },
and finally
'armeabi:softfp' : { 'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'], 'vfp3:on': { 'CPPDEFINES' : ['CAN_USE_VFP_INSTRUCTIONS'] }, 'simulator:none': { 'CCFLAGS': ['-mfloat-abi=softfp'], } },
in
'armeabi:softfp' : { 'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'] #'vfp3:on': { # 'CPPDEFINES' : ['CAN_USE_VFP_INSTRUCTIONS'] #}, #'simulator:none': { # 'CCFLAGS': ['-mfloat-abi=softfp'], #} },
-
Step 7: install Node
Now use again nvm:
debarm:~$ nvm foxinstall v0.6.19
After a few hours (be patient!) you have compiled the latest Node version and you must use it:
debarm:~$ nvm use v0.6.19
Done! Now you can verify all:
debarm:~$ node -v debarm:~$ npm -v
If all versions appear, you can install your desired Node packages using npm as you know:
debarm:~$ npm install express
You can also set the default Node version as follow:
debarm:~$ nvm alias default v0.6.19
Good programming with Node!
Arm , Fox Board , Node.js
About Marcello Gesmundo
I'm the founder of Yoovant company. I'm an engineer and an artist: what could be better than combine the technologies with the arts?
Hi Marcello,
Thank you for your step by step guide.
I’m really a newbie on Aria G25 and on Linux embedded.
I’m trying to install Node.1.10 but when I enter the command ‘aptitude update’ it gave me some errors and later I can’t run the nsm.sh.
W: GPG error: http://packages.dotdeb.org stable Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY E9C74FEEA2098A6E
W: Failed to fetch http://packages.dotdeb.org/dists/stable/all/binary-armel/Packages: 404 Not Found
E: Some index files failed to download. They have been ignored, or old ones used instead.
E: Couldn’t rebuild package cache
Thank you in advance
maadaf
Hi Maadaf,
your error message is about a non recognized repository: http://packages.dotdeb.org. If you really want to use this instead the standard repository, type:
and next try to use aptitude.
Best regards,
Marcello
Hi Marcello,
You were right. I remove that repository and now it works fine.
Thanks
Maddaf
You are welcome Maadaf!
Marcello
Hi,
I try to install and when I launch make, I receive following message:
/root/nvm/src/node-v0.6.19/deps/v8/src/arm/macro-assembler-arm.cc:64:3: error: #error “For thumb inter-working we require an architecture which supports blx”
scons: *** [obj/release/arm/macro-assembler-arm.o] Error 1
scons: building terminated because of errors.
Waf: Leaving directory `/root/nvm/src/node-v0.6.19/out’
Build failed: -> task failed (err #2):
{task: libv8.a SConstruct -> libv8.a}
make: *** [program] Error 1
What do you think about?
Many thanks.
Arturo
Hi Arturo,
please see the step 5. You can also install the new 0.10x following my newly post.
Regards,
Marcello
It’ works now! Great guide!
Many thanks.
Arturo