SLES15 SP4 |当 %post scriplet 失败并显示“/usr/lib/1sb/install _initd:没有这样的文件或目录”时,rpm 软件包安装失败

SLES15 SP4 |当 %post scriplet 失败并显示“/usr/lib/1sb/install _initd:没有这样的文件或目录”时,rpm 软件包安装失败

我有一个.spec用于安装 rpm 的文件。我在安装后有以下代码片段(%post scriplet)

%post -n %{package_name}
# Enable the service at boot time
%if %{?suse_version:1}0
  /usr/lib/lsb/install_initd %{_initrddir}/%{package_name}
%else
  chkconfig --add %{package_name}
%endi

zypper install package_name安装后阶段失败并出现以下错误:

/var/tmp/rpm-tmp.Z5R29N: line 2: /usr/lib/1sb/install _initd: No such file or directory
warning: %post (package_name.sles15.x86_64) scriptlet failed, exit status 127

我是 rpm 的 .spec 文件新手,但此 scriplet 失败,因为/usr/lib/lsb/SLES 15 SP4 中不存在目录

我的问题是:

  1. 这个脚本到底在做什么?
  2. 从哪里获取此/lsb/包以便我可以在 SLES 15 SP4 中创建此路径?我检查 SLES 15 SP4 是否预装了 lsb-xxx 软件包,但它们在这里不起作用?
  3. 我是否需要在此 scriplet 内对 sles 15 SP4 进行案例检查?喜欢:
%if 0%{?sle_version} == 150400 && 0%{?is_opensuse}
// do somthing
%endif

答案1

该规范非常过时

这个脚本到底在做什么?

该代码片段的作用是将脚本安装到init.d,这些脚本由sysv-init, 在启动时启动服务

自 SLE 12 以来,SUSE(以及大多数其他发行版也已切换)一直在使用systemdinit.d完全过时并保证切换到服务

从哪里获取此 /lsb/ 包以便我可以在 SLES 15 SP4 中创建此路径?我检查 SLES 15 SP4 是否预装了 lsb-xxx 软件包,但它们在这里不起作用?

你不能,现在对这些启动和管理服务的方法的支持非常有限,其中之一是systemd-sysv-generatorsystemd,这是一个解决方案,但如果这是一个重要的软件,我会选择本机解决方案。

但该代码片段永远无法在 SLES 15 上运行,它需要完全重写,因为chkconfig不会也无法运行

我是否需要在此 scriplet 内对 sles 15 SP4 进行案例检查?喜欢:

如果您仍然支持SLE < 12,并且需要保留旧的方式来做到这一点,是的,您可以这样做


如果你想使其原生,你需要做什么:

  • 查找它尝试安装的脚本
  • 使用该脚本作为参考,构建一个Systemd服务单元文件
  • 如果您有源并且可以修改它,请将其添加到源中。如果您没有可修改的源代码,则需要在构建时对其进行修补。
  • 删除该片段并遵循指导(来自 openSUSE,但在 SLE 上工作得很好)将其构建到您的代码中

%if 0%{?sle_version} == 150400 && 0%{?is_opensuse}

仅供参考,这是一个仅匹配 openSUSE Leap 15.4 而不是 SLE 15.4 的条件,这不是问题,因为 Leap 和 SLE 是同一件事,但可能会令人惊讶

相关内容