Запуск Composer без использования sudo (пробовал сменить владельца и права)

13

Каждый раз, когда я запускаю composer (например, sudo composer install, sudo composer self-updateи т. Д.), Мне нужно запускать это с помощью sudo, поскольку владельцем файла является root.

Однако каждый раз, когда я использую composer с sudo root, он владеет папкой vendor, а затем мне приходится менять владельца этой папки / привилегий с root на www-data.

Каков наилучший способ исправить это, чтобы мне не приходилось запускать sudo каждый раз?

Сменить владельца /usr/local/bin/composerс root на www-данные?

Это идеальный способ справиться с этим, чтобы избежать необходимости менять владельца и назначать разрешение каждый раз, когда я использую sudo composer install?

Изменить: разрешения для композитора в настоящее время -rwxr-xr-x. И я попытался переключить владельца /usr/local/bin/composerна www-data:www-dataс разрешениями, установленными на 775, и все же я не могу запустить композитор без запуска sudo.

кататься на вихрях
источник

Ответы:

9

Если «всем» разрешено читать и выполнять composer, вам не нужно использовать sudo:

sudo chmod 755 /var/local/bin/composer

Поскольку вы уже выполнили composer по крайней мере один раз как root, каталог кэша composers (per-user-) теперь принадлежит root и, следовательно, не доступен для записи обычному пользователю.

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

исправит владельца файла.

tkausl
источник
Я пробовал это, и я все еще не могу бежать composer self-updateбез использования sudo. Нужно ли использовать 775?
кататься на вихрях
Самообновление не будет работать с 755, но имеет ли это значение? Самостоятельное обновление - это не то, что вам нужно выполнять каждый день, просто обновляйте его каждые 2 недели или около того (конечно же, с помощью sudo).
tkausl
Пробовал, composer updateи это также не работает с этими разрешениями. Я все еще должен сначала использовать sudo. Это ошибка, которую я получаюfile_put_contents(/home/lamp/.composer/cache/repo/https---packagist.org/packages.json): failed to open stream: Permission denied
кататься на вихрях
о, да, вы уже использовали "sudo" для обновления некоторых ваших deps, я думаю, что "/home/lamp/.composer/" принадлежит root, просто удалите эту папку (это просто кеш), тогда она должна работать без Судо. (Или смена собственника: chown -R lamp:lamp /home/lamp/.composer)
tkausl
Вот и все, смена владельца на лампу. Можете ли вы обновить свой ответ, и я его приму? Спасибо takusl
кататься на
5

Я занимался этим вопросом уже несколько недель.

Я думаю, что решение состоит в том, чтобы запустить самообновление композитора с -H

sudo -H composer self-update

Перед этим обязательно удалите каталоги .composer в корневом каталоге и домашний каталог пользователя, которого вы хотите запустить composer.

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

Запуск самообновления sudo composer без флага -H создаст ~ / .composer, которым владеет root, и предотвратит ошибки других команд composer.

composer config
composer install 

По моему мнению, вызов самообновления sudo composer не должен создавать файлы, принадлежащие пользователю root, в домашнем каталоге текущего пользователя.

Обратите внимание, что если вы будете следовать этим инструкциям на Ubuntu 14.04, композитор поместит кеш в:

 ~/.cache/composer

Скорее, чем:

~/.composer/cache

Это происходит из-за переменной среды XDG_RUNTIME_DIR, определенной в Ubuntu 14.04, но, похоже, не определенной в Ubuntu 12.04

Связанное обсуждение здесь

повторять
источник
Это не поможет, если вы уже используете самую последнюю версию Composer. $ sudo -H composer self-update $ You are already using composer version 1.3.0 (stable channel).
Cragmonkey
@Cragmonkey - я запускал последнюю версию composer, но, ~/.composerпохоже, простое удаление папки решило проблему.
Cyclonecode