LeonOS Documentation

OpenRC 迁移实施记录

以下保留迁移实施时的历史记录,当时尚未通过目标机验收,分支为 xiaobai/openrc-support。旧实施提示词已清理,可从 Git 历史查看。

职责审计和实施顺序

旧职责新组件 / 启动方式权限 / 消费者
内核启动 init、imd、windowd、desktop、TTY、installer内核只执行 /sbin/init;BusyBox inittab 调用 OpenRCPID 1 root;OpenRC 决定 runlevel
desktop/services.c 监督 serviced删除;OpenRC supervise-daemon图形服务独立生命周期
serviced 配置、状态、命令文件删除;rc-service、rc-update、rc-statusGUI 通过现有 sudo 认证后执行固定参数命令
DHCP 重试和租约更新上游 BusyBox udhcpcOpenRC,唯一 DHCP 客户端
DNS 发布udhcpc 脚本root;libc resolver、网络 GUI
NTP 轮询上游 BusyBox ntpdOpenRC,唯一同步进程
网络配置/查询 IPClibc 查询内核;配置经授权命令桥接查询允许普通用户,变更保留 root 检查
启动项数据库、用户会话 IPC独立 sessiond 业务进程root 接收凭据;用户程序应用 PAM UID/GID/组
LeonOS 设备目录与驱动协议独立设备协议业务组件只处理设备协议;不监督服务
network_icon、rtc_clocktaskbar.cfg 偏好设置和桌面;不再表示服务运行状态
直接 reboot syscallBusyBox PID 1 信号协议现有 sudo/PAM 授权;OpenRC shutdown

顺序:接入经过校验的 Alpine APK 和启动配置;迁移业务及消费者;统一内核启动与 电源;删除旧实现、归属和增量残留;正式构建、自审、主机回归和 VM 验证。

已知需验证的内核缺口

初步源码审计:孤儿进程被改成 parent_pid=0 而非交给 PID 1;exec 仅按 serviced 路径恢复 SERVICE 标志,需改为基于 root 身份及受保护可执行文件的明确图形服务 授权。标准网络客户端所需 AF_PACKET、网络接口 ioctl 和时间调整需运行证明。

验收状态

十项目标机验收均尚未完成。后续记录以实际命令与日志更新,不把源码变更视为运行通过。

设备协议实际修正

旧 devmand 的驱动列表是五个硬编码“已加载”条目,控制操作对 root 直接返回成功。 现在列表从只读 /proc/leonos-drivers 获取实际 leonos_driver_info 记录(ABI version 沿用公共 driver.h),内核通过 driver_manager_list 填充。旧伪控制返回已改为真实 ENOTSUP;驱动控制的正式内核接入仍需完成,不能将此项列为已迁移成功。

主代理接手后的实测记录(2026-09-15,进行中)

本节不代表整体迁移验收完成,也不代表所有新增 syscall/网络选项完整兼容。

证据:build/openrc-fifo-probe/guest-smp2.log、 build/openrc-network-build.log、build/openrc-busybox-build.log。 上述 guest 日志来自临时探针镜像;其 staging 使用正式 APK root,但覆盖了最新 kernel/BusyBox/服务脚本,不是最终发行 ISO。最终普通镜像和 installer 必须统一重建。

继续处理:NTP 启动期 DNS 就绪、ntpd 需要的真实 adjtimex 时钟纪律、DHCP 续租/GUI 状态确认、网络协议边界回归、设备控制、会话/监督/关机和安装器验收。 adjtimex 尚未实现,不能把 ntpd 进程启动等同于成功同步。

时钟纪律与真实 NTP 样本(后续进展)

前述“adjtimex 尚未实现”是本次接手初期的状态,现已新增实现,但仍不表示完整 ABI。

当前正式 image-vmdk 正在统一构建;NTP hook/GUI、installer、长时间多核运行和 监督/关机仍需要完成后续验证。探针文件不可冒充发行镜像。

设备控制和 PID 1 通知返修

设备代理的 root 控制请求不再统一返回 ENOTSUP:固定大小请求经 /dev/driverctl 进入内核,检查 CAP_SYS_MODULE、保留字段、字符串终止后调用真实 driver_manager_control。修复旧客户端误用包含函数指针的 module 结构发送控制 命令、文件名长度截断和 errno 不回写。宿主测试检查真实 dispatch 的拒绝路径及 后端错误传播;真实驱动卸载/重载仍待来宾验证。

收窄另一 AI 新增的 PID 1 SIGCHLD:仅收养已经退出且可回收的孤儿才额外通知, 正常子进程退出沿用组退出通知;不会每个普通进程退出都向 PID 1 发信号。 收养线程不会把非 leader pthread 标成可 wait 的独立子进程。

第二次统一 image-vmdk 构建 0 errors;正式图形登录探针正在使用该镜像的只读 基础快照验证,尚未完成 installer 及全部目标场景。