macOS使用Homebrew的经验分享

前言

原本想着macOS使用Homebrew对你们没啥难度,以前就分享了一篇介绍homebrew-bundle备份恢复的文章,不过长期使用后仍是以为有必要作一下总结,道理也很简单,越简单越频繁使用的产品就越值得挖掘一些背本身忽视的小技巧,由于若是能够作到天天节省5分钟那么量变可能会成为质变。html

更新历史

2019年09月11日 - 更新转载Homebrew 深度应用
2019年09月08日 - 初稿mysql

阅读原文 - https://wsgzao.github.io/post...linux

扩展阅读git

Homebrewgithub

macOS使用homebrew-bundle优雅的备份和恢复软件列表面试


Homebrew简介

Homebrew 是一款颇负盛名的包管理工具,是 macOS 上包管理的事实 (de facto) 标准 。Homebrew 的意思是家酿啤酒。算法

它的官方 slogan 是 The missing package manager for macOS (or Linux)。Linuxbrew 已经在 Homebrew 1.9 正式合入,成为 Homebrew 的 “一等公民”。sql

Homebrew 最先的建立者是 Max Howell,目前的主要维护者是 Mike McQuaid。同 Jekyll 等开源项目同样,Homebrew 的核心维护者也是 GitHub 的员工。GitHub 对于员工亲自参加开源项目方面,作得一直不错。chrome

顺带插播一条奇闻逸事:Homebrew 的创始人 Max Howell 活跃在开源社区,目前主要从事 Swift 相关的库开发。他在 2015 年初曾去 Google 面试,由于 “白板” 写算法题「翻转二叉树」失败,愤而发 tweet 讽刺:swift

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

为何须要Homebrew

对于使用 Unix/Linux 类系统的用户每每都遇到过这些需求:

  • 开源程序是源码分发,须要本身编译,但 ./configure 参数超多,还要解决各类库的依赖
  • 想把软件安装到用户目录,而不是系统目录(这样不须要 root 权限)
  • 本身编译安装了软件,想删除时殊不知道在哪里删除和删除哪些文件

各 Linux 发行版为了提高安装软件的体验,大多都提供了官方的包管理器,如 Ubuntu 的 aptitude (apt-get)。而苹果官方没有为 macOS 提供包管理器,市面上最好的解决方案就是 Homebrew。

目前 Homebrew 的中文内容大多以简单入门级教程为主,对于它的各种能力提之甚少,我但愿在这里更全面的分享 Homebrew。

Homebrew快速入门

网上基础的教程不少,我这里只简略的介绍下。对于基础功能类的深度用法,推荐这篇 macOS 包管理工具 Homebrew 不彻底指南

Homebrew安装

安装

开始安装前须要安装 macOS 命令行工具:

xcode-select —install

或者,在 https://developer.apple.com/d... 下载安装。

而后执行:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

基础功能

# 安装
brew install wget

# 完成安装后能够列出已安装内容
brew list

# 显示能够升级的包
brew outdated

cmake (3.13.4) < 3.14.0
yarn (1.13.0) < 1.15.2
youtube-dl (2019.03.09) < 2019.03.18

# 进行升级
brew upgrade cmake

# 删除
brew uninstall wget

# 安装桌面程序
brew cask install google-chrome

对于 Homebrew-cask 管理桌面程序,这里先不细说,后面会专门讲。

Homebrew 会把软件安装到 /usr/local/Cellar,而且经过软链连接到 /usr/local/bin。咱们能够经过 brew unlinkbrew link 删除或建立连接。

名词解释

Homebrew 把软件安装过程当中的各类名词都进行了拟物化命名,这些命名挺有意思,但对于大多数英语水平通常的人来讲,有很多词汇有些生僻。

