Como eu faço / extrai / modifico a origem de um pacote e empacotei-o?

5

Eu tenho um pacote que tem bug, e eu preciso modificá-lo e reembalá-lo, então é assim que eu estou fazendo. Existe algum outro método rápido?

  1. Listar / visualizar apenas (arquivos ou aplicativos de drivers)

    ar tv DesktopVideo-8.0.1-amd64.deb
    rw-r--r-- 0/0      4 Sep 25 07:35 2011 debian-binary
    rw-r--r-- 0/0 14942208 Sep 25 07:35 2011 control.tar.gz
    rw-r--r-- 0/0    102 Sep 25 07:35 2011 data.tar.gz
    
  2. Extrair

    ar x DesktopVideo-8.0.1-amd64.deb
    control.tar.gz  data.tar.gz debian-binary
    
  3. Extraia tar.gz

    tar xvfz control.tar.gz
    tar xvfz data.tar.gz
    ;; modify my codes and updates
    
  4. Reembalar / reconstruir isso de volta

    mkdir -p debian/DEBIAN
    ; step 1
    cp -R ./debian-binary debina/DEBIAN
    cp -R ./control debian/DEBIAN
    cp -R ./control debian/DEBIAN
    cp -R ./control debian/DEBIAN
    ; step 2
    cp -R ./etc debian/DEBIAN
    cp -R ./usr debian/DEBIAN
    
  5. Crie .DEB agora

    ; this is how the skeleton look like before applying --build
    root@desktop:~/Downloads/test# ls
    control.tar.gz  data.tar.gz  debian  debian-binary  etc  usr
    
    root@desktop:~/Downloads/test# dpkg-deb --build debian
    dpkg-deb: building package 'desktopvideo' in 'debian.deb'.
    

- falhou

# dpkg -i DesktopVideo-8.0.1-amd64.deb
dpkg: error processing DesktopVideo-8.0.1-amd64.deb (--install):
 unable to open file '/var/lib/dpkg/tmp.ci//etc': Is a directory
Errors were encountered while processing:
 DesktopVideo-8.0.1-amd64.deb
    
por YumYumYum 25.09.2011 / 13:47

3 respostas

5

Se ainda não o fez, instale as ferramentas de compilação: sudo apt-get install build-essential

Você pode usar o comando apt-get source DesktopVideo para puxar a origem, os diffs e todos os outros arquivos de empacotamento associados a esse deb no diretório atual. A partir daí aplique o seu patch, adicione uma nova entrada no arquivo de log dch -i , então use o fakeroot e o dpkg para criar o pacote dpkg-buildpackage -rfakeroot -us -uc

    
por Marco Ceppi 25.09.2011 / 15:32
3

É tecnicamente possível fazer o que você está tentando fazer, mas é preciso ter muito mais cuidado do que parece. É difícil saber o que você fez de errado porque você não copiou e colou tudo que digitou. Eu vejo um erro de digitação ( cp -R ./debian-binary debina/DEBIAN , você obviamente não está relatando exatamente o que fez), e um erro ( cp -R não preserva propriedade e permissões, você precisaria de cp -Rp ou cp -a como root).

A melhor maneira de modificar um pacote é obter a origem do pacote ( apt-get source DesktopVideo ). Modifique a fonte e adicione uma entrada ao changelog do pacote, alterando o número da versão para que sua versão seja diferente do número da versão oficial. Veja um exemplo dos passos envolvidos (trabalho Debian e Ubuntu identicamente a este respeito).

Se você não tem a fonte ou não quer recompilar, você pode instalar o pacote, então use dpkg-divert para mover o (s) arquivo (s) defeituoso (s) e substituí-lo pela sua própria versão. dpkg-divert diz ao gerenciador de pacotes para colocar um arquivo de um determinado pacote em um local diferente. Aqui é um exemplo de seu uso .

Se você não tiver a origem do pacote e precisar implantar uma correção em várias máquinas, poderá instalar o pacote, modificar o arquivo com bugs e construir um novo pacote com dpkg-repack . É mais um ato de desespero do que uma maneira robusta de gerenciar pacotes; Eu recomendo remendar o código-fonte e implantar seu pacote compilado em casa, se possível.

    
por Gilles 25.09.2011 / 16:35
2

Você deve conseguir recuperar a origem do pacote (você só tem o binário) com apt-get -d source packagename . Então você pode mexer nele e usar debuild para construí-lo novamente.

    
por Martin Ueding 25.09.2011 / 15:32

Tags