Skip to content

LankeOS v0.07

Choose a tag to compare

@Wtada233 Wtada233 released this 18 Jun 11:30

LankeOS v0.07 Release

lpkg 代码库全面重构,迈向工业级包管理。

核心变更 (Major Changes)

  • lpkg 递归安装引擎(install_packages_internal):

    • 重构 install_packages(),提取递归驱动的 install_packages_internal(),通过 InstallContext 共享事务状态。
    • install_packages() 现为清晰的三阶段流程:决议 → 确认 → 安装,职责分离、可测试性大幅提升。
  • 动态依赖发现(ensure_dependencies_satisfied):

    • InstallationTask::prepare() 阶段即时读取包内 metadata.json,发现未在索引中声明的依赖。
    • 缺失依赖自动加入安装队列;不可解析时抛出 LpkgException 触发原子回滚。
    • 支持虚拟包(provides)回退链:已安装提供者 → 同事务内其他包的 provides → 目标文件预览。
  • 零预下载架构优化:

    • 修复了 verify_metadata_phase 在用户确认前下载包的严重问题。(在之前的Broken commit引入)
    • 现流程:决议(无网络)→ 显示计划 → 用户确认 → 逐包下载验证 → 安装。确认前零网络开销。
    • 下载与安装无缝融合:验证通过的包直接缓存路径供安装环节复用,避免重下载。
    • 元数据漂移时自动回滚本批已安装包 → 重解析 → 重试,保证事务一致性。
  • 代码库拆分(package_manager.cpp 大重构):

    • 将 1117 行的巨型 package_manager.cpp 拆分为三个逻辑单元:
      • install_common.hpp/cpp:共享辅助函数(钩子、元数据解析、依赖决议、一致性检查)
      • installation_task.cpp:单包事务生命周期(runpreparecommitrollback
      • package_manager.cpp:保留公共 API(安装/移除/升级/查询等)
    • 三文件独立编译,不影响 Makefile 自动扫描规则。

国际化与测试体系

  • l10n 清理: 自动删除 68 个未使用的翻译键(en.txt / zh.txt),保留精确匹配的 176 个活跃键。
  • 新增国际化字符串: info.installing_discovered_deperror.unresolvable_drift
  • 新增集成测试(3 项):
    • UnresolvableDriftFailure:索引声明 lib-old,实际需要 lib-new 且 lib-new 不存在 → 抛异常
    • DiscoverNewDependency:索引声明无依赖,实际需要 lib-extra → 自动发现并安装
    • AtomicRollbackOnFailedDep:发现依赖后该依赖不在仓库中 → 原子回滚确保无残留
  • 完整测试覆盖:58 项测试全部通过(+3 vs v0.06)。

修复的问题

  • 确认前下载verify_metadata_phase 在用户确认 (y/n) 前就下载了所有包,导致取消也浪费流量。现已完全移入确认后的安装循环。
  • 误删 l10n 键:三元表达式中的 info.package_list_item / info.package_list_item_dep 因 grep 模式不匹配而被清理脚本误删,已恢复。

系统规格更新 (Technical Specs)

组件 版本 状态
lpkg v1.5 (重构版) 递归安装引擎 + 动态依赖发现
源码行数 4668 行 (C++) 拆为 19 个 .cpp + 17 个 .hpp
测试行数 2245 行 58 项测试,全部通过
核心模块 3 文件拆分 install_common / installation_task / package_manager
l10n 176 个活跃键 en.txt + zh.txt 双语内容

下一步计划 (Roadmap)

  • 进一步丰富 lpkg 官方源软件仓库,提供更上层的用户态常用工具 (长期任务)
  • 引入系统快照与回滚机制
  • 并行下载加速支持

开发者的话

v0.07 是 lpkg 自 v1.5 发布以来最大的一次底层重构。核心变化不是「加了什么功能」,而是 「安装引擎的工作方式被重新设计了」

旧版1.5(开发中的unstable版本)在用户确认前就下载包,违背了「先看再买」的基本原则;索引与实际包不一致时处理脆弱,依赖发现完全依赖索引的准确性。这版通过 install_packages_internal 递归引擎 + ensure_dependencies_satisfied 动态补全 + 元数据逐包验证,让 lpkg 在真相面前(即包内的 metadata.json)永远有最终发言权。

同时,代码库结构从单文件 1117 行拆分为三模块,为后续的功能扩展和维护铺平了道路。

当前lpkg版本:1.5稳定(改天我改一下修订号)

温馨提醒:请使用最新的lpkg,因为最近的breaking change导致了一些兼容问题。以及之前开发中的版本有我之前提到的Bug。


Git Commit Summary (cfbb0f740db360)

40db360 fix: truly eliminate pre-download — inline metadata verify inside install loop
cd8dded fix: move metadata verify after user confirmation, restore accidentally removed i18n keys
3282c91 refactor(core): split package_manager.cpp into three logical units
db9287c refactor(core): recursive install engine with dynamic dep discovery and i18n cleanup
0165536 .
cfc0d32 fix broken tests
cfbb0f7 chore: metadata consolidation refactor (BROKEN - contains test failures, needs fixes)

7 commits, 30 files changed, +1561 / −1264 lines

6月20日更新:0.07-2,更新lpkg到1.6版本

6月20日更新2:庆祝LankeOS更新第6个版本,持续稳步开发!发布0.02-0.07的完整源码变更diff留作纪念