Як виправити дозволи домашнього перекладу?


601

Я видалив і встановив Homebrew 3 рази зараз, тому що, здається, ніколи не дозволяють мені встановлювати що-небудь, оскільки він заперечує мені дозволи в кінці більшості установ.

Як приклад я опублікую цей сценарій завантаження libjpeg, з яким я зараз стикаюся.

Я намагаюся встановити libjpeg і отримати:

$ 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

'заварювати посилання jpeg' призводить до

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

Ось що читає мій лікар-заварювач

$ 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

Ця проблема з дозволом унеможливлює використання пива ні на чому, і я дуже вдячний за будь-які пропозиції.

Відповіді:


955

Мені вдалося вирішити проблему за допомогою chownпапки:

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

Також вам (швидше за все) доведеться робити те ж саме /Library/Caches/Homebrew:

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

Мабуть, я раніше використовував sudoтаким чином, щоб змінити дозвіл на папку /usr/local, звідси далі всі установки з варивом виявилися успішними.

Ця відповідь надана люб’язним трекером випуску домашніх програм gitHub


14
Дякую за це Мені також потрібно було бігти, sudo chown -R $USER:admin /Library/Caches/Homebrewщоб позбутися моїх проблем з дозволом.
alexpls

64
зміна права власності на / usr / local на конкретного користувача не є рішенням. Це жахливий злом і вирішення, якщо у вас єдина система користувача. Але тоді ви також можете просто порушити -R / $ USER: $ USER
fijiaaron

17
@fijiaaron Отже, що було б кращим рішенням?
липня

47
задушення / usr / local: абсолютно безумне рішення. Дуже сподіваюся, що це насправді не партійна лінія.
Джон Клементс

15
Тим, хто скаржиться, що це рішення зіпсує багатокористувацькі системи (@fijiaaron, @JohnClements, @hmijail, @Alex) - саме тому групові дозволи були перевернуті. У macOS adminгрупа - це кожен користувач адміністратора (це кожен користувач облікового запису macOS, який може sudo, серед іншого), тому, працюючи chown -R …:adminразом із chmod -R g+w /usr/local(як це запропонував @AndreaDeGaetano), ви нічого не зробите тут і не матимете проблем із інші користувачі також використовують /usr/local/ brew.
Сліп Д. Томпсон

479

Нова команда для користувачів MacOS High Sierra , як це не представляється можливим chownпо /usr/local:

bash/zsh:

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

fish:

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

Довідка: Не вдається / ч.гр. / місцеві у Високій Сьєррі


Так @Jeffpowrs У мене є те саме питання в macOS 10.13.2
andrewwong97

