2016-12-27 12 views
8

Udostępniłem domyślną czystą aplikację node.js przez Elastic Beanstalk i mam skrypt node.js próbujący uruchomić npm install w katalogu projektu (/var/app/current/deploy-dist), jednak po błędzie uprawnienie jest rzucony:Błąd: EACCES: odmowa uprawnień podczas uruchamiania `npm install` na Elastic Beanstalk

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 tylko:

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

Running npm install z sudo oczywiście działa, ale wolał zostać unikać rozwiązanie.

Ustawienie NPM_CONFIG_PREFIX do katalogu pod ~ zgodnie z npm docs suggestion również nie działa, a problem nadal występuje.

Podejrzewam, że problem leży w błędnych uprawnień dla /tmp/.npm, które są

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

Jest to mylące, ponieważ spodziewałem się proste npm install do pracy po wyjęciu z pudełka.

UPDATE: nie powinien, że katalog projektu zawiera już folder node_modules, ale nawet usunięcie go i działa npm install nie naprawić.

+0

Ktoś wydaje się być posiadające dokładnie ten sam problem na forum AWS teraz: https://forums.aws.amazon.com/thread.jspa?messageID=758699&tstart=0 – Sbbs

+0

W jaki sposób uruchomiłeś "instalację npm" z sudo w tej instancji Elastic Beanstalk? To nie jest sposób, ale będę mógł przetestować moją aplikację z tym tymczasowym obejściem. – sergi

+0

@sergi 'sudo /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 ' – Sbbs

Odpowiedz

4

Miałem ten problem! Możesz użyć ebextensions, aby utworzyć post-deploy script, który zmienia uprawnienia folderu tmp/npm/.locks.

W swoim projekcie node.js utwórz folder .ebextensions, jeśli jeszcze go nie masz. Następnie dodaj nowy plik konfiguracyjny, np. 00_create_postdeploy_script.config, z następującym 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/ 

Po wdrożeniu, to stworzy skrypt w /opt/elasticbeanstalk/hooks/appdeploy/post nazwie 99_fix_node_permissions.sh, która wygląda następująco:

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

Bo to w tym folderze post, to będzie uruchamiaj się automatycznie po wdrożeniu aplikacji - i tym samym zmień wymagane uprawnienia.

EDIT: Jeśli masz problemy z uprawnieniami całej.npm folderze , to należy zmienić ostatni wiersz pliku konfiguracyjnego do:

chown -R nodejs:nodejs /tmp/.npm/ 
+0

skorygował nieco odpowiedź, aby w pełni rozwiązać problem (chwon '/ tmp/.npm' zamiast tylko'/tmp/.npm/_locks') – Sbbs

+0

Nie jestem pewien, jak działają sugerowane zmiany tutaj, ale zaktualizowałem odpowiedź! – hsriskantha

1

Miałem ten problem w przeszłości iw moim przypadku wyczyszczenie pamięci podręcznej poprawiło mój problem. Proszę spróbuj tego

npm cache clean 

Mam nadzieję, że to pomaga.

+1

Niestety tego nie naprawiliśmy. – Sbbs

Powiązane problemy