Add recovery drill checklist

This commit is contained in:
2026-03-08 20:09:34 +08:00
parent fdc0b35c13
commit e0df62e027
+265
View File
@@ -0,0 +1,265 @@
# Recovery Drill Checklist
这份文档用于定期做“恢复演练”,验证 `dotfiles`、Homebrew 基线、私有资产归档
和本机 secrets 流程是否真的足够恢复一台新机器。
建议频率:
- 每次大规模改 shell / Clash / secrets 结构后做一次
- 至少每季度做一次
## 演练范围
本演练覆盖:
- `dotfiles` 仓库可访问
- `Brewfile` / `Brewfile.lock.json` 可用于恢复软件基线
- `~/.zshrc` 与 `~/.zshrc.d` 可由仓库重建
- `~/.config/secrets` 可由骨架恢复,再由私有归档补真实值
- SSH / GPG / kube / Docker / Clash 私有配置可从私有归档恢复
本演练不自动覆盖:
- macOS Keychain
- 浏览器登录态
- OrbStack volume / VM 数据
- 大体积本地模型和下载目录
## 演练前提
准备好以下资产:
1. `dotfiles` 仓库地址可访问
2. 一份最近生成的私有归档,例如:
```text
~/Backups/dotfiles-private/private-assets-YYYYMMDD-HHMMSS.tgz
~/Backups/dotfiles-private/private-assets-YYYYMMDD-HHMMSS.tgz.sha256
```
3. 一台可接受的演练环境:
- 新 macOS 机器
- 新建测试用户
- 或最少在隔离目录里做非破坏性演练
## Phase 1: 归档验证
1. 验证私有归档校验和:
```bash
shasum -a 256 -c ~/Backups/dotfiles-private/private-assets-YYYYMMDD-HHMMSS.tgz.sha256
```
通过标准:
- 输出 `OK`
2. 查看归档顶层结构:
```bash
tar -tzf ~/Backups/dotfiles-private/private-assets-YYYYMMDD-HHMMSS.tgz \
| awk -F/ 'NF{root=($1=="."?$2:$1); if(root!="") print root}' \
| sort -u
```
通过标准:
- 至少看到 `Users` 和 `metadata`
3. 查看归档里的手工项说明:
```bash
tar -xOf ~/Backups/dotfiles-private/private-assets-YYYYMMDD-HHMMSS.tgz metadata/manual-steps.txt
```
通过标准:
- 能看到 Keychain、浏览器、OrbStack 等手工项提醒
## Phase 2: 仓库恢复验证
1. 克隆仓库:
```bash
mkdir -p ~/work/codes/tools/macos
git clone http://192.168.1.83:33000/gao/dotfiles.git ~/work/codes/tools/macos/dotfiles
cd ~/work/codes/tools/macos/dotfiles
```
2. 检查仓库结构:
```bash
test -f Brewfile
test -f RECOVERY.md
test -f RECOVERY-DRILL.md
test -f config/homebrew/Brewfile.lock.json
test -f config/clash/clashx.public.yaml
test -f config/recovery/private-assets.tsv
```
通过标准:
- 上述文件都存在
## Phase 3: 软件基线恢复验证
1. 安装基础开发工具:
```bash
xcode-select --install
# 安装 Homebrew
```
2. 恢复 Homebrew 基线:
```bash
brew bundle --file Brewfile
```
3. 抽样对照版本快照:
```bash
jq '.formulae[] | select(.name=="git" or .name=="jq" or .name=="zsh")' config/homebrew/Brewfile.lock.json
```
通过标准:
- 关键工具已安装
- 与 `Brewfile.lock.json` 相比,差异是可接受的
## Phase 4: Shell 接入验证
1. 接入 shell 配置:
```bash
./install/doctor.sh || true
./install/link.sh
source ~/.zshrc
```
2. 验证核心入口:
```bash
command -v codex
command -v codex-direct
bash ./install/doctor.sh
bash ./scripts/shell/lint-zsh.sh
```
通过标准:
- `codex` 指向 `~/bin/codex`
- `install/doctor.sh` 全部通过或仅有预期 warn
- `lint-zsh.sh` 全部 `ok`
## Phase 5: 私有资产恢复验证
1. 先跑清单检查:
```bash
./scripts/backup/check-private-assets.sh
```
2. 从私有归档恢复到测试环境:
```bash
mkdir -p /tmp/dotfiles-restore-test
tar -xzf ~/Backups/dotfiles-private/private-assets-YYYYMMDD-HHMMSS.tgz -C /tmp/dotfiles-restore-test
find /tmp/dotfiles-restore-test -maxdepth 3 | sed -n '1,80p'
```
3. 抽样确认这些路径存在:
- `Users/.../.ssh`
- `Users/.../.gnupg`
- `Users/.../.config/secrets`
- `Users/.../.kube/config`
- `Users/.../.docker/config.json`
- `Users/.../.config/clash/clashx.yaml`
通过标准:
- 私有归档包含关键文件
- `metadata/private-assets.tsv` 与实际内容一致
## Phase 6: Secrets 与代理验证
1. 初始化 secrets 骨架:
```bash
./scripts/secrets/bootstrap.sh
```
2. 恢复真实 secrets 文件后,验证 shell 变量:
```bash
source ~/.zshrc
printf '%s\n' "$ANTHROPIC_BASE_URL"
```
3. 验证 `codex` 代理路径:
```bash
codex-proxy-status
```
通过标准:
- secrets 文件被正确加载
- `codex` 使用 Clash 的 `7890` 本地代理
## Phase 7: Clash 恢复验证
1. 用仓库里的公开模板和私有节点信息重建 live config
2. 保证 ClashX 的基础端口来自 `config/clash/config.public.yaml`
3. 重载后检查:
```bash
./scripts/clash/check-openai-route.sh
```
通过标准:
- `chatgpt.com` / `openai.com` 相关请求走同一稳定代理组
- `external-controller` 可访问
## Phase 8: 手工项确认
必须人工确认:
1. Keychain 中关键 token 和证书是否恢复
2. 浏览器登录态是否需要恢复
3. OrbStack volume / VM 数据是否需要恢复
4. 本地模型、下载目录、工作缓存是否需要恢复
## Phase 9: 验收
演练完成后,至少确认:
```bash
command -v codex
command -v kubectl
command -v java
command -v pnpm
./scripts/backup/check-private-assets.sh
./scripts/clash/check-openai-route.sh
```
通过标准:
- `dotfiles` 可以独立恢复 shell 和 wrapper
- 私有归档确实能补齐非版本化关键资产
- 手工项清单足够指导最后一段恢复
## 演练记录建议
每次演练后记录:
1. 演练日期
2. 使用的归档文件名
3. 失败点
4. 缺失资产
5. 需要新增到 `dotfiles` 的恢复步骤
建议把记录追加到你自己的运维日志,而不是直接覆盖本文件。