Exécution de Composer sans utiliser sudo (tentative de modification du propriétaire et des autorisations)

13

Chaque fois que je lance Composer (par exemple, sudo composer install, sudo composer self-updateetc.), je dois l'exécuter avec sudo car le propriétaire du fichier est root.

Cependant, chaque fois que j'utilise le composeur avec sudo root possède le dossier du fournisseur, puis je dois changer le propriétaire de ce dossier / privilèges de root en www-data.

Quelle est la meilleure façon de résoudre ce problème afin que je n'aie pas à exécuter sudo à chaque fois?

Changer le propriétaire de /usr/local/bin/composerroot en www-data?

Est-ce le moyen idéal de gérer cela pour éviter d'avoir à changer de propriétaire et à attribuer une autorisation chaque fois que j'utilise sudo composer install?

Modifier: les autorisations pour le compositeur sont actuellement -rwxr-xr-x. Et j'ai essayé de changer le propriétaire de /usr/local/bin/composerover www-data:www-dataavec des autorisations définies sur 775, et je ne peux toujours pas exécuter composer sans l'exécuter sudo.

chevauche les tourbillons
la source

Réponses:

9

Si "tout le monde" est autorisé à lire et à exécuter Composer, vous n'avez pas besoin d'utiliser sudo:

sudo chmod 755 /var/local/bin/composer

Puisque vous avez déjà exécuté composer au moins une fois en tant que root, le répertoire cache des compositeurs (par utilisateur) appartient désormais à root et n'est donc pas accessible en écriture par votre utilisateur normal.

sudo chown -R lamp:lamp /home/lamp/.composer

va fixer le propriétaire du fichier.

tkausl
la source
J'ai essayé cela et je ne peux toujours pas exécuter composer self-updatesans utiliser sudo. Dois-je utiliser 775?
surfez sur les tourbillons
La mise à jour automatique ne fonctionnera pas avec 755, mais est-ce important? l'auto-mise à jour n'est rien que vous aurez besoin d'exécuter tous les jours, il suffit de le mettre à jour toutes les 2 semaines environ (avec sudo bien sûr).
tkausl
Essayé composer updateet cela ne fonctionne pas non plus avec ces autorisations. Je dois toujours utiliser sudo en premier. C'est l'erreur que je reçoisfile_put_contents(/home/lamp/.composer/cache/repo/https---packagist.org/packages.json): failed to open stream: Permission denied
montez les tourbillons
ooh, oui, vous avez déjà utilisé "sudo" pour mettre à jour certains de vos dépôts, je pense que "/home/lamp/.composer/" appartient à root, supprimez simplement ce dossier (c'est juste un cache), alors il devrait fonctionner sans sudo. (Ou changement de propriété: chown -R lamp:lamp /home/lamp/.composer)
tkausl
Cela a fait l'affaire, a consisté à changer le propriétaire en lampe. Pouvez-vous mettre à jour votre réponse et je l'accepterai? Merci takusl
chevauchez les tourbillons
5

Je traite ce problème depuis des semaines.

Je pense que la solution consiste à exécuter la mise à jour automatique du compositeur avec le -H

sudo -H composer self-update

Avant de faire cela, assurez-vous de supprimer les répertoires .composer à la racine et le répertoire personnel de l'utilisateur que vous souhaitez exécuter composer.

sudo rm -rf /root/.composer
sudo rm -rf /home/ubuntu/.composer

L'exécution de la mise à jour automatique de sudo composer sans l'indicateur -H créera ~ / .composer qui appartient à root et empêchera les autres commandes de composer d'avoir des erreurs d'autorisation.

composer config
composer install 

À mon avis, appeler l'auto-mise à jour de sudo composer ne devrait pas créer de fichiers appartenant à root dans le répertoire personnel des utilisateurs actuels.

Notez que si vous suivez ces instructions sur Ubuntu 14.04, le composeur placera le cache dans:

 ~/.cache/composer

Plutôt que:

~/.composer/cache

Cela est dû à la variable d'environnement XDG_RUNTIME_DIR définie dans Ubuntu 14.04 mais ne semble pas être définie dans Ubuntu 12.04

Une discussion connexe ici

Répéter
la source
Cela n'aide pas si vous utilisez déjà la version la plus récente de composer. $ sudo -H composer self-update $ You are already using composer version 1.3.0 (stable channel).
Cragmonkey
@Cragmonkey - J'utilisais la dernière version de composer, mais la suppression du ~/.composerdossier semble résoudre le problème.
Cyclonecode