目录

OKBoot:openKylin 图形桌面启动路径分析与安全优化工具

OKBoot 是一套面向 openKylin + UKUI 图形桌面的启动性能采集、诊断、实验与验证工具。项目不把 systemd-analyze blame 中的单元耗时直接视为可获得的优化收益,而是测量从 Linux 内核开始运行,到图形登录界面可操作,再到用户登录后桌面核心功能可用的完整路径。

项目当前以以下两套计时组件为正式口径:

  • Desktop Ready v2.2.0:判定 UKUI 核心组件、网络、声音、输入法及常用应用是否达到可用状态;
  • Complete Boot Path v3.0.0:合并系统启动、登录界面、认证和用户会话事件,并剔除人工输入登录凭据产生的停留时间。

OKBoot 将多轮采集、候选诊断、实验生成、自动检查、人工审批、自动应用、功能门禁、A/B 配对验证和自动回滚组织成统一工作流,使启动优化具备 可解释、可审查、可复现、可验证和可撤销 的工程属性。

安全提示:本项目会在经过明确审批后修改 systemd 单元状态。所有优化均应先在可恢复的测试环境中执行,并在实验结束后运行回滚与 Baseline 状态验证。项目中的服务裁剪策略具有场景边界,不应作为通用“关闭服务清单”直接应用到其他设备。


1. 核心能力

1.1 完整启动路径计时

Complete Boot Path v3.0.0 使用四个关键里程碑描述一次图形桌面启动:

  • T1:图形登录界面稳定且可操作;
  • T2:用户提交登录后,LightDM PAM 认证开始;
  • T3:用户会话开始;
  • T4:Desktop Ready v2.2.0 判定桌面达到可用状态。

人工登录停留区间为 T2 - T1。正式主指标为:

adjusted_boot_to_desktop_usable_s
  = T1 + (T4 - T2)
  = T4 - (T2 - T1)

该指标保留 PAM 认证、用户会话创建和桌面初始化时间,但排除用户在登录界面等待、输入密码和提交登录产生的人工差异。

1.2 多源启动证据采集

单轮正式采集会整合:

  • systemd-analyze time / blame / critical-chain / plot;
  • 本轮 system journal 与 user journal;
  • LightDM、DBus、NetworkManager 和关键 systemd 单元状态;
  • 登录界面就绪、PAM 登录请求与用户会话事件;
  • UKUI 核心组件启动里程碑;
  • CPU、内存、Swap、磁盘、网络及进程证据;
  • 桌面、网络、声音、输入法和常用应用功能检查。

1.3 证据驱动候选诊断

诊断器不会只根据耗时排名生成结论,而是综合判断:

  • unit 是否真实存在且状态可解释;
  • 是否在多轮启动中重复出现;
  • 是否位于 graphical.target 或显示管理器关键链;
  • 是否依赖特定硬件、网络或业务角色;
  • service 是否可能被 socket、D-Bus 或其他单元重新激活;
  • 候选作用于系统启动、用户会话还是后台资源阶段;
  • 当前证据是否达到正式实验要求。

诊断结果同时输出 JSON 和 Markdown,既便于程序继续处理,也便于人工审查。

1.4 自动生成安全实验

对于允许进入实验的候选,工具自动生成独立实验目录。典型目录包含:

inspect.sh
approve.sh
apply.sh
rollback.sh
status.sh
verify-state.sh
function-check.sh
collect-run.sh
metadata.json
README.md

fix_wait 等审批保护型实验必须完成:

自动检查 → 人工审批 → 自动应用 → 状态验证 → 功能检查 → 自动回滚

应用过程出现部分失败时,生成脚本会尝试执行完整回滚,避免系统停留在不可预测的中间状态。

1.5 正式三对 A/B 实验

正式验证采用固定顺序:

A1 → B1 → A2 → B2 → A3 → B3

其中 A 为 Baseline,B 为 Optimized。每轮均执行真实重启,配对统计要求:

  • A/B 来自不同启动;
  • 单轮 status=complete;
  • 人工登录时间已剔除;
  • 完整路径事件顺序有效;
  • A/B 使用相同计时版本和策略指纹;
  • 优化轮功能检查通过;
  • 需要的人工功能清单已经确认。

2. 项目架构

                           ┌────────────────────────────┐
                           │         okboot.sh          │
                           │ 统一安装、采集、分析与实验入口 │
                           └─────────────┬──────────────┘
                                         │
        ┌────────────────────────────────┼────────────────────────────────┐
        │                                │                                │
