当前位置 : 首页 » 文章分类 :  开发  »  Homebrew

Homebrew

Mac 包管理软件 Homebrew 使用笔记

Homebrew官网:
https://brew.sh/index_zh-cn


Mac 安装 Homebrew

Homebrew 国内安装脚本

https://gitee.com/cunkai/HomebrewCN

苹果电脑标准安装脚本:(推荐 优点全面 缺点慢一点)

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安装后桌面的 Old_Homebrew 文件夹,大致看看没有你需要的可以删除。


Homebrew 官方安装脚本

安装homebrew,直接在终端输入:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

会提示输入密码,直接输入开机密码就可以。

解决mac安装homebrew后报错-bash: brew: command not found
https://blog.csdn.net/li396864285/article/details/52572163
将 /usr/local/bin 加入PATH

Mojave 10.14.6 安装XCode工具包
安装 homebrew 的命令依赖 git, 而 Mac 中安装 git 又必须安装 XCode 工具包
遇到过一个问题 Mojave 10.14.6 版本直接在 appstore 安装 xcode 提示系统版本太低。

Mojave 10.14.6 XCode 工具包安装方法:
打开苹果开发者中心下载页面
https://developer.apple.com/download/more/
搜索 xcode ,下载 command line tools for XCode 11.3.1 安装即可。
注意:不需要下载完整的 xcode 11.3.1(非常大,有8GB),只需下载 200 多MB的 command line tools 即可,一开始不知道这个,花几个小时下载了一个 xcode 11.4 安装时说版本不对,气死了。又花几个小时下载了 xcode 11.3.1 解压时说文件损坏。

How to run Xcode 11.4 on macOS Mojave 10.14.6
https://stackoverflow.com/questions/61013626/how-to-run-xcode-11-4-on-macos-mojave-10-14-6


使用brew管理Mac软件

brew search 搜索软件

例如搜索 FFmpeg

brew search ffmpeg
==> Formulae
ffmpeg      ffmpeg2theora       ffmpeg@2.8        ffmpegthumbnailer

brew info 查看软件信息

brew info zookeeper
zookeeper: stable 3.5.8 (bottled), HEAD
Centralized server for distributed coordination of services
https://zookeeper.apache.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/zookeeper.rb
License: Apache-2.0
==> Dependencies
Build: ant ✔, autoconf ✔, automake ✔, libtool ✔, pkg-config ✔
==> Options
--HEAD
    Install HEAD version
==> Caveats
To have launchd start zookeeper now and restart at login:
  brew services start zookeeper
Or, if you don't want/need a background service you can just run:
  zkServer start
==> Analytics
install: 7,517 (30 days), 23,488 (90 days), 82,776 (365 days)
install-on-request: 2,163 (30 days), 8,051 (90 days), 25,200 (365 days)
build-error: 0 (30 days)

brew 安装指定版本软件(废弃)

以安装指定版本的 zookeeper 为例
通过 brew info zookeeper 看到当前 zk 版本是 3.5.8,但 3.5.8 与 jdk8 不兼容,需要降级到 3.4.x

brew info 的结果中有安装源信息,这个非常重要
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/zookeeper.rb

我们直接打开这个 GitHub 链接,可以看到这就是一个文本,看他的 history ,找到我们需要的版本后点击 View at this point in the history
可以打开当时的 .rb 文件
https://github.com/Homebrew/homebrew-core/blob/6d8197bbb5f77e62d51041a3ae552ce2f8ff1344/Formula/zookeeper.rb

然后直接 brew install https://xx.rb 即可
例如

brew install https://github.com/Homebrew/homebrew-core/blob/6d8197bbb5f77e62d51041a3ae552ce2f8ff1344/Formula/zookeeper.rb

注意:这种方式已经废弃了,执行时会提示
Warning: Calling Installation of zookeeper from a GitHub commit URL is deprecated! Use ‘brew extract zookeeper’ to stable tap on GitHub instead.

后来改为用 docker 启动 kafka 了,没再研究如何 brew 安装指定版本。


brew list 查看已安装的软件

