8
votes

"npm run build" = "react-scripts: Autorisation refusée"

J'essaie de déployer mon application Windows 10 Spring-Boot / React sur Ubuntu 18.04 mais continue à recevoir l'erreur "react-scripts: Permission refusée" malgré de nombreuses tentatives de réparation. J'espère que l'un de vous, experts en réaction, pourra repérer ce que je fais mal.

Mon package.json ressemble à ceci

> root@ubuntu-s-1vcpu-1gb-nyc1-01:/var/lib/jenkins/workspace/MedAverter/medaverter-front#
> npm run build
> 
> > medaverter-front@0.1.0 build /var/lib/jenkins/workspace/MedAverter/medaverter-front
> > react-scripts build
> 
> sh: 1: **react-scripts: Permission denied** npm ERR! code ELIFECYCLE
> npm ERR! errno 126 npm ERR! medaverter-front@0.1.0 build:
> `react-scripts build` npm ERR! Exit status 126

Je suis connecté en tant que root et j'ai utilisé nvm pour installer node et lts. J'ai installé NVM comme ceci:

npm run build

puis a fait ceci:

[[1;34mINFO[m] Running 'npm run build' in /var/lib/jenkins/workspace/MedAverter/medaverter-front
[[1;34mINFO[m] [[1;34mINFO[m] > medaverter-front@0.1.0 build /var/lib/jenkins/workspace/MedAverter/medaverter-front
[[1;34mINFO[m] > react-scripts build [[1;34mINFO[m] 
[[1;31mERROR[m] sh: 1: **react-scripts: Permission denied**
[[1;31mERROR[m] npm ERR! code ELIFECYCLE
[[1;31mERROR[m] npm ERR! errno 126
[[1;31mERROR[m] npm ERR! medaverter-front@0.1.0 build: `react-scripts build` 
[[1;31mERROR[m] npm ERR! Exit status 126

Ensuite, je cd vers /var/lib/jenkins/workspace/MedAverter/medaverter-front et node_modules comme ceci:

npm run build

puis modifiez les autorisations en 777 de manière récursive, comme ceci:

chmod -R 777 /root/.nvm

J'ai également changé toutes les autorisations /root/.nvm en 777 de manière récursive, comme ceci:

chmod -R 777 node_modules

Je peux le faire construire une fois en utilisant

npm install -g

mais ensuite je lance un "Build Now" de Jenkins et ça échoue avec le même

nvm install node
nvm use node
nvm install --lts
nvm use --lts

Ensuite, je cd vers /var/lib/jenkins/workspace/MedAverter/medaverter-front et /var/lib/jenkins/workspace/MedAverter/medaverter-front lance

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

Et obtenez à nouveau la même erreur:

{
  "name": "medaverter-front",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.3.2",
    "@testing-library/user-event": "^7.1.2",
    "axios": "^0.19.2",
    "bootstrap": "^4.4.1",
    "react": "^16.13.0",
    "react-dom": "^16.13.0",
    "react-router-dom": "^5.1.2",
    "react-scripts": "3.4.0",
    "react-table-6": "^6.11.0",
    "react-validation": "^3.0.7",
    "reactstrap": "^6.5.0",
    "validator": "^12.2.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

J'ai littéralement passé des jours à essayer de comprendre cela. Suggestions?


4 commentaires

Vérifiez les autorisations utilisateur ubuntu avec lesquelles vous exécutez le nœud


Pourquoi avez-vous installé globalement puis modifié les autorisations dans node_modules , un répertoire non global? Avez-vous essayé de supprimer -g ? De plus, vos trucs chmod ne sont pas nécessaires et sont en fait vraiment dangereux. Veuillez ne pas faire ça. Autorisation refusée signifie généralement que l'indicateur exécutable n'est pas défini, ou il est considéré comme un autre utilisateur et les bits ne sont définis pour personne d'autre que l'utilisateur / groupe. La façon dont vous installez les modules est cependant très étrange.


Oui, je l'ai essayé sans le - g au départ et je n'ai pas pu le faire fonctionner. Ajout du -g plus tard en essayant différentes solutions. Je sais que la solution finale ne devrait pas impliquer de définir des privilèges 777, mais j'essaie simplement de faire fonctionner quelque chose, puis de revenir à la bonne manière plus tard une fois que la vraie solution sera révélée. Sais-tu ce que c'est?


J'avais rencontré un problème similaire lorsque j'ai installé npm et nvm avec sudo. Après l'avoir désinstallé et réinstallé avec des autorisations utilisateur régulières, je l'ai corrigé.


6 Réponses :


2
votes

Au lieu du paramètre par défaut "start": "react-scripts start" spécifié dans votre fichier package.json , essayez de le changer comme suit, puis essayez: "scripts": { "start": "node ./node_modules/react-scripts/bin/react-scripts.js start" }


1 commentaires

J'ai essayé mais j'ai eu la même erreur. Dois-je fermer la session PuTTY et en démarrer une nouvelle après avoir effectué la modification?



12
votes

Solution 1:

Je pense que react-script est globalement installé. alors essayez cette commande

sudo chmod -R 777 /usr/local/bin/npm

puis réexécutez l'application.

Solution 2:

essayez cette commande

which yarn

puis réexécutez l'application.

Solution 3;

Je pense que votre npm n'a pas la permission. vous pouvez essayer de courir par sudo

which npm

et vous pouvez résoudre ce problème comme ceci

Étape 1:

vérifiez le chemin de npm si vous utilisez npm par

sudo npm run build

vous allez "/ usr / local / bin / npm" ce type de chemin

OU

vérifiez le chemin du fil si vous utilisez du fil en

sudo chmod +x node_modules/.bin/react-scripts

vous allez "/ usr / local / bin / npm" ce type de chemin

Étape 2:

donnez l'autorisation 777 à ce chemin et essayez d'exécuter le projet

npm install react-scripts --save

9 commentaires

root @ ubuntu-s-1vcpu-1gb-nyc1-01: ~ # which npm /root/.npm-global/bin/npm chmod -R 777 .npm-global J'ai également fait la même chose pour le fil mais toujours avec la même erreur.


@ user3217883 essayez cette installation npm react-scripts --save, puis exécutez à nouveau l'application


@ user3217883 J'ai mis à jour ma réponse. vous pouvez essayer la solution 1 et la solution 2


oui ça a marché! Maintenant, je vais essayer un "Build Now" de Jenkins et voir si cela continue de fonctionner.


merde. maintenant j'obtiens une nouvelle erreur là-bas. Je ne pense pas que ce soit lié: FATAL: Impossible de commander 07bc21e6a1ad6baea65f5cb921ac763c1fd89243 hudson.plugins.git.GitException: Commande "git checkout -f 07bc21e6a1ad6baea65f5cb921ac763c1fd89243 code d'erreur retourné vers stverter-frontd" node_modules / @ babel / code-frame / LICENSE ': Autorisation refusée


Continuons cette discussion en chat .


stackoverflow.com/a/50319941/… pouvez-vous essayer ceci


Si quelqu'un d'autre rencontre cela, je devais également faire un chmod -R 777 node_modules après la solution 1 pour éviter une erreur dans Jenkins qui donnait une autre erreur d'autorisation refusée dans un fichier node_modules / @ babel / code-frame / LICENSE


@ user3217883 rm -rf node_modules && npm install pouvez-vous essayer ceci. Je pense qu'en raison d'un problème d'autorisation, d'autres erreurs se produisent



1
votes

Il semble que vous ne disposez pas des autorisations nécessaires pour créer ou exécuter l'application react,

Vous pouvez essayer de remplacer le propriétaire par l'utilisateur actuel en utilisant

npm run build

vous pouvez vérifier votre nom d'utilisateur en tapant whoami dans le terminal, cela se fait car l'utilisateur actuel n'a pas accès au dossier var ou à quoi que ce soit à l'intérieur par défaut. De plus, vous souhaitez modifier le mode d'accès pour lire et exécuter pour tous ceux qui utilisent

sudo su

alors vous pouvez vouloir changer d'utilisateur root en utilisant

 sudo chmod 755 /var/lib/jenkins/workspace/MedAverter/medaverter-front/

puis créez l'application en utilisant

   sudo chown -R username:username /var/lib/jenkins/workspace/MedAverter/medaverter-front/

Cela a fonctionné pour moi lorsque j'étais confronté à un problème similaire, j'espère que cela fonctionne aussi pour vous, Cheers :)


2 commentaires

Merci pour le post. Je ne l'ai vu qu'après avoir publié ma solution. Il n'y a qu'un seul utilisateur sur le serveur DigitalOcean et c'est root. Est-ce que su n'est pas la même chose que root?


Isn't su the same as root? Pas nécessairement, sans paramètres supplémentaires, Oui: su passerait à l'utilisateur root.su est en fait le système (qui a les privilèges root) mais comme root a la plupart des privilèges, il devrait fonctionner en premier lieu, puisque le serveur utilise www-data comme utilisateur par défaut, donc tout ce que le www-data peut accéder au serveur peut accéder, vous pouvez simplement remplacer le username d' username par www-data et sauter la 3ème commande et tout devrait être bon. Quoi qu'il en soit, il semble que vous ayez déjà résolu le problème, merci :)



1
votes

J'ai finalement trouvé une solution à ce problème. Cela a pris des jours d'efforts. Tout d'abord, j'ai supprimé le projet Jenkins et en ai créé un nouveau en utilisant Pipeline, plutôt que Freestyle. Ensuite, j'ai ajouté un Jenkinsfile avec un script. Cela a continué à échouer, mais j'avais maintenant la possibilité d'ajouter des commandes supplémentaires pour gérer les erreurs.

Une nouvelle erreur concernait jest-worker. J'ai exécuté la commande suivante sur le serveur DigitalOcean pour dépasser celle-ci:

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                echo 'Checkout...'
                sh 'sudo chmod -R 777 /var/lib/jenkins/workspace/MedAverter/medaverter-front'
                checkout scm
                sh 'sudo chmod -R 777 /var/lib/jenkins/workspace/MedAverter/medaverter-front'
                sh 'sudo chown -R jenkins /var/lib/jenkins/workspace/MedAverter/medaverter-front'
                stash 'sources'
            }
        }
        stage('Build') {
            steps {
                echo 'Build...'
                unstash 'sources'
                sh 'sudo chmod -R 777 /var/lib/jenkins/workspace/MedAverter/medaverter-front'
                sh 'sudo chown -R jenkins /var/lib/jenkins/workspace/MedAverter/medaverter-front'
                sh 'mvn clean package -DskipTests'
                stash 'sources'
            }
        }
    }
}

Ensuite, j'ai eu à nouveau l'ancienne erreur d'autorisations. Je pense que toutes ces erreurs d'autorisation sont dues au fait que l'utilisateur jenkins essaie d'exécuter des choses appartenant à l'utilisateur root, même si tout avait 777 autorisations. Je ne comprends pas cela, mais voici comment je l'ai contourné. Modifiez le fichier / etc / sudoers et ajoutez la ligne suivante:

jenkins ALL=(ALL) NOPASSWD:ALL

Modifiez ensuite le script de fichier Jenkins pour inclure chmod et chown récursifs. Voici le script complet qui a ENFIN fonctionné:

yarn add jest-worker

J'ai également dû augmenter la mémoire de la gouttelette DigitalOcean de 1 Go à 2 Go pour surmonter une autre erreur. Si quelqu'un connaît un meilleur moyen de surmonter cette erreur d'autorisations frustrante, veuillez commenter.


0 commentaires

0
votes

Depuis la racine de votre projet, entrez chmod +x node_modules/.bin/react-scripts


0 commentaires

0
votes

J'avais modifié les autorisations sur les dossiers plus tôt et annulé les modifications. Je crois que c'est ça.

Je viens de supprimer le dossier node_modules et de réinstaller les dépendances avec la commande yarn .

sudo rm -rf node_modules
yarn
yarn start


0 commentaires