Menjalankan Komposer tanpa menggunakan sudo (mencoba mengubah pemilik dan izin)

12

Setiap kali saya menjalankan komposer (mis sudo composer install, sudo composer self-update. , Dll.) Saya perlu menjalankan ini dengan sudo karena pemilik file adalah root.

Namun setiap kali saya menggunakan komposer dengan sudo root memiliki folder vendor dan kemudian saya harus mengubah pemilik folder itu / hak istimewa dari root ke www-data.

Apa cara terbaik untuk memperbaikinya sehingga saya tidak harus menjalankan sudo setiap saat?

Ubah pemilik /usr/local/bin/composerdari root ke www-data?

Apakah ini cara yang ideal untuk menangani ini agar tidak perlu mengubah kepemilikan dan memberikan izin setiap kali saya menggunakan sudo composer install?

Sunting: Izin untuk komposer saat ini -rwxr-xr-x. Dan saya sudah mencoba mengalihkan pemilik /usr/local/bin/composerlebih ke www-data:www-datadengan izin ditetapkan ke 775, dan masih saya tidak dapat menjalankan komposer tanpa menjalankan sudo.

naik angin puyuh
sumber

Jawaban:

8

Jika "semua orang" diizinkan membaca dan menjalankan komposer, Anda tidak perlu menggunakan sudo:

sudo chmod 755 /var/local/bin/composer

Karena Anda telah menjalankan komposer setidaknya sekali root, direktori cache komposer (per-pengguna-) sekarang dimiliki oleh root dan karenanya tidak dapat ditulisi oleh pengguna normal Anda.

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

akan memperbaiki pemilik file.

tkausl
sumber
Saya sudah mencoba ini dan saya masih tidak bisa berjalan composer self-updatetanpa menggunakan sudo. Apakah saya perlu menggunakan 775?
Naik angin puyuh
Pembaruan diri tidak akan berfungsi dengan 755 tetapi apakah ini penting? pembaruan sendiri tidak perlu Anda lakukan setiap hari, perbarui saja setiap 2 minggu sekali (dengan sudo tentu saja).
tkausl
Sudah mencoba composer updatedan ini juga tidak berfungsi dengan izin itu. Saya masih harus menggunakan sudo dulu. Ini adalah kesalahan yang saya dapatkanfile_put_contents(/home/lamp/.composer/cache/repo/https---packagist.org/packages.json): failed to open stream: Permission denied
mengendarai angin puyuh
ooh, ya, Anda sudah menggunakan "sudo" untuk memperbarui beberapa deps Anda, saya pikir "/home/lamp/.composer/" dimiliki oleh root, hapus saja folder ini (hanya sebuah cache), maka ia seharusnya bekerja tanpa sudo. (Atau kepemilikan perubahan: chown -R lamp:lamp /home/lamp/.composer)
tkausl
Itu berhasil, pergi dengan mengganti pemilik ke lampu. Bisakah Anda memperbarui jawaban Anda dan saya akan menerimanya? Terima kasih takusl
kendarai angin puyuh
5

Saya telah berurusan dengan masalah ini selama berminggu-minggu.

Saya pikir solusinya adalah menjalankan pembaruan diri komposer dengan -H

sudo -H composer self-update

Sebelum melakukan ini pastikan untuk menghapus direktori .composer di root dan direktori home dari pengguna yang ingin Anda jalankan komposer.

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

Menjalankan pembaruan mandiri sudo komposer tanpa tanda -H akan membuat ~ / .composer yang dimiliki oleh root dan akan mencegah perintah komposer lain memiliki kesalahan izin.

composer config
composer install 

Menurut pendapat saya memanggil sudo composer self-update seharusnya tidak membuat file yang dimiliki oleh root di direktori home pengguna saat ini.

Catatan jika Anda mengikuti petunjuk ini pada komposer Ubuntu 14.04 akan menempatkan cache di:

 ~/.cache/composer

Daripada:

~/.composer/cache

Ini karena variabel lingkungan XDG_RUNTIME_DIR yang ditentukan dalam Ubuntu 14.04 tetapi tampaknya tidak didefinisikan dalam Ubuntu 12.04

Diskusi terkait di sini

Pengulangan
sumber
Ini tidak membantu jika Anda sudah menjalankan versi komposer terkini. $ sudo -H composer self-update $ You are already using composer version 1.3.0 (stable channel).
Cragmonkey
@Ragmonkey - Saya menjalankan versi terbaru dari komposer tetapi hanya menghapus ~/.composerfolder sepertinya dapat menyelesaikan masalah.
Cyclonecode