dpkg-deb constrói pacote inválido

0

Eu quero criar um pacote Debian simples contendo um programa em Python ( foo ).

$ ls -R dist/
dist/:
DEBIAN  usr

dist/DEBIAN:
control

dist/usr:
local

dist/usr/local:
bin

dist/usr/local/bin:
foo

$ cat dist/DEBIAN/control 
Package: foo
Version: 0.0.0
Architecture: amd64
Maintainer: ...
Depends: gettext, python-pip, tar
Section: admin
Priority: optional
Description: ...

Quando eu uso o dpkg-deb no Debian 9, um pacote válido é criado:

$ dpkg-deb --version
Debian 'dpkg-deb' package archive backend version 1.18.24 (amd64).
...
$ dpkg-deb -b dist foo.deb
...
$ dpkg-deb -c foo.deb
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/bin/
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo

Mas quando eu uso o mesmo comando no Ubuntu 14.04, o pacote não pode ser instalado:

$ dpkg-deb --version
Debian 'dpkg-deb' package archive backend version 1.17.5 (amd64).
...
$ dpkg-deb -b dist foo.deb
...
$ dpkg-deb -c foo.deb
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./DEBIAN/
-rw-r--r-- gerald/gerald   297 2017-12-28 13:51 ./DEBIAN/control
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/bin/
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/bin/
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/bin/
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/bin/
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo
$ sudo dpkg -i foo.deb
(Reading database ... 430408 files and directories currently installed.)
Preparing to unpack foo.deb ...
Unpacking foo ...
dpkg: error processing archive foo.deb (--install):
trying to overwrite '/DEBIAN/control', which is also in package bar
Errors were encountered while processing:
foo.deb
    
por G. Fiedler 28.12.2017 / 13:29

1 resposta

0

Primeiramente, devo destacar o seguinte: dpkg-deb é uma abordagem hackish para criar um pacote. Ele segue apenas o mínimo e depende de suas bibliotecas de sistema existentes como dependências de construção. Por sua vez, não é um método muito confiável para criar pacotes que você deseja distribuir fora de seu sistema específico por essa razão, entre outros (como dpkg versão e incongruências de requisitos por causa dos padrões Debian requeridos no sistema dado).

É por isso que o Ubuntu Packaging Guide recomenda construir pacotes completamente dentro de pbuilder e seguindo os modelos dh_make para novos pacotes (o que de fato extrai dados do guia de pacotes Debian para alguns bits, heh)

Agora, eu peguei uma abordagem de empacotamento básico very aqui, e fez um pacote muito simples contendo um único script .

Você notará que eu tenho um pouco mais no meu diretório DEBIAN/ . A maioria dos arquivos aqui são arquivos de estoque criados com dh_make como se eu estivesse começando a seguir o guia de embalagem para criar um pacote. No entanto, acabei de renomear debian/ que ele criou para DEBIAN/ , mantive o arquivo install , mas disse especificamente o que eu precisava fazer com a instalação, mantive o arquivo postinst porque estou com preguiça de chmod +x do script antes de instalar (assim, o script postinst irá defini-lo como executável), etc. Você pode verificar os detalhes específicos em seu próprio tempo.

Agora, com o pacote 'structure' acima, em um container 14.04 LXD (porque eu rodei 16.04 em todos os lugares, então as imagens LXD me ajudam a ter versões mais antigas para testar coisas), eu corri dpkg-deb e tive algumas nicenesses:

root@trusty-deb-tests:~/temptests# dpkg-deb -b testingdata-0.0.1/
dpkg-deb: warning: 'testingdata-0.0.1//DEBIAN/control' contains user-defined field 'Build-Depends'
dpkg-deb: warning: 'testingdata-0.0.1//DEBIAN/control' contains user-defined field 'Standards-Version'
dpkg-deb: warning: ignoring 2 warnings about the control file(s)

dpkg-deb: building package 'testingdata' in 'testingdata-0.0.1.deb'.
root@trusty-deb-tests:~/temptests# ls
testingdata-0.0.1  testingdata-0.0.1.deb
root@trusty-deb-tests:~/temptests# dpkg-deb -c testingdata-0.0.1.deb
drwxrwxr-x root/root         0 2017-12-28 15:09 ./
drwxrwxr-x root/root         0 2017-12-28 15:09 ./dist/
-rw-r--r-- root/root        15 2017-12-28 15:09 ./dist/hellothere.sh
root@trusty-deb-tests:~/temptests#

Então, primeiro, acredito que algo é estranho em seu pacote. Mesmo se eu remover tudo, exceto o arquivo de controle do meu lado, ele ainda funcionará corretamente, embora não saiba como gravar arquivos, e não reconheça como gravar no local adequado com o meu 'teste'.

Algo específico para o seu pacote está preso. Eu sugiro que você 'comece' com a linha de base que eu tenho no repositório GitHub que eu criei, e trabalhe seu caminho a partir daí. (Ter o arquivo install dentro da pasta DEBIAN também é uma boa prática para você saber o que está instalando onde).

    
por Thomas Ward 28.12.2017 / 19:02