Cách khắc phục lỗi quyền trên OS X Lion sau khi cài đặt Homebrew


9

Tôi vừa nâng cấp từ Snow Leopard lên Lion và đang cố cài đặt Homebrew. Tuy nhiên, sau khi cài đặt, tôi chạy brew doctortheo hướng dẫn cài đặt và thấy một loạt lỗi chỉ ra rằng / usr / thư mục cục bộ không thể ghi được. Ví dụ:

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

Tôi nhận được những thứ này cho một loạt các thư mục:

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

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

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

Tôi không thể hiểu tại sao lỗi này lại xuất hiện, vì có vẻ như tôi là một phần của nhóm Unix có quyền ghi vào các thư mục này:

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$

Tôi đang thiếu gì?


Tại sao bạn không "chọn" các thư mục này cho tên người dùng của mình, như được đề xuất? Chúng không nên thuộc về "root". Đối với nhiều người dùng, bạn cũng có thể thay đổi quyền của nhóm: apple.stackexchange.com/q/42127/14994
iolsmit

@iolsmit: Mình có cùng một vấn đề. Tuy nhiên, tôi không thấy lý do tại sao /usr/localnên thuộc về tôi khi máy này có nhiều người dùng quản trị. Ngoài ra, tôi có thể viết thư cho các địa điểm brew doctorđang phàn nàn. Còn ý tưởng nào khác không?
mgd

Câu trả lời:


7

EDIT: Vấn đề hiện đã được khắc phục trong Homebrew:

Nếu bạn vẫn gặp sự cố, hãy cập nhật Homebrew như thế này:

brew update

Nếu bạn muốn biết vấn đề là gì, tôi đã giữ câu trả lời ban đầu của tôi dưới đây.


Bỏ qua vấn đề permisson bây giờ

Tôi đang gặp vấn đề chính xác tương tự và theo ý kiến ​​của tôi, vấn đề nằm ở chỗ brew doctorchứ không phải ở cài đặt của bạn và tôi.

Tôi nghĩ bạn nên bỏ qua vấn đề thay vì thay đổi quyền sở hữu /usr/local. Ngoài ra, bạn có thể sửa brew doctortập lệnh cục bộ cho đến khi bản sửa lỗi được phát hành. Xem bên dưới.

Tôi không coi đó là chính xác để /usr/localsở hữu bởi một người dùng cụ thể. Tôi có nhiều hơn một người dùng quản trị trên máy này. Bạn nên để lại /usr/localthuộc sở hữu của root:adminchủ sở hữu và nhóm.

Điều tra của tôi

Giống như đối với bạn, tôi có một người /usr/localhoàn toàn có thể ghi được bởi người dùng của tôi cũng là thành viên của adminnhóm:

$ 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

Hãy kiểm tra xem thư mục có thực sự ghi được không:

$ 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

Nghiên cứu sâu hơn về brew doctormã đã đưa tôi đến kết luận rằng việc sử dụng chức năng ruby Pathname.writable?đang gây ra vấn đề. Hãy xem xét phiên Ruby tương tác này:

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

Chức năng Pathname.writable?nói /usr/locallà không thể ghi được mặc dù chúng ta biết nó là.

Sử dụng Pathname.writable_real?thay vì cho kết quả chính xác - nó nói rằng thư mục có thể ghi:

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

Điều này nên được cố định trong /usr/local/Library/Homebrew/cmd/doctor.rb. Bạn có thể sửa nó trong cài đặt của riêng bạn trong khi chờ sửa chữa.

Sự khác biệt giữa hai chức năng là (theo tài liệu Ruby ở đâyđây ):

writable? (file_name) → true hay false: Trả về true nếu tệp được đặt tên có thể ghi được bởi id người dùng hiệu quả của quá trình này.

writable_real? (file_name) → true hoặc false: Trả về true nếu tệp được đặt tên có thể ghi được bởi id người dùng thực của quá trình này.


Đồng ý với việc điều tra và làm rõ của mgd ... đó là tại chỗ! Có vẻ như một vấn đề tương tự đã được nêu ra trên github.com khoảng một năm trước, nhưng chưa bao giờ (đúng?) Được giải quyết, ít nhất là không bằng cách sử dụng writable_real?... có lẽ đã đến lúc yêu cầu kéo?!? :-)
pvandenberk


0

Tôi tin rằng bạn chỉ cần điều này:

brew update

Sau đó thử brew doctorlại.

Bạn vẫn có thể gặp lỗi về bất kỳ phụ thuộc nào bạn không sử dụng (Java trong trường hợp của tôi), điều này không sao cả. Nếu bạn đã cài đặt Công cụ dòng lệnh cho Xcode thay vì cài đặt đầy đủ Xcode, bạn cũng sẽ nhận được thông báo lỗi cho biết bạn có đường dẫn không hợp lệ, nhưng ngay trong thông báo bạn cũng sẽ đọc rằng không có đường dẫn hợp lệ nếu bạn không có đường dẫn hợp lệ chỉ cần sử dụng Công cụ dòng lệnh cho Xcode, vậy cũng tốt.

Vì lợi ích của người khác: Hãy nhớ rằng bạn cần phải đăng nhập với tư cách quản trị viên khi thực hiện việc này để nó hoạt động.


0

Tôi đã làm theo sự kết hợp của các đề xuất của iolsmit và Phil M: Tôi đã chọn các thư mục này cho tên người dùng của mình, sau đó chạy brew updatelại theo sau brew doctor. Điều này đã loại bỏ tất cả các thông báo lỗi và cài đặt brew dường như hoạt động tốt. Cảm ơn cả hai người!


0

Đồng ý với việc điều tra và làm rõ của @ mgd ... đó là tại chỗ!

Có vẻ như một vấn đề tương tự đã được nêu ra trên github.com khoảng một năm trước, nhưng chưa bao giờ (đúng?) Được giải quyết, ít nhất là không bằng cách sử dụng writable_real?... có lẽ đã đến lúc yêu cầu kéo?!? :-)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.