brew list 列出所有已安装的软件

brew list tesseract 查看具体软件的安装路径
/opt/homebrew/Cellar/tesseract/5.2.0/bin/tesseract
/opt/homebrew/Cellar/tesseract/5.2.0/include/tesseract/ (12 files)
/opt/homebrew/Cellar/tesseract/5.2.0/lib/libtesseract.5.dylib
/opt/homebrew/Cellar/tesseract/5.2.0/lib/pkgconfig/tesseract.pc
/opt/homebrew/Cellar/tesseract/5.2.0/lib/ (2 other files)
/opt/homebrew/Cellar/tesseract/5.2.0/share/tessdata/ (35 files)

brew update 更新formula

更新软件包定义(formula)和 Homebrew 本身,并且会对本机已经安装并有更新的软件用*标明
注意 brew update 只是更新软件包定义(formula),并不真正更新软件。

brew outdated 查看过期/可更新的软件

brew outdated
consul (1.11.4) < 1.12.2
helm (3.8.0) < 3.9.0
jenv (0.5.4) < 0.5.5_2
jmeter (5.4.3) < 5.5
kafka (3.1.0) < 3.2.0
maven (3.8.4) < 3.8.6
mongodb/brew/mongodb-community (5.0.6) < 6.0.6
mongodb/brew/mongodb-database-tools (100.5.2) < 100.7.2
mongosh (1.3.0) < 1.5.0
openjdk (17.0.2) < 18.0.1.1
redis (6.2.6) < 7.0.2
telnet (63) < 64
tomcat@9 (9.0.60) < 9.0.64

brew upgrade 真正更新软件

brew upgrade 更新全部软件
brew upgrade formula 更新指定软件
注意执行 brew upgrade 才是真正更新软件,brew update 只是更新定义。


brew uninstall 卸载软件

如果卸载的软件被其他软件依赖,会报错并提示,例如

brew uninstall zookeeper
Error: Refusing to uninstall /usr/local/Cellar/zookeeper/3.5.8
because it is required by kafka, which is currently installed.
You can override this and force removal with:
brew uninstall –ignore-dependencies zookeeper

强制卸载 zk
brew uninstall --ignore-dependencies zookeeper


brew services 管理Mac服务

macOS 使用 launchctl 命令加载开机自动运行的服务:
/Library/LaunchDaemons 目录中是开机自启的服务,需要sudo
~/Library/LaunchAgents 目录中是用户登录后自启的服务

.plist 文件中可以找到服务路径、启动参数、日志路径等。

brew service 可以简化 lauchctl 的操作,类似 Linux 的 systemctl

使用 brew 安装的软件包,会自动创建 Service ,注册开机自启后,会自动创建 .plist 文件,取消开机自启会自动删去该文件

brew services list 查看服务列表及状态

brew services listbrew services 查看使用brew安装的服务列表

# brew services list
Name              Status  User Plist
consul            started masi /Users/masi/Library/LaunchAgents/homebrew.mxcl.consul.plist
mongodb-community started masi /Users/masi/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist
mysql@5.7         started masi /Users/masi/Library/LaunchAgents/homebrew.mxcl.mysql@5.7.plist
redis             started masi /Users/masi/Library/LaunchAgents/homebrew.mxcl.redis.plist

编辑/usr/local/Cellar/xx/xx.plist

brew 安装软件(formula)时,其 plist 文件位于 /usr/local/Cellar 中,在以该 formula 命名的目录中。

当使用 brew services start 生成守护程序时,此文件将被复制到运行用户的 Library/LaunchAgents/ 中,例如:
对于 root 用户,它是 Library/LaunchAgents/
对于普通用户,是 ~/Library/LaunchAgents/

homebrew.mxcl.kafka.plist示例

homebrew.mxcl.kafka.plist 如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>homebrew.mxcl.kafka</string>
    <key>WorkingDirectory</key>
    <string>/usr/local</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/opt/kafka/bin/kafka-server-start</string>
        <string>/usr/local/etc/kafka/server.properties</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/usr/local/var/log/kafka/kafka_output.log</string>
    <key>StandardOutPath</key>
    <string>/usr/local/var/log/kafka/kafka_output.log</string>
