저는 포장에 전혀 익숙하지 않기 때문에 숙련된 포장업자에게 당연한 것을 묻는다면 용서해주세요...
내 패키지에 모든 종속성이 올바르게 언급되었는지 어떻게 확인할 수 있나요?
library-xyz
내 응용 프로그램이 기본적으로 설치되지 않은 lib를 사용한다고 가정해 보겠습니다 . 패키지를 빌드하고 개발 중인 컴퓨터에 설치하면 library-xyz
이미 설치되어 있으므로 종속성으로 언급하지 않더라도 프로그램은 계속 올바르게 실행됩니다. 그러나 우분투를 새로 설치한 다른 사용자는 설치되지 않았 library-xyz
으며 프로그램이 충돌할 가능성이 높습니다.
지금 테스트하고 있는 방식은 VM에서 새로운 우분투 설치를 실행하고 거기에 패키지를 설치하는 것인데, 일반적인 문제인 것 같아서 동일한 철학을 채택하는 더 나은 테스트 방법이 있는지 궁금합니다 chroot
. - 파일 시스템의 일부를 "잘라내는" 대신 깨끗한 우분투 설치에서 "기본"이 아닌 설치된 패키지를 모두 "잘라냅니다".
저는 파이썬 프로그램을 패키징하고 있습니다.
답변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
어쨌든 도움이 될 수 있습니다.