Skip to content

LankeOS v0.20

Latest

Choose a tag to compare

@Wtada233 Wtada233 released this 13 Sep 13:50

LankeOS v0.20 Release

Codename: Tonlé Sap

This was a triumph.

I'm making a note here: HUGE SUCCESS.

It's hard to overstate my satisfaction.


核心变更 (Major Changes)

Farm 新功能:

  • release check:多种检验机制(Qml,ABI,PKGConf,PKGError,Hooks,VAPI,Introspection,build_deps)可用于快速定位坏包或依赖树错误。同时提供full chk自动运行所有检查

Rust 生态修复

  • LLVM版本更新:从23.1.0到23.1.1,进行了一次rebuild(无别的修复,主要就是rebuild来跟进上游fixes)
  • Rust 1.98.1:Rust工具链已经升级到最新版本,同时我从BLFS弄来了个LLVM 23兼容性修复补丁,现在其LTO能完美工作了,我顺便加了LTO+PGO+Description
  • Chromium 155:同样跟进canary,允许通过AUTH文件自定义API Key构建。同时修复上游构建系统的一个missing include path使其不再泄漏系统headers

新增打包:

  • xdg-terminal-exec:引入这个项目是因为GNOME启动终端的顺序是硬编码的,其能选中我使用的终端而不是各种not found
  • ptyxis:一个看上去还不错的终端模拟器,同时也是新GNOME首选
  • flameshot:截图用。建议搭配GNOME托盘插件,因为其是作为后台daemon运行
  • p7zip:7z,代替老旧的Info-ZIP并支持更多压缩格式

打包缺陷修复:

  • shadow修复:对shadow打包应用Arch Linux的一个fork的一系列patch,使其工作方式更正常些
  • util-linux全功能:清理从LFS阶段开始遗留的util-linux打包,开启systemd集成和lastlog2等核心功能

迁移指南

  • 无系统级别breaking,但是无主/etc/pam.d文件会阻止新版本更新。建议删除/etc/pam.d/{passwd,chpasswd}然后更新filesystem,删除/etc/default/useradd,更新shadow,删除/etc/pam.d/login和/etc/pam.d/su,最后更新util-linux。使用sudo lpkg install {name}进行更新。
  • rust-nightly由于构建成本,频率以及其无包使用,所以已经删除,请迁移到rust包/rustup

镜像体积变化

  • 完整 LiveISO 约 1.46GiB (没变?甚至变小了?默认预装删除了qt的关系吧。)。

稳定性与兼容性

本版本经过验证:

  • 所有 850 个包在 farm docker容器 中构建通过
  • 在处理配置文件冲突后,lpkg upgrade 从 0.19 升级测试通过
  • Rust的LTO正常,LLVM 23.1.1完美工作。
  • GNOME运行正常

下一步计划 (Roadmap)

  • 新增COSMIC(在做了)

开发者的话

0.20 的主题是 “漫长的真正维护之继续”。

(啊,天呐,是bugfix,我们没救了x2)

调试Chromium和Rust LTO让我感觉活到头了。我的机器和我都备受折磨。不过总算跑起来了——还跑得挺好。居然没出现严重bug。

最后引用《Want You Gone》的几句歌词讲述一下我对于这个诡异的LLVM兼容性修复的看法:

Go make some new disaster

That's what I'm counting on

You're someone else's problem

Now I only want you gone

—— Wtada233

9月19日 继续加包,修bug与更新:

  • 添加10+依赖包,unbundle samba talloc等
  • 重构build farm的构建队列系统包含构建依赖
  • 修复ibus的一个上游bug导致GNOME Shell崩溃的问题(backport patch)
  • 需迁移:libibus包已经删除,最新仓库使用ibus包(完整ibus)作为替代。请使用sudo lpkg remove --force libibus+sudo lpkg upgrade(自动安装新的)来迁移
  • 你可能需要的:ibus-libpinyin(中文输入)
  • lpkg修复:备份获取root逻辑错误,已修复(修复前导致Linux内核无法升级,建议先安装lpkg自身的新版本再upgrade)
  • 所有软件包更新到最新,包括GNOME 51和KDE Plasma 6.7.5
  • archive.org已经上传最新pkgs/workdir_snapshot/iso覆盖

9月20日 回滚昨天的部分更改+lpkg重构

  • 删除ibus改回libibus(因为其存在部分与fcitx5的冲突)
  • 更新所有软件包到最新版本(新增20个包更新)
  • 重构lpkg:
    • 事务与回滚:多包移除(remove a b c / autoremove / force-solve-conflict / 递归闭包)改为单批次原子
    • 崩溃恢复:重写 WAL 行解析(含空格路径不再错帧);损坏行不再冒充批次起点;恢复区域改为"第一个未提交批次"并一轮收敛;孤儿备份回收不再误删 WAL 仍引用的 stash;单个批次恢复失败不再让 lpkg rec 永久卡死
    • 可靠性:所有 .tmp + fsync + rename 写入收敛为一份实现且 fsync 失败即报错(不再静默产生截断的 DB);打包不再把截断产物当成功;源码下载先 .part 再 rename(被中断不再留下"已下载好"的半截包)
    • 安全加固:归档解压成员名归一化(绝对路径/硬链接不再逃出解压根);DT_SONAME、包名/版本号一律做路径校验;ELF strip 三处内存安全(畸形输入不再堆溢出/除零);找不到 CA 证书包时拒绝下载而非静默关闭校验
    • 依赖求解:依赖串空名/空白归一;索引里的复合约束正确解析;请求的包没进计划时报错,不再打印"所有包都已安装";--force 混合目标现在真的重装;按能力/SONAME 安装不再被 autoremove 删掉;autoremove 不再删核心包
    • 触发器:upgrade 也会执行触发器(此前只有 install 执行);ldconfig 链路修复;外部触发器在目标 root 内执行(--root 不再打到宿主);缺触发器配置时给告警
    • 安装/升级:包布局文件 → 目录的变更(如 /usr/share/licenses/X 从文件变成目录)不再中止或误删新内容;hooks 陈旧文件在提交后剪枝;query <目录> 不带尾斜杠也能查到归属
    • CLI/工具:拒绝类操作退出码非零;--yes/--no 互斥报错;build 传多个目录报错;lrepo-mgr.py 只保留本地仓库模式(移除 S3/SCP 在线模式)
    • 测试:630 个用例(新增约 40 个回归,关键项均在旧代码上验证过会失败);make static 零 warning

9月21日 进行一堆patch并弃用p7zip

  • 删除停更的p7zip改为官方7zip的linux版本
  • 从各种项目搜刮并整理顺便新建了一堆patch,unzip 49个,zip 21个,bzip2 11个,加起来81个,全部干净应用并构建
  • 重新打包liveISO(使用最新的zip,unzip,bzip2和7zip)

9月25日 lpkg大重构+包正确性修复

  • 新增部分包的systemd preset配置正确禁用不应该启用的systemd unit
  • 删除ndctl,重建libblockdev和qemu关闭对应功能(内核无部分支持)
  • samba开启ad-dc产出/usr/bin/samba二进制文件
  • 拆包LLVM为clang,lld,llvm一共3个包(原来还拆了几个libclc以及compiler-rt,不变)
  • 把Chromium tracker改为追踪stable而不是canary
  • 重建所有修改的包
  • 重构lpkg:根据pacman源码中的语义审核lpkg的实现,发现几十个bug并修复
  • 包tracker质量提升:减少script,规范化部分tracker并顺便修改farm实现丰富tracker格式