はじめに
TruffleをDockerのUbuntu環境にインストールしようとしたら、エラーが発生してインストールできなかったので、
解決策をメモ。
結論
npm install
をrootユーザーで実施していたため、権限エラーが出ていました。
rootユーザーを許可して解決。
現象
Truffleの公式通りにnpm install -g truffle
を実行すると、下記エラーが出て、インストールに失敗しました。
環境
Docker: 20.10.8
Docker上のUbuntu: 20.04
エラー
> node-gyp-build
sh: 1: node-gyp-build: Permission denied
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.1.2 (node_modules/truffle/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: iso-constants@0.1.2 (node_modules/truffle/node_modules/iso-constants):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: iso-constants@0.1.2 install: `node build.js > index.browser.js`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: spawn ENOENT
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! bufferutil@4.0.3 install: `node-gyp-build`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the bufferutil@4.0.3 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-08-12T07_36_52_669Z-debug.log
解決策
下記コマンドでrootユーザーでのインストールを許可して、
再度npm install -g truffle
を実行するとインストールに成功。
npm config set unsafe-perm true
デフォルトだとunsafe-perm
の値がfalseになっているそうです。
※上記以外にもnpm install
のオプションに--unsafe-perm
を付けて実行する手もあるようです。
安全面を考えると一律rootユーザーでのインストールを許可するより
一時的に許可する方が良さそうです。
が、今回はローカルで勉強用にいじるTruffle環境を作っているだけなので、試していません。
※そもそも論でnpm install
は本来rootユーザーではなく、別途ユーザーを作成して実行するべきなのかも?(調べきれていません。。。)
参考
・【docker】npm installしようとしてnode-gyp: Permission deniedエラー
https://hatolabo.com/programming/docker%E3%81%A7npm-install%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%A6node-gyp-permission-denied%E3%82%A8%E3%83%A9%E3%83%BC
以上ですー。