Homebrew初始化

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

  • 使用更新的社区版本

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

备注

XCode command line tools 安装在 /Library/Developer/CommandLineTools , darwin-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阻塞