Baixe o binário do node.js (não descompacte). Lembre-se de onde baixou o pacote ;) Então rode:
# dica: não digite "$", apenas o que vem depois ;)
$ mkdir -p ~/.local
$ cd ~/.local
$ tar xzvf caminho/pro/pacote/node-v0.10.9-linux-x64.tar.gz --strip=1
Quando a descompactação terminar, configure o seguinte:
$ ln -s ~/.local/lib/node_modules .node_modules
$ touch ~/.npmrc
Use o editor de usa preferência para abrir o arquivo .npmrc criado anteriormente. Pelo terminal, usando o nano:
$ nano ~/.npmrc
Cole o seguinte conteúdo dentro do arquivo
prefix = ${HOME}/.local
tmp = ${HOME}/.local/tmp
cache = ${HOME}/.local/npm-cache
Se estiver usando o nano, tecle Ctrl+O para salvar e Ctrl+X para sair. Agora, adicione os executáveis do node no PATH:
$ echo "export PATH=$HOME/.local/bin:$PATH" >> ~/.bashrc
# o arquivo de destino pode mudar dependendo do SO ou configuração. No Ubuntu normalmente é .bashrc
Reinicie o terminal (feche e abra de novo), e teste o seguinte:
$ which node
# deve imprimir "/home/SEU USUARIO/.local/bin/node"
$ which npm
# deve imprimir "/home/SEU USUARIO/.local/bin/npm"
Se tudo rodou ok, então o node.js foi instalado corretamente, e já podemos instalar pacotes. Vamos testar o seguinte:
$ npm install -g express # note, sem sudo
# o output desse comando é auto-explicativo. Se houver algum erro, isso estará bem claro.
Se o comando rodou sem problemas, apenas cheque o local onde foi instalado:
$ which express
# deve imprimir "/home/SEU USUARIO/.local/bin/express"
Se o comando acima está correto, então está tudo instalado e configurado ok ;) Para testar, baixe os 3 arquivos neste link em uma pasta qualquer, e rodem o seguinte:
# Dêem cd na pasta onde estão os arquivos
$ npm install
$ node app.js
# Deve aparecer "Listening on port 3000"
# Neste momento, abram um browser e acessem http://localhost:3000/hello. Se aparecer "Hello world", FINALMENTE,
# tudo foi instalado corretamente.