簡體   English   中英

可執行文件在 apt 安裝階段找不到共享庫

[英]Executable can't find shared library during apt install phase

這是我正在運行的命令,用於從我創建的虛擬存儲庫安裝 Debian 包。 這個 repo 有一個包含共享庫的庫 A和一個庫 B ,它在 Debian 的 postinst 部分啟動使用這個共享庫的可執行文件。 庫 B 依賴於庫 A(通過 Debian 的control文件)。 A庫和B庫都是我打包的。

apt-get -o Dir::Etc::SourceList="${VIRTUAL_REPO_PATH}/upgrade.list" -o Debug::pkgProblemResolver=yes -o Dir::Etc::SourceParts="/dev/null" -o Dir::State::Lists="${VIRTUAL_REPO_PATH}/lists" -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install ${VIRTUAL_REPO_PATH}/${COMPONENT_DEB}*.deb -y --allow-unauthenticated

我已將觸發器文件添加到庫 A 的 Debian 中,並帶有此處提到的“ activate-noawait ldconfig ”行。

庫 A 的 Debian 有 3 個文件(使用dpkg-deb --control..提取):control、postinst、triggers。

后勤

#! /bin/sh

set -e

if [ "$1" = "configure" ]; then
        ldconfig
fi

觸發器

activate-noawait ldconfig

在 dpkg.log 中,我可以看到庫 A 是在庫 B 之前安裝和配置的。

2021-04-16 08:54:16 configure libsigar:amd64 1.7.0-fs1 <none>
2021-04-16 08:54:16 status unpacked libsigar:amd64 1.7.0-fs1
2021-04-16 08:54:16 status half-configured libsigar:amd64 1.7.0-fs1
2021-04-16 08:54:16 status installed libsigar:amd64 1.7.0-fs1

庫 B的 postinst 中,我正在啟動可執行文件,並且在給定的時間它error while loading shared libraries: A: cannot open shared object file: No such file or directory 如果我在安裝后立即啟動可執行文件,一切正常。 我試圖從啟動可執行文件的那一刻開始注釋掉 postinst 腳本並手動執行該部分 - 沒有任何問題。

我還在可執行文件啟動之前添加了對 postinst 的 ldconfig 調用,但沒有運氣。

有誰知道是什么原因?

我找到了根本原因。 看來我必須在調用 postinst 之前在 package 中創建一個符號鏈接(libsigar.so.0 -> libsigar.so)。 否則即使 ldconfig 也不夠。

運行時庫 package 應包括 ldconfig 將為共享庫創建的 SONAME 的符號鏈接。 例如,libgdbm3 package 應該包含從 /usr/lib/libgdbm.so.3 到 libgdbm.so.3.0.0 的符號鏈接。 這是必需的,以便動態 linker(例如 ld.so 或 ld-linux.so.*)可以在 dpkg 安裝它的時間和 ldconfig 在 postinst 腳本中運行的時間之間找到庫。 [59]

http://www.chiark.greenend.org.uk/doc/debian-policy/policy.html/ch-sharedlibs.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM