# Roadmap: 达梦数据库安装器 (dm-database-installer)

## Overview

从一行 `curl | sh` 可运行的单机安装器出发，逐步扩展到 TOML 配置驱动的精细控制、SSH 主备集群部署，最终通过 `cargo-dist` 实现多平台二进制的正式发布流水线，让开发者和 DBA 都能零摩擦使用。

## Phases

**Phase Numbering:**

- Integer phases (1, 2, 3): Planned milestone work
- Decimal phases (2.1, 2.2): Urgent insertions (marked with INSERTED)

Decimal phases appear between their surrounding integers in numeric order.

- [ ] **Phase 1: curl|sh 单机安装** - 用户可用一行命令安装达梦，完整链路跑通（下载、校验、安装、注册服务）
- [x] **Phase 2: TOML 配置驱动单机** - DBA 可通过配置文件精细控制单机安装的所有参数 (completed 2026-06-12)
- [x] **Phase 3: 主备集群** - 用户可通过配置文件部署双节点主备集群，安装器自动 SSH 远程操作 (completed 2026-06-12)
- [ ] **Phase 4: 发布流水线** - 多平台二进制正式分发，`curl | sh` 对真实用户可用

## Phase Details

### Phase 1: curl|sh 单机安装

**Goal**: 用户可运行一行 `curl | sh` 命令完整安装达梦单机实例并注册为系统服务
**Implementation**: 纯 shell 脚本 (`install.sh`)，无需 Rust 二进制
**Mode:** mvp
**Depends on**: Nothing (first phase)
**Requirements**: INST-01, INST-03, INST-04, DOWN-01, DOWN-02, QUAL-02
**Success Criteria** (what must be TRUE):

  1. 用户在 Linux x86_64 机器上运行一行命令后，达梦实例已启动并可接受连接
  2. 安装器在执行 dminit 前，显示 PAGE_SIZE/CHARSET/CASE_SENSITIVE/EXTENT_SIZE 的值并等待用户确认
  3. 安装完成后 `systemctl status dmserver` 显示服务已注册且开机自启
  4. 重复运行安装器时，检测到已有实例并提示而非覆盖崩溃（幂等性）

**Plans**: TBD

### Phase 2: TOML 配置驱动单机

**Goal**: DBA 可通过 TOML 配置文件自定义端口、数据路径、dminit 参数，完成单机安装
**Implementation**: Rust 二进制 (`dm-installer`)，clap CLI + serde TOML 解析
**Mode:** mvp
**Depends on**: Phase 1
**Requirements**: INST-02, QUAL-03
**Success Criteria** (what must be TRUE):

  1. DBA 编写包含自定义端口、数据路径、页大小等参数的 TOML 文件后，安装器按配置完成安装
  2. TOML 文件中指定的所有 dminit 参数（PAGE_SIZE/CHARSET/CASE_SENSITIVE/EXTENT_SIZE/端口/路径）均生效
  3. 配置文件格式错误时，安装器给出清晰的错误信息指向具体字段，不执行安装
  4. 用户可运行 `dm-installer validate --config config.toml` 仅验证配置合法性而不执行安装

**Plans:** 1/1 plans complete
Plans:

- [x] 02-01-PLAN.md — InstallArgs --config flag + config::load_and_validate/validate_install_config + install::run 条件分支 + validate.rs 重构 + semantic_invalid fixture（垂直切片）

### Phase 3: 主备集群

**Goal**: 用户可通过一份 TOML 配置文件，在一台控制机上完成双节点主备集群的完整部署
**Mode:** mvp
**Depends on**: Phase 2
**Requirements**: CLUS-01, CLUS-02, QUAL-01
**Success Criteria** (what must be TRUE):

  1. 用户在控制机执行一条命令后，两个远程节点均完成达梦安装并建立主备复制关系
  2. 安装器自动生成并分发 dm.ini/dmmal.ini/dmarch.ini/dmwatcher.ini 到各节点
  3. 主节点启动并确认健康后才启动备节点（可从日志中观察到有序启动顺序）
  4. 集群部署开始前，安装器完成 SSH 预检查（sudo 免密、端口可用性、磁盘空间），任一检查失败则中止并报告

**Plans:** 3/3 plans complete
Plans:
**Wave 1**

- [x] 03-01-PLAN.md — ClusterConfig schema + 四个 INI 模板生成（控制机端，纯数据切片，wave 1）

**Wave 2** *(blocked on Wave 1 completion)*

- [x] 03-02-PLAN.md — russh/russh-sftp 引入 + SSH 会话/CommandRunner trait + SSH 预检查（QUAL-01）+ TCP 健康轮询（CLUS-02），wave 2

**Wave 3** *(blocked on Wave 2 completion)*

- [x] 03-03-PLAN.md — CLI cluster deploy 子命令 + cluster::run 编排（preflight → SFTP+install → 分发 INI → 有序启动 → dmwatcher），wave 3

### Phase 4: 发布流水线

**Goal**: As a 项目用户（开发者/DBA），I want to 通过一行 curl|sh 命令在 Linux x86_64/aarch64 或 Windows 上下载 dm-installer 工具并使用 install/cluster/install-windows 子命令，so that 我可以零摩擦获取最新发布并按配置部署达梦数据库
**Mode:** mvp
**Depends on**: Phase 3
**Requirements**: PLAT-01, PLAT-02, PLAT-03, PLAT-04
**Success Criteria** (what must be TRUE):

  1. Linux x86_64 用户可从公开 URL 运行 `curl | sh` 下载并执行安装器
  2. Linux aarch64 (ARM) 用户可从公开 URL 运行 `curl | sh` 下载并执行安装器
  3. Windows 用户可下载安装器并通过 SSH 在 Linux 目标节点上安装达梦
  4. Windows 目标机上可安装达梦实例（PLAT-04 placeholder：CLI 入口存在，实际 setup.exe 集成留 spike）
  5. GitHub Actions 在打 tag 时自动构建并发布所有平台的二进制到 GitHub Releases

**Plans:** 2/3 plans executed
Plans:
**Wave 1**

- [x] 04-01-PLAN.md — Phase 3 五个 Critical bug 修复（CR-01..CR-05：SFTP CREATE 标志 / .bin 上传执行 / tilde 展开 / shell_quote 防注入 / TOFU 指纹日志）+ Cargo.toml description/license/repository 元数据（cargo-dist init 前置条件）

**Wave 2** *(blocked on Wave 1 completion)*

- [x] 04-02-PLAN.md — cargo-dist init 配置（targets 三平台 + aarch64 apt 依赖 + profile.dist）+ .cargo/config.toml aarch64 linker + .github/workflows/release.yml（含 NASM 步骤）+ PLAT-04 install-windows placeholder CLI

**Wave 3** *(blocked on Wave 2 completion)*

- [ ] 04-03-PLAN.md — README.md 安装段落 + 三平台支持矩阵 + 两个 install.sh 区分 + PLAT-04 限制说明 + CHANGELOG.md v0.1.0 + 人工 checkpoint 8 步验证

## Progress

**Execution Order:**
Phases execute in numeric order: 1 → 2 → 3 → 4

| Phase | Plans Complete | Status | Completed |
|-------|----------------|--------|-----------|
| 1. curl\|sh 单机安装 | 0/TBD | Not started | - |
| 2. TOML 配置驱动单机 | 1/1 | Complete   | 2026-06-12 |
| 3. 主备集群 | 3/3 | Complete   | 2026-06-12 |
| 4. 发布流水线 | 2/3 | In Progress|  |
</content>
