# Installer Builder 架构设计 ## 1. 系统概述 Installer Builder 是一个跨平台的安装包构建工具,旨在简化为不同操作系统和架构创建安装包的过程。该系统支持 Windows 和 Linux 平台,能够生成多种类型的安装包(MSI、DEB、RPM 和压缩包),并支持多架构构建、安装前后脚本执行以及安装包升级。 ### 1.1 设计目标 - **跨平台**:支持 Windows 和 Linux 操作系统 - **多格式**:支持 MSI、DEB、RPM 和压缩包格式 - **多架构**:支持为不同 CPU 架构构建安装包 - **可配置**:通过配置文件定义安装包内容和行为 - **可扩展**:通过插件系统支持自定义功能 - **双模式**:同时支持命令行和图形界面 ## 2. 系统架构 ### 2.1 整体架构 Installer Builder 采用分层架构设计,主要包括以下层次: ```mermaid graph TD A[用户界面层] --> B[核心引擎层] B --> C[平台适配层] C --> D[包构建层] E[插件系统] --> D B --> F[脚本执行层] ``` ### 2.2 核心组件 #### 2.2.1 用户界面层 提供与用户交互的接口,包括命令行界面(CLI)和图形用户界面(GUI)。 - **CLI**:用于自动化构建流程,适合集成到 CI/CD 管道中 - **GUI**:基于 Wails 框架,为开发人员提供直观的操作界面 #### 2.2.2 核心引擎层 系统的中央协调组件,负责管理整个构建流程。 - **配置管理器**:解析和验证配置文件 - **构建协调器**:协调各组件完成构建任务 - **资源管理器**:管理构建过程中的临时资源 - **任务调度器**:处理并行构建任务 #### 2.2.3 平台适配层 处理不同操作系统和架构的特定逻辑。 - **平台检测器**:检测当前运行平台 - **平台适配器**:为不同平台提供特定实现 - **架构管理器**:处理多架构构建需求 #### 2.2.4 包构建层 负责生成不同类型的安装包。 - **MSI 构建器**:构建 Windows MSI 安装包 - **DEB 构建器**:构建 Linux DEB 安装包 - **RPM 构建器**:构建 Linux RPM 安装包 - **压缩包构建器**:创建跨平台压缩包 #### 2.2.5 脚本执行层 处理安装前后脚本的执行。 - **脚本执行器**:执行 Node.js 脚本 - **环境变量管理器**:管理脚本执行环境 - **结果处理器**:处理脚本执行结果 #### 2.2.6 插件系统 提供扩展系统功能的机制。 - **插件管理器**:加载和管理插件 - **插件接口**:定义插件与系统交互的标准接口 ## 3. 数据流 ### 3.1 构建流程数据流 ```mermaid sequenceDiagram participant User participant UI as 用户界面 participant Config as 配置管理器 participant Builder as 构建协调器 participant Platform as 平台适配器 participant Packager as 包构建器 participant Script as 脚本执行器 User->>UI: 提供配置文件和构建参数 UI->>Config: 解析配置 Config->>Builder: 提供验证后的配置 Builder->>Platform: 请求平台适配 Platform->>Builder: 返回平台特定信息 Builder->>Script: 执行安装前脚本(如有) Script->>Builder: 返回脚本执行结果 Builder->>Packager: 请求构建安装包 Packager->>Builder: 返回构建结果 Builder->>Script: 执行安装后脚本(如有) Script->>Builder: 返回脚本执行结果 Builder->>UI: 返回构建结果 UI->>User: 显示结果 ``` ### 3.2 配置数据流 ```mermaid flowchart TD A[配置文件] --> B[配置解析器] B --> C{格式验证} C -->|验证失败| D[错误处理] C -->|验证成功| E[配置模型] E --> F[构建协调器] ``` ## 4. 技术栈选择 ### 4.1 核心语言:Go 选择 Go 作为核心开发语言的理由: - **跨平台**:原生支持 Windows 和 Linux - **编译型语言**:生成单一二进制文件,无需运行时依赖 - **并发支持**:优秀的并发模型,适合处理并行构建任务 - **性能**:高性能,适合处理文件操作和系统调用 - **标准库**:丰富的标准库,特别是用于文件操作和压缩 ### 4.2 图形界面:Wails 选择 Wails 作为 GUI 框架的理由: - **Go + Web 技术**:结合 Go 后端和现代 Web 前端技术 - **原生感觉**:生成的应用具有原生应用的外观和感觉 - **跨平台**:支持 Windows 和 Linux - **轻量级**:比 Electron 更轻量,资源占用更少 - **开发体验**:允许使用熟悉的 Web 技术进行 UI 开发 ### 4.3 配置格式:YAML/JSON 同时支持 YAML 和 JSON 配置格式的理由: - **人类可读性**:YAML 格式易于人类阅读和编写 - **广泛支持**:JSON 格式被广泛支持,易于与其他工具集成 - **灵活性**:提供多种选择以满足不同用户的偏好 - **验证支持**:可以使用 JSON Schema 进行配置验证 ### 4.4 脚本执行:Node.js 选择 Node.js 作为脚本执行环境的理由: - **跨平台**:在 Windows 和 Linux 上表现一致 - **生态系统**:丰富的包生态系统 - **异步 I/O**:适合执行 I/O 密集型任务 - **熟悉度**:开发人员普遍熟悉 JavaScript/Node.js ## 5. 扩展性设计 ### 5.1 插件系统 Installer Builder 采用插件架构,允许通过插件扩展系统功能: - **包类型插件**:添加对新安装包类型的支持 - **平台插件**:添加对新操作系统的支持 - **功能插件**:添加新功能,如签名、验证等 ### 5.2 接口设计 系统使用清晰定义的接口,使组件之间松耦合: - **包构建器接口**:统一不同包类型的构建过程 - **平台适配器接口**:统一不同平台的特定操作 - **脚本执行器接口**:允许支持不同的脚本语言 ## 6. 部署架构 Installer Builder 作为独立应用程序部署,有两种使用模式: ### 6.1 开发者模式 - 开发人员在本地安装并使用 GUI 模式 - 用于测试和调试安装包配置 ### 6.2 CI/CD 模式 - 在 CI/CD 管道中使用 CLI 模式 - 自动化构建和发布安装包 ## 7. 安全考虑 ### 7.1 脚本执行安全 - 在受控环境中执行脚本 - 限制脚本的系统访问权限 - 验证脚本来源 ### 7.2 配置验证 - 严格验证配置文件内容 - 防止恶意配置导致的安全问题 ### 7.3 依赖管理 - 定期更新依赖以修复安全漏洞 - 使用可信来源的依赖 ## 8. 性能考虑 ### 8.1 并行构建 - 支持并行构建多个架构和包类型 - 使用 Go 的并发特性优化性能 ### 8.2 资源管理 - 有效管理内存和磁盘使用 - 清理临时文件和资源 ## 9. 兼容性和可移植性 ### 9.1 跨平台兼容性 - 确保在 Windows 和 Linux 上一致的行为 - 处理平台特定的文件路径和权限差异 ### 9.2 向后兼容性 - 维护配置文件格式的向后兼容性 - 支持旧版本创建的安装包的升级路径