Ubuntu에서 checkinstall을 사용하여 Deb 파일을 Debian 기반 Docker 컨테이너에 빌드하고 설치합니다.

Ubuntu에서 checkinstall을 사용하여 Deb 파일을 Debian 기반 Docker 컨테이너에 빌드하고 설치합니다.

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 컨테이너에서 패키지를 다시 빌드하는 것을 의미합니다.

관련 정보