Tại sao lỗi này xảy ra
Homebrew thường hoạt động rất mượt mà, nhưng đôi khi nó sẽ "khó tính" về vấn đề phân quyền tập tin. Bạn sẽ thường thấy lỗi này khi chạy brew install hoặc brew upgrade. Đây là một vấn đề phổ biến sau khi cập nhật macOS lớn, chẳng hạn như lên Sonoma, hoặc sau khi chuyển dữ liệu sang MacBook Pro M3 mới. Đôi khi, nguyên nhân đơn giản là do bạn vô tình chạy một lệnh bằng sudo, khiến quyền sở hữu các thư mục của bạn bị chuyển sang cho root hệ thống.
Trên các máy Mac Apple Silicon, Homebrew nằm ở /opt/homebrew. Các máy Mac Intel cũ hơn thì lưu ở /usr/local. Lỗi này có nghĩa là Homebrew muốn ghi các tập tin vào thư mục zsh, nhưng tài khoản người dùng của bạn lại không có "chìa khóa" để truy cập.
Error: The following directories are not writable by your user:
/opt/homebrew/share/zsh
/opt/homebrew/share/zsh/site-functions
Quy trình kiểm tra lỗi
Hãy xem ai thực sự sở hữu các thư mục đó. Mở terminal và chạy lệnh sau:
ls -ld /opt/homebrew/share/zsh /opt/homebrew/share/zsh/site-functions
Kiểm tra cột thứ ba của kết quả trả về. Nếu nó hiển thị root, đó chính là vấn đề của bạn. Kết quả trên terminal sẽ trông như thế này:
drwxr-xr-x 3 root admin 96 Oct 24 10:00 /opt/homebrew/share/zsh
drwxr-xr-x 2 root admin 64 Oct 24 10:00 /opt/homebrew/share/zsh/site-functions
Homebrew được thiết kế để chạy mà không cần quyền root nhằm giữ an toàn cho máy Mac của bạn. Nó sẽ từ chối cài đặt bất cứ thứ gì cho đến khi bạn, với tư cách là người dùng, sở hữu lại các thư mục này.
Giải pháp
Cách khắc phục rất đơn giản. Chúng ta sử dụng lệnh chown (change owner - thay đổi chủ sở hữu) để giành lại quyền kiểm soát. Bạn sẽ cần dùng sudo chỉ một lần duy nhất này để xác nhận việc chuyển giao.
1. Sửa quyền sở hữu cho các thư mục cụ thể
Để sửa các thư mục cụ thể được đề cập trong lỗi, hãy chạy:
sudo chown -R $(whoami) /opt/homebrew/share/zsh /opt/homebrew/share/zsh/site-functions
Dưới đây là ý nghĩa của lệnh đó:
sudo: Cấp cho bạn quyền quản trị viên tạm thời để thay đổi các thư mục hệ thống.-R: Yêu cầu lệnh sửa tất cả mọi thứ bên trong các thư mục đó.$(whoami): Một phím tắt tự động điền tên người dùng Mac của bạn.
2. Cách "Sửa tất cả" (Khuyên dùng)
Nếu bạn thấy nhiều lỗi phân quyền, cách nhanh hơn là sửa toàn bộ đường dẫn Homebrew cùng lúc. Điều này giúp bạn tránh khỏi việc phải đi giải quyết từng lỗi nhỏ phát sinh sau này.
Dành cho Apple Silicon (M1, M2, M3):
sudo chown -R $(whoami) /opt/homebrew
Dành cho máy Mac Intel:
sudo chown -R $(whoami) /usr/local/bin /usr/local/etc /usr/local/sbin /usr/local/share /usr/local/var
3. Kiểm tra lại phân quyền
Quyền sở hữu thường là nguyên nhân chính, nhưng đôi khi bản thân quyền ghi (write permissions) cũng bị sai. Các thư mục thường nên được đặt thành 755. Nếu bạn muốn hình dung các thiết lập này trước khi áp dụng, hãy xem Công cụ tính toán quyền Unix. Nó giúp đảm bảo bạn không đặt thư mục quá "mở", chẳng hạn như thiết lập 777 đầy rủi ro.
chmod u+w /opt/homebrew/share/zsh /opt/homebrew/share/zsh/site-functions
Xác minh
Chạy công cụ chẩn đoán của Homebrew để đảm bảo mọi thứ đều ổn định:
brew doctor
Nếu việc sửa lỗi thành công, bạn sẽ thấy dòng chữ: Your system is ready to brew. Bây giờ bạn có thể quay lại cài đặt các gói của mình, ví dụ như brew install node hoặc brew install python, mà không gặp thêm bất kỳ vấn đề nào.
Mẹo nhỏ cho tương lai
- Không dùng sudo với brew: Đừng bao giờ chạy
sudo brew install. Đây là nguyên nhân hàng đầu gây ra lỗi phân quyền. - Thói quen sau khi cập nhật: Các bản cập nhật macOS thường đặt lại quyền trên các thư mục dùng chung. Nếu hệ thống gặp lỗi sau khi cập nhật, hãy chạy
brew doctorngay lập tức. - User so với Root: Hầu hết các vấn đề của Homebrew bắt nguồn từ quyền sở hữu (ai sở hữu tập tin) thay vì quyền hạn (những gì có thể làm với tập tin). Hãy luôn kiểm tra chủ sở hữu trước.