┌───────▼────────┐              ┌────────▼────────┐              ┌────────▼────────┐
│   Collector    │              │    Analyzer     │              │    Optimizer    │
│ 系统/登录/会话采集 │              │ 汇总、门禁与候选诊断 │              │ 实验生成与安全执行 │
└───────┬────────┘              └────────┬────────┘              └────────┬────────┘
        │                                │                                │
        └──────────────────────┬─────────┴───────────────┬────────────────┘
                               │                         │
                       ┌───────▼────────┐       ┌────────▼────────┐
                       │    Verifier    │       │  Reports / Data │
                       │ 桌面与网络功能门禁 │       │ 结构化结果与实验归档 │
                       └────────────────┘       └─────────────────┘

主要模块:

路径 作用
okboot.sh 统一命令入口,负责调度采集、分析、实验和回滚
collector/guest/ systemd、journal、硬件和系统状态采集
collector/system/ 登录界面就绪与 LightDM PAM 登录请求标记
collector/user-session/ UKUI 会话、桌面核心与功能可用状态观测
collector/host/ 可选的宿主机外部启动观测
analyzer/ 单轮汇总、多轮聚合、完整路径合并和实验统计
analyzer/user_session/ 用户会话证据解析、候选评分与桌面指标计算
optimizer/ 单项和组合实验生成器、实验定义与运行时脚本
verifier/ 显示管理器、网络、桌面、输入法和音频功能检查
ai/ 可选的脱敏 AI 辅助诊断,不参与默认安全决策
config/ 启动路径、桌面可用、诊断和隐私策略
data/ Baseline 与 Optimized 单轮采集数据
reports/ 诊断、配对统计和正式实验报告
output/ 单轮归档包和可迁移输出
.okboot/ 调度、锁、状态机和备份等运行状态
tests/ 完整路径、桌面判定、实验状态机和安全语义测试
docs/ 技术设计、指标、SOP 和实验说明

3. 运行环境

3.1 建议环境

  • openKylin 图形桌面系统;
  • UKUI 桌面环境;
  • LightDM 显示管理器;
  • systemd;
  • NetworkManager;
  • Bash;
  • Python 3.8 或更高版本。

项目主要使用 Python 标准库,不要求额外安装 Python 第三方包。

3.2 必需系统命令

setup.sh 会检查以下核心命令是否存在:

bash, python3, systemctl, systemd-analyze, journalctl,
timeout, awk, sed, grep, find, sort, tar, date, hostname,
uname, stat, id, loginctl, free, swapon, lsblk, ip,
getent, pgrep, systemd-detect-virt

以下命令按环境或功能选用:

nmcli, pactl, wpctl, ipsec, nvme, virsh, column

4. 快速开始

4.1 解压与自检

ZIP 解压可能丢失可执行权限,因此首次运行应先执行:

cd openkylin-boot-opt
bash setup.sh

setup.sh 默认只进行项目目录初始化、权限修复、依赖检查以及 Shell、Python、JSON 和实验元数据校验,不修改 systemd 单元状态。

4.2 安装桌面采集组件

请以目标桌面用户运行,不要直接以 root 用户执行:

bash setup.sh --install-components

该命令安装桌面就绪探针和用户会话观测组件到当前用户目录。

4.3 安装 Complete Boot Path v3.0.0 系统组件

./okboot.sh install-boot-path
sudo reboot

该命令会:

  • 安装登录界面就绪 observer;
  • 安装可选的 LightDM PAM 登录请求 marker;
  • 启用 okboot-login-ready-observer.service;
  • 在修改 /etc/pam.d/lightdm 和系统 unit 前创建备份。

PAM marker 使用 auth optional pam_exec.so quiet,不会接收用户密码,并始终以成功状态返回。尽管如此,仍应在测试环境中检查备份和 LightDM 登录功能。

4.4 安装后检查

bash setup.sh
systemctl is-enabled okboot-login-ready-observer.service
systemctl --user is-enabled okboot-desktop-core-v220.service

查看全部命令:

./okboot.sh --help

5. 基线采集与诊断

5.1 安排一轮重启采集

./okboot.sh schedule baseline formal-baseline-001
cat .okboot/next-run.env
sync
sudo reboot

登录后,已部署的自动采集集成会读取 .okboot/next-run.env 并生成本轮数据。如果自动采集未运行,可手动执行:

./okboot.sh autocollect

查看本轮完整路径:

./okboot.sh boot-path-summary \
  data/baseline/formal-baseline-001

有效正式轮次应包含:

status=complete
manual_login_time_removed=True
event_order_valid=True
pair_eligible=True
adjusted_boot_to_desktop_usable_s=<number>

按相同方式完成 formal-baseline-002 和 formal-baseline-003。

5.2 汇总三轮 Baseline

请将选定的三轮放入独立目录,避免混入其他历史轮次。例如:

BASESET="reports/baseline-current/input-runs"
mkdir -p "$BASESET"

ln -sfn "$PWD/data/baseline/formal-baseline-001" \
  "$BASESET/formal-baseline-001"
