brew postinstall node を実行する際に sudo を求められたので、sudo なしでできるように


概要

node.js を brew からインストールしようと、brew install node を実行すると、brew postinstall node を実行する旨のエラーが発生したので、エラーに従い、brew postinstall node を実行しようとすると sudo 権がいることが判明しました。はじめは sudo を使って node をインストールしたのですが、brew なんだから sudo 権なしで実行できるはず、どこかの実行権限がおかしくなっているのではないかと思い立ち、sudo 権なしで brew postinstall できるよう対処しました。

sudo を使って無理矢理 brew postinstall node をした話

node.js を入れようと、とりあえず brew install node を実行してみました。

$ brew install node
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/node-0.10.29.mavericks.bottle.tar.gz
Already downloaded: /Library/Caches/Homebrew/node-0.10.29.mavericks.bottle.tar.gz
==> Pouring node-0.10.29.mavericks.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> make install
npm ERR! Additional logging details can be found in:
npm ERR!     /usr/local/lib/node_modules/npm/npm-debug.log
npm ERR! not ok code 0
make[1]: *** [node_modules/.bin/ronn] Error 1
make: *** [man/man3/npm-bin.3] Error 2
Warning: The post-install step did not complete successfully
You can try again using `brew postinstall node`
==> Summary
  /usr/local/Cellar/node/0.10.29: 1547 files, 18M

brew postinstall node をするよう言われたので、これをまた実行します。

$ brew postinstall node
==> make install
npm ERR! Additional logging details can be found in:
npm ERR!     /usr/local/lib/node_modules/npm/npm-debug.log
npm ERR! not ok code 0
make[1]: *** [node_modules/.bin/ronn] Error 1
make: *** [man/man3/npm-bin.3] Error 2

READ THIS: https://github.com/Homebrew/homebrew/wiki/troubleshooting

エラーが発生。/usr/local/lib/node_modules/npm/npm-debug.log にエラーのログが出ていると予想されるのですが、このときの私はそれを見ることなく Google で検索をしていました。(ほんとは見るべきでした)

npmコマンドが使えなくなったので、node.jsからインストールした | Your Way, My Way, Any Way -

上記のサイトで、sudo brew postinstall node ならエラーが出なかった、という記事があったため、sudo 付きで実行してみました。

$ sudo brew postinstall node
==> make install
==> /usr/local/bin/npm update npm -g --prefix /usr/local

エラー発生せず終わりました。

sudo なしで実行できるようにがんばる

brew を使うときは sudo なしで実行したいので、sudo なしでできないかと思い、node.js の再インストールを試みました。

node をアンインストール

npm uninstall npm -g して、brew uninstall nodeを実行する。

再び brew install node を実行

brew install node を再び実行すると、また最初のエラーが発生しました。
今度はちゃんと /usr/local/lib/node_modules/npm/npm-debug.log をのぞいてみます。

$ less /usr/local/lib/node_modules/npm/npm-debug.log

10 silly lockFile 806e3618-ronn ronn
11 verbose lock ronn /Users/misaki/.npm/806e3618-ronn.lock
12 silly lockFile 806e3618-ronn ronn
13 error Error: Attempt to unlock ronn, which hasn't been locked
13 error     at unlock (/usr/local/lib/node_modules/npm/lib/cache.js:1434:11)
13 error     at cb (/usr/local/lib/node_modules/npm/lib/cache.js:925:5)
13 error     at /usr/local/lib/node_modules/npm/lib/cache.js:942:20
13 error     at /usr/local/lib/node_modules/npm/lib/cache.js:1420:7
13 error     at /usr/local/lib/node_modules/npm/node_modules/lockfile/lockfile.js:167:38
13 error     at OpenReq.Req.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:144:5)
13 error     at OpenReq.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:64:22)
13 error     at Object.oncomplete (fs.js:107:15)
14 error If you need help, you may report this *entire* log,
14 error including the npm and node versions, at:
14 error     <http://github.com/npm/npm/issues>
15 error System Darwin 13.3.0
16 error command "node" "/usr/local/lib/node_modules/npm/cli.js" "install" "ronn" "--no-global"
17 error cwd /usr/local/lib/node_modules/npm
18 error node -v v0.10.29
19 error npm -v 1.4.9

“Error: Attempt to unlock ronn, which hasn't been locked” でググってたら以下のサイトを発見しました。

node.js - NPM cannot install dependencies -

ここを参考に、ホームディレクトリ直下の .npm の権限を確認してみました。

$ ls -la
drwxr-xr-x+ 14 root    wheel     476  7 22 16:45 .npm

root で wheel 所有だったので、権限を自分に変更してみます。

$ sudo chown -R misaki:staff .npm

これでもう一回 brew postinstall node を実行。

$ brew postinstall node
==> make install
==> /usr/local/bin/npm update npm -g --prefix /usr/local
Error: Permission denied - /Users/misaki/Library/Logs/Homebrew/node/02.npm

だめでした。
エラーに従って、権限確認します。

$ ls -l /Users/misaki/Library/Logs/Homebrew/node/
total 2344
-rw-r--r--+ 1 misaki  staff     1201 10  5  2013 01.configure
-rw-r--r--+ 1 misaki  staff        0  7 22 17:09 01.make
-rw-r--r--+ 1 misaki  staff  1187941 10  5  2013 02.make
-rw-r--r--+ 1 root    staff      412  7 22 16:45 02.npm

また自分で実行出来るよう権限を変更します。

$ sudo chown -R misaki:staff /Users/misaki/Library/Logs/Homebrew/node/02.npm

再チャレンジ。

$ brew postinstall node
==> make install
==> /usr/local/bin/npm update npm -g --prefix /usr/local

sudo なしでいけました!