我应该如何手动将 homebrew 安装到 /usr/local 子目录中?

我应该如何手动将 homebrew 安装到 /usr/local 子目录中?

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创建一个子目录,例如optHomebrew 可以安装在该子目录下,并在需要时使用您自己的登录密码:

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 年的附加阅读材料和其他资源:

相关内容