ln -sfn "$PWD/data/baseline/formal-baseline-002" \
  "$BASESET/formal-baseline-002"
ln -sfn "$PWD/data/baseline/formal-baseline-003" \
  "$BASESET/formal-baseline-003"

./okboot.sh summarize "$BASESET"

主要输出:

formal-baseline-3-runs-summary.json
formal-baseline-3-runs-summary.md
formal-baseline-3-runs-summary.csv
baseline-evidence-summary.json

5.3 生成候选诊断

./okboot.sh diagnose "$BASESET"

主要输出:

reports/baseline-diagnosis.json
reports/baseline-diagnosis.md

5.4 生成实验目录

./okboot.sh generate-experiments \
  reports/baseline-diagnosis.json

./okboot.sh opt-list

查看某个实验的元数据和说明:

./okboot.sh opt-show <EXPERIMENT_ID>

6. 安全实验工作流

下面以审批保护型实验为例:

EXP="opt-auto-101-fix-wait-NetworkManager-wait-online"
EXP_DIR="optimizer/experiments/$EXP"

6.1 应用前检查与审批

./okboot.sh opt-inspect "$EXP"
./okboot.sh opt-status "$EXP"
./okboot.sh opt-approve "$EXP"

执行 opt-apply 前应确认:

inspection_status=passed
safe_to_apply=yes
blocker_count=0

6.2 自动应用与状态验证

./okboot.sh opt-apply "$EXP"
"$EXP_DIR/verify-state.sh" optimized
./okboot.sh opt-status "$EXP"

6.3 安排优化轮采集

RUN="${EXP}-matched-001"
./okboot.sh opt-schedule "$EXP" "$RUN"
sync
sudo reboot

登录并等待采集完成后:

./okboot.sh boot-path-summary "data/optimized/$RUN"
./okboot.sh opt-function-check "$EXP"

功能检查会覆盖显示管理器、DBus、NetworkManager、UKUI 核心组件、输入法、音频、默认路由、DNS 和网络连接状态。

6.4 自动回滚

./okboot.sh opt-rollback "$EXP"
"$EXP_DIR/verify-state.sh" baseline

在回滚和 Baseline 验证完成前,不应开始下一轮基线采集。


7. 六轮正式实验状态机

OKBoot 提供可恢复的 A1-B1-A2-B2-A3-B3 状态机,用于减少手工命名错误、重复使用同一启动数据以及漏做功能检查的风险。

EXP="opt-auto-101-fix-wait-NetworkManager-wait-online"

./okboot.sh experiment-start "$EXP"
./okboot.sh experiment-status "$EXP"

安排 A1:

./okboot.sh experiment-next "$EXP"
sync
sudo reboot

每次重新登录并等待自动采集完成后执行:

./okboot.sh experiment-next "$EXP"

状态机将:

  1. 识别刚完成的轮次;
  2. 校验完整路径、Boot ID 和运行完整性;
  3. 在 B 轮执行并归档功能检查;
  4. 校验当前应处于 Baseline 还是 Optimized;
  5. 状态正确时原子调度下一轮;
  6. 状态不正确时给出需要执行的检查、应用或回滚命令。

A/B 状态切换不会被状态机静默执行。进入 B 轮前通常需要:

./okboot.sh opt-inspect "$EXP"
./okboot.sh opt-approve "$EXP"
./okboot.sh opt-apply "$EXP"
./okboot.sh experiment-next "$EXP"

进入下一轮 A 前通常需要:

./okboot.sh opt-rollback "$EXP"
./okboot.sh experiment-next "$EXP"

若实验存在人工检查清单:

./okboot.sh experiment-confirm-manual \
  "$EXP" 001 \
  --note '网络、桌面和目标功能均检查正常'

六轮完成后生成正式报告:

./okboot.sh experiment-finalize "$EXP"

最终输出位于:

reports/experiments/<experiment-id>/
├── paired-analysis.json
├── paired-analysis.md
├── paired-analysis.csv
├── result-classification.json
├── function-check-summary.env
├── final-report.json
└── final-report.md

8. 主要数据产物

8.1 单轮运行目录

data/<baseline|optimized>/<run-name>/
├── metadata.env
├── summary.json
├── integrity.json
├── integrity.env
├── systemd/
├── journal/
├── desktop/
├── user-session/
├── boot-path/
│   ├── boot-path.json
│   └── boot-path.env
└── function-check/

8.2 关键字段

字段 含义
kernel_s Linux 内核启动时间
systemd_total_s 内核与 systemd 用户空间合计
graphical_target_userspace_s 用户空间到达图形目标的时间
boot_to_login_screen_ready_s 内核开始到登录界面可操作
login_request_to_desktop_usable_s 登录请求提交到桌面功能可用
boot_to_desktop_usable_s 包含人工登录停留的原始完整时间
adjusted_boot_to_desktop_usable_s 剔除人工登录停留后的正式主指标
manual_login_time_removed 是否成功剔除人工登录时间
boot_path_event_order_valid 完整路径事件顺序是否有效
boot_path_pair_eligible 本轮是否允许进入正式 A/B 配对
overall_status 功能检查总体状态
critical_failure_count 关键功能失败数量
combination_state_status 组合实验目标状态是否正确

