ダメ人間オンライン

あまり信用しないほうがいい技術メモとか備忘録とかその他雑記

Proxy環境下でnpmインストール

Proxy環境下でnpmをインストールしようとしたらすんなりいかなかったのでメモ。行き当たりばったりで解決できるようなことですが。

社内のwindowsマシンでもnode.js使いたかったんです。なのでcygwinです。

npmのインストール

npmのインストールは"基本的には"下記のコマンド一発で大丈夫です。

% curl http://npmjs.org/install.sh | sh

Proxy環境ならオプションつけてやりましょう。

% curl --proxy http://hogehoge:port http://npmjs.org/install.sh | sh

が、

gzip: stdin: unexpected end of file
tar: これは tar アーカイブではないようです
tar: 前のエラーにより失敗ステータスで終了します
It failed

とかなんとか出力されて失敗します。何がダメかというとinstall.shの中でもcurlを使ってるのでそっちにも--proxyをつけないといけません。スマートじゃないですが一旦ファイルを落として編集しました。

% curl --proxy http://hogehoge:port -o install.sh http://npmjs.org/install.sh

install.shの二箇所でcurlを使ってるとこがあるのでそこに--proxyオプションをつけてやります。これで大丈夫なはず。

これでおk!It worked!



モジュールのインストール

この流れでexpressをnpmで入れようとすると失敗しました。

% npm install express
npm info it worked if it ends with ok
npm info using npm@0.3.17
npm info using node@v0.4.2
npm ERR! Error: ECONNREFUSED, Could not contact DNS servers
npm ERR!     at IOWatcher.callback (dns.js:53:15)
npm ERR! Report this *entire* log at <http://github.com/isaacs/npm/issues>
npm ERR! or email it to <npm-@googlegroups.com>
npm ERR! Just tweeting a tiny part of the error will not be helpful.
npm ERR! System CYGWIN_NT-5.1 1.7.7(0.230/5/3)
npm ERR! argv { remain: [ 'express' ],
npm ERR! argv   cooked: [ 'install', 'express' ],
npm ERR! argv   original: [ 'install', 'express' ] }
npm not ok

Could not contact DNS serversとか言ってますね。こちらのサイトによるとnode.jsのビルド時にresolv.confを使う方法が適用されるため、resolv.confにnameserverを書いてないとダメみたいです。

なので/etc/resolv.confにDNSのIPを設定しましょう。下記の例ではGoogle Public DNSのプライマリとセカンダリのIPアドレスを設定してます。

nameserver 8.8.8.8
nameserver 8.8.4.4

そしてしれっとproxyの設定もしときましょう。

% npm config set proxy http://hogehoge:port

今度こそおk!!


LINK

node.jsとnpmのインストール - 自分の感受性くらい