After all this fiddling with Node.js on my Mac, it’s time to see how it works out on the Raspberry Pi. This is a running summary of how to get a fresh setup with Node.js going.
The next step is to get this image onto an SD memory card. I used a 4 GB card, of which over half will be available once everything has been installed. Plenty!
Good instructions for this can be found at elinux.org – in my case the section titled Copying an image to the SD card in Mac OS X (command line). With a minor tweak on Mac OSX 10.8.2, as I had to use the following command in step 10:
sudo dd bs=1m if=~/Downloads/2012-12-16-wheezy-raspbian.img of=/dev/rdisk1
Next: insert the SD card and power up the RPi! Luckily, the setup comes with SSH enabled out of the box, so only an Ethernet cable and 5V power with USB-micro plug are needed.
When launched and logged in (user “pi”, password “raspberry” – change it!), it will say:
Please run 'sudo raspi-config'
So I went through all the settings one by one, overclocking set to “medium”, only 16 MB assigned to video, and booting without graphical display. Don’t forget to exit the utility via the “Finish” button, and then restart using:
$ sudo shutdown -r now
Now is a good time to perform all pending updates and clean up:
$ sudo -i # apt-get update # apt-get upgrade # apt-get clean # reboot
The reboot at the end helps make sure that everything really works as expected.
Up and running
That’s it, the system is now ready for use. Some info about my 256 MB RPi:
$ uname -a Linux raspberrypi 3.2.27+ #250 PREEMPT \ Thu Oct 18 19:03:02 BST 2012 armv6l GNU/Linux $ free total used free shared buffers cached Mem: 237868 51784 186084 0 8904 25972 -/+ buffers/cache: 16908 220960 Swap: 102396 0 102396 $ df -H Filesystem Size Used Avail Use% Mounted on rootfs 3.9G 1.6G 2.2G 42% / /dev/root 3.9G 1.6G 2.2G 42% / devtmpfs 122M 0 122M 0% /dev tmpfs 25M 213k 25M 1% /run tmpfs 5.3M 0 5.3M 0% /run/lock tmpfs 49M 0 49M 0% /run/shm /dev/mmcblk0p1 59M 18M 42M 30% /boot $ cat /proc/cpuinfo Processor : ARMv6-compatible processor rev 7 (v6l) BogoMIPS : 697.95 Features : swp half thumb fastmult vfp edsp java tls CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xb76 CPU revision : 7 Hardware : BCM2708 Revision : 0004 Serial : 00000000596372ab $
So far, it’s just a standard boilerplate setup. Yawn…
On to Node.js! Unfortunately, the build included in Debian/Raspbian is 0.6.19, which is a bit old. I’d rather get started with the 0.8.x series, so here’s how to build it from source.
But first, let’s use this simple trick to get write permission in /usr/local as non-root:
$ sudo usermod -aG staff pi
Note: you have to logout and back in, or reboot, to get the new permissions.
With that out of the way, code can be built and installed as user “pi” – no need for sudo:
$ curl http://nodejs.org/dist/v0.8.16/node-v0.8.16.tar.gz | tar xz $ cd node-v0.8.16 $ ./configure $ make (... two hours of build output gibberish ...) $ make install
That’s it. A quick check that everything is in working order:
$ node -v v0.8.16 $ npm -v 1.1.69 $ which node /usr/local/bin/node $ ldd `which node` /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0x40236000) libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0x40074000) librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0x40036000) libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0x40107000) libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x4023f000) libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0x4007f000) libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x400a7000) libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x402b0000) /lib/ld-linux-armhf.so.3 (0x400d2000) $
Oh, one more thing – the RPi doesn’t come with “git” installed, so let’s fix that right now:
$ sudo apt-get install git
There. Now you’re ready to start cookin’ with node and npm on the RPi. Onwards!
PS. If you don’t want to wait two hours, you can download my build, unpack with “tar xfz node-v0.8.16-rpi.tgz”, and do a “cd node-v0.8.16 && make install” to copy the build results into /usr/local/ (probably only works if you have exactly the same Raspbian image).