英文 直译 实际含义
formula(e) 公式 安装包的描述文件,formulae 为复数
cellar 地窖 安装好后所在的目录
keg 小桶 具体某个包所在的目录,keg 是 cellar 的子目录
bottle 瓶子 预先编译好的包,不须要现场下载编译源码,速度会快不少;官方库中的包大多都是经过 bottle 方式安装
tap (插入) 水龙头 下载启用某个源
cask 木桶 安装 macOS native 应用的扩展
bundle 描述 Homebrew 依赖的扩展

Homebrew进阶用法

对于 Homebrew,咱们不少时候每每都是上来就 brew search 或是 brew install。缺什么安什么,没有充分的应用它的强大能力。

首先,Homebrew 虽为解决控制台程序而生,但它彻底有能力(Cask)安装任何桌面软件。它还支持丰富的分类目软件库或第三方库。

除此以外,它还有一个打包安装或备份工具,能够把已安装的软件输出成 Brewfile。迁移到新电脑时,只要根据 Brewfile 运行 Homebrew bundle,就能够一键安装所有控制台、桌面和来自 Mac App Store 的程序(Mac App Store 上的软件经过 mas 支持)。

Tap

Tap 在 Homebrew 中我理解是个动词,指的是启用某个源。实际看了下发现,homebrew-services 和 homebrew-bundle 也已 tap 形式存在,所以能够认为 tap 实际指的应该是扩展(extension)。

Homebrew 默认状况下会自带:

  • homebrew/core
  • homebrew/cask
  • homebrew/services
  • homebrew/bundle

后二者并无任何公式配方,而只是扩展程序。

除此以外的源,须要经过 brew tap 来启用。如:

brew tap heroku/brew
brew install heroku

Services

Homebrew-services 是 Homebrew 的后台服务程序扩展,它基于 macOS 的 launchctl。后台服务类程序的安装依旧使用 Homebrew,在管理时可使用 Homebrew-services 进行启动、重启和中止等操做。

brew install mysql
brew services start mysql

Cask

Homebrew-cask 是 Homebrew 的 macOS Native 应用扩展,经过 cask 能够安装各种应用程序。

搜索 Cask 的方法和搜索普通包同样,但安装时须要加上 cask 指令:

brew search google-chrome
brew cask install google-chrome
cask-versions

Homebrew Cask 和 Homebrew 同样,默认库只维护最新版本,但有的时候咱们仍是须要用旧版的(好比:我只有 Dash 3 的 License,因此须要用 Dash 3 而不是最新的 Dash 4),那就可能须要使用 cask-versions。

brew tap homebrew/cask-versions
brew cask install dash3
cask-fonts

Homebrew 官方的字体源,好比 Mozilla 的开源字体 Fira Code:

brew tap homebrew/cask-fonts
brew cask install font-fira-code

Bundle

Homebrew 不只仅是一个包管理器,还具备软件依赖管理能力。经过 Homebrew Bundle 能够帮你解决全部软件依赖,包括官方和第三方的 formula 以及 cask,甚至还包括 Mac App Store(简称 mas)中的应用。

Homebrew 默认就安装了 Homebrew Bundle。

咱们只须要一个 Brewfile,就能够配置好全部须要的应用。熟悉 Ruby 的人应该不太须要解释,毕竟 Ruby 本身就有 Bundler 这套东西,Brewfile 和 Gemfile 属于对应关系。

若是你的安装列表已经足够 “干净”,那么能够执行 brew bundle dump 来生成现有依赖,输出到 Brewfile

brew bundle dump
cat Brewfile

brew "git"
brew "wget"
brew "mas"
brew "p7zip"
...

若是想本身写也比较容易,Brewfile 是一种简单的 Ruby DSL,写起来比大部分配置文件都简单。只须要掌握一些经常使用到的命令,主要有 brew, tap, caskmas

这四条命令分别对应:

  • brew install
  • brew tap
  • brew cask install
  • mas install
注:Homebrew 虽然好用,但 Homebrew 并不能管理 MAS「Mac App Store」上的应用软件, 在终端上轻松管理「Mac App Store」中应用的神器 mas-cli

