Homebrew初始化

我在初步完成 Homebrew 安装之后,执行一些必要软件包安装,以便能够取代macOS操作系统默认工具:

  • 使用更新的社区版本

  • darwin-jail 提供纯净的一次性打包 /usr/local 目录 不依赖 XCode command line tools

备注

XCode command line tools 安装在 /Library/Developer/CommandLineToolsdarwin-jail 构建时可i打包这个目录

初步设置和安装

~/.zprofile 添加配置
eval "$(/usr/local/bin/brew shellenv)"
安装必要brew工具
# 实际上只需要安装缺少的tmux和tree
# 其他软件可选安装,只是为了获得比macOS系统默认集成版本更新的官方版本
brew install tmux tree
brew install curl rsync git-svn python3 ruby

# 安装我的devops工具, neovim替换了vim
brew install neovim pssh webp gawk gsed
# 如有需要则安装openconnect nginx

# 可选安装
brew install --cask keepassxc

# 我现在不再使用docker,改为colima
# iterm2太消耗资源,改为alacritty
brew install colima
brew install --cask alacritty

#brew install --cask docker
#brew install --cask iterm2
#brew install golang

注意 macOS环境安装Ruby 是需要在环境中设置ruby路径的:

配置 ~/.zshrc 添加Ruby配置路径
# 对于Intel架构macOS
if [ -d "/usr/local/opt/ruby/bin" ]; then
  export PATH=/usr/local/opt/ruby/bin:$PATH
  export PATH=`gem environment gemdir`/bin:$PATH
fi

# 对于Apple Silicon架构macOS
if [ -d "/opt/homebrew/opt/ruby/bin" ]; then
  export PATH=/opt/homebrew/opt/ruby/bin:$PATH
  export PATH=`gem environment gemdir`/bin:$PATH
fi

同样, curl 也需要添加配置路径,类似上面的 macOS环境安装Ruby

配置 curl 环境变量以便能够优先使用
# 对于Intel架构macOS
if [ -d "/usr/local/opt/curl/bin" ]; then
  export PATH=/usr/local/opt/curl/bin:$PATH
fi

# 对于Apple Silicon架构macOS
if [ -d "/opt/homebrew/opt/curl/bin" ]; then
  export PATH=/opt/homebrew/opt/curl/bin:$PATH
fi

不过,对于我目前只有Intel架构的 MacBook Pro 2018 ,上述环境配置 ~/.zprofile 只需要简化成:

简化的env配置 ~/.zprofile
eval "$(/usr/local/bin/brew shellenv)"

BREW_PATH=/usr/local/opt
export PATH=$BREW_PATH/curl/bin:$BREW_PATH/ruby/bin:$PATH

备注

不过我还是需要完成 "进一步安装和设置" 后再打包,因为我需要一个方便的开发环境

完成上述安装基础工具之后 brew 命令就是自包含依赖工具,可以直接将 /usr/local 目录打包放到 darwin-jail 中使用了:

打包homebrew目录
sudo tar cfz brew.tar.gz /usr/local

# 打包以后的 brew.tar.gz 放到 darwin-jails 的chroot根目录下解压缩就可以使用

进一步安装和设置(现在跳过)

安装语言支持

备注

当安装了 XCode command line tools之后,系统就已经安装了 C (gcc是clang的别名),所以不需要再在brew中安装clang(llvm) - 参考 如何在 mac 电脑上轻量化地写C

甚至还包含了 swift 语言

安装node
brew install node

警告

这里在jail容器中安装node会卡住,导致有部分依赖包没有安装完整。所以建议在host主机上安装好再打包进jail(我怀疑是创建 darwin-jails 时没有安装XCode command line tools,此时缺乏一些系统级的依赖库没有复制,等后续重新实践再看看能否修复)

安装部署 neovim

安装 neovim
brew install neovim
配置 neovim
mkdir ~/src
cd ~/src

git clone https://github.com/huataihuang/cloud-studio.git
cd ~/src/cloud-studio/config

sh install.sh
  • 启动 nvim 时会自动安装插件

nvim插件安装错误排查

  • python-lsp-server 安装失败

python-lsp-server 安装报错
Failed (1)
  ✗ python-lsp-server
    ▼ Displaying full log
      WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', NewConnectionError('<pip._ven
      ERROR: Could not find a version that satisfies the requirement python-lsp-server==1.12.0 (from versions: none)
      ERROR: No matching distribution found for python-lsp-server==1.12.0
      spawn: /Users/huatai/.local/share/nvim/mason/packages/python-lsp-server/venv/bin/python failed with exit code 1 and signal 0.

Installed (2) 
  ✓ clangd
  ✓ lua-language-server lua_ls

重新在常规环境中安装正常,上述问题没有再现

  • ruby-lsp安装失败:

ruby-lsp 安装报错
Failed (1)
  ✗ ruby-lsp
    ▼ Displaying full log
      ERROR:  Error installing ruby-lsp:
          sorbet-runtime requires Ruby version >= 2.7.0. The current ruby version is 2.6.10.21
      spawn: gem failed with exit code 1 and signal 0.

这个报错是因为macOS系统自带的ruby版本过低导致的,需要通过 ruby install ruby 安装社区最新版本,然后配置好环境 PATH 变量使得默认使用 Homebrew 提供的最新版本ruby就能解决

进一步安装和设置

我现在更换了一个思路,采用物理主机精简安装,而将整个开发和部署环境迁移到 Colima 中,构建一个标准化可移植的类似 Docker 运行环境。由于 Linux 环境更接近服务器后端,可以构建 Kubernetes 等模拟环境,所以也会把日常开发直接运行在相同的环境中。

macOS 平台安装colima
brew install colima

这里如果是在旧版本macOS上安装,其实会遇到不少问题,例如 Homebrew 安装 openssl 需要绕过openssl安装过程中不能通过test的问题。另外, brew install qemu 也遇到一个 cmake 版本过低问题。 但是,我检查 homebrew 实际上已经安装了 /usr/loca/bin/cmake 版本是 4.0.1

这个问题似乎有点类似 VDT Configuration Errors (Mac OS 15.4) ,似乎有多个项目兼容cmake 4.0有问题。果然,在snappy的github项目上,已经有人提出了issue: Require Update to CMakeLists.txt for source build due to new CMake 4.0(+) requirements #204 ,这个修复是在 snappy 1.2.2 ,但是目前 homebrew-core/snappy 1.2.2 #216761 还阻塞没有合并,所以当前安装的是 snappy 1.2.1 存在这个报错

可以参考 Homebrew Formulae: snappy 当前确实是 1.2.1 版本( snappy 官方 1.2.2 是3月26日发布,我当前在5月2日安装可以看到homebrew还停留在1.2.1)

警告

colima安装需要使用 配置Go程序代理服务器 配置来绕过GFW阻塞