</dict>
</plist>

brew services run 启动服务但不注册开机启动

brew services run formula|–all # 启动服务(仅启动不注册,也就是不添加开机启动)

brew services start 启动服务并注册开机启动

brew services start formula|–all # 启动服务,并注册为开机启动

brew services stop 停止服务并取消注册

brew services stop formula|–all # 停止服务,并取消注册

brew services restart 重启服务并注册

brew services restart formula|–all # 重启服务,并注册

brew services cleanup 清除无用配置

brew services cleanup # 清除已卸载应用的无用的配置


brew tap 三方仓库

brew tap 用于给 brew 安装第三方仓库。
如果你在核心仓库没有找到你需要的软件,那么你就需要安装第三方的仓库去安装你需要的软件
tap 命令的仓库源默认来至于 Github,但是这个命令也不限制于这一个地方

brew tap 列出tap仓库

brew tap 没有参数会自动更新已经存在的tap并列出当前已经 tapped 的仓库

brew tap <user>/<repo> 安装GitHub上的tap

brew tap <user>/<repo> 在本地对这个 https://github.com/user/repo 仓库上做了一个浅度的克隆,完成之后 brew 就可以在这个仓库包含的 formulae 上工作,你可使用 brew install 或者 brew uninstall 安装或者卸载这个仓库上的软件。当你执行 brew update 这个命令时,tap 和 formulae 就会自定更新。
例如安装 MongoDB 社区版的tap brew tap mongodb/brew

brew tap <user>/<repo> URL 安装指定url的tap

brew tap <user>/<repo> URL 在本地对这个 URL 仓库上做了一个浅度的克隆,和上面一个参数命令是不一样的,URL 没有默认关联到 Github, 这个 URL 没有要求必须是 HTTP 协议,任何位置和任何协议而且 Git 也是能很好的处理的。

brew untap <user>/<repo> 移除tap

brew untap <user>/<repo> 移除已经安装的 tap
仓库被删除后 brew 就不在可用在这个仓库的 formulae.
可以同时删除几个仓库

brew tap仓库在GitHub的命名规范

在 Github上 你的仓库名称必须是 homebrew-something, 为了使用一个参数的 brew tap 命令,homebrew- 这个前缀不是可选的,是必须的。
对于两个参数的 brew tap 命令没有这个限制,但是必须给出明确的全部的 URL 地址
当你在命令行使用 brew tap 时,你可以省略 homebrew- 这个前缀的

Taps (Third-Party Repositories)
https://docs.brew.sh/Taps


brew config 查看brew全局配置

Intel 版 Mac Homebrew 根目录:/opt/homebrew
M1 版 Mac Homebrew 根目录:/usr/local

brew config
HOMEBREW_VERSION: 3.4.0-31-g3ddcaac
ORIGIN: https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
HEAD: 3ddcaacfd752730a573da9e56e92ab50dff675a7
Last commit: 12 days ago
Core tap ORIGIN: https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
Core tap HEAD: 229085efeb00933557d7723329d3653ce264568b
Core tap last commit: 11 days ago
Core tap branch: master
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_BOTTLE_DOMAIN: https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/bottles
HOMEBREW_CASK_OPTS: []
HOMEBREW_CORE_GIT_REMOTE: https://github.com/Homebrew/homebrew-core
HOMEBREW_MAKE_JOBS: 8
Homebrew Ruby: 2.6.8 => /opt/homebrew/Library/Homebrew/vendor/portable-ruby/2.6.8/bin/ruby
CPU: octa-core 64-bit arm_firestorm_icestorm
Clang: 13.0.0 build 1300
Git: 2.30.1 => /Library/Developer/CommandLineTools/usr/bin/git
Curl: 7.77.0 => /usr/bin/curl
macOS: 12.2.1-arm64
CLT: 13.0.0.0.1.1627064638
Xcode: N/A
Rosetta 2: false

brew cask

