Jon*_*ter 32 permissions macos homebrew multi-user
我有两台工程师共享的Mac.两者都有单独的用户帐户.两者都需要运行brew update和brew install...偶尔为之.
如何设置这没有得到这样的错误:
/usr/local must be writable!?
是的,我可以UserA接受/usr/local每次他想使用brew 的权限(和相同UserB),但这似乎是很多不必要的麻烦.
use*_*342 61
您还可以将组权限更改为管理员或您的两个用户所在的其他组:
chgrp -R admin /usr/local
chmod -R g+w /usr/local
Run Code Online (Sandbox Code Playgroud)
原始来源:https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925
更新:
在macOS High Sierra中,您无法更改所有者,组或权限/usr/local.因此,您必须更改子文件夹的组和权限:
chgrp -R admin /usr/local/*
chmod -R g+w /usr/local/*
Run Code Online (Sandbox Code Playgroud)
更新 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)
Run Code Online (Sandbox Code Playgroud)
jer*_*ryb 48
每个试图破解权限或使用的答案sudo都是错误的。
不要使用sudo也不要跨用户帐户共享单个 brew 安装。
每个Homebrew 文档的正确答案是在机器上使用零个或一个全局 brew 安装,并为所有其他用户安装本地版本的 brew。
这在 Mac 上尤其重要,但也适用于 Linux。
这可以通过以下方法之一完成
Git approach:对源代码库进行 git checkoutUntar-anywhere approach: 将 tarball 扩展到某个目录 - 由您的用户拥有对于 git 方法,您需要克隆brew。
任意选择我的用户主目录进行结帐:
cd $HOME
git clone https://github.com/Homebrew/brew.git
./brew/bin/brew tap homebrew/core
Run Code Online (Sandbox Code Playgroud)
如docs.brew.sh 所述,在您的主目录中运行此命令,这将创建~/homebrew.
mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
Run Code Online (Sandbox Code Playgroud)
对于任何一种安装方法,您都需要更改PATH为更喜欢新的 brew bin 目录,将类似的内容添加到您的 shell 的 dot 文件中。
export PATH=$HOME/homebrew/bin:$PATH >> ~/.zshrc # or ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
然后运行它来重新加载和测试
exec $SHELL
which brew # see that brew is found in your path
Run Code Online (Sandbox Code Playgroud)
由于这是一个新安装,您必须(再次)安装所有所需的 brew 包。
Vit*_*.us 23
根据brew文档,您可以将其安装在每个用户主文件夹中
这样,所有包都将保留在您的用户文件夹中,并且不会可见或影响其他用户。删除该用户的一个好处是,系统上不会留下任何垃圾。因此,系统范围内的污染被最小化。
如果您为多个用户安装相同的软件包,那么这是以使用更多存储空间为代价的。如果您的 SSD 非常小,需要注意一些事情。
如果您当前在系统上全局安装了brew ,我建议首先卸载brew。(你可以看到brew安装在哪里运行which brew)
如果您没有安装命令行工具,则必须先运行以下命令:
xcode-select --install
Run Code Online (Sandbox Code Playgroud)
打开终端并运行:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
关闭终端窗口
再次打开终端,然后运行以下命令以确保安装正确:
brew doctor
Run Code Online (Sandbox Code Playgroud)
完毕!
这不是必需的, 我还发现在每次安装某些东西之前禁用brew来更新所有软件包很有用。
echo 'HOMEBREW_NO_AUTO_UPDATE=1' >> $HOME/.zprofileecho 'HOMEBREW_NO_AUTO_UPDATE=1' >> $HOME/.bash_profileVal*_*Val 12
Homebrew 并不是为不同的 Unix 用户使用而设计的。来自常见问题解答:
\n\n\n如果您需要在多用户环境中运行 Homebrew,请考虑创建一个单独的用户帐户,特别是为了使用 Homebrew。
\n
该chmod解决方案不可行,除非您确保 Homebrew 前缀中的每个新创建的文件也具有组写入权限(默认的umask\xe2\x80\x93 不是这种情况),或者除非您chmod每次程序写入时都继续运行该命令到 Homebrew 前缀。
为每个用户维护单独的 Homebrew 安装确实可以解决权限问题,但会产生许多其他问题,这就是Homebrew 不推荐的原因:
\n\n\n不过,帮自己一个忙,使用安装程序安装到默认前缀。有些东西安装在其他地方时可能无法构建。Homebrew 相对于竞争对手表现出色的原因之一是我们建议在此处安装。选择另一个前缀后果自负!
\n
为了简化官方建议使用 Homebrew 专用帐户的要求,您可以使用sudo来轻松模拟该用户帐户。假设您指定该用户homebrew:
sudo -H -u homebrew brew update\nRun Code Online (Sandbox Code Playgroud)\n-H确保HOME设置为homebrew用户主目录(例如/Users/homebrew),以便 Homebrew 可以在那里进行内务处理。-u homebrew告诉sudo模拟homebrew用户帐户而不是默认的root.Har*_*ren 11
Hombrew安装了软件包/usr/local,没有打破它安装的许多软件包,你无能为力.为所有用户添加读写权限,如下所示:
sudo chmod -R +rw /usr/local
Run Code Online (Sandbox Code Playgroud)
请注意,由于这是一个系统文件夹,所有用户将共享相同的brew安装.一个用户可以删除其他人安装的软件包,依此类推.所以一定要协调以避免问题.
这是user4815162342答案的编辑版本,开箱即用对我来说不起作用。
brew-usergroup。将所有使用brew的用户添加到组中(如附件中来自德国macOS的屏幕截图)。在终端中,执行以下操作:
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)
Run Code Online (Sandbox Code Playgroud)
请注意,这不再更改Brew文件夹的权限(就像在其他答案中一样),它更改了brew文件夹的子文件夹/文件。
brew install现在应该可以正常工作而没有错误了。
上面的方法工作正常,但是如果您希望新文件自动继承那些权限,请设置一个继承的ACL(否则,只有倒瓶的用户才能删除它)。在这里找到了如何执行此操作的提示:https : //gist.github.com/nelstrom/4988643
由于root运行一次(假设组“管理员”的所有用户都应该有机会获得):
cd /usr/local
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
chgrp -R admin Homebrew Caskroom Cellar bin
chmod -R g+rwX Homebrew Caskroom Cellar bin
ls -lae .
Run Code Online (Sandbox Code Playgroud)
在-e上ls节目的ACL。
更新:现在我使用特定的目录(见上文),因为它失败了(例如内存不足)
小智 5
这是一位 Homebrew 维护者的官方回答。
创建第三个管理员用户(例如 homebrew),然后:
sudo chown -R homebrew:admin /usr/local/*然后,所有进一步的写入操作(即安装、更新、升级等)都应该由该用户的其他人通过 su 或 sudo 的功能来完成,具体取决于您的偏好:
su homebrew -c 'brew update'在这方面,Homebrew 和系统包管理器之间只有一个区别:前者让您决定向哪个用户授予所有权,而后者将其修复为 root。
我自己的建议
niki假设您已经有一个拥有该目录的管理员用户/usr/local/*,并且您以另一个管理员用户的身份登录niki_at_work。在这种情况下,您不一定需要为自制程序创建新帐户。
~/brew.sh:#!/bin/bash
comm="brew $@"
su niki -c "$comm"
Run Code Online (Sandbox Code Playgroud)
chmod +x ~/brew.sh.zshrc或等效项:alias brew="~/brew.sh"现在你可以niki_at_work像往常一样进行冲泡(它会询问 的niki密码):
brew update
brew install swiftlint
Run Code Online (Sandbox Code Playgroud)
如果您确实想为brew ex 使用专用的管理员用户。brewadmin你应该首先 chown 酿造目录:
sudo chown -R brewadmin:admin /usr/local/*
| 归档时间: |
|
| 查看次数: |
17879 次 |
| 最近记录: |