우리는 데비안 패키지로 출시하는 소프트웨어 프로젝트를 가지고 있습니다. 프로젝트에는 가 포함된 debian/ 폴더가 있습니다 changelog compat control copyright rules
. 다음 명령을 사용하여 debian 패키지를 만듭니다.
dpkg-buildpackage -us -uc -b --changes-option=-u./dist
출력 스트림을 인쇄합니다. 프로세스의 다음 단계에서 우리가 알아야 할 것은 생성된 .deb 파일의 이름뿐입니다.
나는 데비안이 예측 가능한 파일 이름 구조를 가지고 있다는 것을 알고 있지만 [package name]_[version]_[architecture].deb
어쨌든 이러한 매개변수를 얻을 수 있는 방법이 없습니다.
debian 폴더를 검색하여 가능한 패키지 이름을 생성할 수 있는 또 다른 dpkg 명령이 있어야 합니까?
답변1
지적하신 대로 생성된 .deb
파일은 모두 공통 형식인 ${package}_${version}_${arch}.deb
.
패키지 이름은 Package:
;의 항목에서 유래합니다. debian/control
전체 빌드의 경우 각 항목에 대해 하나의 파일이 .deb
생성됩니다 . Package:
다음을 사용하여 값을 검색할 수 있습니다.
awk '/^Package:/ { print $2 }' debian/control
버전의 기본값은 debian/changelog에 지정된 값입니다. 다음을 사용하여 추출할 수 있습니다.
dpkg-parsechangelog -S version
(빌드는 다른 버전을 지정할 수 있지만 이는 일반적이지 않습니다.)
결국 아키텍처는 all
( Architecture: all
패키지의 경우) 또는 빌드 시스템의 기본 아키텍처(다른 경우에는 Architecture:
일반적 으로 Architecture: any
)가 됩니다. 다음을 사용하여 빌드 시스템의 아키텍처를 결정할 수 있습니다.
dpkg-architecture -qDEB_BUILD_ARCH
(엄밀히 말하면 이어야 -qDEB_HOST_ARCH
하지만 일반적으로 BUILD
와 는 HOST
동일합니다. 여기서도 크로스 컴파일을 무시합니다. 문제가 되면 DEB_TARGET_ARCH
대신 을 사용하세요 DEB_BUILD_ARCH
.)
control
따라서 완전히 일반적인 솔루션의 경우 어떤 패키지가 어떤 아키텍처에 적용되는지 확인하기 위해 파일을 구문 분석해야 합니다 . control
파일이 하나의 패키지만 빌드하는 경우에는 이것이 필요하지 않습니다.
dpkg-parsechangelog
포장으로 dpkg-architecture
제공됩니다 dpkg-dev
.
답변2
이것은dpkg 이름:
$dpkg-name foo.deb
dpkg-name: info: moved 'foo.deb' to './feature-dev_1.4.177_armhf.deb'
foo
DEBIAN/ 상위 디렉토리에서 가져온 원래 이름