メインコンテンツまでスキップ

Raspberry Pi で npm install すると ECONNREFUSED となる際の対処法

Raspberry Pi で、 npm install しようとすると、 ECONNREFUSED というエラーが出てきて嵌った。

Raspberry Pi の OS は Raspbian GNU/Linux 11 (bullseye) で、 Debian のバージョンは 11.1 。

npm-cache_logs のログを確認したところ、このような内容だった。

0 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'install', 'is-promise' ]
1 info using npm@8.1.2
2 info using node@v17.1.0
...
50 error FetchError: request to https://registry.npmjs.org/is-promise failed, reason: connect ECONNREFUSED 2606:4700::6810:1a23:443
50 error at ClientRequest.<anonymous> (/usr/lib/node_modules/npm/node_modules/minipass-fetch/lib/index.js:110:14)
50 error at ClientRequest.emit (node:events:390:28)
50 error at TLSSocket.socketErrorListener (node:_http_client:447:9)
50 error at TLSSocket.emit (node:events:402:35)
50 error at emitErrorNT (node:internal/streams/destroy:164:8)
50 error at emitErrorCloseNT (node:internal/streams/destroy:129:3)
50 error at processTicksAndRejections (node:internal/process/task_queues:83:21) {
50 error code: 'ECONNREFUSED',
50 error errno: 'ECONNREFUSED',
50 error syscall: 'connect',
50 error address: '2606:4700::6810:1a23',
50 error port: 443,
50 error type: 'system',
50 error requiredBy: '.'
50 error }
51 error If you are behind a proxy, please make sure that the
51 error 'proxy' config is set properly. See: 'npm help config'
52 verbose exit 1

ログを見ただけでは原因がわからなかったので「 npm ECONNREFUSED 」で調べたものの、プロキシ関係の話しか出てこなかった。プロキシの設定は行っていないので今回のエラーはこれらには該当しないと考えられる。

次に、 ECONNREFUSED となった IP アドレスを調べてみたら以下のページがヒットした。

よくわかんないけど、 IPv6 で npm パッケージをインストールすると上手く行かないことがあるみたい。

ifconfig で Raspberry Pi のネットワークの設定を確認したところ、 IPv6 が有効になっていたので、無効にする方法を調べたら、下のページがヒットした。

このページの内容に沿って作業を進めていった。 /etc/sysctl.conf を普通のテキストエディタで編集したところ「権限がない」的なことを言われて保存できなかったので、 sudo nano で編集して保存した。

再起動して sudo sysctl -p して再度 npm install したところパッケージのインストールに成功した。

CDN の問題だったらもっと日本語の記事があってもいい気がするし、結局原因がどこにあるのかがわからないのがもどかしいが、あいにく深堀りできるほどの知識を私はまだ持ち合わせていない。

2022/09/18 追記:Linux Mint でも同じことが起きた