# CIR Scripts

## `cir-rsync-wrapper`

一个用于 CIR 黑盒 replay 的 rsync wrapper。

### 环境变量

- `REAL_RSYNC_BIN`
  - 真实 rsync 二进制路径
  - 默认优先 `/usr/bin/rsync`
- `CIR_MIRROR_ROOT`
  - 本地镜像树根目录
  - 当命令行中出现 `rsync://...` source 时必需

### 语义

- 仅改写 `rsync://host/path` 类型参数
- 其它参数原样透传给真实 rsync
- 改写目标：
  - `rsync://example.net/repo/a.roa`
  - →
  - `<CIR_MIRROR_ROOT>/example.net/repo/a.roa`

### 兼容目标

- Routinator `--rsync-command`
- `rpki-client -e rsync_prog`

## 其它脚本

- `run_cir_replay_ours.sh`
- `run_cir_replay_routinator.sh`
- `run_cir_replay_rpki_client.sh`
- `run_cir_replay_matrix.sh`

## `cir-local-link-sync.py`

当 `CIR_LOCAL_LINK_MODE=1` 且 wrapper 检测到 source 已经被改写为本地 mirror 路径时，
wrapper 不再调用真实 `rsync`，而是调用这个 helper 完成：

- `hardlink` 优先的本地树同步
- 失败时回退到 copy
- 支持 `--delete`

`run_cir_replay_matrix.sh` 会顺序执行：

- `ours`
- Routinator
- `rpki-client`

并汇总生成：

- `summary.json`
- `summary.md`
- `detail.md`
