I found what appears to be a nice tutorial for installing Node on Ubuntu 10.4, so I’ll start with that.
To keep things simple, I’m going to skip the dependencies, grab the tgz file, and just try running it. Why not? Thing’s could’ve changed w/ Node and/or Ubuntu since that post was written, and I love it when packages are designed well enough to provide irrational users with informative feedback, so let’s see.
- wget http://nodejs.org/dist/node-v0.2.3.tar.gz
- tar -xf node-v0.2.3.tar.gz
- cd node
- ./configure
- make
- sudo make install
/home/erik/node-v0.2.3/wscript:132: error: could not configure a cxx compiler!
Nice! I need g++:
sudo apt-get install g++
/home/erik/node-v0.2.3/wscript:188: error: Could not autodetect OpenSSL support. Make sure OpenSSL development packages are installed. Use configure --without-ssl to disable this message.
Looks like I need ssl too:
sudo apt-get install libssl-dev
Configuration now passes, but I see this in the output:
... Checking for openssl : not found Checking for function SSL_library_init : yes Checking for header openssl/crypto.h : yes Checking for library rt : yes --- libeio --- Checking for library pthread : yes Checking for function pthread_create : yes Checking for function pthread_atfork : yes Checking for futimes(2) : yes Checking for readahead(2) : yes Checking for fdatasync(2) : yes Checking for pread(2) and pwrite(2) : yes Checking for sendfile(2) : yes Checking for sync_file_range(2) : yes --- libev --- Checking for header sys/inotify.h : yes Checking for function inotify_init : yes Checking for header sys/epoll.h : yes Checking for function epoll_ctl : yes Checking for header port.h : not found Checking for header poll.h : yes Checking for function poll : yes Checking for header sys/event.h : not found Checking for header sys/queue.h : yes Checking for function kqueue : not found ...
Rather than run into mysterious errors later, I’ll go ahead and install all the dependencies mentioned in the post:
sudo apt-get install g++ curl libssl-dev apache2-utils
But it doesn’t correct the problem. Doh! Oh, well. I’ll deal with any errors later.
Continuing on, I run make (it’s been a while since I watched C compile), and then sudo make install:
'install' finished successfully (0.239s)
🙂
Rather than starting with the tutorial’s translation example, I opt for the hello world example on the Node site:
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/');
I tried loading this, but no response. However, I grappled with my vm’s firewall recently enough to remember that I hadn’t opened port 8124, so I update the code to use port 80, and re-launch, but still get no response. Undaunted, I tell ufw to take a break:
sudo ufw disable && sudo shutdown -r now
Upon trying again, I noticed that I had the address wrong earlier – pilot error – but before enabling ufw, let’s see if we can get a response.
Curling http://127.0.0.1:8124/ returns “hello world”, but I’m not able to see this server from my laptop, i.e., curl http://172.16.83.133:8124/ doesn’t work.
Update (11/22/10): check out Padraig’s comment below about binding to 0.0.0.0.
It’s getting late, so this is a race against mental mutiny. Desparate, I stumble across another node.js + Ubuntu tutorial, and blindly install everything. I launch socket.io as per the instructions, bounce over to the browser, and … it works. Awesome. To the author of that post, nice job.
Ok. That’s enough for tonight. I’ll revisit this again later and try to understand what just happened.
In parting: Cats! In 3D! Don’t think. Just stare.

The example binds to 127.0.0.1. This means that it’s only accessible from the machine that node is running on. If you edit the example code to bind to 0.0.0.0 then it will bind on all interfaces and be accessible from your laptop.
Thanks for the tip, Padraig. I’ll add a note to the post pointing to your comment.
I’m just getting started with node.js and this blog post really helped me. Thank you!
Hi Jeff. I’m glad it was helpful. Thanks for letting me know 🙂