Bagaimana cara memperbaiki izin homebrew?

601

Saya telah mencopot dan menginstal Homebrew 3 kali sekarang karena sepertinya tidak pernah mengizinkan saya untuk menginstal apa pun karena ia menolak izin pada akhir sebagian besar instalasi.

Sebagai contoh saya akan memposting skenario unduhan libjpeg ini yang sedang saya hadapi.

Saya mencoba menginstal libjpeg dan mendapatkan:

$ brew install libjpeg
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/jpeg-8d.mountain_lion.bottle.1.tar.gz
Already downloaded: /Library/Caches/Homebrew/jpeg-8d.mountain_lion.bottle.1.tar.gz
==> Pouring jpeg-8d.mountain_lion.bottle.1.tar.gz
Warning: Could not link jpeg. Unlinking...
Error: The brew link step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link jpeg'
Error: Permission denied - /usr/local/opt/jpeg

'brew link jpeg' menghasilkan dalam

Error: Permission denied - /usr/local/opt/jpeg

Inilah yang dibaca oleh dokter pembuat bir saya

$ brew doctor
Warning: "config" scripts exist outside your system or Homebrew directories.
./configure scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python-config
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-config
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run brew link on these:

jpeg

Masalah izin ini telah menjadikan mustahil untuk menggunakan minuman apa pun dan saya akan sangat menghargai saran apa pun.

Saturnino
sumber

Jawaban:

955

Saya dapat memecahkan masalah dengan menggunakan chownpada folder:

sudo chown -R "$USER":admin /usr/local

Anda juga (kemungkinan besar) harus melakukan hal yang sama pada /Library/Caches/Homebrew:

sudo chown -R "$USER":admin /Library/Caches/Homebrew

Rupanya saya telah menggunakan sudosebelumnya dengan cara yang mengubah izin folder saya /usr/local, mulai sekarang semua instalasi dengan minuman telah terbukti berhasil.

Jawaban ini berasal dari pelacak masalah homebrew gitHub

Saturnino
sumber
14
Terima kasih untuk ini. Saya juga harus lari sudo chown -R $USER:admin /Library/Caches/Homebrewuntuk menyingkirkan masalah izin saya.
alexpls
64
mengubah kepemilikan / usr / lokal ke pengguna tertentu bukanlah solusi. Ini adalah hack yang mengerikan dan solusi jika Anda memiliki sistem pengguna tunggal. Tapi kemudian Anda mungkin juga chown -R / $ USER: $ USER
fijiaaron
17
@fijiaaron Jadi apa solusi yang lebih baik?
juil
47
chowning / usr / local: solusi yang benar-benar gila. Semoga ini bukan garis partai.
John Clements
15
Bagi mereka yang mengeluh bahwa solusi ini akan mengacaukan sistem multi-pengguna (@fijiaaron, @JohnClements, @hmijail, @Alex) - inilah mengapa izin grup dibalik. Di macOS, admingrup adalah setiap pengguna admin (yang merupakan setiap pengguna akun pengguna macOS yang dapat sudo, antara lain), jadi dengan menjalankannya chown -R …:adminbersama chmod -R g+w /usr/local(seperti yang disarankan oleh @AndreaDeGaetano), Anda akan melakukan kesalahan apa pun di sini dan tidak memiliki masalah dengan pengguna lain juga menggunakan /usr/local/ brew.
Slipp D. Thompson
479

Perintah baru untuk pengguna di macOS High Sierra karena tidak mungkin chownpada /usr/local:

bash/zsh:

