Homebrew

安装Homebrew

  • 只要主机联网,通过以下命令就能够直接安装homebrew:

通过网络安装Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

备注

会提示安装 Xcode command tools,请按照提示安装命令行工具,并继续安装Homebrew

备注

安装过程反复出现SSL错误:

==> Downloading and installing Homebrew...
fatal: unable to access 'https://github.com/Homebrew/brew/': LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
Failed during: git fetch origin master:refs/remotes/origin/master --tags --force

可能和curl版本有关,参考 cURL SSL_ERROR_SYSCALL (OpenSSLLibreSSL) #4099 尝试:

echo '--no-alpn' > ~/.curlrc
export HOMEBREW_CURLRC=1

有可能再出现error 60,不过那是因为网络超时导致(GFW干扰):

fatal: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60
fatal: the remote end hung up unexpectedly

安装网络阻塞问题的解决方法

安装Homebrew的最大麻烦是 GFW 对GitHub的干扰(并不是完全不通,但是不断间歇阻塞会浪费大量的时间精力),解决的方法是使用代理。安装脚本中涉及到 curlgit 都需要配置代理。我采用的方法是: SSH Tunneling: 动态端口转发 :

执行一条命令建立起动态端口转发的翻墙ssh tunnel
ssh -D 1080 -C user@vpn.example.com
  • 我最初采用socks结合squid代理 ( Squid父级socks代理 方案可以在本地构建一个squid代理,通过墙外到二级代理实现无障碍访问),不过感觉对桌面来说有点复杂,所以改为更为简单的 :ref:``

  • curl代理

配置curl的socks5代理环境变量
export ALL_PROXY=socks5h://localhost:1080
全局配置git使用socks5代理
git config --global http.proxy 'socks5h://127.0.0.1:1080'

此外,参考 How to install an homebrew package behind a proxy? 有一个简单设置方法:

配置brew使用代理服务器 192.168.6.200 端口 3128 (案例采用局域网部署的 Squid代理服务 )
export ALL_PROXY=192.168.6.200:3128

我还采用了一种方法是借助 VPN Hotspot ,通过手机VPN共享给局域网使用,使得自己的桌面电脑能够翻墙直接访问Homebrew的软件仓库,才能顺利完成Homebrew安装。

我在完成 Homebrew 安装完成后,立即安装 OpenConnect VPN 客户单 openconnect ,这样可以方便 macOS 翻墙,实现很多必要的软件安装:

brew install openconnect

使用brew

  • brew使用帮助:

    brew help
    
  • 检查是否存在安装问题:

    brew doctor
    
  • 搜索应用程序:

    brew search
    
  • 安装:

    brew install packgename
    
  • 列出所有Homebrew安装的应用:

    brew list
    
  • 删除应用:

    brew remove packagename
    
  • 更新Homebrew自身:

    brew update
    
  • 查看是否有软件包没有及时更新:

    brew outdated
    
  • 更新所有软件包或单个软件包:

    brew update
    brew update packagename
    
  • 将一个软件包保持在某个版本:

    brew pin packagename
    
  • 解除软件包版本锁定:

    brew unpin packagename
    
  • brew 提供了重启服务的功能,例如重启 macOS中使用Homebrew部署nginx :

使用brew重启nginx
brew services restart nginx

Homebrew Cask

Homebrew Cask 扩展了Homebrew并且将它提升到优雅、简洁、安装迅速,同时提供了管理macOS GUI程序的功能,例如可以安装Atom和Google Chrome。

备注

Homebrew Cask提供了安装图形软件的功能,也就是说,如果要使用 brew install 安装一个macOS上的图形软件,通常就是使用 brew install --cask XXX

例如,安装 macOS安装Docker 中安装Docker Desktop on Mac,应该使用:

通过Homebrew安装Docker Desktop for macOS
brew install --cask docker

如果使用 brew install docker 则只安装docker命令行

  • 不需要单独安装homebrew cask,你只需要使用,例如你想安装 atom 编辑器,则执行:

    brew cask install atom
    

然后你就可以使用atom编辑器了。

不过,2021年时候,使用上述命令会出现报错:

Updating Homebrew...
Error: Unknown command: cask

这是因为最新版本brew已经改变成:

brew install --cask atom

备注

你可以通过 Homebrew Formulae 查看所有cask tap列表。

这省却了我很多查找下载软件的时间,例如,最常用的开发IDE Visual Studio Code就可以直接安装:

brew install --cask visual-studio-code

升级

macOS升级系统,可能会导致brew的软件无法正常工作。例如,出现无法使用vim:

vim
dyld: Library not loaded: /System/Library/Perl/5.28/darwin-thread-multi-2level/CORE/libperl.dylib
  Referenced from: /usr/local/Cellar/macvim/8.2-171/MacVim.app/Contents/MacOS/Vim
  Reason: image not found
[1]    13046 abort      vim

这个报错,我参考 dyld: Library not loaded: libperl.dylib Referenced from: perl5.18 升级 brew 来修复:

brew update
brew upgrade

也可以单独升级某个异常软件:

brew upgrade macvim

服务起停

brew 提供了一个 services 方式来启动和停止服务以及管理服务的自动启动

  • 通过以下命令 tapping homebrew/services (只需要执行一次):

安装 brew services
brew tap homebrew/services
  • 通过以下命令可启动/停止 nginx 服务,其中 start 命令不仅启动nginx而且会设置nginx随着操作系统启动而启动:

brew 启动和停止nginx
# 启动nginx并且设置自动启动
brew services start nginx

# 停止nginx
brew services stop nginx
  • list 命令可检查当前系统所有服务:

brew 检查系统所有服务
brew services list

输出类似:

brew 检查系统所有服务输出案例
Name       Status  User        File
nginx      started huataihuang ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
prometheus none
unbound    none

实践和必备安装

brew很好地弥补了 macOS 的开源软件版本滞后的短板,强烈建议在拿到macOS笔记本新系统时完成以下安装:

在macOS新系统必装的brew软件
brew update
brew install pssh vim tmux tree webp gawk gsed openconnect nginx
brew install --cask iterm2
brew install --cask docker
brew install golang

备注

安装了homebrew vim 之后,会依赖安装多种开发语言,其中包括 Python Atlas 3的最新版本,比macOS内置版本更好,所以建议切换到homebrew版本:

切换macOS的python3版本到homebrew提供的版本
cd /opt/homebrew/bin
ln -s python3.11 python3
ln -s python3.11 python
ln -s pip3.11 pip3
ln -s pip3.11 pip