搜索

3.4. 在 Software Collections 中管理服务

download PDF
在打包软件集合时,请确保用户可以直接管理 Software Collection 提供的任何服务(守护进程),或使用系统默认工具(如 servicechkconfig on Red Hat Enterprise Linux 6)或 systemctl on Red Hat Enterprise Linux 7。
对于 Red Hat Enterprise Linux 6 中的 Software Collections,请确保调整 spec 文件的 %install 部分,以避免与 Software Collection 一部分的服务的系统版本冲突:
%install
install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/rc.d/init.d/%{?scl_prefix}service_name
使用服务的实际名称替换 service_name
对于 Red Hat Enterprise Linux 7 中的 Software Collections,请按如下所示调整 spec 文件的 %install 部分:
%install
install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_unitdir}/%{?scl_prefix}service_name.service
使用这个配置,您可以引用 Software Collection 中包含的服务版本,如下所示:
%{?scl_prefix}service_name
请记住,没有环境变量从用户的环境传播到 SysV init 脚本(或 Red Hat Enterprise Linux 7 上的 systemd 服务文件)。这是预期的,并确保服务始终在干净环境中启动。但是,这需要您为由 SysV 初始化脚本(或 systemd 服务文件)运行的进程正确设置 Software Collection 环境。

3.4.1. 为服务配置环境

建议您使您要为服务启用的软件集合进行配置。本节中的指示演示了如何使软件集合配置名为 software_collection

过程 3.2. 为 Red Hat Enterprise Linux 6 上的服务配置环境

  1. /opt/provider/software_collection/service-environment 中创建包含以下内容的配置文件:
    [SCLNAME]_SCLS_ENABLED="software_collection"
    SCLNAME 替换为软件集合的唯一标识符,例如,您的 Software Collection 使用大写字母编写的名称。
    software_collection 替换为 %scl_name 宏定义的 Software Collection 的名称。
  2. 在 SysV init 脚本的开头添加以下行:
    source /opt/provider/software_collection/service-environment
  3. 在 SysV init 脚本中,确定运行位于 /opt/provider/ 文件系统层次结构中的二进制文件的命令。使用 scl enable $[SCLNAME]_SCLS_ENABLED 为这些命令添加前缀,类似于在 Software Collection 环境中运行命令。
    例如,替换以下行:
    /usr/bin/daemon_binary --argument-1 --argument-2
    使用:
    scl enable $[SCLNAME]_SCLS_ENABLED -- /usr/bin/daemon_binary --argument-1 --argument-2
  4. 有些命令(如 surunuser )也清除环境变量。因此,如果在 SysV init 脚本中使用这些命令,请在运行这些命令后再次启用您的 Software Collection。
    例如,替换以下行:
    su - user_name -c '/usr/bin/daemon_binary --argument-1 --argument-2'
    使用:
    su - user_name -c '\
      source /opt/provider/software_collection/service-environment \
      scl enable $SCLNAME_SCLS_ENABLED -- /usr/bin/daemon_binary --argument-1 --argument-2'

过程 3.3. 为 Red Hat Enterprise Linux 7 中的服务配置环境

  1. /opt/provider/software_collection/service-environment 中创建包含以下内容的配置文件:
    [SCLNAME]_SCLS_ENABLED="software_collection"
    SCLNAME 替换为软件集合的唯一标识符,例如,您的 Software Collection 使用大写字母编写的名称。
    software_collection 替换为 %scl_name 宏定义的 Software Collection 的名称。
  2. 在 systemd 服务文件中添加以下行以载入配置文件:
    EnvironmentFile=/opt/provider/software_collection/service-environment
  3. 在 systemd 服务文件中,使用 scl enable $[SCLNAME]_SCLS_ENABLED,与在 Software Collection 环境中运行命令的 ExecStartPreExecStart 和类似的指令中加上前缀:
    ExecStartPre=/usr/bin/scl enable $[SCLNAME]_SCLS_ENABLED -- /opt/provider/software_collection/root/usr/bin/daemon_helper_binary --argument-1 --argument-2
    ExecStart=/usr/bin/scl enable $[SCLNAME]_SCLS_ENABLED -- /opt/provider/software_collection/root/usr/bin/daemon_binary --argument-1 --argument-2
警告
前缀带有 scl enable ... 的 scl 的命令将阻止服务转换到 SELinux 策略所表示的目标 SELinux 上下文无效。如果使用 SELinux 限制该服务,systemd 服务文件需要直接执行二进制文件。如果二进制文件与作为 Software Collection 一部分的共享库相关联,DT_RUNPATH 属性可帮助在运行时访问这些共享库,而无需使用 scl enable ... wrapper。请参阅 第 3.15.1 节 “Red Hat Enterprise Linux 7 中的 SELinux 支持” 了解更多信息。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.