如何在多用户MacOS Sierra设置上使用自制软件

如何在多用户MacOS Sierra设置上使用自制软件,macos,permissions,homebrew,multi-user,Macos,Permissions,Homebrew,Multi User,我有一台Mac电脑,由两名工程师共享。两者都有单独的用户帐户。两者都需要偶尔运行brew update和brew安装… 如何设置此项而不出现以下错误: /usr/local必须是可写的 是的,我可以让UserA在每次他想使用brew时接管/usr/local的权限(和UserB一样),但这似乎是很多不必要的麻烦。请注意:到2020年,这个答案已经过时了。(但不能删除,因为它是公认的答案。) Hombrew在/usr/local中安装软件包,如果不破坏它安装的许多软件包,您将无能为力。为所有用户添

我有一台Mac电脑,由两名工程师共享。两者都有单独的用户帐户。两者都需要偶尔运行
brew update
brew安装…

如何设置此项而不出现以下错误:
/usr/local必须是可写的


是的,我可以让
UserA
在每次他想使用brew时接管
/usr/local
的权限(和
UserB
一样),但这似乎是很多不必要的麻烦。

请注意:到2020年,这个答案已经过时了。(但不能删除,因为它是公认的答案。)

Hombrew在
/usr/local
中安装软件包,如果不破坏它安装的许多软件包,您将无能为力。为所有用户添加读写权限,如下所示:

sudo chmod -R +rw /usr/local
sudo -Hu administrator brew install <smth>

请注意,由于这是一个系统文件夹,所有用户将共享相同的brew安装。一个用户可以删除其他用户安装的软件包,依此类推。因此,请确保协调以避免问题。

您还可以将组权限更改为admin或您的两个用户所在的其他组:

chgrp -R admin /usr/local
chmod -R g+w /usr/local
原始资料来源:

更新:

在macOS High Sierra中,您不能更改
/usr/local
的所有者、组或权限。因此,您必须更改子文件夹的组和权限:

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

更新2018年9月,High Sierra 10.13.6

  • 确定brew前缀的路径,即用于存储与使用自制软件相关的文件的路径
  • 检查系统上需要访问
    brew
    的所有用户是否在管理组中
  • 可选如果用户需要访问brew,则将用户添加到管理组 将需要访问权限/特权才能使用sudo命令

  • 将brew前缀路径设置为由管理组递归拥有
  • 将brew前缀路径设置为可由admin组中的所有用户递归写入
  • 验证brew前缀的权限

  • brew上述解决方案对我不起作用。但是运行下面的命令对我来说很有效

    sudo chown-R$(whoami)$(brew--前缀)/*


    来源:

    最佳解决方案是添加sudoers记录,以允许非特权用户“joe”作为管理用户执行任何与“brew”相关的命令

    在/etc/sudoers.d/joe处创建一个包含以下内容的文件:

    joe ALL=(administrator) NOPASSWD: /usr/local/bin/brew
    
    然后您可以像这样运行brew:

    sudo chmod -R +rw /usr/local
    
    sudo -Hu administrator brew install <smth>
    
    sudo-Hu管理员brew安装
    
    上述方法可以正常工作,但如果您希望新文件自动继承这些权限,请设置继承的ACL(否则,只有倒瓶子的用户才能将其删除)。在此处找到如何执行此操作的提示:

    作为
    root
    运行一次(假设组“admin”的所有用户都应该有访问权限):

    ls
    上的
    -e
    显示ACL

    更新:现在我使用特定目录(见上文),因为它失败了(如内存不足)

    编辑:请使用Vitim的答案,它是正确的:)

    macOS Mojave 10.14的黑客解决方案 这是一个编辑版本的的的答案,这对我来说不是现成的

  • 在系统首选项中,转到用户和组,单击左下角的锁定符号以解锁用户/组创建,然后创建名为
    brew用户组的新组。将所有使用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)
    
  • 请注意,这不再改变brew文件夹的权限(与其他答案一样),而是改变brew文件夹的子文件夹/文件。
    brew安装
    现在应该可以正常工作,不会出现错误。

    任何试图破解权限或使用
    sudo
    的答案都是错误的

    不要使用
    sudo
    ,也不要跨用户帐户共享单个brew安装

    每个的正确答案是在机器上使用零或一个全局brew安装,对于所有其他用户,安装本地版本的brew

    这在Mac上尤其重要,但在Linux上也可以

    这可以通过以下方法之一实现

  • Git方法
    :对源回购进行Git签出
  • Untar-anywhere方法
    :将tarball扩展到某个目录中–由您的用户拥有
  • Git方法 对于git方法,您需要克隆

    为我的签出任意选择我的用户主目录:

    cd$HOME
    git克隆https://github.com/Homebrew/brew.git
    ./brew/bin/brew点击自制/核心
    
    Untar Anywhere方法 如中所述,在主目录中运行此命令,将创建
    ~/homebrew

    mkdir自制&curl-Lhttps://github.com/Homebrew/brew/tarball/master |tar xz——strip 1-C自制
    
    结束 对于任何一种安装方法,您都需要更改
    路径
    ,以选择新的brew bin目录,并在shell的点文件中添加类似的内容

    export PATH=$HOME/homebrew/bin:$PATH>~/.zshrc#或~/.bashrc
    
    然后运行它来重新加载和测试

    exec$SHELL
    哪个brew?查看路径中的brew
    
    由于这是新安装,您必须(再次)安装所有所需的brew软件包。

    为每个用户安装homebrew 根据需要,您可以将其安装在每个用户的主文件夹中

    这样,所有包都将保留在您的用户文件夹中,并且不会可见或影响其他用户。如果您删除了该用户,则系统中不会留下任何垃圾,这是一个很好的副作用。因此,全系统的污染被最小化

    如果您为m安装了相同的软件包,那么这是以使用更多存储为代价的