ビルドしたパッケージの依存関係が正しいかどうかをテストする方法はありますか?

ビルドしたパッケージの依存関係が正しいかどうかをテストする方法はありますか?

私はパッケージングに関して全くの初心者なので、経験豊富なパッケージング担当者にとっては当たり前の質問をしているかもしれませんがご容赦ください...

パッケージ内のすべての依存関係が正しく記載されているかどうかを確認するにはどうすればよいですか?

たとえば、私のアプリケーションはlibrary-xyz、デフォルトではインストールされていない lib を使用するとします。パッケージをビルドして開発マシンにインストールすると、library-xyzすでにインストールされているため、依存関係として指定し忘れた場合でも、プログラムは正常に実行されます。ただし、Ubuntu を新規インストールした別のユーザーはインストールしていないためlibrary-xyz、プログラムがクラッシュする可能性があります。

私が現在テストしている方法は、VM で実行している新しい 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 に関する上記のコメントで説明したように、これは主にビルド​​の依存関係を確認するのに役立ちます (パッケージを Launchpad PPA にアップロードするのと同様)。ただし、ユニット テストの実行など、パッケージ スクリプトに追加の手順を追加しない限り、依存関係を確認するのには役立ちません。

制限された環境でテストを実行するという同様の解決策は、Pythonライブラリへの依存関係のみを検討している場合、仮想環境テスト中に利用可能なPythonライブラリを制御できるようにします。テストの実行中に複数のPythonバージョンを使用して仮想環境を管理するのに役立つツールの1つは、毒性

これによってファイルに依存関係が追加されるわけではありませdebian/controlんが、いずれにしても役立つ可能性があります。

関連情報