Ubuntu 22.04 노트북에서 C++ 소프트웨어를 컴파일하여 checkinstall
설치하는 데 사용했습니다. 그러면 해당 .deb
파일이 빌드됩니다. 괜찮습니다.
.deb
하지만 이제 해당 파일을 "Debian GNU/Linux 11 (bullseye)" 기반 도커 컨테이너에 설치 하려고 하는데 dpkg
다음 오류가 표시됩니다:
# dpkg --install mypackage-8.0.0_20221030-1_amd64.deb
dpkg-deb: error: archive 'mypackage-8.0.0_20221030-1_amd64.deb' uses unknown compression for member 'control.tar.zst', giving up
dpkg: error processing archive mypackage-8.0.0_20221030-1_amd64.deb (--install):
dpkg-deb --control subprocess returned error exit status 2
Errors were encountered while processing:
mypackage-8.0.0_20221030-1_amd64.deb
.deb
소프트웨어를 컴파일하지 않고 이 파일을 컨테이너에 설치하려면 어떻게 해야 합니까?다시(이는 모든 C++ 빌드 도구를 내 컨테이너에 설치한다는 의미인데, 이를 피하고 싶습니다...)?
답변1
dpkg
데비안에서zstd
압축은 지원되지 않습니다.. 데비안에서 패키지를 추출하려면, 패키지를 변환해야 합니다:
성분 추출:
ar -x mypackage-8.0.0_20221030-1_amd64.deb
압축을 푼다:
zstd -d control.tar.zst zstd -d data.tar.zst
다시 압축합니다.
xz control.tar xz data.tar
패키지를 다시 만듭니다.
rm mypackage-8.0.0_20221030-1_amd64.deb ar -rc mypackage-8.0.0_20221030-1_amd64.deb debian-binary control.tar.xz data.tar.xz
dpkg
그러면 데비안이 최소한 처리할 수 있는 패키지가 생성됩니다 . 패키지가 Ubuntu 22.04를 기반으로 구축되었으므로 종속성 문제가 발생하기 쉽습니다.
최상의 결과를 얻으려면 실행하려는 플랫폼에서 패키지를 빌드해야 합니다. 귀하의 경우 이는 ubuntu:22.04
컨테이너의 기본 이미지로 사용하거나 Debian 11 컨테이너에서 패키지를 다시 빌드하는 것을 의미합니다.