3.3. 提供 syspaths Subpackages


要使用 Software Collection 的软件包,用户需要执行与使用传统 RPM 软件包时不同的某些任务。例如,它们需要使用 scl enable 调用,它更改环境变量,如 PATHLD_LIBRARY_PATH,以便可以找到在其他位置安装的二进制文件。用户还需要将替代名称用于 systemd 服务。有些脚本也可以使用完整路径调用二进制文件,如 /usr/bin/mysql,因此这些脚本可能无法用于 Software Collection。
解决上述问题的建议解决方案是使用 syspaths 子软件包。基本的概念是允许用户在不影响基本系统安装的情况下消耗同一软件包的不同版本,但可选择使用 Software Collection 软件包,就像它们是传统 RPM 软件包一样,使软件集合更易于使用。
可选的 syspaths 子软件包(如 rh-mariadb102-syspaths)提供安装到标准路径中的 shell 打包程序和符号链接(通常为 /usr/bin/)。这意味着,通过选择安装 syspaths 子软件包,用户会意外地更改基本系统安装,从而使 syspaths 子软件包通常适合不需要安装和运行同一软件包的多个版本。这在使用数据库时尤其如此。
使用 syspaths 子软件包可避免调整 Software Collection 软件包中脚本的需求,以便这些脚本更易于使用。请记住,syspaths 子软件包与基本系统安装中的软件包有冲突,因此无法与 syspaths 子软件包一起安装传统的软件包。如果这是问题,请考虑使用基于容器的技术将 syspaths 子软件包与基本系统安装隔离。

3.3.1. 命名 syspaths Subpackages

对于使用 syspaths 子软件包概念的每个软件集合,通常会提供多个 syspaths 子软件包。每个软件包都提供 syspaths 子软件包,该文件可以通过打包程序或符号链接提供。
在这里,有一个名为 software_collection_1-syspaths 的 Software Collection metapackage 子软件包的子软件包,其中 software_collection_1 是 Software Collection 的名称。software_collection_1-syspaths 子软件包需要其他 syspaths 子软件包包含 Software Collection。安装 software_collection_1-syspaths 子软件包会导致安装所有其他 syspaths 软件包。
例如,如果要为 software_collection_1-package_1 软件包中包含的二进制文件 binary_1 包含,以及一个包含在 software_collection_1-package_2 软件包中的二进制文件 binary_2,然后在 software_collection_1 Software Collection 中创建以下三个 syspaths 子软件包:
software_collection_1-syspaths
software_collection_1-package_1-syspaths
software_collection_1-package_2-syspaths

3.3.2. syspaths Subpackages 中包含的文件

适用于 syspaths 子软件包中的文件是用户与之交互的二进制文件的可执行 shell 打包程序。
以下是 software_collection_1 中包含的二进制文件 binary_1 的示例,位于 /opt/rh/software_collection_1/root/usr/bin/binary_1 中:
#!/bin/bash
source scl_source enable software_collection_1
exec "/opt/rh/software_collection_1/root/usr/bin/binary_1" "$@"
当您在 /usr/bin/binary_1 中安装此打包程序并使它可执行时,用户只需运行 binary_1 命令,而无需将其前缀为 scl enable software_collection_1。安装在 /usr/bin/ 中的打包程序设置正确的环境,并执行位于 /opt/provider/%{scl} 文件系统层次结构的目标二进制文件。

3.3.3. syspaths Wrappers 的限制

syspaths 包装程序是 shell 脚本,意味着用户无法像目标二进制文件一样使用打包程序执行每个可能的任务。例如,当使用 gdb 调试二进制文件时,指向 /opt/provider/%{scl} 文件系统层次结构的完整路径,因为 gdb 无法使用打包程序 shell 脚本。

3.3.5. 没有前缀的服务

systemd 和 SysV init 服务是用户与守护进程服务交互的示例。通常,用户在启动服务时不需要在命令中包含 scl enable,因为服务是由设计在干净的环境中启动的。但是,用户仍需要使用正确的服务名称,通常以 Software Collection 名称作为前缀(如 rh-mariadb102-mariadb)。
syspaths 子软件包允许用户使用服务的传统名称,如 mariadbmongodpostgresql,如果安装了适当的 syspaths 子软件包。为达到此目的,请创建一个符号链接,而不在符号链接名称中包含软件集合名称,指向传统服务文件。
例如,由 /etc/rc.d/init.d/software_collection_1- service_1 文件提供的 software_collection_1 Software Collection 中的服务 service_1 可以作为 service_1 访问:
/etc/rc.d/init.d/service_1 -> /etc/rc.d/init.d/software_collection_1-service_1
或者,在使用 systemd 单元文件时:
/usr/lib/systemd/system/service_1 -> /usr/lib/systemd/system/software_collection_1-service_1
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.