Node.js on my Synology DS213J

Node.js on my Synology DS213J

So i decided to see if it was possible to run Node.js from my NAS, and turns out it easier than you would think.

SPKSRC

Some nice guys at SynoCommunity has a neat project called SPKSRC, its an easy crosscompiling tool for createing a SPK package for DSM.

First of all you need some linux box, i used a VM running Ubuntu 12.04 LTS. 
Then you need some stuff for the compiling.

bekker@bekker:~$ sudo apt-get update
bekker@bekker:~$ sudo apt-get install build-essential debootstrap python-pip automake libgmp3-dev libltdl-dev libunistring-dev libffi-dev ncurses-dev imagemagick libssl-dev pkg-config zlib1g-dev gettext git curl subversion checkintltool gperf flex bison xmlto php5 expect libgc-dev mercurial cython lzip

According to SynoCommunity's example you also need bjam, but on ubuntu im told that its obsolete and libboost1.48-dev and libboost1.46-dev replaces it, so i installed them aswell.

bekker@bekker:~$ sudo apt-get install libboost1.48-dev libboost1.46-dev

Okay, now we are ready to clone the SPKSRC repo

bekker@bekker:~$ git clone https://github.com/SynoCommunity/spksrc.git

We now have all we need to get started with building node.js for the NAS.

cd spksrc/spk/node
make arch-armada370

If you are not using a DS213j, just replace "armada370" with the architecture of your NAS, you can check out a list here: What kind of CPU does my NAS have

If everything went well you should now have a folder called ´packages´ in the root of spksrc. 
If not? check out But my make failed

bekker@bekker:~$ cd spksrc/packages/node
bekker@bekker:~/spksrc/packages/node$ ls
node_armada370_0.10.6-1.spk

There its is, now just open up DSM, go to Package Center and click "Manual Install" and choose the spk you just compiled.

Voila! you now have Node.js on your Synology NAS.

Adding node to path

Lets tryout node real quick: 
SSH to your nas with a tool like putty, and login with root and your normal admin password.

Now you can try and type node, and you should get an error: -ash: node: not found.. 
This is okay, node just isnt added to path, and this is real easy to fix.

Now before we can add it to path, we need to know where the node binaries are located. Mine was at /volume1/@appstore/node/bin/, but you can find yours easy by doing this:

Bekker-Nas> find / -name node
/usr/syno/etc/packages/node
/usr/local/node
find: /proc/13093: No such file or directory
find: /proc/13094: No such file or directory
find: /proc/13096: No such file or directory
find: /proc/13097: No such file or directory
find: /proc/13098: No such file or directory
find: /proc/13099: No such file or directory
find: /proc/13100: No such file or directory
find: /proc/13101: No such file or directory
find: /proc/13102: No such file or directory
find: /proc/13103: No such file or directory
/var/packages/node
/volume1/@appstore/node
/volume1/@appstore/node/bin/node << THERE IT IS
/volume1/@tmp/pkglist.tmp/icon/INST/node

Lets do a quick check

Bekker-Nas> cd /volume1/@appstore/node/bin/
Bekker-Nas> ls
node
npm

The files are there, now lets add it to path

Bekker-Nas> PATH=/volume1/@appstore/node/bin:$PATH
Bekker-Nas> echo $PATH
/volume1/@appstore/node/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin

That looks right, lets do a test and run a helloworld.js file i upped to the nas

Bekker-Nas> node helloworld.js
Hello Synology!

Great Success!

Enjoy your new node.js server! 

But my make fails

Some people (including myself) had a problem when running the makecommand, and gets an error like this:

Makefile:19: *** armada370 is not a supported architecture. stop.

If this is the case, we need to make a small edit of a file.

bekker@bekker:~$ vim spksrc/cross/node/Makefile

Now replace ifneq ($(findstring $(ARCH),88f6281 bromolow cedarview x86),$(ARCH)) with ifneq ($(findstring $(ARCH),88f6281 bromolow cedarview x86 armada370),$(ARCH)) (just replace armada370 with your arch.)

Now try to make again, and now everythin should be fine.

Extract 2D drawing from STL using OpenSCAD

Extract 2D drawing from STL using OpenSCAD

Enabling pins on Beaglebone Black