如何在RPM规范中预设服务实例

问题描述 投票:0回答:1

我正在构建一个用 RPM 打包的私有应用程序,它将安装在包含以下 .preset 文件语句(例如

enable [email protected] 2 4 12
)的系统上,作为
/etc/systemd/system-preset/reviewer-app.preset
中的管理设置;每个系统指定一组不同的实例。

安装的systemd是

systemd-219-78.el7

我希望在安装“me-backend”RPM 时,正确的“systemctl 预设‘me-backend@*’”能够准确激活管理规定的实例。

此通配符命令行不起作用。它成功(返回 0),但未激活任何服务。我尝试过各种组合,例如“me-backend@*.service”、“me-backend@”,但没有成功。没有实例名称的变体会失败,并显示“无法执行操作:单元名称 [email protected] 缺少实例名称。”,而带有通配符的变体则无需执行任何操作即可成功。

我希望通过创建诸如“/etc/systemd/system/multi-user.target.wants/me-backend”之类的符号链接来启用实例 me-backend@2、me-backend@4 和 me-backend@12 @2.service' 用于 3 项服务中的每一项。

我尝试的另一种方法是“全部预设”,但是这会重置所有已安装应用程序的预设,这对我的包来说是错误的。我认为我的包应该只涉及它提供的服务/实例。

为了在安装时启用此服务的管理预设实例,rpm 规范应运行 systemctl preset 命令的正确语法是什么?

systemd rpm-spec
1个回答
0
投票

我已经从 StackExchange 回答了我自己的相关问题 - 答案是针对 systemd 219 的 RPM(例如 CentOS 7 rpm)不能依赖“systemctlpreset [email protected]”语法,因为 systemd 219 不支持实例预设.

这里问题(“如何编写预设服务实例的 RPM 规范”)的答案是:

步骤1

语法

enable [email protected] 2 4 12
在 CentOS 7 上无效,因为 systemd 219 尚不支持此功能。相反,系统管理员必须使用
me-backend.target
编译指示在本地
Requires=
覆盖文件中列出所需的实例。集成商必须在预设文件中列出
enable me-backend.target

示例

/etc/systemd/system/me-backend.target

[Unit]
Description=Me backend %I-bit
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
Requires= \
  [email protected] \
  [email protected] \
  [email protected]

[Install]
WantedBy=multi-user.target

Integrator 指定在

me-backend.target
中启用
/etc/systemd/system-preset/reviewer-app.preset
预设:

enable me-backend.target

步骤2

RPM 中的开发人员包:

  • [email protected]
    中的
    /usr/lib/systemd/system/[email protected]
    ,描述实例如何启动
  • me-backend.target
    中的
    default
    /usr/lib/systemd/system/me-backend.target
    Requires=
    行上列出了一组合理的默认实例,如上所示:

步骤3

开发人员指定激活

me-backend.target
预设的 scriptlet:

%post
%systemd_post %{name}.target

%preun
%systemd_preun %{name}.target

%postun
%systemd_postun %{name}.target

说明

在 RPM 安装时,安装脚本会执行

systemctl daemon-reload; systemctl preset me-backend.target
,触发集成商的实例列表被启用。

me-backend.target
由集成商作为预设启用,并且
Requires=
是管理员在
me-backend.target
/etc
覆盖中指定的实例。

在未设置预设的系统上,由于发行版的

disable *

,不会启动任何实例

在设置了预设但管理员未在

/etc/.../me-backend.target
覆盖中列出特定实例的系统上,开发人员认为合理的默认实例(即打包的
/usr/lib/.../me-backend.targets
)将启动。

注意: 至少有一个人投票决定关闭此问题,因为它不是一个编程问题。我认为这是一个编程问题,因为 RPM SPEC 文件的内容是开发人员必须提供的安装脚本,并且该问题询问什么是正确的,如发行版所设想的那样,针对特定目标 CentOS 的安装命令在本例中为 7。 相关问题是一个 Unix 问题。它根本不关心 RPM 规格,而是关心某个版本的 systemd 的功能。在这个问题中,开发人员不需要关心 systemd 可以做什么,而是关心如何提供正确的安装。

© www.soinside.com 2019 - 2024. All rights reserved.