4
Я використовую рибну шкаралупу, і мені довелося вживати наступне: sudo chown -R (whoami) (brew --prefix)/*
Tarellel

2
Відповідно. Для того, що я намагався зробити, мені довелося sudo mkdir /usr/local/Frameworksслідувати команді chown, як показано в цій відповіді.
Ден Бертон

1
Дякую. Це врятувало день.
Аашутош Ратхі

2
БОГ БЛАГОДУЙТЕ, БРО!
Mendigo dos Bytes

285

В якості першого варіанту, до кого б тут не було земель, як я, виконайте все, що це пропонує вам зробити:

brew doctor

Це найбезпечніший шлях, і серед іншого він запропонував мені:

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

що вирішило проблему дозволів.

ОП зробила саме це, але, мабуть, не отримала наведеної вище пропозиції; ви можете, і завжди краще починати з цього місця, і тільки тоді шукати нетривіальні рішення, якщо це не допомогло.


4
Підтверджено це виправляє будь-яке питання, яке може виникнути з дозволами станом на 05/2017
Антон Бабушкін

3
Також можна підтвердити, що це вирішує будь-які проблеми з дозволом і змогло легко оновити мою версію вузла - 06.06.2018 - Дякую
Richlewis

2
лікар-заварювач не знайде всіх питань. Проблема, яку я мав, / usr / local / Frameworks, не існувала, і створивши це, і встановлення права власності на це виправлене. Сама заварка не помітила цього як питання.
Jo W

2
У мене chown: /usr/local: Operation not permittedне працює 5 липня 2019 року
tavalendo

1
Підказка з лікарем - це, мабуть, один із найкращих підказок тут, оскільки він фіксує (або допомагає виправити) різні проблеми в будь-який час!
ecth

82

Якщо ви перебуваєте на OSX High Sierra, /usr/localбільше не можете бути chown. Ви можете використовувати:

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


Дякую. Врятували мене!
Маттіас

3
Я виявив, що $ (brew --prefix) просто дав мені / usr / local, що Висока Сьєрра наполягала, що я не можу змінити дозволи на ... але оскільки Brew хотів дозволів на "/ usr / local / Frameworks" у моєму випадку , Я зміг замість цього використати "$ (brew --prefix) / Frameworks", а "piw link python @ 2" працював для мене чудово.
Алфей

Усі користувачі Mac з кількома користувачами користуються цим!
Ерік Нгуєн

Дякую на OSX High Sierra, і, мабуть, ми вже не можемо порушити / user / local, як у попередніх версіях MAC OSX. Це працювало для мене!
Хосе Мланга

29

У мене не було /usr/local/Frameworksпапки, тому це виправило її для мене

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

Перший рядок створює нову папку Frameworks для домашнього використання (варити). Другий рядок надає цій папці ваші поточні дозволи користувача, які є достатніми.

Використовувані команди такі:

mkdir - робити каталоги [ -p немає помилок, якщо вони існують, роблять батьківські каталоги за потребою]

chown - зміна власника файлу та групи [ -R працює над файлами та каталогами рекурсивно]

whoami - друкує ефективний userid

У мене OSX High Sierra


27

У мене виникла ця проблема. Робочим рішенням є змінити право власності /usr/local на поточного користувача замість root:

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

Але насправді це не належний спосіб. Головним чином, якщо ваша машина є сервером або декількома користувачами.

Моя пропозиція - змінити право власності, як описано вище, і зробити все, що ви хочете реалізувати з Brew .. (оновити, встановити ... тощо), а потім відновити право власності назад до root:

  sudo chown -R root:admin /usr/local

Thats вирішить цю проблему і збереже встановлене право власності.


4
хм .. а коли ми отримаємо "операцію не дозволено" для chown?
Евокс

@Ewoks це на MacO?
Махер Абутраа

1
Так, Сьєрра Висока: S
Ewoks


15

Команда з голосової відповіді не працює для мене.

Він отримав вихід:

chown: / usr / {my_username} dmin: незаконне ім'я користувача

Ця команда прекрасно працює (група для / usr / local adminвже була ):

sudo chown -R $USER /usr/local

5
Додайте кілька цитатsudo chown -R "$USER":admin /usr/local
orkoden

2
@skywinder Ваша відповідь працювала на мене. Не довелося використовувати котирування на US USER.
Anna S

sudo chown -R "$ USER": адміністратор / usr / local, де ви замінюєте $ USER своїм іменем.
lft93ryt

Це призвело доError: 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.
підписання

3
chown: /usr/local: Operation not permitted
ПК

13

Я ще не хотів обробляти права доступу до папок, тому зробив наступне:

brew doctor
brew upgrade
brew cleanup

Тоді мені вдалося продовжити інсталяцію іншої формули варіння.


1
Це добре спрацювало з моїми питаннями. Я вже SUDOed себе дозволи. \
Комсомол

12

Якщо ви хочете трохи більш цілеспрямованого підходу, ніж покривало chown -R, цейfix-homebrew сценарій може бути корисним:

#!/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.

Замість того, щоб робити chmodсвій користувач, він надає adminгрупі (до якої, ймовірно, ви належите) записати доступ до певних каталогів, /usr/localякими користується домашня мова. Він також розповідає вам, що саме має намір зробити перед тим, як це зробити.


1
Зауважте, що деякі шляхи, здається, трохи змінилися, тому вам, можливо, доведеться chgrp та chmod ще декілька каталогів, але я все одно віддаю перевагу цьому над всім підходом до вашого підходу користувача!
ashirley

8

У моєму випадку / usr / local / Frameworks навіть не існувало, тож я зробив:

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

А далі все працювало як очікувалося.


1
Це вирішило мою проблему, і він не був визнаний проблемою з боку завареного лікаря.
Jo W

7

Це вирішило перед нами питання.

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

2
Це вирішує цю проблему, але я скасував би цей крок після успішного посилання. Просто з міркувань безпеки.
ora-600

7

Я вирішив свою проблему за допомогою цих команд:

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

1
Дякую! Це єдине, що допомогло в Mac OS 10.13.4моєму випадку мені довелося створити sudo mkdir /usr/local/Frameworks і sudo chown -R $(whoami) /usr/local/Frameworksмати можливість зв’язати python!
А1м


5

Усі ці пропозиції можуть спрацювати. В останній версії заварювального лікаря були зроблені кращі пропозиції.

По-перше - виправте безлад, який ви, напевно, вже зробили /usr/local, запустивши це в командному рядку:

sudo chown -R root:wheel /usr/local

Потім візьміть право власності на шляхи, які мають бути спеціально для цього користувача:

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

Вся ця інформація доступна, якщо ви запустите, sudo brew updateа потім прочитаєте всі попередження та помилки, які ви зіткнетесь ...


Встановлення права власності на все в / usr / local на root: колесо небезпечне та непотрібне. Відповідним шляхом є / usr / local / льох
ben26941

1
вам не потрібно торкатися цих дозволів, якщо ви цього не зробите .. скажіть, що вже пішли вперед і взяли право власності на них для свого розробника - або у випадку, коли Brew їх вже маніпулював, оскільки він зробив установку з sudo. brew його самості рекомендує це виправлення в тому випадку - що, на мою думку, набагато менш небезпечне, ніж залишати безлад судо позаду.
Макс Деркум

1
Чи можете ви надати посилання на рекомендацію щодо заварювання?
ben26941

1
Найкраща відповідь. Це спрацювало після того, як я зробив міграцію з іншого Mac.
BuffMcBigHuge

4

Для мене це спрацювало і після

brew doctor

Змінення команд дозволу спричинило ще одну помилку

chown: /usr/local: Operation not permitted


3

На github є скрипт-убивця, який фіксує хімічні речовини в / usr / local і варить каталоги, щоб бути доступним кожному, хто є членом групи 'admin'.

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

Це краще рішення, ніж обрана відповідь, оскільки якщо ви задаєте каталоги / usr / local / ___ на $ USER, ви зламаєте будь-яких інших користувачів адміністратора домашньої мови на цій машині.

Ось кишки сценарію в той час, коли я публікував це:

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

2

У MacOS Mojave я не мав дозволу на chownпапку / usr / local ( sudo chown -R "$USER":admin /usr/local).

sudo chown -R "$USER":admin /usr/local/*але працював для мене, змінюючи дозволи на все, що знаходиться всередині в локальній папці.

Сподіваємось, це допоможе іншим із тим самим питанням.


1

Насправді це дуже просто, виконайте цю команду: brew doctor

І він підкаже, що робити, щоб виправити проблеми з дозволом, наприклад, у моєму випадку:

У цьому і полягала проблема:

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

І це було рішення:

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


1

У моєму випадку у мене виникли проблеми з видаленням та перевстановленням SaltStack.

Після запуску:

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

Я помітив, що власник групи - «персонал». (BTW, я використовую MacOS Mojave версії 10.14.3.) Група співробітників може бути пов'язана з моєю конфігурацією робочого місця, але я не знаю насправді. Незалежно від того, я зберіг групу, щоб не допустити, щоб щось далі розбити.

Я тоді побіг:

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

Після цього мені вдалося видалити її за допомогою цієї команди (не як root):

brew uninstall --force salt

0

Якщо у вас немає останнього Homebrew: я "виправляв" це в минулому, змушуючи Homebrew запускатися як root, що можна було зробити лише змінивши право власності на виконувані файли Homebrew на root. У якийсь момент вони зняли цю функцію.

І я знаю, що вони будуть давати багато попереджень, говорячи, що він не повинен працювати як root, але, мабуть, інакше він не працює належним чином.


0

Я спробував усе на цій сторінці, і в кінцевому підсумку скористався цим рішенням:

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

Моя ситуація була схожа на ОП, однак моя проблема була спеціально спричинена запуском судо з пивоварінням, а потім неправильним паролем. Після цього у мене застрягли дозволи, що перешкоджали встановленню.


0

Щоб вирішити помилки дозволу Brew при запуску папки

brew prune

Це вирішить проблеми, і нам не доведеться заглушувати жодні каталоги.


1
це більше не працює, вам доведеться це робити заразbrew cleanup --prune-prefix
Sliq

0

Я перебуваю на Каталіні, і я отримав цю помилку:

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

Мені потрібно було лише подавити Homebrewкаталог

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

0

Я використав ці дві команди і врятував свою проблему

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.