sudo chown -R $(whoami) $(brew --prefix)/*

fish:

sudo chown -R (whoami) (brew --prefix)/*

Referensi: Tidak dapat di-chown / usr / local di High Sierra

andrewwong97
sumber
Yeah @Jeffpowrs Saya mengalami masalah yang sama di macOS 10.13.2
andrewwong97
4
Saya menggunakan cangkang ikan dan harus menggunakan yang berikut: sudo chown -R (whoami) (brew --prefix)/*
Tarellel
2
Terkait Untuk apa yang saya coba lakukan, saya harus sudo mkdir /usr/local/Frameworks, diikuti oleh perintah chown seperti yang muncul dalam jawaban ini.
Dan Burton
1
Terima kasih. Ini menyelamatkan hari.
Aashutosh Rathi
2
Tuhan memberkatimu, BRO!
Mendigo dos Bytes
285

Sebagai opsi pertama untuk siapa pun yang mendarat di sini seperti saya, ikuti apa pun yang disarankan untuk Anda lakukan:

brew doctor

Ini jalan paling aman, dan di antara hal-hal lain, itu menyarankan saya untuk:

sudo chown -R $(whoami) /usr/local

yang memecahkan masalah izin itu.

OP melakukan hal itu tetapi tampaknya tidak mendapatkan saran di atas; Anda mungkin, dan itu selalu lebih baik untuk memulai di sana, dan hanya kemudian mencari solusi yang tidak sepele jika itu tidak membantu.

Nycen
sumber
4
Mengonfirmasi perbaikan ini untuk setiap masalah yang mungkin Anda alami dengan izin pada 05/2017
Anton Babushkin
3
Dapat juga mengonfirmasi bahwa ini menyelesaikan masalah izin dan dapat memutakhirkan versi simpul saya dengan mudah - 06/06/2018 - Terima kasih
Richlewis
2
dokter minuman tidak akan menemukan semua masalah. Masalah yang saya miliki adalah / usr / local / Frameworks tidak ada dan membuat itu dan menetapkan kepemilikan untuk itu memperbaikinya. minuman itu sendiri tidak melihat itu sebagai masalah.
Joe W
2
Saya mulai chown: /usr/local: Operation not permittedtidak bekerja pada 5 Juli 2019
tavalendo
1
Petunjuk dengan dokter mungkin salah satu petunjuk terbaik di sini, karena itu memperbaiki (atau membantu memperbaiki) masalah yang berbeda setiap saat!
ecth
82

Jika Anda menggunakan OSX High Sierra, /usr/localtidak bisa lagi chown. Kamu bisa menggunakan:

sudo chown -R $(whoami) $(brew --prefix)/*

Richard
sumber
Terima kasih. Menyelamatkan saya!
Matthias
3
Saya menemukan bahwa $ (buatan --prefix) baru saja memberi saya / usr / local, yang High Sierra bersikeras saya tidak bisa mengubah izin untuk ... tetapi karena buatan ingin izin untuk "/ usr / local / Frameworks" dalam contoh saya , Saya dapat menggunakan "$ (brew --prefix) / Frameworks" sebagai gantinya, dan "brew link python @ 2" bekerja dengan baik untuk saya setelah itu.
alpheus
Semua pengguna Mac dengan banyak pengguna, gunakan ini!
Erik Nguyen
Terima kasih, saya menggunakan OSX High Sierra, dan tampaknya kami tidak dapat lagi mengenali / user / local seperti dalam versi MAC OSX sebelumnya. Ini berhasil untuk saya!
Jose Mhlanga
29

Saya tidak punya /usr/local/Frameworksfolder, jadi ini memperbaikinya untuk saya

sudo mkdir -p /usr/local/Frameworks
sudo chown -R $(whoami) /usr/local/Frameworks

Baris pertama membuat folder Frameworks baru untuk digunakan homebrew (buatan). Baris kedua memberi folder itu izin pengguna Anda saat ini, yang cukup.

Perintah yang digunakan adalah sebagai berikut:

mkdir - membuat direktori [ -p tidak ada kesalahan jika ada, buat direktori induk sesuai kebutuhan]

chown - ubah pemilik dan grup file [ -R beroperasi pada file dan direktori secara rekursif]

whoami - mencetak userid yang efektif

Saya memiliki OSX High Sierra

Karl Johan Vallner
sumber
27

Saya mengalami masalah ini .. Solusi yang berfungsi adalah mengubah kepemilikan /usr/local menjadi pengguna saat ini alih-alih rootdengan:

  sudo chown -R $(whoami):admin /usr/local

Tapi sungguh ini bukan cara yang tepat. Terutama jika mesin Anda adalah server atau banyak pengguna.

Saran saya adalah mengubah kepemilikan seperti di atas dan melakukan apa pun yang ingin Anda terapkan dengan Brew .. (perbarui, instal ... dll) lalu setel ulang kepemilikan kembali ke root sebagai:

  sudo chown -R root:admin /usr/local

Thats akan menyelesaikan masalah ini dan menjaga kepemilikan tetap pada set yang tepat.

Maher Abuthraa
sumber
4
hmm .. dan ketika kita mendapatkan "operasi tidak diizinkan" untuk chown?
Ewoks
@Ewoks apakah itu di MacO?
Maher Abuthraa
1
Ya, Sierra High: S
Ewoks
15

Perintah dari jawaban terpilih tidak berfungsi untuk saya.

Itu mendapat output:

chown: / usr / {my_username} dmin: nama pengguna ilegal

Perintah ini berfungsi dengan baik (grup untuk / usr / local adminsudah):

sudo chown -R $USER /usr/local
pencukur langit
sumber
5
Tambahkan beberapa kutipansudo chown -R "$USER":admin /usr/local
orkoden
2
@skywinder Jawaban Anda berhasil untuk saya. Tidak perlu menggunakan penawaran pada $ USER.
Anna S
sudo chown -R "$ USER": admin / usr / local tempat Anda mengganti $ USER dengan nama Anda.
lft93ryt
ini menghasilkanError: Running Homebrew as root is extremely dangerous and no longer supported. As Homebrew does not drop privileges on installation you would be giving all build scripts full access to your system.
musim panas
3
chown: /usr/local: Operation not permitted
Krishnadas PC
13

Saya tidak ingin berkutat dengan izin folder, jadi saya melakukan yang berikut:

brew doctor
brew upgrade
brew cleanup

Saya kemudian dapat melanjutkan menginstal formula minuman saya yang lain dengan sukses.

Anthony To
sumber
1
Ini bekerja dengan baik untuk masalah saya. Saya sudah SUDOed izin sendiri. \
Komsomol
12

Jika Anda ingin pendekatan yang sedikit lebih bertarget daripada selimut chown -R, Anda mungkin menemukan skrip inifix-homebrew berguna:

#!/bin/sh

[ -e `which brew` ] || {
    echo Homebrew doesn\'t appear to be installed.
    exit -1
}

BREW_ROOT="`dirname $(dirname $(which brew))`"
BREW_GROUP=admin
BREW_DIRS=".git bin sbin Library Cellar share etc lib opt CONTRIBUTING.md README.md SUPPORTERS.md"

echo "This script will recursively update the group on the following paths"
echo "to the '${BREW_GROUP}' group and make them group writable:"
echo ""

for dir in $BREW_DIRS ; do {
    [ -e "$BREW_ROOT/$dir" ] && echo "    $BREW_ROOT/$dir "
} ; done

echo ""
echo "It will also stash (and clean) any changes that are currently in the homebrew repo, so that you have a fresh blank-slate."
echo ""

read -p 'Press any key to continue or CTRL-C to abort.'

echo "You may be asked below for your login password."
echo ""

# Non-recursively update the root brew path.
echo Updating "$BREW_ROOT" . . .
sudo chgrp "$BREW_GROUP" "$BREW_ROOT"
sudo chmod g+w "$BREW_ROOT"

# Recursively update the other paths.
for dir in $BREW_DIRS ; do {
    [ -e "$BREW_ROOT/$dir" ] && (
        echo Recursively updating "$BREW_ROOT/$dir" . . .
        sudo chmod -R g+w "$BREW_ROOT/$dir"
        sudo chgrp -R "$BREW_GROUP" "$BREW_ROOT/$dir"
    )
} ; done

# Non-distructively move any git crud out of the way
echo Stashing changes in "$BREW_ROOT" . . .
cd $BREW_ROOT
git add .
git stash
git clean -d -f Library

echo Finished.

Alih-alih melakukan a chmoduntuk pengguna Anda, itu memberi admingrup (yang Anda anggap milik) menulis akses ke direktori tertentu dalam /usr/localpenggunaan homebrew. Ini juga memberi tahu Anda apa yang ingin dilakukan sebelum melakukannya.

darco
sumber
1
Perhatikan bahwa beberapa jalur tampaknya telah sedikit berubah sehingga Anda mungkin harus chgrp dan chmod beberapa direktori lagi tapi saya masih lebih suka ini daripada chown segalanya untuk pendekatan pengguna Anda!
ashirley
8

Dalam kasus saya, / usr / local / Frameworks bahkan tidak ada, jadi saya lakukan:

sudo mkdir /usr/local/Frameworks
sudo chown -R $(whoami) /usr/local/Frameworks

Dan semuanya berjalan sesuai harapan.

Helen Vasconcelos
sumber
1
Ini memperbaiki masalah saya dan tidak terdeteksi sebagai masalah oleh dokter minuman.
Joe W
7

Ini memecahkan masalah bagi saya.

sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
sudo chown -R "$USER":admin /usr/local
Fardin
sumber
2
Ini menyelesaikan masalah ini tetapi saya akan membatalkan langkah ini setelah berhasil menautkan. Hanya karena alasan keamanan.
ora-600
7

Saya menyelesaikan masalah saya dengan perintah-perintah ini:

sudo mkdir /usr/local/Cellar
sudo mkdir /usr/local/opt
sudo chown -R $(whoami) /usr/local/Cellar
sudo chown -R $(whoami) /usr/local/opt
hardc0der
sumber
1
Terima kasih! Itulah satu-satunya hal yang membantu Mac OS 10.13.4dalam kasus saya, saya harus membuat sudo mkdir /usr/local/Frameworks dan sudo chown -R $(whoami) /usr/local/Frameworksdapat menautkan python!
A1m
6

Untuk Mac multi-pengguna, ini berfungsi untuk saya:

sudo chown -R $(whoami):admin $(brew --prefix)/*
Juan José Ramírez
sumber
5

Semua saran ini dapat berfungsi. Dalam versi terbaru dari brew doctor, saran yang lebih baik dibuat.

Pertama - perbaiki kekacauan yang mungkin telah Anda buat /usr/localdengan menjalankan ini di baris perintah:

sudo chown -R root:wheel /usr/local

Kemudian ambil kepemilikan jalur yang harus khusus untuk pengguna ini:

sudo chown -R $(whoami) /usr/local/lib /usr/local/sbin /usr/local/var /usr/local/Frameworks /usr/local/lib/pkgconfig /usr/local/share/locale

Semua informasi ini tersedia jika Anda menjalankan sudo brew updatedan kemudian membaca semua peringatan dan kesalahan yang akan Anda temui ...

Max Dercum
sumber
Menyetel kepemilikan semua di / usr / local untuk di-root: roda berbahaya dan tidak perlu. Jalur yang relevan adalah / usr / local / Cellar
ben26941
1
Anda tidak perlu menyentuh izin-izin itu, kecuali jika Anda memiliki .. katakanlah sudah berjalan di depan dan mengambil kepemilikan mereka untuk pengguna pengembangan Anda - atau dalam kasus di mana minuman telah hancur mereka karena itu menginstal dengan sudo. buatan sendiri merekomendasikan perbaikan ini dalam hal itu - yang saya pikir jauh lebih berbahaya daripada meninggalkan kekacauan sudo.
Max Dercum
1
Bisakah Anda memberikan tautan ke rekomendasi minuman itu?
ben26941
1
Jawaban Terbaik. Ini berhasil setelah saya melakukan migrasi dari Mac lain.
BuffMcBigHuge
4

Bagi saya, itu berhasil setelahnya

brew doctor

Ubah perintah izin mengakibatkan kesalahan lain

chown: /usr/local: Operation not permitted

Krishnadas PC
sumber
3

Ada skrip pembunuh di github yang memperbaiki perms pada / usr / local dan membuat direktori agar dapat diakses oleh siapa saja yang merupakan anggota dari grup 'admin'.

https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925

Ini adalah solusi yang lebih baik daripada jawaban yang dipilih, karena jika Anda chown direktori / usr / local / ___ menjadi $ USER, maka Anda memecah pengguna admin homebrew lain pada mesin itu.

Inilah nyali script pada saat saya memposting ini:

chgrp -R admin /usr/local
chmod -R g+w /usr/local

chgrp -R admin /Library/Caches/Homebrew
chmod -R g+w /Library/Caches/Homebrew

chgrp -R admin /opt/homebrew-cask
chmod -R g+w /opt/homebrew-cask
TheProletariat
sumber
2

Di MacOS Mojave, saya juga tidak memiliki izin ke chownfolder / usr / local ( sudo chown -R "$USER":admin /usr/local).

sudo chown -R "$USER":admin /usr/local/*Namun berhasil bagi saya, mengubah izin dari segala sesuatu di dalam folder lokal.

Semoga ini akan membantu orang lain dengan masalah yang sama.

paddotk
sumber
1

Sebenarnya sangat sederhana, jalankan perintah ini: brew doctor

Dan itu akan memberi tahu Anda apa yang harus dilakukan, untuk memperbaiki masalah izin, misalnya dalam kasus saya:

Ini masalahnya:

Warning: The following directories are not writable by your user:
/usr/local/share/man/man5
/usr/local/share/man/man7

Dan ini solusinya:

You should change the ownership of these directories to your user.
  sudo chown -R $(whoami) /usr/local/share/man/man5 /usr/local/share/man/man7
Arsalan Mehmood
sumber
1
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks
Girish Gupta
sumber
1

Dalam kasus saya, saya mengalami masalah dalam menghapus dan menginstal ulang SaltStack.

Setelah berlari:

ls -lah /usr/local/Cellar/salt/

Saya perhatikan bahwa pemilik grup adalah "staf". (BTW, saya menjalankan macOS Mojave versi 10.14.3.) Kelompok staf bisa terkait dengan konfigurasi tempat kerja saya, tetapi saya tidak benar-benar tahu. Apa pun yang terjadi, saya mempertahankan grup untuk mencegah diri dari melanggar sesuatu yang lebih jauh.

Saya kemudian berlari:

sudo chown -R "$USER":staff /usr/local/Cellar/salt/

Setelah itu, saya berhasil menghapusnya dengan perintah ini (bukan sebagai root):

brew uninstall --force salt
devinbost
sumber
0

Jika Anda tidak memiliki Homebrew terbaru: Saya "memperbaiki" ini di masa lalu dengan memaksa Homebrew dijalankan sebagai root, yang hanya dapat dilakukan dengan mengubah kepemilikan file executable Homebrew menjadi root. Pada titik tertentu, mereka menghapus fitur ini.

Dan saya tahu mereka akan memberikan banyak peringatan yang mengatakan itu tidak boleh berjalan sebagai root, tapi ayolah, itu tidak berfungsi dengan baik jika tidak.

sudo
sumber
0

Saya mencoba semuanya di halaman ini, saya akhirnya menggunakan solusi ini:

brew uninstall --force brew-cask; brew untap $tap_name; brew update; brew cleanup; brew cask cleanup;

Situasi saya mirip dengan OP, namun masalah saya secara khusus disebabkan oleh menjalankan sudo dengan pembuatan bir, dan kemudian membuat kata sandi saya salah. Setelah ini, saya terjebak dengan izin mencegah instalasi.

Alpha G33k
sumber
0

Untuk mengatasi kesalahan izin Brew saat folder dijalankan

brew prune

Ini akan menyelesaikan masalah & kami tidak perlu mencari direktori.

Catto
sumber
1
ini tidak berfungsi lagi, Anda harus melakukannya sekarangbrew cleanup --prune-prefix
Sliq
0

Saya di Catalina dan saya mendapat kesalahan ini:

touch: /usr/local/Homebrew/.git/FETCH_HEAD: Permission denied
touch: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/.git/FETCH_HEAD: Permission denied
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied

Saya hanya perlu chown Homebrewdirektori

sudo chown -R "$USER":admin /usr/local/Homebrew
Bilal
sumber
0

Saya menggunakan dua perintah ini dan menyelamatkan masalah saya

sudo chown -R $(whoami) /usr/local

sudo chown -R $(whoami) /usr/local/etc/bash_completion.d /usr/local/lib/python3.7/site-packages /usr/local/share/aclocal /usr/local/share/locale /usr/local/share/man/man7 /usr/local/share/man/man8 /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew/locks
Marco Aprea
sumber
-5

coba juga jalankan perintah ini

sudo chmod + t / tmp

bashar
sumber