Skip to content

fix: correct systemd service dependencies and install location#84

Merged
yixinshark merged 1 commit intolinuxdeepin:masterfrom
yixinshark:fix-requisite
Jan 30, 2026
Merged

fix: correct systemd service dependencies and install location#84
yixinshark merged 1 commit intolinuxdeepin:masterfrom
yixinshark:fix-requisite

Conversation

@yixinshark
Copy link
Contributor

  • Fix circular dependency: remove dde-session-initialized.target from Requisite
  • Update startup order: require dde-session-core.target instead of dde-session-pre.target
  • Fix install location: move from default.target.wants to dde-session-initialized.target.wants

Log: correct systemd service dependencies and install location

- Fix circular dependency: remove dde-session-initialized.target from Requisite
- Update startup order: require dde-session-core.target instead of dde-session-pre.target
- Fix install location: move from default.target.wants to dde-session-initialized.target.wants

Log: correct systemd service dependencies and install location
@deepin-ci-robot
Copy link

deepin pr auto review

这段代码修改涉及到了系统服务(systemd service)的依赖关系和启动顺序,主要针对 deepin-service-manager 服务的配置进行了调整。以下是对该 git diff 的详细审查和改进意见:

1. 代码逻辑审查

修改点 1:修改 EXTRA_AFTERREQUISITE 变量

-set(EXTRA_AFTER "dde-session-pre.target")
-set(REQUISITE="Requisite=dde-session-initialized.target dde-session-pre.target")
+set(EXTRA_AFTER "dde-session-core.target")
+set(REQUISITE "Requisite=dde-session-core.target")
  • 分析
    • 原来的逻辑要求服务在 dde-session-pre.target 之后启动,并且强依赖(Requisitedde-session-initialized.targetdde-session-pre.target
    • 新的逻辑将启动顺序要求和强依赖都统一指向了 dde-session-core.target
    • Requisite 指令意味着如果依赖的目标未激活(active),当前服务将启动失败。
  • 潜在风险:将依赖从 dde-session-pre.target(通常在早期阶段)和 dde-session-initialized.target(通常在后期阶段)统一改为 dde-session-core.target(通常在中间阶段),改变了服务的生命周期挂载点。这可能是为了解决循环依赖或优化启动顺序,但必须确保 dde-session-core.target 确实涵盖了 dde-service-manager 所需的所有初始化条件。

修改点 2:修改用户级服务的软链接安装目标

-install_user_symlink(deepin-service-manager.service default.target.wants)
+install_user_symlink(deepin-service-manager.service dde-session-initialized.target.wants)
  • 分析
    • 原来的逻辑将服务启用为 default.target(通常是图形界面的 graphical.target)的依赖,这意味着只要进入图形界面该服务就会启动。
    • 新的逻辑将服务挂载到 dde-session-initialized.target.wants,这意味着该服务现在更紧密地与 Deepin 桌面环境的初始化流程绑定。
  • 逻辑一致性:这个修改与第一处修改形成了一个有趣的对比。第一处修改将 Requisite 改为 dde-session-core.target,而这里却挂载到 dde-session-initialized.target.wants(Wants 通常意味着弱依赖,即使失败也不影响主目标启动)。
    • 疑问:如果服务强依赖 dde-session-core.target(修改点1),为什么安装时却挂载在 dde-session-initialized.targetwants 目录下(修改点2)?通常 RequisiteWantedBy 应该保持一定的逻辑连贯性。

2. 代码质量与规范

  • 命名规范:变量名如 EXTRA_AFTER, REQUISITE 等采用了全大写,符合 CMake 变量命名惯例。
  • 可读性:代码使用了 configure_file 和变量替换,使得模板文件(.in 文件)和构建逻辑分离,这是一个好的实践。
  • 建议:建议在 CMakeLists.txt 中添加注释,说明为什么将依赖关系从 preinitialized 调整为 core,以及为什么软链接目标从 default 改为 dde-session-initialized。这有助于后续维护者理解启动流程的变更意图。

3. 代码性能

  • 影响:Systemd 服务的启动顺序调整对系统启动性能有直接影响。
    • 如果 dde-session-core.target 启动比 default.target 晚,那么 deepin-service-manager 的启动也会相应推迟。
    • 如果 dde-session-core.target 启动失败,由于使用了 Requisitedeepin-service-manager 将直接失败,这可能导致快速报错,而不是挂起等待,这在一定程度上有助于故障排查。

4. 代码安全

  • 安全性:此修改主要涉及启动顺序,不直接涉及内存安全或权限提升问题。
  • 稳定性
    • 关键风险:如果 dde-session-core.target 在某些特殊启动模式下(如安全模式、恢复模式)不激活,或者启动顺序发生变化,deepin-service-manager 可能会因为 Requisite 条件不满足而无法启动。如果该服务负责关键功能(如快捷键、托盘图标等),可能会导致用户体验下降。
    • 建议:确认 dde-session-core.target 是否在所有预期的用户场景下都会被正确激活。如果该服务不是核心阻塞服务,考虑使用 WantsAfter 代替 Requisite,或者保留 dde-session-initialized.target 作为软依赖,以增加系统的鲁棒性。

总结与改进建议

  1. 逻辑一致性检查:请再次确认 Requisite=dde-session-core.targetWantedBy=dde-session-initialized.target 是否存在逻辑冲突。通常,如果一个服务是 Session Core 的一部分,它应该被 Core Wanted;如果是 Session Initialized 的一部分,则应被 Initialized Wanted。

    • 改进建议:如果意图是让服务在 Core 阶段就绪,软链接是否应该改为 install_user_symlink(... dde-session-core.target.wants)?如果意图是让服务在 Initialized 阶段运行,Requisite 是否应该保留或包含 dde-session-initialized.target
  2. 依赖关系确认:确认移除 dde-session-pre.target 的依赖是否安全。如果 deepin-service-manager 需要在某些预初始化脚本运行之前启动,移除此依赖可能导致竞态条件。

  3. 增加容错性

    • 考虑将 Requisite(硬依赖)改为 Wants(软依赖)或 After(顺序依赖),除非该服务绝对必须在 dde-session-core.target 成功后才能运行。
    • 如果必须使用 Requisite,请确保对应的 .in 模板文件中配置了适当的 Restart 策略(如 Restart=on-failure),以防因偶发性启动失败导致服务永久不可用。
  4. 文档化

    • 在提交信息或代码注释中明确说明此次变更的背景(例如:解决启动死锁、优化登录速度等)。

@deepin-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: fly602, yixinshark

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@yixinshark yixinshark merged commit a167910 into linuxdeepin:master Jan 30, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants