web-dev-qa-db-ja.com

エラー:EACCES:Elastic Beanstalkで「npm install」を実行すると権限が拒否されました

Elastic Beanstalkを介してデフォルトのクリーンなnode.jsアプリをプロビジョニングし、node.jsスクリプトがプロジェクトディレクトリ(npm install)内で/var/app/current/deploy-distを実行しようとしていますが、次の権限エラーがスローされます:

npm WARN locking Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock'
npm WARN locking     at Error (native)
npm WARN locking  /tmp/.npm/_locks/staging-f212e8d64a01707f.lock failed { Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock'
npm WARN locking     at Error (native)
npm WARN locking   errno: -13,
npm WARN locking   code: 'EACCES',
npm WARN locking   syscall: 'open',
npm WARN locking   path: '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' }
npm WARN deploy-dist No description
npm WARN deploy-dist No repository field.
npm WARN deploy-dist No license field.
npm ERR! Linux 4.4.35-33.55.amzn1.x86_64
npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v6.9.1-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v6.9.1-linux-x64/bin/npm" "install"
npm ERR! node v6.9.1
npm ERR! npm  v3.10.8
npm ERR! path /tmp/.npm/_locks/staging-f212e8d64a01707f.lock
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall open

npm ERR! Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock'
npm ERR!     at Error (native)
npm ERR!  { Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock'
npm ERR!     at Error (native)
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'open',
npm ERR!   path: '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     /var/app/current/deploy-dist/npm-debug.log

package.jsonは次のとおりです。

{
  "dependencies": {
    "node-fetch": "^1.3.3"
  }
}

Sudoでnpm installを実行することは明らかに機能しますが、解決策として回避することをお勧めします。

NPM_CONFIG_PREFIX~のディレクトリに npm docs Suggestion のように設定しても機能せず、問題が解決しません。

問題は/tmp/.npmの不正な権限にあると思われます。

drwxr-xr-x 114 root root 4.0K Dec 27 17:04 .npm

単純なnpm installがそのままで機能することを期待していたので、これは混乱を招きます。

UPDATE:プロジェクトディレクトリにnode_modulesフォルダがすでに含まれている必要はありませんが、それを削除してnpm installを実行しても、修理する。

13
Sbbs

私はこの問題を抱えていました! ebextensions を使用して、tmp/npm/.locksフォルダーの権限を変更する デプロイ後のスクリプト を作成できます。

Node.jsプロジェクトで、.ebextensionsフォルダーをまだ作成していない場合は作成します。次に、新しい構成ファイルを追加します。 00_create_postdeploy_script.config、次のyaml:

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_fix_node_permissions.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      chown -R nodejs:nodejs /tmp/.npm/_locks/

デプロイすると、/opt/elasticbeanstalk/hooks/appdeploy/postというスクリプトが99_fix_node_permissions.shに作成され、次のようになります。

#!/usr/bin/env bash
chown -R nodejs:nodejs /tmp/.npm/_locks/

そのpostフォルダーにあるため、アプリのデプロイ後に自動的に実行され、必要に応じて権限を変更します。

EDIT:whole.npmフォルダの権限に問題がある場合、次に、設定ファイルの最後の行を次のように変更する必要があります。

chown -R nodejs:nodejs /tmp/.npm/
12
hsriskantha

私は過去にこの問題を抱えていましたが、私の場合、キャッシュを消去すると問題が解決しました。これをお試しください

npm cache clean

それが役に立てば幸い。

0
Mukul Jain