docs.brew.sh 中的手动安装说明非常简短且不令人满意,如果我在/usr/local
不使用的情况下在的子目录中尝试它,则会导致一些错误sudo
。说明这个问题以及它的接受的答案稍微好一点,但不使用也不起作用sudo
。
我知道我可能需要使用它sudo
来安装 Homebrew 本身,但希望我不需要继续使用它sudo
来安装新的软件包、更新等。(标准 Homebrew 安装脚本似乎sudo
只在绝对必要时才使用,而标准结果是不需要使用它sudo
来安装新的软件包、更新等。)
我应该如何手动将 Homebrew 安装到/usr/local
子目录中?
手动安装信息/usr/local
子目录的动机:
- 手动安装使我能够最好地控制 Homebrew 的安装和管理过程。
- 由于 Homebrew 管理本地构建的包和系统范围的包的组合,因此安装到我的主目录的子目录中并不理想。
sudo
避免用户安装后使用的动机:
- 与标准安装的一致性
- 更容易管理现有的 Homebrew 包
- 如果 Homebrew 本身或 Homebrew 软件包不强制用户以 root 身份运行某些程序,则安全风险会降低
答案1
注意:此答案假设 macOS 用户已设置为管理员。请参阅重要的笔记:
重要的:除非绝对必要,否则请勿使用sudo
,如下所述。最终结果应该是 Homebrew 安装,不需要sudo
再使用。
自 2021 年 6 月起推荐方法:
用于sudo
创建一个子目录,例如opt
Homebrew 可以安装在该子目录下,并在需要时使用您自己的登录密码:
sudo mkdir /usr/local/opt
和 sudosudo
仅有的再次获取staff
组下子目录的所有权,例如:
sudo chown brodybits:staff /usr/local/opt
此时sudo
不再需要安装或使用 Homebrew。
ls -al /usr/local
现在应该显示新的子目录,例如:
total 0
drwxr-xr-x 5 root wheel 160 May 13 17:13 .
drwxr-xr-x@ 11 root wheel 352 Jan 1 2020 ..
-rw-r--r-- 1 root wheel 0 Oct 16 2018 .com.apple.installer.keep
drwxr-xr-x 4 root wheel 128 May 13 17:13 bak
drwxr-xr-x 2 brodybits staff 64 May 13 17:03 opt
现在使用 Git 进行克隆Homebrew/brew
来自 GitHub进入新的子目录,例如:
cd /usr/local/opt
git clone https://github.com/Homebrew/brew
ls -al /usr/local/opt # recommended
brew
可选:如果需要,可以重命名新安装的子目录。也可以选择将新brew
子目录上移到该/usr/local
级别(sudo
可能只需要再执行一次)。
更新所需的配置文件($HOME/.zprofile
例如$HOME/.zshenv
,在 zsh 的情况下)以将新的 Homebrewbin
子目录添加到PATH
环境变量中。以下是示例:
export PATH=/usr/local/opt/brew/bin:$PATH
(也可以看看这个答案。
重新启动 shell、启动新 shell 或获取配置文件。建议检查它是否which brew
显示在正确的位置 /usr/local/opt/brew/bin/brew
。
此时,应该显示一些信息(此时brew --version
尚未安装),例如:homebrew-core
Homebrew 3.1.7-36-g7c68b17
Homebrew/homebrew-core N/A
然后运行brew update
includehomebrew-core
并运行brew doctor
以验证是否正确安装。它可能会输出一些关于非标准 Homebrew 前缀的警告消息,但这应该是大多数软件包的问题。
brew --version
之后brew doctor
应该显示homebrew-core
包含,例如:
Homebrew 3.1.7-36-g7c68b17
Homebrew/homebrew-core (git revision 61cc59c956; last commit 2021-05-13)
尝试安装一个简单的公式,例如autoconf
:
brew install autoconf
autoconf --version
现在应该显示它已安装。
请参阅下文了解一些可选的后续步骤。
2018 年过时的解决方案不再测试或更新:
首先/usr/local
使用以下命令创建一个临时目录sudo
(如果要求,请输入密码):
sudo mkdir /usr/local/brewtmp1
检查结果ls -l /usr/local
:
total 0
drwxr-xr-x 2 root wheel 64 Jul 2 16:16 brewtmp1
修复临时目录的用户和组所有权:
sudo chown $USER:admin brewtmp1
再次检查结果ls -l /usr/local
:
total 0
drwxr-xr-x 2 brodybits admin 64 Jul 2 16:16 brewtmp1
master
然后在临时目录中下载并提取分支的内容GitHub 上的 Homebrew/brew 无需使用sudo
:
cd /usr/local/brewtmp1
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz
ls -l
检查范围内的结果/usr/local/brewtmp1
:
total 0
drwxr-xr-x 16 brodybits admin 512 Jul 2 14:46 Homebrew-brew-cbc3184
检查结果ls -l Homebrew-brew-*
:
total 48
-rw-r--r-- 1 brodybits admin 98 Jul 2 14:46 CHANGELOG.md
-rw-r--r-- 1 brodybits admin 3161 Jul 2 14:46 CODE_OF_CONDUCT.md
-rw-r--r-- 1 brodybits admin 720 Jul 2 14:46 CONTRIBUTING.md
-rw-r--r-- 1 brodybits admin 1334 Jul 2 14:46 LICENSE.txt
drwxr-xr-x 7 brodybits admin 224 Jul 2 14:46 Library
-rw-r--r-- 1 brodybits admin 7374 Jul 2 14:46 README.md
drwxr-xr-x 3 brodybits admin 96 Jul 2 14:46 bin
drwxr-xr-x 5 brodybits admin 160 Jul 2 14:46 completions
drwxr-xr-x 48 brodybits admin 1536 Jul 2 14:46 docs
drwxr-xr-x 5 brodybits admin 160 Jul 2 14:46 manpages
这应该会显示具有正确用户和组的 Homebrew 内容。
重命名Homebrew-brew-???????
为homebrew
(不使用sudo
)(使用其他名称应该也可以,但需对下面的其他步骤进行调整):
mv Homebrew-brew-??????? homebrew
并再次检查结果ls -l
:
total 0
drwxr-xr-x 16 brodybits admin 512 Jul 2 14:46 homebrew
使用以下命令将新homebrew
目录移动到正确的位置sudo
:
sudo mv /usr/local/brewtmp1/homebrew /usr/local
再次检查结果ls -l /usr/local
:
total 0
drwxr-xr-x 2 brodybits admin 64 Jul 2 16:20 brewtmp1
drwxr-xr-x 16 brodybits admin 512 Jul 2 14:46 homebrew
将以下行添加到配置文件(.profile
或.bash_profile
根据需要)(按照指示这是另一个问题的答案):
export PATH=/usr/local/homebrew/bin:$PATH
重启 shell,启动新 shell,或者获取配置文件。检查是否which brew
显示/usr/local/homebrew/bin/brew
。检查是否brew --version
正常工作(尽管没有homebrew-core
安装)例如:
Homebrew >=1.4.0 (shallow or no git repository)
Homebrew/homebrew-core N/A
brew doctor
此时建议执行此操作,这将包括homebrew-core
并验证是否正确安装。它可能会输出有关非标准 Homebrew 前缀的警告,但这应该是大多数软件包的问题。然后brew --version
应该显示homebrew-core
包含的内容:
Homebrew >=1.4.0 (shallow or no git repository)
Homebrew/homebrew-core (git revision 2f937; last commit 2018-07-02)
尝试安装一个简单的公式,例如autoconf
:
brew install autoconf
autoconf --version
现在应该显示它已安装。
ls -l /usr/local/homebrew
现在应该看起来像这样:
total 48
-rw-r--r-- 1 brodybits admin 98 Jul 2 16:43 CHANGELOG.md
-rw-r--r-- 1 brodybits admin 3161 Jul 2 16:43 CODE_OF_CONDUCT.md
-rw-r--r-- 1 brodybits admin 720 Jul 2 16:43 CONTRIBUTING.md
drwxr-xr-x 3 brodybits admin 96 Jul 2 16:43 Cellar
-rw-r--r-- 1 brodybits admin 1334 Jul 2 16:43 LICENSE.txt
drwxr-xr-x 8 brodybits admin 256 Jul 2 16:43 Library
-rw-r--r-- 1 brodybits admin 7374 Jul 2 16:43 README.md
drwxr-xr-x 10 brodybits admin 320 Jul 2 16:43 bin
drwxr-xr-x 5 brodybits admin 160 Jul 2 16:43 completions
drwxr-xr-x 48 brodybits admin 1536 Jul 2 16:43 docs
drwxr-xr-x 3 brodybits admin 96 Jul 2 16:43 etc
drwxr-xr-x 5 brodybits admin 160 Jul 2 16:43 manpages
drwxr-xr-x 4 brodybits admin 128 Jul 2 16:43 opt
drwxr-xr-x 8 brodybits admin 256 Jul 2 16:43 share
drwxr-xr-x 3 brodybits admin 96 Jul 2 16:42 var
现在建议添加一些可能缺少的目录并修复一些目录权限以匹配 Homebrew 安装脚本的结果(我希望brew doctor
检查并提供处理这部分的内容):
cd /usr/local/homebrew
mkdir -p include Caskroom Cellar lib opt share var
chmod g+w include Caskroom Cellar lib opt share var
最后进行清理/usr/local/brewtmp1
(使用sudo
):
sudo rm -rf /usr/local/brewtmp1
可选的后续步骤:
要禁用分析(感谢本文(必须在安装包后完成):
brew analytics off
你可以Homebrew/homebrew-cask-versions
以获取替代版本(如每日版本和测试版本)的访问权限,正如他们所记录的那样:
brew tap homebrew/cask-versions
2018 年的附加阅读材料和其他资源: