Building .deb on Alpine

0

Sou muito novo no Linux em geral e estou tentando encontrar uma maneira de criar um pacote Debian em uma imagem do docker da Alpine. É de longe o mais rápido que posso executar meu pipeline, mas infelizmente quando tento executar dpkg-deb --build , recebo o seguinte erro:

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

Eu tentei empacotar no Dockerfile a seguir:

FROM alpine
RUN apk add --no-cache dpkg openjdk8

Existe alguma maneira de construir um pacote Debian nesta distro que seja compatível com outras distribuições, por exemplo? meu ambiente de desenvolvimento do Ubuntu?

    
por hochas 15.06.2018 / 08:45

1 resposta

4

O melhor ambiente para compilar os pacotes Debian é sempre um ambiente baseado em Debian. Embora os contêineres baseados em Alpine sejam bons devido ao tamanho pequeno e aos tempos de configuração rápidos, eles introduzem vários problemas, dois dos quais são particularmente problemáticos:

  • eles usam Busybox, onde os pacotes Debian dependem das variantes GNU da maioria das ferramentas ( por exemplo, tar como você descobriu);
  • o mais importante, eles usam musl, onde o padrão Debian é glibc.

Ambos podem ser trabalhados, mas quando você faz isso você perdeu a vantagem de um pequeno container Alpine, comparado a um container Debian mínimo (como bitnami/minideb as você mencionou).

Observe que, se você estiver executando um derivado do Debian em seus sistemas de desenvolvimento e / ou compilação, poderá pular o estágio do contêiner completamente, enquanto ainda estiver usando um ambiente de compilação contido, usando pbuilder . Para velocidade máxima, monte um tmpfs em /var/cache/pbuilder/build e execute a compilação com eatmydata . sbuild e cowbuilder também vale a pena investigar, especialmente se você costuma criar pacotes semelhantes.

Como um aparte, em vez de criar pacotes binários usando dpkg-deb -b , eu altamente recomendo aprender como construir pacotes fonte; começar com o pacote pragmático do Debian de Vincent Bernat, é legal e fácil.

    
por 15.06.2018 / 09:46