Kikuchy's Second Memory

つくる楽しさをもっと伝えたい。プログラムを書いていて、わからなかったこと・気付いた事を書き留めています。

Node.js管理ツールのnvmを、システムワイドで使えるようにインストールする

借りっ放しにしてあまり使っていなかったVPSを、そろそろ本格的に使ってみたくて、一度リセットをかけました。
その際にnode.jsもインストールしようと思い、
「どうせ入れるならrbenv(Rubyのバージョン管理ツール)と同じくnvmでバージョンを管理できるようにしよう」
という主旨で、システム全体でnvm経由でインストールしたnode,jsを使えるようにしたいと思います。



VPSはDTIのを使ってます。環境は以下の通り。

  • OS: CentOS 6.3
  • gitインストール済み
  • node.jsのビルドに必要なパッケージ(gcc-c++ と openssl-devel)もインストール済み

方針はこんな感じ。

  • /usr/local/nvm 以下にファイルが入るようにする
  • ログイン時に nvm.sh が自動的に実行されるようにする
  • 全ユーザーが一つのバイナリを使う
  • npmで入れたものも、全ユーザーが使える
  • "$ sudo npm install ..." って感じでnpmパッケージのインストールができたら最高

作業工程は以下の通り。
(プロンプトは # がrootユーザー、 $ が一般ユーザーです)

まず、nvmを /usr/local 直下に展開します。
ここではgitを使っていますが、zipを解凍してコピーして来ても構わないと思います。

# cd /usr/local
# git clone git://github.com/creationix/nvm.git nvm
# . /usr/local/nvm/nvm.sh

次に、ログイン時に nvm.sh が自動的に実行されるようにします。nvmは、nvm.shを実行する事で自動的に必要なファイル群にパスを通してくれるので、普通にnode.jsをmake installしたのと同じように使おうと思ったら必要な作業なのです。

/etc/profile.d/nvm.sh というファイルを作成し、以下の内容を書き込みます。

source /usr/local/nvm/nvm.sh

準備が整ったので、おもむろにnode.jsをインストールします。

# nvm install 0.8.19

一度再ログインすると…

$ node -v
v0.8.19
$ npm -v
1.2.10

おおー、ちゃんとnodeが使える! しかもnpmまで勝手にインストールしてくれる!

では最後に、sudoからでもnpmが使えるようにしましょう。
今のままでは、sudoをしたときにPATHが通っていない扱いになるのです。
以下のコマンドを打ちます。

# visudo

これでsudoersという、sudoをするときの設定ファイルが編集できます。
セキュリティ上好ましくないらしいのですが、以下のように編集します。

Defaults    env_keep += "PATH"     # <- 追加

#Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin    # <- コメントアウト

env_keepにPATHを追加しても、secure_pathが優先されてしまいnodeにパスが通らないらしいです。
nvm.shでPATHを設定している辺りを書き換えれば、もう少し手がありそうな気もしますが。


さて、以上で作業は終了です。何て簡単なんだ!!
これだけで終わってはつまならいので、とりあえずTypeScriptを入れてみたいと思います。

$ sudo npm install -g typescript
$ tsc -v
Version 0.8.2.0

これでどこでもTypeScriptが使えますね! RailsでCoffieScriptの代わりにTypeScript使うgemあったりしないかな。