macOS 必备 DevOps 工具
Source: Dev.to
请提供您希望翻译的正文内容,我将为您翻译成简体中文并保留原有的格式、Markdown 语法以及技术术语。
介绍
macOS 的根源可以追溯到 NeXTSTEP,并基于 Mach 派生的 XNU 内核构建。Darwin 用户空间提供了基于 BSD 的 Unix 环境,配备熟悉的 POSIX 工具,以及 macOS 特有的扩展,如 launchd。正是这种 Unix 传统,使得许多面向 Linux 的云和容器工具在 macOS 上也能可靠运行,差异仅限于最小的细节。
为什么需要额外的步骤?
macOS 附带 BSD 风格的实用程序(grep、sed、awk,……)。为 Linux 编写的脚本可能表现不同,甚至完全失败。下面的步骤会安装 GNU 等价工具以及一套通用的命令行工具,从而使脚本在 Linux、macOS 和 Windows MSYS2 环境中表现一致。
工具概览
| 工具 | 命令 | 描述 |
|---|---|---|
| Terraform | terraform | 通过 HashiCorp 提供云基础设施。 |
| AWS CLI | aws | 与亚马逊 Web 服务交互。 |
| okta‑aws‑cli | okta-aws-cli | 通过 Okta 获取临时 IAM 凭证。 |
| Kubernetes CLI | kubectl | 与 Kubernetes 控制平面交互。 |
| Helm | helm | Kubernetes 应用的包管理器。 |
| Kustomize | kustomize | 基于补丁的 Kubernetes 资源配置。 |
| Helmfile | helmfile | 用于部署 Helm Chart 的声明式规范(支持模板化和补丁)。 |
| Krew | kubectl krew | kubectl 的插件管理器。 |
| Corretto (OpenJDK) | java, javac, jar, keytool | 亚马逊的 OpenJDK 发行版。 |
| Vault | vault | 用于机密(令牌、密码、证书、密钥)的安全存储和访问控制。 |
| Other utilities | bc, curl, git, jq, zsh, … | 常用的 GNU 工具和 Shell。 |
前置条件
安装 Xcode 命令行工具
xcode-select --install
安装 Homebrew
URL="https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh"
/bin/bash -c "$(curl -fsSL $URL)"
安装核心 GNU 实用程序
这些命令会为您提供常用工具(如 grep、sed、tar)的 GNU 版本,其行为与 Linux 上的对应工具相同。
brew install \
autoconf \
bash \
bc \
binutils \
coreutils \
curl \
diffutils \
ed \
findutils \
flex \
gawk \
git \
gnu-indent \
gnu-sed \
gnu-tar \
gnu-which \
gpatch \
grep \
gzip \
jq \
less \
m4 \
make \
nano \
screen \
watch \
wdiff \
wget \
zip \
zsh
让 GNU Shell 可供系统使用
echo "$(brew --prefix)/bin/bash" | sudo tee -a /etc/shells
echo "$(brew --prefix)/bin/zsh" | sudo tee -a /etc/shells
选择默认 Shell
# 使用 GNU Bash
chsh -s "$(brew --prefix)/bin/bash"
# 或使用 GNU Zsh
chsh -s "$(brew --prefix)/bin/zsh"
提示: 编写脚本时,使用
envshebang,这样脚本会从您的PATH中获取 GNU 版本,而不是系统自带的(BSD)版本。
# Bash shebang
#!/usr/bin/env bash
# Zsh shebang
#!/usr/bin/env zsh
添加 GNU/Keg‑only 二进制到 PATH
Homebrew 安装的 GNU 实用程序位于 keg‑only 位置(例如 …/opt/coreutils/libexec/gnubin)。将它们加入到你的 shell 启动文件(~/.bash_profile、~/.zshrc 等)中。
# -------------------------------------------------
# Add this function to your startup script
# -------------------------------------------------
update_homebrew_path() {
local BREW_PREFIX GNU_PATHS KEG_PATHS COMBINED_PATHS DEDUPE_SCRIPT
# Bail out if Homebrew isn’t available
command -v brew >/dev/null 2>&1 || return
BREW_PREFIX="$(brew --prefix)"
# All GNU “gnubin” directories (coreutils, findutils, gawk, …)
GNU_PATHS=$(printf "%s:" "${BREW_PREFIX}/opt/"*"/libexec/gnubin")
# Directories of keg‑only binaries (e.g., `krew`, `helmfile`)
KEG_PATHS=$(
brew info --installed --json=v1 \
| jq -r 'map(select(.keg_only == true)) | .[].name' \
| while read -r PKG; do
[[ -d "${BREW_PREFIX}/opt/${PKG}/bin" ]] && printf "%s:" "${BREW_PREFIX}/opt/${PKG}/bin"
done
)
COMBINED_PATHS="${GNU_PATHS}${KEG_PATHS}"
DEDUPE_SCRIPT='print join ":", grep { ! $seen{$_}++ } split /:/, shift'
perl -e "${DEDUPE_SCRIPT}" "${COMBINED_PATHS}" | sed 's/^://; s/:$//'
}
# Export the new PATH
NEW_PATHS="$(update_homebrew_path)"
export PATH="${NEW_PATHS}:${PATH}"
添加函数后,重新加载你的 shell 或运行 source ~/.zshrc(或相应的文件)。
安装云供应与 Kubernetes 工具链
# AWS CLI & Okta helper
brew install awscli
brew install okta-aws-cli
# HashiCorp tools
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
brew install hashicorp/tap/vault
# Kubernetes CLI
brew install kubernetes-cli # provides `kubectl`
# Helm (package manager)
brew install helm
# Java (Amazon Corretto 17)
brew tap homebrew/cask-versions
brew install --cask corretto17
# Helmfile & Kustomize
brew install helmfile
brew install kustomize
# Optional: kubectl plugin manager
brew install krew
# Miscellaneous utilities
brew install jq
验证安装
terraform --version
vault --version
kubectl version --client
helm version
kustomize version
helmfile version
java --version
aws --version
okta-aws-cli --version
jq --version
如果每个命令都打印出版本信息且没有错误,工具链即可使用。
Final Thoughts
- macOS 的 BSD 基础实用程序可能导致细微的脚本故障;安装 GNU 等价工具可以消除大多数不兼容问题。
- 将 GNU 工具放在
PATH的前面,可确保脚本使用正确的二进制文件。 - 相同的 Homebrew 命令在 Linux(通过 Linuxbrew)和 Windows MSYS2 上也可使用,为您提供真正的跨平台开发环境。
祝配置愉快! 🚀
版本
aws --version
okta-aws-cli --version
Helm 插件
Helm 可以通过插件进行扩展。以下是一些流行的插件。我特别推荐 helm‑diff,它会在您安装或升级应用程序之前显示将要更改的资源。
helm plugin install https://github.com/databus23/helm-diff
helm plugin install https://github.com/aslafy-z/helm-git
helm plugin install https://github.com/hypnoglow/helm-s3.git
helm plugin install https://github.com/jkroepke/helm-secrets
Kubernetes Krew(插件管理器)
Krew 为 kubectl 添加了插件系统。使用下面的脚本进行安装。
#!/usr/bin/env bash
main() {
install_krew
# Add this to your startup scripts
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
}
install_krew() {
TEMP_DIR=$(mktemp -d)
pushd "$TEMP_DIR"
OS="$(uname | tr '[:upper:]' '[:lower:]')"
ARCH="$(
uname -m \
| sed -e 's/x86_64/amd64/' \
-e 's/\(arm\)\(64\)\?.*/\1\2/' \
-e 's/aarch64$/arm64/'
)"
KREW="krew-${OS}_${ARCH}"
PKG="/${KREW}.tar.gz"
URL_PATH="kubernetes-sigs/krew/releases/latest/download/$PKG"
URL="https://github.com/$URL_PATH"
curl -fsSLO "$URL"
tar zxvf "${KREW}.tar.gz"
./"${KREW}" install krew
popd
rm -rf "$TEMP_DIR"
}
main
安装完成后,确保 Krew 可执行文件目录已加入 PATH(如脚本所示)。
Homebrew Brewfile
Homebrew 可以通过一个名为 Brewfile 的单一清单文件来一次性安装一系列软件包。创建一个名为 Brewfile 的文件,并写入以下内容:
# Common Core Commands
brew 'autoconf'
brew 'bash'
brew 'bc'
brew 'binutils'
brew 'coreutils'
brew 'curl'
brew 'diffutils'
brew 'ed'
brew 'findutils'
brew 'flex'
brew 'gawk'
brew 'git'
brew 'gnu-indent'
brew 'gnu-sed'
brew 'gnu-tar'
brew 'gnu-which'
brew 'gpatch'
brew 'grep'
brew 'gzip'
brew 'jq'
brew 'less'
brew 'm4'
brew 'make'
brew 'nano'
brew 'screen'
brew 'watch'
brew 'wdiff'
brew 'wget'
brew 'zip'
brew 'zsh'
# AWS Tools
brew 'awscli'
brew 'okta-aws-cli'
# HashiCorp
tap 'hashicorp/tap'
brew 'hashicorp/tap/terraform'
brew 'hashicorp/tap/vault'
# Kubernetes
brew 'kubernetes-cli'
brew 'helm'
brew 'kustomize'
brew 'helmfile'
# Java
tap 'homebrew/cask-versions'
cask 'corretto17'
# Other
brew 'jq'
安装 Brewfile
brew bundle --verbose
安装后步骤
- 更新你的
PATH– 将 GNU 实用程序和任何 keg‑only 命令的目录添加进去,使其优先于 macOS 默认路径。 - 注册新 shell – 将新安装的
zsh和bash二进制文件的路径追加到/etc/shells,以便它们可以被选为登录 shell。
现在,你已经拥有了一个功能完整的开发环境,包含 Helm 插件、Kubernetes Krew,以及可复现的 Homebrew 包集合。