有沒有辦法測試我建立的套件是否具有正確的依賴關係?

有沒有辦法測試我建立的套件是否具有正確的依賴關係?

我對包裝完全陌生,所以如果我對經驗豐富的包裝商提出一些顯而易見的問題,請原諒我...

我如何確定我的套件中正確提及了所有依賴項?

假設我的應用程式使用library-xyz預設未安裝的 lib。如果我建立該軟體包並將其安裝在我的開發電腦上,library-xyz則該軟體包已安裝,因此 - 即使我未能將其作為依賴項提及 - 程式仍將正確運行。但是另一個全新安裝 ubuntu 的用戶不會library-xyz安裝,而且程式可能會崩潰。

我現在測試的方式是在虛擬機中運行一個新的 ubuntu 安裝並在那裡安裝軟體包,但由於這似乎是一個常見問題,我想知道是否有更好的測試方法,採用相同的理念,chroot但-不是「刪除」檔案系統的某些部分,而是「刪除」所有那些在乾淨的ubuntu 安裝中不是「預設」的已安裝軟體包。

我正在打包 python 程式。

答案1

lintian程式在使用建置包後運行debuild,並在構建二進制包時警告您缺少庫。該ldd命令可用於檢查套件需要哪些庫。

我使用以下腳本快速獲取庫包依賴項:

#!/bin/sh
# Save it as executable ~/bin/pkglibs
# Usage: pkglibs directory
#        pkglibs file
list_lib_pkgnames() {
    local lib="$1" libs
    # get the libraries for given "$lib", stripping out linker libraries
    libs=$(ldd "$lib" | awk '/=/{print $1}' | grep -vE '^(linux-vdso|linux-gate)\.so\.1$')
    # if there are libraries, find the matching packages for it
    [ -n "$libs" ] && dpkg -S $libs | sed 's/: .*//'
}
search="$1"
if [ -d "$search" ]; then
    # for directories, recursively search for library dependencies
    find "$search" -type f -exec "$0" {} \; | sort -u
else
    list_lib_pkgnames "$search"
fi

對於大型目錄,該命令可能需要一段時間,因為它會單獨測試每個檔案。可以對其進行最佳化,首先產生庫列表,然後將唯一條目傳遞給命令dpkg -S,但這對讀者來說是一個練習。

例:pkglibs /usr/lib/mesa/

ia32-libs
lib32gcc1
lib32stdc++6
libc6
libc6-i386
libdrm2
libgcc1
libstdc++6
libx11-6
libxau6
libxcb1
libxdamage1
libxdmcp6
libxext6
libxfixes3
libxxf86vm1

答案2

正如我在上面關於pbuilder 的評論中所解釋的,它主要用於驗證構建依賴項(類似於將包上傳到啟動板PPA),但對於檢查依賴項沒有用處,除非您在打包腳本中添加一些額外的步驟(例如運行單元)測試。

另一個類似的解決方案(在受限環境中執行測試),如果您只是考慮對 python 程式庫的依賴關係,則會建立一個虛擬環境這樣您就可以控制測試期間可用的 python 函式庫。在執行測試時使用多個 python 版本管理虛擬環境的一個有用工具是毒性

這不會在文件中添加依賴項debian/control,但無論如何可能會有所幫助。

相關內容