Bagaimana mengatasi kesalahan izin pada OS X Lion setelah Homebrew menginstal

9

Saya baru saja memutakhirkan dari Snow Leopard ke Lion dan saya sedang mencoba memasang Homebrew. Namun setelah instalasi, saya menjalankan brew doctorsesuai instruksi instalasi, dan melihat serangkaian kesalahan yang menunjukkan bahwa / usr / direktori lokal tidak dapat ditulis. Sebagai contoh:

Error: /usr/local/share isn't writable.
This can happen if you "sudo make install" software that isn't managed
by Homebrew.

If a brew tries to write a file to this directory, the install will
fail during the link step.

You should probably `chown` /usr/local/share

Saya mendapatkan ini untuk banyak direktori:

You should probably `chown` /usr/local/include

You should probably `chown` /usr/local/share

You should probably `chown` /usr/local/share/man

Saya tidak tahu mengapa kesalahan ini muncul, karena saya adalah bagian dari grup Unix yang memiliki izin menulis ke direktori ini:

Mini:~ felciano$ ls -ld /usr/local/share
drwxrwxr-x  4 root  admin  136 May 13 15:53 /usr/local/share
Mini:~ felciano$ whoami
felciano
Mini:~ felciano$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root felciano
Mini:~ felciano$

Apa yang saya lewatkan?

Ramon
sumber
Mengapa Anda tidak "chown" direktori ini dengan nama pengguna Anda, seperti yang disarankan? Mereka seharusnya tidak menjadi bagian dari "root". Untuk beberapa pengguna Anda juga bisa mengubah hak akses group: apple.stackexchange.com/q/42127/14994
iolsmit
@olsols: Saya memiliki masalah yang sama persis. Namun, saya tidak mengerti mengapa /usr/localharus menjadi milik saya ketika mesin ini memiliki beberapa pengguna admin. Juga, Mungkin bagi saya untuk menulis ke lokasi brew doctormengeluh. Ada ide lain?
mgd

Jawaban:

7

EDIT: Masalahnya sekarang sudah diperbaiki di Homebrew:

Jika Anda masih mengalami masalah, perbarui Homebrew seperti ini:

brew update

Jika Anda ingin tahu apa masalahnya, saya telah menyimpan jawaban asli saya di bawah ini.


Abaikan masalah permisson untuk saat ini

Saya mengalami masalah yang sama persis dan menurut saya masalahnya brew doctorbukan pada instalasi Anda dan saya.

Saya pikir Anda harus mengabaikan masalah daripada mengubah kepemilikan /usr/local. Atau, Anda bisa memperbaiki brew doctorskrip lokal Anda sampai perbaikan dilepaskan. Lihat di bawah.

Saya tidak menganggap itu benar untuk /usr/localdimiliki oleh pengguna tertentu. Saya memiliki lebih dari satu pengguna admin di mesin ini. Anda harus meninggalkan /usr/localmilik root:adminsebagai pemilik dan grup.

Investigasi saya

Seperti untuk Anda, saya memiliki /usr/localyang dapat ditulis dengan sempurna oleh pengguna saya yang juga merupakan anggota admingrup:

$ ls -ld /usr/local/
drwxrwxr-x  14 root  admin  476 22 Jun 23:33 /usr/local/
$ whoami
mgd
$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root mgd rgd

Mari kita uji bahwa dir benar - benar dapat ditulis:

$ ls -l /usr/local/newfile
ls: /usr/local/newfile: No such file or directory
$ touch /usr/local/newfile
$ ls -l /usr/local/newfile
-rw-r--r--  1 mgd  admin  0 23 Jun 14:52 /usr/local/newfile

Penyelidikan lebih lanjut ke dalam brew doctorkode membawa saya pada kesimpulan bahwa penggunaan fungsi ruby Pathname.writable?menyebabkan masalah. Pertimbangkan sesi Ruby interaktif ini:

$ irb
>> require 'pathname'
=> true
>> Pathname('/usr/local').writable?
=> false

Fungsi Pathname.writable?mengatakan /usr/localtidak bisa ditulisi meskipun kita tahu itu.

Pathname.writable_real?Sebaliknya, menggunakan memberikan hasil yang benar - itu mengatakan bahwa direktori dapat ditulis:

>> Pathname('/usr/local').writable_real?
=> true

Ini harus diperbaiki di /usr/local/Library/Homebrew/cmd/doctor.rb. Anda dapat memperbaikinya di instalasi Anda sendiri sambil menunggu perbaikan.

Perbedaan antara kedua fungsi tersebut adalah (menurut Ruby docs di sini dan di sini ):

writable? (file_name) → true atau false: Mengembalikan nilai true jika file bernama dapat ditulis oleh id pengguna yang efektif dari proses ini.

writable_real? (file_name) → true atau false: Mengembalikan nilai true jika file bernama dapat ditulis oleh id pengguna sebenarnya dari proses ini.

mgd
sumber
Acungan jempol untuk penyelidikan dan klarifikasi mgd ... tepat! Tampaknya masalah serupa muncul di github.com sekitar setahun yang lalu, tetapi tidak pernah (semestinya?) Diselesaikan, setidaknya tidak dengan menggunakan writable_real?... mungkin sudah waktunya untuk permintaan tarik?!? :-)
pvandenberk
0

Saya percaya Anda hanya membutuhkan ini:

brew update

Lalu coba brew doctorlagi.

Anda mungkin masih mendapatkan kesalahan tentang dependensi yang tidak Anda gunakan (Java dalam kasus saya), yang tidak apa-apa. Jika Anda memiliki Alat Baris Perintah untuk Xcode diinstal alih-alih instalasi Xcode lengkap Anda juga akan mendapatkan pesan kesalahan yang mengatakan Anda memiliki jalur yang tidak valid, tetapi tepat di pesan Anda juga akan membaca bahwa tidak ada jalur yang valid jika Anda hanya menggunakan Alat Baris Perintah untuk Xcode, jadi tidak apa-apa juga.

Untuk kepentingan orang lain: Ingatlah bahwa Anda harus masuk sebagai admin saat melakukan ini agar bisa berfungsi.

Phil M
sumber
0

Saya mengikuti kombinasi saran iolsmit dan Phil M: Saya membagikan direktori ini ke nama pengguna saya, kemudian berlari brew updatelagi diikuti oleh brew doctor. Ini menghilangkan semua pesan kesalahan dan membuat instalasi sekarang tampaknya berfungsi dengan baik. Terima kasih semuanya!

Ramon
sumber
0

Acungan jempol untuk investigasi dan klarifikasi @ mgd ... tepat!

Tampaknya masalah serupa muncul di github.com sekitar setahun yang lalu, tetapi tidak pernah (semestinya?) Diselesaikan, setidaknya tidak dengan menggunakan writable_real?... mungkin sudah waktunya untuk permintaan tarik?!? :-)

pvandenberk
sumber