更新项目说明书
OKBoot 是一套面向 openKylin + UKUI 图形桌面的启动性能采集、诊断、实验与验证工具。项目不把 systemd-analyze blame 中的单元耗时直接视为可获得的优化收益,而是测量从 Linux 内核开始运行,到图形登录界面可操作,再到用户登录后桌面核心功能可用的完整路径。
systemd-analyze blame
项目当前以以下两套计时组件为正式口径:
OKBoot 将多轮采集、候选诊断、实验生成、自动检查、人工审批、自动应用、功能门禁、A/B 配对验证和自动回滚组织成统一工作流,使启动优化具备 可解释、可审查、可复现、可验证和可撤销 的工程属性。
安全提示:本项目会在经过明确审批后修改 systemd 单元状态。所有优化均应先在可恢复的测试环境中执行,并在实验结束后运行回滚与 Baseline 状态验证。项目中的服务裁剪策略具有场景边界,不应作为通用“关闭服务清单”直接应用到其他设备。
Complete Boot Path v3.0.0 使用四个关键里程碑描述一次图形桌面启动:
T1
T2
T3
T4
人工登录停留区间为 T2 - T1。正式主指标为:
T2 - T1
adjusted_boot_to_desktop_usable_s = T1 + (T4 - T2) = T4 - (T2 - T1)
该指标保留 PAM 认证、用户会话创建和桌面初始化时间,但排除用户在登录界面等待、输入密码和提交登录产生的人工差异。
单轮正式采集会整合:
systemd-analyze time / blame / critical-chain / plot
诊断器不会只根据耗时排名生成结论,而是综合判断:
graphical.target
诊断结果同时输出 JSON 和 Markdown,既便于程序继续处理,也便于人工审查。
对于允许进入实验的候选,工具自动生成独立实验目录。典型目录包含:
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 等审批保护型实验必须完成:
fix_wait
自动检查 → 人工审批 → 自动应用 → 状态验证 → 功能检查 → 自动回滚
应用过程出现部分失败时,生成脚本会尝试执行完整回滚,避免系统停留在不可预测的中间状态。
正式验证采用固定顺序:
A1 → B1 → A2 → B2 → A3 → B3
其中 A 为 Baseline,B 为 Optimized。每轮均执行真实重启,配对统计要求:
status=complete
┌────────────────────────────┐ │ okboot.sh │ │ 统一安装、采集、分析与实验入口 │ └─────────────┬──────────────┘ │ ┌────────────────────────────────┼────────────────────────────────┐ │ │ │ ┌───────▼────────┐ ┌────────▼────────┐ ┌────────▼────────┐ │ Collector │ │ Analyzer │ │ Optimizer │ │ 系统/登录/会话采集 │ │ 汇总、门禁与候选诊断 │ │ 实验生成与安全执行 │ └───────┬────────┘ └────────┬────────┘ └────────┬────────┘ │ │ │ └──────────────────────┬─────────┴───────────────┬────────────────┘ │ │ ┌───────▼────────┐ ┌────────▼────────┐ │ Verifier │ │ Reports / Data │ │ 桌面与网络功能门禁 │ │ 结构化结果与实验归档 │ └────────────────┘ └─────────────────┘
主要模块:
okboot.sh
collector/guest/
collector/system/
collector/user-session/
collector/host/
analyzer/
analyzer/user_session/
optimizer/
verifier/
ai/
config/
data/
reports/
output/
.okboot/
tests/
docs/
项目主要使用 Python 标准库,不要求额外安装 Python 第三方包。
setup.sh 会检查以下核心命令是否存在:
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
ZIP 解压可能丢失可执行权限,因此首次运行应先执行:
cd openkylin-boot-opt bash setup.sh
setup.sh 默认只进行项目目录初始化、权限修复、依赖检查以及 Shell、Python、JSON 和实验元数据校验,不修改 systemd 单元状态。
请以目标桌面用户运行,不要直接以 root 用户执行:
bash setup.sh --install-components
该命令安装桌面就绪探针和用户会话观测组件到当前用户目录。
./okboot.sh install-boot-path sudo reboot
该命令会:
okboot-login-ready-observer.service
/etc/pam.d/lightdm
PAM marker 使用 auth optional pam_exec.so quiet,不会接收用户密码,并始终以成功状态返回。尽管如此,仍应在测试环境中检查备份和 LightDM 登录功能。
auth optional pam_exec.so quiet
bash setup.sh systemctl is-enabled okboot-login-ready-observer.service systemctl --user is-enabled okboot-desktop-core-v220.service
查看全部命令:
./okboot.sh --help
./okboot.sh schedule baseline formal-baseline-001 cat .okboot/next-run.env sync sudo reboot
登录后,已部署的自动采集集成会读取 .okboot/next-run.env 并生成本轮数据。如果自动采集未运行,可手动执行:
.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。
formal-baseline-002
formal-baseline-003
请将选定的三轮放入独立目录,避免混入其他历史轮次。例如:
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
./okboot.sh diagnose "$BASESET"
reports/baseline-diagnosis.json reports/baseline-diagnosis.md
./okboot.sh generate-experiments \ reports/baseline-diagnosis.json ./okboot.sh opt-list
查看某个实验的元数据和说明:
./okboot.sh opt-show <EXPERIMENT_ID>
下面以审批保护型实验为例:
EXP="opt-auto-101-fix-wait-NetworkManager-wait-online" EXP_DIR="optimizer/experiments/$EXP"
./okboot.sh opt-inspect "$EXP" ./okboot.sh opt-status "$EXP" ./okboot.sh opt-approve "$EXP"
执行 opt-apply 前应确认:
opt-apply
inspection_status=passed safe_to_apply=yes blocker_count=0
./okboot.sh opt-apply "$EXP" "$EXP_DIR/verify-state.sh" optimized ./okboot.sh opt-status "$EXP"
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 和网络连接状态。
./okboot.sh opt-rollback "$EXP" "$EXP_DIR/verify-state.sh" baseline
在回滚和 Baseline 验证完成前,不应开始下一轮基线采集。
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"
状态机将:
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
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/
kernel_s
systemd_total_s
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
overall_status
critical_failure_count
combination_state_status
当前仓库包含以下正式实验定义:
opt-auto-001-disable-biometric-authentication
opt-auto-002-disable-bluetooth
opt-auto-003-disable-avahi-daemon
opt-auto-004-disable-samba-ad-dc
opt-auto-101-fix-wait-NetworkManager-wait-online
opt-combo-002-final-v300
这些定义只描述已验证测试环境中的实验边界。应用前必须重新运行 opt-inspect,并根据当前硬件、业务角色和功能需求决定是否允许执行。
opt-inspect
0.497 s
11.801 s
11.261 s
0.540 s
4.58%
实验结果受系统版本、硬件、虚拟化、磁盘缓存和后台负载影响,不应直接外推到未测试环境。
ai/ 提供可选的云端 AI 辅助诊断框架。默认规则诊断与正式安全流程不依赖 AI,AI 输出也不能绕过 inspect、人工审批、功能门禁或回滚要求。
inspect
隐私策略位于:
config/ai-privacy-policy.json
默认禁止发送或保留以下内容:
配置真实 API 凭据时,应复制本地模板并限制文件权限:
cp config/ai.env.example config/ai.env chmod 600 config/ai.env
config/ai.env 已被 .gitignore 排除,禁止将真实密钥写入代码、实验归档或公开报告。
config/ai.env
.gitignore
运行项目自检:
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、单轮完整性门禁和正式三对实验结果为准。
以下路径包含运行状态或实验数据:
.okboot/ data/ output/ reports/ optimizer/experiments/*/state/ optimizer/experiments/*/function-check/
公开代码或重新开始全新实验前,可使用:
bash tools/reset-generated-state.sh
该命令会删除采集数据、报告和运行状态,但保留代码、配置、测试、文档和实验定义。它是破坏性操作,执行前必须确认:
.okboot/next-run.env 不存在 .okboot/autocollect.lock 不存在 重要实验数据已经备份
OKBoot 当前主要面向 openKylin、UKUI、LightDM 和 NetworkManager 组合。以下情况必须重新审查策略和探针配置:
.local
项目的优化目标是缩短真实桌面可用路径,同时保持核心功能完整。任何不能通过功能门禁、配对资格或回滚验证的结果,都不应被标记为正式有效优化。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
OKBoot:openKylin 图形桌面启动路径分析与安全优化工具
OKBoot 是一套面向 openKylin + UKUI 图形桌面的启动性能采集、诊断、实验与验证工具。项目不把
systemd-analyze blame中的单元耗时直接视为可获得的优化收益,而是测量从 Linux 内核开始运行,到图形登录界面可操作,再到用户登录后桌面核心功能可用的完整路径。项目当前以以下两套计时组件为正式口径:
OKBoot 将多轮采集、候选诊断、实验生成、自动检查、人工审批、自动应用、功能门禁、A/B 配对验证和自动回滚组织成统一工作流,使启动优化具备 可解释、可审查、可复现、可验证和可撤销 的工程属性。
1. 核心能力
1.1 完整启动路径计时
Complete Boot Path v3.0.0 使用四个关键里程碑描述一次图形桌面启动:
T1:图形登录界面稳定且可操作;T2:用户提交登录后,LightDM PAM 认证开始;T3:用户会话开始;T4:Desktop Ready v2.2.0 判定桌面达到可用状态。人工登录停留区间为
T2 - T1。正式主指标为:该指标保留 PAM 认证、用户会话创建和桌面初始化时间,但排除用户在登录界面等待、输入密码和提交登录产生的人工差异。
1.2 多源启动证据采集
单轮正式采集会整合:
systemd-analyze time / blame / critical-chain / plot;1.3 证据驱动候选诊断
诊断器不会只根据耗时排名生成结论,而是综合判断:
graphical.target或显示管理器关键链;诊断结果同时输出 JSON 和 Markdown,既便于程序继续处理,也便于人工审查。
1.4 自动生成安全实验
对于允许进入实验的候选,工具自动生成独立实验目录。典型目录包含:
fix_wait等审批保护型实验必须完成:应用过程出现部分失败时,生成脚本会尝试执行完整回滚,避免系统停留在不可预测的中间状态。
1.5 正式三对 A/B 实验
正式验证采用固定顺序:
其中 A 为 Baseline,B 为 Optimized。每轮均执行真实重启,配对统计要求:
status=complete;2. 项目架构
主要模块:
okboot.shcollector/guest/collector/system/collector/user-session/collector/host/analyzer/analyzer/user_session/optimizer/verifier/ai/config/data/reports/output/.okboot/tests/docs/3. 运行环境
3.1 建议环境
项目主要使用 Python 标准库,不要求额外安装 Python 第三方包。
3.2 必需系统命令
setup.sh会检查以下核心命令是否存在:以下命令按环境或功能选用:
4. 快速开始
4.1 解压与自检
ZIP 解压可能丢失可执行权限,因此首次运行应先执行:
setup.sh默认只进行项目目录初始化、权限修复、依赖检查以及 Shell、Python、JSON 和实验元数据校验,不修改 systemd 单元状态。4.2 安装桌面采集组件
请以目标桌面用户运行,不要直接以 root 用户执行:
该命令安装桌面就绪探针和用户会话观测组件到当前用户目录。
4.3 安装 Complete Boot Path v3.0.0 系统组件
该命令会:
okboot-login-ready-observer.service;/etc/pam.d/lightdm和系统 unit 前创建备份。PAM marker 使用
auth optional pam_exec.so quiet,不会接收用户密码,并始终以成功状态返回。尽管如此,仍应在测试环境中检查备份和 LightDM 登录功能。4.4 安装后检查
查看全部命令:
5. 基线采集与诊断
5.1 安排一轮重启采集
登录后,已部署的自动采集集成会读取
.okboot/next-run.env并生成本轮数据。如果自动采集未运行,可手动执行:查看本轮完整路径:
有效正式轮次应包含:
按相同方式完成
formal-baseline-002和formal-baseline-003。5.2 汇总三轮 Baseline
请将选定的三轮放入独立目录,避免混入其他历史轮次。例如:
主要输出:
5.3 生成候选诊断
主要输出:
5.4 生成实验目录
查看某个实验的元数据和说明:
6. 安全实验工作流
下面以审批保护型实验为例:
6.1 应用前检查与审批
执行
opt-apply前应确认:6.2 自动应用与状态验证
6.3 安排优化轮采集
登录并等待采集完成后:
功能检查会覆盖显示管理器、DBus、NetworkManager、UKUI 核心组件、输入法、音频、默认路由、DNS 和网络连接状态。
6.4 自动回滚
在回滚和 Baseline 验证完成前,不应开始下一轮基线采集。
7. 六轮正式实验状态机
OKBoot 提供可恢复的 A1-B1-A2-B2-A3-B3 状态机,用于减少手工命名错误、重复使用同一启动数据以及漏做功能检查的风险。
安排 A1:
每次重新登录并等待自动采集完成后执行:
状态机将:
A/B 状态切换不会被状态机静默执行。进入 B 轮前通常需要:
进入下一轮 A 前通常需要:
若实验存在人工检查清单:
六轮完成后生成正式报告:
最终输出位于:
8. 主要数据产物
8.1 单轮运行目录
8.2 关键字段
kernel_ssystemd_total_sgraphical_target_userspace_sboot_to_login_screen_ready_slogin_request_to_desktop_usable_sboot_to_desktop_usable_sadjusted_boot_to_desktop_usable_smanual_login_time_removedboot_path_event_order_validboot_path_pair_eligibleoverall_statuscritical_failure_countcombination_state_status9. 已完成的实验定义
当前仓库包含以下正式实验定义:
opt-auto-001-disable-biometric-authenticationopt-auto-002-disable-bluetoothopt-auto-003-disable-avahi-daemonopt-auto-004-disable-samba-ad-dcopt-auto-101-fix-wait-NetworkManager-wait-onlinefix_waitopt-combo-002-final-v300这些定义只描述已验证测试环境中的实验边界。应用前必须重新运行
opt-inspect,并根据当前硬件、业务角色和功能需求决定是否允许执行。已验证结果摘要
0.497 s,三组方向一致,功能检查 3/3 通过11.801 s降至11.261 s,改善0.540 s(4.58%);两组改善、一组基本持平;功能检查 3/3 通过实验结果受系统版本、硬件、虚拟化、磁盘缓存和后台负载影响,不应直接外推到未测试环境。
10. AI 辅助诊断与隐私
ai/提供可选的云端 AI 辅助诊断框架。默认规则诊断与正式安全流程不依赖 AI,AI 输出也不能绕过inspect、人工审批、功能门禁或回滚要求。隐私策略位于:
默认禁止发送或保留以下内容:
配置真实 API 凭据时,应复制本地模板并限制文件权限:
config/ai.env已被.gitignore排除,禁止将真实密钥写入代码、实验归档或公开报告。11. 开发与验证
运行项目自检:
运行当前正式版本的核心测试:
仓库仍保留部分 v2.1/v2.1.1 兼容实现和兼容性回归测试;这些测试显式调用对应的 legacy 模块。正式 Complete Boot Path v3.0.0 验收以当前版本 targeted tests、单轮完整性门禁和正式三对实验结果为准。
12. 运行状态与数据清理
以下路径包含运行状态或实验数据:
公开代码或重新开始全新实验前,可使用:
该命令会删除采集数据、报告和运行状态,但保留代码、配置、测试、文档和实验定义。它是破坏性操作,执行前必须确认:
13. 重要文档
14. 适用边界
OKBoot 当前主要面向 openKylin、UKUI、LightDM 和 NetworkManager 组合。以下情况必须重新审查策略和探针配置:
.local、mDNS、DNS-SD 或局域网服务发现;项目的优化目标是缩短真实桌面可用路径,同时保持核心功能完整。任何不能通过功能门禁、配对资格或回滚验证的结果,都不应被标记为正式有效优化。