저는 일반적으로 Linux를 처음 접했고 Alpine 도커 이미지에서 데비안 패키지를 빌드하는 방법을 찾으려고 노력하고 있습니다. 이것은 지금까지 파이프라인을 실행할 수 있는 가장 빠른 속도이지만 불행히도 실행하려고 하면 dpkg-deb --build
다음 오류가 발생합니다.
03:22:44 dpkg-deb: building package 'x-sync' in 'x-sync_1.0.2.deb'.
03:22:44 tar: unrecognized option: format=gnu
03:22:44 BusyBox v1.27.2 (2018-01-29 15:48:57 GMT) multi-call binary.
03:22:44
03:22:44 Usage: tar -[cxtZzJjahmvO] [-X FILE] [-T FILE] [-f TARFILE] [-C DIR] [FILE]...
03:22:44
03:22:44 Create, extract, or list files from a tar file
03:22:44
03:22:44 Operation:
03:22:44 c Create
03:22:44 x Extract
03:22:44 t List
03:22:44 f Name of TARFILE ('-' for stdin/out)
03:22:44 C Change to DIR before operation
03:22:44 v Verbose
03:22:44 Z (De)compress using compress
03:22:44 z (De)compress using gzip
03:22:44 J (De)compress using xz
03:22:44 j (De)compress using bzip2
03:22:44 a (De)compress using lzma
03:22:44 O Extract to stdout
03:22:44 h Follow symlinks
03:22:44 m Don't restore mtime
03:22:44 exclude File to exclude
03:22:44 X File with names to exclude
03:22:44 T File with names to include
03:22:44 dpkg-deb: error: subprocess tar -cf returned error exit status 1
다음 Dockerfile을 패키징하려고 합니다.
FROM alpine
RUN apk add --no-cache dpkg openjdk8
다른 배포판(예: Ubuntu 개발 환경)과 상호 호환되는 Debian 패키지를 이 배포판에 빌드할 수 있는 방법이 있나요?
답변1
Debian 패키지를 빌드하는 데 가장 적합한 환경은 항상 Debian 기반 환경입니다. Alpine 기반 컨테이너는 작은 크기와 빠른 설정 시간에 적합하지만 여러 가지 문제도 제시하며 그 중 두 가지는 특히 골치 아픈 문제입니다.
- 그들은 데비안 패키지가 대부분의 도구의 GNU 변형에 의존하는 Busybox를 사용합니다(예를 들어
tar
당신이 발견한 대로); - 가장 중요한 것은 musl을 사용하는 반면 데비안은 기본적으로 glibc를 사용한다는 것입니다.
이 둘할 수 있는해결될 수 있지만 그렇게 하면 최소 데비안 컨테이너(예: 언급한 것)에 bitnami/minideb
비해 작은 Alpine 컨테이너의 이점을 잃게 됩니다 .
개발 및/또는 빌드 시스템에서 Debian 파생 제품을 실행하는 경우 다음을 사용하여 포함된 빌드 환경을 계속 사용하면서 컨테이너 단계를 완전히 건너뛸 수 있습니다.pbuilder
. 최대 속도를 얻으려면 tmpfs를 설치한 /var/cache/pbuilder/build
다음 다음을 사용하여 빌드를 실행하세요.eatmydata
.sbuild
그리고cowbuilder
특히 정기적으로 유사한 패키지를 빌드하는 경우에는 살펴볼 가치가 있습니다.
그런데 dpkg-deb -b
저는 다음을 사용하여 바이너리 패키지를 빌드하지 않습니다.높은Vincent Bernat로 시작하여 소스 패키지를 빌드하는 방법을 배우는 것이 좋습니다.실용적인 데비안 패키징, 아름답고 간단합니다.