命令行类应用:

brew "git"
brew "wget"
brew "vim"

非命令行类:

cask "google-chrome"
cask "alfred"
cask "visual-studio-code"

非官方 Formula 应用:

tap  "homebrew/cask-versions"
brew "dash3"
tap  "homebrew/cask-fonts"
cask "font-source-code-pro"

Mac App Store 上的应用:

mas "WeChat", id: 836500024

所以,维护好 Brewfile 就能够完美解决应用自动化安装,只须要运行:

brew bundle

Homebrew扩展用法

提交Formula

建立并提交一个 Formula 比较容易,官方教程很是详细。这里,我就不作单独介绍了。

自建Tap

Homebrew 除了各类官方维护的源外,还支持自建软件库。默认使用 GitHub,须要以 “homebrew-xxx” 格式命名 Repo。Formula 或 Cask 文件须要存放在 Formula 或 Casks 二级目录中。

好比,Heroku 的自建库在 GitHub 上是 heroku/homebrew-brew。经过 brew tap heroku/brew 就能够获取库里维护的包了。

私有Tap

上面说到,Tap 默认维护在 GitHub,那么当咱们想安装一些须要保密的软件时该怎么办呢?

答案是 Tap 支持指定 Git,所以也可使用内网域名内的 Git:

brew tap yourcompany/brew git@git.yourcompany.com: yourcompany/homebrew-brew.git
brew install inhouse-app

Homebrew Tips

禁用自动升级

Homebrew 自动升级触发几率很高,因为网络等问题,检查更新会好久有时会比较烦。能够经过环境变量禁用自动升级:

HOMEBREW_NO_AUTO_UPDATE=1 brew info mysql

直接安装 Formula

Homebrew 的安装指令并不是只支持名字,也能够用文件安装包括网络文件和本地文件。

# 本地
brew install blabla.rb
# 远程
brew install https://blablablabla.com/blabla.rb

安装旧版软件

Homebrew 默认状况下只支持最新版软件安装,有些重要的版本会单独存在。但想安装一些小版本就得本身 DIY 了。

我所知有两种方法:

  1. 在 GitHub 找到 Formula 所在 Repo 中(默认为 homebrew-core)的文件,把文件远程地址复制下来,用 brew install 安装。
  2. 进入 homebrew-core 在 macOS 本地的路径,默认为 /usr/local/Homebrew/Library/Taps/homebrew/homebrew-coregit checkout 到所在 commit,再用 brew pin 锁定这个文件的更新,而后进行安装。

Homebrew常见问题

我遇到的问题大多数是升级macOS Mojave以后产生的,升级前要三思然后行,先备份,先备份,先备份

Homebrew Permissions Denied Issues Solution

sudo chown -R $(whoami) $(brew --prefix)/*

Reference - https://gist.github.com/iraza...

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun.

Reference - https://apple.stackexchange.c...

# The problem is that you are using XCode and you explicit have to agree to the license agreement. So open Terminal, and run the following:

xcode-select --install

# This will download and install xcode developer tools and fix the problem. As a follow on step, you may need to reset the path to Xcode if you have several versions or want the command line tools to run without Xcode.

xcode-select --switch /Applications/Xcode.app
xcode-select --switch /Library/Developer/CommandLineTools

Homebrew国内加速镜像

Homebrew 清华大学镜像使用帮助

加速一切 - 配置国内镜像 - Linux apt/macOS brew/Docker/Python Conda/Maven

参考文章

Max Howell on Twitter: “Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.”

https://github.com/Linuxbrew/brew/issues/612

Formula Cookbook — Homebrew Documentation

Glossary of Homebrew Terms

Formula Cookbook — Homebrew Documentation

在终端上轻松管理「Mac App Store」中应用的神器 mas-cli

Homebrew 深度应用

相关文章
相关标签/搜索