使用ldconfig注册库路径未按预期工作

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

我正在整理一个简单的debian软件包,遇到了我不了解的情况。该软件包具有postinst脚本,该脚本将在/etc/ld.so.conf.d中安装新的库配置路径,并运行ldconfig进行注册。

#!/bin/bash
INSTALL_PREFIX=/opt/acme

if [ "$(ls -A $INSTALL_PREFIX/lib)" ]; then
  echo "INSTALL_PREFIX/lib" > /etc/ld.so.conf.d/acme.conf
  ldconfig
fi
.
.
cp -f $INSTALL_PREFIX/scripts/acme.service /etc/systemd/system/acme.service
systemctl daemon-reload
systemctl enable acme.service
systemctl start acme.service

在服务文件中,它有一行像:

[Service]
ExecStart=/bin/sh -c '/opt/acme/bin/acme_start.sh'

然后在acme_start.sh脚本中运行我的二进制文件。

我看到的是二进制文件由于缺少库依赖项而无法运行(通过从acme_start.sh脚本中启动之前在其上运行ldd进行验证),该依赖项是作为postinst脚本的一部分添加的。如果我在服务上调用重新启动,它将启动而不会出现问题。现在,这是我不明白的事情;如果我打电话给ldconfig -v > /dev/null而不只是ldconfig,则它可以正常工作,并且服务将在安装后立即启动。

ldconfig simple的手册页指出-v选项用于详细。也可以在安装后手动启动它,而无需任何进一步干预,这表明安装按预期进行。

关于ldconfig调用后为什么我的库路径不立即可用,而在ldconfig -v调用后却没有立即可用的库路径,我是否有明显的缺憾?

我正在整理一个简单的debian软件包,遇到了我不了解的情况。该软件包具有postinst脚本,该脚本将在/ etc / ld中安装新的库配置路径。...

linux shared-libraries systemd
1个回答
0
投票
if [ "$(ls -A $INSTALL_PREFIX/lib)" ]   #1
then
  echo "INSTALL_PREFIX/lib" > /etc/ld.so.conf.d/acme.conf  #2
  ldconfig
fi
© www.soinside.com 2019 - 2024. All rights reserved.