9. 已完成的实验定义

当前仓库包含以下正式实验定义:

实验 ID 目标 类型
opt-auto-001-disable-biometric-authentication 生物认证服务 条件型服务裁剪
opt-auto-002-disable-bluetooth Bluetooth 服务 硬件能力驱动裁剪
opt-auto-003-disable-avahi-daemon Avahi service/socket 联合激活裁剪
opt-auto-004-disable-samba-ad-dc Samba AD DC 条件服务与等待链消除
opt-auto-101-fix-wait-NetworkManager-wait-online 网络在线等待 审批保护型 fix_wait
opt-combo-002-final-v300 多个已验证候选 最终组合实验

这些定义只描述已验证测试环境中的实验边界。应用前必须重新运行 opt-inspect,并根据当前硬件、业务角色和功能需求决定是否允许执行。

已验证结果摘要

实验 正式结果
NetworkManager-wait-online 单项实验 主指标配对中位改善 0.497 s,三组方向一致,功能检查 3/3 通过
最终组合实验 A/B 组中位数由 11.801 s 降至 11.261 s,改善 0.540 s(4.58%);两组改善、一组基本持平;功能检查 3/3 通过

实验结果受系统版本、硬件、虚拟化、磁盘缓存和后台负载影响,不应直接外推到未测试环境。


10. AI 辅助诊断与隐私

ai/ 提供可选的云端 AI 辅助诊断框架。默认规则诊断与正式安全流程不依赖 AI,AI 输出也不能绕过 inspect、人工审批、功能门禁或回滚要求。

隐私策略位于:

config/ai-privacy-policy.json

默认禁止发送或保留以下内容:

  • Boot ID、用户名、主机名、UID、PID;
  • 完整命令行、环境变量和 journal 原文;
  • 绝对路径、IP 地址、MAC 地址和邮箱;
  • API key、Authorization、Token 和 Secret。

配置真实 API 凭据时,应复制本地模板并限制文件权限:

cp config/ai.env.example config/ai.env
chmod 600 config/ai.env

config/ai.env 已被 .gitignore 排除,禁止将真实密钥写入代码、实验归档或公开报告。


11. 开发与验证

运行项目自检:

bash setup.sh

运行当前正式版本的核心测试:

PYTHONPATH=. python3 tests/boot_path/test_complete_boot_path_v300.py
PYTHONPATH=. python3 tests/user_session/test_desktop_ready_v220_r4.py
PYTHONPATH=. python3 tests/user_session/test_desktop_usability_v220.py
PYTHONPATH=. python3 tests/test_experiment_state_machine.py
PYTHONPATH=. python3 tests/test_finalize_experiment.py
PYTHONPATH=. python3 tests/test_optimization_semantics.py
PYTHONPATH=. python3 tests/test_p1_generator_gate.py

仓库仍保留部分 v2.1/v2.1.1 兼容实现和兼容性回归测试;这些测试显式调用对应的 legacy 模块。正式 Complete Boot Path v3.0.0 验收以当前版本 targeted tests、单轮完整性门禁和正式三对实验结果为准。


12. 运行状态与数据清理

以下路径包含运行状态或实验数据:

.okboot/
data/
output/
reports/
optimizer/experiments/*/state/
optimizer/experiments/*/function-check/

公开代码或重新开始全新实验前,可使用:

bash tools/reset-generated-state.sh

该命令会删除采集数据、报告和运行状态,但保留代码、配置、测试、文档和实验定义。它是破坏性操作,执行前必须确认:

.okboot/next-run.env 不存在
.okboot/autocollect.lock 不存在
重要实验数据已经备份

13. 重要文档


14. 适用边界

OKBoot 当前主要面向 openKylin、UKUI、LightDM 和 NetworkManager 组合。以下情况必须重新审查策略和探针配置:

  • 更换显示管理器或桌面环境;
  • 使用生物认证登录、解锁或提权;
  • 依赖 .local、mDNS、DNS-SD 或局域网服务发现;
  • 使用蓝牙键盘、鼠标、耳机或其他控制器;
  • 主机承担 Samba AD DC 或其他域服务;
  • 启动阶段依赖远程文件系统或必须提前联网的业务;
  • 企业安全策略要求相关服务保持启用。

项目的优化目标是缩短真实桌面可用路径,同时保持核心功能完整。任何不能通过功能门禁、配对资格或回滚验证的结果,都不应被标记为正式有效优化。

关于
36.8 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号