brew update
和brew install...
。我该如何设置才能避免出现像
/usr/local must be writable!
这样的错误?当然,我可以让
UserA
在每次使用brew时取得对/usr/local
的权限(UserB
也是同样的),但这似乎很麻烦,而且没有必要。brew update
和brew install...
。/usr/local must be writable!
这样的错误?UserA
在每次使用brew时取得对/usr/local
的权限(UserB
也是同样的),但这似乎很麻烦,而且没有必要。您还可以将组权限更改为管理员或另一个两个用户都在其中的组:
chgrp -R admin /usr/local
chmod -R g+w /usr/local
原始来源:https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925
更新:
在macOS High Sierra中,您无法更改/usr/local
的所有者、组或权限。因此,您必须更改子文件夹的组和权限:
chgrp -R admin /usr/local/*
chmod -R g+w /usr/local/*
更新 2018年9月,High Sierra 10.13.6
brew
的用户是否在admin组中将需要访问/获得sudo命令的权限
echo $(brew --prefix)
echo $(groups $(whoami))
sudo dseditgroup -o edit -a $(whoami) -t user admin
sudo chgrp -R admin $(brew --prefix)
sudo chmod -R g+rwX $(brew --prefix)
ls -lah $(brew --prefix)
sudo
,否则我会收到 Operation not permitted
错误消息。 - FooBarsudo
以避免出现Operation not permitted
错误。在命令中添加/*
,例如:sudo chgrp -R admin $(brew --prefix)/*
。来源 - Juan José RamírezFATAL: data directory "/usr/local/var/postgres" has group or world access DETAIL: Permissions should be u=rwx (0700).
- Leonel Galán尝试以黑客方式获取权限,或使用sudo
的每个答案都是错误的。
不要使用sudo
,也不要在用户帐户之间共享单个brew安装。
根据Homebrew文档,正确的答案是在一台机器上使用零个或一个全局brew安装,并为所有其他用户安装本地版本的brew。
这在Mac上特别重要,但Linux也适用。
可以通过以下任一方法完成:
Git方法
:对源代码库进行git checkout操作Untar-anywhere方法
:将tarball扩展到某个目录中-该目录归您所有对于Git方法,您需要克隆brew。
为了任意选择我的用户主目录进行检出:
cd $HOME
git clone https://github.com/Homebrew/brew.git
./brew/bin/brew tap homebrew/core
如docs.brew.sh所述,在您的主目录中运行此命令,它将创建~/brew
。
cd $HOME
mkdir brew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C brew
无论使用哪种安装方法,您都需要更改PATH
以优先使用新的brew二进制目录,将类似以下内容添加到您的shell点文件中。
export PATH=$HOME/brew/bin:$PATH >> ~/.zshrc # or ~/.bashrc
然后运行此命令来重新加载和测试
exec $SHELL
which brew # see that brew is found in your path
由于这是新安装,您需要重新安装所有所需的brew软件包。
cd $HOME; git clone https://github.com/Homebrew/homebrew-core.git; git clone https://github.com/Homebrew/brew.git
- Carlos Pinzón选择另一个前缀,风险自负!
- Clintm根据Homebrew文档,你可以将其安装在每个用户主目录下。
这样所有的软件包都会留在你的用户文件夹中,不会对其他用户可见或产生影响。一个好处是,如果你删除了该用户,则不会在系统上留下任何垃圾。因此,系统范围的污染最小化。
但是,如果你为多个用户安装相同的软件包,则需要使用更多的存储空间。如果你的SSD非常小,请注意这一点。
如果你当前已经全局安装了Homebrew,我建议先卸载Homebrew。(你可以运行which brew
查看Homebrew的安装位置)
如果你还没有安装命令行工具,请先运行以下命令:
xcode-select --install
打开终端并运行:
cd $HOME
mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
echo 'export PATH="$HOME/homebrew/bin:$PATH"' >> .zprofile
cd $HOME
mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
echo 'export PATH="$HOME/homebrew/bin:$PATH"' >> .bash_profile
关闭终端窗口
再次打开终端,运行以下命令以确保您的安装是正确的:
brew doctor
完成!
这不是必须的我发现在每次安装软件之前禁用brew自动更新所有软件也很有用。
echo 'HOMEBREW_NO_AUTO_UPDATE=1' >> $HOME/.zprofile
echo 'HOMEBREW_NO_AUTO_UPDATE=1' >> $HOME/.bash_profile
brew doctor
返回以下内容。这是否符合预期?“警告:您的Homebrew前缀不是/usr/local。
一些Homebrew瓶(二进制包)只能与默认值一起使用
前缀(/usr/local)。
您将遇到某些配方的构建失败。
请创建拉取请求,而不是在Homebrew的GitHub上寻求帮助,
Twitter或任何其他官方渠道。您负责解决
您在运行此时遇到的任何问题
不受支持的配置。” - hdsenevitest-bot
将无法执行标准设置的操作。这可以看作是homebrew提供的actions runner的一个限制,但是如果使用vanilla github actions和test-bot brew,则需要在/usr/local
中安装brew。 - ipatch这是user4815162342的答案的编辑版本,但它不能直接为我所用。
brew-usergroup
的新组。将所有使用brew的用户添加到该组中(如附带的来自德语macOS的截图所示)。In terminal, do this:
echo $(brew --prefix)
echo $(groups $(whoami))
sudo dseditgroup -o edit -a $(whoami) -t user brew-usergroup
sudo chgrp -R brew-usergroup $(brew --prefix)/*
sudo chmod -R g+rwX $(brew --prefix)/*
ls -lah $(brew --prefix)
brew install
现在应该可以正常工作,没有错误。cp: utimes: /usr/local/Cellar/XXX/.: Operation not permitted
错误,发现它是由一个组为 "staff" 而不是 "admin" 的文件夹引起的,尽管我运行了 chgrp -R admin /usr/local/
... 很奇怪,但问题已解决 :)
find /usr/local/ -not -group admin -ls
可能会有所帮助... - DrPsychickHomebrew不适用于不同Unix用户之间的使用。来自常见问题解答:
如果您需要在多用户环境中运行Homebrew,请考虑创建一个专门用于Homebrew使用的单独用户帐户。
chmod
解决方案不可行,除非您确保Homebrew前缀中每个新创建的文件也具有组写入权限,这在默认的umask
下不是这种情况-或者除非您每次程序写入Homebrew前缀时都运行该 chmod
命令。
为每个用户维护单独的Homebrew安装可以解决权限问题,但会创建许多其他问题,这就是为什么Homebrew不推荐这样做的原因:
但请千万别自找麻烦,请使用安装程序将其安装到默认前缀中。在其他位置安装可能会导致某些内容无法构建。相对于竞争对手,Homebrew之所以正常工作的原因之一就是因为我们推荐在此处进行安装。你可以自由选择其他前缀,但后果自负!
为了方便官方推荐使用专用帐户运行Homebrew,您可以使用sudo
轻松模拟该用户帐户。假设您将该用户命名为homebrew
:
sudo -H -u homebrew brew update
-H
会确保将 HOME
设置为 homebrew
用户的主目录(例如:/Users/homebrew
),以便 Homebrew 可以在那里进行其管理工作。-u homebrew
告诉 sudo
模拟 homebrew
用户账户,而不是默认的 root
。-i
标志。为了经常使用,设置别名是有帮助的:alias brew='sudo -Hiu $HOMEBREW_MAIN_USER brew'
。 - dijonkitchencd /usr/local
/bin/chmod -R +a "group:admin allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" Homebrew Caskroom Cellar bin
/usr/bin/chgrp -R admin Homebrew Caskroom Cellar bin
/bin/chmod -R g+rwX Homebrew Caskroom Cellar bin
ls -lae .
ls
命令中的-e
选项可以显示ACL。
更新:现在我使用特定的目录(见上文),因为之前失败了(类似于内存不足)。
/bin/chmod
。 - ipatchwritesecurity
(似乎是必需的,比如说让脚本可执行)。在进行了全新的Homebrew安装后,我最终使用了chmod -R +a 'group:admin allow readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,list,search,add_file,add_subdirectory,delete_child,read,write,append,execute,file_inherit,directory_inherit' *
命令来针对所有/usr/local
目录进行操作。 - zigg#!/bin/bash
comm="brew $@"
su niki -c "$comm"
chmod +x ~/brew.sh
.zshrc
或等效文件中:alias brew="~/brew.sh"
现在您可以像以前一样从niki_at_work
进行brew操作(它会要求输入niki
的密码):
brew update
brew install swiftlint
brewadmin
,你应该首先将brew目录的所有权改为brewadmin:admin:
sudo chown -R brewadmin:admin /usr/local/*
joe ALL=(administrator) NOPASSWD: /usr/local/bin/brew
sudo -Hu administrator brew install <smth>
上述解决方案对我无效。但运行下面的命令对我有效。
sudo chown -R $(whoami) $(brew --prefix)/*
来源:https://github.com/Homebrew/brew/issues/3228#issuecomment-333858695