brew 装的主要是 command line tool
brew cask 装的大多是有 gui 界面的 app 以及驱动,brew cask 是 brew 的一个官方源。

homebrew 从 2.5.11 后,cask 就取消了。再执行类似 brew cask install docker 的命令会报错 Error: Unknown command: cask, 应改为 brew install --cask docker

从 2.6.0 开始, brew 命令全面取代 brew cask 命令


brew link 用于创建、删除 brew formula 到 /urs/local/bin/ 目录中的符号链。

brew link 内部其实就是将软件(formula)的可执行文件链接到 /urs/local/bin/ 目录中的符号链,也就是 ln -s 命令。

homebrew 可以安装多个版本的 formula, 比如 brew search node 能看到 node 有 node, node@10, node@12, node@14 几个版本。
当同时安装了多个版本的 node 时,可使用 brew link 切换软件版本:
假如同时安装了最新版 node 和 node@10, 且当前 node 命令指向最新版 node, 如果想切换到 node@10 可以这样做:
brew unlink node 删除 node 命令的链接
brew link node@10 将 node 命令指向 node@10


问题

443 Connection refused

错误:
curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused

原因:dns 污染

解决:
打开 https://www.ipaddress.com/ 输入访问不了的域名
查询之后可以获得正确的 IP 地址

在本机的 host 文件中添加,建议使用 switchhosts https://github.com/oldj/SwitchHosts 方便 host 管理

199.232.68.133 raw.githubusercontent.com
199.232.68.133 user-images.githubusercontent.com
199.232.68.133 avatars2.githubusercontent.com
199.232.68.133 avatars1.githubusercontent.com

添加以上几条 host 配置,页面的图片展示就正常了,homebrew 也能装了,nvm 也行动灵活了。

如何解决类似 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused 的问题 #10
https://github.com/hawtim/blog/issues/10


Error: No such file or directory @ rb_sysopen

brew install ffmpeg 时报错
Error: No such file or directory @ rb_sysopen - /Users/xx/Library/Caches/Homebrew/downloads/6e1642b8dd093ae8899e503ef155542155ecf5d6cb7bff0d65d68f6549766ff2–imath-3.1.4.arm64_monterey.bottle.tar.gz

原因:
国内镜像未完全同步
安装 ffmpeg 依赖的 imath 时依赖包下载失败

解决:
方法1、哪个依赖包报错,就用 brew install 单独安装哪个包
brew install imath

方法2、有时候挨个安装很麻烦,执行

export HOMEBREW_BOTTLE_DOMAIN=''

临时去掉国内镜像,一次即可成功。
永久修改则编辑 ~/.zprofile 可以看到里面有

export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/bottles #ckbrew

这是安装国内 Homebrew 脚本 https://gitee.com/cunkai/HomebrewCN 时写入的变量,改为空串即可。


uninitialized constant Homebrew::Service::System

报错

brew services list
Error: uninitialized constant Homebrew::Service::System
/opt/homebrew/Library/Homebrew/macos_version.rb:153:in `const_missing'
/opt/homebrew/Library/Taps/homebrew/homebrew-services/cmd/services.rb:61:in `services'
/opt/homebrew/Library/Homebrew/brew.rb:94:in `<main>'

解决:

rm -rf /opt/homebrew/Library/Taps/homebrew/homebrew-services
brew tap homebrew/services

Error: uninitialized constant Homebrew::Service::System

brew services list 报错:

Error: uninitialized constant Homebrew::Service::System
/opt/homebrew/Library/Homebrew/macos_version.rb:150:in `const_missing'
/opt/homebrew/Library/Taps/homebrew/homebrew-services/cmd/services.rb:61:in `services'
/opt/homebrew/Library/Homebrew/brew.rb:86:in `<main>'

解决:
rm -rf /opt/homebrew/Library/Taps/homebrew/homebrew-services
brew tap homebrew/services


上一篇 Apache-ab Web服务基准测试工具

下一篇 Protobuf

阅读
评论
3.2k
阅读预计15分钟
创建日期 2021-03-21
修改日期 2022-07-03
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论